{"version":3,"file":"./modules/Slider.xxxxxxxx.js","mappings":"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","sources":["webpack:///./libs/tiny-slider-2.9.4.js","webpack:///./modules/NivTSlider.ts","webpack:///./modules/Slider.ts"],"sourcesContent":["'use strict';\r\n\r\nObject.defineProperty(exports, '__esModule', { value: true });\r\n\r\nvar win$1 = window;\r\nvar raf = win$1.requestAnimationFrame || win$1.webkitRequestAnimationFrame || win$1.mozRequestAnimationFrame || win$1.msRequestAnimationFrame || function (cb) {\r\n return setTimeout(cb, 16);\r\n};\r\n\r\nvar win = window;\r\nvar caf = win.cancelAnimationFrame || win.mozCancelAnimationFrame || function (id) {\r\n clearTimeout(id);\r\n};\r\n\r\nfunction extend() {\r\n var obj,\r\n name,\r\n copy,\r\n target = arguments[0] || {},\r\n i = 1,\r\n length = arguments.length;\r\n\r\n for (; i < length; i++) {\r\n if ((obj = arguments[i]) !== null) {\r\n for (name in obj) {\r\n copy = obj[name];\r\n\r\n if (target === copy) {\r\n continue;\r\n } else if (copy !== undefined) {\r\n target[name] = copy;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return target;\r\n}\r\n\r\nfunction checkStorageValue(value) {\r\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\r\n}\r\n\r\nfunction setLocalStorage(storage, key, value, access) {\r\n if (access) {\r\n try {\r\n storage.setItem(key, value);\r\n } catch (e) {}\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction getSlideId() {\r\n var id = window.tnsId;\r\n window.tnsId = !id ? 1 : id + 1;\r\n return 'tns' + window.tnsId;\r\n}\r\n\r\nfunction getBody() {\r\n var doc = document,\r\n body = doc.body;\r\n\r\n if (!body) {\r\n body = doc.createElement('body');\r\n body.fake = true;\r\n }\r\n\r\n return body;\r\n}\r\n\r\nvar docElement = document.documentElement;\r\n\r\nfunction setFakeBody(body) {\r\n var docOverflow = '';\r\n\r\n if (body.fake) {\r\n docOverflow = docElement.style.overflow; //avoid crashing IE8, if background image is used\r\n\r\n body.style.background = ''; //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\r\n\r\n body.style.overflow = docElement.style.overflow = 'hidden';\r\n docElement.appendChild(body);\r\n }\r\n\r\n return docOverflow;\r\n}\r\n\r\nfunction resetFakeBody(body, docOverflow) {\r\n if (body.fake) {\r\n body.remove();\r\n docElement.style.overflow = docOverflow; // Trigger layout so kinetic scrolling isn't disabled in iOS6+\r\n // eslint-disable-next-line\r\n\r\n docElement.offsetHeight;\r\n }\r\n}\r\n\r\n// get css-calc \r\nfunction calc() {\r\n var doc = document,\r\n body = getBody(),\r\n docOverflow = setFakeBody(body),\r\n div = doc.createElement('div'),\r\n result = false;\r\n body.appendChild(div);\r\n\r\n try {\r\n var str = '(10px * 10)',\r\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\r\n val;\r\n\r\n for (var i = 0; i < 3; i++) {\r\n val = vals[i];\r\n div.style.width = val;\r\n\r\n if (div.offsetWidth === 100) {\r\n result = val.replace(str, '');\r\n break;\r\n }\r\n }\r\n } catch (e) {}\r\n\r\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\r\n return result;\r\n}\r\n\r\n// get subpixel support value\r\nfunction percentageLayout() {\r\n // check subpixel layout supporting\r\n var doc = document,\r\n body = getBody(),\r\n docOverflow = setFakeBody(body),\r\n wrapper = doc.createElement('div'),\r\n outer = doc.createElement('div'),\r\n str = '',\r\n count = 70,\r\n perPage = 3,\r\n supported = false;\r\n wrapper.className = \"tns-t-subp2\";\r\n outer.className = \"tns-t-ct\";\r\n\r\n for (var i = 0; i < count; i++) {\r\n str += '<div></div>';\r\n }\r\n\r\n outer.innerHTML = str;\r\n wrapper.appendChild(outer);\r\n body.appendChild(wrapper);\r\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\r\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\r\n return supported;\r\n}\r\n\r\nfunction mediaquerySupport() {\r\n if (window.matchMedia || window.msMatchMedia) {\r\n return true;\r\n }\r\n\r\n var doc = document,\r\n body = getBody(),\r\n docOverflow = setFakeBody(body),\r\n div = doc.createElement('div'),\r\n style = doc.createElement('style'),\r\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\r\n position;\r\n style.type = 'text/css';\r\n div.className = 'tns-mq-test';\r\n body.appendChild(style);\r\n body.appendChild(div);\r\n\r\n if (style.styleSheet) {\r\n style.styleSheet.cssText = rule;\r\n } else {\r\n style.appendChild(doc.createTextNode(rule));\r\n }\r\n\r\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\r\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\r\n return position === \"absolute\";\r\n}\r\n\r\n// create and append style sheet\r\nfunction createStyleSheet(media, nonce) {\r\n // Create the <style> tag\r\n var style = document.createElement(\"style\"); // style.setAttribute(\"type\", \"text/css\");\r\n // Add a media (and/or media query) here if you'd like!\r\n // style.setAttribute(\"media\", \"screen\")\r\n // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\r\n\r\n if (media) {\r\n style.setAttribute(\"media\", media);\r\n } // Add nonce attribute for Content Security Policy\r\n\r\n\r\n if (nonce) {\r\n style.setAttribute(\"nonce\", nonce);\r\n } // WebKit hack :(\r\n // style.appendChild(document.createTextNode(\"\"));\r\n // Add the <style> element to the page\r\n\r\n\r\n document.querySelector('head').appendChild(style);\r\n return style.sheet ? style.sheet : style.styleSheet;\r\n}\r\n\r\n// cross browsers addRule method\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n // return raf(function() {\r\n 'insertRule' in sheet ? sheet.insertRule(selector + '{' + rules + '}', index) : sheet.addRule(selector, rules, index); // });\r\n}\r\n\r\n// cross browsers addRule method\r\nfunction removeCSSRule(sheet, index) {\r\n // return raf(function() {\r\n 'deleteRule' in sheet ? sheet.deleteRule(index) : sheet.removeRule(index); // });\r\n}\r\n\r\nfunction getCssRulesLength(sheet) {\r\n var rule = 'insertRule' in sheet ? sheet.cssRules : sheet.rules;\r\n return rule.length;\r\n}\r\n\r\nfunction toDegree(y, x) {\r\n return Math.atan2(y, x) * (180 / Math.PI);\r\n}\r\n\r\nfunction getTouchDirection(angle, range) {\r\n var direction = false,\r\n gap = Math.abs(90 - Math.abs(angle));\r\n\r\n if (gap >= 90 - range) {\r\n direction = 'horizontal';\r\n } else if (gap <= range) {\r\n direction = 'vertical';\r\n }\r\n\r\n return direction;\r\n}\r\n\r\n// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\r\nfunction forEach(arr, callback, scope) {\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n callback.call(scope, arr[i], i);\r\n }\r\n}\r\n\r\nvar classListSupport = ('classList' in document.createElement('_'));\r\n\r\nvar hasClass = classListSupport ? function (el, str) {\r\n return el.classList.contains(str);\r\n} : function (el, str) {\r\n return el.className.indexOf(str) >= 0;\r\n};\r\n\r\nvar addClass = classListSupport ? function (el, str) {\r\n if (!hasClass(el, str)) {\r\n el.classList.add(str);\r\n }\r\n} : function (el, str) {\r\n if (!hasClass(el, str)) {\r\n el.className += ' ' + str;\r\n }\r\n};\r\n\r\nvar removeClass = classListSupport ? function (el, str) {\r\n if (hasClass(el, str)) {\r\n el.classList.remove(str);\r\n }\r\n} : function (el, str) {\r\n if (hasClass(el, str)) {\r\n el.className = el.className.replace(str, '');\r\n }\r\n};\r\n\r\nfunction hasAttr(el, attr) {\r\n return el.hasAttribute(attr);\r\n}\r\n\r\nfunction getAttr(el, attr) {\r\n return el.getAttribute(attr);\r\n}\r\n\r\nfunction isNodeList(el) {\r\n // Only NodeList has the \"item()\" function\r\n return typeof el.item !== \"undefined\";\r\n}\r\n\r\nfunction setAttrs(els, attrs) {\r\n els = isNodeList(els) || els instanceof Array ? els : [els];\r\n\r\n if (Object.prototype.toString.call(attrs) !== '[object Object]') {\r\n return;\r\n }\r\n\r\n for (var i = els.length; i--;) {\r\n for (var key in attrs) {\r\n els[i].setAttribute(key, attrs[key]);\r\n }\r\n }\r\n}\r\n\r\nfunction removeAttrs(els, attrs) {\r\n els = isNodeList(els) || els instanceof Array ? els : [els];\r\n attrs = attrs instanceof Array ? attrs : [attrs];\r\n var attrLength = attrs.length;\r\n\r\n for (var i = els.length; i--;) {\r\n for (var j = attrLength; j--;) {\r\n els[i].removeAttribute(attrs[j]);\r\n }\r\n }\r\n}\r\n\r\nfunction arrayFromNodeList(nl) {\r\n var arr = [];\r\n\r\n for (var i = 0, l = nl.length; i < l; i++) {\r\n arr.push(nl[i]);\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nfunction hideElement(el, forceHide) {\r\n if (el.style.display !== 'none') {\r\n el.style.display = 'none';\r\n }\r\n}\r\n\r\nfunction showElement(el, forceHide) {\r\n if (el.style.display === 'none') {\r\n el.style.display = '';\r\n }\r\n}\r\n\r\nfunction isVisible(el) {\r\n return window.getComputedStyle(el).display !== 'none';\r\n}\r\n\r\nfunction whichProperty(props) {\r\n if (typeof props === 'string') {\r\n var arr = [props],\r\n Props = props.charAt(0).toUpperCase() + props.substr(1),\r\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\r\n prefixes.forEach(function (prefix) {\r\n if (prefix !== 'ms' || props === 'transform') {\r\n arr.push(prefix + Props);\r\n }\r\n });\r\n props = arr;\r\n }\r\n\r\n var el = document.createElement('fakeelement');\r\n props.length;\r\n\r\n for (var i = 0; i < props.length; i++) {\r\n var prop = props[i];\r\n\r\n if (el.style[prop] !== undefined) {\r\n return prop;\r\n }\r\n }\r\n\r\n return false; // explicit for ie9-\r\n}\r\n\r\nfunction has3DTransforms(tf) {\r\n if (!tf) {\r\n return false;\r\n }\r\n\r\n if (!window.getComputedStyle) {\r\n return false;\r\n }\r\n\r\n var doc = document,\r\n body = getBody(),\r\n docOverflow = setFakeBody(body),\r\n el = doc.createElement('p'),\r\n has3d,\r\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\r\n cssTF += 'transform'; // Add it to the body to get the computed style\r\n\r\n body.insertBefore(el, null);\r\n el.style[tf] = 'translate3d(1px,1px,1px)';\r\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\r\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\r\n return has3d !== undefined && has3d.length > 0 && has3d !== \"none\";\r\n}\r\n\r\n// get transitionend, animationend based on transitionDuration\r\n// @propin: string\r\n// @propOut: string, first-letter uppercase\r\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\r\nfunction getEndProperty(propIn, propOut) {\r\n var endProp = false;\r\n\r\n if (/^Webkit/.test(propIn)) {\r\n endProp = 'webkit' + propOut + 'End';\r\n } else if (/^O/.test(propIn)) {\r\n endProp = 'o' + propOut + 'End';\r\n } else if (propIn) {\r\n endProp = propOut.toLowerCase() + 'end';\r\n }\r\n\r\n return endProp;\r\n}\r\n\r\n// Test via a getter in the options object to see if the passive property is accessed\r\nvar supportsPassive = false;\r\n\r\ntry {\r\n var opts = Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n supportsPassive = true;\r\n }\r\n });\r\n window.addEventListener(\"test\", null, opts);\r\n} catch (e) {}\r\n\r\nvar passiveOption = supportsPassive ? {\r\n passive: true\r\n} : false;\r\n\r\nfunction addEvents(el, obj, preventScrolling) {\r\n for (var prop in obj) {\r\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\r\n el.addEventListener(prop, obj[prop], option);\r\n }\r\n}\r\n\r\nfunction removeEvents(el, obj) {\r\n for (var prop in obj) {\r\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\r\n el.removeEventListener(prop, obj[prop], option);\r\n }\r\n}\r\n\r\nfunction Events() {\r\n return {\r\n topics: {},\r\n on: function (eventName, fn) {\r\n this.topics[eventName] = this.topics[eventName] || [];\r\n this.topics[eventName].push(fn);\r\n },\r\n off: function (eventName, fn) {\r\n if (this.topics[eventName]) {\r\n for (var i = 0; i < this.topics[eventName].length; i++) {\r\n if (this.topics[eventName][i] === fn) {\r\n this.topics[eventName].splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n emit: function (eventName, data) {\r\n data.type = eventName;\r\n\r\n if (this.topics[eventName]) {\r\n this.topics[eventName].forEach(function (fn) {\r\n fn(data, eventName);\r\n });\r\n }\r\n }\r\n };\r\n}\r\n\r\nfunction jsTransform(element, attr, prefix, postfix, to, duration, callback) {\r\n var tick = Math.min(duration, 10),\r\n unit = to.indexOf('%') >= 0 ? '%' : 'px',\r\n to = to.replace(unit, ''),\r\n from = Number(element.style[attr].replace(prefix, '').replace(postfix, '').replace(unit, '')),\r\n positionTick = (to - from) / duration * tick;\r\n setTimeout(moveElement, tick);\r\n\r\n function moveElement() {\r\n duration -= tick;\r\n from += positionTick;\r\n element.style[attr] = prefix + from + unit + postfix;\r\n\r\n if (duration > 0) {\r\n setTimeout(moveElement, tick);\r\n } else {\r\n callback();\r\n }\r\n }\r\n}\r\n\r\n// Object.keys\r\nif (!Object.keys) {\r\n Object.keys = function (object) {\r\n var keys = [];\r\n\r\n for (var name in object) {\r\n if (Object.prototype.hasOwnProperty.call(object, name)) {\r\n keys.push(name);\r\n }\r\n }\r\n\r\n return keys;\r\n };\r\n} // ChildNode.remove\r\n\r\n\r\nif (!(\"remove\" in Element.prototype)) {\r\n Element.prototype.remove = function () {\r\n if (this.parentNode) {\r\n this.parentNode.removeChild(this);\r\n }\r\n };\r\n}\r\nvar tns = function (options) {\r\n options = extend({\r\n container: '.slider',\r\n mode: 'carousel',\r\n axis: 'horizontal',\r\n items: 1,\r\n gutter: 0,\r\n edgePadding: 0,\r\n fixedWidth: false,\r\n autoWidth: false,\r\n viewportMax: false,\r\n slideBy: 1,\r\n center: false,\r\n controls: true,\r\n controlsPosition: 'top',\r\n controlsText: ['prev', 'next'],\r\n controlsContainer: false,\r\n prevButton: false,\r\n nextButton: false,\r\n nav: true,\r\n navPosition: 'top',\r\n navContainer: false,\r\n navAsThumbnails: false,\r\n arrowKeys: false,\r\n speed: 300,\r\n autoplay: false,\r\n autoplayPosition: 'top',\r\n autoplayTimeout: 5000,\r\n autoplayDirection: 'forward',\r\n autoplayText: ['start', 'stop'],\r\n autoplayHoverPause: false,\r\n autoplayButton: false,\r\n autoplayButtonOutput: true,\r\n autoplayResetOnVisibility: true,\r\n animateIn: 'tns-fadeIn',\r\n animateOut: 'tns-fadeOut',\r\n animateNormal: 'tns-normal',\r\n animateDelay: false,\r\n loop: true,\r\n rewind: false,\r\n autoHeight: false,\r\n responsive: false,\r\n lazyload: false,\r\n lazyloadSelector: '.tns-lazy-img',\r\n touch: true,\r\n mouseDrag: false,\r\n swipeAngle: 15,\r\n nested: false,\r\n preventActionWhenRunning: false,\r\n preventScrollOnTouch: false,\r\n freezable: true,\r\n onInit: false,\r\n useLocalStorage: true,\r\n nonce: false\r\n }, options || {});\r\n var doc = document,\r\n win = window,\r\n KEYS = {\r\n ENTER: 13,\r\n SPACE: 32,\r\n LEFT: 37,\r\n RIGHT: 39\r\n },\r\n tnsStorage = {},\r\n localStorageAccess = options.useLocalStorage;\r\n\r\n if (localStorageAccess) {\r\n // check browser version and local storage access\r\n var browserInfo = navigator.userAgent;\r\n var uid = new Date();\r\n\r\n try {\r\n tnsStorage = win.localStorage;\r\n\r\n if (tnsStorage) {\r\n tnsStorage.setItem(uid, uid);\r\n localStorageAccess = tnsStorage.getItem(uid) == uid;\r\n tnsStorage.removeItem(uid);\r\n } else {\r\n localStorageAccess = false;\r\n }\r\n\r\n if (!localStorageAccess) {\r\n tnsStorage = {};\r\n }\r\n } catch (e) {\r\n localStorageAccess = false;\r\n }\r\n\r\n if (localStorageAccess) {\r\n // remove storage when browser version changes\r\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\r\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function (item) {\r\n tnsStorage.removeItem(item);\r\n });\r\n } // update browserInfo\r\n\r\n\r\n localStorage['tnsApp'] = browserInfo;\r\n }\r\n }\r\n\r\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\r\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\r\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\r\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\r\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\r\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\r\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\r\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\r\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\r\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\r\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess); // get element nodes from selectors\r\n\r\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\r\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\r\n optionsElements = {};\r\n\r\n tnsList.forEach(function (item) {\r\n if (typeof options[item] === 'string') {\r\n var str = options[item],\r\n el = doc.querySelector(str);\r\n\r\n optionsElements[item] = str;\r\n \r\n if (el && el.nodeName) {\r\n options[item] = el;\r\n\r\n } else {\r\n if (supportConsoleWarn) {\r\n console.warn('Can\\'t find', options[item]);\r\n }\r\n\r\n return;\r\n }\r\n }\r\n }); // make sure at least 1 slide\r\n \r\n if (options.container.children.length < 1) {\r\n if (supportConsoleWarn) {\r\n console.warn('No slides found in', options.container);\r\n }\r\n\r\n return;\r\n } // update options\r\n\r\n\r\n var responsive = options.responsive,\r\n nested = options.nested,\r\n carousel = options.mode === 'carousel' ? true : false;\r\n\r\n if (responsive) {\r\n // apply responsive[0] to options and remove it\r\n if (0 in responsive) {\r\n options = extend(options, responsive[0]);\r\n delete responsive[0];\r\n }\r\n\r\n var responsiveTem = {};\r\n\r\n for (var key in responsive) {\r\n var val = responsive[key]; // update responsive\r\n // from: 300: 2\r\n // to:\r\n // 300: {\r\n // items: 2\r\n // }\r\n\r\n val = typeof val === 'number' ? {\r\n items: val\r\n } : val;\r\n responsiveTem[key] = val;\r\n }\r\n\r\n responsive = responsiveTem;\r\n responsiveTem = null;\r\n } // update options\r\n\r\n\r\n function updateOptions(obj) {\r\n for (var key in obj) {\r\n if (!carousel) {\r\n if (key === 'slideBy') {\r\n obj[key] = 'page';\r\n }\r\n\r\n if (key === 'edgePadding') {\r\n obj[key] = false;\r\n }\r\n\r\n if (key === 'autoHeight') {\r\n obj[key] = false;\r\n }\r\n } // update responsive options\r\n\r\n\r\n if (key === 'responsive') {\r\n updateOptions(obj[key]);\r\n }\r\n }\r\n }\r\n\r\n if (!carousel) {\r\n updateOptions(options);\r\n } // === define and set variables ===\r\n\r\n\r\n if (!carousel) {\r\n options.axis = 'horizontal';\r\n options.slideBy = 'page';\r\n options.edgePadding = false;\r\n var animateIn = options.animateIn,\r\n animateOut = options.animateOut,\r\n animateDelay = options.animateDelay,\r\n animateNormal = options.animateNormal;\r\n }\r\n\r\n var horizontal = options.axis === 'horizontal' ? true : false,\r\n outerWrapper = doc.createElement('div'),\r\n innerWrapper = doc.createElement('div'),\r\n middleWrapper,\r\n container = options.container,\r\n containerParent = container.parentNode,\r\n containerHTML = container.outerHTML,\r\n slideItems = Array.from(container.children).filter(node => node.tagName.toLowerCase() !== 'script'),\r\n slideCount = slideItems.length,\r\n breakpointZone,\r\n windowWidth = getWindowWidth(),\r\n isOn = false;\r\n \r\n if (responsive) {\r\n setBreakpointZone();\r\n }\r\n\r\n if (carousel) {\r\n container.className += ' tns-vpfix';\r\n } // fixedWidth: viewport > rightBoundary > indexMax\r\n\r\n\r\n var autoWidth = options.autoWidth,\r\n fixedWidth = getOption('fixedWidth'),\r\n edgePadding = getOption('edgePadding'),\r\n gutter = getOption('gutter'),\r\n viewport = getViewportWidth(),\r\n center = getOption('center'),\r\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\r\n slideBy = getOption('slideBy'),\r\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\r\n arrowKeys = getOption('arrowKeys'),\r\n speed = getOption('speed'),\r\n rewind = options.rewind,\r\n loop = rewind ? false : options.loop,\r\n autoHeight = getOption('autoHeight'),\r\n controls = getOption('controls'),\r\n controlsText = getOption('controlsText'),\r\n nav = getOption('nav'),\r\n touch = getOption('touch'),\r\n mouseDrag = getOption('mouseDrag'),\r\n autoplay = getOption('autoplay'),\r\n autoplayTimeout = getOption('autoplayTimeout'),\r\n autoplayText = getOption('autoplayText'),\r\n autoplayHoverPause = getOption('autoplayHoverPause'),\r\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\r\n sheet = createStyleSheet(null, getOption('nonce')),\r\n lazyload = options.lazyload,\r\n lazyloadSelector = options.lazyloadSelector,\r\n slidePositions,\r\n // collection of slide positions\r\n slideItemsOut = [],\r\n cloneCount = loop ? getCloneCountForLoop() : 0,\r\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\r\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\r\n rightBoundary = fixedWidth ? getRightBoundary() : null,\r\n updateIndexBeforeTransform = !carousel || !loop ? true : false,\r\n // transform\r\n transformAttr = horizontal ? 'left' : 'top',\r\n transformPrefix = '',\r\n transformPostfix = '',\r\n // index\r\n getIndexMax = function () {\r\n if (fixedWidth) {\r\n return function () {\r\n return center && !loop ? slideCount - 1 : Math.ceil(-rightBoundary / (fixedWidth + gutter));\r\n };\r\n } else if (autoWidth) {\r\n return function () {\r\n for (var i = 0; i < slideCountNew; i++) {\r\n if (slidePositions[i] >= -rightBoundary) {\r\n return i;\r\n }\r\n }\r\n };\r\n } else {\r\n return function () {\r\n if (center && carousel && !loop) {\r\n return slideCount - 1;\r\n } else {\r\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\r\n }\r\n };\r\n }\r\n }(),\r\n index = getStartIndex(getOption('startIndex')),\r\n indexCached = index;\r\n getCurrentSlide();\r\n var indexMin = 0,\r\n indexMax = !autoWidth ? getIndexMax() : null,\r\n preventActionWhenRunning = options.preventActionWhenRunning,\r\n swipeAngle = options.swipeAngle,\r\n moveDirectionExpected = swipeAngle ? '?' : true,\r\n running = false,\r\n onInit = options.onInit,\r\n events = new Events(),\r\n // id, class\r\n newContainerClasses = ' tns-slider tns-' + options.mode,\r\n slideId = container.id || getSlideId(),\r\n disable = getOption('disable'),\r\n disabled = false,\r\n freezable = options.freezable,\r\n freeze = freezable && !autoWidth ? getFreeze() : false,\r\n frozen = false,\r\n controlsEvents = {\r\n 'click': onControlsClick,\r\n 'keydown': onControlsKeydown\r\n },\r\n navEvents = {\r\n 'click': onNavClick,\r\n 'keydown': onNavKeydown\r\n },\r\n hoverEvents = {\r\n 'mouseover': mouseoverPause,\r\n 'mouseout': mouseoutRestart\r\n },\r\n visibilityEvent = {\r\n 'visibilitychange': onVisibilityChange\r\n },\r\n docmentKeydownEvent = {\r\n 'keydown': onDocumentKeydown\r\n },\r\n touchEvents = {\r\n 'touchstart': onPanStart,\r\n 'touchmove': onPanMove,\r\n 'touchend': onPanEnd,\r\n 'touchcancel': onPanEnd\r\n },\r\n dragEvents = {\r\n 'mousedown': onPanStart,\r\n 'mousemove': onPanMove,\r\n 'mouseup': onPanEnd,\r\n 'mouseleave': onPanEnd\r\n },\r\n hasControls = hasOption('controls'),\r\n hasNav = hasOption('nav'),\r\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\r\n hasAutoplay = hasOption('autoplay'),\r\n hasTouch = hasOption('touch'),\r\n hasMouseDrag = hasOption('mouseDrag'),\r\n slideActiveClass = 'tns-slide-active',\r\n slideClonedClass = 'tns-slide-cloned',\r\n imgCompleteClass = 'tns-complete',\r\n imgEvents = {\r\n 'load': onImgLoaded,\r\n 'error': onImgFailed\r\n },\r\n imgsComplete,\r\n liveregionCurrent,\r\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false; // controls\r\n\r\n\r\n if (hasControls) {\r\n var controlsContainer = options.controlsContainer,\r\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\r\n prevButton = options.prevButton,\r\n nextButton = options.nextButton,\r\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\r\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\r\n prevIsButton,\r\n nextIsButton;\r\n } // nav\r\n\r\n\r\n if (hasNav) {\r\n var navContainer = options.navContainer,\r\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\r\n navItems,\r\n pages = autoWidth ? slideCount : getPages(),\r\n pagesCached = 0,\r\n navClicked = -1,\r\n navCurrentIndex = getCurrentNavIndex(),\r\n navCurrentIndexCached = navCurrentIndex,\r\n navActiveClass = 'tns-nav-active',\r\n navStr = 'Carousel Page ',\r\n navStrCurrent = ' (Current Slide)';\r\n } // autoplay\r\n\r\n\r\n if (hasAutoplay) {\r\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\r\n autoplayButton = options.autoplayButton,\r\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\r\n autoplayHtmlStrings = ['<span class=\\'tns-visually-hidden\\'>', ' animation</span>'],\r\n autoplayTimer,\r\n animating,\r\n autoplayHoverPaused,\r\n autoplayUserPaused,\r\n autoplayVisibilityPaused;\r\n }\r\n\r\n if (hasTouch || hasMouseDrag) {\r\n var initPosition = {},\r\n lastPosition = {},\r\n translateInit,\r\n panStart = false,\r\n rafIndex,\r\n getDist = horizontal ? function (a, b) {\r\n return a.x - b.x;\r\n } : function (a, b) {\r\n return a.y - b.y;\r\n };\r\n } // disable slider when slidecount <= items\r\n\r\n\r\n if (!autoWidth) {\r\n resetVariblesWhenDisable(disable || freeze);\r\n }\r\n\r\n if (TRANSFORM) {\r\n transformAttr = TRANSFORM;\r\n transformPrefix = 'translate';\r\n\r\n if (HAS3DTRANSFORMS) {\r\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\r\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\r\n } else {\r\n transformPrefix += horizontal ? 'X(' : 'Y(';\r\n transformPostfix = ')';\r\n }\r\n }\r\n\r\n if (carousel) {\r\n container.className = container.className.replace('tns-vpfix', '');\r\n }\r\n\r\n initStructure();\r\n initSheet();\r\n initSliderTransform(); // === COMMON FUNCTIONS === //\r\n\r\n function resetVariblesWhenDisable(condition) {\r\n if (condition) {\r\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\r\n }\r\n }\r\n\r\n function getCurrentSlide() {\r\n var tem = carousel ? index - cloneCount : index;\r\n\r\n while (tem < 0) {\r\n tem += slideCount;\r\n }\r\n\r\n return tem % slideCount + 1;\r\n }\r\n\r\n function getStartIndex(ind) {\r\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\r\n return carousel ? ind + cloneCount : ind;\r\n }\r\n\r\n function getAbsIndex(i) {\r\n if (i == null) {\r\n i = index;\r\n }\r\n\r\n if (carousel) {\r\n i -= cloneCount;\r\n }\r\n\r\n while (i < 0) {\r\n i += slideCount;\r\n }\r\n\r\n return Math.floor(i % slideCount);\r\n }\r\n\r\n function getCurrentNavIndex() {\r\n var absIndex = getAbsIndex(),\r\n result;\r\n result = navAsThumbnails ? absIndex : fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) : Math.floor(absIndex / items); // set active nav to the last one when reaches the right edge\r\n\r\n if (!loop && carousel && index === indexMax) {\r\n result = pages - 1;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function getItemsMax() {\r\n // fixedWidth or autoWidth while viewportMax is not available\r\n if (autoWidth || fixedWidth && !viewportMax) {\r\n return slideCount - 1; // most cases\r\n } else {\r\n var str = fixedWidth ? 'fixedWidth' : 'items',\r\n arr = [];\r\n\r\n if (fixedWidth || options[str] < slideCount) {\r\n arr.push(options[str]);\r\n }\r\n\r\n if (responsive) {\r\n for (var bp in responsive) {\r\n var tem = responsive[bp][str];\r\n\r\n if (tem && (fixedWidth || tem < slideCount)) {\r\n arr.push(tem);\r\n }\r\n }\r\n }\r\n\r\n if (!arr.length) {\r\n arr.push(0);\r\n }\r\n\r\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\r\n }\r\n }\r\n\r\n function getCloneCountForLoop() {\r\n var itemsMax = getItemsMax(),\r\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount) / 2) : itemsMax * 4 - slideCount;\r\n result = Math.max(itemsMax, result);\r\n return hasOption('edgePadding') ? result + 1 : result;\r\n }\r\n\r\n function getWindowWidth() {\r\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\r\n }\r\n\r\n function getInsertPosition(pos) {\r\n return pos === 'top' ? 'afterbegin' : 'beforeend';\r\n }\r\n\r\n function getClientWidth(el) {\r\n if (el == null) {\r\n return;\r\n }\r\n\r\n var div = doc.createElement('div'),\r\n rect,\r\n width;\r\n el.appendChild(div);\r\n rect = div.getBoundingClientRect();\r\n width = rect.right - rect.left;\r\n div.remove();\r\n return width || getClientWidth(el.parentNode);\r\n }\r\n\r\n function getViewportWidth() {\r\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\r\n return getClientWidth(containerParent) - gap;\r\n }\r\n\r\n function hasOption(item) {\r\n if (options[item]) {\r\n return true;\r\n } else {\r\n if (responsive) {\r\n for (var bp in responsive) {\r\n if (responsive[bp][item]) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n } // get option:\r\n // fixed width: viewport, fixedWidth, gutter => items\r\n // others: window width => all variables\r\n // all: items => slideBy\r\n\r\n\r\n function getOption(item, ww) {\r\n if (ww == null) {\r\n ww = windowWidth;\r\n }\r\n\r\n if (item === 'items' && fixedWidth) {\r\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\r\n } else {\r\n var result = options[item];\r\n\r\n if (responsive) {\r\n for (var bp in responsive) {\r\n // bp: convert string to number\r\n if (ww >= parseInt(bp)) {\r\n if (item in responsive[bp]) {\r\n result = responsive[bp][item];\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (item === 'slideBy' && result === 'page') {\r\n result = getOption('items');\r\n }\r\n\r\n if (!carousel && (item === 'slideBy' || item === 'items')) {\r\n result = Math.floor(result);\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n\r\n function getSlideMarginLeft(i) {\r\n return CALC ? CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' : i * 100 / slideCountNew + '%';\r\n }\r\n\r\n function getInnerWrapperStyles(edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\r\n var str = '';\r\n\r\n if (edgePaddingTem !== undefined) {\r\n var gap = edgePaddingTem;\r\n\r\n if (gutterTem) {\r\n gap -= gutterTem;\r\n }\r\n\r\n str = horizontal ? 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' : 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\r\n } else if (gutterTem && !fixedWidthTem) {\r\n var gutterTemUnit = '-' + gutterTem + 'px',\r\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\r\n str = 'margin: 0 ' + dir + ';';\r\n }\r\n\r\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) {\r\n str += getTransitionDurationStyle(speedTem);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n function getContainerWidth(fixedWidthTem, gutterTem, itemsTem) {\r\n if (fixedWidthTem) {\r\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\r\n } else {\r\n return CALC ? CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' : slideCountNew * 100 / itemsTem + '%';\r\n }\r\n }\r\n\r\n function getSlideWidthStyle(fixedWidthTem, gutterTem, itemsTem) {\r\n var width;\r\n\r\n if (fixedWidthTem) {\r\n width = fixedWidthTem + gutterTem + 'px';\r\n } else {\r\n if (!carousel) {\r\n itemsTem = Math.floor(itemsTem);\r\n }\r\n\r\n var dividend = carousel ? slideCountNew : itemsTem;\r\n width = CALC ? CALC + '(100% / ' + dividend + ')' : 100 / dividend + '%';\r\n }\r\n\r\n width = 'width:' + width; // inner slider: overwrite outer slider styles\r\n\r\n return nested !== 'inner' ? width + ';' : width + ' !important;';\r\n }\r\n\r\n function getSlideGutterStyle(gutterTem) {\r\n var str = ''; // gutter maybe interger || 0\r\n // so can't use 'if (gutter)'\r\n\r\n if (gutterTem !== false) {\r\n var prop = horizontal ? 'padding-' : 'margin-',\r\n dir = horizontal ? 'right' : 'bottom';\r\n str = prop + dir + ': ' + gutterTem + 'px;';\r\n }\r\n\r\n return str;\r\n }\r\n\r\n function getCSSPrefix(name, num) {\r\n var prefix = name.substring(0, name.length - num).toLowerCase();\r\n\r\n if (prefix) {\r\n prefix = '-' + prefix + '-';\r\n }\r\n\r\n return prefix;\r\n }\r\n\r\n function getTransitionDurationStyle(speed) {\r\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\r\n }\r\n\r\n function getAnimationDurationStyle(speed) {\r\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\r\n }\r\n\r\n function initStructure() {\r\n var classOuter = 'tns-outer',\r\n classInner = 'tns-inner';\r\n hasOption('gutter');\r\n outerWrapper.className = classOuter;\r\n innerWrapper.className = classInner;\r\n outerWrapper.id = slideId + '-ow';\r\n innerWrapper.id = slideId + '-iw'; // set container properties\r\n\r\n if (container.id === '') {\r\n container.id = slideId;\r\n }\r\n\r\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\r\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\r\n\r\n if (autoWidth) {\r\n newContainerClasses += ' tns-autowidth';\r\n }\r\n\r\n newContainerClasses += ' tns-' + options.axis;\r\n container.className += newContainerClasses; // add constrain layer for carousel\r\n\r\n if (carousel) {\r\n middleWrapper = doc.createElement('div');\r\n middleWrapper.id = slideId + '-mw';\r\n middleWrapper.className = 'tns-ovh';\r\n outerWrapper.appendChild(middleWrapper);\r\n middleWrapper.appendChild(innerWrapper);\r\n } else {\r\n outerWrapper.appendChild(innerWrapper);\r\n }\r\n\r\n if (autoHeight) {\r\n var wp = middleWrapper ? middleWrapper : innerWrapper;\r\n wp.className += ' tns-ah';\r\n }\r\n\r\n containerParent.insertBefore(outerWrapper, container);\r\n innerWrapper.appendChild(container); // add id, class, aria attributes\r\n // before clone slides\r\n\r\n forEach(slideItems, function (item, i) {\r\n addClass(item, 'tns-item');\r\n\r\n if (!item.id) {\r\n item.id = slideId + '-item' + i;\r\n }\r\n\r\n if (!carousel && animateNormal) {\r\n addClass(item, animateNormal);\r\n }\r\n\r\n setAttrs(item, {\r\n 'aria-hidden': 'true',\r\n 'tabindex': '-1'\r\n });\r\n }); // ## clone slides\r\n // carousel: n + slides + n\r\n // gallery: slides + n\r\n\r\n if (cloneCount) {\r\n var fragmentBefore = doc.createDocumentFragment(),\r\n fragmentAfter = doc.createDocumentFragment();\r\n\r\n for (var j = cloneCount; j--;) {\r\n var num = j % slideCount,\r\n cloneFirst = slideItems[num].cloneNode(true);\r\n addClass(cloneFirst, slideClonedClass);\r\n removeAttrs(cloneFirst, 'id');\r\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\r\n\r\n if (carousel) {\r\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\r\n addClass(cloneLast, slideClonedClass);\r\n removeAttrs(cloneLast, 'id');\r\n fragmentBefore.appendChild(cloneLast);\r\n }\r\n }\r\n\r\n container.insertBefore(fragmentBefore, container.firstChild);\r\n container.appendChild(fragmentAfter);\r\n slideItems = Array.from(container.children).filter(node => node.tagName.toLowerCase() !== 'script');\r\n }\r\n }\r\n\r\n function initSliderTransform() {\r\n // ## images loaded/failed\r\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\r\n var imgs = container.querySelectorAll('img'); // add img load event listener\r\n\r\n forEach(imgs, function (img) {\r\n var src = img.src;\r\n\r\n if (!lazyload) {\r\n // not data img\r\n if (src && src.indexOf('data:image') < 0) {\r\n img.src = '';\r\n addEvents(img, imgEvents);\r\n addClass(img, 'loading');\r\n img.src = src; // data img\r\n } else {\r\n imgLoaded(img);\r\n }\r\n }\r\n }); // set imgsComplete\r\n\r\n raf(function () {\r\n imgsLoadedCheck(arrayFromNodeList(imgs), function () {\r\n imgsComplete = true;\r\n });\r\n }); // reset imgs for auto height: check visible imgs only\r\n\r\n if (hasOption('autoHeight')) {\r\n imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1));\r\n }\r\n\r\n lazyload ? initSliderTransformStyleCheck() : raf(function () {\r\n imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck);\r\n });\r\n } else {\r\n // set container transform property\r\n if (carousel) {\r\n doContainerTransformSilent();\r\n } // update slider tools and events\r\n\r\n\r\n initTools();\r\n initEvents();\r\n }\r\n }\r\n\r\n function initSliderTransformStyleCheck() {\r\n if (autoWidth && slideCount > 1) {\r\n // check styles application\r\n var num = loop ? index : slideCount - 1;\r\n\r\n (function stylesApplicationCheck() {\r\n var left = slideItems[num].getBoundingClientRect().left;\r\n var right = slideItems[num - 1].getBoundingClientRect().right;\r\n Math.abs(left - right) <= 1 ? initSliderTransformCore() : setTimeout(function () {\r\n stylesApplicationCheck();\r\n }, 16);\r\n })();\r\n } else {\r\n initSliderTransformCore();\r\n }\r\n }\r\n\r\n function initSliderTransformCore() {\r\n // run Fn()s which are rely on image loading\r\n if (!horizontal || autoWidth) {\r\n setSlidePositions();\r\n\r\n if (autoWidth) {\r\n rightBoundary = getRightBoundary();\r\n\r\n if (freezable) {\r\n freeze = getFreeze();\r\n }\r\n\r\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\r\n\r\n resetVariblesWhenDisable(disable || freeze);\r\n } else {\r\n updateContentWrapperHeight();\r\n }\r\n } // set container transform property\r\n\r\n\r\n if (carousel) {\r\n doContainerTransformSilent();\r\n } // update slider tools and events\r\n\r\n\r\n initTools();\r\n initEvents();\r\n }\r\n\r\n function initSheet() {\r\n // gallery:\r\n // set animation classes and left value for gallery slider\r\n if (!carousel) {\r\n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\r\n var item = slideItems[i];\r\n item.style.left = (i - index) * 100 / items + '%';\r\n addClass(item, animateIn);\r\n removeClass(item, animateNormal);\r\n }\r\n } // #### LAYOUT\r\n // ## INLINE-BLOCK VS FLOAT\r\n // ## PercentageLayout:\r\n // slides: inline-block\r\n // remove blank space between slides by set font-size: 0\r\n // ## Non PercentageLayout:\r\n // slides: float\r\n // margin-right: -100%\r\n // margin-left: ~\r\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\r\n\r\n\r\n if (horizontal) {\r\n if (PERCENTAGELAYOUT || autoWidth) {\r\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\r\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\r\n } else if (carousel) {\r\n forEach(slideItems, function (slide, i) {\r\n slide.style.marginLeft = getSlideMarginLeft(i);\r\n });\r\n }\r\n } // ## BASIC STYLES\r\n\r\n\r\n if (CSSMQ) {\r\n // middle wrapper style\r\n if (TRANSITIONDURATION) {\r\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\r\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\r\n } // inner wrapper styles\r\n\r\n\r\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\r\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet)); // container styles\r\n\r\n if (carousel) {\r\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\r\n\r\n if (TRANSITIONDURATION) {\r\n str += getTransitionDurationStyle(speed);\r\n }\r\n\r\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\r\n } // slide styles\r\n\r\n\r\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\r\n\r\n if (options.gutter) {\r\n str += getSlideGutterStyle(options.gutter);\r\n } // set gallery items transition-duration\r\n\r\n\r\n if (!carousel) {\r\n if (TRANSITIONDURATION) {\r\n str += getTransitionDurationStyle(speed);\r\n }\r\n\r\n if (ANIMATIONDURATION) {\r\n str += getAnimationDurationStyle(speed);\r\n }\r\n }\r\n\r\n if (str) {\r\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\r\n } // non CSS mediaqueries: IE8\r\n // ## update inner wrapper, container, slides if needed\r\n // set inline styles for inner wrapper & container\r\n // insert stylesheet (one line) for slides only (since slides are many)\r\n\r\n } else {\r\n // middle wrapper styles\r\n update_carousel_transition_duration(); // inner wrapper styles\r\n\r\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight); // container styles\r\n\r\n if (carousel && horizontal && !autoWidth) {\r\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\r\n } // slide styles\r\n\r\n\r\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\r\n\r\n if (gutter) {\r\n str += getSlideGutterStyle(gutter);\r\n } // append to the last line\r\n\r\n\r\n if (str) {\r\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\r\n }\r\n } // ## MEDIAQUERIES\r\n\r\n\r\n if (responsive && CSSMQ) {\r\n for (var bp in responsive) {\r\n // bp: convert string to number\r\n bp = parseInt(bp);\r\n var opts = responsive[bp],\r\n str = '',\r\n middleWrapperStr = '',\r\n innerWrapperStr = '',\r\n containerStr = '',\r\n slideStr = '',\r\n itemsBP = !autoWidth ? getOption('items', bp) : null,\r\n fixedWidthBP = getOption('fixedWidth', bp),\r\n speedBP = getOption('speed', bp),\r\n edgePaddingBP = getOption('edgePadding', bp),\r\n autoHeightBP = getOption('autoHeight', bp),\r\n gutterBP = getOption('gutter', bp); // middle wrapper string\r\n\r\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\r\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\r\n } // inner wrapper string\r\n\r\n\r\n if ('edgePadding' in opts || 'gutter' in opts) {\r\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\r\n } // container string\r\n\r\n\r\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || fixedWidth && 'gutter' in opts)) {\r\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\r\n }\r\n\r\n if (TRANSITIONDURATION && 'speed' in opts) {\r\n containerStr += getTransitionDurationStyle(speedBP);\r\n }\r\n\r\n if (containerStr) {\r\n containerStr = '#' + slideId + '{' + containerStr + '}';\r\n } // slide string\r\n\r\n\r\n if ('fixedWidth' in opts || fixedWidth && 'gutter' in opts || !carousel && 'items' in opts) {\r\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\r\n }\r\n\r\n if ('gutter' in opts) {\r\n slideStr += getSlideGutterStyle(gutterBP);\r\n } // set gallery items transition-duration\r\n\r\n\r\n if (!carousel && 'speed' in opts) {\r\n if (TRANSITIONDURATION) {\r\n slideStr += getTransitionDurationStyle(speedBP);\r\n }\r\n\r\n if (ANIMATIONDURATION) {\r\n slideStr += getAnimationDurationStyle(speedBP);\r\n }\r\n }\r\n\r\n if (slideStr) {\r\n slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}';\r\n } // add up\r\n\r\n\r\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\r\n\r\n if (str) {\r\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function initTools() {\r\n // == slides ==\r\n updateSlideStatus(); // == live region ==\r\n\r\n outerWrapper.insertAdjacentHTML('afterbegin', '<div class=\"tns-liveregion tns-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">slide <span class=\"current\">' + getLiveRegionStr() + '</span> of ' + slideCount + '</div>');\r\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current'); // == autoplayInit ==\r\n\r\n if (hasAutoplay) {\r\n var txt = autoplay ? 'stop' : 'start';\r\n\r\n if (autoplayButton) {\r\n setAttrs(autoplayButton, {\r\n 'data-action': txt\r\n });\r\n } else if (options.autoplayButtonOutput) {\r\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '<button type=\"button\" data-action=\"' + txt + '\">' + autoplayHtmlStrings[0] + txt + autoplayHtmlStrings[1] + autoplayText[0] + '</button>');\r\n autoplayButton = outerWrapper.querySelector('[data-action]');\r\n } // add event\r\n\r\n\r\n if (autoplayButton) {\r\n addEvents(autoplayButton, {\r\n 'click': toggleAutoplay\r\n });\r\n }\r\n\r\n if (autoplay) {\r\n startAutoplay();\r\n\r\n if (autoplayHoverPause) {\r\n addEvents(container, hoverEvents);\r\n }\r\n\r\n if (autoplayResetOnVisibility) {\r\n addEvents(container, visibilityEvent);\r\n }\r\n }\r\n } // == navInit ==\r\n\r\n\r\n if (hasNav) {\r\n // will not hide the navs in case they're thumbnails\r\n\r\n if (navContainer) {\r\n setAttrs(navContainer, {\r\n 'aria-label': 'Carousel Pagination'\r\n });\r\n navItems = navContainer.children;\r\n forEach(navItems, function (item, i) {\r\n setAttrs(item, {\r\n 'data-nav': i,\r\n 'tabindex': '-1',\r\n 'aria-label': navStr + (i + 1),\r\n 'aria-controls': slideId\r\n });\r\n }); // generated nav\r\n } else {\r\n var navHtml = '',\r\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\r\n\r\n for (var i = 0; i < slideCount; i++) {\r\n // hide nav items by default\r\n navHtml += '<button type=\"button\" data-nav=\"' + i + '\" tabindex=\"-1\" aria-controls=\"' + slideId + '\" ' + hiddenStr + ' aria-label=\"' + navStr + (i + 1) + '\"></button>';\r\n }\r\n\r\n navHtml = '<div class=\"tns-nav\" aria-label=\"Carousel Pagination\">' + navHtml + '</div>';\r\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\r\n navContainer = outerWrapper.querySelector('.tns-nav');\r\n navItems = navContainer.children;\r\n }\r\n\r\n updateNavVisibility(); // add transition\r\n\r\n if (TRANSITIONDURATION) {\r\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\r\n str = 'transition: all ' + speed / 1000 + 's';\r\n\r\n if (prefix) {\r\n str = '-' + prefix + '-' + str;\r\n }\r\n\r\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\r\n }\r\n\r\n setAttrs(navItems[navCurrentIndex], {\r\n 'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent\r\n });\r\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\r\n addClass(navItems[navCurrentIndex], navActiveClass); // add events\r\n\r\n addEvents(navContainer, navEvents);\r\n } // == controlsInit ==\r\n\r\n\r\n if (hasControls) {\r\n if (!controlsContainer && (!prevButton || !nextButton)) {\r\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '<div class=\"tns-controls\" aria-label=\"Carousel Navigation\" tabindex=\"0\"><button type=\"button\" data-controls=\"prev\" tabindex=\"-1\" aria-controls=\"' + slideId + '\">' + controlsText[0] + '</button><button type=\"button\" data-controls=\"next\" tabindex=\"-1\" aria-controls=\"' + slideId + '\">' + controlsText[1] + '</button></div>');\r\n controlsContainer = outerWrapper.querySelector('.tns-controls');\r\n }\r\n\r\n if (!prevButton || !nextButton) {\r\n prevButton = controlsContainer.children[0];\r\n nextButton = controlsContainer.children[1];\r\n }\r\n\r\n if (options.controlsContainer) {\r\n setAttrs(controlsContainer, {\r\n 'aria-label': 'Carousel Navigation',\r\n 'tabindex': '0'\r\n });\r\n }\r\n\r\n if (options.controlsContainer || options.prevButton && options.nextButton) {\r\n setAttrs([prevButton, nextButton], {\r\n 'aria-controls': slideId,\r\n 'tabindex': '-1'\r\n });\r\n }\r\n\r\n if (options.controlsContainer || options.prevButton && options.nextButton) {\r\n setAttrs(prevButton, {\r\n 'data-controls': 'prev'\r\n });\r\n setAttrs(nextButton, {\r\n 'data-controls': 'next'\r\n });\r\n }\r\n\r\n prevIsButton = isButton(prevButton);\r\n nextIsButton = isButton(nextButton);\r\n updateControlsStatus(); // add events\r\n\r\n if (controlsContainer) {\r\n addEvents(controlsContainer, controlsEvents);\r\n } else {\r\n addEvents(prevButton, controlsEvents);\r\n addEvents(nextButton, controlsEvents);\r\n }\r\n } // hide tools if needed\r\n\r\n\r\n disableUI();\r\n }\r\n\r\n function initEvents() {\r\n // add events\r\n if (carousel && TRANSITIONEND) {\r\n var eve = {};\r\n eve[TRANSITIONEND] = onTransitionEnd;\r\n addEvents(container, eve);\r\n }\r\n\r\n if (touch) {\r\n addEvents(container, touchEvents, options.preventScrollOnTouch);\r\n }\r\n\r\n if (mouseDrag) {\r\n addEvents(container, dragEvents);\r\n }\r\n\r\n if (arrowKeys) {\r\n addEvents(doc, docmentKeydownEvent);\r\n }\r\n\r\n if (nested === 'inner') {\r\n events.on('outerResized', function () {\r\n resizeTasks();\r\n events.emit('innerLoaded', info());\r\n });\r\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\r\n addEvents(win, {\r\n 'resize': onResize\r\n });\r\n }\r\n\r\n if (autoHeight) {\r\n if (nested === 'outer') {\r\n events.on('innerLoaded', doAutoHeight);\r\n } else if (!disable) {\r\n doAutoHeight();\r\n }\r\n }\r\n\r\n doLazyLoad();\r\n\r\n if (disable) {\r\n disableSlider();\r\n } else if (freeze) {\r\n freezeSlider();\r\n }\r\n\r\n events.on('indexChanged', additionalUpdates);\r\n\r\n if (nested === 'inner') {\r\n events.emit('innerLoaded', info());\r\n }\r\n\r\n if (typeof onInit === 'function') {\r\n onInit(info());\r\n }\r\n\r\n isOn = true;\r\n }\r\n\r\n function destroy() {\r\n // sheet\r\n sheet.disabled = true;\r\n\r\n if (sheet.ownerNode) {\r\n sheet.ownerNode.remove();\r\n } // remove win event listeners\r\n\r\n\r\n removeEvents(win, {\r\n 'resize': onResize\r\n }); // arrowKeys, controls, nav\r\n\r\n if (arrowKeys) {\r\n removeEvents(doc, docmentKeydownEvent);\r\n }\r\n\r\n if (controlsContainer) {\r\n removeEvents(controlsContainer, controlsEvents);\r\n }\r\n\r\n if (navContainer) {\r\n removeEvents(navContainer, navEvents);\r\n } // autoplay\r\n\r\n\r\n removeEvents(container, hoverEvents);\r\n removeEvents(container, visibilityEvent);\r\n\r\n if (autoplayButton) {\r\n removeEvents(autoplayButton, {\r\n 'click': toggleAutoplay\r\n });\r\n }\r\n\r\n if (autoplay) {\r\n clearInterval(autoplayTimer);\r\n } // container\r\n\r\n\r\n if (carousel && TRANSITIONEND) {\r\n var eve = {};\r\n eve[TRANSITIONEND] = onTransitionEnd;\r\n removeEvents(container, eve);\r\n }\r\n\r\n if (touch) {\r\n removeEvents(container, touchEvents);\r\n }\r\n\r\n if (mouseDrag) {\r\n removeEvents(container, dragEvents);\r\n } // cache Object values in options && reset HTML\r\n\r\n\r\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\r\n tnsList.forEach(function (item, i) {\r\n var el = item === 'container' ? outerWrapper : options[item];\r\n\r\n if (typeof el === 'object' && el) {\r\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\r\n parentEl = el.parentNode;\r\n el.outerHTML = htmlList[i];\r\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\r\n }\r\n }); // reset variables\r\n\r\n tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = panStart = rafIndex = getDist = touch = mouseDrag = null; // check variables\r\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\r\n\r\n for (var a in this) {\r\n if (a !== 'rebuild') {\r\n this[a] = null;\r\n }\r\n }\r\n\r\n isOn = false;\r\n } // === ON RESIZE ===\r\n // responsive || fixedWidth || autoWidth || !horizontal\r\n\r\n\r\n function onResize(e) {\r\n raf(function () {\r\n resizeTasks(getEvent(e));\r\n });\r\n }\r\n\r\n function resizeTasks(e) {\r\n if (!isOn) {\r\n return;\r\n }\r\n\r\n if (nested === 'outer') {\r\n events.emit('outerResized', info(e));\r\n }\r\n\r\n windowWidth = getWindowWidth();\r\n var bpChanged,\r\n breakpointZoneTem = breakpointZone,\r\n needContainerTransform = false;\r\n\r\n if (responsive) {\r\n setBreakpointZone();\r\n bpChanged = breakpointZoneTem !== breakpointZone; // if (hasRightDeadZone) { needContainerTransform = true; } // *?\r\n\r\n if (bpChanged) {\r\n events.emit('newBreakpointStart', info(e));\r\n }\r\n }\r\n\r\n var indChanged,\r\n itemsChanged,\r\n itemsTem = items,\r\n disableTem = disable,\r\n freezeTem = freeze,\r\n arrowKeysTem = arrowKeys,\r\n controlsTem = controls,\r\n navTem = nav,\r\n touchTem = touch,\r\n mouseDragTem = mouseDrag,\r\n autoplayTem = autoplay,\r\n autoplayHoverPauseTem = autoplayHoverPause,\r\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\r\n indexTem = index;\r\n\r\n if (bpChanged) {\r\n var fixedWidthTem = fixedWidth,\r\n autoHeightTem = autoHeight,\r\n controlsTextTem = controlsText,\r\n centerTem = center,\r\n autoplayTextTem = autoplayText;\r\n\r\n if (!CSSMQ) {\r\n var gutterTem = gutter,\r\n edgePaddingTem = edgePadding;\r\n }\r\n } // get option:\r\n // fixed width: viewport, fixedWidth, gutter => items\r\n // others: window width => all variables\r\n // all: items => slideBy\r\n\r\n\r\n arrowKeys = getOption('arrowKeys');\r\n controls = getOption('controls');\r\n nav = getOption('nav');\r\n touch = getOption('touch');\r\n center = getOption('center');\r\n mouseDrag = getOption('mouseDrag');\r\n autoplay = getOption('autoplay');\r\n autoplayHoverPause = getOption('autoplayHoverPause');\r\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\r\n\r\n if (bpChanged) {\r\n disable = getOption('disable');\r\n fixedWidth = getOption('fixedWidth');\r\n speed = getOption('speed');\r\n autoHeight = getOption('autoHeight');\r\n controlsText = getOption('controlsText');\r\n autoplayText = getOption('autoplayText');\r\n autoplayTimeout = getOption('autoplayTimeout');\r\n\r\n if (!CSSMQ) {\r\n edgePadding = getOption('edgePadding');\r\n gutter = getOption('gutter');\r\n }\r\n } // update options\r\n\r\n\r\n resetVariblesWhenDisable(disable);\r\n viewport = getViewportWidth(); // <= edgePadding, gutter\r\n\r\n if ((!horizontal || autoWidth) && !disable) {\r\n setSlidePositions();\r\n\r\n if (!horizontal) {\r\n updateContentWrapperHeight(); // <= setSlidePositions\r\n\r\n needContainerTransform = true;\r\n }\r\n }\r\n\r\n if (fixedWidth || autoWidth) {\r\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\r\n // fixedWidth: <= viewport, fixedWidth, gutter\r\n\r\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\r\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\r\n }\r\n\r\n if (bpChanged || fixedWidth) {\r\n items = getOption('items');\r\n slideBy = getOption('slideBy');\r\n itemsChanged = items !== itemsTem;\r\n\r\n if (itemsChanged) {\r\n if (!fixedWidth && !autoWidth) {\r\n indexMax = getIndexMax();\r\n } // <= items\r\n // check index before transform in case\r\n // slider reach the right edge then items become bigger\r\n\r\n\r\n updateIndex();\r\n }\r\n }\r\n\r\n if (bpChanged) {\r\n if (disable !== disableTem) {\r\n if (disable) {\r\n disableSlider();\r\n } else {\r\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\r\n }\r\n }\r\n }\r\n\r\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\r\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\r\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\r\n // <= others: items\r\n\r\n if (freeze !== freezeTem) {\r\n if (freeze) {\r\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\r\n freezeSlider();\r\n } else {\r\n unfreezeSlider();\r\n needContainerTransform = true;\r\n }\r\n }\r\n }\r\n\r\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\r\n\r\n if (!autoplay) {\r\n autoplayHoverPause = autoplayResetOnVisibility = false;\r\n }\r\n\r\n if (arrowKeys !== arrowKeysTem) {\r\n arrowKeys ? addEvents(doc, docmentKeydownEvent) : removeEvents(doc, docmentKeydownEvent);\r\n }\r\n\r\n if (controls !== controlsTem) {\r\n if (controls) {\r\n if (controlsContainer) {\r\n showElement(controlsContainer);\r\n } else {\r\n if (prevButton) {\r\n showElement(prevButton);\r\n }\r\n\r\n if (nextButton) {\r\n showElement(nextButton);\r\n }\r\n }\r\n } else {\r\n if (controlsContainer) {\r\n hideElement(controlsContainer);\r\n } else {\r\n if (prevButton) {\r\n hideElement(prevButton);\r\n }\r\n\r\n if (nextButton) {\r\n hideElement(nextButton);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (nav !== navTem) {\r\n if (nav) {\r\n showElement(navContainer);\r\n updateNavVisibility();\r\n } else {\r\n hideElement(navContainer);\r\n }\r\n }\r\n\r\n if (touch !== touchTem) {\r\n touch ? addEvents(container, touchEvents, options.preventScrollOnTouch) : removeEvents(container, touchEvents);\r\n }\r\n\r\n if (mouseDrag !== mouseDragTem) {\r\n mouseDrag ? addEvents(container, dragEvents) : removeEvents(container, dragEvents);\r\n }\r\n\r\n if (autoplay !== autoplayTem) {\r\n if (autoplay) {\r\n if (autoplayButton) {\r\n showElement(autoplayButton);\r\n }\r\n\r\n if (!animating && !autoplayUserPaused) {\r\n startAutoplay();\r\n }\r\n } else {\r\n if (autoplayButton) {\r\n hideElement(autoplayButton);\r\n }\r\n\r\n if (animating) {\r\n stopAutoplay();\r\n }\r\n }\r\n }\r\n\r\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\r\n autoplayHoverPause ? addEvents(container, hoverEvents) : removeEvents(container, hoverEvents);\r\n }\r\n\r\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\r\n autoplayResetOnVisibility ? addEvents(doc, visibilityEvent) : removeEvents(doc, visibilityEvent);\r\n }\r\n\r\n if (bpChanged) {\r\n if (fixedWidth !== fixedWidthTem || center !== centerTem) {\r\n needContainerTransform = true;\r\n }\r\n\r\n if (autoHeight !== autoHeightTem) {\r\n if (!autoHeight) {\r\n innerWrapper.style.height = '';\r\n }\r\n }\r\n\r\n if (controls && controlsText !== controlsTextTem) {\r\n prevButton.innerHTML = controlsText[0];\r\n nextButton.innerHTML = controlsText[1];\r\n }\r\n\r\n if (autoplayButton && autoplayText !== autoplayTextTem) {\r\n var i = autoplay ? 1 : 0,\r\n html = autoplayButton.innerHTML,\r\n len = html.length - autoplayTextTem[i].length;\r\n\r\n if (html.substring(len) === autoplayTextTem[i]) {\r\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\r\n }\r\n }\r\n } else {\r\n if (center && (fixedWidth || autoWidth)) {\r\n needContainerTransform = true;\r\n }\r\n }\r\n\r\n if (itemsChanged || fixedWidth && !autoWidth) {\r\n pages = getPages();\r\n updateNavVisibility();\r\n }\r\n\r\n indChanged = index !== indexTem;\r\n\r\n if (indChanged) {\r\n events.emit('indexChanged', info());\r\n needContainerTransform = true;\r\n } else if (itemsChanged) {\r\n if (!indChanged) {\r\n additionalUpdates();\r\n }\r\n } else if (fixedWidth || autoWidth) {\r\n doLazyLoad();\r\n updateSlideStatus();\r\n updateLiveRegion();\r\n }\r\n\r\n if (itemsChanged && !carousel) {\r\n updateGallerySlidePositions();\r\n }\r\n\r\n if (!disable && !freeze) {\r\n // non-mediaqueries: IE8\r\n if (bpChanged && !CSSMQ) {\r\n // middle wrapper styles\r\n // inner wrapper styles\r\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\r\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\r\n }\r\n\r\n if (horizontal) {\r\n // container styles\r\n if (carousel) {\r\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\r\n } // slide styles\r\n\r\n\r\n var str = getSlideWidthStyle(fixedWidth, gutter, items) + getSlideGutterStyle(gutter); // remove the last line and\r\n // add new styles\r\n\r\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\r\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\r\n }\r\n } // auto height\r\n\r\n\r\n if (autoHeight) {\r\n doAutoHeight();\r\n }\r\n\r\n if (needContainerTransform) {\r\n doContainerTransformSilent();\r\n indexCached = index;\r\n }\r\n }\r\n\r\n if (bpChanged) {\r\n events.emit('newBreakpointEnd', info(e));\r\n }\r\n } // === INITIALIZATION FUNCTIONS === //\r\n\r\n\r\n function getFreeze() {\r\n if (!fixedWidth && !autoWidth) {\r\n var a = center ? items - (items - 1) / 2 : items;\r\n return slideCount <= a;\r\n }\r\n\r\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\r\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\r\n\r\n if (center) {\r\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\r\n }\r\n\r\n return width <= vp;\r\n }\r\n\r\n function setBreakpointZone() {\r\n breakpointZone = 0;\r\n\r\n for (var bp in responsive) {\r\n bp = parseInt(bp); // convert string to number\r\n\r\n if (windowWidth >= bp) {\r\n breakpointZone = bp;\r\n }\r\n }\r\n } // (slideBy, indexMin, indexMax) => index\r\n\r\n\r\n var updateIndex = function () {\r\n return loop ? carousel ? // loop + carousel\r\n function () {\r\n var leftEdge = indexMin,\r\n rightEdge = indexMax;\r\n leftEdge += slideBy;\r\n rightEdge -= slideBy; // adjust edges when has edge paddings\r\n // or fixed-width slider with extra space on the right side\r\n\r\n if (edgePadding) {\r\n leftEdge += 1;\r\n rightEdge -= 1;\r\n } else if (fixedWidth) {\r\n if ((viewport + gutter) % (fixedWidth + gutter)) {\r\n rightEdge -= 1;\r\n }\r\n }\r\n\r\n if (cloneCount) {\r\n if (index > rightEdge) {\r\n index -= slideCount;\r\n } else if (index < leftEdge) {\r\n index += slideCount;\r\n }\r\n }\r\n } : // loop + gallery\r\n function () {\r\n if (index > indexMax) {\r\n while (index >= indexMin + slideCount) {\r\n index -= slideCount;\r\n }\r\n } else if (index < indexMin) {\r\n while (index <= indexMax - slideCount) {\r\n index += slideCount;\r\n }\r\n }\r\n } : // non-loop\r\n function () {\r\n index = Math.max(indexMin, Math.min(indexMax, index));\r\n };\r\n }();\r\n\r\n function disableUI() {\r\n if (!autoplay && autoplayButton) {\r\n hideElement(autoplayButton);\r\n }\r\n\r\n if (!nav && navContainer) {\r\n hideElement(navContainer);\r\n }\r\n\r\n if (!controls) {\r\n if (controlsContainer) {\r\n hideElement(controlsContainer);\r\n } else {\r\n if (prevButton) {\r\n hideElement(prevButton);\r\n }\r\n\r\n if (nextButton) {\r\n hideElement(nextButton);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function enableUI() {\r\n if (autoplay && autoplayButton) {\r\n showElement(autoplayButton);\r\n }\r\n\r\n if (nav && navContainer) {\r\n showElement(navContainer);\r\n }\r\n\r\n if (controls) {\r\n if (controlsContainer) {\r\n showElement(controlsContainer);\r\n } else {\r\n if (prevButton) {\r\n showElement(prevButton);\r\n }\r\n\r\n if (nextButton) {\r\n showElement(nextButton);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function freezeSlider() {\r\n if (frozen) {\r\n return;\r\n } // remove edge padding from inner wrapper\r\n\r\n\r\n if (edgePadding) {\r\n innerWrapper.style.margin = '0px';\r\n } // add class tns-transparent to cloned slides\r\n\r\n\r\n if (cloneCount) {\r\n var str = 'tns-transparent';\r\n\r\n for (var i = cloneCount; i--;) {\r\n if (carousel) {\r\n addClass(slideItems[i], str);\r\n }\r\n\r\n addClass(slideItems[slideCountNew - i - 1], str);\r\n }\r\n } // update tools\r\n\r\n\r\n disableUI();\r\n frozen = true;\r\n }\r\n\r\n function unfreezeSlider() {\r\n if (!frozen) {\r\n return;\r\n } // restore edge padding for inner wrapper\r\n // for mordern browsers\r\n\r\n\r\n if (edgePadding && CSSMQ) {\r\n innerWrapper.style.margin = '';\r\n } // remove class tns-transparent to cloned slides\r\n\r\n\r\n if (cloneCount) {\r\n var str = 'tns-transparent';\r\n\r\n for (var i = cloneCount; i--;) {\r\n if (carousel) {\r\n removeClass(slideItems[i], str);\r\n }\r\n\r\n removeClass(slideItems[slideCountNew - i - 1], str);\r\n }\r\n } // update tools\r\n\r\n\r\n enableUI();\r\n frozen = false;\r\n }\r\n\r\n function disableSlider() {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n sheet.disabled = true;\r\n container.className = container.className.replace(newContainerClasses.substring(1), '');\r\n removeAttrs(container, ['style']);\r\n\r\n if (loop) {\r\n for (var j = cloneCount; j--;) {\r\n if (carousel) {\r\n hideElement(slideItems[j]);\r\n }\r\n\r\n hideElement(slideItems[slideCountNew - j - 1]);\r\n }\r\n } // vertical slider\r\n\r\n\r\n if (!horizontal || !carousel) {\r\n removeAttrs(innerWrapper, ['style']);\r\n } // gallery\r\n\r\n\r\n if (!carousel) {\r\n for (var i = index, l = index + slideCount; i < l; i++) {\r\n var item = slideItems[i];\r\n removeAttrs(item, ['style']);\r\n removeClass(item, animateIn);\r\n removeClass(item, animateNormal);\r\n }\r\n } // update tools\r\n\r\n\r\n disableUI();\r\n disabled = true;\r\n }\r\n\r\n function enableSlider() {\r\n if (!disabled) {\r\n return;\r\n }\r\n\r\n sheet.disabled = false;\r\n container.className += newContainerClasses;\r\n doContainerTransformSilent();\r\n\r\n if (loop) {\r\n for (var j = cloneCount; j--;) {\r\n if (carousel) {\r\n showElement(slideItems[j]);\r\n }\r\n\r\n showElement(slideItems[slideCountNew - j - 1]);\r\n }\r\n } // gallery\r\n\r\n\r\n if (!carousel) {\r\n for (var i = index, l = index + slideCount; i < l; i++) {\r\n var item = slideItems[i],\r\n classN = i < index + items ? animateIn : animateNormal;\r\n item.style.left = (i - index) * 100 / items + '%';\r\n addClass(item, classN);\r\n }\r\n } // update tools\r\n\r\n\r\n enableUI();\r\n disabled = false;\r\n }\r\n\r\n function updateLiveRegion() {\r\n var str = getLiveRegionStr();\r\n\r\n if (liveregionCurrent.innerHTML !== str) {\r\n liveregionCurrent.innerHTML = str;\r\n }\r\n }\r\n\r\n function getLiveRegionStr() {\r\n var arr = getVisibleSlideRange(),\r\n start = arr[0] + 1,\r\n end = arr[1] + 1;\r\n return start === end ? start + '' : start + ' to ' + end;\r\n }\r\n\r\n function getVisibleSlideRange(val) {\r\n if (val == null) {\r\n val = getContainerTransformValue();\r\n }\r\n\r\n var start = index,\r\n end,\r\n rangestart,\r\n rangeend; // get range start, range end for autoWidth and fixedWidth\r\n\r\n if (center || edgePadding) {\r\n if (autoWidth || fixedWidth) {\r\n rangestart = -(parseFloat(val) + edgePadding);\r\n rangeend = rangestart + viewport + edgePadding * 2;\r\n }\r\n } else {\r\n if (autoWidth) {\r\n rangestart = slidePositions[index];\r\n rangeend = rangestart + viewport;\r\n }\r\n } // get start, end\r\n // - check auto width\r\n\r\n\r\n if (autoWidth) {\r\n slidePositions.forEach(function (point, i) {\r\n if (i < slideCountNew) {\r\n if ((center || edgePadding) && point <= rangestart + 0.5) {\r\n start = i;\r\n }\r\n\r\n if (rangeend - point >= 0.5) {\r\n end = i;\r\n }\r\n }\r\n }); // - check percentage width, fixed width\r\n } else {\r\n if (fixedWidth) {\r\n var cell = fixedWidth + gutter;\r\n\r\n if (center || edgePadding) {\r\n start = Math.floor(rangestart / cell);\r\n end = Math.ceil(rangeend / cell - 1);\r\n } else {\r\n end = start + Math.ceil(viewport / cell) - 1;\r\n }\r\n } else {\r\n if (center || edgePadding) {\r\n var a = items - 1;\r\n\r\n if (center) {\r\n start -= a / 2;\r\n end = index + a / 2;\r\n } else {\r\n end = index + a;\r\n }\r\n\r\n if (edgePadding) {\r\n var b = edgePadding * items / viewport;\r\n start -= b;\r\n end += b;\r\n }\r\n\r\n start = Math.floor(start);\r\n end = Math.ceil(end);\r\n } else {\r\n end = start + items - 1;\r\n }\r\n }\r\n\r\n start = Math.max(start, 0);\r\n end = Math.min(end, slideCountNew - 1);\r\n }\r\n\r\n return [start, end];\r\n }\r\n\r\n function doLazyLoad() {\r\n if (lazyload && !disable) {\r\n var arg = getVisibleSlideRange();\r\n arg.push(lazyloadSelector);\r\n getImageArray.apply(null, arg).forEach(function (img) {\r\n if (!hasClass(img, imgCompleteClass)) {\r\n // stop propagation transitionend event to container\r\n var eve = {};\r\n\r\n eve[TRANSITIONEND] = function (e) {\r\n e.stopPropagation();\r\n };\r\n\r\n addEvents(img, eve);\r\n addEvents(img, imgEvents); // update src\r\n\r\n img.src = getAttr(img, 'data-src'); // update srcset\r\n\r\n var srcset = getAttr(img, 'data-srcset');\r\n\r\n if (srcset) {\r\n img.srcset = srcset;\r\n }\r\n\r\n addClass(img, 'loading');\r\n }\r\n });\r\n }\r\n }\r\n\r\n function onImgLoaded(e) {\r\n imgLoaded(getTarget(e));\r\n }\r\n\r\n function onImgFailed(e) {\r\n imgFailed(getTarget(e));\r\n }\r\n\r\n function imgLoaded(img) {\r\n addClass(img, 'loaded');\r\n imgCompleted(img);\r\n }\r\n\r\n function imgFailed(img) {\r\n addClass(img, 'failed');\r\n imgCompleted(img);\r\n }\r\n\r\n function imgCompleted(img) {\r\n addClass(img, imgCompleteClass);\r\n removeClass(img, 'loading');\r\n removeEvents(img, imgEvents);\r\n }\r\n\r\n function getImageArray(start, end, imgSelector) {\r\n var imgs = [];\r\n\r\n if (!imgSelector) {\r\n imgSelector = 'img';\r\n }\r\n\r\n while (start <= end) {\r\n forEach(slideItems[start].querySelectorAll(imgSelector), function (img) {\r\n imgs.push(img);\r\n });\r\n start++;\r\n }\r\n\r\n return imgs;\r\n } // check if all visible images are loaded\r\n // and update container height if it's done\r\n\r\n\r\n function doAutoHeight() {\r\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\r\n raf(function () {\r\n imgsLoadedCheck(imgs, updateInnerWrapperHeight);\r\n });\r\n }\r\n\r\n function imgsLoadedCheck(imgs, cb) {\r\n // execute callback function if all images are complete\r\n if (imgsComplete) {\r\n return cb();\r\n } // check image classes\r\n\r\n\r\n imgs.forEach(function (img, index) {\r\n if (!lazyload && img.complete) {\r\n imgCompleted(img);\r\n } // Check image.complete\r\n\r\n\r\n if (hasClass(img, imgCompleteClass)) {\r\n imgs.splice(index, 1);\r\n }\r\n }); // execute callback function if selected images are all complete\r\n\r\n if (!imgs.length) {\r\n return cb();\r\n } // otherwise execute this functiona again\r\n\r\n\r\n raf(function () {\r\n imgsLoadedCheck(imgs, cb);\r\n });\r\n }\r\n\r\n function additionalUpdates() {\r\n doLazyLoad();\r\n updateSlideStatus();\r\n updateLiveRegion();\r\n updateControlsStatus();\r\n updateNavStatus();\r\n }\r\n\r\n function update_carousel_transition_duration() {\r\n if (carousel && autoHeight) {\r\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\r\n }\r\n }\r\n\r\n function getMaxSlideHeight(slideStart, slideRange) {\r\n var heights = [];\r\n\r\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\r\n heights.push(slideItems[i].offsetHeight);\r\n }\r\n\r\n return Math.max.apply(null, heights);\r\n } // update inner wrapper height\r\n // 1. get the max-height of the visible slides\r\n // 2. set transitionDuration to speed\r\n // 3. update inner wrapper height to max-height\r\n // 4. set transitionDuration to 0s after transition done\r\n\r\n\r\n function updateInnerWrapperHeight() {\r\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\r\n wp = middleWrapper ? middleWrapper : innerWrapper;\r\n\r\n if (wp.style.height !== maxHeight) {\r\n wp.style.height = maxHeight + 'px';\r\n }\r\n } // get the distance from the top edge of the first slide to each slide\r\n // (init) => slidePositions\r\n\r\n\r\n function setSlidePositions() {\r\n slidePositions = [0];\r\n var attr = horizontal ? 'left' : 'top',\r\n attr2 = horizontal ? 'right' : 'bottom',\r\n base = slideItems[0].getBoundingClientRect()[attr];\r\n forEach(slideItems, function (item, i) {\r\n // skip the first slide\r\n if (i) {\r\n slidePositions.push(item.getBoundingClientRect()[attr] - base);\r\n } // add the end edge\r\n\r\n\r\n if (i === slideCountNew - 1) {\r\n slidePositions.push(item.getBoundingClientRect()[attr2] - base);\r\n }\r\n });\r\n } // update slide\r\n\r\n\r\n function updateSlideStatus() {\r\n var range = getVisibleSlideRange(),\r\n start = range[0],\r\n end = range[1];\r\n forEach(slideItems, function (item, i) {\r\n // show slides\r\n if (i >= start && i <= end) {\r\n if (hasAttr(item, 'aria-hidden')) {\r\n removeAttrs(item, ['aria-hidden', 'tabindex']);\r\n addClass(item, slideActiveClass);\r\n } // hide slides\r\n\r\n } else {\r\n if (!hasAttr(item, 'aria-hidden')) {\r\n setAttrs(item, {\r\n 'aria-hidden': 'true',\r\n 'tabindex': '-1'\r\n });\r\n removeClass(item, slideActiveClass);\r\n }\r\n }\r\n });\r\n } // gallery: update slide position\r\n\r\n\r\n function updateGallerySlidePositions() {\r\n var l = index + Math.min(slideCount, items);\r\n\r\n for (var i = slideCountNew; i--;) {\r\n var item = slideItems[i];\r\n\r\n if (i >= index && i < l) {\r\n // add transitions to visible slides when adjusting their positions\r\n addClass(item, 'tns-moving');\r\n item.style.left = (i - index) * 100 / items + '%';\r\n addClass(item, animateIn);\r\n removeClass(item, animateNormal);\r\n } else if (item.style.left) {\r\n item.style.left = '';\r\n addClass(item, animateNormal);\r\n removeClass(item, animateIn);\r\n } // remove outlet animation\r\n\r\n\r\n removeClass(item, animateOut);\r\n } // removing '.tns-moving'\r\n\r\n\r\n setTimeout(function () {\r\n forEach(slideItems, function (el) {\r\n removeClass(el, 'tns-moving');\r\n });\r\n }, 300);\r\n } // set tabindex on Nav\r\n\r\n\r\n function updateNavStatus() {\r\n // get current nav\r\n if (nav) {\r\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\r\n navClicked = -1;\r\n\r\n if (navCurrentIndex !== navCurrentIndexCached) {\r\n var navPrev = navItems[navCurrentIndexCached],\r\n navCurrent = navItems[navCurrentIndex];\r\n setAttrs(navPrev, {\r\n 'tabindex': '-1',\r\n 'aria-label': navStr + (navCurrentIndexCached + 1)\r\n });\r\n removeClass(navPrev, navActiveClass);\r\n setAttrs(navCurrent, {\r\n 'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent\r\n });\r\n removeAttrs(navCurrent, 'tabindex');\r\n addClass(navCurrent, navActiveClass);\r\n navCurrentIndexCached = navCurrentIndex;\r\n }\r\n }\r\n }\r\n\r\n function getLowerCaseNodeName(el) {\r\n return el.nodeName.toLowerCase();\r\n }\r\n\r\n function isButton(el) {\r\n return getLowerCaseNodeName(el) === 'button';\r\n }\r\n\r\n function isAriaDisabled(el) {\r\n return el.getAttribute('aria-disabled') === 'true';\r\n }\r\n\r\n function disEnableElement(isButton, el, val) {\r\n if (isButton) {\r\n el.disabled = val;\r\n } else {\r\n el.setAttribute('aria-disabled', val.toString());\r\n }\r\n } // set 'disabled' to true on controls when reach the edges\r\n\r\n\r\n function updateControlsStatus() {\r\n if (!controls || rewind || loop) {\r\n return;\r\n }\r\n\r\n var prevDisabled = prevIsButton ? prevButton.disabled : isAriaDisabled(prevButton);\r\n var nextDisabled = nextIsButton ? nextButton.disabled : isAriaDisabled(nextButton);\r\n var disablePrev, disableNext; // Declare outside if block\r\n \r\n disablePrev = index <= indexMin ? true : false;\r\n disableNext = !rewind && index >= indexMax ? true : false;\r\n \r\n if (disablePrev && !prevDisabled) {\r\n disEnableElement(prevIsButton, prevButton, true);\r\n }\r\n\r\n if (!disablePrev && prevDisabled) {\r\n disEnableElement(prevIsButton, prevButton, false);\r\n }\r\n\r\n if (disableNext && !nextDisabled) {\r\n disEnableElement(nextIsButton, nextButton, true);\r\n }\r\n\r\n if (!disableNext && nextDisabled) {\r\n disEnableElement(nextIsButton, nextButton, false);\r\n }\r\n } // set duration\r\n\r\n\r\n function resetDuration(el, str) {\r\n if (TRANSITIONDURATION) {\r\n el.style[TRANSITIONDURATION] = str;\r\n }\r\n }\r\n\r\n function getSliderWidth() {\r\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\r\n }\r\n\r\n function getCenterGap(num) {\r\n if (num == null) {\r\n num = index;\r\n }\r\n\r\n var gap = edgePadding ? gutter : 0;\r\n return autoWidth ? (viewport - gap - (slidePositions[num + 1] - slidePositions[num] - gutter)) / 2 : fixedWidth ? (viewport - fixedWidth) / 2 : (items - 1) / 2;\r\n }\r\n\r\n function getRightBoundary() {\r\n var gap = edgePadding ? gutter : 0,\r\n result = viewport + gap - getSliderWidth();\r\n\r\n if (center && !loop) {\r\n result = fixedWidth ? -(fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() : getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\r\n }\r\n\r\n if (result > 0) {\r\n result = 0;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function isRTL() {\r\n return document.documentElement.getAttribute('dir') === 'rtl';\r\n }\r\n\r\n function getContainerTransformValue(num) {\r\n if (num == null) {\r\n num = index;\r\n }\r\n\r\n var val;\r\n\r\n if (horizontal && !autoWidth) {\r\n if (fixedWidth) {\r\n val = -(fixedWidth + gutter) * num;\r\n\r\n if (center) {\r\n val += getCenterGap();\r\n }\r\n } else {\r\n var denominator = TRANSFORM ? slideCountNew : items;\r\n\r\n if (center) {\r\n num -= getCenterGap();\r\n }\r\n\r\n val = -num * 100 / denominator;\r\n }\r\n } else {\r\n val = -slidePositions[num];\r\n\r\n if (center && autoWidth) {\r\n val += getCenterGap();\r\n }\r\n }\r\n\r\n if (hasRightDeadZone) {\r\n val = Math.max(val, rightBoundary);\r\n }\r\n\r\n if (isRTL()) {\r\n val *= -1;\r\n }\r\n\r\n val += horizontal && !autoWidth && !fixedWidth ? '%' : 'px';\r\n return val;\r\n }\r\n\r\n function doContainerTransformSilent(val) {\r\n resetDuration(container, '0s');\r\n doContainerTransform(val);\r\n }\r\n\r\n function doContainerTransform(val) {\r\n if (val == null) {\r\n val = getContainerTransformValue();\r\n }\r\n\r\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\r\n }\r\n\r\n function animateSlide(number, classOut, classIn, isOut) {\r\n var l = number + items;\r\n\r\n if (!loop) {\r\n l = Math.min(l, slideCountNew);\r\n }\r\n\r\n for (var i = number; i < l; i++) {\r\n var item = slideItems[i]; // set item positions\r\n\r\n if (!isOut) {\r\n item.style.left = (i - index) * 100 / items + '%';\r\n }\r\n\r\n if (animateDelay && TRANSITIONDELAY) {\r\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\r\n }\r\n\r\n removeClass(item, classOut);\r\n addClass(item, classIn);\r\n\r\n if (isOut) {\r\n slideItemsOut.push(item);\r\n }\r\n }\r\n } // make transfer after click/drag:\r\n // 1. change 'transform' property for mordern browsers\r\n // 2. change 'left' property for legacy browsers\r\n\r\n\r\n var transformCore = function () {\r\n return carousel ? function () {\r\n resetDuration(container, '');\r\n\r\n if (TRANSITIONDURATION || !speed) {\r\n // for morden browsers with non-zero duration or\r\n // zero duration for all browsers\r\n doContainerTransform(); // run fallback function manually\r\n // when duration is 0 / container is hidden\r\n\r\n if (!speed || !isVisible(container)) {\r\n onTransitionEnd();\r\n }\r\n } else {\r\n // for old browser with non-zero duration\r\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\r\n }\r\n\r\n if (!horizontal) {\r\n updateContentWrapperHeight();\r\n }\r\n } : function () {\r\n slideItemsOut = [];\r\n var eve = {};\r\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\r\n removeEvents(slideItems[indexCached], eve);\r\n addEvents(slideItems[index], eve);\r\n animateSlide(indexCached, animateIn, animateOut, true);\r\n animateSlide(index, animateNormal, animateIn); // run fallback function manually\r\n // when transition or animation not supported / duration is 0\r\n\r\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) {\r\n onTransitionEnd();\r\n }\r\n };\r\n }();\r\n\r\n function render(e, sliderMoved) {\r\n if (updateIndexBeforeTransform) {\r\n updateIndex();\r\n } // render when slider was moved (touch or drag) even though index may not change\r\n\r\n\r\n if (index !== indexCached || sliderMoved) {\r\n // events\r\n events.emit('indexChanged', info());\r\n events.emit('transitionStart', info());\r\n\r\n if (autoHeight) {\r\n doAutoHeight();\r\n } // pause autoplay when click or keydown from user\r\n\r\n\r\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) {\r\n stopAutoplay();\r\n }\r\n\r\n running = true;\r\n transformCore();\r\n }\r\n }\r\n /*\r\n * Transfer prefixed properties to the same format\r\n * CSS: -Webkit-Transform => webkittransform\r\n * JS: WebkitTransform => webkittransform\r\n * @param {string} str - property\r\n *\r\n */\r\n\r\n\r\n function strTrans(str) {\r\n return str.toLowerCase().replace(/-/g, '');\r\n } // AFTER TRANSFORM\r\n // Things need to be done after a transfer:\r\n // 1. check index\r\n // 2. add classes to visible slide\r\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\r\n // 4. update nav status\r\n // 5. lazyload images\r\n // 6. update container height\r\n\r\n\r\n function onTransitionEnd(event) {\r\n // check running on gallery mode\r\n // make sure trantionend/animationend events run only once\r\n if (carousel || running) {\r\n events.emit('transitionEnd', info(event));\r\n\r\n if (!carousel && slideItemsOut.length > 0) {\r\n for (var i = 0; i < slideItemsOut.length; i++) {\r\n var item = slideItemsOut[i]; // set item positions\r\n\r\n item.style.left = '';\r\n\r\n if (ANIMATIONDELAY && TRANSITIONDELAY) {\r\n item.style[ANIMATIONDELAY] = '';\r\n item.style[TRANSITIONDELAY] = '';\r\n }\r\n\r\n removeClass(item, animateOut);\r\n addClass(item, animateNormal);\r\n }\r\n }\r\n /* update slides, nav, controls after checking ...\r\n * => legacy browsers who don't support 'event'\r\n * have to check event first, otherwise event.target will cause an error\r\n * => or 'gallery' mode:\r\n * + event target is slide item\r\n * => or 'carousel' mode:\r\n * + event target is container,\r\n * + event.property is the same with transform attribute\r\n */\r\n\r\n\r\n if (!event || !carousel && event.target.parentNode === container || event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\r\n if (!updateIndexBeforeTransform) {\r\n var indexTem = index;\r\n updateIndex();\r\n\r\n if (index !== indexTem) {\r\n events.emit('indexChanged', info());\r\n doContainerTransformSilent();\r\n }\r\n }\r\n\r\n if (nested === 'inner') {\r\n events.emit('innerLoaded', info());\r\n }\r\n\r\n running = false;\r\n indexCached = index;\r\n }\r\n }\r\n } // # ACTIONS\r\n\r\n\r\n function goTo(targetIndex, e) {\r\n if (freeze) {\r\n return;\r\n } // prev slideBy\r\n\r\n\r\n if (targetIndex === 'prev') {\r\n onControlsClick(e, -1); // next slideBy\r\n } else if (targetIndex === 'next') {\r\n onControlsClick(e, 1); // go to exact slide\r\n } else {\r\n if (running) {\r\n if (preventActionWhenRunning) {\r\n return;\r\n } else {\r\n onTransitionEnd();\r\n }\r\n }\r\n\r\n var absIndex = getAbsIndex(),\r\n indexGap = 0;\r\n\r\n if (targetIndex === 'first') {\r\n indexGap = -absIndex;\r\n } else if (targetIndex === 'last') {\r\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\r\n } else {\r\n if (typeof targetIndex !== 'number') {\r\n targetIndex = parseInt(targetIndex);\r\n }\r\n\r\n if (!isNaN(targetIndex)) {\r\n // from directly called goTo function\r\n if (!e) {\r\n targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex));\r\n }\r\n\r\n indexGap = targetIndex - absIndex;\r\n }\r\n } // gallery: make sure new page won't overlap with current page\r\n\r\n\r\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\r\n var factor = indexGap > 0 ? 1 : -1;\r\n indexGap += index + indexGap - slideCount >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\r\n }\r\n\r\n index += indexGap; // make sure index is in range\r\n\r\n if (carousel && loop) {\r\n if (index < indexMin) {\r\n index += slideCount;\r\n }\r\n\r\n if (index > indexMax) {\r\n index -= slideCount;\r\n }\r\n } // if index is changed, start rendering\r\n\r\n\r\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\r\n render(e);\r\n }\r\n }\r\n } // on controls click\r\n\r\n\r\n function onControlsClick(e, dir) {\r\n if (running) {\r\n if (preventActionWhenRunning) {\r\n return;\r\n } else {\r\n onTransitionEnd();\r\n }\r\n }\r\n\r\n var passEventObject;\r\n let rtlDir = dir; // Keep original dir for LTR\r\n\r\n if (isRTL()) { // Reverse direction in RTL\r\n rtlDir *= -1;\r\n }\r\n\r\n if (!dir) {\r\n e = getEvent(e);\r\n var target = getTarget(e);\r\n\r\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) {\r\n target = target.parentNode;\r\n }\r\n\r\n var targetIn = [prevButton, nextButton].indexOf(target);\r\n\r\n if (targetIn >= 0) {\r\n passEventObject = true;\r\n rtlDir = targetIn === 0 ? -1 : 1; // Still use -1 for prevButton index 0, and 1 for nextButton index 1, but reverse meaning later in render.\r\n }\r\n }\r\n\r\n if (rewind) {\r\n if (index === indexMin && rtlDir === -1) { // Use rtlDir here\r\n goTo('last', e);\r\n return;\r\n } else if (index === indexMax && rtlDir === 1) { // Use rtlDir here\r\n goTo('first', e);\r\n return;\r\n }\r\n }\r\n\r\n if (rtlDir) { // Use rtlDir here\r\n index += slideBy * rtlDir; // Use rtlDir here\r\n\r\n if (autoWidth) {\r\n index = Math.floor(index);\r\n }\r\n render(passEventObject || e && e.type === 'keydown' ? e : null);\r\n }\r\n } // on nav click\r\n\r\n\r\n function onNavClick(e) {\r\n if (running) {\r\n if (preventActionWhenRunning) {\r\n return;\r\n } else {\r\n onTransitionEnd();\r\n }\r\n }\r\n\r\n e = getEvent(e);\r\n var target = getTarget(e),\r\n navIndex; // find the clicked nav item\r\n\r\n while (target !== navContainer && !hasAttr(target, 'data-nav')) {\r\n target = target.parentNode;\r\n }\r\n\r\n if (hasAttr(target, 'data-nav')) {\r\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\r\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\r\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\r\n goTo(targetIndex, e);\r\n\r\n if (navCurrentIndex === navIndex) {\r\n if (animating) {\r\n stopAutoplay();\r\n }\r\n\r\n navClicked = -1; // reset navClicked\r\n }\r\n }\r\n } // autoplay functions\r\n\r\n\r\n function setAutoplayTimer() {\r\n autoplayTimer = setInterval(function () {\r\n onControlsClick(null, autoplayDirection);\r\n }, autoplayTimeout);\r\n animating = true;\r\n }\r\n\r\n function stopAutoplayTimer() {\r\n clearInterval(autoplayTimer);\r\n animating = false;\r\n }\r\n\r\n function updateAutoplayButton(action, txt) {\r\n setAttrs(autoplayButton, {\r\n 'data-action': action\r\n });\r\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\r\n }\r\n\r\n function startAutoplay() {\r\n setAutoplayTimer();\r\n\r\n if (autoplayButton) {\r\n updateAutoplayButton('stop', autoplayText[1]);\r\n }\r\n }\r\n\r\n function stopAutoplay() {\r\n stopAutoplayTimer();\r\n\r\n if (autoplayButton) {\r\n updateAutoplayButton('start', autoplayText[0]);\r\n }\r\n } // programaitcally play/pause the slider\r\n\r\n\r\n function play() {\r\n if (autoplay && !animating) {\r\n startAutoplay();\r\n autoplayUserPaused = false;\r\n }\r\n }\r\n\r\n function pause() {\r\n if (animating) {\r\n stopAutoplay();\r\n autoplayUserPaused = true;\r\n }\r\n }\r\n\r\n function toggleAutoplay() {\r\n if (animating) {\r\n stopAutoplay();\r\n autoplayUserPaused = true;\r\n } else {\r\n startAutoplay();\r\n autoplayUserPaused = false;\r\n }\r\n }\r\n\r\n function onVisibilityChange() {\r\n if (doc.hidden) {\r\n if (animating) {\r\n stopAutoplayTimer();\r\n autoplayVisibilityPaused = true;\r\n }\r\n } else if (autoplayVisibilityPaused) {\r\n setAutoplayTimer();\r\n autoplayVisibilityPaused = false;\r\n }\r\n }\r\n\r\n function mouseoverPause() {\r\n if (animating) {\r\n stopAutoplayTimer();\r\n autoplayHoverPaused = true;\r\n }\r\n }\r\n\r\n function mouseoutRestart() {\r\n if (autoplayHoverPaused) {\r\n setAutoplayTimer();\r\n autoplayHoverPaused = false;\r\n }\r\n } // keydown events on document\r\n\r\n\r\n function onDocumentKeydown(e) {\r\n e = getEvent(e);\r\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\r\n\r\n if (keyIndex >= 0) {\r\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\r\n }\r\n } // on key control\r\n\r\n\r\n function onControlsKeydown(e) {\r\n e = getEvent(e);\r\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\r\n\r\n if (keyIndex >= 0) {\r\n if (keyIndex === 0) {\r\n if (!prevButton.disabled) {\r\n onControlsClick(e, -1);\r\n }\r\n } else if (!nextButton.disabled) {\r\n onControlsClick(e, 1);\r\n }\r\n }\r\n } // set focus\r\n\r\n\r\n function setFocus(el) {\r\n el.focus();\r\n } // on key nav\r\n\r\n\r\n function onNavKeydown(e) {\r\n e = getEvent(e);\r\n var curElement = doc.activeElement;\r\n\r\n if (!hasAttr(curElement, 'data-nav')) {\r\n return;\r\n } // var code = e.keyCode,\r\n\r\n\r\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\r\n navIndex = Number(getAttr(curElement, 'data-nav'));\r\n\r\n if (keyIndex >= 0) {\r\n if (keyIndex === 0) {\r\n if (navIndex > 0) {\r\n setFocus(navItems[navIndex - 1]);\r\n }\r\n } else if (keyIndex === 1) {\r\n if (navIndex < pages - 1) {\r\n setFocus(navItems[navIndex + 1]);\r\n }\r\n } else {\r\n navClicked = navIndex;\r\n goTo(navIndex, e);\r\n }\r\n }\r\n }\r\n\r\n function getEvent(e) {\r\n e = e || win.event;\r\n return isTouchEvent(e) ? e.changedTouches[0] : e;\r\n }\r\n\r\n function getTarget(e) {\r\n return e.target || win.event.srcElement;\r\n }\r\n\r\n function isTouchEvent(e) {\r\n return e.type.indexOf('touch') >= 0;\r\n }\r\n\r\n function preventDefaultBehavior(e) {\r\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\r\n }\r\n\r\n function getMoveDirectionExpected() {\r\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\r\n }\r\n\r\n function onPanStart(e) {\r\n if (running) {\r\n if (preventActionWhenRunning) {\r\n return;\r\n } else {\r\n onTransitionEnd();\r\n }\r\n }\r\n\r\n if (autoplay && animating) {\r\n stopAutoplayTimer();\r\n }\r\n\r\n panStart = true;\r\n\r\n if (rafIndex) {\r\n caf(rafIndex);\r\n rafIndex = null;\r\n }\r\n\r\n var $ = getEvent(e);\r\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\r\n\r\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\r\n preventDefaultBehavior(e);\r\n }\r\n\r\n lastPosition.x = initPosition.x = $.clientX;\r\n lastPosition.y = initPosition.y = $.clientY;\r\n\r\n if (carousel) {\r\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\r\n resetDuration(container, '0s');\r\n }\r\n }\r\n\r\n function onPanMove(e) {\r\n if (panStart) {\r\n var $ = getEvent(e);\r\n lastPosition.x = $.clientX;\r\n lastPosition.y = $.clientY;\r\n\r\n if (carousel) {\r\n if (!rafIndex) {\r\n rafIndex = raf(function () {\r\n panUpdate(e);\r\n });\r\n }\r\n } else {\r\n if (moveDirectionExpected === '?') {\r\n moveDirectionExpected = getMoveDirectionExpected();\r\n }\r\n\r\n if (moveDirectionExpected) {\r\n preventScroll = true;\r\n }\r\n }\r\n\r\n if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n function panUpdate(e) {\r\n if (!moveDirectionExpected) {\r\n panStart = false;\r\n return;\r\n }\r\n\r\n caf(rafIndex);\r\n\r\n if (panStart) {\r\n rafIndex = raf(function () {\r\n panUpdate(e);\r\n });\r\n }\r\n\r\n if (moveDirectionExpected === '?') {\r\n moveDirectionExpected = getMoveDirectionExpected();\r\n }\r\n\r\n if (moveDirectionExpected) {\r\n if (!preventScroll && isTouchEvent(e)) {\r\n preventScroll = true;\r\n }\r\n\r\n try {\r\n if (e.type) {\r\n events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e));\r\n }\r\n } catch (err) {}\r\n\r\n var x = translateInit,\r\n dist = getDist(lastPosition, initPosition);\r\n\r\n if (!horizontal || fixedWidth || autoWidth) {\r\n x += dist;\r\n x += 'px';\r\n } else {\r\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew) : dist * 100 / (viewport + gutter);\r\n x += percentageX;\r\n x += '%';\r\n }\r\n\r\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\r\n }\r\n }\r\n\r\n function onPanEnd(e) {\r\n if (panStart) {\r\n if (rafIndex) {\r\n caf(rafIndex);\r\n rafIndex = null;\r\n }\r\n\r\n if (carousel) {\r\n resetDuration(container, '');\r\n }\r\n\r\n panStart = false;\r\n var $ = getEvent(e);\r\n lastPosition.x = $.clientX;\r\n lastPosition.y = $.clientY;\r\n var dist = getDist(lastPosition, initPosition);\r\n let directionalDist = dist;\r\n\r\n if (isRTL()) { // Reverse drag distance for RTL\r\n directionalDist *= -1;\r\n }\r\n\r\n if (Math.abs(directionalDist)) {\r\n // drag vs click\r\n if (!isTouchEvent(e)) {\r\n // prevent \"click\"\r\n var target = getTarget(e);\r\n addEvents(target, {\r\n 'click': function preventClick(e) {\r\n preventDefaultBehavior(e);\r\n removeEvents(target, {\r\n 'click': preventClick\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (carousel) {\r\n rafIndex = raf(function () {\r\n if (horizontal && !autoWidth) {\r\n var indexMoved = -directionalDist * items / (viewport + gutter);\r\n indexMoved = directionalDist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\r\n index += indexMoved;\r\n } else {\r\n var moved = -(translateInit + directionalDist);\r\n\r\n if (moved <= 0) {\r\n index = indexMin;\r\n } else if (moved >= slidePositions[slideCountNew - 1]) {\r\n index = indexMax;\r\n } else {\r\n var i = 0;\r\n\r\n while (i < slideCountNew && moved >= slidePositions[i]) {\r\n index = i;\r\n\r\n if (moved > slidePositions[i] && directionalDist < 0) {\r\n index += 1;\r\n }\r\n\r\n i++;\r\n }\r\n }\r\n }\r\n\r\n render(e, directionalDist);\r\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\r\n });\r\n } else {\r\n if (moveDirectionExpected) {\r\n onControlsClick(e, directionalDist > 0 ? -1 : 1);\r\n }\r\n }\r\n }\r\n } // reset\r\n\r\n\r\n if (options.preventScrollOnTouch === 'auto') {\r\n preventScroll = false;\r\n }\r\n\r\n if (swipeAngle) {\r\n moveDirectionExpected = '?';\r\n }\r\n\r\n if (autoplay && !animating) {\r\n setAutoplayTimer();\r\n }\r\n } // === RESIZE FUNCTIONS === //\r\n // (slidePositions, index, items) => vertical_conentWrapper.height\r\n\r\n\r\n function updateContentWrapperHeight() {\r\n var wp = middleWrapper ? middleWrapper : innerWrapper;\r\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\r\n }\r\n\r\n function getPages() {\r\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\r\n return Math.min(Math.ceil(rough), slideCount);\r\n }\r\n /*\r\n * 1. update visible nav items list\r\n * 2. add \"hidden\" attributes to previous visible nav items\r\n * 3. remove \"hidden\" attrubutes to new visible nav items\r\n */\r\n\r\n\r\n function updateNavVisibility() {\r\n if (!nav || navAsThumbnails) {\r\n return;\r\n }\r\n\r\n if (pages !== pagesCached) {\r\n var min = pagesCached,\r\n max = pages,\r\n fn = showElement;\r\n\r\n if (pagesCached > pages) {\r\n min = pages;\r\n max = pagesCached;\r\n fn = hideElement;\r\n }\r\n\r\n while (min < max) {\r\n fn(navItems[min]);\r\n min++;\r\n } // cache pages\r\n\r\n\r\n pagesCached = pages;\r\n }\r\n }\r\n\r\n function info(e) {\r\n return {\r\n container: container,\r\n slideItems: slideItems,\r\n navContainer: navContainer,\r\n navItems: navItems,\r\n controlsContainer: controlsContainer,\r\n hasControls: hasControls,\r\n prevButton: prevButton,\r\n nextButton: nextButton,\r\n items: items,\r\n slideBy: slideBy,\r\n cloneCount: cloneCount,\r\n slideCount: slideCount,\r\n slideCountNew: slideCountNew,\r\n index: index,\r\n indexCached: indexCached,\r\n displayIndex: getCurrentSlide(),\r\n navCurrentIndex: navCurrentIndex,\r\n navCurrentIndexCached: navCurrentIndexCached,\r\n pages: pages,\r\n pagesCached: pagesCached,\r\n sheet: sheet,\r\n isOn: isOn,\r\n event: e || {}\r\n };\r\n }\r\n\r\n return {\r\n version: '2.9.4',\r\n getInfo: info,\r\n events: events,\r\n goTo: goTo,\r\n play: play,\r\n pause: pause,\r\n isOn: isOn,\r\n updateSliderHeight: updateInnerWrapperHeight,\r\n refresh: initSliderTransform,\r\n destroy: destroy,\r\n rebuild: function () {\r\n return tns(extend(options, optionsElements));\r\n }\r\n };\r\n};\r\n\r\nexports.tns = tns;\r\n","/// <reference path=\"../typings/niveax.d.ts\"/>\r\nimport {\r\n // getCurrencyCode, \r\n addLayer,\r\n trackSliderMovement, \r\n // productTeaserTrackingObject,\r\n getLinkElementHref, \r\n getClickedElementIndex,\r\n trackTeaserClick\r\n} from '../ClassWithTracking/helpers';\r\n// import { isInViewPort } from '../helpers/DOMHelpers';\r\nimport {\r\n // debounce, \r\n parseJSONSafe } from '../helpers/helperFunctions';\r\n\r\nexport default class NivTSlider {\r\n private teaserListHome: NodeListOf<HTMLElement>;\r\n private teaserListSmall: NodeListOf<HTMLElement>;\r\n private trackingDataG4: TrackingData[];\r\n private trackingSelector: HTMLElement;\r\n options: { photo_size: string; navigation: string; };\r\n\r\n constructor(public element: HTMLElement, public slider: any) {\r\n if(window.NiveaX.IsUAEnabled) {\r\n this.init();\r\n }\r\n\r\n this.trackingSelector = (this.element.closest('[data-tdata]') || this.element) as HTMLElement;\r\n this.trackingDataG4 = parseJSONSafe(this.trackingSelector.dataset.tdata);\r\n this.options = {\r\n photo_size: '[[GalleryAndSliderIneraction|{{media_size}}]]',\r\n\t\t\tnavigation: '[[GalleryAndSliderIneraction|{{event_type}}]]',\r\n }\r\n }\r\n\r\n init() {\r\n this.teaserListHome = this.element.querySelectorAll('.nx-slider__item[id]');\r\n this.teaserListSmall = this.element.querySelectorAll('.tns-item');\r\n \r\n if (!this.teaserListHome.length && !this.teaserListSmall.length) {\r\n return;\r\n }\r\n\r\n let sliderWrapper: HTMLElement = <HTMLElement>this.element.closest('.nx-stage__slider');\r\n\r\n if (!!sliderWrapper) {\r\n this.trackHomeSlider(sliderWrapper);\r\n } else {\r\n this.trackTeaserSlider(this.element);\r\n }\r\n \r\n }\r\n\r\n trackHomeSlider(selector: HTMLElement) {\r\n let homeSliderWrapper: HTMLElement = <HTMLElement>selector.closest('.nx-stage');\r\n\r\n homeSliderWrapper.addEventListener('click', (event) => {\r\n let clickedElement: HTMLElement = <HTMLElement>event.target;\r\n\r\n if (clickedElement.closest('.nx-controls__btn--prev')) {\r\n trackSliderMovement('General Teaser Previous');\r\n\r\n } else if (clickedElement.closest('.nx-controls__btn--next')) {\r\n trackSliderMovement('General Teaser Next');\r\n \r\n } else if (clickedElement.closest('.tns-nav')) {\r\n trackSliderMovement('General Teaser Dots');\r\n } else {\r\n document.addEventListener('nxtracking:slider:click', () => {\r\n trackTeaserClick('Teaser', 'Stage Teaser - Pos ' + getClickedElementIndex(this.teaserListHome, <HTMLElement>clickedElement.closest('.nx-slider__item')), getLinkElementHref(event, '.tns-slide-active .nx-stage__link'));\r\n });\r\n }\r\n });\r\n\r\n this.addTouchHandlersOnSlider('General Teaser Previous', 'General Teaser Next');\r\n }\r\n\r\n trackTeaserSlider(selector: HTMLElement) {\r\n const hasProductTeasers: NodeListOf<HTMLElement> = selector.querySelectorAll('.nx-product-teaser');\r\n \r\n this.sliderTeaserClick(selector);\r\n\r\n if(!hasProductTeasers.length) return;\r\n\r\n // document.addEventListener('niveax:initProductTeaserTracking', () => {\r\n // this.isTeaserSliderInViewport(selector)\r\n // });\r\n\r\n // if(!window.NiveaX.isShopEnabled) {\r\n // this.isTeaserSliderInViewport(selector)\r\n // }\r\n\r\n // window.addEventListener('scroll', debounce(() => this.isTeaserSliderInViewport(selector), 500))\r\n }\r\n\r\n // protected isTeaserSliderInViewport(selector): void {\r\n // if (isInViewPort(selector)) {\r\n // this.sliderTeaserImpression(selector);\r\n // }\r\n // }\r\n\r\n // private sliderTeaserImpression(selector: HTMLElement) {\r\n // const allSliderProductTeasers: NodeListOf<HTMLElement> = selector.querySelectorAll('.nx-product-teaser');\r\n // const visibleSliderProductTeasers: NodeListOf<HTMLElement> = selector.querySelectorAll('.nx-product-teaser.tns-slide-active:not(.nx-product-shown)');\r\n // if (!visibleSliderProductTeasers.length || !allSliderProductTeasers.length) return;\r\n\r\n // const teaserArray = productTeaserTrackingObject(visibleSliderProductTeasers, true, allSliderProductTeasers);\r\n // this.productImpressionsPush(teaserArray);\r\n // }\r\n\r\n // private productImpressionsPush(teasers: Object[]) {\r\n // addLayer({\r\n // event: 'impressions',\r\n // ecommerce: {\r\n // currencyCode: getCurrencyCode(),\r\n // impressions: teasers\r\n // }\r\n // });\r\n // }\r\n\r\n private sliderTeaserClick(selector: HTMLElement) {\r\n let sliderWrapper: HTMLElement = selector.closest('.tns-outer') as HTMLElement;\r\n const sliderHeadline = this.getContentSliderHeadline(sliderWrapper);\r\n\r\n sliderWrapper.addEventListener('click', (event) => {\r\n let clickedElement: HTMLElement = event.target as HTMLElement;\r\n\r\n if (clickedElement.nodeName === 'svg') {\r\n clickedElement = clickedElement.parentElement;\r\n }\r\n\r\n if (clickedElement.nodeName === 'polyline') {\r\n clickedElement = clickedElement.parentElement.parentElement;\r\n }\r\n\r\n if (clickedElement.dataset.controls === 'prev') {\r\n trackSliderMovement('Click Previous', sliderHeadline);\r\n // this.sliderTeaserImpression(selector);\r\n } else if (clickedElement.dataset.controls === 'next') {\r\n trackSliderMovement('Click Next', sliderHeadline);\r\n // this.sliderTeaserImpression(selector);\r\n } else if (clickedElement.closest('.tns-nav')) {\r\n if (!window.NiveaX.isTouch) {\r\n trackSliderMovement('Click Dot', sliderHeadline);\r\n // this.sliderTeaserImpression(selector);\r\n }\r\n }\r\n });\r\n\r\n this.addTouchHandlersOnSlider('Click Previous', 'Click Next', sliderHeadline);\r\n\r\n if (!!window.NiveaX.isTouch) {\r\n this.trackTapDotEvent(sliderWrapper, '.tns-nav', 'Tap Dot', sliderHeadline);\r\n }\r\n }\r\n\r\n getContentSliderHeadline(element: HTMLElement) {\r\n const contentZone: HTMLElement = element.closest('.nx-u-section.nx-standard-teaser-slider, .nx-u-container') as HTMLElement;\r\n let contentZoneHeadline: string = '';\r\n if (contentZone) {\r\n let contentZoneHeadlineElement = contentZone.querySelector('.nx-standard-teaser-slider__headline, .nx-u-section__headline, .nx-standard-teaser-slider__headline, h2');\r\n if (contentZoneHeadlineElement) contentZoneHeadline = contentZoneHeadlineElement.innerHTML.trim();\r\n }\r\n return contentZoneHeadline;\r\n }\r\n\r\n trackTapDotEvent(selector: HTMLElement, dotsClassName: string, eventAction: string, sliderHeadline: string) {\r\n selector.addEventListener('touchend', (event) => {\r\n let clickedElement: HTMLElement = <HTMLElement>event.target;\r\n\r\n if (clickedElement.closest(dotsClassName)) {\r\n trackSliderMovement(eventAction, sliderHeadline);\r\n }\r\n\r\n // timeout required to wait until css animations finish\r\n // setTimeout(() => this.sliderTeaserImpression(selector), 300);\r\n });\r\n }\r\n\r\n addTouchHandlersOnSlider(eventActionPrevious: string, eventActionNext: string, sliderHeadline?: string) {\r\n this.slider.events.on('touchEnd', (e) => { this.swipeDirection(this.slider, sliderHeadline) });\r\n this.slider.events.on('dragEnd', (e) => { this.swipeDirection(this.slider, sliderHeadline) });\r\n }\r\n\r\n swipeDirection(event: any, sliderHeadline: string) {\r\n event = event.getInfo();\r\n \r\n const lastIdx = event.indexCached,\r\n currentIdx = event.index;\r\n\r\n if (currentIdx === lastIdx) {\r\n return;\r\n }\r\n \r\n if (currentIdx > lastIdx) {\r\n // this.swipeDirectionPrevious('Swipe Next', sliderHeadline);\r\n this.trackSliderOnSwipe('swipe', 'Next');\r\n \r\n } else {\r\n // trackSliderMovement('Swipe Previous', sliderHeadline);\r\n this.trackSliderOnSwipe('swipe', 'Prev');\r\n }\r\n\r\n // this.sliderTeaserImpression(event.container);\r\n }\r\n\r\n swipeDirectionPrevious(eventActionPrevious, sliderHeadline: string) {\r\n trackSliderMovement(eventActionPrevious, sliderHeadline);\r\n }\r\n\r\n private trackSliderOnSwipe(eventType: string, direction: string): void {\r\n const trackingData = this.trackingDataG4?.filter(item => item.Rule.includes(direction)).shift(),\r\n eventParams = trackingData?.Tevent.parameters,\r\n photo_size = this.trackingSelector.classList.contains('nx-product-zoom') ? 'enlarged': 'standard';\r\n\r\n if(eventParams && Object.keys(eventParams)) {\r\n if(eventParams?.navigation == this.options.navigation) {\r\n eventParams.navigation = eventType\r\n }\r\n\r\n if(eventParams?.photo_size == this.options.photo_size) {\r\n eventParams.photo_size = photo_size\r\n }\r\n }\r\n \r\n trackingData && addLayer(trackingData.Tevent)\r\n }\r\n}","/// <reference path=\"../typings/tiny-slider.d.ts\"/>\r\n\r\nimport {\r\n addClass,\r\n removeClasses,\r\n isVideoPlaying,\r\n isVideoAutoplay,\r\n} from '../helpers/DOMHelpers';\r\n\r\nimport {\r\n loadMovieVideoLazy$,\r\n} from '../helpers/reactiveHelpers';\r\n\r\nimport { tns } from '../libs/tiny-slider-2.9.4';\r\nimport { copyObject, getYouTubeVideoIdFromUrl } from '../helpers/helperFunctions';\r\nimport NivTSlider from './NivTSlider';\r\n\r\nconst moduleSelector = '[data-module=\"Slider\"]';\r\n\r\nconst defaultSliderOptions: TinySliderSettings = {\r\n container: '[data-module=\"Slider\"]',\r\n loop: false,\r\n mouseDrag: true,\r\n gutter: 14,\r\n edgePadding: 10,\r\n responsive: {\r\n 136: {\r\n items: 1,\r\n gutter: 10,\r\n },\r\n 768: {\r\n items: 2,\r\n gutter: 14,\r\n },\r\n 1024: {\r\n items: 3,\r\n gutter: 14,\r\n edgePadding: 0,\r\n },\r\n 1280: {\r\n gutter: 18,\r\n }\r\n },\r\n swipeAngle: 36,\r\n speed: 400,\r\n controlsText: ['prev', 'next'],\r\n slideBy: 'page',\r\n preventScrollOnTouch: 'auto',\r\n lazyload: true,\r\n controlsPosition: 'bottom'\r\n};\r\n\r\nclass Slider {\r\n private observer: IntersectionObserver;\r\n private youTubeUrls: string[] = [];\r\n protected options: LazyTinySliderSettings;\r\n public slider: any;\r\n private readonly _allSliderItems: HTMLElement[];\r\n protected get allSliderItems(): HTMLElement[] {\r\n return this._allSliderItems;\r\n }\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new Slider(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, options = copyObject(defaultSliderOptions)) {\r\n this.element = element;\r\n this.options = this.getSliderOptions(options);\r\n this._allSliderItems = Array.from(this.element.children) as HTMLElement[];\r\n\r\n if (this.hasChildren()) {\r\n this.init();\r\n }\r\n }\r\n\r\n protected hasChildren(): boolean {\r\n return this.element.children.length > 0;\r\n }\r\n\r\n protected init(): void {\r\n this.slider = tns(this.options);\r\n\r\n new NivTSlider(this.element, this.slider);\r\n\r\n const layoutVariant = this.element.getAttribute('data-layout-variant');\r\n if (['small', 'middy', 'mini'].includes(layoutVariant)) this.initIntersectionObserver();\r\n\r\n this.preventBrowserDragAndDrop()\r\n .updateControls()\r\n .addHandlersOnSlider()\r\n .initTracking(); \r\n\r\n const youTubeElements = this.sliderInfo?.container?.querySelectorAll('[data-module=\"YouTube\"]');\r\n if(youTubeElements) this.youTubeUrls = Array.from(youTubeElements).map(vidContainer => vidContainer.getAttribute('data-video-url'));\r\n }\r\n\r\n private initIntersectionObserver() {\r\n const observerOptions = {\r\n root: null,\r\n rootMargin: \"0px\",\r\n threshold: 0.5,\r\n };\r\n\r\n this.observer = new IntersectionObserver((entries, observer) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n entry.target.querySelector(\"a\")?.setAttribute(\"tabindex\", \"0\");\r\n entry.target.querySelector(\".nx-btn\")?.setAttribute(\"tabindex\", \"0\");\r\n } else {\r\n entry.target.querySelector(\"a\")?.setAttribute(\"tabindex\", \"-1\");\r\n entry.target.querySelector(\".nx-btn\")?.setAttribute(\"tabindex\", \"-1\");\r\n }\r\n });\r\n }, observerOptions);\r\n }\r\n\r\n private updateControls() {\r\n const prevButton = <HTMLButtonElement>this.slider.getInfo().prevButton,\r\n nextButton = <HTMLButtonElement>this.slider.getInfo().nextButton,\r\n controlsDiv = <HTMLElement>this.slider.getInfo().controlsContainer;\r\n\r\n this.updateKeyboardAccessibility();\r\n \r\n if(prevButton && nextButton) {\r\n controlsDiv?.removeAttribute('tabindex');\r\n prevButton.setAttribute(\"tabIndex\", \"0\");\r\n nextButton.setAttribute(\"tabIndex\", \"0\")\r\n\r\n addClass(prevButton, 'nx-controls__btn--prev')\r\n addClass(nextButton, 'nx-controls__btn--next')\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private preventClickOnDrag(): Slider {\r\n let wasDraged: boolean = false;\r\n const onDragEnd = () => {\r\n wasDraged = true;\r\n };\r\n const onMouseUp = (e: Event) => {\r\n if (wasDraged) {\r\n e.preventDefault();\r\n } else {\r\n document.dispatchEvent(new CustomEvent(\"nxtracking:slider:click\"));\r\n };\r\n this.element.removeEventListener('mouseup', onMouseUp);\r\n this.slider.events.off('dragMove', onDragEnd);\r\n wasDraged = false;\r\n };\r\n\r\n this.slider.events.on('dragMove', onDragEnd);\r\n this.element.addEventListener('mouseup', onMouseUp);\r\n\r\n return this;\r\n }\r\n\r\n private preventBrowserDragAndDrop(): Slider {\r\n this.element.addEventListener('mousedown', (e) => {\r\n const isInItem = (<HTMLElement>e.target).closest('.tns-item:not(.tns-item--clickable)');\r\n this.preventClickOnDrag();\r\n\r\n if (isInItem) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n private getSliderOptions(defOptions: any): any {\r\n let optionsStringFromData = this.element.dataset.options,\r\n twoColObject = {},\r\n optionsFromData,\r\n optionObj;\r\n\r\n defOptions.container = this.element;\r\n\r\n if (optionsStringFromData) {\r\n try {\r\n optionsFromData = JSON.parse(optionsStringFromData);\r\n } catch (e) {\r\n console.warn(`Bad data-options for Slider`);\r\n }\r\n }\r\n\r\n typeof optionsFromData === 'object'\r\n ? optionObj = Object.assign(defOptions, optionsFromData)\r\n : optionObj = Object.assign(defOptions);\r\n\r\n if (this.element.closest('.nx-two-columns__half-col') && !this.element.closest('.nx-pdp-two-columns')) {\r\n twoColObject = {\r\n responsive: {\r\n 136: {\r\n \"items\": optionObj.responsive && optionObj.responsive[136] ? optionObj.responsive[136].items : 1,\r\n \"gutter\": 10,\r\n },\r\n 768: {\r\n \"items\": optionObj.responsive && optionObj.responsive[136] ? optionObj.responsive[768].items : 2,\r\n \"gutter\": 14,\r\n },\r\n 1024: {\r\n \"items\": optionObj.responsive && optionObj.responsive[136] ? optionObj.responsive[136].items : 1,\r\n \"gutter\": 14,\r\n \"edgePadding\": 0,\r\n },\r\n 1280: {\r\n \"gutter\": 18,\r\n }\r\n }\r\n };\r\n }\r\n\r\n return typeof optionsFromData === 'object'\r\n ? Object.assign(defOptions, optionsFromData, twoColObject)\r\n : Object.assign(defOptions, twoColObject);\r\n }\r\n\r\n private addHandlersOnSlider(): Slider {\r\n this.slider.events.on('indexChanged', this.onIndexChange());\r\n\r\n if (!this.options.loop) {\r\n this.slider.events.on('touchEnd', this.onSlideEnd.bind(this));\r\n this.slider.events.on('dragEnd', this.onSlideEnd.bind(this));\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private initTracking(): Slider {\r\n document.dispatchEvent(new CustomEvent('NiveaBasicTracking:reInitHandlers'));\r\n return this;\r\n }\r\n\r\n private onIndexChange(): () => void {\r\n let { index: lastIndex } = this.sliderInfo;\r\n\r\n return () => {\r\n const { index, slideItems, slideCount } = this.sliderInfo;\r\n\r\n Array.from(slideItems).forEach((s: HTMLElement) => removeClasses(s, 'tns-item--next', 'tns-item--prev'));\r\n\r\n if (lastIndex === slideCount && index === 0 || index > lastIndex && lastIndex >= 0) {\r\n this.activeSlides.forEach(s => addClass(s, 'tns-item--next'));\r\n } else {\r\n this.activeSlides.forEach(s => addClass(s, 'tns-item--prev'));\r\n }\r\n\r\n lastIndex = index;\r\n\r\n this.pauseAllYoutubeVideosInSlider();\r\n this.updateKeyboardAccessibility();\r\n };\r\n }\r\n\r\n private updateKeyboardAccessibility() {\r\n this.setNavsAccessibilityHidden(this.sliderInfo.navItems);\r\n this.setFirstAndLastItemKeyboardAccessibility(this.activeSlides);\r\n }\r\n\r\n private setFirstAndLastItemKeyboardAccessibility(activeSlideItems: HTMLElement[]) {\r\n if (!this.observer) return;\r\n\r\n const firstItem = activeSlideItems[0];\r\n const lastItem = activeSlideItems[activeSlideItems.length - 1];\r\n\r\n if (!this.isObserved(firstItem)) this.observer.observe(firstItem);\r\n if (!this.isObserved(lastItem)) this.observer.observe(lastItem);\r\n }\r\n\r\n private isObserved(element) {\r\n const observedElements = this.observer.takeRecords().map((entry) => entry.target);\r\n return observedElements.includes(element);\r\n }\r\n\r\n private setNavsAccessibilityHidden(navItems: HTMLCollection) {\r\n if (!navItems) return;\r\n const activeNav = Array.from(navItems).filter(s => s.classList.contains('tns-nav-active'));\r\n activeNav ? activeNav[0].setAttribute('tabindex', \"-1\") : \"\";\r\n }\r\n\r\n private pauseAllYoutubeVideosInSlider(): Slider {\r\n if (!this.youTubeUrls.length) return this;\r\n \r\n this.youTubeUrls.forEach(url => { \r\n const youTubeVideoId = getYouTubeVideoIdFromUrl(url);\r\n window.NiveaX.pauseYouTubeVideoById(youTubeVideoId);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n private onSlideEnd(event: any): void {\r\n const lastIdx = event.indexCached,\r\n currentIdx = event.index;\r\n\r\n if (currentIdx === lastIdx) {\r\n return;\r\n }\r\n\r\n if (currentIdx > lastIdx) {\r\n this.slider.goTo(lastIdx + event.slideBy);\r\n } else {\r\n this.slider.goTo(lastIdx - event.slideBy);\r\n }\r\n }\r\n\r\n protected get activeSlides(): HTMLElement[] {\r\n return <HTMLElement[]>Array.from(this.sliderInfo.slideItems).filter(s => s.classList.contains('tns-slide-active'));\r\n }\r\n\r\n get sliderInfo(): TinySliderInfo {\r\n const infoSlider = this.slider.getInfo();\r\n \r\n if (!this.options.mode && this.options.mode === \"gallery\") {\r\n infoSlider.index = infoSlider.index - infoSlider.cloneCount;\r\n infoSlider.indexCached = infoSlider.indexCached - infoSlider.cloneCount;\r\n }\r\n\r\n infoSlider.sliderOptions = this.options;\r\n\r\n return infoSlider;\r\n }\r\n\r\n get sliderIndex(): number {\r\n return this.slider.index;\r\n }\r\n\r\n destroy(): Slider {\r\n this.slider.destroy();\r\n return this;\r\n }\r\n\r\n rebuild(): Slider {\r\n this.slider = this.slider.rebuild();\r\n return this;\r\n }\r\n\r\n on(eventName: String, callback: (e) => any): Slider {\r\n this.slider.events.on(eventName, callback);\r\n return this;\r\n }\r\n\r\n goTo(dest: number | 'prev' | 'next' | 'first' | 'last'): Slider {\r\n this.slider.goTo(dest);\r\n return this;\r\n }\r\n}\r\n\r\nexport default class LazySlider extends Slider {\r\n private video: HTMLVideoElement[];\r\n events: any;\r\n\r\n constructor(element: HTMLElement, options = copyObject(defaultSliderOptions)) {\r\n super(element, options);\r\n\r\n if (this.hasChildren()) {\r\n this.initLazy();\r\n }\r\n }\r\n\r\n protected initLazy(): LazySlider {\r\n this.video = Array.from(this.sliderInfo.container.querySelectorAll('video[data-src]'));\r\n this.loadVideoForActiveSlides();\r\n this.loadVideoOnIndexChange();\r\n\r\n return this;\r\n }\r\n\r\n private loadVideoOnIndexChange(): LazySlider {\r\n this.slider.events.on('indexChanged', () => {\r\n this.loadMovieVideo();\r\n });\r\n\r\n return this;\r\n }\r\n\r\n private loadMovieVideo(): LazySlider {\r\n this.pauseVideoFoNotActiveSlides();\r\n this.loadVideoForActiveSlides();\r\n\r\n return this;\r\n }\r\n\r\n private loadVideoForActiveSlides(): LazySlider {\r\n let loadedVideo = Array.from(this.sliderInfo.container.querySelectorAll('video[src]'));\r\n let notActiveVideo = loadedVideo.filter(vid => vid.closest('.tns-slide-active') === null && isVideoPlaying(vid));\r\n\r\n notActiveVideo.filter(vid => {\r\n const video: HTMLVideoElement = <HTMLVideoElement>vid;\r\n video.pause();\r\n });\r\n\r\n loadedVideo = loadedVideo.filter(loadedVideo => {\r\n if (loadedVideo.closest('.tns-slide-active')) {\r\n const video: HTMLVideoElement = <HTMLVideoElement>loadedVideo;\r\n if (video.closest('.nx-story-stage')) video.currentTime = 0;\r\n if(isVideoAutoplay(video)) video.play();\r\n \r\n return false;\r\n }\r\n\r\n \r\n \r\n return loadedVideo;\r\n });\r\n\r\n this.video = this.video.filter(video => {\r\n if (video.closest('.tns-slide-active')) {\r\n loadMovieVideoLazy$(video).subscribe();\r\n const currentVideo: HTMLVideoElement = <HTMLVideoElement>video,\r\n isAutoHeightActive = this.sliderInfo.sliderOptions?.autoHeight === true;\r\n currentVideo.play();\r\n isAutoHeightActive && currentVideo.addEventListener('loadedmetadata', () => this.slider.updateSliderHeight());\r\n return false;\r\n }\r\n\r\n return video;\r\n });\r\n\r\n return this;\r\n }\r\n\r\n private pauseVideoFoNotActiveSlides() {\r\n let notActiveVideo = Array.from(this.sliderInfo.container.querySelectorAll('video[src]')).filter(vid => vid.closest('.tns-slide-active') === null && isVideoPlaying(vid));\r\n\r\n notActiveVideo.filter(vid => {\r\n const video: HTMLVideoElement = <HTMLVideoElement>vid;\r\n video.pause();\r\n });\r\n }\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element.parentNode, nodeOrigin: element.parentNode.cloneNode(true) }));\r\n\r\n Slider.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n Slider.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n Slider.setup(moduleSelector);\r\n}"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","win$1","window","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","win","caf","cancelAnimationFrame","mozCancelAnimationFrame","id","clearTimeout","extend","obj","name","copy","target","arguments","i","length","undefined","checkStorageValue","value","indexOf","JSON","parse","setLocalStorage","storage","key","access","setItem","e","getBody","doc","document","body","createElement","fake","docElement","documentElement","setFakeBody","docOverflow","style","overflow","background","appendChild","resetFakeBody","remove","offsetHeight","addCSSRule","sheet","selector","rules","index","insertRule","addRule","getCssRulesLength","cssRules","forEach","arr","callback","scope","l","call","classListSupport","hasClass","el","str","classList","contains","className","addClass","add","removeClass","replace","hasAttr","attr","hasAttribute","getAttr","getAttribute","isNodeList","item","setAttrs","els","attrs","Array","Object","toString","setAttribute","removeAttrs","attrLength","j","removeAttribute","arrayFromNodeList","nl","push","hideElement","forceHide","display","showElement","isVisible","getComputedStyle","whichProperty","props","Props","charAt","toUpperCase","substr","prefix","prop","getEndProperty","propIn","propOut","endProp","test","toLowerCase","supportsPassive","opts","defineProperty","get","addEventListener","passiveOption","passive","addEvents","preventScrolling","option","removeEvents","removeEventListener","Events","topics","on","eventName","fn","this","off","splice","emit","data","type","keys","object","hasOwnProperty","Element","parentNode","removeChild","exports","tns","options","container","mode","axis","items","gutter","edgePadding","fixedWidth","autoWidth","viewportMax","slideBy","center","controls","controlsPosition","controlsText","controlsContainer","prevButton","nextButton","nav","navPosition","navContainer","navAsThumbnails","arrowKeys","speed","autoplay","autoplayPosition","autoplayTimeout","autoplayDirection","autoplayText","autoplayHoverPause","autoplayButton","autoplayButtonOutput","autoplayResetOnVisibility","animateIn","animateOut","animateNormal","animateDelay","loop","rewind","autoHeight","responsive","lazyload","lazyloadSelector","touch","mouseDrag","swipeAngle","nested","preventActionWhenRunning","preventScrollOnTouch","freezable","onInit","useLocalStorage","nonce","KEYS","ENTER","SPACE","LEFT","RIGHT","tnsStorage","localStorageAccess","browserInfo","navigator","userAgent","uid","Date","localStorage","getItem","removeItem","CALC","div","result","val","vals","width","offsetWidth","calc","PERCENTAGELAYOUT","supported","wrapper","outer","innerHTML","Math","abs","getBoundingClientRect","left","children","count","percentageLayout","CSSMQ","matchMedia","msMatchMedia","position","rule","styleSheet","cssText","createTextNode","currentStyle","mediaquerySupport","TRANSFORM","HAS3DTRANSFORMS","tf","has3d","cssTF","slice","insertBefore","getPropertyValue","has3DTransforms","TRANSITIONDURATION","TRANSITIONDELAY","ANIMATIONDURATION","ANIMATIONDELAY","TRANSITIONEND","ANIMATIONEND","supportConsoleWarn","console","warn","tnsList","optionsElements","querySelector","nodeName","carousel","responsiveTem","updateOptions","middleWrapper","breakpointZone","horizontal","outerWrapper","innerWrapper","containerParent","containerHTML","outerHTML","slideItems","from","filter","node","tagName","slideCount","windowWidth","getWindowWidth","isOn","setBreakpointZone","slidePositions","itemsMax","media","getOption","viewport","getViewportWidth","floor","fixedWidthViewportWidth","slideItemsOut","cloneCount","bp","tem","ceil","min","apply","max","getItemsMax","hasOption","slideCountNew","hasRightDeadZone","rightBoundary","getRightBoundary","updateIndexBeforeTransform","transformAttr","transformPrefix","transformPostfix","getIndexMax","getStartIndex","indexCached","getCurrentSlide","imgsComplete","liveregionCurrent","indexMin","indexMax","moveDirectionExpected","running","events","newContainerClasses","slideId","tnsId","disable","disabled","freeze","getFreeze","frozen","controlsEvents","onControlsClick","getEvent","keyIndex","keyCode","navEvents","onTransitionEnd","getTarget","navIndex","navClicked","Number","targetIndexBase","pages","goTo","navCurrentIndex","animating","stopAutoplay","curElement","activeElement","setFocus","navItems","hoverEvents","stopAutoplayTimer","autoplayHoverPaused","setAutoplayTimer","visibilityEvent","hidden","autoplayVisibilityPaused","docmentKeydownEvent","touchEvents","onPanStart","onPanMove","onPanEnd","dragEvents","hasControls","hasNav","hasAutoplay","hasTouch","hasMouseDrag","slideActiveClass","slideClonedClass","imgCompleteClass","imgEvents","imgLoaded","img","imgCompleted","preventScroll","prevIsButton","nextIsButton","controlsContainerHTML","prevButtonHTML","nextButtonHTML","navContainerHTML","getPages","pagesCached","getCurrentNavIndex","navCurrentIndexCached","navActiveClass","navStr","navStrCurrent","autoplayTimer","autoplayUserPaused","autoplayButtonHTML","autoplayHtmlStrings","translateInit","rafIndex","initPosition","lastPosition","panStart","getDist","a","b","x","y","resetVariblesWhenDisable","fragmentBefore","createDocumentFragment","fragmentAfter","num","cloneFirst","cloneNode","firstChild","cloneLast","initStructure","fontSize","slide","marginLeft","getSlideMarginLeft","getTransitionDurationStyle","getInnerWrapperStyles","getContainerWidth","getSlideWidthStyle","getSlideGutterStyle","getAnimationDurationStyle","parseInt","middleWrapperStr","innerWrapperStr","containerStr","slideStr","itemsBP","fixedWidthBP","speedBP","edgePaddingBP","autoHeightBP","gutterBP","initSheet","initSliderTransform","updateIndex","leftEdge","rightEdge","transformCore","element","postfix","to","duration","tick","unit","positionTick","resetDuration","doContainerTransform","getContainerTransformValue","moveElement","updateContentWrapperHeight","eve","animateSlide","version","getInfo","info","play","startAutoplay","pause","updateSliderHeight","updateInnerWrapperHeight","refresh","destroy","ownerNode","onResize","toggleAutoplay","clearInterval","htmlList","prevEl","previousElementSibling","parentEl","nextElementSibling","firstElementChild","rebuild","condition","ind","getAbsIndex","absIndex","innerWidth","clientWidth","getInsertPosition","pos","getClientWidth","rect","right","gap","ww","edgePaddingTem","gutterTem","fixedWidthTem","speedTem","gutterTemUnit","itemsTem","dividend","getCSSPrefix","substring","imgs","querySelectorAll","src","imgsLoadedCheck","getImageArray","initSliderTransformStyleCheck","doContainerTransformSilent","initTools","initEvents","stylesApplicationCheck","initSliderTransformCore","setSlidePositions","updateSlideStatus","insertAdjacentHTML","getLiveRegionStr","txt","navHtml","hiddenStr","updateNavVisibility","isButton","updateControlsStatus","disableUI","resizeTasks","doAutoHeight","doLazyLoad","disableSlider","freezeSlider","additionalUpdates","bpChanged","breakpointZoneTem","needContainerTransform","indChanged","itemsChanged","disableTem","freezeTem","arrowKeysTem","controlsTem","navTem","touchTem","mouseDragTem","autoplayTem","autoplayHoverPauseTem","autoplayResetOnVisibilityTem","indexTem","autoHeightTem","controlsTextTem","centerTem","autoplayTextTem","classN","enableUI","enableSlider","margin","unfreezeSlider","height","html","len","updateLiveRegion","updateGallerySlidePositions","deleteRule","removeRule","removeCSSRule","vp","getVisibleSlideRange","start","end","rangestart","rangeend","parseFloat","point","cell","arg","stopPropagation","srcset","imgSelector","complete","navPrev","navCurrent","updateNavStatus","getMaxSlideHeight","slideStart","slideRange","heights","maxHeight","wp","attr2","base","range","getLowerCaseNodeName","isAriaDisabled","disEnableElement","disablePrev","disableNext","prevDisabled","nextDisabled","getCenterGap","isRTL","denominator","number","classOut","classIn","isOut","render","sliderMoved","strTrans","event","propertyName","targetIndex","indexGap","isNaN","factor","dir","passEventObject","rtlDir","targetIn","setInterval","updateAutoplayButton","action","focus","isTouchEvent","changedTouches","srcElement","preventDefaultBehavior","preventDefault","returnValue","getMoveDirectionExpected","angle","atan2","PI","direction","$","clientX","clientY","panUpdate","cancelable","err","dist","directionalDist","preventClick","indexMoved","moved","rough","displayIndex","NivTSlider","slider","NiveaX","IsUAEnabled","init","trackingSelector","closest","trackingDataG4","dataset","tdata","photo_size","navigation","teaserListHome","teaserListSmall","sliderWrapper","trackHomeSlider","trackTeaserSlider","clickedElement","addTouchHandlersOnSlider","hasProductTeasers","sliderTeaserClick","sliderHeadline","getContentSliderHeadline","parentElement","isTouch","trackTapDotEvent","contentZone","contentZoneHeadline","contentZoneHeadlineElement","trim","dotsClassName","eventAction","eventActionPrevious","eventActionNext","swipeDirection","lastIdx","currentIdx","trackSliderOnSwipe","swipeDirectionPrevious","eventType","trackingData","Rule","includes","shift","eventParams","Tevent","parameters","moduleSelector","defaultSliderOptions","Slider","allSliderItems","_allSliderItems","setup","moduleInitialized","youTubeUrls","getSliderOptions","hasChildren","layoutVariant","initIntersectionObserver","preventBrowserDragAndDrop","updateControls","addHandlersOnSlider","initTracking","youTubeElements","sliderInfo","map","vidContainer","observer","IntersectionObserver","entries","entry","isIntersecting","root","rootMargin","threshold","controlsDiv","updateKeyboardAccessibility","preventClickOnDrag","wasDraged","onDragEnd","onMouseUp","dispatchEvent","CustomEvent","isInItem","defOptions","optionsFromData","optionObj","optionsStringFromData","twoColObject","assign","onIndexChange","onSlideEnd","bind","lastIndex","s","activeSlides","pauseAllYoutubeVideosInSlider","setNavsAccessibilityHidden","setFirstAndLastItemKeyboardAccessibility","activeSlideItems","firstItem","lastItem","isObserved","observe","takeRecords","activeNav","url","youTubeVideoId","pauseYouTubeVideoById","infoSlider","sliderOptions","sliderIndex","dest","LazySlider","super","initLazy","video","loadVideoForActiveSlides","loadVideoOnIndexChange","loadMovieVideo","pauseVideoFoNotActiveSlides","loadedVideo","vid","currentTime","subscribe","currentVideo","isAutoHeightActive"],"sourceRoot":""}