{"version":3,"file":"jarallax.min.js","sources":["../src/utils/ready.js","../src/utils/global.js","../src/core.js","../src/core.umd.js"],"sourcesContent":["function ready(callback) {\n if ('complete' === document.readyState || 'interactive' === document.readyState) {\n // Already ready or interactive, execute callback\n callback();\n } else {\n document.addEventListener('DOMContentLoaded', callback, {\n capture: true,\n once: true,\n passive: true,\n });\n }\n}\n\nexport default ready;\n","/* eslint-disable import/no-mutable-exports */\n/* eslint-disable no-restricted-globals */\nlet win;\n\nif ('undefined' !== typeof window) {\n win = window;\n} else if ('undefined' !== typeof global) {\n win = global;\n} else if ('undefined' !== typeof self) {\n win = self;\n} else {\n win = {};\n}\n\nexport default win;\n","import domReady from './utils/ready';\nimport global from './utils/global';\n\nconst { navigator } = global;\n\nconst isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n);\n\nlet $deviceHelper;\n\n/**\n * The most popular mobile browsers changes height after page scroll and this generates image jumping.\n * We can fix it using this workaround with vh units.\n */\nfunction getDeviceHeight() {\n if (!$deviceHelper && document.body) {\n $deviceHelper = document.createElement('div');\n $deviceHelper.style.cssText =\n 'position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;';\n document.body.appendChild($deviceHelper);\n }\n\n return (\n ($deviceHelper ? $deviceHelper.clientHeight : 0) ||\n global.innerHeight ||\n document.documentElement.clientHeight\n );\n}\n\n// Window height data\nlet wndH;\nfunction updateWndVars() {\n if (isMobile) {\n wndH = getDeviceHeight();\n } else {\n wndH = global.innerHeight || document.documentElement.clientHeight;\n }\n}\nupdateWndVars();\nglobal.addEventListener('resize', updateWndVars);\nglobal.addEventListener('orientationchange', updateWndVars);\nglobal.addEventListener('load', updateWndVars);\ndomReady(() => {\n updateWndVars({\n type: 'dom-loaded',\n });\n});\n\n// list with all jarallax instances\n// need to render all in one scroll/resize event\nconst jarallaxList = [];\n\n// get all parents of the element.\nfunction getParents(elem) {\n const parents = [];\n\n while (null !== elem.parentElement) {\n elem = elem.parentElement;\n\n if (1 === elem.nodeType) {\n parents.push(elem);\n }\n }\n\n return parents;\n}\n\nfunction updateParallax() {\n if (!jarallaxList.length) {\n return;\n }\n\n jarallaxList.forEach((data, k) => {\n const { instance, oldData } = data;\n\n const clientRect = instance.$item.getBoundingClientRect();\n\n const newData = {\n width: clientRect.width,\n height: clientRect.height,\n top: clientRect.top,\n bottom: clientRect.bottom,\n wndW: global.innerWidth,\n wndH,\n };\n\n const isResized =\n !oldData ||\n oldData.wndW !== newData.wndW ||\n oldData.wndH !== newData.wndH ||\n oldData.width !== newData.width ||\n oldData.height !== newData.height;\n const isScrolled =\n isResized || !oldData || oldData.top !== newData.top || oldData.bottom !== newData.bottom;\n\n jarallaxList[k].oldData = newData;\n\n if (isResized) {\n instance.onResize();\n }\n if (isScrolled) {\n instance.onScroll();\n }\n });\n\n global.requestAnimationFrame(updateParallax);\n}\n\nlet instanceID = 0;\n\n// Jarallax class\nclass Jarallax {\n constructor(item, userOptions) {\n const self = this;\n\n self.instanceID = instanceID;\n instanceID += 1;\n\n self.$item = item;\n\n self.defaults = {\n type: 'scroll', // type of parallax: scroll, scale, opacity, scale-opacity, scroll-opacity\n speed: 0.5, // supported value from -1 to 2\n imgSrc: null,\n imgElement: '.jarallax-img',\n imgSize: 'cover',\n imgPosition: '50% 50%',\n imgRepeat: 'no-repeat', // supported only for background, not for tag\n keepImg: false, // keep tag in it's default place\n elementInViewport: null,\n zIndex: -100,\n disableParallax: false,\n disableVideo: false,\n\n // video\n videoSrc: null,\n videoStartTime: 0,\n videoEndTime: 0,\n videoVolume: 0,\n videoLoop: true,\n videoPlayOnlyVisible: true,\n videoLazyLoading: true,\n\n // events\n onScroll: null, // function(calculations) {}\n onInit: null, // function() {}\n onDestroy: null, // function() {}\n onCoverImage: null, // function() {}\n };\n\n // prepare data-options\n const dataOptions = self.$item.dataset || {};\n const pureDataOptions = {};\n Object.keys(dataOptions).forEach((key) => {\n const loweCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1);\n if (loweCaseOption && 'undefined' !== typeof self.defaults[loweCaseOption]) {\n pureDataOptions[loweCaseOption] = dataOptions[key];\n }\n });\n\n self.options = self.extend({}, self.defaults, pureDataOptions, userOptions);\n self.pureOptions = self.extend({}, self.options);\n\n // prepare 'true' and 'false' strings to boolean\n Object.keys(self.options).forEach((key) => {\n if ('true' === self.options[key]) {\n self.options[key] = true;\n } else if ('false' === self.options[key]) {\n self.options[key] = false;\n }\n });\n\n // fix speed option [-1.0, 2.0]\n self.options.speed = Math.min(2, Math.max(-1, parseFloat(self.options.speed)));\n\n // prepare disableParallax callback\n if ('string' === typeof self.options.disableParallax) {\n self.options.disableParallax = new RegExp(self.options.disableParallax);\n }\n if (self.options.disableParallax instanceof RegExp) {\n const disableParallaxRegexp = self.options.disableParallax;\n self.options.disableParallax = () => disableParallaxRegexp.test(navigator.userAgent);\n }\n if ('function' !== typeof self.options.disableParallax) {\n self.options.disableParallax = () => false;\n }\n\n // prepare disableVideo callback\n if ('string' === typeof self.options.disableVideo) {\n self.options.disableVideo = new RegExp(self.options.disableVideo);\n }\n if (self.options.disableVideo instanceof RegExp) {\n const disableVideoRegexp = self.options.disableVideo;\n self.options.disableVideo = () => disableVideoRegexp.test(navigator.userAgent);\n }\n if ('function' !== typeof self.options.disableVideo) {\n self.options.disableVideo = () => false;\n }\n\n // custom element to check if parallax in viewport\n let elementInVP = self.options.elementInViewport;\n // get first item from array\n if (\n elementInVP &&\n 'object' === typeof elementInVP &&\n 'undefined' !== typeof elementInVP.length\n ) {\n [elementInVP] = elementInVP;\n }\n // check if dom element\n if (!(elementInVP instanceof Element)) {\n elementInVP = null;\n }\n self.options.elementInViewport = elementInVP;\n\n self.image = {\n src: self.options.imgSrc || null,\n $container: null,\n useImgTag: false,\n\n // 1. Position fixed is needed for the most of browsers because absolute position have glitches\n // 2. On MacOS with smooth scroll there is a huge lags with absolute position - https://github.com/nk-o/jarallax/issues/75\n // 3. Previously used 'absolute' for mobile devices. But we re-tested on iPhone 12 and 'fixed' position is working better, then 'absolute', so for now position is always 'fixed'\n position: 'fixed',\n };\n\n if (self.initImg() && self.canInitParallax()) {\n self.init();\n }\n }\n\n // add styles to element\n // eslint-disable-next-line class-methods-use-this\n css(el, styles) {\n if ('string' === typeof styles) {\n return global.getComputedStyle(el).getPropertyValue(styles);\n }\n\n Object.keys(styles).forEach((key) => {\n el.style[key] = styles[key];\n });\n return el;\n }\n\n // Extend like jQuery.extend\n // eslint-disable-next-line class-methods-use-this\n extend(out, ...args) {\n out = out || {};\n\n Object.keys(args).forEach((i) => {\n if (!args[i]) {\n return;\n }\n Object.keys(args[i]).forEach((key) => {\n out[key] = args[i][key];\n });\n });\n\n return out;\n }\n\n // get window size and scroll position. Useful for extensions\n // eslint-disable-next-line class-methods-use-this\n getWindowData() {\n return {\n width: global.innerWidth || document.documentElement.clientWidth,\n height: wndH,\n y: document.documentElement.scrollTop,\n };\n }\n\n // Jarallax functions\n initImg() {\n const self = this;\n\n // find image element\n let $imgElement = self.options.imgElement;\n if ($imgElement && 'string' === typeof $imgElement) {\n $imgElement = self.$item.querySelector($imgElement);\n }\n\n // check if dom element\n if (!($imgElement instanceof Element)) {\n if (self.options.imgSrc) {\n $imgElement = new Image();\n $imgElement.src = self.options.imgSrc;\n } else {\n $imgElement = null;\n }\n }\n\n if ($imgElement) {\n if (self.options.keepImg) {\n self.image.$item = $imgElement.cloneNode(true);\n } else {\n self.image.$item = $imgElement;\n self.image.$itemParent = $imgElement.parentNode;\n }\n self.image.useImgTag = true;\n }\n\n // true if there is img tag\n if (self.image.$item) {\n return true;\n }\n\n // get image src\n if (null === self.image.src) {\n self.image.src =\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n self.image.bgImage = self.css(self.$item, 'background-image');\n }\n return !(!self.image.bgImage || 'none' === self.image.bgImage);\n }\n\n canInitParallax() {\n return !this.options.disableParallax();\n }\n\n init() {\n const self = this;\n const containerStyles = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n };\n let imageStyles = {\n pointerEvents: 'none',\n transformStyle: 'preserve-3d',\n backfaceVisibility: 'hidden',\n willChange: 'transform,opacity',\n };\n\n if (!self.options.keepImg) {\n // save default user styles\n const curStyle = self.$item.getAttribute('style');\n if (curStyle) {\n self.$item.setAttribute('data-jarallax-original-styles', curStyle);\n }\n if (self.image.useImgTag) {\n const curImgStyle = self.image.$item.getAttribute('style');\n if (curImgStyle) {\n self.image.$item.setAttribute('data-jarallax-original-styles', curImgStyle);\n }\n }\n }\n\n // set relative position and z-index to the parent\n if ('static' === self.css(self.$item, 'position')) {\n self.css(self.$item, {\n position: 'relative',\n });\n }\n if ('auto' === self.css(self.$item, 'z-index')) {\n self.css(self.$item, {\n zIndex: 0,\n });\n }\n\n // container for parallax image\n self.image.$container = document.createElement('div');\n self.css(self.image.$container, containerStyles);\n self.css(self.image.$container, {\n 'z-index': self.options.zIndex,\n });\n\n // it will remove some image overlapping\n // overlapping occur due to an image position fixed inside absolute position element\n // needed only when background in fixed position\n if ('fixed' === this.image.position) {\n self.css(self.image.$container, {\n '-webkit-clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n 'clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n });\n }\n\n self.image.$container.setAttribute('id', `jarallax-container-${self.instanceID}`);\n self.$item.appendChild(self.image.$container);\n\n // use img tag\n if (self.image.useImgTag) {\n imageStyles = self.extend(\n {\n 'object-fit': self.options.imgSize,\n 'object-position': self.options.imgPosition,\n 'max-width': 'none',\n },\n containerStyles,\n imageStyles\n );\n\n // use div with background image\n } else {\n self.image.$item = document.createElement('div');\n if (self.image.src) {\n imageStyles = self.extend(\n {\n 'background-position': self.options.imgPosition,\n 'background-size': self.options.imgSize,\n 'background-repeat': self.options.imgRepeat,\n 'background-image': self.image.bgImage || `url(\"${self.image.src}\")`,\n },\n containerStyles,\n imageStyles\n );\n }\n }\n\n if (\n 'opacity' === self.options.type ||\n 'scale' === self.options.type ||\n 'scale-opacity' === self.options.type ||\n 1 === self.options.speed\n ) {\n self.image.position = 'absolute';\n }\n\n // 1. Check if one of parents have transform style (without this check, scroll transform will be inverted if used parallax with position fixed)\n // discussion - https://github.com/nk-o/jarallax/issues/9\n // 2. Check if parents have overflow scroll\n if ('fixed' === self.image.position) {\n const $parents = getParents(self.$item).filter((el) => {\n const styles = global.getComputedStyle(el);\n const parentTransform =\n styles['-webkit-transform'] || styles['-moz-transform'] || styles.transform;\n const overflowRegex = /(auto|scroll)/;\n\n return (\n (parentTransform && 'none' !== parentTransform) ||\n overflowRegex.test(styles.overflow + styles['overflow-y'] + styles['overflow-x'])\n );\n });\n\n self.image.position = $parents.length ? 'absolute' : 'fixed';\n }\n\n // add position to parallax block\n imageStyles.position = self.image.position;\n\n // insert parallax image\n self.css(self.image.$item, imageStyles);\n self.image.$container.appendChild(self.image.$item);\n\n // set initial position and size\n self.onResize();\n self.onScroll(true);\n\n // call onInit event\n if (self.options.onInit) {\n self.options.onInit.call(self);\n }\n\n // remove default user background\n if ('none' !== self.css(self.$item, 'background-image')) {\n self.css(self.$item, {\n 'background-image': 'none',\n });\n }\n\n self.addToParallaxList();\n }\n\n // add to parallax instances list\n addToParallaxList() {\n jarallaxList.push({\n instance: this,\n });\n\n if (1 === jarallaxList.length) {\n global.requestAnimationFrame(updateParallax);\n }\n }\n\n // remove from parallax instances list\n removeFromParallaxList() {\n const self = this;\n\n jarallaxList.forEach((data, key) => {\n if (data.instance.instanceID === self.instanceID) {\n jarallaxList.splice(key, 1);\n }\n });\n }\n\n destroy() {\n const self = this;\n\n self.removeFromParallaxList();\n\n // return styles on container as before jarallax init\n const originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');\n self.$item.removeAttribute('data-jarallax-original-styles');\n // null occurs if there is no style tag before jarallax init\n if (!originalStylesTag) {\n self.$item.removeAttribute('style');\n } else {\n self.$item.setAttribute('style', originalStylesTag);\n }\n\n if (self.image.useImgTag) {\n // return styles on img tag as before jarallax init\n const originalStylesImgTag = self.image.$item.getAttribute('data-jarallax-original-styles');\n self.image.$item.removeAttribute('data-jarallax-original-styles');\n // null occurs if there is no style tag before jarallax init\n if (!originalStylesImgTag) {\n self.image.$item.removeAttribute('style');\n } else {\n self.image.$item.setAttribute('style', originalStylesTag);\n }\n\n // move img tag to its default position\n if (self.image.$itemParent) {\n self.image.$itemParent.appendChild(self.image.$item);\n }\n }\n\n // remove additional dom elements\n if (self.image.$container) {\n self.image.$container.parentNode.removeChild(self.image.$container);\n }\n\n // call onDestroy event\n if (self.options.onDestroy) {\n self.options.onDestroy.call(self);\n }\n\n // delete jarallax from item\n delete self.$item.jarallax;\n }\n\n // Fallback for removed function.\n // Does nothing now.\n // eslint-disable-next-line class-methods-use-this\n clipContainer() {}\n\n coverImage() {\n const self = this;\n\n const rect = self.image.$container.getBoundingClientRect();\n const contH = rect.height;\n const { speed } = self.options;\n const isScroll = 'scroll' === self.options.type || 'scroll-opacity' === self.options.type;\n let scrollDist = 0;\n let resultH = contH;\n let resultMT = 0;\n\n // scroll parallax\n if (isScroll) {\n // scroll distance and height for image\n if (0 > speed) {\n scrollDist = speed * Math.max(contH, wndH);\n\n if (wndH < contH) {\n scrollDist -= speed * (contH - wndH);\n }\n } else {\n scrollDist = speed * (contH + wndH);\n }\n\n // size for scroll parallax\n if (1 < speed) {\n resultH = Math.abs(scrollDist - wndH);\n } else if (0 > speed) {\n resultH = scrollDist / speed + Math.abs(scrollDist);\n } else {\n resultH += (wndH - contH) * (1 - speed);\n }\n\n scrollDist /= 2;\n }\n\n // store scroll distance\n self.parallaxScrollDistance = scrollDist;\n\n // vertical center\n if (isScroll) {\n resultMT = (wndH - resultH) / 2;\n } else {\n resultMT = (contH - resultH) / 2;\n }\n\n // apply result to item\n self.css(self.image.$item, {\n height: `${resultH}px`,\n marginTop: `${resultMT}px`,\n left: 'fixed' === self.image.position ? `${rect.left}px` : '0',\n width: `${rect.width}px`,\n });\n\n // call onCoverImage event\n if (self.options.onCoverImage) {\n self.options.onCoverImage.call(self);\n }\n\n // return some useful data. Used in the video cover function\n return {\n image: {\n height: resultH,\n marginTop: resultMT,\n },\n container: rect,\n };\n }\n\n isVisible() {\n return this.isElementInViewport || false;\n }\n\n onScroll(force) {\n const self = this;\n\n const rect = self.$item.getBoundingClientRect();\n const contT = rect.top;\n const contH = rect.height;\n const styles = {};\n\n // check if in viewport\n let viewportRect = rect;\n if (self.options.elementInViewport) {\n viewportRect = self.options.elementInViewport.getBoundingClientRect();\n }\n self.isElementInViewport =\n 0 <= viewportRect.bottom &&\n 0 <= viewportRect.right &&\n viewportRect.top <= wndH &&\n viewportRect.left <= global.innerWidth;\n\n // stop calculations if item is not in viewport\n if (force ? false : !self.isElementInViewport) {\n return;\n }\n\n // calculate parallax helping variables\n const beforeTop = Math.max(0, contT);\n const beforeTopEnd = Math.max(0, contH + contT);\n const afterTop = Math.max(0, -contT);\n const beforeBottom = Math.max(0, contT + contH - wndH);\n const beforeBottomEnd = Math.max(0, contH - (contT + contH - wndH));\n const afterBottom = Math.max(0, -contT + wndH - contH);\n const fromViewportCenter = 1 - 2 * ((wndH - contT) / (wndH + contH));\n\n // calculate on how percent of section is visible\n let visiblePercent = 1;\n if (contH < wndH) {\n visiblePercent = 1 - (afterTop || beforeBottom) / contH;\n } else if (beforeTopEnd <= wndH) {\n visiblePercent = beforeTopEnd / wndH;\n } else if (beforeBottomEnd <= wndH) {\n visiblePercent = beforeBottomEnd / wndH;\n }\n\n // opacity\n if (\n 'opacity' === self.options.type ||\n 'scale-opacity' === self.options.type ||\n 'scroll-opacity' === self.options.type\n ) {\n styles.transform = 'translate3d(0,0,0)';\n styles.opacity = visiblePercent;\n }\n\n // scale\n if ('scale' === self.options.type || 'scale-opacity' === self.options.type) {\n let scale = 1;\n if (0 > self.options.speed) {\n scale -= self.options.speed * visiblePercent;\n } else {\n scale += self.options.speed * (1 - visiblePercent);\n }\n styles.transform = `scale(${scale}) translate3d(0,0,0)`;\n }\n\n // scroll\n if ('scroll' === self.options.type || 'scroll-opacity' === self.options.type) {\n let positionY = self.parallaxScrollDistance * fromViewportCenter;\n\n // fix if parallax block in absolute position\n if ('absolute' === self.image.position) {\n positionY -= contT;\n }\n\n styles.transform = `translate3d(0,${positionY}px,0)`;\n }\n\n self.css(self.image.$item, styles);\n\n // call onScroll event\n if (self.options.onScroll) {\n self.options.onScroll.call(self, {\n section: rect,\n\n beforeTop,\n beforeTopEnd,\n afterTop,\n beforeBottom,\n beforeBottomEnd,\n afterBottom,\n\n visiblePercent,\n fromViewportCenter,\n });\n }\n }\n\n onResize() {\n this.coverImage();\n }\n}\n\n// global definition\nconst jarallax = function (items, options, ...args) {\n // check for dom element\n // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n if (\n 'object' === typeof HTMLElement\n ? items instanceof HTMLElement\n : items &&\n 'object' === typeof items &&\n null !== items &&\n 1 === items.nodeType &&\n 'string' === typeof items.nodeName\n ) {\n items = [items];\n }\n\n const len = items.length;\n let k = 0;\n let ret;\n\n for (k; k < len; k += 1) {\n if ('object' === typeof options || 'undefined' === typeof options) {\n if (!items[k].jarallax) {\n items[k].jarallax = new Jarallax(items[k], options);\n }\n } else if (items[k].jarallax) {\n // eslint-disable-next-line prefer-spread\n ret = items[k].jarallax[options].apply(items[k].jarallax, args);\n }\n if ('undefined' !== typeof ret) {\n return ret;\n }\n }\n\n return items;\n};\njarallax.constructor = Jarallax;\n\nexport default jarallax;\n","import domReady from './utils/ready';\nimport global from './utils/global';\nimport jarallax from './core';\n\nconst $ = global.jQuery;\n\n// jQuery support\nif ('undefined' !== typeof $) {\n const $Plugin = function (...args) {\n Array.prototype.unshift.call(args, this);\n const res = jarallax.apply(global, args);\n return 'object' !== typeof res ? res : this;\n };\n $Plugin.constructor = jarallax.constructor;\n\n // no conflict\n const old$Plugin = $.fn.jarallax;\n $.fn.jarallax = $Plugin;\n $.fn.jarallax.noConflict = function () {\n $.fn.jarallax = old$Plugin;\n return this;\n };\n}\n\n// data-jarallax initialization\ndomReady(() => {\n jarallax(document.querySelectorAll('[data-jarallax]'));\n});\n\nexport default jarallax;\n"],"names":["ready","callback","document","readyState","addEventListener","capture","once","passive","win","window","global","self","navigator","isMobile","test","userAgent","$deviceHelper","wndH","updateWndVars","body","createElement","style","cssText","appendChild","clientHeight","innerHeight","documentElement","jarallaxList","updateParallax","length","forEach","data","k","instance","oldData","clientRect","$item","getBoundingClientRect","newData","width","height","top","bottom","wndW","innerWidth","isResized","isScrolled","onResize","onScroll","requestAnimationFrame","instanceID","Jarallax","constructor","item","userOptions","this","defaults","type","speed","imgSrc","imgElement","imgSize","imgPosition","imgRepeat","keepImg","elementInViewport","zIndex","disableParallax","disableVideo","videoSrc","videoStartTime","videoEndTime","videoVolume","videoLoop","videoPlayOnlyVisible","videoLazyLoading","onInit","onDestroy","onCoverImage","dataOptions","dataset","pureDataOptions","Object","keys","key","loweCaseOption","substr","toLowerCase","options","extend","pureOptions","Math","min","max","parseFloat","RegExp","disableParallaxRegexp","disableVideoRegexp","elementInVP","Element","image","src","$container","useImgTag","position","initImg","canInitParallax","init","css","el","styles","getComputedStyle","getPropertyValue","out","args","i","getWindowData","clientWidth","y","scrollTop","$imgElement","querySelector","Image","cloneNode","$itemParent","parentNode","bgImage","containerStyles","left","overflow","imageStyles","pointerEvents","transformStyle","backfaceVisibility","willChange","curStyle","getAttribute","setAttribute","curImgStyle","$parents","elem","parents","parentElement","nodeType","push","getParents","filter","parentTransform","transform","call","addToParallaxList","removeFromParallaxList","splice","destroy","originalStylesTag","removeAttribute","originalStylesImgTag","removeChild","jarallax","clipContainer","coverImage","rect","contH","isScroll","scrollDist","resultH","resultMT","abs","parallaxScrollDistance","marginTop","container","isVisible","isElementInViewport","force","contT","viewportRect","right","beforeTop","beforeTopEnd","afterTop","beforeBottom","beforeBottomEnd","afterBottom","fromViewportCenter","visiblePercent","opacity","scale","positionY","section","items","HTMLElement","nodeName","len","ret","apply","$","jQuery","$Plugin","Array","prototype","unshift","res","old$Plugin","fn","noConflict","querySelectorAll"],"mappings":"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"}