{"version":3,"file":"bundle.js","mappings":"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","sources":["webpack://healthvalley.website/./src/frontend/scripts/custom/index.js","webpack://healthvalley.website/./src/frontend/scripts/events/index.js","webpack://healthvalley.website/./src/frontend/scripts/filters/index.js","webpack://healthvalley.website/./src/frontend/scripts/header/counters.js","webpack://healthvalley.website/./src/frontend/scripts/why/index.js","webpack://healthvalley.website/./node_modules/vanilla-cookieconsent/src/cookieconsent.js","webpack://healthvalley.website/webpack/bootstrap","webpack://healthvalley.website/./src/frontend/scripts/navigation/index.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/raf.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/caf.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/extend.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/getBody.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/docElement.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/forEach.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/hasClass.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/addClass.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/removeClass.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/getAttr.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/hideElement.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/showElement.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/isVisible.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/addEvents.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/events.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/tiny-slider.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/calc.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/toDegree.js","webpack://healthvalley.website/./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack://healthvalley.website/./src/frontend/scripts/header/slider.js","webpack://healthvalley.website/./src/frontend/scripts/slider/index.js","webpack://healthvalley.website/./src/frontend/scripts/cookie/index.js","webpack://healthvalley.website/./src/frontend/scripts/index.js"],"sourcesContent":["//used on searchpage\nfunction generalSearch() {\n const element = document.getElementById(\"js-btn-searchgeneral\");\n if (element) {\n element.onclick = function () {\n let submitUrl = document.getElementById(\"js-btn-searchgeneral\").getAttribute('data-submiturl').toLowerCase();\n const value = document.getElementById(\"js-inp-searchgeneral\").value;\n if (value && submitUrl)\n {\n submitUrl = submitUrl + '?q=' + value;\n window.location.href = submitUrl\n }\n };\n }\n \n const inputSearchMain = document.getElementById(\"js-inp-searchgeneral\");\n if (inputSearchMain) {\n inputSearchMain.addEventListener(\"keyup\", function(e) {\n if (e.key === \"Enter\") {\n e.preventDefault();\n document.getElementById(\"js-btn-searchgeneral\").click();\n }\n });\n }\n if (document.getElementById(\"js-inp-searchgeneral\")) {\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n const q = urlParams.get('q');\n if (q) {\n document.getElementById(\"js-inp-searchgeneral\").value = q;\n }\n }\n}\n\n//used in nav-header\nfunction headerNavSearch() {\n const inputSearchHeader = document.getElementById(\"search\");\n if (inputSearchHeader) {\n inputSearchHeader.addEventListener(\"keyup\", function(e) {\n if (e.key === \"Enter\") {\n e.preventDefault();\n document.getElementById(\"js-navigation__search-btn\").click();\n }\n });\n }\n}\n\n// used on Partner page\nfunction showMorePublications(btnId, listClass) {\n const btnShowMore = document.getElementById(btnId);\n if (btnShowMore) {\n btnShowMore.addEventListener('click', function(e) {\n const list = document.getElementsByClassName(listClass)[0].getElementsByClassName('related__list')[0];\n\n if (list) {\n const items = list.getElementsByTagName('li');\n for (let index = 5; index < items.length; index++) {\n const element = items[index];\n element.classList.toggle('related__hidden')\n }\n btnShowMore.innerHTML = btnShowMore.innerHTML.trim().replace(/ /g, '') == 'Toon meer' ? 'Toon minder' : 'Toon meer';\n }\n });\n }\n}\n\ngeneralSearch();\n//headerNavSearch();\nshowMorePublications('showMorePublications', 'related__news');\nshowMorePublications('showMoreEvents', 'related__events');","// Scroll to element on event page\nfunction goToFormElement() {\n const element = document.getElementById('eventSignInForm'),\n btn = document.getElementById('js-eventformbutton');\n if (element && btn){\n btn.addEventListener('click', () => {\n window.scrollTo(0, (element.getBoundingClientRect().top + window.scrollY) - (window.innerHeight / 5));\n });\n }\n}\n\ngoToFormElement();","function toggleDropdownFilters() {\n const dropdownBtns = document.querySelectorAll('.js-filters-dropdown button');\n\n if (dropdownBtns) {\n for (let i = 0; i < dropdownBtns.length; i++) {\n const buttons = dropdownBtns[i];\n\n buttons.addEventListener('click', (e) => {\n const target = e.target,\n dropdown = target.nextElementSibling;\n\n if (dropdown.classList.contains('is-block')) {\n dropdown.classList.remove('fade-in');\n target.setAttribute('aria-expanded', 'false');\n setTimeout(() => {\n dropdown.classList.remove('is-block');\n }, 251);\n } else {\n closeAllDropdownFilters();\n dropdown.classList.add('is-block');\n target.setAttribute('aria-expanded', 'true');\n setTimeout(() => {\n dropdown.classList.add('fade-in');\n }, 1);\n }\n });\n }\n }\n}\n\nfunction closeDropdownFiltersOnChange() {\n const checkboxes = document.querySelectorAll('.js-filters-dropdown input[type=checkbox]');\n\n if (checkboxes) {\n for (i = 0; i < checkboxes.length; i++) {\n const allBoxes = checkboxes[i];\n\n allBoxes.addEventListener('change', (e) => {\n const target = e.target;\n\n if (target.checked) {\n setTimeout(() => {\n closeAllDropdownFilters();\n }, 150);\n }\n });\n }\n }\n}\n\nfunction closeAllDropdownFilters() {\n const dropdownBtns = document.querySelectorAll('.js-filters-dropdown button');\n\n if (dropdownBtns) {\n for (let i = 0; i < dropdownBtns.length; i++) {\n const target = dropdownBtns[i],\n dropdown = target.nextElementSibling;\n\n dropdown.classList.remove('fade-in');\n target.setAttribute('aria-expanded', 'false');\n dropdown.classList.remove('is-block');\n }\n }\n}\n\nfunction renderTypeFilter() {\n const jsTypeList = document.getElementById('js-type-list');\n if (jsTypeList !== undefined && jsTypeList !== null) {\n const inputs = jsTypeList.getElementsByTagName('input');\n for (var i = 0; i < inputs.length; i++) {\n inputs[i].addEventListener('click', event => {\n var eventValue = event.target.id;\n if (event.target.checked === true) {\n if (window.location.search !== '') {\n if (window.location.search.indexOf('type=') > -1) {\n var currentValue = window.location.search.substring(window.location.search.indexOf('type=') + 5);\n var newSearch = window.location.search.replace(currentValue, eventValue);\n window.location = window.location.origin + window.location.pathname + newSearch;\n } else {\n window.location = window.location.origin + window.location.pathname + window.location.search + '&type=' + eventValue;\n }\n } else {\n window.location = window.location.href + '?type=' + eventValue;\n }\n } else {\n removeFilter('type', eventValue);\n }\n });\n }\n }\n}\n\nfunction renderTagFilter() {\n const jsTagsList = document.getElementById('js-tags-list');\n if (jsTagsList !== undefined && jsTagsList !== null) {\n const inputs = jsTagsList.getElementsByTagName('input');\n for (var i = 0; i < inputs.length; i++) {\n inputs[i].addEventListener('click', event => {\n var eventValue = encodeURIComponent(event.target.id);\n if (event.target.checked === true) {\n if (window.location.search !== '') {\n var newSearch = '';\n if (window.location.search.indexOf('tag=') > -1) {\n newSearch = window.location.search + ',' + eventValue;\n } else {\n newSearch = window.location.search + '&tag=' + eventValue;\n }\n window.location = window.location.origin + window.location.pathname + newSearch;\n } else {\n window.location = window.location.href + '?tag=' + eventValue;\n }\n } else {\n removeFilter('tag', eventValue);\n }\n });\n }\n }\n}\n\nfunction renderPeriodFilter() {\n const jsPeriodList = document.getElementById('js-period-list');\n if (jsPeriodList !== undefined && jsPeriodList !== null) {\n const inputs = jsPeriodList.getElementsByTagName('input');\n for (var i = 0; i < inputs.length; i++) {\n inputs[i].addEventListener('click', event => {\n var eventValue = encodeURIComponent(event.target.id);\n if (event.target.checked === true) {\n if (window.location.search !== '') {\n var newSearch = '';\n if (window.location.search.indexOf('period=') > -1) {\n newSearch = window.location.search + ',' + eventValue;\n } else {\n newSearch = window.location.search + '&period=' + eventValue;\n }\n window.location = window.location.origin + window.location.pathname + newSearch;\n } else {\n window.location = window.location.href + '?period=' + eventValue;\n }\n } else {\n removeFilter('period', eventValue);\n }\n });\n }\n }\n}\n\nfunction removeFilter(type, value) {\n var currentValue = '';\n var encodedValue = encodeURIComponent(value);\n var allQueryStrings = window.location.search.substring(1).split('&');\n for (let index = 0; index < allQueryStrings.length; index++) {\n const element = allQueryStrings[index];\n if (element.indexOf(type) > -1) {\n currentValue = element.substring(element.indexOf(type + '=') + (type.length + 1));\n }\n }\n\n var newSearch = '';\n\n if (currentValue.indexOf(',') > -1) {\n newSearch = window.location.search.replace(encodedValue, '');\n } else {\n newSearch = window.location.search.replace(type + '=' + currentValue, '');\n }\n\n if (newSearch.endsWith(',')) {\n newSearch = newSearch.replace(',', '');\n }\n\n if (newSearch.indexOf('=,') > -1) {\n newSearch = newSearch.replace('=,', '=');\n }\n\n newSearch = newSearch.replace(',,', ',');\n\n var newUrl = window.location.origin + window.location.pathname + newSearch;\n if (newUrl.endsWith('?')) {\n newUrl = newUrl.replace('?', '');\n }\n\n if (newUrl.endsWith('&')) {\n newUrl = newUrl.replace('&', '');\n }\n\n if (newUrl.indexOf('?&') > -1) {\n newUrl = newUrl.replace('?&', '?');\n }\n\n if (newUrl.indexOf('&&') > -1) {\n newUrl = newUrl.replace('&&', '&');\n }\n window.location = newUrl;\n}\n\nfunction removeFilterButtonClick() {\n const btnsList = document.getElementById('js-remove-filter-buttons-list');\n\n if (btnsList !== undefined && btnsList !== null) {\n const btns = btnsList.getElementsByTagName('button');\n\n for (var i = 0; i < btns.length; i++) {\n btns[i].addEventListener('click', event => {\n var filterValue = encodeURIComponent(event.target.getAttribute('data-filtervalue'));\n var filterType = event.target.getAttribute('data-filtertype');\n removeFilter(filterType, filterValue);\n });\n }\n }\n}\n\nfunction clickOutsideCloseFilters() {\n const dropdownBtns = document.querySelectorAll('.js-filters-dropdown');\n\n if (dropdownBtns.length > 0) {\n document.addEventListener('click', (e) => {\n let target = e.target;\n\n for (let i = 0; i < dropdownBtns.length; i++) {\n if (target != dropdownBtns[i] && target.parentNode != dropdownBtns[i]) {\n let lastChild = dropdownBtns[i].lastElementChild,\n firstChild = dropdownBtns[i].firstElementChild;\n lastChild.classList.remove('fade-in');\n firstChild.setAttribute('aria-expanded', 'false');\n lastChild.classList.remove('is-block');\n }\n }\n });\n }\n}\n\ntoggleDropdownFilters();\ncloseDropdownFiltersOnChange();\nclickOutsideCloseFilters();\nrenderTypeFilter();\nrenderTagFilter();\nrenderPeriodFilter();\nremoveFilterButtonClick();\n","function headerCounters() {\n // Source: https://www.studytonight.com/post/how-to-build-an-animated-counter-with-javascript\n const counters = document.querySelectorAll('.js-count');\n\n // Change variable to alter how many steps there are\n // The lower the stepDivider, the lower the amount of steps (e.g.: 60/2 = 30, so 2 steps of 30, 60/30 = 2, so 30 steps of two)\n const stepDivider = 100;\n\n counters.forEach((counter) => {\n const updateCount = () => {\n const target = parseInt(counter.getAttribute('js-data-target'));\n const count = parseInt(counter.innerText);\n const increment = Math.ceil(target / stepDivider);\n\n if (count < target) {\n counter.innerText = count + increment;\n setTimeout(updateCount, 35); // Determine how fast the counter goes up\n } else {\n counter.innerText = target;\n }\n };\n updateCount();\n });\n}\n\nheaderCounters();\n","function videoSwitch() {\n // look for all elements with class and add onclick event\n const elements = document.getElementsByClassName('js-btn-video-home');\n for (let i = 0; i < elements.length; i++) {\n elements[i].addEventListener('click', function() {\n switchToVideo(this);\n }, false);\n }\n // replace clicked object with iframe video\n function switchToVideo(e) {\n e.outerHTML = '';\n }\n}\n\nfunction whySearch() {\n const element = document.getElementById(\"js-why__search-btn\");\n\n if(element) {\n element.onclick = function () {\n let submitUrl = document.getElementById(\"js-why__search-btn\").getAttribute('data-submiturl').toLowerCase();\n const value = document.getElementById(\"searchPartner\").value;\n\n if (value && submitUrl) {\n submitUrl = submitUrl + value;\n window.location.href = submitUrl\n }\n };\n }\n\n const inputSearchWhy = document.getElementById(\"searchPartner\");\n if (inputSearchWhy) {\n inputSearchWhy.addEventListener(\"keydown\", function(e) {\n if (e.key === \"Enter\") {\n e.preventDefault();\n let submitUrl = document.getElementById(\"js-why__search-btn\").getAttribute('data-submiturl').toLowerCase();\n const value = document.getElementById(\"searchPartner\").value;\n if (value && submitUrl) {\n submitUrl = submitUrl + value;\n window.location.href = submitUrl;\n }\n }\n });\n } \n}\n\nvideoSwitch();\nwhySearch();\n","/*!\n * CookieConsent v2.6.2\n * https://www.github.com/orestbida/cookieconsent\n * Author Orest Bida\n * Released under the MIT License\n */\n(function(){\n 'use strict';\n /**\n * @param {HTMLElement} [root] - [optional] element where the cookieconsent will be appended\n * @returns {Object} cookieconsent object with API\n */\n var CookieConsent = function(root){\n\n /**\n * CHANGE THIS FLAG FALSE TO DISABLE console.log()\n */\n var ENABLE_LOGS = true;\n\n var _config = {\n current_lang: 'en',\n autorun: true, // run as soon as loaded\n cookie_name: 'cc_cookie',\n cookie_expiration: 182, // default: 6 months (in days)\n cookie_domain: window.location.hostname, // default: current domain\n cookie_path: '/',\n cookie_same_site: 'Lax',\n use_rfc_cookie: false,\n autoclear_cookies: true,\n revision: 0,\n script_selector: 'data-cookiecategory'\n };\n\n /**\n * Object which holds the main methods/API (.show, .run, ...)\n */\n var _cookieconsent = {};\n\n /**\n * Internal state variables\n */\n var saved_cookie_content = {};\n var consent_modal_exists = false;\n var cookie_consent_accepted = false;\n var consent_modal_visible = false;\n var settings_modal_visible = false;\n var clicked_inside_modal = false;\n var current_modal_focusable;\n var all_table_headers, all_blocks, onAccept, onChange;\n var valid_revision=true, revision_enabled=false, data=null;\n\n // Don't run plugin (to avoid indexing its text content) if bot detected\n var is_bot = false;\n\n /**\n * Save reference to the last focused element on the page\n * (used later to restore focus when both modals are closed)\n */\n var last_elem_before_modal;\n var last_consent_modal_btn_focus;\n\n /**\n * Both of the arrays below have the same structure:\n * [0] => holds reference to the FIRST focusable element inside modal\n * [1] => holds reference to the LAST focusable element inside modal\n */\n var consent_modal_focusable = [];\n var settings_modal_focusable = [];\n\n /**\n * Keep track of enabled/disabled categories\n * @type {boolean[]}\n */\n var toggle_states = [];\n\n /**\n * Stores all available categories\n * @type {string[]}\n */\n var toggle_categories = [];\n\n /**\n * Keep track of readonly toggles\n * @type {boolean[]}\n */\n var toggle_readonly = [];\n\n /**\n * Pointers to main dom elements (to avoid retrieving them later using document.getElementById)\n */\n var html_dom = document.documentElement;\n var main_container;\n var consent_modal;\n var settings_container, settings_inner;\n\n /**\n * Update config settings\n * @param {Object} conf_params\n */\n var _setConfig = function(conf_params){\n _log(\"CookieConsent [CONFIG]: received_config_settings \", conf_params);\n\n if(typeof conf_params['cookie_expiration'] === \"number\")\n _config.cookie_expiration = conf_params['cookie_expiration'];\n\n if(typeof conf_params['autorun'] === \"boolean\")\n _config.autorun = conf_params['autorun'];\n\n if(typeof conf_params['cookie_domain'] === \"string\")\n _config.cookie_domain = conf_params['cookie_domain'];\n\n if(typeof conf_params['cookie_same_site'] === \"string\")\n _config.cookie_same_site = conf_params['cookie_same_site'];\n\n if(typeof conf_params['cookie_path'] === \"string\")\n _config.cookie_path = conf_params['cookie_path'];\n\n if(typeof conf_params['cookie_name'] === \"string\")\n _config.cookie_name = conf_params['cookie_name'];\n\n if(typeof conf_params['onAccept'] === \"function\")\n onAccept = conf_params['onAccept'];\n\n if(typeof conf_params['onChange'] === \"function\")\n onChange = conf_params['onChange'];\n\n if(typeof conf_params['revision'] === \"number\"){\n conf_params['revision'] > -1 && (_config.revision = conf_params['revision']);\n revision_enabled = true;\n }\n\n if(conf_params['autoclear_cookies'] === true)\n _config.autoclear_cookies = true;\n\n if(conf_params['use_rfc_cookie'] === true)\n _config.use_rfc_cookie = true;\n\n if(conf_params['hide_from_bots'] === true){\n is_bot = navigator &&\n ((navigator.userAgent && /bot|crawl|spider|slurp|teoma/i.test(navigator.userAgent)) || navigator.webdriver);\n }\n\n _config.page_scripts = conf_params['page_scripts'] === true;\n _config.page_scripts_order = conf_params['page_scripts_order'] !== false;\n\n if(conf_params['auto_language'] === true){\n _config.current_lang = _getValidatedLanguage(_getBrowserLang(), conf_params.languages);\n }else{\n if(typeof conf_params['current_lang'] === \"string\")\n _config.current_lang = _getValidatedLanguage(conf_params['current_lang'], conf_params.languages);\n }\n\n _log(\"CookieConsent [LANG]: setting current_lang = '\" + _config.current_lang + \"'\");\n }\n\n /**\n * Search for all occurrences in the current page and add an onClick listener :\n * when clicked => open settings modal\n */\n var _addCookieSettingsButtonListener = function(){\n var all_links = document.querySelectorAll('a[data-cc=\"c-settings\"], button[data-cc=\"c-settings\"]');\n for(var x=0; x 0){\n if(Object.prototype.hasOwnProperty.call(all_languages, _config.current_lang)){\n return _config.current_lang ;\n }else{\n return _getKeys(all_languages)[0];\n }\n }\n }\n\n /**\n * Save reference to first and last focusable elements inside each modal\n * to prevent losing focus while navigating with TAB\n */\n var _getModalFocusableData = function(){\n\n /**\n * Note: any of the below focusable elements, which has the attribute tabindex=\"-1\" AND is either\n * the first or last element of the modal, won't receive focus during \"open/close\" modal\n */\n var allowed_focusable_types = ['[href]', 'button', 'input', 'details', '[tabindex=\"0\"]'];\n\n function _getAllFocusableElements(modal, _array){\n var focus_later=false, focus_first=false;\n\n // ie might throw exception due to complex unsupported selector => a:not([tabindex=\"-1\"])\n try{\n var focusable_elems = modal.querySelectorAll(allowed_focusable_types.join(':not([tabindex=\"-1\"]), '));\n var attr, len=focusable_elems.length, i=0;\n\n while(i < len){\n\n attr = focusable_elems[i].getAttribute('data-focus');\n\n if(!focus_first && attr === \"1\"){\n focus_first = focusable_elems[i];\n\n }else if(attr === \"0\"){\n focus_later = focusable_elems[i];\n if(!focus_first && focusable_elems[i+1].getAttribute('data-focus') !== \"0\"){\n focus_first = focusable_elems[i+1];\n }\n }\n\n i++;\n }\n\n }catch(e){\n return modal.querySelectorAll(allowed_focusable_types.join(', '));\n }\n\n /**\n * Save first and last elements (used to lock/trap focus inside modal)\n */\n _array[0] = focusable_elems[0];\n _array[1] = focusable_elems[focusable_elems.length - 1];\n _array[2] = focus_later;\n _array[3] = focus_first;\n }\n\n /**\n * Get settings modal'S all focusable elements\n * Save first and last elements (used to lock/trap focus inside modal)\n */\n _getAllFocusableElements(settings_inner, settings_modal_focusable);\n\n /**\n * If consent modal exists, do the same\n */\n if(consent_modal_exists){\n _getAllFocusableElements(consent_modal, consent_modal_focusable);\n }\n }\n\n var _conf_params, _createConsentModal, revision_message=\"\", consent_text;\n\n /**\n * Generate cookie consent html based on config settings\n * @param {boolean} never_accepted - used to know whether to create both modals or not\n * @param {Object} conf_params - user configuration parameters\n */\n var _createCookieConsentHTML = function(never_accepted, conf_params){\n\n // Create main container which holds both consent modal & settings modal\n main_container = _createNode('div');\n main_container.id = 'cc--main';\n\n // Fix layout flash\n main_container.style.position = \"fixed\";\n main_container.style.zIndex = \"1000000\";\n main_container.innerHTML = '
'\n var all_modals_container = main_container.children[0];\n\n // Get current language\n var lang = _config.current_lang;\n\n // Feature detection :=> avoid IE exception since .textContent is not always supported\n var innerText = (typeof html_dom.textContent === 'string' ? 'textContent' : 'innerText');\n\n _conf_params = conf_params;\n _createConsentModal = function(conf_params){\n\n if(conf_params['force_consent'] === true){\n _addClass(html_dom, 'force--consent');\n }\n\n var description = conf_params.languages[lang]['consent_modal']['description'];\n\n if(revision_enabled){\n if(!valid_revision){\n description = description.replace(\"{{revision_message}}\", revision_message || conf_params.languages[lang]['consent_modal']['revision_message'] || \"\");\n }else{\n description = description.replace(\"{{revision_message}}\", \"\");\n }\n }\n\n if(consent_modal){\n consent_text.innerHTML = description;\n return;\n }\n\n consent_modal = _createNode('div');\n var consent_modal_inner = _createNode('div');\n var consent_modal_inner_inner = _createNode('div');\n var consent_title = _createNode('div');\n consent_text = _createNode('div');\n var consent_buttons = _createNode('div');\n var consent_primary_btn = _createNode('button');\n var consent_secondary_btn = _createNode('button');\n var overlay = _createNode('div');\n\n consent_modal.id = 'cm';\n consent_modal_inner.id = 'c-inr';\n consent_modal_inner_inner.id = 'c-inr-i';\n consent_title.id = 'c-ttl';\n consent_text.id = 'c-txt';\n consent_buttons.id = \"c-bns\";\n consent_primary_btn.id = 'c-p-bn';\n consent_secondary_btn.id = 'c-s-bn';\n overlay.id = 'cm-ov';\n consent_primary_btn.className = \"c-bn\";\n consent_secondary_btn.className = \"c-bn c_link\";\n\n consent_title.setAttribute('role', 'heading');\n consent_title.setAttribute('aria-level', '2');\n consent_modal.setAttribute('role', 'dialog');\n consent_modal.setAttribute('aria-modal', 'true');\n consent_modal.setAttribute('aria-hidden', 'false');\n consent_modal.setAttribute('aria-labelledby', 'c-ttl');\n consent_modal.setAttribute('aria-describedby', 'c-txt');\n\n /**\n * Make modal by default hidden to prevent weird page jumps/flashes (shown only once css is loaded)\n */\n consent_modal.style.visibility = overlay.style.visibility = \"hidden\";\n overlay.style.opacity = 0;\n\n // Use insertAdjacentHTML instead of innerHTML\n consent_title.insertAdjacentHTML('beforeend', conf_params.languages[lang]['consent_modal']['title']);\n\n consent_text.insertAdjacentHTML('beforeend', description);\n\n consent_primary_btn[innerText] = conf_params.languages[lang]['consent_modal']['primary_btn']['text'];\n consent_secondary_btn[innerText] = conf_params.languages[lang]['consent_modal']['secondary_btn']['text'];\n\n var accept_type; // accept current selection\n\n if(conf_params.languages[lang]['consent_modal']['primary_btn']['role'] === 'accept_all'){\n accept_type = 'all'; // accept all\n }\n\n _addEvent(consent_primary_btn, \"click\", function(){\n _cookieconsent.hide();\n _log(\"CookieConsent [ACCEPT]: cookie_consent was accepted!\");\n _cookieconsent.accept(accept_type);\n });\n\n if(conf_params.languages[lang]['consent_modal']['secondary_btn']['role'] === 'accept_necessary'){\n _addEvent(consent_secondary_btn, 'click', function(){\n _cookieconsent.hide();\n _cookieconsent.accept([]); // accept necessary only\n });\n }else{\n _addEvent(consent_secondary_btn, 'click', function(){\n _cookieconsent.showSettings(0);\n });\n }\n\n consent_modal_inner_inner.appendChild(consent_title);\n consent_modal_inner_inner.appendChild(consent_text);\n consent_buttons.appendChild(consent_primary_btn);\n consent_buttons.appendChild(consent_secondary_btn);\n consent_modal_inner.appendChild(consent_modal_inner_inner);\n consent_modal_inner.appendChild(consent_buttons);\n consent_modal.appendChild(consent_modal_inner);\n\n // Append consent modal to main container\n all_modals_container.appendChild(consent_modal);\n all_modals_container.appendChild(overlay);\n\n consent_modal_exists = true;\n }\n\n // Create consent modal\n if(!never_accepted) _createConsentModal(conf_params);\n\n /**\n * Create all consent_modal elements\n */\n settings_container = _createNode('div');\n var settings_container_valign = _createNode('div');\n var settings = _createNode('div');\n var settings_container_inner = _createNode('div');\n settings_inner = _createNode('div');\n var settings_title = _createNode('div');\n var settings_header = _createNode('div');\n var settings_close_btn = _createNode('button');\n var settings_close_btn_container = _createNode('div');\n var settings_blocks = _createNode('div');\n var overlay = _createNode('div');\n\n /**\n * Set ids\n */\n settings_container.id = 's-cnt';\n settings_container_valign.id = \"c-vln\";\n settings_container_inner.id = \"c-s-in\";\n settings.id = \"cs\";\n settings_title.id = 's-ttl';\n settings_inner.id = 's-inr';\n settings_header.id = \"s-hdr\";\n settings_blocks.id = 's-bl';\n settings_close_btn.id = 's-c-bn';\n overlay.id = 'cs-ov';\n settings_close_btn_container.id = 's-c-bnc';\n settings_close_btn.className = 'c-bn';\n\n settings_close_btn.setAttribute('aria-label', conf_params.languages[lang]['settings_modal']['close_btn_label'] || 'Close');\n settings_container.setAttribute('role', 'dialog');\n settings_container.setAttribute('aria-modal', 'true');\n settings_container.setAttribute('aria-hidden', 'true');\n settings_container.setAttribute('aria-labelledby', 's-ttl');\n settings_title.setAttribute('role', 'heading');\n settings_container.style.visibility = overlay.style.visibility = \"hidden\";\n overlay.style.opacity = 0;\n\n settings_close_btn_container.appendChild(settings_close_btn);\n\n // If 'esc' key is pressed inside settings_container div => hide settings\n _addEvent(settings_container_valign, 'keydown', function(evt){\n evt = evt || window.event;\n if (evt.keyCode === 27) {\n _cookieconsent.hideSettings(0);\n }\n }, true);\n\n _addEvent(settings_close_btn, 'click', function(){\n _cookieconsent.hideSettings(0);\n });\n\n all_blocks = conf_params.languages[_config.current_lang]['settings_modal']['blocks'];\n all_table_headers = conf_params.languages[_config.current_lang]['settings_modal']['cookie_table_headers'];\n\n var n_blocks = all_blocks.length;\n\n // Set settings modal title\n settings_title.insertAdjacentHTML('beforeend', conf_params.languages[_config.current_lang]['settings_modal']['title']);\n\n // Create settings modal content (blocks)\n for(var i=0; i generate toggles with the states defined in the config. object\n * Otherwise, retrieve values from saved cookie\n */\n if(never_accepted){\n if(_inArray(saved_cookie_content['level'], cookie_category) > -1){\n block_switch.checked = true;\n toggle_states.push(true);\n }else{\n toggle_states.push(false);\n }\n }else if(all_blocks[i]['toggle']['enabled']){\n block_switch.checked = true;\n toggle_states.push(true);\n }else{\n toggle_states.push(false);\n }\n\n toggle_categories.push(cookie_category);\n\n /**\n * Set toggle as readonly if true (disable checkbox)\n */\n if(all_blocks[i]['toggle']['readonly']){\n block_switch.disabled = true;\n _addClass(block_switch_span, 'c-ro');\n toggle_readonly.push(true);\n }else{\n toggle_readonly.push(false);\n }\n\n _addClass(block_table_container, 'b-acc');\n _addClass(block_title_container, 'b-bn');\n _addClass(block_section, 'b-ex');\n\n block_table_container.id = accordion_id;\n block_table_container.setAttribute('aria-hidden', 'true');\n\n block_switch_label.appendChild(block_switch);\n block_switch_label.appendChild(block_switch_span);\n block_switch_label.appendChild(label_text_span);\n block_title_container.appendChild(block_switch_label);\n\n /**\n * On button click handle the following :=> aria-expanded, aria-hidden and act class for current block\n */\n (function(accordion, block_section, btn){\n _addEvent(block_title_btn, 'click', function(){\n if(!_hasClass(block_section, 'act')){\n _addClass(block_section, 'act');\n btn.setAttribute('aria-expanded', 'true');\n accordion.setAttribute('aria-hidden', 'false');\n }else{\n _removeClass(block_section, 'act');\n btn.setAttribute('aria-expanded', 'false');\n accordion.setAttribute('aria-hidden', 'true');\n }\n }, false);\n })(block_table_container, block_section, block_title_btn);\n\n }else{\n /**\n * If block is not a button (no toggle defined),\n * create a simple div instead\n */\n var block_title = _createNode('div');\n block_title.className = 'b-tl';\n block_title.setAttribute('role', 'heading');\n block_title.setAttribute('aria-level', '3');\n block_title.insertAdjacentHTML('beforeend', all_blocks[i]['title']);\n block_title_container.appendChild(block_title);\n }\n\n block_section.appendChild(block_title_container);\n block_table_container.appendChild(block_desc);\n\n var remove_cookie_tables = conf_params['remove_cookie_tables'] === true;\n\n // if cookie table found, generate table for this block\n if(!remove_cookie_tables && typeof all_blocks[i]['cookie_table'] !== 'undefined'){\n var tr_tmp_fragment = document.createDocumentFragment();\n\n /**\n * Use custom table headers\n */\n for(var p=0; p 0){\n\n for(var i=0; i delete all cookies which are unused (based on selected preferences)\n */\n if(_config.autoclear_cookies && cookie_consent_accepted && changedSettings.length > 0){\n\n // Get number of blocks\n var len = all_blocks.length;\n var count = -1;\n\n // Retrieve all cookies\n var all_cookies_array = _getCookie('', 'all');\n\n // delete cookies on 'www.domain.com' and '.www.domain.com' (can also be without www)\n var domains = [_config.cookie_domain, '.'+_config.cookie_domain];\n\n // if domain has www, delete cookies also for 'domain.com' and '.domain.com'\n if(_config.cookie_domain.slice(0, 4) === 'www.'){\n var non_www_domain = _config.cookie_domain.substr(4); // remove first 4 chars (www.)\n domains.push(non_www_domain);\n domains.push('.' + non_www_domain);\n }\n\n // For each block\n for(var jk=0; jk ~faster value retrieval)\n var curr_block = all_blocks[jk];\n\n // If current block has a toggle for opt in/out\n if(Object.prototype.hasOwnProperty.call(curr_block, \"toggle\")){\n\n // if current block has a cookie table, an off toggle,\n // and its preferences were just changed => delete cookies\n if(\n !toggle_states[++count] &&\n Object.prototype.hasOwnProperty.call(curr_block, \"cookie_table\") &&\n _inArray(changedSettings, curr_block['toggle']['value']) > -1\n ){\n var curr_cookie_table = curr_block['cookie_table'];\n\n // Get first property name\n var ckey = _getKeys(all_table_headers[0])[0];\n\n // Get number of cookies defined in cookie_table\n var clen = curr_cookie_table.length;\n\n // set \"must_reload\" to true if reload=on_disable\n if(curr_block['toggle']['reload'] === 'on_disable') must_reload = true;\n\n // for each row defined in the cookie table\n for(var hk=0; hk filter cookie array\n if(is_regex){\n for(var n=0; n -1) found_cookies.push(all_cookies_array[found_index]);\n }\n\n _log(\"CookieConsent [AUTOCLEAR]: search cookie: '\" + curr_cookie_name + \"', found:\", found_cookies);\n\n // If cookie exists -> delete it\n if(found_cookies.length > 0){\n _eraseCookies(found_cookies, curr_cookie_path, domains);\n curr_block['toggle']['reload'] === 'on_clear' && (must_reload = true);\n }\n }\n }\n }\n }\n }\n }\n\n saved_cookie_content = {\n \"level\": accepted_categories,\n \"revision\": _config.revision,\n \"data\": data,\n \"rfc_cookie\": _config.use_rfc_cookie\n }\n\n // save cookie with preferences 'level' (only if never accepted or settings were updated)\n if(!cookie_consent_accepted || changedSettings.length > 0 || !valid_revision){\n valid_revision = true;\n _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n _manageExistingScripts();\n }\n\n if(typeof onAccept === \"function\" && !cookie_consent_accepted){\n cookie_consent_accepted = true;\n return onAccept(saved_cookie_content);\n }\n\n // fire onChange only if settings were changed\n if(typeof onChange === \"function\" && changedSettings.length > 0){\n onChange(saved_cookie_content, changedSettings);\n }\n\n /**\n * reload page if needed\n */\n if(must_reload){\n window.location.reload();\n }\n }\n\n /**\n * Function to run after css load\n * @callback cssLoaded\n */\n\n /**\n * Load style via ajax in background (and then show modal)\n * @param {string} css_path\n * @param {cssLoaded} callback\n */\n var _loadCSS = function(css_path, callback){\n\n // Enable if given path is string and non empty\n var enable = typeof css_path === 'string' && css_path !== \"\";\n\n if(enable && !document.getElementById('cc--style')){\n\n // Create style tag\n var style = _createNode('style');\n\n // ad an id so that in SPA apps (react-like) the style doesn't get loaded multiple times when plugin is called\n style.id = 'cc--style';\n\n var xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function() {\n if(this.readyState === 4 && this.status === 200){\n\n // Necessary for 2 && (browser_lang = browser_lang[0]+browser_lang[1]);\n _log(\"CookieConsent [LANG]: detected_browser_lang = '\"+ browser_lang + \"'\");\n return browser_lang.toLowerCase()\n }\n\n /**\n * Trap focus inside modal and focus the first\n * focusable element of current active modal\n */\n var _handleFocusTrap = function(){\n var tabbedOutsideDiv = false;\n var tabbedInsideModal = false;\n\n _addEvent(document, 'keydown', function(e){\n e = e || window.event;\n\n // If is tab key => ok\n if(e.key !== 'Tab') return;\n\n // If there is any modal to focus\n if(current_modal_focusable){\n // If reached natural end of the tab sequence => restart\n if(e.shiftKey){\n if (document.activeElement === current_modal_focusable[0]) {\n current_modal_focusable[1].focus();\n e.preventDefault();\n }\n }else{\n if (document.activeElement === current_modal_focusable[1]) {\n current_modal_focusable[0].focus();\n e.preventDefault();\n }\n }\n\n // If have not yet used tab (or shift+tab) and modal is open ...\n // Focus the first focusable element\n if(!tabbedInsideModal && !clicked_inside_modal){\n tabbedInsideModal = true;\n !tabbedOutsideDiv && e.preventDefault();\n\n if(e.shiftKey){\n if(current_modal_focusable[3]){\n if(!current_modal_focusable[2]){\n current_modal_focusable[0].focus();\n }else{\n current_modal_focusable[2].focus();\n }\n }else{\n current_modal_focusable[1].focus();\n }\n }else{\n if(current_modal_focusable[3]){\n current_modal_focusable[3].focus();\n }else{\n current_modal_focusable[0].focus();\n }\n }\n }\n }\n\n !tabbedInsideModal && (tabbedOutsideDiv = true);\n });\n\n if(document.contains){\n _addEvent(main_container, 'click', function(e){\n e = e || window.event;\n /**\n * If click is on the foreground overlay (and not inside settings_modal),\n * hide settings modal\n *\n * Notice: click on div is not supported in IE\n */\n if(settings_modal_visible){\n if(!settings_inner.contains(e.target)){\n _cookieconsent.hideSettings(0);\n clicked_inside_modal = false;\n }else{\n clicked_inside_modal = true;\n }\n }else if(consent_modal_visible){\n if(consent_modal.contains(e.target)){\n clicked_inside_modal = true;\n }\n }\n\n }, true);\n }\n }\n\n /**\n * Manage each modal's layout\n * @param {Object} gui_options\n */\n var _guiManager = function(gui_options, only_consent_modal){\n\n // If gui_options is not object => exit\n if(typeof gui_options !== 'object') return;\n\n var consent_modal_options = gui_options['consent_modal'];\n var settings_modal_options = gui_options['settings_modal'];\n\n /**\n * Helper function which adds layout and\n * position classes to given modal\n *\n * @param {HTMLElement} modal\n * @param {string[]} allowed_layouts\n * @param {string[]} allowed_positions\n * @param {string} layout\n * @param {string[]} position\n */\n function _setLayout(modal, allowed_layouts, allowed_positions, allowed_transitions, layout, position, transition){\n position = (position && position.split(\" \")) || [];\n\n // Check if specified layout is valid\n if(_inArray(allowed_layouts, layout) > -1){\n\n // Add layout classes\n _addClass(modal, layout);\n\n // Add position class (if specified)\n if(!(layout === 'bar' && position[0] === 'middle') && _inArray(allowed_positions, position[0]) > -1){\n for(var i=0; i -1) && _addClass(modal, transition);\n }\n\n if(consent_modal_exists && consent_modal_options){\n _setLayout(\n consent_modal,\n ['box', 'bar', 'cloud'],\n ['top', 'middle', 'bottom'],\n ['zoom', 'slide'],\n consent_modal_options['layout'],\n consent_modal_options['position'],\n consent_modal_options['transition']\n );\n }\n\n if(!only_consent_modal && settings_modal_options){\n _setLayout(\n settings_container,\n ['bar'],\n ['left', 'right'],\n ['zoom', 'slide'],\n settings_modal_options['layout'],\n settings_modal_options['position'],\n settings_modal_options['transition']\n );\n }\n }\n\n /**\n * Returns true if cookie category is accepted by the user\n * @param {string} cookie_category\n * @returns {boolean}\n */\n _cookieconsent.allowedCategory = function(cookie_category){\n return _inArray(\n JSON.parse(_getCookie(_config.cookie_name, 'one', true) || '{}')['level'] || [] ,\n cookie_category\n ) > -1;\n }\n\n /**\n * Check if cookieconsent is already attached to dom\n * If not, create one, configure it and attach it to the body\n */\n _cookieconsent.run = function(conf_params){\n if(!document.getElementById('cc_div')){\n // configure all parameters\n _setConfig(conf_params);\n\n // if is bot, don't run plugin\n if(is_bot) return;\n\n // Retrieve cookie value (if set)\n saved_cookie_content = JSON.parse(_getCookie(_config.cookie_name, 'one', true) || \"{}\");\n cookie_consent_accepted = saved_cookie_content['level'] !== undefined;\n data = saved_cookie_content['data'] !== undefined ? saved_cookie_content['data'] : null;\n\n // Compare current revision with the one retrieved from cookie\n valid_revision = typeof conf_params['revision'] === \"number\"\n ? cookie_consent_accepted\n ? conf_params['revision'] > -1\n ? saved_cookie_content['revision'] === _config.revision\n : true\n : true\n : true;\n\n // If invalid revision or cookie is empty => create consent modal\n consent_modal_exists = (!cookie_consent_accepted || !valid_revision);\n\n // Generate cookie-settings dom (& consent modal)\n _createCookieConsentHTML(!consent_modal_exists, conf_params);\n\n _loadCSS(conf_params['theme_css'], function(){\n _getModalFocusableData();\n _guiManager(conf_params['gui_options']);\n _addCookieSettingsButtonListener();\n\n if(_config.autorun && consent_modal_exists){\n _cookieconsent.show(conf_params['delay'] || 0);\n }\n\n // Add class to enable animations/transitions\n setTimeout(function(){_addClass(main_container, 'c--anim');}, 30);\n\n // Accessibility :=> if tab pressed => trap focus inside modal\n setTimeout(function(){_handleFocusTrap();}, 100);\n });\n\n if(cookie_consent_accepted && valid_revision){\n var rfc_prop_exists = typeof saved_cookie_content['rfc_cookie'] === \"boolean\";\n\n /*\n * Convert cookie to rfc format (if `use_rfc_cookie` is enabled)\n */\n if(!rfc_prop_exists || (rfc_prop_exists && saved_cookie_content['rfc_cookie'] !== _config.use_rfc_cookie)){\n saved_cookie_content['rfc_cookie'] = _config.use_rfc_cookie;\n _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n }\n\n _manageExistingScripts();\n if(typeof conf_params['onAccept'] === \"function\"){\n conf_params['onAccept'](saved_cookie_content);\n }\n }\n }else{\n _log(\"CookieConsent [NOTICE]: cookie consent already attached to body!\");\n }\n }\n\n /**\n * Show settings modal (with optional delay)\n * @param {number} delay\n */\n _cookieconsent.showSettings = function(delay){\n setTimeout(function() {\n _addClass(html_dom, \"show--settings\");\n settings_container.setAttribute('aria-hidden', 'false');\n settings_modal_visible = true;\n\n /**\n * Set focus to the first focusable element inside settings modal\n */\n setTimeout(function(){\n // If there is no consent-modal, keep track of the last focused elem.\n if(!consent_modal_visible){\n last_elem_before_modal = document.activeElement;\n }else{\n last_consent_modal_btn_focus = document.activeElement;\n }\n\n if (settings_modal_focusable.length === 0) return;\n\n if(settings_modal_focusable[3]){\n settings_modal_focusable[3].focus();\n }else{\n settings_modal_focusable[0].focus();\n }\n current_modal_focusable = settings_modal_focusable;\n }, 200);\n\n _log(\"CookieConsent [SETTINGS]: show settings_modal\");\n }, delay > 0 ? delay : 0);\n }\n\n /**\n * This function handles the loading/activation logic of the already\n * existing scripts based on the current accepted cookie categories\n */\n var _manageExistingScripts = function(){\n\n if(!_config.page_scripts) return;\n\n // get all the scripts with \"cookie-category\" attribute\n var scripts = document.querySelectorAll('script[' + _config.script_selector + ']');\n var sequential_enabled = _config.page_scripts_order;\n var accepted_categories = saved_cookie_content['level'] || [];\n _log(\"CookieConsent [SCRIPT_MANAGER]: sequential loading:\", sequential_enabled);\n\n /**\n * Load scripts (sequentially), using a recursive function\n * which loops through the scripts array\n * @param {Element[]} scripts scripts to load\n * @param {number} index current script to load\n */\n var _loadScripts = function(scripts, index){\n if(index < scripts.length){\n\n var curr_script = scripts[index];\n var curr_script_category = curr_script.getAttribute(_config.script_selector);\n\n /**\n * If current script's category is on the array of categories\n * accepted by the user => load script\n */\n if(_inArray(accepted_categories, curr_script_category) > -1){\n\n curr_script.type = 'text/javascript';\n curr_script.removeAttribute(_config.script_selector);\n\n // get current script data-src\n var src = curr_script.getAttribute('data-src');\n\n // create fresh script (with the same code)\n var fresh_script = _createNode('script');\n fresh_script.textContent = curr_script.innerHTML;\n\n // Copy attributes over to the new \"revived\" script\n (function(destination, source){\n var attr, attributes = source.attributes;\n var len = attributes.length;\n for(var i=0; i the next script will not be loaded\n // until the current's script onload event triggers\n if(fresh_script.readyState) { // only required for IE <9\n fresh_script.onreadystatechange = function() {\n if (fresh_script.readyState === \"loaded\" || fresh_script.readyState === \"complete\" ) {\n fresh_script.onreadystatechange = null;\n _loadScripts(scripts, ++index);\n }\n };\n }else{ // others\n fresh_script.onload = function(){\n fresh_script.onload = null;\n _loadScripts(scripts, ++index);\n };\n }\n }else{\n // if sequential option is disabled\n // treat current script as inline (without onload event)\n src = false;\n }\n }\n\n // Replace current \"sleeping\" script with the new \"revived\" one\n curr_script.parentNode.replaceChild(fresh_script, curr_script);\n\n /**\n * If we managed to get here and scr is still set, it means that\n * the script is loading/loaded sequentially so don't go any further\n */\n if(src) return;\n }\n\n // Go to next script right away\n _loadScripts(scripts, ++index);\n }\n }\n\n _loadScripts(scripts, 0);\n }\n\n /**\n * Save custom data inside cookie\n * @param {object|string} new_data\n * @param {string} [mode]\n * @returns {boolean}\n */\n var _setCookieData = function(new_data, mode){\n\n var set = false;\n /**\n * If mode is 'update':\n * add/update only the specified props.\n */\n if(mode === 'update'){\n data = _cookieconsent.get('data');\n var same_type = typeof data === typeof new_data;\n\n if(same_type && typeof data === \"object\"){\n !data && (data = {});\n\n for(var prop in new_data){\n if(data[prop] !== new_data[prop]){\n data[prop] = new_data[prop]\n set = true;\n }\n }\n }else if((same_type || !data) && data !== new_data){\n data = new_data;\n set = true;\n }\n }else{\n data = new_data;\n set = true;\n }\n\n if(set){\n saved_cookie_content['data'] = data;\n _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n } \n\n return set;\n }\n\n /**\n * Forcefully set a specific revision and show consent modal\n * @param {number} new_revision\n * @param {boolean} [prompt_consent]\n * @returns {boolean}\n */\n var _setRevision = function(new_revision, prompt_consent, message){\n\n // If plugin has been initialized and new revision is valid\n if(\n main_container\n && typeof new_revision === \"number\"\n && saved_cookie_content['revision'] !== new_revision\n ){\n\n revision_enabled = true;\n revision_message = message;\n valid_revision = false;\n _config.revision = new_revision;\n\n // Show consent modal ?\n if(prompt_consent === true){\n _createConsentModal(_conf_params);\n _guiManager(_conf_params['gui_options'], true);\n _getModalFocusableData();\n _cookieconsent.show();\n }else {\n // If revision was modified, save cookie with the new revision\n _cookieconsent.accept();\n }\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Helper method to set a variety of fields\n * @param {string} field\n * @param {object} data\n * @returns {boolean}\n */\n _cookieconsent.set = function(field, data){\n switch(field){\n case 'data': return _setCookieData(data['value'], data['mode']);\n case 'revision': return _setRevision(data['value'], data['prompt_consent'], data['message']);\n default: return false;\n }\n }\n\n /**\n * Retrieve data from existing cookie\n * @returns {any}\n */\n _cookieconsent.get = function(field){\n var cookie = JSON.parse(_getCookie(_config.cookie_name, 'one', true) || \"{}\");\n\n return cookie[field];\n }\n\n /**\n * Function which will run after script load\n * @callback scriptLoaded\n */\n\n /**\n * Dynamically load script (append to head)\n * @param {string} src\n * @param {scriptLoaded} callback\n * @param {string[]} attrs\n */\n _cookieconsent.loadScript = function(src, callback, attrs){\n\n var function_defined = typeof callback === 'function';\n\n // Load script only if not already loaded\n if(!document.querySelector('script[src=\"' + src + '\"]')){\n\n var script = _createNode('script');\n\n // if an array is provided => add custom attributes\n if(attrs && attrs.length > 0){\n for(var i=0; i run callback onload\n if(function_defined){\n if(script.readyState) { // only required for IE <9\n script.onreadystatechange = function() {\n if ( script.readyState === \"loaded\" || script.readyState === \"complete\" ) {\n script.onreadystatechange = null;\n callback();\n }\n };\n }else{ //Others\n script.onload = callback;\n }\n }\n\n script.src = src;\n\n /**\n * Append script to head\n */\n (document.head ? document.head : document.getElementsByTagName('head')[0]).appendChild(script);\n }else{\n function_defined && callback();\n }\n }\n\n /**\n * Show cookie consent modal (with delay parameter)\n * @param {number} delay\n */\n _cookieconsent.show = function(delay){\n if(consent_modal_exists){\n setTimeout(function() {\n _addClass(html_dom, \"show--consent\");\n\n /**\n * Update attributes/internal statuses\n */\n consent_modal.setAttribute('aria-hidden', 'false');\n consent_modal_visible = true;\n\n setTimeout(function(){\n last_elem_before_modal = document.activeElement;\n current_modal_focusable = consent_modal_focusable;\n }, 200);\n\n _log(\"CookieConsent [MODAL]: show consent_modal\");\n }, delay > 0 ? delay : 0);\n }\n }\n\n /**\n * Hide consent modal\n */\n _cookieconsent.hide = function(){\n if(consent_modal_exists){\n _removeClass(html_dom, \"show--consent\");\n consent_modal.setAttribute('aria-hidden', 'true');\n consent_modal_visible = false;\n\n setTimeout(function(){\n //restore focus to the last page element which had focus before modal opening\n last_elem_before_modal.focus();\n current_modal_focusable = null;\n }, 200);\n\n _log(\"CookieConsent [MODAL]: hide\");\n }\n }\n\n /**\n * Hide settings modal\n */\n _cookieconsent.hideSettings = function(){\n _removeClass(html_dom, \"show--settings\");\n settings_modal_visible = false;\n settings_container.setAttribute('aria-hidden', 'true');\n\n\n setTimeout(function(){\n /**\n * If consent modal is visible, focus him (instead of page document)\n */\n if(consent_modal_visible){\n last_consent_modal_btn_focus && last_consent_modal_btn_focus.focus();\n current_modal_focusable = consent_modal_focusable;\n }else{\n /**\n * Restore focus to last page element which had focus before modal opening\n */\n last_elem_before_modal.focus();\n current_modal_focusable = null;\n }\n\n clicked_inside_modal = false;\n }, 200);\n\n _log(\"CookieConsent [SETTINGS]: hide settings_modal\");\n }\n\n /**\n * Accept cookieconsent function API\n * @param {string[]|string} _categories - Categories to accept\n * @param {string[]} [_exclusions] - Excluded categories [optional]\n */\n _cookieconsent.accept = function(_categories, _exclusions){\n var categories = _categories || undefined;\n var exclusions = _exclusions || [];\n var to_accept = [];\n\n /**\n * Get all accepted categories\n * @returns {string[]}\n */\n var _getCurrentPreferences = function(){\n var toggles = document.querySelectorAll('.c-tgl') || [];\n var states = [];\n\n for(var i=0; i= 1){\n for(i=0; i 0){\n for(var i=0; i<_cookies.length; i++){\n this.validCookie(_cookies[i]) && cookies.push(_cookies[i]);\n }\n }else{\n this.validCookie(_cookies) && cookies.push(_cookies);\n }\n\n _eraseCookies(cookies, _path, domains);\n }\n\n /**\n * Set cookie, by specifying name and value\n * @param {string} name\n * @param {string} value\n */\n var _setCookie = function(name, value) {\n\n value = _config.use_rfc_cookie ? encodeURIComponent(value) : value;\n\n var date = new Date();\n date.setTime(date.getTime() + (1000 * ( _config.cookie_expiration * 24 * 60 * 60)));\n var expires = \"; expires=\" + date.toUTCString();\n\n var cookieStr = name + \"=\" + (value || \"\") + expires + \"; Path=\" + _config.cookie_path + \";\";\n cookieStr += \" SameSite=\" + _config.cookie_same_site + \";\";\n\n // assures cookie works with localhost (=> don't specify domain if on localhost)\n if(window.location.hostname.indexOf(\".\") > -1){\n cookieStr += \" Domain=\" + _config.cookie_domain + \";\";\n }\n\n if(window.location.protocol === \"https:\") {\n cookieStr += \" Secure;\";\n }\n\n document.cookie = cookieStr;\n\n _log(\"CookieConsent [SET_COOKIE]: cookie \"+ name + \"='\" + value + \"' was set!\");\n }\n\n /**\n * Get cookie value by name,\n * returns the cookie value if found (or an array\n * of cookies if filter provided), otherwise empty string: \"\"\n * @param {string} name\n * @param {string} filter - 'one' or 'all'\n * @param {boolean} get_value - set to true to obtain its value\n * @returns {string|string[]}\n */\n var _getCookie = function(name, filter, get_value) {\n var found;\n\n if(filter === 'one'){\n found = document.cookie.match(\"(^|;)\\\\s*\" + name + \"\\\\s*=\\\\s*([^;]+)\");\n found = found ? (get_value ? found.pop() : name) : \"\";\n\n if(found && name === _config.cookie_name){\n try{\n found = JSON.parse(found)\n }catch(e){\n found = JSON.parse(decodeURIComponent(found))\n }\n found = JSON.stringify(found);\n }\n }else if(filter === 'all'){\n // array of names of all existing cookies\n var cookies = document.cookie.split(/;\\s*/); found = [];\n for(var i=0; i -1 ? '; domain=' + domains[j] : \"\") + '; ' + expires;\n }\n _log(\"CookieConsent [AUTOCLEAR]: deleting cookie: '\" + cookies[i] + \"' path: '\" + path + \"' domain:\", domains);\n }\n }\n\n /**\n * Returns true if cookie was found and has valid value (not empty string)\n * @param {string} cookie_name\n * @returns {boolean}\n */\n _cookieconsent.validCookie = function(cookie_name){\n return _getCookie(cookie_name, 'one', true) !== \"\";\n }\n\n /**\n * Function to run when event is fired\n * @callback eventFired\n */\n\n /**\n * Add event listener to dom object (cross browser function)\n * @param {Element} elem\n * @param {string} event\n * @param {eventFired} fn\n * @param {boolean} passive\n */\n var _addEvent = function(elem, event, fn, _passive) {\n var passive = _passive === true;\n\n if (elem.addEventListener) {\n passive ? elem.addEventListener(event, fn , { passive: true }) : elem.addEventListener(event, fn, false);\n } else {\n /**\n * For old browser, add 'on' before event:\n * 'click':=> 'onclick'\n */\n elem.attachEvent(\"on\" + event, fn);\n }\n }\n\n /**\n * Get all prop. keys defined inside object\n * @param {Object} obj\n */\n var _getKeys = function(obj){\n if(typeof obj === \"object\"){\n var keys = [], i = 0;\n for (keys[i++] in obj);\n return keys;\n }\n }\n\n /**\n * Append class to the specified dom element\n * @param {HTMLElement} elem\n * @param {string} classname\n */\n var _addClass = function (elem, classname){\n if(elem.classList)\n elem.classList.add(classname)\n else{\n if(!_hasClass(elem, classname))\n elem.className += ' '+classname;\n }\n }\n\n /**\n * Remove specified class from dom element\n * @param {HTMLElement} elem\n * @param {string} classname\n */\n var _removeClass = function (el, className) {\n el.classList ? el.classList.remove(className) : el.className = el.className.replace(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'), ' ');\n }\n\n /**\n * Check if html element has class\n * @param {HTMLElement} el\n * @param {string} className\n */\n var _hasClass = function(el, className) {\n if (el.classList) {\n return el.classList.contains(className);\n }\n return !!el.className.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'));\n }\n\n return _cookieconsent;\n };\n\n var init = 'initCookieConsent';\n /**\n * Make CookieConsent object accessible globally\n */\n if(typeof window[init] !== 'function'){\n window[init] = CookieConsent\n }\n})();","// 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 openMobileNav() {\n const button = document.querySelector('#js-navigation-toggler'),\n el = document.querySelector('#js-navigation-collapse'),\n menuList = document.querySelector('#js-menu-list');\n button.addEventListener('click', () => {\n el.classList.add('is-visible');\n setTimeout(() => {\n el.classList.add('slide-enter');\n button.setAttribute('aria-expanded', 'true');\n menuList.classList.add('fade-enter');\n }, 1);\n setTimeout(() => {\n menuList.classList.remove('fade-enter');\n menuList.classList.add('is-visible');\n }, 401);\n });\n}\n\nfunction closeMobileNav() {\n const button = document.querySelector('#js-navigation-cancel'),\n el = document.querySelector('#js-navigation-collapse'),\n hamburgerButton = document.querySelector('#js-navigation-toggler'),\n dropdownItems = document.querySelectorAll('.navigation__menu-item.dropdown'),\n menuList = document.querySelector('#js-menu-list');\n\n button.addEventListener('click', () => {\n el.classList.remove('slide-enter');\n menuList.classList.add('fade-leave');\n hamburgerButton.setAttribute('aria-expanded', 'false');\n setTimeout(() => {\n el.classList.remove('is-visible');\n menuList.classList.remove('fade-leave');\n menuList.classList.remove('is-visible');\n }, 400);\n\n function removeDelayed(el) {\n setTimeout(() => {\n el.classList.remove('is-visible');\n }, 205);\n }\n for (let i = 0; i < dropdownItems.length; i++) {\n let elements = dropdownItems[i];\n elements.classList.remove('fade');\n elements.setAttribute('aria-expanded', 'false');\n removeDelayed(elements);\n }\n });\n}\n\nfunction setClassNameNavbar() {\n const nav = document.querySelector('#js-navigation');\n if (window.scrollY > 3) {\n nav.classList.add('has-shadow');\n } else {\n nav.classList.remove('has-shadow');\n }\n}\n\nfunction toggleSubNav() {\n const elements = document.querySelectorAll('.navigation__menu-item.dropdown .navigation__menu-link');\n\n for (let i = 0; i < elements.length; i++) {\n elements[i].addEventListener('click', (e) => {\n const target = e.target,\n parent = target.closest('.dropdown');\n\n if (parent.classList.contains('is-visible')) {\n target.setAttribute('aria-expanded', 'false');\n parent.classList.remove('fade');\n setTimeout(() => {\n parent.classList.remove('is-visible');\n }, 205);\n } else {\n closeAllSubnav();\n target.setAttribute('aria-expanded', 'true');\n parent.classList.add('is-visible');\n setTimeout(() => {\n parent.classList.add('fade');\n }, 10);\n }\n });\n }\n}\n\nfunction closeAllSubnav() {\n const elements = document.querySelectorAll('.js-nav-dropdown');\n for (let i = 0; i < elements.length; i++) {\n const target = elements[i];\n const parent = target.closest('.dropdown');\n target.setAttribute('aria-expanded', 'false');\n parent.classList.remove('fade');\n parent.classList.remove('is-visible');\n\n }\n}\n\n// Close menus when clicking outside of them\nwindow.addEventListener('click', (event) => {\n const dropBtns = document.querySelectorAll('.js-nav-dropdown');\n const dropBtnsArray = Array.prototype.slice.call(dropBtns);\n if (dropBtnsArray.filter(e => e === event.target.parentNode).length === 0) {\n closeAllSubnav();\n }\n});\n\nopenMobileNav();\ncloseMobileNav();\ntoggleSubNav();\nsetClassNameNavbar();\n\nexport {\n setClassNameNavbar\n};\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