{"version":3,"file":"image.js","names":["_parseURL","imageUrl","splittedURL","split","urlPart","paramsPart","_getTag","img","tagName","toLowerCase","getAttributesOfNewImage","origFormat","match","slice","imageFormat","replace","imageOriginalFormat","replaceImageAttributes","imgSrc","originalImg","newUrl","initialUrl","RegExp","url","format","changeImage","imageToUpdate","originalImageData","newImageSrc","tag","updatedData","originalImgUrl","baseUrl","updateAttr","attr","srcset","setAttribute","src","a","getAttributesOfOriginalImage","image","imageSrc","getAttribute","replaceImageSource","element","pattern","replacement","picture","parentElement","nodeName","querySelectorAll","forEach","source","getVideoThumbnail","videoURL","Promise","resolve","canvas","document","createElement","video","muted","autoplay","onloadeddata","ctx","getContext","width","videoWidth","height","videoHeight","drawImage","pause","toDataURL","setters","execute"],"sources":["toolbox/image.js"],"sourcesContent":["/**\n * Library is used for work with images\n */\n\n/**\n * Split URL into basepath and params parts. Returns info as object\n * @param {object} imageUrl - source of image\n * @return {object} - basepath and params\n */\nfunction _parseURL(imageUrl) {\n const splittedURL = imageUrl.split('?') || [];\n const urlPart = splittedURL[0] || '';\n const paramsPart = splittedURL[1] || '';\n return { urlPart, paramsPart };\n}\n\n/**\n * Returns HTML tag name of HTML element\n * @param {HTMLElement} img - Image element\n * @returns {string} - get tag type\n */\nfunction _getTag(img) {\n return img ? img.tagName.toLowerCase() : '';\n}\n\n/**\n * Prepare object with attributes of new image which should be shown.\n * @param {string} imageUrl - source of new image\n * @return {object} - config object that could be used to replace img attr string\n */\nexport function getAttributesOfNewImage(imageUrl) {\n const { urlPart, paramsPart } = _parseURL(imageUrl);\n let origFormat = paramsPart ? paramsPart.match(/sfrm=\\w+/g) : '';\n origFormat = origFormat ? (origFormat[0]).slice(5) : '';\n let imageFormat = urlPart && urlPart.match(/(\\.\\w+)$/);\n imageFormat = imageFormat ? (imageFormat[0]).slice(1) : '';\n\n return {\n imageFormat,\n imageUrl: urlPart.replace(/(\\.\\w+)$/, ''),\n imageOriginalFormat: origFormat,\n };\n}\n/**\n * Prepare object with initial image attributes. It would be used as template for replace.\n * @param {HTMLElement} image - link to DOM-node of the image\n * @return {object} - object with image attributes strings and baseUrl\n */\nexport function getAttributesOfOriginalImage(image) {\n const imageSrc = image.getAttribute('src');\n const { urlPart } = _parseURL(imageSrc);\n return {\n srcset: image.getAttribute('srcset'),\n src: imageSrc,\n baseUrl: urlPart.replace(/(\\.\\w+)$/, ''),\n };\n}\n\n/**\n * Update attributes of imageUrl with new attributes passed as parameters.\n * @param {string} imgSrc - initial string parts of what would be replaced\n * @param {object} originalImg - originalImg data\n * @param {string} newUrl - url of the image in full path without image extension\n * @param {string} imageOriginalFormat - original format of the image\n * @return {string} - attribute string with changed image URL\n */\nexport function replaceImageAttributes(imgSrc, originalImg, newUrl) {\n const initialUrl = new RegExp(originalImg.url, 'g');\n imgSrc = imgSrc.replace(initialUrl, newUrl);\n\n if (originalImg.format !== '') {\n imgSrc = imgSrc.replace(/&sfrm=\\w+/g, `&sfrm=${originalImg.format}`);\n }\n return imgSrc;\n}\n/**\n * Returns HTML tag name of HTML element\n * @param {HTMLElement} imageToUpdate - Element to be updated\n * @param {Object} originalImageData - Data of the image URL\n * @param {string} newImageSrc - Source of the new image\n */\nexport function changeImage(imageToUpdate, originalImageData, newImageSrc) {\n const tag = _getTag(imageToUpdate);\n if (tag === 'img' && newImageSrc) {\n const updatedData = getAttributesOfNewImage(newImageSrc);\n const originalImgUrl = originalImageData.baseUrl;\n /**\n * Update image attributes\n * @param {string} attr -\n * @returns {string} - URL of the replaced image\n */\n const updateAttr = function updateAttr(attr) {\n return replaceImageAttributes(\n attr,\n {\n url: originalImgUrl,\n format: updatedData.imageFormat,\n },\n updatedData.imageUrl,\n );\n };\n\n // In case of images without source sets (ex: placeholder), do not perform setting of 'srcset' attribute\n if (originalImageData.srcset) {\n imageToUpdate.setAttribute('srcset', updateAttr(originalImageData.srcset));\n }\n\n imageToUpdate.setAttribute('src', updateAttr(originalImageData.src));\n }\n}\n/**\n * Replace image source\n * Replace all mathers of pattern with replacement for image.\n * This support img and picture tag.\n * For picture tag updates srcset attribute of source nodes.\n * For img tag updates srcset and src attributes.\n * @param {HTMLElement} element - img element\n * @param {String} pattern - search pattern\n * @param {String} replacement - replacement string\n */\nexport function replaceImageSource(element, pattern, replacement) {\n const picture = element.parentElement;\n // check if we have a picture over img element\n if (picture.nodeName === 'PICTURE') {\n // replace srcset for all source tags\n picture.querySelectorAll('source').forEach((source) => {\n source.setAttribute('srcset', source.getAttribute('srcset').replace(new RegExp(pattern, 'g'), replacement));\n });\n }\n\n // update img tag\n changeImage(element, {\n baseUrl: pattern,\n src: element.getAttribute('src'),\n srcset: element.getAttribute('srcset'),\n }, replacement);\n}\n\n/**\n * Returns video thumbnail URL on resolve\n * @param {String} videoURL video source URL\n * @returns {Promise} returns video thumbnail URL on resolve\n */\nexport function getVideoThumbnail(videoURL) {\n return new Promise((resolve) => {\n const canvas = document.createElement('canvas');\n const video = document.createElement('video');\n\n video.muted = true;\n video.autoplay = true;\n video.src = videoURL;\n\n video.onloadeddata = () => {\n const ctx = canvas.getContext('2d');\n\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n\n ctx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n video.pause();\n return resolve(canvas.toDataURL('image/png'));\n };\n });\n}\n"],"mappings":"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","ignoreList":[]}