{"version":3,"sources":["novicell.dynamic-image.js","lazy-images.js","novicell.debounce.js"],"names":["isSupportWebP","callback","webP","Image","src","onload","onerror","height","novicell","dynamicImage","getUrl","el","baseUrl","getAttribute","heightRatio","parentWidth","parentNode","innerWidth","offsetWidth","parentHeight","innerHeight","offsetHeight","width","nextQuerySign","queryUrl","url","indexOf","queryObjStr","queryObj","JSON","parse","Object","keys","forEach","key","debounce","func","wait","immediate","timeout","context","this","args","arguments","later","apply","callNow","clearTimeout","setTimeout","lastRefreshWidth","refreshWidth","window","lazySizesConfig","expand","undefined","lazyload","e","preventDefault","defineProperty","get","target","preventLoad","classList","contains","setMeasuredUrl","setSrcSet","hasAttribute","setSrc","setBg","bool","useWebp","style","backgroundImage","visibility","query","srcset","split","newSrcset","trim","bp","newSrc","push","setAttribute","join","checkImages","loadedElements","Array","prototype","slice","call","document","body","querySelectorAll","length","map","remove","add","addEventListener"],"mappings":"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","file":"lazyload.min.js","sourcesContent":["'use strict';\r\n\r\n/**\r\n* @name Novicell Dynamic Image\r\n* @author Jonas Havmøller & Danni Larsen\r\n*/\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.dynamicImage = novicell.dynamicImage || function () {\r\n\r\n function getUrl(el) {\r\n var pixelInterval = 50;\r\n var baseUrl = el.getAttribute('data-src');\r\n var heightRatio = el.getAttribute('data-height-ratio');\r\n var parentWidth = el.parentNode.innerWidth || el.parentNode.offsetWidth;\r\n parentWidth = parentWidth !== null ? parentWidth + pixelInterval - (parentWidth % pixelInterval) : null; // round to the nearest 50\r\n \r\n if (heightRatio) {\r\n var parentHeight = el.parentNode.innerHeight || el.parentNode.offsetHeight;\r\n parentHeight = parentHeight !== null ? parentHeight + pixelInterval - (parentHeight % pixelInterval) : null; // round to the nearest 50\r\n heightRatio = parentHeight / parentWidth;\r\n }\r\n \r\n var width = parentWidth;\r\n if (heightRatio) {\r\n var height = heightRatio !== null ? width * heightRatio : null;\r\n baseUrl += width ? nextQuerySign(baseUrl) + \"width=\" + width : \"\";\r\n baseUrl += height !== null ? nextQuerySign(baseUrl) + \"height=\" + height : \"\";\r\n } else {\r\n baseUrl += width ? nextQuerySign(baseUrl) + \"width=\" + width : \"\";\r\n }\r\n\r\n var queryObjStr = el.getAttribute('data-query-obj');\r\n baseUrl = queryUrl(baseUrl, queryObjStr);\r\n\r\n return baseUrl;\r\n }\r\n\r\n function nextQuerySign(url) {\r\n return url.indexOf(\"?\") > -1 ? \"&\" : \"?\";\r\n }\r\n\r\n function queryUrl(url, queryObjStr) {\r\n if (queryObjStr) {\r\n var queryObj = JSON.parse(queryObjStr);\r\n \r\n Object.keys(queryObj).forEach(function(key){\r\n url += queryObj[key] !== null ? nextQuerySign(url) + key + \"=\" + queryObj[key] : \"\";\r\n });\r\n }\r\n\r\n return url\r\n }\r\n\r\n return {\r\n queryUrl: queryUrl,\r\n getUrl: getUrl\r\n };\r\n}();","'use strict';\r\n\r\n/**\r\n* @name Novicell Dynamic Image\r\n* @author Jonas Havmøller & Danni Larsen\r\n* @description Adds eventlisteners for lazysizes and more\r\n*/\r\n\r\n\r\nvar novicell = novicell || {};\r\n\r\nvar lastRefreshWidth = 0;\r\nvar refreshWidth = 50;\r\n\r\n// Lazysizes config\r\nwindow.lazySizesConfig = window.lazySizesConfig || {};\r\nwindow.lazySizesConfig.expand = 1000;\r\nif (window.lazySizesConfig[\"useWebp\"] == undefined) {\r\n window.lazySizesConfig[\"useWebp\"] = true\r\n}\r\n\r\n/*\r\n* Lazyload\r\n*/\r\nnovicell.lazyload = novicell.lazyload || function (e) {\r\n // IE Fix\r\n e.preventDefault = function () {\r\n Object.defineProperty(this, 'defaultPrevented', {get: function () {return true;}});\r\n };\r\n\r\n var target = e.target;\r\n var preventLoad = target.classList.contains('lazyload-measure') || target.classList.contains('lazyload-bg');\r\n var setMeasuredUrl = target.classList.contains('lazyload-measure');\r\n var setSrcSet = target.hasAttribute('data-srcset') && target.hasAttribute('data-query-obj');\r\n var setSrc = target.hasAttribute('data-src') && target.hasAttribute('data-query-obj');\r\n\r\n if(preventLoad) {\r\n e.preventDefault();\r\n }\r\n\r\n if(setMeasuredUrl) {\r\n var setBg = target.classList.contains('lazyload-bg');\r\n var url = novicell.dynamicImage.getUrl(target);\r\n isSupportWebP(function(bool) {\r\n if (bool && window.lazySizesConfig.useWebp) {\r\n url += \"&format=webp\"\r\n }\r\n if(setBg) {\r\n target.parentNode.style.backgroundImage = 'url(' + url + ')';\r\n target.style.visibility = 'hidden';\r\n } else {\r\n target.src = url;\r\n }\r\n });\r\n }\r\n else if(setSrcSet) {\r\n var query = target.getAttribute('data-query-obj');\r\n var srcset = target.getAttribute('data-srcset').split(',');\r\n var src = target.getAttribute('data-src');\r\n var newSrcset = [];\r\n\r\n isSupportWebP(function(bool) {\r\n srcset.forEach(function(src) {\r\n src = src.trim();\r\n src = src.split(' ');\r\n\r\n var url = src[0];\r\n var bp = src[1];\r\n\r\n if (bool && window.lazySizesConfig.useWebp) {\r\n url += \"&format=webp\"\r\n }\r\n\r\n var newSrc = novicell.dynamicImage.queryUrl(url, query);\r\n\r\n // set new srcset\r\n newSrcset.push(newSrc + ' ' + bp);\r\n });\r\n\r\n if (bool && window.lazySizesConfig.useWebp) {\r\n src += \"&format=webp\"\r\n }\r\n target.setAttribute('srcset', newSrcset.join(', '));\r\n target.setAttribute('src', novicell.dynamicImage.queryUrl(src, query));\r\n });\r\n }\r\n else if(setSrc) {\r\n var query = target.getAttribute('data-query-obj');\r\n var src = target.getAttribute('data-src');\r\n var url = novicell.dynamicImage.queryUrl(src, query);\r\n\r\n target.setAttribute('src', url);\r\n }\r\n};\r\n\r\nfunction isSupportWebP(callback) {\r\n var webP = new Image();\r\n webP.src = 'data:image/webp;base64,UklGRi4AAABXRUJQVlA4TCEAAAAvAUAAEB8wAiMw' + 'AgSSNtse/cXjxyCCmrYNWPwmHRH9jwMA';\r\n webP.onload = webP.onerror = function () {\r\n callback(webP.height === 2);\r\n };\r\n};\r\n\r\n/*\r\n* Check images\r\n*/\r\nvar checkImages = function() {\r\n if (window.innerWidth > lastRefreshWidth + refreshWidth || window.innerWidth < lastRefreshWidth - refreshWidth) {\r\n var loadedElements = Array.prototype.slice.call(document.body.querySelectorAll('.lazyloaded'));\r\n if(loadedElements.length > 0) {\r\n loadedElements.map(function(el){\r\n el.classList.remove('lazyloaded');\r\n el.classList.add('lazyload');\r\n });\r\n }\r\n lastRefreshWidth = window.innerWidth;\r\n };\r\n};\r\n\r\n\r\n/*\r\n* Eventlisteners\r\n*/\r\ndocument.addEventListener('lazybeforeunveil', novicell.lazyload, true);\r\nwindow.addEventListener('resize', novicell.debounce(checkImages), 100, false);\r\n","/**\r\n* @name Novicell Debounce\r\n* @author Danni Larsen\r\n* @argument func, wait, immediate\r\n* @description Simple function to debounce scroll and resize event\r\n*/\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.debounce = novicell.debounce || function (func, wait, immediate) {\r\n\tvar timeout;\r\n\treturn function() {\r\n\t\tvar context = this, args = arguments;\r\n\t\tvar later = function() {\r\n\t\t\ttimeout = null;\r\n\t\t\tif (!immediate) func.apply(context, args);\r\n\t\t};\r\n\t\tvar callNow = immediate && !timeout;\r\n\t\tclearTimeout(timeout);\r\n\t\ttimeout = setTimeout(later, wait);\r\n\t\tif (callNow) func.apply(context, args);\r\n\t};\r\n};\r\n"]}