{"version":3,"file":"bundle.js","mappings":"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","sources":["webpack://nmt.website/./src/frontend/scripts/accordion/index.js","webpack://nmt.website/./src/frontend/scripts/cookie/index.js","webpack://nmt.website/./src/frontend/scripts/filters/index.js","webpack://nmt.website/./src/frontend/scripts/searchresults/index.js","webpack://nmt.website/./src/frontend/scripts/share/index.js","webpack://nmt.website/webpack/bootstrap","webpack://nmt.website/./src/frontend/scripts/navigation/index.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/raf.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/caf.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/extend.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/getBody.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/docElement.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/forEach.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/hasClass.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/addClass.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/removeClass.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/getAttr.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/hideElement.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/showElement.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/isVisible.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/addEvents.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/events.js","webpack://nmt.website/./node_modules/tiny-slider/src/tiny-slider.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/calc.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/toDegree.js","webpack://nmt.website/./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack://nmt.website/./src/frontend/scripts/footer/index.js","webpack://nmt.website/./src/frontend/scripts/header/index.js","webpack://nmt.website/./src/frontend/scripts/attendees/index.js","webpack://nmt.website/./src/frontend/scripts/slider/index.js","webpack://nmt.website/./src/frontend/scripts/banner/index.js","webpack://nmt.website/./src/frontend/scripts/index.js"],"sourcesContent":["const accordionHeaders = document.querySelectorAll('[data-accordion-header]');\n\nfunction accordionCollapse () {\n if (accordionHeaders) {\n for (let i = 0; i < accordionHeaders.length; i++) {\n accordionHeaders[i].addEventListener('click', () => {\n let parent = accordionHeaders[i].parentElement;\n let panel = parent.parentElement;\n let target = parent.nextElementSibling;\n let expanded = accordionHeaders[i].getAttribute('aria-expanded') === 'true' || false;\n accordionHeaders[i].setAttribute('aria-expanded', !expanded);\n if (!expanded) {\n target.hidden = expanded;\n setTimeout(() => {\n panel.classList.add('is-active');\n }, 1);\n } else {\n panel.classList.remove('is-active');\n setTimeout(() => {\n target.hidden = expanded;\n }, 401);\n }\n });\n }\n }\n}\n\naccordionCollapse();\n","/*!\n * CookieConsent v2.4.7\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 element where the cookieconsent will be appended (default :=> document.body)\n * @returns {Object}\n */\n var CookieConsent = function(root) {\n\n // CHANGE THIS FLAG FALSE TO DISABLE console.log()\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: location.hostname, // default: current domain\n cookie_path: \"/\",\n cookie_same_site: \"Lax\",\n script_selector: \"data-cookiecategory\"\n };\n\n /**\n * Object which holds the main methods (.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\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 * Array of booleans used to keep track of enabled/disabled preferences\n */\n var toggle_states = [];\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]: recieved_config_settings \", conf_params);\n\n if (typeof conf_params['cookie_expiration'] === \"number\") {\n _config.cookie_expiration = conf_params['cookie_expiration'];\n }\n\n if (typeof conf_params['autorun'] === \"boolean\") {\n _config.autorun = conf_params['autorun'];\n }\n\n if (typeof conf_params['cookie_domain'] === \"string\") {\n _config.cookie_domain = conf_params['cookie_domain'];\n }\n\n if (typeof conf_params['cookie_same_site'] === \"string\") {\n _config.cookie_same_site = conf_params['cookie_same_site'];\n }\n\n if (typeof conf_params['cookie_path'] === \"string\") {\n _config.cookie_path = conf_params['cookie_path'];\n }\n\n if (typeof conf_params['cookie_name'] === \"string\") {\n _config.cookie_name = conf_params['cookie_name'];\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\n if (conf_params['force_consent'] === true) {\n _addClass(html_dom, 'force--consent');\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 < all_links.length; x++) {\n all_links[x].setAttribute('aria-haspopup', 'dialog');\n _addEvent(all_links[x], 'click', function(event) {\n _cookieconsent.showSettings(0);\n event.preventDefault ? event.preventDefault() : event.returnValue = false;\n });\n }\n }\n\n /**\n * Check if given lang. index exists as a property.\n * If it exists -> desired language is implemented,\n * otherwise fall back to the default current_lang\n * @param {String} lang\n * @param {Object} all_languages\n */\n var _getValidatedLanguage = function(lang, all_languages) {\n if (all_languages.hasOwnProperty(lang)) {\n return lang;\n } else if (_getKeys(all_languages).length > 0) {\n if (all_languages.hasOwnProperty(_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 * @param {HTMLElement} modal_dom\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 recieve focus during \"open/close\" modal\n */\n var allowed_focusable_types = ['[href]', 'button', 'input', 'details', '[tabindex=\"0\"]'];\n\n\n function _getAllFocusableElements(modal, _array) {\n var focus_later = false,\n 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,\n 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 /**\n * Generate cookie consent html based on config settings\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 // If never_accepted => create consent-modal\n if (!never_accepted) {\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 var 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 consent_text.insertAdjacentHTML('beforeend', conf_params.languages[lang]['consent_modal']['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 = -1; // accept current selection\n\n if (conf_params.languages[lang]['consent_modal']['primary_btn']['role'] == 'accept_all') {\n accept_type = 1; // accept all\n }\n\n _addEvent(consent_primary_btn, \"click\", function() {\n _cookieconsent.hide();\n _log(\"CookieConsent [ACCEPT]: cookie_consent was accepted!\");\n _saveCookiePreferences(conf_params, 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 _saveCookiePreferences(conf_params, 0); // 0 => 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\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 var all_blocks = conf_params.languages[_config.current_lang]['settings_modal']['blocks'];\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 < n_blocks; ++i) {\n\n // Create title\n var block_section = _createNode('div');\n var block_table_container = _createNode('div');\n var block_desc = _createNode('div');\n var block_title_container = _createNode('div');\n\n block_section.className = 'c-bl';\n block_table_container.className = 'desc';\n block_desc.className = 'p';\n block_title_container.className = 'title';\n\n // Sset title and description for each block\n block_desc.insertAdjacentHTML('beforeend', all_blocks[i]['description']);\n\n // Create toggle if specified (opt in/out)\n if (typeof all_blocks[i]['toggle'] !== 'undefined') {\n\n var accordion_id = \"c-ac-\" + i;\n\n // Create button (to collapse/expand block description)\n var block_title_btn = _createNode('button');\n var block_switch_label = _createNode('label');\n var block_switch = _createNode('input');\n var block_switch_span = _createNode('span');\n var label_text_span = _createNode('span');\n\n // These 2 spans will contain each 2 pseudo-elements to generate 'tick' and 'x' icons\n var block_switch_span_on_icon = _createNode('span');\n var block_switch_span_off_icon = _createNode('span');\n\n block_title_btn.className = 'b-tl';\n block_switch_label.className = 'b-tg';\n block_switch.className = 'c-tgl';\n block_switch_span_on_icon.className = 'on-i';\n block_switch_span_off_icon.className = 'off-i';\n block_switch_span.className = 'c-tg';\n label_text_span.className = \"t-lb\";\n\n block_title_btn.setAttribute('aria-expanded', 'false');\n block_title_btn.setAttribute('aria-controls', accordion_id);\n\n block_switch.type = 'checkbox';\n block_switch_span.setAttribute('aria-hidden', 'true');\n\n var cookie_category = all_blocks[i]['toggle'].value;\n block_switch.value = cookie_category;\n\n label_text_span[innerText] = all_blocks[i]['title'];\n block_title_btn.insertAdjacentHTML('beforeend', all_blocks[i]['title']);\n\n block_title_container.appendChild(block_title_btn);\n block_switch_span.appendChild(block_switch_span_on_icon);\n block_switch_span.appendChild(block_switch_span_off_icon);\n\n /**\n * If never accepted => 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(JSON.parse(_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 }\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 block_switch.setAttribute('aria-readonly', 'true');\n _addClass(block_switch_span, 'c-ro');\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 // [NEW]\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 var all_table_headers = conf_params.languages[_config.current_lang]['settings_modal']['cookie_table_headers'];\n\n /**\n * Use custom table headers\n */\n for (var p = 0; p < all_table_headers.length; ++p) {\n // create new header\n var th1 = _createNode('th');\n var obj = all_table_headers[p];\n th1.setAttribute('scope', 'col');\n\n // get custom header content\n if (obj) {\n var new_column_key = obj && _getKeys(obj)[0];\n th1[innerText] = all_table_headers[p][new_column_key];\n tr_tmp_fragment.appendChild(th1);\n }\n }\n\n var tr_tmp = _createNode('tr');\n tr_tmp.appendChild(tr_tmp_fragment);\n\n // create table header & append fragment\n var thead = _createNode('thead');\n thead.appendChild(tr_tmp);\n\n // append header to table\n var block_table = _createNode('table');\n block_table.appendChild(thead);\n\n var tbody_fragment = document.createDocumentFragment();\n\n // create table content\n for (var n = 0; n < all_blocks[i]['cookie_table'].length; n++) {\n var tr = _createNode('tr');\n\n for (var g = 0; g < all_table_headers.length; ++g) {\n // get custom header content\n var obj = all_table_headers[g];\n if (obj) {\n var new_column_key = _getKeys(obj)[0];\n\n var td_tmp = _createNode('td');\n\n // Allow html inside table cells\n td_tmp.insertAdjacentHTML('beforeend', all_blocks[i]['cookie_table'][n][new_column_key]);\n td_tmp.setAttribute('data-column', obj[new_column_key]);\n\n tr.appendChild(td_tmp);\n }\n }\n\n tbody_fragment.appendChild(tr);\n }\n\n // append tbody_fragment to tbody & append the latter into the table\n var tbody = _createNode('tbody');\n tbody.appendChild(tbody_fragment);\n block_table.appendChild(tbody);\n\n //block_section.appendChild(block_table);\n block_table_container.appendChild(block_table);\n }\n\n block_section.appendChild(block_table_container);\n\n // append block inside settings dom\n settings_blocks.appendChild(block_section);\n }\n\n // Create settings buttons\n var settings_buttons = _createNode('div');\n var settings_save_btn = _createNode('button');\n var settings_accept_all_btn = _createNode('button');\n\n settings_buttons.id = 's-bns';\n settings_save_btn.id = 's-sv-bn';\n settings_accept_all_btn.id = 's-all-bn';\n settings_save_btn.className = 'c-bn';\n settings_accept_all_btn.className = 'c-bn';\n settings_save_btn.insertAdjacentHTML('beforeend', conf_params.languages[_config.current_lang]['settings_modal']['save_settings_btn']);\n settings_accept_all_btn.insertAdjacentHTML('beforeend', conf_params.languages[_config.current_lang]['settings_modal']['accept_all_btn']);\n settings_buttons.appendChild(settings_accept_all_btn);\n settings_buttons.appendChild(settings_save_btn);\n\n // Add save preferences button onClick event\n // Hide both settings modal and consent modal\n _addEvent(settings_save_btn, 'click', function() {\n _cookieconsent.hideSettings();\n _cookieconsent.hide();\n _saveCookiePreferences(conf_params, -1);\n });\n\n _addEvent(settings_accept_all_btn, 'click', function() {\n _cookieconsent.hideSettings();\n _cookieconsent.hide();\n _saveCookiePreferences(conf_params, 1);\n });\n\n settings_header.appendChild(settings_title);\n settings_header.appendChild(settings_close_btn_container);\n\n settings_inner.appendChild(settings_header);\n settings_inner.appendChild(settings_blocks);\n settings_inner.appendChild(settings_buttons);\n settings_container_inner.appendChild(settings_inner);\n\n settings.appendChild(settings_container_inner);\n settings_container_valign.appendChild(settings);\n settings_container.appendChild(settings_container_valign);\n\n all_modals_container.appendChild(settings_container);\n all_modals_container.appendChild(overlay);\n\n // Finally append everything to body (main_container holds both modals)\n (root || document.body).appendChild(main_container);\n }\n\n /**\n * Save cookie preferences\n * accept_type = 0: accept necessary only\n * accept_type = 1: accept all\n * accept_type = -1: accept selection\n */\n var _saveCookiePreferences = function(conf_params, accept_type) {\n\n // Get all cookiepreferences values saved in cookieconsent settings modal\n var category_toggles = document.querySelectorAll('.c-tgl') || [];\n var c_cookie_level = '',\n changedSettings = [],\n must_reload = false;\n\n // If there are opt in/out toggles ...\n if (category_toggles.length > 0) {\n switch (accept_type) {\n case -1:\n //accept current selection\n for (var i = 0; i < category_toggles.length; i++) {\n if (category_toggles[i].checked) {\n c_cookie_level += '\"' + category_toggles[i].value + '\",';\n if (!toggle_states[i]) {\n changedSettings.push(category_toggles[i].value);\n toggle_states[i] = true;\n }\n } else {\n if (toggle_states[i]) {\n changedSettings.push(category_toggles[i].value);\n toggle_states[i] = false;\n }\n }\n }\n break;\n case 0:\n // disable all except necessary\n for (var i = 0; i < category_toggles.length; i++) {\n if (category_toggles[i].disabled) {\n c_cookie_level += '\"' + category_toggles[i].value + '\",';\n toggle_states[i] = true;\n } else {\n category_toggles[i].checked = false;\n if (toggle_states[i]) {\n changedSettings.push(category_toggles[i].value);\n toggle_states[i] = false;\n }\n }\n }\n break;\n case 1:\n // enable all\n for (var i = 0; i < category_toggles.length; i++) {\n category_toggles[i].checked = true;\n c_cookie_level += '\"' + category_toggles[i].value + '\",';\n if (!toggle_states[i]) {\n changedSettings.push(category_toggles[i].value);\n }\n\n toggle_states[i] = true;\n }\n break;\n }\n\n // remove last ',' character\n c_cookie_level = c_cookie_level.slice(0, -1);\n\n /**\n * If autoclear_cookies==true -> delete all cookies which are unused (based on selected preferences)\n */\n if (conf_params['autoclear_cookies'] && cookie_consent_accepted && changedSettings.length > 0) {\n\n // Get array of all blocks defined inside settings\n var all_blocks = conf_params.languages[_config.current_lang]['settings_modal']['blocks'];\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 < len; jk++) {\n\n // Save current block (local scope & less accesses -> ~faster value retrieval)\n var curr_block = all_blocks[jk];\n\n // If current block has a toggle for opt in/out\n if (curr_block.hasOwnProperty('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 curr_block.hasOwnProperty('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(conf_params.languages[_config.current_lang]['settings_modal']['cookie_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 < clen; hk++) {\n\n // Get current row of table (corresponds to all cookie params)\n var curr_row = curr_cookie_table[hk],\n found_cookies = [];\n var curr_cookie_name = curr_row[ckey];\n var is_regex = curr_row['is_regex'] || false;\n var curr_cookie_domain = curr_row['domain'] || null;\n var curr_cookie_path = curr_row['path'] || false;\n\n // set domain to the specified domain\n curr_cookie_domain && (domains = [curr_cookie_domain, '.' + curr_cookie_domain]);\n\n // If regex provided => filter cookie array\n if (is_regex) {\n for (var n = 0; n < all_cookies_array.length; n++) {\n if (all_cookies_array[n].match(curr_cookie_name)) {\n found_cookies.push(all_cookies_array[n]);\n }\n }\n } else {\n var found_index = _inArray(all_cookies_array, curr_cookie_name);\n if (found_index > -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 = '{\"level\": [' + c_cookie_level + ']}';\n\n // save cookie with preferences 'level' (only if never accepted or settings were updated)\n if (!cookie_consent_accepted || changedSettings.length > 0)\n _setCookie(_config.cookie_name, _saved_cookie_content);\n\n _manageExistingScripts();\n\n if (typeof conf_params['onAccept'] === \"function\" && !cookie_consent_accepted) {\n cookie_consent_accepted = true;\n return conf_params['onAccept'](JSON.parse(_saved_cookie_content));\n }\n\n // fire onChange only if settings were changed\n if (typeof conf_params['onChange'] === \"function\" && changedSettings.length > 0) {\n conf_params['onChange'](JSON.parse(_saved_cookie_content));\n }\n\n /**\n * reload page if needed\n */\n if (must_reload) {\n window.location.reload();\n }\n }\n\n /**\n * Load style via ajax in background (and then show modal)\n * @param {String} css_path\n * @param {Function} 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 focuse 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) {\n\n // If gui_options is not obje => 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 {Array} allowed_layouts\n * @param {Array} allowed_positions\n * @param {String} layout\n * @param {Array} 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 classe\n _addClass(modal, layout);\n\n // Add position class (if specified)\n if (_inArray(allowed_positions, position[0]) > -1) {\n for (var i = 0; i < position.length; i++) {\n _addClass(modal, position[i]);\n }\n }\n }\n\n // Add transition class\n (_inArray(allowed_transitions, transition) > -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', 'bottom'],\n ['zoom', 'slide'],\n consent_modal_options['layout'],\n consent_modal_options['position'],\n consent_modal_options['transition']\n );\n }\n\n if (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 alredy 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 (!main_container) {\n // configure all parameters\n _setConfig(conf_params);\n\n // Retrieve cookie value (if set)\n _saved_cookie_content = _getCookie(_config.cookie_name, 'one', true);\n\n // If cookie is empty => create consent modal\n consent_modal_exists = _saved_cookie_content == '';\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 (!_saved_cookie_content && _config.autorun) {\n _cookieconsent.show(conf_params['delay'] || 0);\n }\n\n // Add class to enable animations/transitions\n setTimeout(function() {\n _addClass(main_container, 'c--anim');\n }, 30);\n\n // Accessibility :=> if tab pressed => trap focus inside modal\n setTimeout(function() {\n _handleFocusTrap();\n }, 100);\n });\n\n _saved_cookie_content && (cookie_consent_accepted = true)\n\n // if cookie accepted => fire once the \"onAccept\" method (if defined)\n if (cookie_consent_accepted) {\n _manageExistingScripts();\n if (typeof conf_params['onAccept'] === \"function\") {\n conf_params['onAccept'](JSON.parse(_saved_cookie_content || \"{}\"));\n }\n }\n } else {\n _log(\"CookieConsent [NOTICE]: cookie consent alredy 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 // 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 /**\n * Set focus to the first focusable element inside settings modal\n */\n setTimeout(function() {\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 }, 100);\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 alredy\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 sequental_enabled = _config.page_scripts_order;\n var accepted_categories = JSON.parse(_saved_cookie_content).level || [];\n _log(\"CookieConsent [SCRIPT_MANAGER]: sequential loading:\", sequental_enabled);\n\n /**\n * Load scripts (sequentally), using a recursive function\n * which loops through the scripts array\n * @param {Array} 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 < len; i++) {\n attr = attributes[i];\n destination.setAttribute(attr.nodeName, attr.nodeValue);\n }\n })(fresh_script, curr_script);\n\n // set src (if data-src found)\n src ? (fresh_script.src = src) : (src = curr_script.src);\n\n // if script has \"src\" attribute\n // try loading it sequentially\n if (src) {\n if (sequental_enabled) {\n // load script sequentially => 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 * Dynamically load script (append to head)\n * @param {String} src\n * @param {Function} callback\n * @param {Array} attrs\n */\n _cookieconsent.loadScript = function(src, callback, attrs) {\n\n var function_defined = typeof callback === 'function';\n\n // Load script only if not alredy 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 < attrs.length; ++i) {\n attrs[i] && script.setAttribute(attrs[i]['name'], attrs[i]['value']);\n }\n }\n\n // if callback function defined => 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 last_elem_before_modal = document.activeElement;\n current_modal_focusable = consent_modal_focusable;\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 //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 _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 * 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 _log(\"CookieConsent [SETTINGS]: hide settings_modal\");\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 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 (location.hostname.indexOf(\".\") > -1) {\n cookieStr += \" Domain=\" + _config.cookie_domain + \";\";\n }\n\n if (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 * @returns {String}\n */\n var _getCookie = function(name, filter, get_value) {\n var found;\n\n if (filter === 'one') {\n found = (found = document.cookie.match(\"(^|;)\\\\s*\" + name + \"\\\\s*=\\\\s*([^;]+)\")) ? (get_value ? found.pop() : name) : \"\"\n } else if (filter === 'all') {\n // array of names of all existing cookies\n var cookies = document.cookie.split(/;\\s*/);\n found = [];\n for (var i = 0; i < cookies.length; i++) {\n found.push(cookies[i].split(\"=\")[0]);\n }\n }\n\n return found;\n }\n\n /**\n * Delete cookie by name & path\n * @param {Array} cookies\n * @param {String} custom_path\n * @param {Array} domains ['www.domain.com', '.www.domain.com', 'domain.com', '.domain.com']\n */\n var _eraseCookies = function(cookies, custom_path, domains) {\n var path = custom_path ? custom_path : '/';\n var expires = 'Expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n\n for (var i = 0; i < cookies.length; i++) {\n for (var j = 0; j < domains.length; j++) {\n document.cookie = cookies[i] + '=; Path=' + path + '; Domain=' + domains[j] + '; ' + expires;\n }\n _log(\"CookieConsent [AUTOCLEAR]: deleting cookie: '\" + cookies[i] + \"' path: '\" + path + \"' domain:\", domains);\n }\n }\n\n /**\n * Return 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 * Add event listener to dom object (cross browser function)\n * @param {Object} elem\n * @param {String} event //event type\n * @param {Object } fn\n * @param {Boolean} passive\n */\n var _addEvent = function(elem, event, fn, passive) {\n var passive = passive || false;\n\n if (elem.addEventListener) {\n passive ? elem.addEventListener(event, fn, {\n passive: true\n }) : 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 = [],\n 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 classname\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 /**\n * Before returning the cookieconsent object,\n * remove the initCookieConsent function from global scope\n * to prevent users from directly manipulating the\n * cookieconsent options from browser console (or at least make it harder)\n */\n return (CookieConsent = window[init] = undefined), _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})();\n\n// Init cookie consent\nvar cc = initCookieConsent();\nvar cookieTexts = getCookieTexts();\nvar gaCode = '';\n\nfunction getCookieTexts()\n{\n var xmlHttp = new XMLHttpRequest();\n xmlHttp.open( \"GET\", '/umbraco/api/cookie/getcookietexts/' + document.documentElement.getAttribute('lang'), false ); // false for synchronous request\n xmlHttp.send( null );\n console.log(xmlHttp.responseText);\n return JSON.parse(xmlHttp.responseText);\n}\n\nfunction getLanguageModel()\n{\n var returnModel = {};\n returnModel[cookieTexts.language] = {};\n returnModel[cookieTexts.language].consent_modal = {\n title: cookieTexts.cookiesTitle,\n description: cookieTexts.cookiesDescription\n };\n returnModel[cookieTexts.language].consent_modal['primary_btn'] = {\n text: cookieTexts.acceptAllText,\n role: 'accept_all'\n };\n returnModel[cookieTexts.language].consent_modal['secondary_btn'] = {\n text: cookieTexts.declineText,\n role: 'accept_necessary'\n };\n \n returnModel[cookieTexts.language].settings_modal = {\n title: cookieTexts.cookiePopup.title,\n save_settings_btn: cookieTexts.cookiePopup.saveSettingsButtonText,\n accept_all_btn: cookieTexts.cookiePopup.acceptAllText,\n close_btn_label: cookieTexts.cookiePopup.closeText\n };\n \n var cookies = [];\n cookies.push({\n title: cookieTexts.cookiesTitle,\n description: cookieTexts.cookiePopup.description\n });\n\n if (cookieTexts.cookiePopup.cookies.length > 0)\n {\n for (var i = 0; i < cookieTexts.cookiePopup.cookies.length; i++)\n {\n var cookieObject = {};\n cookieObject.title = cookieTexts.cookiePopup.cookies[i].title;\n cookieObject.description = cookieTexts.cookiePopup.cookies[i].description;\n\n var toggleObject = {\n value: cookieTexts.cookiePopup.cookies[i].value,\n enabled: cookieTexts.cookiePopup.cookies[i].value === 'necessary',\n readonly: cookieTexts.cookiePopup.cookies[i].isNecessary\n };\n\n if (cookieTexts.cookiePopup.cookies[i].value === 'analytics')\n {\n var properties = cookieTexts.cookiePopup.cookies[i].properties;\n gaCode = properties['Code'];\n }\n\n cookieObject.toggle = toggleObject;\n cookies.push(cookieObject);\n }\n }\n\n returnModel[cookieTexts.language].settings_modal.blocks = cookies;\n\n return returnModel;\n}\ncc.run({\n current_lang: document.documentElement.getAttribute('lang'),\n cookie_expiration: 365,\n onAccept: function (cookies) {\t\t\t\n if(cc.allowedCategory('analytics')) {\n cc.loadScript('https://www.google-analytics.com/analytics.js', function(){\t\t\n ga('create', gaCode, 'auto'); //replace UA-XXXXXXXX-Y with your tracking code\n ga('send', 'pageview');\n });\n }\n},\n languages: getLanguageModel(),\n gui_options: {\n consent_modal: {\n transition: 'slide'\n },\n settings_modal: {\n transition: 'slide'\n }\n }\n});\n","window.addEventListener('keydown', (e) => {\n if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {\n if (e.target.nodeName == 'INPUT' && e.target.type == 'text') {\n e.preventDefault();\n return false;\n }\n }\n}, true);\n\nfunction 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\ntoggleDropdownFilters();\ncloseDropdownFiltersOnChange();\n\nfunction keyupSearchTerm(id) {\n const element = document.getElementById(id);\n if (element) {\n element.addEventListener(\"keyup\", (event) => {\n event.preventDefault();\n if (event.keyCode === 13) {\n if (document.querySelector('#' + id).value === '') {\n const originalUrl = window.location.origin + window.location.pathname;\n let queryString = removeFromQueryString('qa');\n window.location.href = originalUrl + queryString;\n } else {\n document.querySelector('.filters__form-search-btn').click();\n }\n }\n });\n }\n}\n\nfunction filterOnSearchTerm() {\n const searchBtn = document.querySelector('.filters__form-search-btn');\n\n if (searchBtn) {\n searchBtn.addEventListener('click', () => {\n const searchValue = document.querySelector('#searchAgenda') !== null ? document.querySelector('#searchAgenda').value : document.querySelector('#searchNews').value;\n const searchTerm = 'qa=' + searchValue;\n const originalUrl = window.location.origin + window.location.pathname;\n let queryString = removeFromQueryString('qa');\n // console.log(searchTerm);\n // console.log(queryString);\n\n if (queryString !== '') {\n queryString += '&' + searchTerm;\n } else {\n queryString = '?' + searchTerm;\n }\n \n window.location.href = originalUrl + queryString;\n\n });\n }\n}\n\nfunction filterOnDate() {\n const dateCheckboxes = document.querySelectorAll('#js-dates-list input');\n if (dateCheckboxes) {\n for (let i = 0; i < dateCheckboxes.length; i++) {\n const checkbox = dateCheckboxes[i];\n\n checkbox.addEventListener('change', (e) => filterDate(e, checkbox));\n }\n }\n}\n\nfunction filterOnMarketSegment() {\n const typeCheckboxes = document.querySelectorAll('#js-marketsegments-list input');\n if (typeCheckboxes) {\n for (let i = 0; i < typeCheckboxes.length; i++) {\n const checkbox = typeCheckboxes[i];\n\n checkbox.addEventListener('change', (e) => filterType(e, checkbox, 'data-ms', 'ms'));\n }\n }\n}\n\nfunction filterOnBusinessActivity() {\n const typeCheckboxes = document.querySelectorAll('#js-businessactivities-list input');\n if (typeCheckboxes) {\n for (let i = 0; i < typeCheckboxes.length; i++) {\n const checkbox = typeCheckboxes[i];\n\n checkbox.addEventListener('change', (e) => filterType(e, checkbox, 'data-ba', 'ba'));\n }\n }\n}\n\nfunction filterOnType() {\n const typeCheckboxes = document.querySelectorAll('#js-types-list input');\n if (typeCheckboxes) {\n for (let i = 0; i < typeCheckboxes.length; i++) {\n const checkbox = typeCheckboxes[i];\n\n checkbox.addEventListener('change', (e) => filterType(e, checkbox, 'data-type', 'type'));\n }\n }\n}\n\nfunction removeFilter() {\n const selectedFilters = document.querySelectorAll('.filters__form-tag');\n if (selectedFilters) {\n for (let i = 0; i < selectedFilters.length; i++) {\n const filter = selectedFilters[i];\n\n filter.addEventListener('click', (e) => {\n const dataAttribute = document.querySelectorAll(\"[data-\" + filter.getAttribute('data-type') + \"='\" + filter.getAttribute('data-filter') + \"']\");\n\n if (filter.getAttribute('data-type') === \"type\") {\n dataAttribute[0].checked = false;\n filterType(null, dataAttribute[0], 'data-type', 'type');\n } else if (filter.getAttribute('data-type') === \"date\") {\n dataAttribute[0].checked = false;\n filterDate(null, dataAttribute[0]);\n } else {\n const originalUrl = window.location.origin + window.location.pathname;\n let queryString = removeFromQueryString('q');\n queryString = removeFromQueryString('page');\n window.location.href = originalUrl + queryString;\n }\n });\n }\n }\n}\n\nfunction removeFromQueryString(key) {\n let queryString = window.location.search;\n\n if (queryString.indexOf(key) > -1) {\n let currentQueryString = queryString.substring(queryString.indexOf(key) - 1);\n \n currentQueryString = currentQueryString.split('&')[0] === '' ? currentQueryString.split('&')[1] : currentQueryString.split('&')[0];\n queryString = queryString.replace(currentQueryString, '');\n \n if (queryString.startsWith('&')) {\n queryString = '?' + queryString.substring(1);\n }\n \n if (queryString.endsWith('&')) {\n queryString = queryString.substring(0, queryString.length - 1);\n }\n }\n\n return queryString;\n}\n\nfunction filterDate(e, checkbox) {\n if (e) {\n e.stopPropagation();\n }\n const selectedDate = \"date=\" + checkbox.getAttribute('data-date');\n const originalUrl = window.location.origin + window.location.pathname;\n let queryString = window.location.search;\n queryString = removeFromQueryString('page');\n\n if (queryString.indexOf('date') > -1) {\n // remove the current filter for date\n queryString = removeFromQueryString('date');\n } else {\n if (queryString !== '') {\n queryString += '&' + selectedDate;\n } else {\n queryString = '?' + selectedDate;\n }\n }\n\n window.location.href = originalUrl + queryString;\n}\n\nfunction filterType(e, checkbox, attribute, type) {\n if (e) {\n e.stopPropagation();\n }\n const selectedType = checkbox.getAttribute(attribute).replaceAll(' ', '%20');\n const originalUrl = window.location.origin + window.location.pathname;\n let queryString = window.location.search;\n queryString = removeFromQueryString('page');\n let currentType = queryString.indexOf(type + '=') > -1 ? queryString.substring(queryString.indexOf(type + '=')) : '';\n if (currentType !== '') {\n currentType = currentType.split('&')[0] === '' ? currentType.split('&')[1] : currentType.split('&')[0];\n }\n\n const tempCurrentType = currentType;\n\n if (checkbox.checked === true) {\n if (currentType !== '') {\n currentType += ',' + selectedType;\n } else {\n currentType = type + '=' + selectedType;\n }\n } else {\n currentType = currentType.split('=')[1].replace(selectedType, '');\n if (currentType.split('=') !== '') {\n if (currentType.split('=')[0].startsWith(',')) {\n currentType = currentType.substring(1);\n }\n\n if (currentType.split('=')[0].endsWith(',')) {\n currentType = currentType.substring(0, currentType.length - 1);\n }\n }\n if (currentType != '') {\n currentType = type + '=' + currentType;\n }\n }\n\n if (queryString !== '') {\n if (queryString.indexOf(type) > -1) {\n queryString = queryString.replace(tempCurrentType, currentType)\n } else {\n queryString += '&' + currentType;\n }\n } else {\n queryString = '?' + currentType;\n }\n queryString = queryString.replace('?&', '?');\n\n if (queryString.endsWith('&')) {\n queryString = queryString.substring(0, queryString.length - 1);\n }\n\n if(queryString === '?') {\n queryString = '';\n }\n\n window.location.href = originalUrl + queryString;\n}\n\nkeyupSearchTerm('searchAgenda');\nkeyupSearchTerm('searchNews');\nfilterOnSearchTerm();\nfilterOnDate();\nfilterOnType();\nfilterOnBusinessActivity();\nfilterOnMarketSegment();\nremoveFilter();\n","function search() {\n const element = document.getElementById('searchResults');\n if (element) {\n element.addEventListener(\"keyup\", (event) => {\n event.preventDefault();\n if (event.keyCode === 13) {\n if (document.querySelector('#searchResults').value === '') {\n const originalUrl = window.location.origin + window.location.pathname;\n let queryString = removeFromQueryString('q');\n window.location.href = originalUrl + queryString;\n } else {\n document.querySelector('.header-searchresults__form-search-btn').click();\n }\n }\n });\n }\n}\nfunction filterOnSearchTerm() {\n const searchBtn = document.querySelector('.header-searchresults__form-search-btn');\n\n if (searchBtn) {\n searchBtn.addEventListener('click', () => {\n const searchTerm = 'q=' + document.querySelector('#searchResults').value;\n const originalUrl = window.location.origin + window.location.pathname;\n let queryString = '?' + searchTerm;\n\n window.location.href = originalUrl + queryString;\n });\n }\n}\n\nsearch();\nfilterOnSearchTerm();","function showShareButtons() {\n const shareButton = document.getElementById('js-share-btn'),\n links = document.getElementById('js-share-links');\n\n if (shareButton !== null) {\n shareButton.addEventListener('click', () => {\n shareButton.classList.add('is-hidden');\n links.classList.remove('is-hidden');\n });\n }\n}\n\nfunction hideShareButtons() {\n const closeButton = document.getElementById('js-share-close'),\n shareButton = document.getElementById('js-share-btn'),\n links = document.getElementById('js-share-links');\n\n if (closeButton !== null) {\n closeButton.addEventListener('click', () => {\n links.classList.add('is-hidden');\n shareButton.classList.remove('is-hidden');\n });\n }\n}\n\nshowShareButtons();\nhideShareButtons();\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 lang = document.querySelector('#js-language');\n button.addEventListener('click', () => {\n el.classList.add('is-visible');\n setTimeout(() => {\n lang.classList.remove('fade-in');\n lang.classList.remove('is-visible');\n }, 444);\n setTimeout(() => {\n el.classList.add('slide-enter');\n button.setAttribute('aria-expanded', 'true');\n }, 1);\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\n button.addEventListener('click', () => {\n el.classList.remove('slide-enter');\n hamburgerButton.setAttribute('aria-expanded', 'false');\n setTimeout(() => {\n el.classList.remove('is-visible');\n }, 444);\n\n let i;\n\n function removeDelayed(el) {\n setTimeout(() => {\n el.classList.remove('is-visible');\n }, 255);\n }\n for (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 > 2) {\n nav.classList.add('has-shadow');\n } else {\n nav.classList.remove('has-shadow');\n }\n}\n\nfunction toggleLanguageDropdown() {\n const button = document.querySelector('#js-language-button');\n const wrap = document.querySelector('#js-language');\n\n button.addEventListener('click', () => {\n if (wrap.classList.contains('is-visible')) {\n wrap.classList.remove('fade-in');\n setTimeout(() => {\n wrap.classList.remove('is-visible');\n }, 200);\n } else {\n closeAllSubnav();\n wrap.classList.add('is-visible');\n setTimeout(() => {\n wrap.classList.add('fade-in');\n });\n }\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 }, 255);\n } else {\n closeAllSubnav();\n target.setAttribute('aria-expanded', 'true');\n parent.classList.add('is-visible');\n setTimeout(() => {\n parent.classList.add('fade');\n }, 100);\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();\ntoggleLanguageDropdown();\ntoggleSubNav();\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