{"version":3,"file":"main.bundle.js","mappings":"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","sources":["webpack://woningborg.website/./src/frontend/scripts/academy/index.js","webpack://woningborg.website/./src/frontend/scripts/ask-answer/index.js","webpack://woningborg.website/./src/frontend/scripts/email/index.js","webpack://woningborg.website/./src/frontend/scripts/newsletter/index.js","webpack://woningborg.website/webpack/bootstrap","webpack://woningborg.website/./src/frontend/scripts/navigation/index.js","webpack://woningborg.website/./src/frontend/scripts/header/index.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/raf.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/caf.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/extend.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/getBody.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/docElement.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/forEach.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/hasClass.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/addClass.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/removeClass.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/getAttr.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/hideElement.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/showElement.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/isVisible.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/addEvents.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/events.js","webpack://woningborg.website/./node_modules/tiny-slider/src/tiny-slider.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/calc.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/toDegree.js","webpack://woningborg.website/./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack://woningborg.website/./src/frontend/scripts/news/index.js","webpack://woningborg.website/./src/frontend/scripts/banner/index.js","webpack://woningborg.website/./src/frontend/scripts/choose-us/index.js","webpack://woningborg.website/./src/frontend/scripts/index.js"],"sourcesContent":["function addSearchSubmit () {\r\n const submit = document.getElementById('js-search-academy-button');\r\n const form = document.getElementById('js-search-academy-form');\r\n const searchBox = document.getElementById('search-academy-filter');\r\n if (submit && form) {\r\n submit.addEventListener(\"click\", function () {\r\n const filterUrl = getSubmitUrlFilter();\r\n document.location = window.location.origin + window.location.pathname + getSearchUrl(searchBox.value, filterUrl);\r\n });\r\n }\r\n }\r\n \r\n function addSearchFilterSubmit () {\r\n const radiobuttons = document.querySelectorAll('#js-search-academy-form .js-filter-radiobutton');\r\n const searchBox = document.getElementById('search-academy-filter');\r\n \r\n for(let i = 0; i < radiobuttons.length; i++) {\r\n const item = radiobuttons[i];\r\n item.addEventListener(\"click\", function () {\r\n const filterUrl = getSubmitUrlFilter();\r\n document.location = window.location.origin + window.location.pathname + getSearchUrl(searchBox.value, filterUrl);\r\n });\r\n }\r\n }\r\n \r\n function addSearchReset () {\r\n const reset = document.getElementById('js-reset-academy-button');\r\n if (reset) {\r\n reset.addEventListener(\"click\", function () {\r\n document.location = window.location.origin + window.location.pathname;\r\n });\r\n }\r\n }\r\n \r\n function getSubmitUrlFilter() {\r\n const checked = document.querySelectorAll('#js-search-academy-form input[type=\"radio\"]:checked');\r\n let finalUrl = '';\r\n \r\n //get selected category\r\n const checkedDate = Array.from(checked).filter(x => x.name === 'date');\r\n \r\n if (checkedDate.length > 0) {\r\n finalUrl = 'date=' + checkedDate[0].value.toLowerCase();\r\n }\r\n \r\n return finalUrl;\r\n }\r\n \r\n function getSearchUrl(searchValue, filterUrl) {\r\n let searchUrl = '';\r\n if (searchValue !== '')\r\n {\r\n searchUrl = '?qa=' + searchValue;\r\n }\r\n if (filterUrl !== '')\r\n {\r\n if (searchUrl === '')\r\n {\r\n searchUrl = '?' + filterUrl;\r\n }\r\n else\r\n {\r\n searchUrl = searchUrl + '&' + filterUrl;\r\n }\r\n }\r\n return searchUrl;\r\n }\r\n \r\n if (document.getElementById('search-academy-filter') !== undefined && document.getElementById('search-academy-filter') !== null) {\r\n const filterUrl = getSubmitUrlFilter();\r\n document.querySelector('#search-academy-filter').addEventListener('keypress', function (e) {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n \r\n document.location = window.location.origin + window.location.pathname + getSearchUrl(e.target.value, filterUrl);\r\n }\r\n });\r\n }\r\n\r\n \r\nfunction scrollToSubmissions() {\r\n const componentAnchorLink = document.querySelector('.js-submissions');\r\n if (componentAnchorLink) {\r\n console.log('aaaa')\r\n const headerHeight = document.getElementsByClassName('navigation__bar')[0].clientHeight;\r\n const element = componentAnchorLink;\r\n element.style.marginTop = '-' + headerHeight + 'px';\r\n }\r\n}\r\n \r\n addSearchSubmit();\r\n addSearchFilterSubmit();\r\n addSearchReset();\r\n scrollToSubmissions();","let answers = [];\r\n\r\nfunction clickAnswer() {\r\n const buttons = document.querySelectorAll('.ask-answer__actions .ask-answer__btn');\r\n if (buttons) {\r\n for (let i = 0; i < buttons.length; i++) {\r\n const item = buttons[i];\r\n item.addEventListener(\"click\", function () {\r\n const nextKey = item.getAttribute('data-nextKey');\r\n const questionKey = item.getAttribute('data-questionKey');\r\n\r\n renderNextQuestion(nextKey, questionKey);\r\n\r\n toggleQuestions();\r\n toggleButtons();\r\n toggleActiveButtons();\r\n\r\n const questionBlock = document.getElementById('question-' + nextKey);\r\n const buttonsBlock = document.getElementById('buttons-' + nextKey);\r\n\r\n if (questionBlock){\r\n questionBlock.classList.remove('d-none');\r\n }\r\n\r\n if (buttonsBlock){\r\n buttonsBlock.classList.remove('d-none');\r\n }\r\n \r\n window.scrollTo(0, item.offsetTop - (item.offsetHeight * 2));\r\n\r\n item.classList.add('--is-active');\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction toggleActiveButtons() {\r\n // Remove all active buttons first\r\n const buttonsElement = document.querySelectorAll('[id^=\"buttons-\"]');\r\n \r\n for (let index = 0; index < buttonsElement.length; index++) {\r\n const element = buttonsElement[index];\r\n \r\n if (element) {\r\n const buttons = element.getElementsByTagName('button');\r\n for (let index = 0; index < buttons.length; index++) {\r\n const buttonElement = buttons[index];\r\n buttonElement.classList.remove('--is-active');\r\n }\r\n }\r\n }\r\n\r\n console.log(answers);\r\n\r\n for (let index = 0; index < answers.length; index++) {\r\n const element = answers[index];\r\n const buttons = document.getElementById('buttons-' + element['question']);\r\n\r\n if (buttons) {\r\n const questionButtons = buttons.getElementsByTagName('button');\r\n\r\n if (questionButtons) {\r\n for (let index = 0; index < questionButtons.length; index++) {\r\n const buttonElement = questionButtons[index];\r\n if (buttonElement.getAttribute('data-nextKey') === element['next']) {\r\n buttonElement.classList.add('--is-active');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction toggleQuestions() {\r\n // Hide all questions first\r\n const questions = document.querySelectorAll('[id^=\"question-\"]');\r\n\r\n if (questions) {\r\n for (let index = 0; index < questions.length; index++) {\r\n const element = questions[index];\r\n element.classList.add('d-none');\r\n }\r\n }\r\n\r\n for (let index = 0; index < answers.length; index++) {\r\n const element = answers[index];\r\n const questionElement = document.getElementById('question-' + element['question']);\r\n\r\n if (questionElement) {\r\n questionElement.classList.remove('d-none');\r\n }\r\n }\r\n}\r\n\r\nfunction toggleButtons() {\r\n // Hide all buttons first\r\n const buttons = document.querySelectorAll('[id^=\"buttons-\"]');\r\n\r\n if (buttons) {\r\n for (let index = 0; index < buttons.length; index++) {\r\n const element = buttons[index];\r\n element.classList.add('d-none');\r\n }\r\n }\r\n\r\n for (let index = 0; index < answers.length; index++) {\r\n const element = answers[index];\r\n const buttonsElement = document.getElementById('buttons-' + element['question']);\r\n\r\n if (buttonsElement) {\r\n buttonsElement.classList.remove('d-none');\r\n }\r\n }\r\n}\r\n\r\nfunction renderNextQuestion(nextKey, questionKey) {\r\n var questionIndex = answers.findIndex(x => x.question === questionKey);\r\n\r\n if (questionIndex > -1) {\r\n while (answers.length > questionIndex) {\r\n answers.pop(answers[questionIndex]);\r\n }\r\n }\r\n\r\n const answer = {};\r\n answer['question'] = questionKey;\r\n answer['next'] = nextKey;\r\n\r\n answers.push(answer);\r\n}\r\n\r\nclickAnswer();","// Actions to do something with the decoded emailaddresses\r\nfunction mailToEmailAddress () {\r\n const emailaddresses = document.getElementsByClassName('--email');\r\n\r\n if (emailaddresses) {\r\n for (let index = 0; index < emailaddresses.length; index++) {\r\n const item = emailaddresses[index];\r\n const emailValue = emailaddresses[index].getAttribute('data-email');\r\n let emailAddress = '';\r\n\r\n if (emailValue !== null) {\r\n emailAddress = decodeURIComponent(atob(emailValue));\r\n\r\n item.addEventListener(\"click\", function () {\r\n document.location = 'mailto:' + emailAddress;\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nmailToEmailAddress();\r\n","\r\nfunction newsletterSubmission() {\r\n const emailInput = document.getElementById('js-email');\r\n const submitbutton = document.getElementById('js-submitbutton');\r\n\r\n if (emailInput && submitbutton) {\r\n emailInput.addEventListener(\"keyup\", function (e) {\r\n const emailInputSpotler = document.getElementById('field1881');\r\n if (emailInputSpotler) {\r\n emailInputSpotler.value = emailInput.value;\r\n }\r\n });\r\n \r\n submitbutton.addEventListener(\"click\", function () {\r\n const submitbuttonSpotler = document.getElementById('field1887');\r\n\r\n if (emailInput.value !== '') {\r\n submitbuttonSpotler.click();\r\n }\r\n }); \r\n }\r\n}\r\n\r\nnewsletterSubmission();","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","function clickSwitcherButton (btn, targetBtn, activeClass, switcherState) {\r\n const switcher = document.getElementById('js-switcher-checkbox'),\r\n oneBtn = document.getElementById(btn),\r\n twoBtn = document.getElementById(targetBtn);\r\n\r\n if (switcher) {\r\n oneBtn.addEventListener('click', () => {\r\n twoBtn.classList.remove(activeClass);\r\n oneBtn.classList.add(activeClass);\r\n switcher.checked = switcherState;\r\n document.location = oneBtn.getAttribute('url');\r\n });\r\n }\r\n}\r\n\r\nfunction setActiveStateSwitcherButtons () {\r\n const switcher = document.getElementById('js-switcher-checkbox'),\r\n buyerButton = document.getElementById('js-switcher-buyer'),\r\n builderButton = document.getElementById('js-switcher-builder'),\r\n builderUrl = builderButton.getAttribute('url'),\r\n buyerUrl = buyerButton.getAttribute('url');\r\n\r\n if (switcher) {\r\n switcher.addEventListener('change', (e) => {\r\n if (e.target.checked) {\r\n buyerButton.classList.remove('--is-active');\r\n builderButton.classList.add('--is-active');\r\n document.location = builderUrl;\r\n } else {\r\n builderButton.classList.remove('--is-active');\r\n buyerButton.classList.add('is-active');\r\n document.location = buyerUrl;\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction clickToggle () {\r\n const btn = document.getElementById('js-toggle-menu'),\r\n collapse = document.getElementById('js-navigation-collapse'),\r\n list = document.getElementById('js-navigation-list'),\r\n search = document.getElementById('js-navigation-search'),\r\n topList = document.getElementById('js-navigation-top-list'),\r\n close = document.getElementById('js-navigation-close'),\r\n title = document.getElementById('js-navigation-title');\r\n\r\n if (btn) {\r\n btn.addEventListener('click', () => {\r\n if (title) {\r\n title.innerHTML = 'Menu';\r\n }\r\n if (list) {\r\n list.classList.remove('d-none');\r\n }\r\n if (search) {\r\n search.classList.add('d-none');\r\n }\r\n if (topList) {\r\n topList.classList.remove('d-none');\r\n }\r\n\r\n if (collapse) {\r\n setTimeout(() => {\r\n collapse.classList.remove('d-none');\r\n }, 1);\r\n setTimeout(() => {\r\n collapse.classList.add('--collapse-enter');\r\n }, 1);\r\n setTimeout(() => {\r\n collapse.classList.remove('--collapse-enter');\r\n }, 301);\r\n }\r\n\r\n btn.setAttribute('aria-expanded', 'true');\r\n if (close) {\r\n close.setAttribute('aria-expanded', 'true');\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction clickToggleSearch () {\r\n const btn = document.getElementById('js-toggle-search'),\r\n collapse = document.getElementById('js-navigation-collapse'),\r\n list = document.getElementById('js-navigation-list'),\r\n topList = document.getElementById('js-navigation-top-list'),\r\n close = document.getElementById('js-navigation-close'),\r\n title = document.getElementById('js-navigation-title');\r\n\r\n if (btn) {\r\n btn.addEventListener('click', () => {\r\n if (title) {\r\n title.innerHTML = 'Zoeken';\r\n }\r\n if(list) {\r\n list.classList.add('d-none');\r\n }\r\n if (topList) {\r\n topList.classList.add('d-none');\r\n topList.classList.remove('d-md-flex');\r\n }\r\n\r\n if (collapse) {\r\n setTimeout(() => {\r\n collapse.classList.remove('d-none');\r\n }, 1);\r\n setTimeout(() => {\r\n collapse.classList.add('--collapse-enter');\r\n }, 2);\r\n setTimeout(() => {\r\n collapse.classList.remove('--collapse-enter');\r\n }, 301);\r\n }\r\n\r\n btn.setAttribute('aria-expanded', 'true');\r\n if (close) {\r\n close.setAttribute('aria-expanded', 'true');\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction clickCloseCollapse () {\r\n const btn = document.getElementById('js-navigation-close'),\r\n toggleBtn = document.getElementById('js-toggle-menu'),\r\n searchBtn = document.getElementById('js-toggle-search'),\r\n collapse = document.getElementById('js-navigation-collapse'),\r\n list = document.getElementById('js-navigation-list'),\r\n search = document.getElementById('js-navigation-search'),\r\n topList = document.getElementById('js-navigation-top-list');\r\n\r\n if (btn) {\r\n btn.addEventListener('click', () => {\r\n if (collapse) {\r\n collapse.classList.add('--collapse-leave');\r\n setTimeout(() => {\r\n collapse.classList.add('d-none');\r\n }, 300);\r\n }\r\n setTimeout(() => {\r\n if (collapse) {\r\n collapse.classList.remove('--collapse-leave');\r\n }\r\n if (list) {\r\n list.classList.remove('d-none');\r\n }\r\n if(search) {\r\n search.classList.remove('d-none');\r\n }\r\n if(topList) {\r\n topList.classList.remove('d-none');\r\n topList.classList.add('d-md-flex');\r\n }\r\n }, 301);\r\n\r\n btn.setAttribute('aria-expanded', 'false');\r\n if (toggleBtn) {\r\n toggleBtn.setAttribute('aria-expanded', 'false');\r\n }\r\n if (searchBtn) {\r\n searchBtn.setAttribute('aria-expanded', 'false');\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction closeCollapse () {\r\n const btn = document.getElementById('js-navigation-close'),\r\n toggleBtn = document.getElementById('js-toggle-menu'),\r\n searchBtn = document.getElementById('js-toggle-search'),\r\n collapse = document.getElementById('js-navigation-collapse'),\r\n list = document.getElementById('js-navigation-list'),\r\n search = document.getElementById('js-navigation-search'),\r\n topList = document.getElementById('js-navigation-top-list'),\r\n xl = window.matchMedia('(min-width: 1280px)');\r\n\r\n if (xl.matches) {\r\n if (collapse) {\r\n collapse.classList.add('d-none');\r\n }\r\n if (list) {\r\n list.classList.remove('d-none');\r\n }\r\n if (search) {\r\n search.classList.remove('d-none');\r\n }\r\n if (topList) {\r\n topList.classList.remove('d-none');\r\n }\r\n if (btn) {\r\n btn.setAttribute('aria-expanded', 'false');\r\n }\r\n if (toggleBtn) {\r\n toggleBtn.setAttribute('aria-expanded', 'false');\r\n }\r\n if (searchBtn) {\r\n searchBtn.setAttribute('aria-expanded', 'false');\r\n }\r\n }\r\n}\r\n\r\nfunction addClassNavBar () {\r\n const navBar = document.getElementById('js-navigation-bar');\r\n\r\n if (navBar) {\r\n navBar.classList.add('--has-shadow');\r\n }\r\n}\r\n\r\nfunction removeClassNavBar () {\r\n const navBar = document.getElementById('js-navigation-bar');\r\n\r\n if (navBar) {\r\n navBar.classList.remove('--has-shadow');\r\n }\r\n}\r\n\r\nexport {\r\n clickSwitcherButton,\r\n setActiveStateSwitcherButtons,\r\n clickToggle,\r\n clickToggleSearch,\r\n clickCloseCollapse,\r\n closeCollapse,\r\n addClassNavBar,\r\n removeClassNavBar\r\n};\r\n","function setWidthContentHeaderPicture () {\r\n const windowWidth = window.innerWidth,\r\n pic = document.querySelector('#js-content-header');\r\n \r\n if (pic) {\r\n const rect = pic.getBoundingClientRect();\r\n pic.style.width = (windowWidth - rect.x) + 'px';\r\n }\r\n}\r\n\r\nexport {\r\n setWidthContentHeaderPicture\r\n}\r\n","var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","export function Events() {\n return {\n topics: {},\n on: function (eventName, fn) {\n this.topics[eventName] = this.topics[eventName] || [];\n this.topics[eventName].push(fn);\n },\n off: function(eventName, fn) {\n if (this.topics[eventName]) {\n for (var i = 0; i < this.topics[eventName].length; i++) {\n if (this.topics[eventName][i] === fn) {\n this.topics[eventName].splice(i, 1);\n break;\n }\n }\n }\n },\n emit: function (eventName, data) {\n data.type = eventName;\n if (this.topics[eventName]) {\n this.topics[eventName].forEach(function(fn) {\n fn(data, eventName);\n });\n }\n }\n };\n};","// Object.keys\nif (!Object.keys) {\n Object.keys = function(object) {\n var keys = [];\n for (var name in object) {\n if (Object.prototype.hasOwnProperty.call(object, name)) {\n keys.push(name);\n }\n }\n return keys;\n };\n}\n\n// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n Element.prototype.remove = function(){\n if(this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}\n\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n options = extend({\n container: '.slider',\n mode: 'carousel',\n axis: 'horizontal',\n items: 1,\n gutter: 0,\n edgePadding: 0,\n fixedWidth: false,\n autoWidth: false,\n viewportMax: false,\n slideBy: 1,\n center: false,\n controls: true,\n controlsPosition: 'top',\n controlsText: ['prev', 'next'],\n controlsContainer: false,\n prevButton: false,\n nextButton: false,\n nav: true,\n navPosition: 'top',\n navContainer: false,\n navAsThumbnails: false,\n arrowKeys: false,\n speed: 300,\n autoplay: false,\n autoplayPosition: 'top',\n autoplayTimeout: 5000,\n autoplayDirection: 'forward',\n autoplayText: ['start', 'stop'],\n autoplayHoverPause: false,\n autoplayButton: false,\n autoplayButtonOutput: true,\n autoplayResetOnVisibility: true,\n animateIn: 'tns-fadeIn',\n animateOut: 'tns-fadeOut',\n animateNormal: 'tns-normal',\n animateDelay: false,\n loop: true,\n rewind: false,\n autoHeight: false,\n responsive: false,\n lazyload: false,\n lazyloadSelector: '.tns-lazy-img',\n touch: true,\n mouseDrag: false,\n swipeAngle: 15,\n nested: false,\n preventActionWhenRunning: false,\n preventScrollOnTouch: false,\n freezable: true,\n onInit: false,\n useLocalStorage: true,\n nonce: false\n }, options || {});\n\n var doc = document,\n win = window,\n KEYS = {\n ENTER: 13,\n SPACE: 32,\n LEFT: 37,\n RIGHT: 39\n },\n tnsStorage = {},\n localStorageAccess = options.useLocalStorage;\n\n if (localStorageAccess) {\n // check browser version and local storage access\n var browserInfo = navigator.userAgent;\n var uid = new Date;\n\n try {\n tnsStorage = win.localStorage;\n if (tnsStorage) {\n tnsStorage.setItem(uid, uid);\n localStorageAccess = tnsStorage.getItem(uid) == uid;\n tnsStorage.removeItem(uid);\n } else {\n localStorageAccess = false;\n }\n if (!localStorageAccess) { tnsStorage = {}; }\n } catch(e) {\n localStorageAccess = false;\n }\n\n if (localStorageAccess) {\n // remove storage when browser version changes\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n }\n // update browserInfo\n localStorage['tnsApp'] = browserInfo;\n }\n }\n\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n // get element nodes from selectors\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\n optionsElements = {};\n\n tnsList.forEach(function(item) {\n if (typeof options[item] === 'string') {\n var str = options[item],\n el = doc.querySelector(str);\n optionsElements[item] = str;\n\n if (el && el.nodeName) {\n options[item] = el;\n } else {\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n return;\n }\n }\n });\n\n // make sure at least 1 slide\n if (options.container.children.length < 1) {\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n return;\n }\n\n // update options\n var responsive = options.responsive,\n nested = options.nested,\n carousel = options.mode === 'carousel' ? true : false;\n\n if (responsive) {\n // apply responsive[0] to options and remove it\n if (0 in responsive) {\n options = extend(options, responsive[0]);\n delete responsive[0];\n }\n\n var responsiveTem = {};\n for (var key in responsive) {\n var val = responsive[key];\n // update responsive\n // from: 300: 2\n // to:\n // 300: {\n // items: 2\n // }\n val = typeof val === 'number' ? {items: val} : val;\n responsiveTem[key] = val;\n }\n responsive = responsiveTem;\n responsiveTem = null;\n }\n\n // update options\n function updateOptions (obj) {\n for (var key in obj) {\n if (!carousel) {\n if (key === 'slideBy') { obj[key] = 'page'; }\n if (key === 'edgePadding') { obj[key] = false; }\n if (key === 'autoHeight') { obj[key] = false; }\n }\n\n // update responsive options\n if (key === 'responsive') { updateOptions(obj[key]); }\n }\n }\n if (!carousel) { updateOptions(options); }\n\n\n // === define and set variables ===\n if (!carousel) {\n options.axis = 'horizontal';\n options.slideBy = 'page';\n options.edgePadding = false;\n\n var animateIn = options.animateIn,\n animateOut = options.animateOut,\n animateDelay = options.animateDelay,\n animateNormal = options.animateNormal;\n }\n\n var horizontal = options.axis === 'horizontal' ? true : false,\n outerWrapper = doc.createElement('div'),\n innerWrapper = doc.createElement('div'),\n middleWrapper,\n container = options.container,\n containerParent = container.parentNode,\n containerHTML = container.outerHTML,\n slideItems = container.children,\n slideCount = slideItems.length,\n breakpointZone,\n windowWidth = getWindowWidth(),\n isOn = false;\n if (responsive) { setBreakpointZone(); }\n if (carousel) { container.className += ' tns-vpfix'; }\n\n // fixedWidth: viewport > rightBoundary > indexMax\n var autoWidth = options.autoWidth,\n fixedWidth = getOption('fixedWidth'),\n edgePadding = getOption('edgePadding'),\n gutter = getOption('gutter'),\n viewport = getViewportWidth(),\n center = getOption('center'),\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\n slideBy = getOption('slideBy'),\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n arrowKeys = getOption('arrowKeys'),\n speed = getOption('speed'),\n rewind = options.rewind,\n loop = rewind ? false : options.loop,\n autoHeight = getOption('autoHeight'),\n controls = getOption('controls'),\n controlsText = getOption('controlsText'),\n nav = getOption('nav'),\n touch = getOption('touch'),\n mouseDrag = getOption('mouseDrag'),\n autoplay = getOption('autoplay'),\n autoplayTimeout = getOption('autoplayTimeout'),\n autoplayText = getOption('autoplayText'),\n autoplayHoverPause = getOption('autoplayHoverPause'),\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n sheet = createStyleSheet(null, getOption('nonce')),\n lazyload = options.lazyload,\n lazyloadSelector = options.lazyloadSelector,\n slidePositions, // collection of slide positions\n slideItemsOut = [],\n cloneCount = loop ? getCloneCountForLoop() : 0,\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n rightBoundary = fixedWidth ? getRightBoundary() : null,\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n // transform\n transformAttr = horizontal ? 'left' : 'top',\n transformPrefix = '',\n transformPostfix = '',\n // index\n getIndexMax = (function () {\n if (fixedWidth) {\n return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n } else if (autoWidth) {\n return function() {\n for (var i = 0; i < slideCountNew; i++) {\n if (slidePositions[i] >= - rightBoundary) { return i; }\n }\n };\n } else {\n return function() {\n if (center && carousel && !loop) {\n return slideCount - 1;\n } else {\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n }\n };\n }\n })(),\n index = getStartIndex(getOption('startIndex')),\n indexCached = index,\n displayIndex = getCurrentSlide(),\n indexMin = 0,\n indexMax = !autoWidth ? getIndexMax() : null,\n // resize\n resizeTimer,\n preventActionWhenRunning = options.preventActionWhenRunning,\n swipeAngle = options.swipeAngle,\n moveDirectionExpected = swipeAngle ? '?' : true,\n running = false,\n onInit = options.onInit,\n events = new Events(),\n // id, class\n newContainerClasses = ' tns-slider tns-' + options.mode,\n slideId = container.id || getSlideId(),\n disable = getOption('disable'),\n disabled = false,\n freezable = options.freezable,\n freeze = freezable && !autoWidth ? getFreeze() : false,\n frozen = false,\n controlsEvents = {\n 'click': onControlsClick,\n 'keydown': onControlsKeydown\n },\n navEvents = {\n 'click': onNavClick,\n 'keydown': onNavKeydown\n },\n hoverEvents = {\n 'mouseover': mouseoverPause,\n 'mouseout': mouseoutRestart\n },\n visibilityEvent = {'visibilitychange': onVisibilityChange},\n docmentKeydownEvent = {'keydown': onDocumentKeydown},\n touchEvents = {\n 'touchstart': onPanStart,\n 'touchmove': onPanMove,\n 'touchend': onPanEnd,\n 'touchcancel': onPanEnd\n }, dragEvents = {\n 'mousedown': onPanStart,\n 'mousemove': onPanMove,\n 'mouseup': onPanEnd,\n 'mouseleave': onPanEnd\n },\n hasControls = hasOption('controls'),\n hasNav = hasOption('nav'),\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n hasAutoplay = hasOption('autoplay'),\n hasTouch = hasOption('touch'),\n hasMouseDrag = hasOption('mouseDrag'),\n slideActiveClass = 'tns-slide-active',\n slideClonedClass = 'tns-slide-cloned',\n imgCompleteClass = 'tns-complete',\n imgEvents = {\n 'load': onImgLoaded,\n 'error': onImgFailed\n },\n imgsComplete,\n liveregionCurrent,\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n // controls\n if (hasControls) {\n var controlsContainer = options.controlsContainer,\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n prevButton = options.prevButton,\n nextButton = options.nextButton,\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n prevIsButton,\n nextIsButton;\n }\n\n // nav\n if (hasNav) {\n var navContainer = options.navContainer,\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n navItems,\n pages = autoWidth ? slideCount : getPages(),\n pagesCached = 0,\n navClicked = -1,\n navCurrentIndex = getCurrentNavIndex(),\n navCurrentIndexCached = navCurrentIndex,\n navActiveClass = 'tns-nav-active',\n navStr = 'Carousel Page ',\n navStrCurrent = ' (Current Slide)';\n }\n\n // autoplay\n if (hasAutoplay) {\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n autoplayButton = options.autoplayButton,\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n autoplayHtmlStrings = ['', ' animation'],\n autoplayTimer,\n animating,\n autoplayHoverPaused,\n autoplayUserPaused,\n autoplayVisibilityPaused;\n }\n\n if (hasTouch || hasMouseDrag) {\n var initPosition = {},\n lastPosition = {},\n translateInit,\n disX,\n disY,\n panStart = false,\n rafIndex,\n getDist = horizontal ?\n function(a, b) { return a.x - b.x; } :\n function(a, b) { return a.y - b.y; };\n }\n\n // disable slider when slidecount <= items\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n if (TRANSFORM) {\n transformAttr = TRANSFORM;\n transformPrefix = 'translate';\n\n if (HAS3DTRANSFORMS) {\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n } else {\n transformPrefix += horizontal ? 'X(' : 'Y(';\n transformPostfix = ')';\n }\n\n }\n\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n initStructure();\n initSheet();\n initSliderTransform();\n\n // === COMMON FUNCTIONS === //\n function resetVariblesWhenDisable (condition) {\n if (condition) {\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n }\n }\n\n function getCurrentSlide () {\n var tem = carousel ? index - cloneCount : index;\n while (tem < 0) { tem += slideCount; }\n return tem%slideCount + 1;\n }\n\n function getStartIndex (ind) {\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n return carousel ? ind + cloneCount : ind;\n }\n\n function getAbsIndex (i) {\n if (i == null) { i = index; }\n\n if (carousel) { i -= cloneCount; }\n while (i < 0) { i += slideCount; }\n\n return Math.floor(i%slideCount);\n }\n\n function getCurrentNavIndex () {\n var absIndex = getAbsIndex(),\n result;\n\n result = navAsThumbnails ? absIndex :\n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) :\n Math.floor(absIndex / items);\n\n // set active nav to the last one when reaches the right edge\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n return result;\n }\n\n function getItemsMax () {\n // fixedWidth or autoWidth while viewportMax is not available\n if (autoWidth || (fixedWidth && !viewportMax)) {\n return slideCount - 1;\n // most cases\n } else {\n var str = fixedWidth ? 'fixedWidth' : 'items',\n arr = [];\n\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n if (responsive) {\n for (var bp in responsive) {\n var tem = responsive[bp][str];\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n }\n }\n\n if (!arr.length) { arr.push(0); }\n\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n }\n }\n\n function getCloneCountForLoop () {\n var itemsMax = getItemsMax(),\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n result = Math.max(itemsMax, result);\n\n return hasOption('edgePadding') ? result + 1 : result;\n }\n\n function getWindowWidth () {\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n }\n\n function getInsertPosition (pos) {\n return pos === 'top' ? 'afterbegin' : 'beforeend';\n }\n\n function getClientWidth (el) {\n if (el == null) { return; }\n var div = doc.createElement('div'), rect, width;\n el.appendChild(div);\n rect = div.getBoundingClientRect();\n width = rect.right - rect.left;\n div.remove();\n return width || getClientWidth(el.parentNode);\n }\n\n function getViewportWidth () {\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n return getClientWidth(containerParent) - gap;\n }\n\n function hasOption (item) {\n if (options[item]) {\n return true;\n } else {\n if (responsive) {\n for (var bp in responsive) {\n if (responsive[bp][item]) { return true; }\n }\n }\n return false;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n function getOption (item, ww) {\n if (ww == null) { ww = windowWidth; }\n\n if (item === 'items' && fixedWidth) {\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n } else {\n var result = options[item];\n\n if (responsive) {\n for (var bp in responsive) {\n // bp: convert string to number\n if (ww >= parseInt(bp)) {\n if (item in responsive[bp]) { result = responsive[bp][item]; }\n }\n }\n }\n\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n return result;\n }\n }\n\n function getSlideMarginLeft (i) {\n return CALC ?\n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' :\n i * 100 / slideCountNew + '%';\n }\n\n function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n var str = '';\n\n if (edgePaddingTem !== undefined) {\n var gap = edgePaddingTem;\n if (gutterTem) { gap -= gutterTem; }\n str = horizontal ?\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n } else if (gutterTem && !fixedWidthTem) {\n var gutterTemUnit = '-' + gutterTem + 'px',\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n str = 'margin: 0 ' + dir + ';'\n }\n\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n return str;\n }\n\n function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n if (fixedWidthTem) {\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n } else {\n return CALC ?\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n slideCountNew * 100 / itemsTem + '%';\n }\n }\n\n function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n var width;\n\n if (fixedWidthTem) {\n width = (fixedWidthTem + gutterTem) + 'px';\n } else {\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\n var dividend = carousel ? slideCountNew : itemsTem;\n width = CALC ?\n CALC + '(100% / ' + dividend + ')' :\n 100 / dividend + '%';\n }\n\n width = 'width:' + width;\n\n // inner slider: overwrite outer slider styles\n return nested !== 'inner' ? width + ';' : width + ' !important;';\n }\n\n function getSlideGutterStyle (gutterTem) {\n var str = '';\n\n // gutter maybe interger || 0\n // so can't use 'if (gutter)'\n if (gutterTem !== false) {\n var prop = horizontal ? 'padding-' : 'margin-',\n dir = horizontal ? 'right' : 'bottom';\n str = prop + dir + ': ' + gutterTem + 'px;';\n }\n\n return str;\n }\n\n function getCSSPrefix (name, num) {\n var prefix = name.substring(0, name.length - num).toLowerCase();\n if (prefix) { prefix = '-' + prefix + '-'; }\n\n return prefix;\n }\n\n function getTransitionDurationStyle (speed) {\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n }\n\n function getAnimationDurationStyle (speed) {\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n }\n\n function initStructure () {\n var classOuter = 'tns-outer',\n classInner = 'tns-inner',\n hasGutter = hasOption('gutter');\n\n outerWrapper.className = classOuter;\n innerWrapper.className = classInner;\n outerWrapper.id = slideId + '-ow';\n innerWrapper.id = slideId + '-iw';\n\n // set container properties\n if (container.id === '') { container.id = slideId; }\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n newContainerClasses += ' tns-' + options.axis;\n container.className += newContainerClasses;\n\n // add constrain layer for carousel\n if (carousel) {\n middleWrapper = doc.createElement('div');\n middleWrapper.id = slideId + '-mw';\n middleWrapper.className = 'tns-ovh';\n\n outerWrapper.appendChild(middleWrapper);\n middleWrapper.appendChild(innerWrapper);\n } else {\n outerWrapper.appendChild(innerWrapper);\n }\n\n if (autoHeight) {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.className += ' tns-ah';\n }\n\n containerParent.insertBefore(outerWrapper, container);\n innerWrapper.appendChild(container);\n\n // add id, class, aria attributes\n // before clone slides\n forEach(slideItems, function(item, i) {\n addClass(item, 'tns-item');\n if (!item.id) { item.id = slideId + '-item' + i; }\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n });\n\n // ## clone slides\n // carousel: n + slides + n\n // gallery: slides + n\n if (cloneCount) {\n var fragmentBefore = doc.createDocumentFragment(),\n fragmentAfter = doc.createDocumentFragment();\n\n for (var j = cloneCount; j--;) {\n var num = j%slideCount,\n cloneFirst = slideItems[num].cloneNode(true);\n addClass(cloneFirst, slideClonedClass);\n removeAttrs(cloneFirst, 'id');\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n if (carousel) {\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n addClass(cloneLast, slideClonedClass);\n removeAttrs(cloneLast, 'id');\n fragmentBefore.appendChild(cloneLast);\n }\n }\n\n container.insertBefore(fragmentBefore, container.firstChild);\n container.appendChild(fragmentAfter);\n slideItems = container.children;\n }\n\n }\n\n function initSliderTransform () {\n // ## images loaded/failed\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\n var imgs = container.querySelectorAll('img');\n\n // add img load event listener\n forEach(imgs, function(img) {\n var src = img.src;\n\n if (!lazyload) {\n // not data img\n if (src && src.indexOf('data:image') < 0) {\n img.src = '';\n addEvents(img, imgEvents);\n addClass(img, 'loading');\n\n img.src = src;\n // data img\n } else {\n imgLoaded(img);\n }\n }\n });\n\n // set imgsComplete\n raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n // reset imgs for auto height: check visible imgs only\n if (hasOption('autoHeight')) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n } else {\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n }\n\n function initSliderTransformStyleCheck () {\n if (autoWidth && slideCount > 1) {\n // check styles application\n var num = loop ? index : slideCount - 1;\n\n (function stylesApplicationCheck() {\n var left = slideItems[num].getBoundingClientRect().left;\n var right = slideItems[num - 1].getBoundingClientRect().right;\n\n (Math.abs(left - right) <= 1) ?\n initSliderTransformCore() :\n setTimeout(function(){ stylesApplicationCheck() }, 16);\n })();\n\n } else {\n initSliderTransformCore();\n }\n }\n\n\n function initSliderTransformCore () {\n // run Fn()s which are rely on image loading\n if (!horizontal || autoWidth) {\n setSlidePositions();\n\n if (autoWidth) {\n rightBoundary = getRightBoundary();\n if (freezable) { freeze = getFreeze(); }\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n resetVariblesWhenDisable(disable || freeze);\n } else {\n updateContentWrapperHeight();\n }\n }\n\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n\n function initSheet () {\n // gallery:\n // set animation classes and left value for gallery slider\n if (!carousel) {\n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n var item = slideItems[i];\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // #### LAYOUT\n\n // ## INLINE-BLOCK VS FLOAT\n\n // ## PercentageLayout:\n // slides: inline-block\n // remove blank space between slides by set font-size: 0\n\n // ## Non PercentageLayout:\n // slides: float\n // margin-right: -100%\n // margin-left: ~\n\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n if (horizontal) {\n if (PERCENTAGELAYOUT || autoWidth) {\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n } else if (carousel) {\n forEach(slideItems, function (slide, i) {\n slide.style.marginLeft = getSlideMarginLeft(i);\n });\n }\n }\n\n\n // ## BASIC STYLES\n if (CSSMQ) {\n // middle wrapper style\n if (TRANSITIONDURATION) {\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n }\n\n // inner wrapper styles\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n // container styles\n if (carousel) {\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n }\n\n // slide styles\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n // set gallery items transition-duration\n if (!carousel) {\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n }\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n // non CSS mediaqueries: IE8\n // ## update inner wrapper, container, slides if needed\n // set inline styles for inner wrapper & container\n // insert stylesheet (one line) for slides only (since slides are many)\n } else {\n // middle wrapper styles\n update_carousel_transition_duration();\n\n // inner wrapper styles\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n // container styles\n if (carousel && horizontal && !autoWidth) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n if (gutter) { str += getSlideGutterStyle(gutter); }\n\n // append to the last line\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n }\n\n // ## MEDIAQUERIES\n if (responsive && CSSMQ) {\n for (var bp in responsive) {\n // bp: convert string to number\n bp = parseInt(bp);\n\n var opts = responsive[bp],\n str = '',\n middleWrapperStr = '',\n innerWrapperStr = '',\n containerStr = '',\n slideStr = '',\n itemsBP = !autoWidth ? getOption('items', bp) : null,\n fixedWidthBP = getOption('fixedWidth', bp),\n speedBP = getOption('speed', bp),\n edgePaddingBP = getOption('edgePadding', bp),\n autoHeightBP = getOption('autoHeight', bp),\n gutterBP = getOption('gutter', bp);\n\n // middle wrapper string\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n }\n\n // inner wrapper string\n if ('edgePadding' in opts || 'gutter' in opts) {\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n }\n\n // container string\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n }\n if (TRANSITIONDURATION && 'speed' in opts) {\n containerStr += getTransitionDurationStyle(speedBP);\n }\n if (containerStr) {\n containerStr = '#' + slideId + '{' + containerStr + '}';\n }\n\n // slide string\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n }\n if ('gutter' in opts) {\n slideStr += getSlideGutterStyle(gutterBP);\n }\n // set gallery items transition-duration\n if (!carousel && 'speed' in opts) {\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n }\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n // add up\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n if (str) {\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n }\n }\n }\n }\n\n function initTools () {\n // == slides ==\n updateSlideStatus();\n\n // == live region ==\n outerWrapper.insertAdjacentHTML('afterbegin', '
slide ' + getLiveRegionStr() + ' of ' + slideCount + '
');\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n // == autoplayInit ==\n if (hasAutoplay) {\n var txt = autoplay ? 'stop' : 'start';\n if (autoplayButton) {\n setAttrs(autoplayButton, {'data-action': txt});\n } else if (options.autoplayButtonOutput) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '');\n autoplayButton = outerWrapper.querySelector('[data-action]');\n }\n\n // add event\n if (autoplayButton) {\n addEvents(autoplayButton, {'click': toggleAutoplay});\n }\n\n if (autoplay) {\n startAutoplay();\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n }\n }\n\n // == navInit ==\n if (hasNav) {\n var initIndex = !carousel ? 0 : cloneCount;\n // customized nav\n // will not hide the navs in case they're thumbnails\n if (navContainer) {\n setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n navItems = navContainer.children;\n forEach(navItems, function(item, i) {\n setAttrs(item, {\n 'data-nav': i,\n 'tabindex': '-1',\n 'aria-label': navStr + (i + 1),\n 'aria-controls': slideId,\n });\n });\n\n // generated nav\n } else {\n var navHtml = '',\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n for (var i = 0; i < slideCount; i++) {\n // hide nav items by default\n navHtml += '';\n }\n navHtml = '
' + navHtml + '
';\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n navContainer = outerWrapper.querySelector('.tns-nav');\n navItems = navContainer.children;\n }\n\n updateNavVisibility();\n\n // add transition\n if (TRANSITIONDURATION) {\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n str = 'transition: all ' + speed / 1000 + 's';\n\n if (prefix) {\n str = '-' + prefix + '-' + str;\n }\n\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n }\n\n setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\n addClass(navItems[navCurrentIndex], navActiveClass);\n\n // add events\n addEvents(navContainer, navEvents);\n }\n\n\n\n // == controlsInit ==\n if (hasControls) {\n if (!controlsContainer && (!prevButton || !nextButton)) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '
');\n\n controlsContainer = outerWrapper.querySelector('.tns-controls');\n }\n\n if (!prevButton || !nextButton) {\n prevButton = controlsContainer.children[0];\n nextButton = controlsContainer.children[1];\n }\n\n if (options.controlsContainer) {\n setAttrs(controlsContainer, {\n 'aria-label': 'Carousel Navigation',\n 'tabindex': '0'\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs([prevButton, nextButton], {\n 'aria-controls': slideId,\n 'tabindex': '-1',\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs(prevButton, {'data-controls' : 'prev'});\n setAttrs(nextButton, {'data-controls' : 'next'});\n }\n\n prevIsButton = isButton(prevButton);\n nextIsButton = isButton(nextButton);\n\n updateControlsStatus();\n\n // add events\n if (controlsContainer) {\n addEvents(controlsContainer, controlsEvents);\n } else {\n addEvents(prevButton, controlsEvents);\n addEvents(nextButton, controlsEvents);\n }\n }\n\n // hide tools if needed\n disableUI();\n }\n\n function initEvents () {\n // add events\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n addEvents(container, eve);\n }\n\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n if (mouseDrag) { addEvents(container, dragEvents); }\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n if (nested === 'inner') {\n events.on('outerResized', function () {\n resizeTasks();\n events.emit('innerLoaded', info());\n });\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n addEvents(win, {'resize': onResize});\n }\n\n if (autoHeight) {\n if (nested === 'outer') {\n events.on('innerLoaded', doAutoHeight);\n } else if (!disable) { doAutoHeight(); }\n }\n\n doLazyLoad();\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n events.on('indexChanged', additionalUpdates);\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n if (typeof onInit === 'function') { onInit(info()); }\n isOn = true;\n }\n\n function destroy () {\n // sheet\n sheet.disabled = true;\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n // remove win event listeners\n removeEvents(win, {'resize': onResize});\n\n // arrowKeys, controls, nav\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n if (navContainer) { removeEvents(navContainer, navEvents); }\n\n // autoplay\n removeEvents(container, hoverEvents);\n removeEvents(container, visibilityEvent);\n if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n if (autoplay) { clearInterval(autoplayTimer); }\n\n // container\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n removeEvents(container, eve);\n }\n if (touch) { removeEvents(container, touchEvents); }\n if (mouseDrag) { removeEvents(container, dragEvents); }\n\n // cache Object values in options && reset HTML\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n tnsList.forEach(function(item, i) {\n var el = item === 'container' ? outerWrapper : options[item];\n\n if (typeof el === 'object' && el) {\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n parentEl = el.parentNode;\n el.outerHTML = htmlList[i];\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n }\n });\n\n\n // reset variables\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 = 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 = null;\n // check variables\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); } });\n\n for (var a in this) {\n if (a !== 'rebuild') { this[a] = null; }\n }\n isOn = false;\n }\n\n// === ON RESIZE ===\n // responsive || fixedWidth || autoWidth || !horizontal\n function onResize (e) {\n raf(function(){ resizeTasks(getEvent(e)); });\n }\n\n function resizeTasks (e) {\n if (!isOn) { return; }\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\n windowWidth = getWindowWidth();\n var bpChanged,\n breakpointZoneTem = breakpointZone,\n needContainerTransform = false;\n\n if (responsive) {\n setBreakpointZone();\n bpChanged = breakpointZoneTem !== breakpointZone;\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n }\n\n var indChanged,\n itemsChanged,\n itemsTem = items,\n disableTem = disable,\n freezeTem = freeze,\n arrowKeysTem = arrowKeys,\n controlsTem = controls,\n navTem = nav,\n touchTem = touch,\n mouseDragTem = mouseDrag,\n autoplayTem = autoplay,\n autoplayHoverPauseTem = autoplayHoverPause,\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n indexTem = index;\n\n if (bpChanged) {\n var fixedWidthTem = fixedWidth,\n autoHeightTem = autoHeight,\n controlsTextTem = controlsText,\n centerTem = center,\n autoplayTextTem = autoplayText;\n\n if (!CSSMQ) {\n var gutterTem = gutter,\n edgePaddingTem = edgePadding;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n arrowKeys = getOption('arrowKeys');\n controls = getOption('controls');\n nav = getOption('nav');\n touch = getOption('touch');\n center = getOption('center');\n mouseDrag = getOption('mouseDrag');\n autoplay = getOption('autoplay');\n autoplayHoverPause = getOption('autoplayHoverPause');\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n if (bpChanged) {\n disable = getOption('disable');\n fixedWidth = getOption('fixedWidth');\n speed = getOption('speed');\n autoHeight = getOption('autoHeight');\n controlsText = getOption('controlsText');\n autoplayText = getOption('autoplayText');\n autoplayTimeout = getOption('autoplayTimeout');\n\n if (!CSSMQ) {\n edgePadding = getOption('edgePadding');\n gutter = getOption('gutter');\n }\n }\n // update options\n resetVariblesWhenDisable(disable);\n\n viewport = getViewportWidth(); // <= edgePadding, gutter\n if ((!horizontal || autoWidth) && !disable) {\n setSlidePositions();\n if (!horizontal) {\n updateContentWrapperHeight(); // <= setSlidePositions\n needContainerTransform = true;\n }\n }\n if (fixedWidth || autoWidth) {\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n // fixedWidth: <= viewport, fixedWidth, gutter\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\n }\n\n if (bpChanged || fixedWidth) {\n items = getOption('items');\n slideBy = getOption('slideBy');\n itemsChanged = items !== itemsTem;\n\n if (itemsChanged) {\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n // check index before transform in case\n // slider reach the right edge then items become bigger\n updateIndex();\n }\n }\n\n if (bpChanged) {\n if (disable !== disableTem) {\n if (disable) {\n disableSlider();\n } else {\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\n }\n }\n }\n\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\n // <= others: items\n\n if (freeze !== freezeTem) {\n if (freeze) {\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n freezeSlider();\n } else {\n unfreezeSlider();\n needContainerTransform = true;\n }\n }\n }\n\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n if (arrowKeys !== arrowKeysTem) {\n arrowKeys ?\n addEvents(doc, docmentKeydownEvent) :\n removeEvents(doc, docmentKeydownEvent);\n }\n if (controls !== controlsTem) {\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n } else {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n if (nav !== navTem) {\n if (nav) {\n showElement(navContainer);\n updateNavVisibility();\n } else {\n hideElement(navContainer)\n }\n }\n if (touch !== touchTem) {\n touch ?\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\n removeEvents(container, touchEvents);\n }\n if (mouseDrag !== mouseDragTem) {\n mouseDrag ?\n addEvents(container, dragEvents) :\n removeEvents(container, dragEvents);\n }\n if (autoplay !== autoplayTem) {\n if (autoplay) {\n if (autoplayButton) { showElement(autoplayButton); }\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\n } else {\n if (autoplayButton) { hideElement(autoplayButton); }\n if (animating) { stopAutoplay(); }\n }\n }\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\n autoplayHoverPause ?\n addEvents(container, hoverEvents) :\n removeEvents(container, hoverEvents);\n }\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n autoplayResetOnVisibility ?\n addEvents(doc, visibilityEvent) :\n removeEvents(doc, visibilityEvent);\n }\n\n if (bpChanged) {\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n if (autoHeight !== autoHeightTem) {\n if (!autoHeight) { innerWrapper.style.height = ''; }\n }\n\n if (controls && controlsText !== controlsTextTem) {\n prevButton.innerHTML = controlsText[0];\n nextButton.innerHTML = controlsText[1];\n }\n\n if (autoplayButton && autoplayText !== autoplayTextTem) {\n var i = autoplay ? 1 : 0,\n html = autoplayButton.innerHTML,\n len = html.length - autoplayTextTem[i].length;\n if (html.substring(len) === autoplayTextTem[i]) {\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n }\n }\n } else {\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n }\n\n if (itemsChanged || fixedWidth && !autoWidth) {\n pages = getPages();\n updateNavVisibility();\n }\n\n indChanged = index !== indexTem;\n if (indChanged) {\n events.emit('indexChanged', info());\n needContainerTransform = true;\n } else if (itemsChanged) {\n if (!indChanged) { additionalUpdates(); }\n } else if (fixedWidth || autoWidth) {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n }\n\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n if (!disable && !freeze) {\n // non-mediaqueries: IE8\n if (bpChanged && !CSSMQ) {\n // middle wrapper styles\n\n // inner wrapper styles\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n }\n\n if (horizontal) {\n // container styles\n if (carousel) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = getSlideWidthStyle(fixedWidth, gutter, items) +\n getSlideGutterStyle(gutter);\n\n // remove the last line and\n // add new styles\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n }\n }\n\n // auto height\n if (autoHeight) { doAutoHeight(); }\n\n if (needContainerTransform) {\n doContainerTransformSilent();\n indexCached = index;\n }\n }\n\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n }\n\n\n\n\n\n // === INITIALIZATION FUNCTIONS === //\n function getFreeze () {\n if (!fixedWidth && !autoWidth) {\n var a = center ? items - (items - 1) / 2 : items;\n return slideCount <= a;\n }\n\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n if (center) {\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n }\n\n return width <= vp;\n }\n\n function setBreakpointZone () {\n breakpointZone = 0;\n for (var bp in responsive) {\n bp = parseInt(bp); // convert string to number\n if (windowWidth >= bp) { breakpointZone = bp; }\n }\n }\n\n // (slideBy, indexMin, indexMax) => index\n var updateIndex = (function () {\n return loop ?\n carousel ?\n // loop + carousel\n function () {\n var leftEdge = indexMin,\n rightEdge = indexMax;\n\n leftEdge += slideBy;\n rightEdge -= slideBy;\n\n // adjust edges when has edge paddings\n // or fixed-width slider with extra space on the right side\n if (edgePadding) {\n leftEdge += 1;\n rightEdge -= 1;\n } else if (fixedWidth) {\n if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n }\n\n if (cloneCount) {\n if (index > rightEdge) {\n index -= slideCount;\n } else if (index < leftEdge) {\n index += slideCount;\n }\n }\n } :\n // loop + gallery\n function() {\n if (index > indexMax) {\n while (index >= indexMin + slideCount) { index -= slideCount; }\n } else if (index < indexMin) {\n while (index <= indexMax - slideCount) { index += slideCount; }\n }\n } :\n // non-loop\n function() {\n index = Math.max(indexMin, Math.min(indexMax, index));\n };\n })();\n\n function disableUI () {\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n if (!nav && navContainer) { hideElement(navContainer); }\n if (!controls) {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n\n function enableUI () {\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\n if (nav && navContainer) { showElement(navContainer); }\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n }\n }\n\n function freezeSlider () {\n if (frozen) { return; }\n\n // remove edge padding from inner wrapper\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n // add class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { addClass(slideItems[i], str); }\n addClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n disableUI();\n\n frozen = true;\n }\n\n function unfreezeSlider () {\n if (!frozen) { return; }\n\n // restore edge padding for inner wrapper\n // for mordern browsers\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n // remove class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { removeClass(slideItems[i], str); }\n removeClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n enableUI();\n\n frozen = false;\n }\n\n function disableSlider () {\n if (disabled) { return; }\n\n sheet.disabled = true;\n container.className = container.className.replace(newContainerClasses.substring(1), '');\n removeAttrs(container, ['style']);\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { hideElement(slideItems[j]); }\n hideElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // vertical slider\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i];\n removeAttrs(item, ['style']);\n removeClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // update tools\n disableUI();\n\n disabled = true;\n }\n\n function enableSlider () {\n if (!disabled) { return; }\n\n sheet.disabled = false;\n container.className += newContainerClasses;\n doContainerTransformSilent();\n\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { showElement(slideItems[j]); }\n showElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i],\n classN = i < index + items ? animateIn : animateNormal;\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, classN);\n }\n }\n\n // update tools\n enableUI();\n\n disabled = false;\n }\n\n function updateLiveRegion () {\n var str = getLiveRegionStr();\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n }\n\n function getLiveRegionStr () {\n var arr = getVisibleSlideRange(),\n start = arr[0] + 1,\n end = arr[1] + 1;\n return start === end ? start + '' : start + ' to ' + end;\n }\n\n function getVisibleSlideRange (val) {\n if (val == null) { val = getContainerTransformValue(); }\n var start = index, end, rangestart, rangeend;\n\n // get range start, range end for autoWidth and fixedWidth\n if (center || edgePadding) {\n if (autoWidth || fixedWidth) {\n rangestart = - (parseFloat(val) + edgePadding);\n rangeend = rangestart + viewport + edgePadding * 2;\n }\n } else {\n if (autoWidth) {\n rangestart = slidePositions[index];\n rangeend = rangestart + viewport;\n }\n }\n\n // get start, end\n // - check auto width\n if (autoWidth) {\n slidePositions.forEach(function(point, i) {\n if (i < slideCountNew) {\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n if (rangeend - point >= 0.5) { end = i; }\n }\n });\n\n // - check percentage width, fixed width\n } else {\n\n if (fixedWidth) {\n var cell = fixedWidth + gutter;\n if (center || edgePadding) {\n start = Math.floor(rangestart/cell);\n end = Math.ceil(rangeend/cell - 1);\n } else {\n end = start + Math.ceil(viewport/cell) - 1;\n }\n\n } else {\n if (center || edgePadding) {\n var a = items - 1;\n if (center) {\n start -= a / 2;\n end = index + a / 2;\n } else {\n end = index + a;\n }\n\n if (edgePadding) {\n var b = edgePadding * items / viewport;\n start -= b;\n end += b;\n }\n\n start = Math.floor(start);\n end = Math.ceil(end);\n } else {\n end = start + items - 1;\n }\n }\n\n start = Math.max(start, 0);\n end = Math.min(end, slideCountNew - 1);\n }\n\n return [start, end];\n }\n\n function doLazyLoad () {\n if (lazyload && !disable) {\n var arg = getVisibleSlideRange();\n arg.push(lazyloadSelector);\n\n getImageArray.apply(null, arg).forEach(function (img) {\n if (!hasClass(img, imgCompleteClass)) {\n // stop propagation transitionend event to container\n var eve = {};\n eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n addEvents(img, eve);\n\n addEvents(img, imgEvents);\n\n // update src\n img.src = getAttr(img, 'data-src');\n\n // update srcset\n var srcset = getAttr(img, 'data-srcset');\n if (srcset) { img.srcset = srcset; }\n\n addClass(img, 'loading');\n }\n });\n }\n }\n\n function onImgLoaded (e) {\n imgLoaded(getTarget(e));\n }\n\n function onImgFailed (e) {\n imgFailed(getTarget(e));\n }\n\n function imgLoaded (img) {\n addClass(img, 'loaded');\n imgCompleted(img);\n }\n\n function imgFailed (img) {\n addClass(img, 'failed');\n imgCompleted(img);\n }\n\n function imgCompleted (img) {\n addClass(img, imgCompleteClass);\n removeClass(img, 'loading');\n removeEvents(img, imgEvents);\n }\n\n function getImageArray (start, end, imgSelector) {\n var imgs = [];\n if (!imgSelector) { imgSelector = 'img'; }\n\n while (start <= end) {\n forEach(slideItems[start].querySelectorAll(imgSelector), function (img) { imgs.push(img); });\n start++;\n }\n\n return imgs;\n }\n\n // check if all visible images are loaded\n // and update container height if it's done\n function doAutoHeight () {\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\n raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n }\n\n function imgsLoadedCheck (imgs, cb) {\n // execute callback function if all images are complete\n if (imgsComplete) { return cb(); }\n\n // check image classes\n imgs.forEach(function (img, index) {\n if (!lazyload && img.complete) { imgCompleted(img); } // Check image.complete\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n });\n\n // execute callback function if selected images are all complete\n if (!imgs.length) { return cb(); }\n\n // otherwise execute this functiona again\n raf(function(){ imgsLoadedCheck(imgs, cb); });\n }\n\n function additionalUpdates () {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n updateControlsStatus();\n updateNavStatus();\n }\n\n\n function update_carousel_transition_duration () {\n if (carousel && autoHeight) {\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n }\n }\n\n function getMaxSlideHeight (slideStart, slideRange) {\n var heights = [];\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n heights.push(slideItems[i].offsetHeight);\n }\n\n return Math.max.apply(null, heights);\n }\n\n // update inner wrapper height\n // 1. get the max-height of the visible slides\n // 2. set transitionDuration to speed\n // 3. update inner wrapper height to max-height\n // 4. set transitionDuration to 0s after transition done\n function updateInnerWrapperHeight () {\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n wp = middleWrapper ? middleWrapper : innerWrapper;\n\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n }\n\n // get the distance from the top edge of the first slide to each slide\n // (init) => slidePositions\n function setSlidePositions () {\n slidePositions = [0];\n var attr = horizontal ? 'left' : 'top',\n attr2 = horizontal ? 'right' : 'bottom',\n base = slideItems[0].getBoundingClientRect()[attr];\n\n forEach(slideItems, function(item, i) {\n // skip the first slide\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n // add the end edge\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n });\n }\n\n // update slide\n function updateSlideStatus () {\n var range = getVisibleSlideRange(),\n start = range[0],\n end = range[1];\n\n forEach(slideItems, function(item, i) {\n // show slides\n if (i >= start && i <= end) {\n if (hasAttr(item, 'aria-hidden')) {\n removeAttrs(item, ['aria-hidden', 'tabindex']);\n addClass(item, slideActiveClass);\n }\n // hide slides\n } else {\n if (!hasAttr(item, 'aria-hidden')) {\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n removeClass(item, slideActiveClass);\n }\n }\n });\n }\n\n // gallery: update slide position\n function updateGallerySlidePositions () {\n var l = index + Math.min(slideCount, items);\n for (var i = slideCountNew; i--;) {\n var item = slideItems[i];\n\n if (i >= index && i < l) {\n // add transitions to visible slides when adjusting their positions\n addClass(item, 'tns-moving');\n\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n } else if (item.style.left) {\n item.style.left = '';\n addClass(item, animateNormal);\n removeClass(item, animateIn);\n }\n\n // remove outlet animation\n removeClass(item, animateOut);\n }\n\n // removing '.tns-moving'\n setTimeout(function() {\n forEach(slideItems, function(el) {\n removeClass(el, 'tns-moving');\n });\n }, 300);\n }\n\n // set tabindex on Nav\n function updateNavStatus () {\n // get current nav\n if (nav) {\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n navClicked = -1;\n\n if (navCurrentIndex !== navCurrentIndexCached) {\n var navPrev = navItems[navCurrentIndexCached],\n navCurrent = navItems[navCurrentIndex];\n\n setAttrs(navPrev, {\n 'tabindex': '-1',\n 'aria-label': navStr + (navCurrentIndexCached + 1)\n });\n removeClass(navPrev, navActiveClass);\n\n setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navCurrent, 'tabindex');\n addClass(navCurrent, navActiveClass);\n\n navCurrentIndexCached = navCurrentIndex;\n }\n }\n }\n\n function getLowerCaseNodeName (el) {\n return el.nodeName.toLowerCase();\n }\n\n function isButton (el) {\n return getLowerCaseNodeName(el) === 'button';\n }\n\n function isAriaDisabled (el) {\n return el.getAttribute('aria-disabled') === 'true';\n }\n\n function disEnableElement (isButton, el, val) {\n if (isButton) {\n el.disabled = val;\n } else {\n el.setAttribute('aria-disabled', val.toString());\n }\n }\n\n // set 'disabled' to true on controls when reach the edges\n function updateControlsStatus () {\n if (!controls || rewind || loop) { return; }\n\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n disablePrev = (index <= indexMin) ? true : false,\n disableNext = (!rewind && index >= indexMax) ? true : false;\n\n if (disablePrev && !prevDisabled) {\n disEnableElement(prevIsButton, prevButton, true);\n }\n if (!disablePrev && prevDisabled) {\n disEnableElement(prevIsButton, prevButton, false);\n }\n if (disableNext && !nextDisabled) {\n disEnableElement(nextIsButton, nextButton, true);\n }\n if (!disableNext && nextDisabled) {\n disEnableElement(nextIsButton, nextButton, false);\n }\n }\n\n // set duration\n function resetDuration (el, str) {\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n }\n\n function getSliderWidth () {\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n }\n\n function getCenterGap (num) {\n if (num == null) { num = index; }\n\n var gap = edgePadding ? gutter : 0;\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n fixedWidth ? (viewport - fixedWidth) / 2 :\n (items - 1) / 2;\n }\n\n function getRightBoundary () {\n var gap = edgePadding ? gutter : 0,\n result = (viewport + gap) - getSliderWidth();\n\n if (center && !loop) {\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n }\n if (result > 0) { result = 0; }\n\n return result;\n }\n\n function getContainerTransformValue (num) {\n if (num == null) { num = index; }\n\n var val;\n if (horizontal && !autoWidth) {\n if (fixedWidth) {\n val = - (fixedWidth + gutter) * num;\n if (center) { val += getCenterGap(); }\n } else {\n var denominator = TRANSFORM ? slideCountNew : items;\n if (center) { num -= getCenterGap(); }\n val = - num * 100 / denominator;\n }\n } else {\n val = - slidePositions[num];\n if (center && autoWidth) {\n val += getCenterGap();\n }\n }\n\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n return val;\n }\n\n function doContainerTransformSilent (val) {\n resetDuration(container, '0s');\n doContainerTransform(val);\n }\n\n function doContainerTransform (val) {\n if (val == null) { val = getContainerTransformValue(); }\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\n }\n\n function animateSlide (number, classOut, classIn, isOut) {\n var l = number + items;\n if (!loop) { l = Math.min(l, slideCountNew); }\n\n for (var i = number; i < l; i++) {\n var item = slideItems[i];\n\n // set item positions\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n if (animateDelay && TRANSITIONDELAY) {\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n }\n removeClass(item, classOut);\n addClass(item, classIn);\n\n if (isOut) { slideItemsOut.push(item); }\n }\n }\n\n // make transfer after click/drag:\n // 1. change 'transform' property for mordern browsers\n // 2. change 'left' property for legacy browsers\n var transformCore = (function () {\n return carousel ?\n function () {\n resetDuration(container, '');\n if (TRANSITIONDURATION || !speed) {\n // for morden browsers with non-zero duration or\n // zero duration for all browsers\n doContainerTransform();\n // run fallback function manually\n // when duration is 0 / container is hidden\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n } else {\n // for old browser with non-zero duration\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n }\n\n if (!horizontal) { updateContentWrapperHeight(); }\n } :\n function () {\n slideItemsOut = [];\n\n var eve = {};\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n removeEvents(slideItems[indexCached], eve);\n addEvents(slideItems[index], eve);\n\n animateSlide(indexCached, animateIn, animateOut, true);\n animateSlide(index, animateNormal, animateIn);\n\n // run fallback function manually\n // when transition or animation not supported / duration is 0\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n };\n })();\n\n function render (e, sliderMoved) {\n if (updateIndexBeforeTransform) { updateIndex(); }\n\n // render when slider was moved (touch or drag) even though index may not change\n if (index !== indexCached || sliderMoved) {\n // events\n events.emit('indexChanged', info());\n events.emit('transitionStart', info());\n if (autoHeight) { doAutoHeight(); }\n\n // pause autoplay when click or keydown from user\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n running = true;\n transformCore();\n }\n }\n\n /*\n * Transfer prefixed properties to the same format\n * CSS: -Webkit-Transform => webkittransform\n * JS: WebkitTransform => webkittransform\n * @param {string} str - property\n *\n */\n function strTrans (str) {\n return str.toLowerCase().replace(/-/g, '');\n }\n\n // AFTER TRANSFORM\n // Things need to be done after a transfer:\n // 1. check index\n // 2. add classes to visible slide\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\n // 4. update nav status\n // 5. lazyload images\n // 6. update container height\n function onTransitionEnd (event) {\n // check running on gallery mode\n // make sure trantionend/animationend events run only once\n if (carousel || running) {\n events.emit('transitionEnd', info(event));\n\n if (!carousel && slideItemsOut.length > 0) {\n for (var i = 0; i < slideItemsOut.length; i++) {\n var item = slideItemsOut[i];\n // set item positions\n item.style.left = '';\n\n if (ANIMATIONDELAY && TRANSITIONDELAY) {\n item.style[ANIMATIONDELAY] = '';\n item.style[TRANSITIONDELAY] = '';\n }\n removeClass(item, animateOut);\n addClass(item, animateNormal);\n }\n }\n\n /* update slides, nav, controls after checking ...\n * => legacy browsers who don't support 'event'\n * have to check event first, otherwise event.target will cause an error\n * => or 'gallery' mode:\n * + event target is slide item\n * => or 'carousel' mode:\n * + event target is container,\n * + event.property is the same with transform attribute\n */\n if (!event ||\n !carousel && event.target.parentNode === container ||\n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n if (!updateIndexBeforeTransform) {\n var indexTem = index;\n updateIndex();\n if (index !== indexTem) {\n events.emit('indexChanged', info());\n\n doContainerTransformSilent();\n }\n }\n\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n running = false;\n indexCached = index;\n }\n }\n\n }\n\n // # ACTIONS\n function goTo (targetIndex, e) {\n if (freeze) { return; }\n\n // prev slideBy\n if (targetIndex === 'prev') {\n onControlsClick(e, -1);\n\n // next slideBy\n } else if (targetIndex === 'next') {\n onControlsClick(e, 1);\n\n // go to exact slide\n } else {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n var absIndex = getAbsIndex(),\n indexGap = 0;\n\n if (targetIndex === 'first') {\n indexGap = - absIndex;\n } else if (targetIndex === 'last') {\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n } else {\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n if (!isNaN(targetIndex)) {\n // from directly called goTo function\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n indexGap = targetIndex - absIndex;\n }\n }\n\n // gallery: make sure new page won't overlap with current page\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\n var factor = indexGap > 0 ? 1 : -1;\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n }\n\n index += indexGap;\n\n // make sure index is in range\n if (carousel && loop) {\n if (index < indexMin) { index += slideCount; }\n if (index > indexMax) { index -= slideCount; }\n }\n\n // if index is changed, start rendering\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n render(e);\n }\n\n }\n }\n\n // on controls click\n function onControlsClick (e, dir) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n var passEventObject;\n\n if (!dir) {\n e = getEvent(e);\n var target = getTarget(e);\n\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n var targetIn = [prevButton, nextButton].indexOf(target);\n if (targetIn >= 0) {\n passEventObject = true;\n dir = targetIn === 0 ? -1 : 1;\n }\n }\n\n if (rewind) {\n if (index === indexMin && dir === -1) {\n goTo('last', e);\n return;\n } else if (index === indexMax && dir === 1) {\n goTo('first', e);\n return;\n }\n }\n\n if (dir) {\n index += slideBy * dir;\n if (autoWidth) { index = Math.floor(index); }\n // pass e when click control buttons or keydown\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n }\n }\n\n // on nav click\n function onNavClick (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n e = getEvent(e);\n var target = getTarget(e), navIndex;\n\n // find the clicked nav item\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n if (hasAttr(target, 'data-nav')) {\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n goTo(targetIndex, e);\n\n if (navCurrentIndex === navIndex) {\n if (animating) { stopAutoplay(); }\n navClicked = -1; // reset navClicked\n }\n }\n }\n\n // autoplay functions\n function setAutoplayTimer () {\n autoplayTimer = setInterval(function () {\n onControlsClick(null, autoplayDirection);\n }, autoplayTimeout);\n\n animating = true;\n }\n\n function stopAutoplayTimer () {\n clearInterval(autoplayTimer);\n animating = false;\n }\n\n function updateAutoplayButton (action, txt) {\n setAttrs(autoplayButton, {'data-action': action});\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n }\n\n function startAutoplay () {\n setAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n }\n\n function stopAutoplay () {\n stopAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n }\n\n // programaitcally play/pause the slider\n function play () {\n if (autoplay && !animating) {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n function pause () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n }\n }\n\n function toggleAutoplay () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n } else {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n\n function onVisibilityChange () {\n if (doc.hidden) {\n if (animating) {\n stopAutoplayTimer();\n autoplayVisibilityPaused = true;\n }\n } else if (autoplayVisibilityPaused) {\n setAutoplayTimer();\n autoplayVisibilityPaused = false;\n }\n }\n\n function mouseoverPause () {\n if (animating) {\n stopAutoplayTimer();\n autoplayHoverPaused = true;\n }\n }\n\n function mouseoutRestart () {\n if (autoplayHoverPaused) {\n setAutoplayTimer();\n autoplayHoverPaused = false;\n }\n }\n\n // keydown events on document\n function onDocumentKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\n }\n }\n\n // on key control\n function onControlsKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (!prevButton.disabled) { onControlsClick(e, -1); }\n } else if (!nextButton.disabled) {\n onControlsClick(e, 1);\n }\n }\n }\n\n // set focus\n function setFocus (el) {\n el.focus();\n }\n\n // on key nav\n function onNavKeydown (e) {\n e = getEvent(e);\n var curElement = doc.activeElement;\n if (!hasAttr(curElement, 'data-nav')) { return; }\n\n // var code = e.keyCode,\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n navIndex = Number(getAttr(curElement, 'data-nav'));\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n } else if (keyIndex === 1) {\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n } else {\n navClicked = navIndex;\n goTo(navIndex, e);\n }\n }\n }\n\n function getEvent (e) {\n e = e || win.event;\n return isTouchEvent(e) ? e.changedTouches[0] : e;\n }\n function getTarget (e) {\n return e.target || win.event.srcElement;\n }\n\n function isTouchEvent (e) {\n return e.type.indexOf('touch') >= 0;\n }\n\n function preventDefaultBehavior (e) {\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n function getMoveDirectionExpected () {\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n }\n\n function onPanStart (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n if (autoplay && animating) { stopAutoplayTimer(); }\n\n panStart = true;\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n\n var $ = getEvent(e);\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n preventDefaultBehavior(e);\n }\n\n lastPosition.x = initPosition.x = $.clientX;\n lastPosition.y = initPosition.y = $.clientY;\n if (carousel) {\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n resetDuration(container, '0s');\n }\n }\n\n function onPanMove (e) {\n if (panStart) {\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n\n if (carousel) {\n if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n } else {\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) { preventScroll = true; }\n }\n\n if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\n e.preventDefault();\n }\n }\n }\n\n function panUpdate (e) {\n if (!moveDirectionExpected) {\n panStart = false;\n return;\n }\n caf(rafIndex);\n if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) {\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n try {\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n } catch(err) {}\n\n var x = translateInit,\n dist = getDist(lastPosition, initPosition);\n if (!horizontal || fixedWidth || autoWidth) {\n x += dist;\n x += 'px';\n } else {\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n x += percentageX;\n x += '%';\n }\n\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\n }\n }\n\n function onPanEnd (e) {\n if (panStart) {\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n if (carousel) { resetDuration(container, ''); }\n panStart = false;\n\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n var dist = getDist(lastPosition, initPosition);\n\n if (Math.abs(dist)) {\n // drag vs click\n if (!isTouchEvent(e)) {\n // prevent \"click\"\n var target = getTarget(e);\n addEvents(target, {'click': function preventClick (e) {\n preventDefaultBehavior(e);\n removeEvents(target, {'click': preventClick});\n }});\n }\n\n if (carousel) {\n rafIndex = raf(function() {\n if (horizontal && !autoWidth) {\n var indexMoved = - dist * items / (viewport + gutter);\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n index += indexMoved;\n } else {\n var moved = - (translateInit + dist);\n if (moved <= 0) {\n index = indexMin;\n } else if (moved >= slidePositions[slideCountNew - 1]) {\n index = indexMax;\n } else {\n var i = 0;\n while (i < slideCountNew && moved >= slidePositions[i]) {\n index = i;\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\n i++;\n }\n }\n }\n\n render(e, dist);\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n });\n } else {\n if (moveDirectionExpected) {\n onControlsClick(e, dist > 0 ? -1 : 1);\n }\n }\n }\n }\n\n // reset\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n if (swipeAngle) { moveDirectionExpected = '?'; }\n if (autoplay && !animating) { setAutoplayTimer(); }\n }\n\n // === RESIZE FUNCTIONS === //\n // (slidePositions, index, items) => vertical_conentWrapper.height\n function updateContentWrapperHeight () {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n }\n\n function getPages () {\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n return Math.min(Math.ceil(rough), slideCount);\n }\n\n /*\n * 1. update visible nav items list\n * 2. add \"hidden\" attributes to previous visible nav items\n * 3. remove \"hidden\" attrubutes to new visible nav items\n */\n function updateNavVisibility () {\n if (!nav || navAsThumbnails) { return; }\n\n if (pages !== pagesCached) {\n var min = pagesCached,\n max = pages,\n fn = showElement;\n\n if (pagesCached > pages) {\n min = pages;\n max = pagesCached;\n fn = hideElement;\n }\n\n while (min < max) {\n fn(navItems[min]);\n min++;\n }\n\n // cache pages\n pagesCached = pages;\n }\n }\n\n function info (e) {\n return {\n container: container,\n slideItems: slideItems,\n navContainer: navContainer,\n navItems: navItems,\n controlsContainer: controlsContainer,\n hasControls: hasControls,\n prevButton: prevButton,\n nextButton: nextButton,\n items: items,\n slideBy: slideBy,\n cloneCount: cloneCount,\n slideCount: slideCount,\n slideCountNew: slideCountNew,\n index: index,\n indexCached: indexCached,\n displayIndex: getCurrentSlide(),\n navCurrentIndex: navCurrentIndex,\n navCurrentIndexCached: navCurrentIndexCached,\n pages: pages,\n pagesCached: pagesCached,\n sheet: sheet,\n isOn: isOn,\n event: e || {},\n };\n }\n\n return {\n version: '2.9.4',\n getInfo: info,\n events: events,\n goTo: goTo,\n play: play,\n pause: pause,\n isOn: isOn,\n updateSliderHeight: updateInnerWrapperHeight,\n refresh: initSliderTransform,\n destroy: destroy,\n rebuild: function() {\n return tns(extend(options, optionsElements));\n }\n };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '
';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n if (window.matchMedia || window.msMatchMedia) {\n return true;\n }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}\n","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n var id = window.tnsId;\n window.tnsId = !id ? 1 : id + 1;\n \n return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media, nonce) {\n // Create the