{"version":3,"file":"rellax.js","sources":["node_modules/rellax/rellax.js","resources/theme/js/rellax.js"],"sourcesContent":["\n// ------------------------------------------\n// Rellax.js\n// Buttery smooth parallax library\n// Copyright (c) 2016 Moe Amaya (@moeamaya)\n// MIT license\n//\n// Thanks to Paraxify.js and Jaime Cabllero\n// for parallax concepts\n// ------------------------------------------\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.Rellax = factory();\n }\n}(typeof window !== \"undefined\" ? window : global, function () {\n var Rellax = function(el, options){\n \"use strict\";\n\n var self = Object.create(Rellax.prototype);\n\n var posY = 0;\n var screenY = 0;\n var posX = 0;\n var screenX = 0;\n var blocks = [];\n var pause = true;\n\n // check what requestAnimationFrame to use, and if\n // it's not supported, use the onscroll event\n var loop = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n function(callback){ return setTimeout(callback, 1000 / 60); };\n\n // store the id for later use\n var loopId = null;\n\n // Test via a getter in the options object to see if the passive property is accessed\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"testPassive\", null, opts);\n window.removeEventListener(\"testPassive\", null, opts);\n } catch (e) {}\n\n // check what cancelAnimation method to use\n var clearLoop = window.cancelAnimationFrame || window.mozCancelAnimationFrame || clearTimeout;\n\n // check which transform property to use\n var transformProp = window.transformProp || (function(){\n var testEl = document.createElement('div');\n if (testEl.style.transform === null) {\n var vendors = ['Webkit', 'Moz', 'ms'];\n for (var vendor in vendors) {\n if (testEl.style[ vendors[vendor] + 'Transform' ] !== undefined) {\n return vendors[vendor] + 'Transform';\n }\n }\n }\n return 'transform';\n })();\n\n // Default Settings\n self.options = {\n speed: -2,\n\t verticalSpeed: null,\n\t horizontalSpeed: null,\n breakpoints: [576, 768, 1201],\n center: false,\n wrapper: null,\n relativeToWrapper: false,\n round: true,\n vertical: true,\n horizontal: false,\n verticalScrollAxis: \"y\",\n horizontalScrollAxis: \"x\",\n callback: function() {},\n };\n\n // User defined options (might have more in the future)\n if (options){\n Object.keys(options).forEach(function(key){\n self.options[key] = options[key];\n });\n }\n\n function validateCustomBreakpoints () {\n if (self.options.breakpoints.length === 3 && Array.isArray(self.options.breakpoints)) {\n var isAscending = true;\n var isNumerical = true;\n var lastVal;\n self.options.breakpoints.forEach(function (i) {\n if (typeof i !== 'number') isNumerical = false;\n if (lastVal !== null) {\n if (i < lastVal) isAscending = false;\n }\n lastVal = i;\n });\n if (isAscending && isNumerical) return;\n }\n // revert defaults if set incorrectly\n self.options.breakpoints = [576, 768, 1201];\n console.warn(\"Rellax: You must pass an array of 3 numbers in ascending order to the breakpoints option. Defaults reverted\");\n }\n\n if (options && options.breakpoints) {\n validateCustomBreakpoints();\n }\n\n // By default, rellax class\n if (!el) {\n el = '.rellax';\n }\n\n // check if el is a className or a node\n var elements = typeof el === 'string' ? document.querySelectorAll(el) : [el];\n\n // Now query selector\n if (elements.length > 0) {\n self.elems = elements;\n }\n\n // The elements don't exist\n else {\n console.warn(\"Rellax: The elements you're trying to select don't exist.\");\n return;\n }\n\n // Has a wrapper and it exists\n if (self.options.wrapper) {\n if (!self.options.wrapper.nodeType) {\n var wrapper = document.querySelector(self.options.wrapper);\n\n if (wrapper) {\n self.options.wrapper = wrapper;\n } else {\n console.warn(\"Rellax: The wrapper you're trying to use doesn't exist.\");\n return;\n }\n }\n }\n\n // set a placeholder for the current breakpoint\n var currentBreakpoint;\n\n // helper to determine current breakpoint\n var getCurrentBreakpoint = function (w) {\n var bp = self.options.breakpoints;\n if (w < bp[0]) return 'xs';\n if (w >= bp[0] && w < bp[1]) return 'sm';\n if (w >= bp[1] && w < bp[2]) return 'md';\n return 'lg';\n };\n\n // Get and cache initial position of all elements\n var cacheBlocks = function() {\n for (var i = 0; i < self.elems.length; i++){\n var block = createBlock(self.elems[i]);\n blocks.push(block);\n }\n };\n\n\n // Let's kick this script off\n // Build array for cached element values\n var init = function() {\n for (var i = 0; i < blocks.length; i++){\n self.elems[i].style.cssText = blocks[i].style;\n }\n\n blocks = [];\n\n screenY = window.innerHeight;\n screenX = window.innerWidth;\n currentBreakpoint = getCurrentBreakpoint(screenX);\n\n setPosition();\n\n cacheBlocks();\n\n animate();\n\n // If paused, unpause and set listener for window resizing events\n if (pause) {\n window.addEventListener('resize', init);\n pause = false;\n // Start the loop\n update();\n }\n };\n\n // We want to cache the parallax blocks'\n // values: base, top, height, speed\n // el: is dom object, return: el cache values\n var createBlock = function(el) {\n var dataPercentage = el.getAttribute( 'data-rellax-percentage' );\n var dataSpeed = el.getAttribute( 'data-rellax-speed' );\n var dataXsSpeed = el.getAttribute( 'data-rellax-xs-speed' );\n var dataMobileSpeed = el.getAttribute( 'data-rellax-mobile-speed' );\n var dataTabletSpeed = el.getAttribute( 'data-rellax-tablet-speed' );\n var dataDesktopSpeed = el.getAttribute( 'data-rellax-desktop-speed' );\n var dataVerticalSpeed = el.getAttribute('data-rellax-vertical-speed');\n var dataHorizontalSpeed = el.getAttribute('data-rellax-horizontal-speed');\n var dataVericalScrollAxis = el.getAttribute('data-rellax-vertical-scroll-axis');\n var dataHorizontalScrollAxis = el.getAttribute('data-rellax-horizontal-scroll-axis');\n var dataZindex = el.getAttribute( 'data-rellax-zindex' ) || 0;\n var dataMin = el.getAttribute( 'data-rellax-min' );\n var dataMax = el.getAttribute( 'data-rellax-max' );\n var dataMinX = el.getAttribute('data-rellax-min-x');\n var dataMaxX = el.getAttribute('data-rellax-max-x');\n var dataMinY = el.getAttribute('data-rellax-min-y');\n var dataMaxY = el.getAttribute('data-rellax-max-y');\n var mapBreakpoints;\n var breakpoints = true;\n\n if (!dataXsSpeed && !dataMobileSpeed && !dataTabletSpeed && !dataDesktopSpeed) {\n breakpoints = false;\n } else {\n mapBreakpoints = {\n 'xs': dataXsSpeed,\n 'sm': dataMobileSpeed,\n 'md': dataTabletSpeed,\n 'lg': dataDesktopSpeed\n };\n }\n\n // initializing at scrollY = 0 (top of browser), scrollX = 0 (left of browser)\n // ensures elements are positioned based on HTML layout.\n //\n // If the element has the percentage attribute, the posY and posX needs to be\n // the current scroll position's value, so that the elements are still positioned based on HTML layout\n var wrapperPosY = self.options.wrapper ? self.options.wrapper.scrollTop : (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);\n // If the option relativeToWrapper is true, use the wrappers offset to top, subtracted from the current page scroll.\n if (self.options.relativeToWrapper) {\n var scrollPosY = (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);\n wrapperPosY = scrollPosY - self.options.wrapper.offsetTop;\n }\n var posY = self.options.vertical ? ( dataPercentage || self.options.center ? wrapperPosY : 0 ) : 0;\n var posX = self.options.horizontal ? ( dataPercentage || self.options.center ? self.options.wrapper ? self.options.wrapper.scrollLeft : (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft) : 0 ) : 0;\n\n var blockTop = posY + el.getBoundingClientRect().top;\n var blockHeight = el.clientHeight || el.offsetHeight || el.scrollHeight;\n\n var blockLeft = posX + el.getBoundingClientRect().left;\n var blockWidth = el.clientWidth || el.offsetWidth || el.scrollWidth;\n\n // apparently parallax equation everyone uses\n var percentageY = dataPercentage ? dataPercentage : (posY - blockTop + screenY) / (blockHeight + screenY);\n var percentageX = dataPercentage ? dataPercentage : (posX - blockLeft + screenX) / (blockWidth + screenX);\n if(self.options.center){ percentageX = 0.5; percentageY = 0.5; }\n\n // Optional individual block speed as data attr, otherwise global speed\n var speed = (breakpoints && mapBreakpoints[currentBreakpoint] !== null) ? Number(mapBreakpoints[currentBreakpoint]) : (dataSpeed ? dataSpeed : self.options.speed);\n var verticalSpeed = dataVerticalSpeed ? dataVerticalSpeed : self.options.verticalSpeed;\n var horizontalSpeed = dataHorizontalSpeed ? dataHorizontalSpeed : self.options.horizontalSpeed;\n\n // Optional individual block movement axis direction as data attr, otherwise gobal movement direction\n var verticalScrollAxis = dataVericalScrollAxis ? dataVericalScrollAxis : self.options.verticalScrollAxis;\n var horizontalScrollAxis = dataHorizontalScrollAxis ? dataHorizontalScrollAxis : self.options.horizontalScrollAxis;\n\n var bases = updatePosition(percentageX, percentageY, speed, verticalSpeed, horizontalSpeed);\n\n // ~~Store non-translate3d transforms~~\n // Store inline styles and extract transforms\n var style = el.style.cssText;\n var transform = '';\n\n // Check if there's an inline styled transform\n var searchResult = /transform\\s*:/i.exec(style);\n if (searchResult) {\n // Get the index of the transform\n var index = searchResult.index;\n\n // Trim the style to the transform point and get the following semi-colon index\n var trimmedStyle = style.slice(index);\n var delimiter = trimmedStyle.indexOf(';');\n\n // Remove \"transform\" string and save the attribute\n if (delimiter) {\n transform = \" \" + trimmedStyle.slice(11, delimiter).replace(/\\s/g,'');\n } else {\n transform = \" \" + trimmedStyle.slice(11).replace(/\\s/g,'');\n }\n }\n\n return {\n baseX: bases.x,\n baseY: bases.y,\n top: blockTop,\n left: blockLeft,\n height: blockHeight,\n width: blockWidth,\n speed: speed,\n verticalSpeed: verticalSpeed,\n horizontalSpeed: horizontalSpeed,\n verticalScrollAxis: verticalScrollAxis,\n horizontalScrollAxis: horizontalScrollAxis,\n style: style,\n transform: transform,\n zindex: dataZindex,\n min: dataMin,\n max: dataMax,\n minX: dataMinX,\n maxX: dataMaxX,\n minY: dataMinY,\n maxY: dataMaxY\n };\n };\n\n // set scroll position (posY, posX)\n // side effect method is not ideal, but okay for now\n // returns true if the scroll changed, false if nothing happened\n var setPosition = function() {\n var oldY = posY;\n var oldX = posX;\n\n posY = self.options.wrapper ? self.options.wrapper.scrollTop : (document.documentElement || document.body.parentNode || document.body).scrollTop || window.pageYOffset;\n posX = self.options.wrapper ? self.options.wrapper.scrollLeft : (document.documentElement || document.body.parentNode || document.body).scrollLeft || window.pageXOffset;\n // If option relativeToWrapper is true, use relative wrapper value instead.\n if (self.options.relativeToWrapper) {\n var scrollPosY = (document.documentElement || document.body.parentNode || document.body).scrollTop || window.pageYOffset;\n posY = scrollPosY - self.options.wrapper.offsetTop;\n }\n\n\n if (oldY != posY && self.options.vertical) {\n // scroll changed, return true\n return true;\n }\n\n if (oldX != posX && self.options.horizontal) {\n // scroll changed, return true\n return true;\n }\n\n // scroll did not change\n return false;\n };\n\n // Ahh a pure function, gets new transform value\n // based on scrollPosition and speed\n // Allow for decimal pixel values\n var updatePosition = function(percentageX, percentageY, speed, verticalSpeed, horizontalSpeed) {\n var result = {};\n var valueX = ((horizontalSpeed ? horizontalSpeed : speed) * (100 * (1 - percentageX)));\n var valueY = ((verticalSpeed ? verticalSpeed : speed) * (100 * (1 - percentageY)));\n\n result.x = self.options.round ? Math.round(valueX) : Math.round(valueX * 100) / 100;\n result.y = self.options.round ? Math.round(valueY) : Math.round(valueY * 100) / 100;\n\n return result;\n };\n\n // Remove event listeners and loop again\n var deferredUpdate = function() {\n window.removeEventListener('resize', deferredUpdate);\n window.removeEventListener('orientationchange', deferredUpdate);\n (self.options.wrapper ? self.options.wrapper : window).removeEventListener('scroll', deferredUpdate);\n (self.options.wrapper ? self.options.wrapper : document).removeEventListener('touchmove', deferredUpdate);\n\n // loop again\n loopId = loop(update);\n };\n\n // Loop\n var update = function() {\n if (setPosition() && pause === false) {\n animate();\n\n // loop again\n loopId = loop(update);\n } else {\n loopId = null;\n\n // Don't animate until we get a position updating event\n window.addEventListener('resize', deferredUpdate);\n window.addEventListener('orientationchange', deferredUpdate);\n (self.options.wrapper ? self.options.wrapper : window).addEventListener('scroll', deferredUpdate, supportsPassive ? { passive: true } : false);\n (self.options.wrapper ? self.options.wrapper : document).addEventListener('touchmove', deferredUpdate, supportsPassive ? { passive: true } : false);\n }\n };\n\n // Transform3d on parallax element\n var animate = function() {\n var positions;\n for (var i = 0; i < self.elems.length; i++){\n // Determine relevant movement directions\n var verticalScrollAxis = blocks[i].verticalScrollAxis.toLowerCase();\n var horizontalScrollAxis = blocks[i].horizontalScrollAxis.toLowerCase();\n var verticalScrollX = verticalScrollAxis.indexOf(\"x\") != -1 ? posY : 0;\n var verticalScrollY = verticalScrollAxis.indexOf(\"y\") != -1 ? posY : 0;\n var horizontalScrollX = horizontalScrollAxis.indexOf(\"x\") != -1 ? posX : 0;\n var horizontalScrollY = horizontalScrollAxis.indexOf(\"y\") != -1 ? posX : 0;\n\n var percentageY = ((verticalScrollY + horizontalScrollY - blocks[i].top + screenY) / (blocks[i].height + screenY));\n var percentageX = ((verticalScrollX + horizontalScrollX - blocks[i].left + screenX) / (blocks[i].width + screenX));\n\n // Subtracting initialize value, so element stays in same spot as HTML\n positions = updatePosition(percentageX, percentageY, blocks[i].speed, blocks[i].verticalSpeed, blocks[i].horizontalSpeed);\n var positionY = positions.y - blocks[i].baseY;\n var positionX = positions.x - blocks[i].baseX;\n\n // The next two \"if\" blocks go like this:\n // Check if a limit is defined (first \"min\", then \"max\");\n // Check if we need to change the Y or the X\n // (Currently working only if just one of the axes is enabled)\n // Then, check if the new position is inside the allowed limit\n // If so, use new position. If not, set position to limit.\n\n // Check if a min limit is defined\n if (blocks[i].min !== null) {\n if (self.options.vertical && !self.options.horizontal) {\n positionY = positionY <= blocks[i].min ? blocks[i].min : positionY;\n }\n if (self.options.horizontal && !self.options.vertical) {\n positionX = positionX <= blocks[i].min ? blocks[i].min : positionX;\n }\n }\n\n // Check if directional min limits are defined\n if (blocks[i].minY != null) {\n positionY = positionY <= blocks[i].minY ? blocks[i].minY : positionY;\n }\n if (blocks[i].minX != null) {\n positionX = positionX <= blocks[i].minX ? blocks[i].minX : positionX;\n }\n\n // Check if a max limit is defined\n if (blocks[i].max !== null) {\n if (self.options.vertical && !self.options.horizontal) {\n positionY = positionY >= blocks[i].max ? blocks[i].max : positionY;\n }\n if (self.options.horizontal && !self.options.vertical) {\n positionX = positionX >= blocks[i].max ? blocks[i].max : positionX;\n }\n }\n\n // Check if directional max limits are defined\n if (blocks[i].maxY != null) {\n positionY = positionY >= blocks[i].maxY ? blocks[i].maxY : positionY;\n }\n if (blocks[i].maxX != null) {\n positionX = positionX >= blocks[i].maxX ? blocks[i].maxX : positionX;\n }\n\n var zindex = blocks[i].zindex;\n\n // Move that element\n // (Set the new translation and append initial inline transforms.)\n var translate = 'translate3d(' + (self.options.horizontal ? positionX : '0') + 'px,' + (self.options.vertical ? positionY : '0') + 'px,' + zindex + 'px) ' + blocks[i].transform;\n self.elems[i].style[transformProp] = translate;\n }\n self.options.callback(positions);\n };\n\n self.destroy = function() {\n for (var i = 0; i < self.elems.length; i++){\n self.elems[i].style.cssText = blocks[i].style;\n }\n\n // Remove resize event listener if not pause, and pause\n if (!pause) {\n window.removeEventListener('resize', init);\n pause = true;\n }\n\n // Clear the animation loop to prevent possible memory leak\n clearLoop(loopId);\n loopId = null;\n };\n\n // Init\n init();\n\n // Allow to recalculate the initial values whenever we want\n self.refresh = init;\n\n return self;\n };\n return Rellax;\n}));\n","import Rellax from 'rellax';\r\n\r\ndocument.addEventListener('readystatechange', () => {\r\n if (document.readyState === 'complete') {\r\n const rellax = new Rellax('.rellax');\r\n }\r\n});\r\n"],"names":["root","factory","module","exports","Rellax","window","global","el","options","self","Object","create","prototype","posY","screenY","posX","screenX","blocks","pause","loop","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","callback","setTimeout","loopId","supportsPassive","opts","defineProperty","get","addEventListener","removeEventListener","e","clearLoop","cancelAnimationFrame","mozCancelAnimationFrame","clearTimeout","transformProp","testEl","document","createElement","style","transform","vendors","vendor","undefined","speed","verticalSpeed","horizontalSpeed","breakpoints","center","wrapper","relativeToWrapper","round","vertical","horizontal","verticalScrollAxis","horizontalScrollAxis","keys","forEach","key","validateCustomBreakpoints","length","Array","isArray","isAscending","isNumerical","lastVal","i","console","warn","elements","querySelectorAll","elems","nodeType","querySelector","currentBreakpoint","getCurrentBreakpoint","w","bp","cacheBlocks","block","createBlock","push","init","cssText","innerHeight","innerWidth","setPosition","animate","update","dataPercentage","getAttribute","dataSpeed","dataXsSpeed","dataMobileSpeed","dataTabletSpeed","dataDesktopSpeed","dataVerticalSpeed","dataHorizontalSpeed","dataVericalScrollAxis","dataHorizontalScrollAxis","dataZindex","dataMin","dataMax","dataMinX","dataMaxX","dataMinY","dataMaxY","mapBreakpoints","wrapperPosY","scrollTop","pageYOffset","documentElement","body","scrollPosY","offsetTop","scrollLeft","pageXOffset","blockTop","getBoundingClientRect","top","blockHeight","clientHeight","offsetHeight","scrollHeight","blockLeft","left","blockWidth","clientWidth","offsetWidth","scrollWidth","percentageY","percentageX","Number","bases","updatePosition","searchResult","exec","index","trimmedStyle","slice","delimiter","indexOf","replace","baseX","x","baseY","y","height","width","zindex","min","max","minX","maxX","minY","maxY","oldY","oldX","parentNode","result","valueX","valueY","Math","deferredUpdate","passive","positions","toLowerCase","verticalScrollX","verticalScrollY","horizontalScrollX","horizontalScrollY","positionY","positionX","translate","destroy","refresh","readyState","rellax"],"mappings":"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"}