{"version":3,"sources":["jsdelivr-header.js","/npm/tiny-slider-drupal@3.0.0/dist/tiny-slider.js"],"names":[],"mappings":"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","file":"/npm/tiny-slider-drupal@3.0.0/dist/tiny-slider.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/tiny-slider-drupal@3.0.0/dist/tiny-slider.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar win$1 = window;\nvar raf = win$1.requestAnimationFrame || win$1.webkitRequestAnimationFrame || win$1.mozRequestAnimationFrame || win$1.msRequestAnimationFrame || function (cb) {\n  return setTimeout(cb, 16);\n};\n\nvar win = window;\nvar caf = win.cancelAnimationFrame || win.mozCancelAnimationFrame || function (id) {\n  clearTimeout(id);\n};\n\nfunction extend() {\n  var obj,\n      name,\n      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\n  return target;\n}\n\nfunction checkStorageValue(value) {\n  return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}\n\nfunction setLocalStorage(storage, key, value, access) {\n  if (access) {\n    try {\n      storage.setItem(key, value);\n    } catch (e) {}\n  }\n\n  return value;\n}\n\nfunction getSlideId() {\n  var id = window.tnsId;\n  window.tnsId = !id ? 1 : id + 1;\n  return 'tns' + window.tnsId;\n}\n\nfunction 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}\n\nvar docElement = document.documentElement;\n\nfunction setFakeBody(body) {\n  var docOverflow = '';\n\n  if (body.fake) {\n    docOverflow = docElement.style.overflow; //avoid crashing IE8, if background image is used\n\n    body.style.background = ''; //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n\n    body.style.overflow = docElement.style.overflow = 'hidden';\n    docElement.appendChild(body);\n  }\n\n  return docOverflow;\n}\n\nfunction resetFakeBody(body, docOverflow) {\n  if (body.fake) {\n    body.remove();\n    docElement.style.overflow = docOverflow; // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n    // eslint-disable-next-line\n\n    docElement.offsetHeight;\n  }\n}\n\n// get css-calc \nfunction calc() {\n  var doc = document,\n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      div = doc.createElement('div'),\n      result = false;\n  body.appendChild(div);\n\n  try {\n    var str = '(10px * 10)',\n        vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n        val;\n\n    for (var i = 0; i < 3; i++) {\n      val = vals[i];\n      div.style.width = val;\n\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  return result;\n}\n\n// get subpixel support value\nfunction 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  wrapper.className = \"tns-t-subp2\";\n  outer.className = \"tns-t-ct\";\n\n  for (var i = 0; i < count; i++) {\n    str += '<div></div>';\n  }\n\n  outer.innerHTML = str;\n  wrapper.appendChild(outer);\n  body.appendChild(wrapper);\n  supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n  body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n  return supported;\n}\n\nfunction 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  style.type = 'text/css';\n  div.className = 'tns-mq-test';\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  body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n  return position === \"absolute\";\n}\n\n// create and append style sheet\nfunction createStyleSheet(media, nonce) {\n  // Create the <style> tag\n  var style = document.createElement(\"style\"); // style.setAttribute(\"type\", \"text/css\");\n  // Add a media (and/or media query) here if you'd like!\n  // style.setAttribute(\"media\", \"screen\")\n  // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\n\n  if (media) {\n    style.setAttribute(\"media\", media);\n  } // Add nonce attribute for Content Security Policy\n\n\n  if (nonce) {\n    style.setAttribute(\"nonce\", nonce);\n  } // WebKit hack :(\n  // style.appendChild(document.createTextNode(\"\"));\n  // Add the <style> element to the page\n\n\n  document.querySelector('head').appendChild(style);\n  return style.sheet ? style.sheet : style.styleSheet;\n}\n\n// cross browsers addRule method\nfunction addCSSRule(sheet, selector, rules, index) {\n  // return raf(function() {\n  'insertRule' in sheet ? sheet.insertRule(selector + '{' + rules + '}', index) : sheet.addRule(selector, rules, index); // });\n}\n\n// cross browsers addRule method\nfunction removeCSSRule(sheet, index) {\n  // return raf(function() {\n  'deleteRule' in sheet ? sheet.deleteRule(index) : sheet.removeRule(index); // });\n}\n\nfunction getCssRulesLength(sheet) {\n  var rule = 'insertRule' in sheet ? sheet.cssRules : sheet.rules;\n  return rule.length;\n}\n\nfunction toDegree(y, x) {\n  return Math.atan2(y, x) * (180 / Math.PI);\n}\n\nfunction getTouchDirection(angle, range) {\n  var direction = false,\n      gap = Math.abs(90 - Math.abs(angle));\n\n  if (gap >= 90 - range) {\n    direction = 'horizontal';\n  } else if (gap <= range) {\n    direction = 'vertical';\n  }\n\n  return direction;\n}\n\n// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nfunction forEach(arr, callback, scope) {\n  for (var i = 0, l = arr.length; i < l; i++) {\n    callback.call(scope, arr[i], i);\n  }\n}\n\nvar classListSupport = ('classList' in document.createElement('_'));\n\nvar hasClass = classListSupport ? function (el, str) {\n  return el.classList.contains(str);\n} : function (el, str) {\n  return el.className.indexOf(str) >= 0;\n};\n\nvar addClass = classListSupport ? function (el, str) {\n  if (!hasClass(el, str)) {\n    el.classList.add(str);\n  }\n} : function (el, str) {\n  if (!hasClass(el, str)) {\n    el.className += ' ' + str;\n  }\n};\n\nvar removeClass = classListSupport ? function (el, str) {\n  if (hasClass(el, str)) {\n    el.classList.remove(str);\n  }\n} : function (el, str) {\n  if (hasClass(el, str)) {\n    el.className = el.className.replace(str, '');\n  }\n};\n\nfunction hasAttr(el, attr) {\n  return el.hasAttribute(attr);\n}\n\nfunction getAttr(el, attr) {\n  return el.getAttribute(attr);\n}\n\nfunction isNodeList(el) {\n  // Only NodeList has the \"item()\" function\n  return typeof el.item !== \"undefined\";\n}\n\nfunction setAttrs(els, attrs) {\n  els = isNodeList(els) || els instanceof Array ? els : [els];\n\n  if (Object.prototype.toString.call(attrs) !== '[object Object]') {\n    return;\n  }\n\n  for (var i = els.length; i--;) {\n    for (var key in attrs) {\n      els[i].setAttribute(key, attrs[key]);\n    }\n  }\n}\n\nfunction removeAttrs(els, attrs) {\n  els = isNodeList(els) || els instanceof Array ? els : [els];\n  attrs = attrs instanceof Array ? attrs : [attrs];\n  var attrLength = attrs.length;\n\n  for (var i = els.length; i--;) {\n    for (var j = attrLength; j--;) {\n      els[i].removeAttribute(attrs[j]);\n    }\n  }\n}\n\nfunction arrayFromNodeList(nl) {\n  var arr = [];\n\n  for (var i = 0, l = nl.length; i < l; i++) {\n    arr.push(nl[i]);\n  }\n\n  return arr;\n}\n\nfunction hideElement(el, forceHide) {\n  if (el.style.display !== 'none') {\n    el.style.display = 'none';\n  }\n}\n\nfunction showElement(el, forceHide) {\n  if (el.style.display === 'none') {\n    el.style.display = '';\n  }\n}\n\nfunction isVisible(el) {\n  return window.getComputedStyle(el).display !== 'none';\n}\n\nfunction 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    prefixes.forEach(function (prefix) {\n      if (prefix !== 'ms' || props === 'transform') {\n        arr.push(prefix + Props);\n      }\n    });\n    props = arr;\n  }\n\n  var el = document.createElement('fakeelement');\n      props.length;\n\n  for (var i = 0; i < props.length; i++) {\n    var prop = props[i];\n\n    if (el.style[prop] !== undefined) {\n      return prop;\n    }\n  }\n\n  return false; // explicit for ie9-\n}\n\nfunction has3DTransforms(tf) {\n  if (!tf) {\n    return false;\n  }\n\n  if (!window.getComputedStyle) {\n    return false;\n  }\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  cssTF += 'transform'; // Add it to the body to get the computed style\n\n  body.insertBefore(el, null);\n  el.style[tf] = 'translate3d(1px,1px,1px)';\n  has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n  body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n  return has3d !== undefined && has3d.length > 0 && has3d !== \"none\";\n}\n\n// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nfunction getEndProperty(propIn, propOut) {\n  var endProp = false;\n\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\n  return endProp;\n}\n\n// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\n\ntry {\n  var opts = Object.defineProperty({}, 'passive', {\n    get: function () {\n      supportsPassive = true;\n    }\n  });\n  window.addEventListener(\"test\", null, opts);\n} catch (e) {}\n\nvar passiveOption = supportsPassive ? {\n  passive: true\n} : false;\n\nfunction 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}\n\nfunction 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}\n\nfunction 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\n      if (this.topics[eventName]) {\n        this.topics[eventName].forEach(function (fn) {\n          fn(data, eventName);\n        });\n      }\n    }\n  };\n}\n\nfunction jsTransform(element, attr, prefix, postfix, to, duration, callback) {\n  var tick = Math.min(duration, 10),\n      unit = to.indexOf('%') >= 0 ? '%' : 'px',\n      to = to.replace(unit, ''),\n      from = Number(element.style[attr].replace(prefix, '').replace(postfix, '').replace(unit, '')),\n      positionTick = (to - from) / duration * tick;\n  setTimeout(moveElement, tick);\n\n  function moveElement() {\n    duration -= tick;\n    from += positionTick;\n    element.style[attr] = prefix + from + unit + postfix;\n\n    if (duration > 0) {\n      setTimeout(moveElement, tick);\n    } else {\n      callback();\n    }\n  }\n}\n\n// Object.keys\nif (!Object.keys) {\n  Object.keys = function (object) {\n    var keys = [];\n\n    for (var name in object) {\n      if (Object.prototype.hasOwnProperty.call(object, name)) {\n        keys.push(name);\n      }\n    }\n\n    return keys;\n  };\n} // ChildNode.remove\n\n\nif (!(\"remove\" in Element.prototype)) {\n  Element.prototype.remove = function () {\n    if (this.parentNode) {\n      this.parentNode.removeChild(this);\n    }\n  };\n}\nvar 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  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\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\n      if (!localStorageAccess) {\n        tnsStorage = {};\n      }\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) {\n          tnsStorage.removeItem(item);\n        });\n      } // update browserInfo\n\n\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); // get element nodes from selectors\n\n  var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n      tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\n      optionsElements = {};\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) {\n          console.warn('Can\\'t find', options[item]);\n        }\n\n        return;\n      }\n    }\n  }); // make sure at least 1 slide\n\n  if (options.container.children.length < 1) {\n    if (supportConsoleWarn) {\n      console.warn('No slides found in', options.container);\n    }\n\n    return;\n  } // update options\n\n\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\n    for (var key in responsive) {\n      var val = responsive[key]; // update responsive\n      // from: 300: 2\n      // to:\n      //   300: {\n      //     items: 2\n      //   }\n\n      val = typeof val === 'number' ? {\n        items: val\n      } : val;\n      responsiveTem[key] = val;\n    }\n\n    responsive = responsiveTem;\n    responsiveTem = null;\n  } // update options\n\n\n  function updateOptions(obj) {\n    for (var key in obj) {\n      if (!carousel) {\n        if (key === 'slideBy') {\n          obj[key] = 'page';\n        }\n\n        if (key === 'edgePadding') {\n          obj[key] = false;\n        }\n\n        if (key === 'autoHeight') {\n          obj[key] = false;\n        }\n      } // update responsive options\n\n\n      if (key === 'responsive') {\n        updateOptions(obj[key]);\n      }\n    }\n  }\n\n  if (!carousel) {\n    updateOptions(options);\n  } // === define and set variables ===\n\n\n  if (!carousel) {\n    options.axis = 'horizontal';\n    options.slideBy = 'page';\n    options.edgePadding = false;\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\n  if (responsive) {\n    setBreakpointZone();\n  }\n\n  if (carousel) {\n    container.className += ' tns-vpfix';\n  } // fixedWidth: viewport > rightBoundary > indexMax\n\n\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,\n      // 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 () {\n        return center && !loop ? slideCount - 1 : Math.ceil(-rightBoundary / (fixedWidth + gutter));\n      };\n    } else if (autoWidth) {\n      return function () {\n        for (var i = 0; i < slideCountNew; i++) {\n          if (slidePositions[i] >= -rightBoundary) {\n            return i;\n          }\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      getCurrentSlide();\n      var indexMin = 0,\n      indexMax = !autoWidth ? getIndexMax() : null,\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 = {\n    'visibilitychange': onVisibilityChange\n  },\n      docmentKeydownEvent = {\n    'keydown': onDocumentKeydown\n  },\n      touchEvents = {\n    'touchstart': onPanStart,\n    'touchmove': onPanMove,\n    'touchend': onPanEnd,\n    'touchcancel': onPanEnd\n  },\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; // controls\n\n\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  } // nav\n\n\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 = Drupal.t('tns.keyword.Carousel_page:_'),\n        navStrCurrent = Drupal.t('tns.keyword._(Current_slide)');\n  } // autoplay\n\n\n  if (hasAutoplay) {\n    var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n        autoplayButton = options.autoplayButton,\n        autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n        autoplayHtmlStrings = ['<span class=\\'tns-visually-hidden\\'>', '</span>'],\n        autoplayTimer,\n        animating,\n        autoplayHoverPaused,\n        autoplayUserPaused,\n        autoplayVisibilityPaused;\n  }\n\n  if (hasTouch || hasMouseDrag) {\n    var initPosition = {},\n        lastPosition = {},\n        translateInit,\n        panStart = false,\n        rafIndex,\n        getDist = horizontal ? function (a, b) {\n      return a.x - b.x;\n    } : function (a, b) {\n      return a.y - b.y;\n    };\n  } // disable slider when slidecount <= items\n\n\n  if (!autoWidth) {\n    resetVariblesWhenDisable(disable || freeze);\n  }\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  if (carousel) {\n    container.className = container.className.replace('tns-vpfix', '');\n  }\n\n  initStructure();\n  initSheet();\n  initSliderTransform(); // === COMMON FUNCTIONS === //\n\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\n    while (tem < 0) {\n      tem += slideCount;\n    }\n\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) {\n      i = index;\n    }\n\n    if (carousel) {\n      i -= cloneCount;\n    }\n\n    while (i < 0) {\n      i += slideCount;\n    }\n\n    return Math.floor(i % slideCount);\n  }\n\n  function getCurrentNavIndex() {\n    var absIndex = getAbsIndex(),\n        result;\n    result = navAsThumbnails ? absIndex : fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) : Math.floor(absIndex / items); // set active nav to the last one when reaches the right edge\n\n    if (!loop && carousel && index === indexMax) {\n      result = pages - 1;\n    }\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; // most cases\n    } else {\n      var str = fixedWidth ? 'fixedWidth' : 'items',\n          arr = [];\n\n      if (fixedWidth || options[str] < slideCount) {\n        arr.push(options[str]);\n      }\n\n      if (responsive) {\n        for (var bp in responsive) {\n          var tem = responsive[bp][str];\n\n          if (tem && (fixedWidth || tem < slideCount)) {\n            arr.push(tem);\n          }\n        }\n      }\n\n      if (!arr.length) {\n        arr.push(0);\n      }\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    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) {\n      return;\n    }\n\n    var div = doc.createElement('div'),\n        rect,\n        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]) {\n            return true;\n          }\n        }\n      }\n\n      return false;\n    }\n  } // get option:\n  // fixed width: viewport, fixedWidth, gutter => items\n  // others: window width => all variables\n  // all: items => slideBy\n\n\n  function getOption(item, ww) {\n    if (ww == null) {\n      ww = windowWidth;\n    }\n\n    if (item === 'items' && fixedWidth) {\n      return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\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]) {\n              result = responsive[bp][item];\n            }\n          }\n        }\n      }\n\n      if (item === 'slideBy' && result === 'page') {\n        result = getOption('items');\n      }\n\n      if (!carousel && (item === 'slideBy' || item === 'items')) {\n        result = Math.floor(result);\n      }\n\n      return result;\n    }\n  }\n\n  function getSlideMarginLeft(i) {\n    return CALC ? CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' : 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\n      if (gutterTem) {\n        gap -= gutterTem;\n      }\n\n      str = horizontal ? 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' : '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) {\n      str += getTransitionDurationStyle(speedTem);\n    }\n\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 ? CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' : 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) {\n        itemsTem = Math.floor(itemsTem);\n      }\n\n      var dividend = carousel ? slideCountNew : itemsTem;\n      width = CALC ? CALC + '(100% / ' + dividend + ')' : 100 / dividend + '%';\n    }\n\n    width = 'width:' + width; // inner slider: overwrite outer slider styles\n\n    return nested !== 'inner' ? width + ';' : width + ' !important;';\n  }\n\n  function getSlideGutterStyle(gutterTem) {\n    var str = ''; // gutter maybe interger || 0\n    // so can't use 'if (gutter)'\n\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\n    if (prefix) {\n      prefix = '-' + prefix + '-';\n    }\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        hasOption('gutter');\n    outerWrapper.className = classOuter;\n    innerWrapper.className = classInner;\n    outerWrapper.id = slideId + '-ow';\n    innerWrapper.id = slideId + '-iw'; // set container properties\n\n    if (container.id === '') {\n      container.id = slideId;\n    }\n\n    newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n    newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n\n    if (autoWidth) {\n      newContainerClasses += ' tns-autowidth';\n    }\n\n    newContainerClasses += ' tns-' + options.axis;\n    container.className += newContainerClasses; // add constrain layer for carousel\n\n    if (carousel) {\n      middleWrapper = doc.createElement('div');\n      middleWrapper.id = slideId + '-mw';\n      middleWrapper.className = 'tns-ovh';\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); // add id, class, aria attributes\n    // before clone slides\n\n    forEach(slideItems, function (item, i) {\n      addClass(item, 'tns-item');\n\n      if (!item.id) {\n        item.id = slideId + '-item' + i;\n      }\n\n      if (!carousel && animateNormal) {\n        addClass(item, animateNormal);\n      }\n\n      setAttrs(item, {\n        'aria-hidden': 'true',\n        'tabindex': '-1'\n      });\n    }); // ## clone slides\n    // carousel: n + slides + n\n    // gallery:      slides + n\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  function initSliderTransform() {\n    // ## images loaded/failed\n    if (hasOption('autoHeight') || autoWidth || !horizontal) {\n      var imgs = container.querySelectorAll('img'); // add img load event listener\n\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            img.src = src; // data img\n          } else {\n            imgLoaded(img);\n          }\n        }\n      }); // set imgsComplete\n\n      raf(function () {\n        imgsLoadedCheck(arrayFromNodeList(imgs), function () {\n          imgsComplete = true;\n        });\n      }); // reset imgs for auto height: check visible imgs only\n\n      if (hasOption('autoHeight')) {\n        imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1));\n      }\n\n      lazyload ? initSliderTransformStyleCheck() : raf(function () {\n        imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck);\n      });\n    } else {\n      // set container transform property\n      if (carousel) {\n        doContainerTransformSilent();\n      } // update slider tools and events\n\n\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        Math.abs(left - right) <= 1 ? initSliderTransformCore() : setTimeout(function () {\n          stylesApplicationCheck();\n        }, 16);\n      })();\n    } else {\n      initSliderTransformCore();\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\n        if (freezable) {\n          freeze = getFreeze();\n        }\n\n        indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n\n        resetVariblesWhenDisable(disable || freeze);\n      } else {\n        updateContentWrapperHeight();\n      }\n    } // set container transform property\n\n\n    if (carousel) {\n      doContainerTransformSilent();\n    } // update slider tools and events\n\n\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    } // #### LAYOUT\n    // ## INLINE-BLOCK VS FLOAT\n    // ## PercentageLayout:\n    // slides: inline-block\n    // remove blank space between slides by set font-size: 0\n    // ## Non PercentageLayout:\n    // slides: float\n    //         margin-right: -100%\n    //         margin-left: ~\n    // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n\n\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    } // ## BASIC STYLES\n\n\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      } // inner wrapper styles\n\n\n      str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n      addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet)); // container styles\n\n      if (carousel) {\n        str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n\n        if (TRANSITIONDURATION) {\n          str += getTransitionDurationStyle(speed);\n        }\n\n        addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n      } // slide styles\n\n\n      str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n\n      if (options.gutter) {\n        str += getSlideGutterStyle(options.gutter);\n      } // set gallery items transition-duration\n\n\n      if (!carousel) {\n        if (TRANSITIONDURATION) {\n          str += getTransitionDurationStyle(speed);\n        }\n\n        if (ANIMATIONDURATION) {\n          str += getAnimationDurationStyle(speed);\n        }\n      }\n\n      if (str) {\n        addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\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\n    } else {\n      // middle wrapper styles\n      update_carousel_transition_duration(); // inner wrapper styles\n\n      innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight); // container styles\n\n      if (carousel && horizontal && !autoWidth) {\n        container.style.width = getContainerWidth(fixedWidth, gutter, items);\n      } // slide styles\n\n\n      var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n\n      if (gutter) {\n        str += getSlideGutterStyle(gutter);\n      } // append to the last line\n\n\n      if (str) {\n        addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n      }\n    } // ## MEDIAQUERIES\n\n\n    if (responsive && CSSMQ) {\n      for (var bp in responsive) {\n        // bp: convert string to number\n        bp = parseInt(bp);\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); // middle wrapper string\n\n        if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n          middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n        } // inner wrapper string\n\n\n        if ('edgePadding' in opts || 'gutter' in opts) {\n          innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n        } // container string\n\n\n        if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || fixedWidth && 'gutter' in opts)) {\n          containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n        }\n\n        if (TRANSITIONDURATION && 'speed' in opts) {\n          containerStr += getTransitionDurationStyle(speedBP);\n        }\n\n        if (containerStr) {\n          containerStr = '#' + slideId + '{' + containerStr + '}';\n        } // slide string\n\n\n        if ('fixedWidth' in opts || fixedWidth && 'gutter' in opts || !carousel && 'items' in opts) {\n          slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n        }\n\n        if ('gutter' in opts) {\n          slideStr += getSlideGutterStyle(gutterBP);\n        } // set gallery items transition-duration\n\n\n        if (!carousel && 'speed' in opts) {\n          if (TRANSITIONDURATION) {\n            slideStr += getTransitionDurationStyle(speedBP);\n          }\n\n          if (ANIMATIONDURATION) {\n            slideStr += getAnimationDurationStyle(speedBP);\n          }\n        }\n\n        if (slideStr) {\n          slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}';\n        } // add up\n\n\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(); // == live region ==\n\n    outerWrapper.insertAdjacentHTML('afterbegin', '<div class=\"tns-liveregion tns-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">' + Drupal.t('tns.keyword.Slide') + ' <span class=\"current\">' + getLiveRegionStr() + '</span>' + Drupal.t('tns.keyword._of_') + slideCount + '</div>');\n    liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current'); // == autoplayInit ==\n\n    if (hasAutoplay) {\n      var txt = autoplay ? 'stop' : 'start';\n      var localizedText = autoplay ? Drupal.t('tns.keyword.Stop') : Drupal.t('tns.keyword.Start');\n\n      if (autoplayButton) {\n        setAttrs(autoplayButton, {\n          'data-action': txt\n        });\n      } else if (options.autoplayButtonOutput) {\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '<button type=\"button\" data-action=\"' + txt + '\">' + autoplayHtmlStrings[0] + localizedText + autoplayHtmlStrings[1] + autoplayText[0] + '</button>');\n        autoplayButton = outerWrapper.querySelector('[data-action]');\n      } // add event\n\n\n      if (autoplayButton) {\n        addEvents(autoplayButton, {\n          'click': toggleAutoplay\n        });\n      }\n\n      if (autoplay) {\n        startAutoplay();\n\n        if (autoplayHoverPause) {\n          addEvents(container, hoverEvents);\n        }\n\n        if (autoplayResetOnVisibility) {\n          addEvents(container, visibilityEvent);\n        }\n      }\n    } // == navInit ==\n\n\n    if (hasNav) {\n      // will not hide the navs in case they're thumbnails\n\n      if (navContainer) {\n        setAttrs(navContainer, {\n          'aria-label': Drupal.t('tns.keyword.Carousel_pagination')\n        });\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        }); // generated nav\n      } else {\n        var navHtml = '',\n            hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n\n        for (var i = 0; i < slideCount; i++) {\n          // hide nav items by default\n          navHtml += '<button type=\"button\" data-nav=\"' + i + '\" tabindex=\"-1\" aria-controls=\"' + slideId + '\" ' + hiddenStr + ' aria-label=\"' + navStr + (i + 1) + '\"></button>';\n        }\n\n        navHtml = '<div class=\"tns-nav\" aria-label=\"' + Drupal.t(\"tns.keyword.Carousel_pagination\") + '\">' + navHtml + '</div>';\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n        navContainer = outerWrapper.querySelector('.tns-nav');\n        navItems = navContainer.children;\n      }\n\n      updateNavVisibility(); // add transition\n\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], {\n        'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent\n      });\n      removeAttrs(navItems[navCurrentIndex], 'tabindex');\n      addClass(navItems[navCurrentIndex], navActiveClass); // add events\n\n      addEvents(navContainer, navEvents);\n    } // == controlsInit ==\n\n\n    if (hasControls) {\n      if (!controlsContainer && (!prevButton || !nextButton)) {\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '<div class=\"tns-controls\" aria-label=\"' + Drupal.t(\"tns.keyword.Carousel_navigation\") + '\" tabindex=\"0\"><button type=\"button\" data-controls=\"prev\" tabindex=\"-1\" aria-controls=\"' + slideId + '\">' + controlsText[0] + '</button><button type=\"button\" data-controls=\"next\" tabindex=\"-1\" aria-controls=\"' + slideId + '\">' + controlsText[1] + '</button></div>');\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, {\n          'data-controls': 'prev'\n        });\n        setAttrs(nextButton, {\n          'data-controls': 'next'\n        });\n      }\n\n      prevIsButton = isButton(prevButton);\n      nextIsButton = isButton(nextButton);\n      updateControlsStatus(); // add events\n\n      if (controlsContainer) {\n        addEvents(controlsContainer, controlsEvents);\n      } else {\n        addEvents(prevButton, controlsEvents);\n        addEvents(nextButton, controlsEvents);\n      }\n    } // hide tools if needed\n\n\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) {\n      addEvents(container, touchEvents, options.preventScrollOnTouch);\n    }\n\n    if (mouseDrag) {\n      addEvents(container, dragEvents);\n    }\n\n    if (arrowKeys) {\n      addEvents(doc, docmentKeydownEvent);\n    }\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, {\n        'resize': onResize\n      });\n    }\n\n    if (autoHeight) {\n      if (nested === 'outer') {\n        events.on('innerLoaded', doAutoHeight);\n      } else if (!disable) {\n        doAutoHeight();\n      }\n    }\n\n    doLazyLoad();\n\n    if (disable) {\n      disableSlider();\n    } else if (freeze) {\n      freezeSlider();\n    }\n\n    events.on('indexChanged', additionalUpdates);\n\n    if (nested === 'inner') {\n      events.emit('innerLoaded', info());\n    }\n\n    if (typeof onInit === 'function') {\n      onInit(info());\n    }\n\n    isOn = true;\n  }\n\n  function destroy() {\n    // sheet\n    sheet.disabled = true;\n\n    if (sheet.ownerNode) {\n      sheet.ownerNode.remove();\n    } // remove win event listeners\n\n\n    removeEvents(win, {\n      'resize': onResize\n    }); // arrowKeys, controls, nav\n\n    if (arrowKeys) {\n      removeEvents(doc, docmentKeydownEvent);\n    }\n\n    if (controlsContainer) {\n      removeEvents(controlsContainer, controlsEvents);\n    }\n\n    if (navContainer) {\n      removeEvents(navContainer, navEvents);\n    } // autoplay\n\n\n    removeEvents(container, hoverEvents);\n    removeEvents(container, visibilityEvent);\n\n    if (autoplayButton) {\n      removeEvents(autoplayButton, {\n        'click': toggleAutoplay\n      });\n    }\n\n    if (autoplay) {\n      clearInterval(autoplayTimer);\n    } // container\n\n\n    if (carousel && TRANSITIONEND) {\n      var eve = {};\n      eve[TRANSITIONEND] = onTransitionEnd;\n      removeEvents(container, eve);\n    }\n\n    if (touch) {\n      removeEvents(container, touchEvents);\n    }\n\n    if (mouseDrag) {\n      removeEvents(container, dragEvents);\n    } // cache Object values in options && reset HTML\n\n\n    var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\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    }); // reset variables\n\n    tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = panStart = rafIndex = getDist = touch = mouseDrag = null; // check variables\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') {\n        this[a] = null;\n      }\n    }\n\n    isOn = false;\n  } // === ON RESIZE ===\n  // responsive || fixedWidth || autoWidth || !horizontal\n\n\n  function onResize(e) {\n    raf(function () {\n      resizeTasks(getEvent(e));\n    });\n  }\n\n  function resizeTasks(e) {\n    if (!isOn) {\n      return;\n    }\n\n    if (nested === 'outer') {\n      events.emit('outerResized', info(e));\n    }\n\n    windowWidth = getWindowWidth();\n    var bpChanged,\n        breakpointZoneTem = breakpointZone,\n        needContainerTransform = false;\n\n    if (responsive) {\n      setBreakpointZone();\n      bpChanged = breakpointZoneTem !== breakpointZone; // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n\n      if (bpChanged) {\n        events.emit('newBreakpointStart', info(e));\n      }\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    } // get option:\n    // fixed width: viewport, fixedWidth, gutter => items\n    // others: window width => all variables\n    // all: items => slideBy\n\n\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    } // update options\n\n\n    resetVariblesWhenDisable(disable);\n    viewport = getViewportWidth(); // <= edgePadding, gutter\n\n    if ((!horizontal || autoWidth) && !disable) {\n      setSlidePositions();\n\n      if (!horizontal) {\n        updateContentWrapperHeight(); // <= setSlidePositions\n\n        needContainerTransform = true;\n      }\n    }\n\n    if (fixedWidth || autoWidth) {\n      rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n      // fixedWidth: <= viewport, fixedWidth, gutter\n\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) {\n          indexMax = getIndexMax();\n        } // <= items\n        // check index before transform in case\n        // slider reach the right edge then items become bigger\n\n\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\n    if (!autoplay) {\n      autoplayHoverPause = autoplayResetOnVisibility = false;\n    }\n\n    if (arrowKeys !== arrowKeysTem) {\n      arrowKeys ? addEvents(doc, docmentKeydownEvent) : removeEvents(doc, docmentKeydownEvent);\n    }\n\n    if (controls !== controlsTem) {\n      if (controls) {\n        if (controlsContainer) {\n          showElement(controlsContainer);\n        } else {\n          if (prevButton) {\n            showElement(prevButton);\n          }\n\n          if (nextButton) {\n            showElement(nextButton);\n          }\n        }\n      } else {\n        if (controlsContainer) {\n          hideElement(controlsContainer);\n        } else {\n          if (prevButton) {\n            hideElement(prevButton);\n          }\n\n          if (nextButton) {\n            hideElement(nextButton);\n          }\n        }\n      }\n    }\n\n    if (nav !== navTem) {\n      if (nav) {\n        showElement(navContainer);\n        updateNavVisibility();\n      } else {\n        hideElement(navContainer);\n      }\n    }\n\n    if (touch !== touchTem) {\n      touch ? addEvents(container, touchEvents, options.preventScrollOnTouch) : removeEvents(container, touchEvents);\n    }\n\n    if (mouseDrag !== mouseDragTem) {\n      mouseDrag ? addEvents(container, dragEvents) : removeEvents(container, dragEvents);\n    }\n\n    if (autoplay !== autoplayTem) {\n      if (autoplay) {\n        if (autoplayButton) {\n          showElement(autoplayButton);\n        }\n\n        if (!animating && !autoplayUserPaused) {\n          startAutoplay();\n        }\n      } else {\n        if (autoplayButton) {\n          hideElement(autoplayButton);\n        }\n\n        if (animating) {\n          stopAutoplay();\n        }\n      }\n    }\n\n    if (autoplayHoverPause !== autoplayHoverPauseTem) {\n      autoplayHoverPause ? addEvents(container, hoverEvents) : removeEvents(container, hoverEvents);\n    }\n\n    if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n      autoplayResetOnVisibility ? addEvents(doc, visibilityEvent) : removeEvents(doc, visibilityEvent);\n    }\n\n    if (bpChanged) {\n      if (fixedWidth !== fixedWidthTem || center !== centerTem) {\n        needContainerTransform = true;\n      }\n\n      if (autoHeight !== autoHeightTem) {\n        if (!autoHeight) {\n          innerWrapper.style.height = '';\n        }\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\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)) {\n        needContainerTransform = true;\n      }\n    }\n\n    if (itemsChanged || fixedWidth && !autoWidth) {\n      pages = getPages();\n      updateNavVisibility();\n    }\n\n    indChanged = index !== indexTem;\n\n    if (indChanged) {\n      events.emit('indexChanged', info());\n      needContainerTransform = true;\n    } else if (itemsChanged) {\n      if (!indChanged) {\n        additionalUpdates();\n      }\n    } else if (fixedWidth || autoWidth) {\n      doLazyLoad();\n      updateSlideStatus();\n      updateLiveRegion();\n    }\n\n    if (itemsChanged && !carousel) {\n      updateGallerySlidePositions();\n    }\n\n    if (!disable && !freeze) {\n      // non-mediaqueries: IE8\n      if (bpChanged && !CSSMQ) {\n        // middle wrapper styles\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          } // slide styles\n\n\n          var str = getSlideWidthStyle(fixedWidth, gutter, items) + getSlideGutterStyle(gutter); // remove the last line and\n          // add new styles\n\n          removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n          addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n        }\n      } // auto height\n\n\n      if (autoHeight) {\n        doAutoHeight();\n      }\n\n      if (needContainerTransform) {\n        doContainerTransformSilent();\n        indexCached = index;\n      }\n    }\n\n    if (bpChanged) {\n      events.emit('newBreakpointEnd', info(e));\n    }\n  } // === INITIALIZATION FUNCTIONS === //\n\n\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\n    for (var bp in responsive) {\n      bp = parseInt(bp); // convert string to number\n\n      if (windowWidth >= bp) {\n        breakpointZone = bp;\n      }\n    }\n  } // (slideBy, indexMin, indexMax) => index\n\n\n  var updateIndex = function () {\n    return loop ? carousel ? // loop + carousel\n    function () {\n      var leftEdge = indexMin,\n          rightEdge = indexMax;\n      leftEdge += slideBy;\n      rightEdge -= slideBy; // adjust edges when has edge paddings\n      // or fixed-width slider with extra space on the right side\n\n      if (edgePadding) {\n        leftEdge += 1;\n        rightEdge -= 1;\n      } else if (fixedWidth) {\n        if ((viewport + gutter) % (fixedWidth + gutter)) {\n          rightEdge -= 1;\n        }\n      }\n\n      if (cloneCount) {\n        if (index > rightEdge) {\n          index -= slideCount;\n        } else if (index < leftEdge) {\n          index += slideCount;\n        }\n      }\n    } : // loop + gallery\n    function () {\n      if (index > indexMax) {\n        while (index >= indexMin + slideCount) {\n          index -= slideCount;\n        }\n      } else if (index < indexMin) {\n        while (index <= indexMax - slideCount) {\n          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) {\n      hideElement(autoplayButton);\n    }\n\n    if (!nav && navContainer) {\n      hideElement(navContainer);\n    }\n\n    if (!controls) {\n      if (controlsContainer) {\n        hideElement(controlsContainer);\n      } else {\n        if (prevButton) {\n          hideElement(prevButton);\n        }\n\n        if (nextButton) {\n          hideElement(nextButton);\n        }\n      }\n    }\n  }\n\n  function enableUI() {\n    if (autoplay && autoplayButton) {\n      showElement(autoplayButton);\n    }\n\n    if (nav && navContainer) {\n      showElement(navContainer);\n    }\n\n    if (controls) {\n      if (controlsContainer) {\n        showElement(controlsContainer);\n      } else {\n        if (prevButton) {\n          showElement(prevButton);\n        }\n\n        if (nextButton) {\n          showElement(nextButton);\n        }\n      }\n    }\n  }\n\n  function freezeSlider() {\n    if (frozen) {\n      return;\n    } // remove edge padding from inner wrapper\n\n\n    if (edgePadding) {\n      innerWrapper.style.margin = '0px';\n    } // add class tns-transparent to cloned slides\n\n\n    if (cloneCount) {\n      var str = 'tns-transparent';\n\n      for (var i = cloneCount; i--;) {\n        if (carousel) {\n          addClass(slideItems[i], str);\n        }\n\n        addClass(slideItems[slideCountNew - i - 1], str);\n      }\n    } // update tools\n\n\n    disableUI();\n    frozen = true;\n  }\n\n  function unfreezeSlider() {\n    if (!frozen) {\n      return;\n    } // restore edge padding for inner wrapper\n    // for mordern browsers\n\n\n    if (edgePadding && CSSMQ) {\n      innerWrapper.style.margin = '';\n    } // remove class tns-transparent to cloned slides\n\n\n    if (cloneCount) {\n      var str = 'tns-transparent';\n\n      for (var i = cloneCount; i--;) {\n        if (carousel) {\n          removeClass(slideItems[i], str);\n        }\n\n        removeClass(slideItems[slideCountNew - i - 1], str);\n      }\n    } // update tools\n\n\n    enableUI();\n    frozen = false;\n  }\n\n  function disableSlider() {\n    if (disabled) {\n      return;\n    }\n\n    sheet.disabled = true;\n    container.className = container.className.replace(newContainerClasses.substring(1), '');\n    removeAttrs(container, ['style']);\n\n    if (loop) {\n      for (var j = cloneCount; j--;) {\n        if (carousel) {\n          hideElement(slideItems[j]);\n        }\n\n        hideElement(slideItems[slideCountNew - j - 1]);\n      }\n    } // vertical slider\n\n\n    if (!horizontal || !carousel) {\n      removeAttrs(innerWrapper, ['style']);\n    } // gallery\n\n\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    } // update tools\n\n\n    disableUI();\n    disabled = true;\n  }\n\n  function enableSlider() {\n    if (!disabled) {\n      return;\n    }\n\n    sheet.disabled = false;\n    container.className += newContainerClasses;\n    doContainerTransformSilent();\n\n    if (loop) {\n      for (var j = cloneCount; j--;) {\n        if (carousel) {\n          showElement(slideItems[j]);\n        }\n\n        showElement(slideItems[slideCountNew - j - 1]);\n      }\n    } // gallery\n\n\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    } // update tools\n\n\n    enableUI();\n    disabled = false;\n  }\n\n  function updateLiveRegion() {\n    var str = getLiveRegionStr();\n\n    if (liveregionCurrent.innerHTML !== str) {\n      liveregionCurrent.innerHTML = str;\n    }\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) {\n      val = getContainerTransformValue();\n    }\n\n    var start = index,\n        end,\n        rangestart,\n        rangeend; // get range start, range end for autoWidth and fixedWidth\n\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    } // get start, end\n    // - check auto width\n\n\n    if (autoWidth) {\n      slidePositions.forEach(function (point, i) {\n        if (i < slideCountNew) {\n          if ((center || edgePadding) && point <= rangestart + 0.5) {\n            start = i;\n          }\n\n          if (rangeend - point >= 0.5) {\n            end = i;\n          }\n        }\n      }); // - check percentage width, fixed width\n    } else {\n      if (fixedWidth) {\n        var cell = fixedWidth + gutter;\n\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      } else {\n        if (center || edgePadding) {\n          var a = items - 1;\n\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      getImageArray.apply(null, arg).forEach(function (img) {\n        if (!hasClass(img, imgCompleteClass)) {\n          // stop propagation transitionend event to container\n          var eve = {};\n\n          eve[TRANSITIONEND] = function (e) {\n            e.stopPropagation();\n          };\n\n          addEvents(img, eve);\n          addEvents(img, imgEvents); // update src\n\n          img.src = getAttr(img, 'data-src'); // update srcset\n\n          var srcset = getAttr(img, 'data-srcset');\n\n          if (srcset) {\n            img.srcset = srcset;\n          }\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\n    if (!imgSelector) {\n      imgSelector = 'img';\n    }\n\n    while (start <= end) {\n      forEach(slideItems[start].querySelectorAll(imgSelector), function (img) {\n        imgs.push(img);\n      });\n      start++;\n    }\n\n    return imgs;\n  } // check if all visible images are loaded\n  // and update container height if it's done\n\n\n  function doAutoHeight() {\n    var imgs = getImageArray.apply(null, getVisibleSlideRange());\n    raf(function () {\n      imgsLoadedCheck(imgs, updateInnerWrapperHeight);\n    });\n  }\n\n  function imgsLoadedCheck(imgs, cb) {\n    // execute callback function if all images are complete\n    if (imgsComplete) {\n      return cb();\n    } // check image classes\n\n\n    imgs.forEach(function (img, index) {\n      if (!lazyload && img.complete) {\n        imgCompleted(img);\n      } // Check image.complete\n\n\n      if (hasClass(img, imgCompleteClass)) {\n        imgs.splice(index, 1);\n      }\n    }); // execute callback function if selected images are all complete\n\n    if (!imgs.length) {\n      return cb();\n    } // otherwise execute this functiona again\n\n\n    raf(function () {\n      imgsLoadedCheck(imgs, cb);\n    });\n  }\n\n  function additionalUpdates() {\n    doLazyLoad();\n    updateSlideStatus();\n    updateLiveRegion();\n    updateControlsStatus();\n    updateNavStatus();\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\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  } // 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\n\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) {\n      wp.style.height = maxHeight + 'px';\n    }\n  } // get the distance from the top edge of the first slide to each slide\n  // (init) => slidePositions\n\n\n  function setSlidePositions() {\n    slidePositions = [0];\n    var attr = horizontal ? 'left' : 'top',\n        attr2 = horizontal ? 'right' : 'bottom',\n        base = slideItems[0].getBoundingClientRect()[attr];\n    forEach(slideItems, function (item, i) {\n      // skip the first slide\n      if (i) {\n        slidePositions.push(item.getBoundingClientRect()[attr] - base);\n      } // add the end edge\n\n\n      if (i === slideCountNew - 1) {\n        slidePositions.push(item.getBoundingClientRect()[attr2] - base);\n      }\n    });\n  } // update slide\n\n\n  function updateSlideStatus() {\n    var range = getVisibleSlideRange(),\n        start = range[0],\n        end = range[1];\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        } // hide slides\n\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  } // gallery: update slide position\n\n\n  function updateGallerySlidePositions() {\n    var l = index + Math.min(slideCount, items);\n\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        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      } // remove outlet animation\n\n\n      removeClass(item, animateOut);\n    } // removing '.tns-moving'\n\n\n    setTimeout(function () {\n      forEach(slideItems, function (el) {\n        removeClass(el, 'tns-moving');\n      });\n    }, 300);\n  } // set tabindex on Nav\n\n\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        setAttrs(navPrev, {\n          'tabindex': '-1',\n          'aria-label': navStr + (navCurrentIndexCached + 1)\n        });\n        removeClass(navPrev, navActiveClass);\n        setAttrs(navCurrent, {\n          'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent\n        });\n        removeAttrs(navCurrent, 'tabindex');\n        addClass(navCurrent, navActiveClass);\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  } // set 'disabled' to true on controls when reach the edges\n\n\n  function updateControlsStatus() {\n    if (!controls || rewind || loop) {\n      return;\n    }\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\n    if (!disablePrev && prevDisabled) {\n      disEnableElement(prevIsButton, prevButton, false);\n    }\n\n    if (disableNext && !nextDisabled) {\n      disEnableElement(nextIsButton, nextButton, true);\n    }\n\n    if (!disableNext && nextDisabled) {\n      disEnableElement(nextIsButton, nextButton, false);\n    }\n  } // set duration\n\n\n  function resetDuration(el, str) {\n    if (TRANSITIONDURATION) {\n      el.style[TRANSITIONDURATION] = str;\n    }\n  }\n\n  function getSliderWidth() {\n    return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n  }\n\n  function getCenterGap(num) {\n    if (num == null) {\n      num = index;\n    }\n\n    var gap = edgePadding ? gutter : 0;\n    return autoWidth ? (viewport - gap - (slidePositions[num + 1] - slidePositions[num] - gutter)) / 2 : fixedWidth ? (viewport - fixedWidth) / 2 : (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() : getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n    }\n\n    if (result > 0) {\n      result = 0;\n    }\n\n    return result;\n  }\n\n  function getContainerTransformValue(num) {\n    if (num == null) {\n      num = index;\n    }\n\n    var val;\n\n    if (horizontal && !autoWidth) {\n      if (fixedWidth) {\n        val = -(fixedWidth + gutter) * num;\n\n        if (center) {\n          val += getCenterGap();\n        }\n      } else {\n        var denominator = TRANSFORM ? slideCountNew : items;\n\n        if (center) {\n          num -= getCenterGap();\n        }\n\n        val = -num * 100 / denominator;\n      }\n    } else {\n      val = -slidePositions[num];\n\n      if (center && autoWidth) {\n        val += getCenterGap();\n      }\n    }\n\n    if (hasRightDeadZone) {\n      val = Math.max(val, rightBoundary);\n    }\n\n    val += horizontal && !autoWidth && !fixedWidth ? '%' : 'px';\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) {\n      val = getContainerTransformValue();\n    }\n\n    container.style[transformAttr] = transformPrefix + val + transformPostfix;\n  }\n\n  function animateSlide(number, classOut, classIn, isOut) {\n    var l = number + items;\n\n    if (!loop) {\n      l = Math.min(l, slideCountNew);\n    }\n\n    for (var i = number; i < l; i++) {\n      var item = slideItems[i]; // set item positions\n\n      if (!isOut) {\n        item.style.left = (i - index) * 100 / items + '%';\n      }\n\n      if (animateDelay && TRANSITIONDELAY) {\n        item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n      }\n\n      removeClass(item, classOut);\n      addClass(item, classIn);\n\n      if (isOut) {\n        slideItemsOut.push(item);\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\n\n  var transformCore = function () {\n    return carousel ? function () {\n      resetDuration(container, '');\n\n      if (TRANSITIONDURATION || !speed) {\n        // for morden browsers with non-zero duration or\n        // zero duration for all browsers\n        doContainerTransform(); // run fallback function manually\n        // when duration is 0 / container is hidden\n\n        if (!speed || !isVisible(container)) {\n          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) {\n        updateContentWrapperHeight();\n      }\n    } : function () {\n      slideItemsOut = [];\n      var eve = {};\n      eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n      removeEvents(slideItems[indexCached], eve);\n      addEvents(slideItems[index], eve);\n      animateSlide(indexCached, animateIn, animateOut, true);\n      animateSlide(index, animateNormal, animateIn); // run fallback function manually\n      // when transition or animation not supported / duration is 0\n\n      if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) {\n        onTransitionEnd();\n      }\n    };\n  }();\n\n  function render(e, sliderMoved) {\n    if (updateIndexBeforeTransform) {\n      updateIndex();\n    } // render when slider was moved (touch or drag) even though index may not change\n\n\n    if (index !== indexCached || sliderMoved) {\n      // events\n      events.emit('indexChanged', info());\n      events.emit('transitionStart', info());\n\n      if (autoHeight) {\n        doAutoHeight();\n      } // pause autoplay when click or keydown from user\n\n\n      if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) {\n        stopAutoplay();\n      }\n\n      running = true;\n      transformCore();\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\n\n  function strTrans(str) {\n    return str.toLowerCase().replace(/-/g, '');\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\n\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]; // set item positions\n\n          item.style.left = '';\n\n          if (ANIMATIONDELAY && TRANSITIONDELAY) {\n            item.style[ANIMATIONDELAY] = '';\n            item.style[TRANSITIONDELAY] = '';\n          }\n\n          removeClass(item, animateOut);\n          addClass(item, animateNormal);\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\n\n      if (!event || !carousel && event.target.parentNode === container || event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n        if (!updateIndexBeforeTransform) {\n          var indexTem = index;\n          updateIndex();\n\n          if (index !== indexTem) {\n            events.emit('indexChanged', info());\n            doContainerTransformSilent();\n          }\n        }\n\n        if (nested === 'inner') {\n          events.emit('innerLoaded', info());\n        }\n\n        running = false;\n        indexCached = index;\n      }\n    }\n  } // # ACTIONS\n\n\n  function goTo(targetIndex, e) {\n    if (freeze) {\n      return;\n    } // prev slideBy\n\n\n    if (targetIndex === 'prev') {\n      onControlsClick(e, -1); // next slideBy\n    } else if (targetIndex === 'next') {\n      onControlsClick(e, 1); // go to exact slide\n    } else {\n      if (running) {\n        if (preventActionWhenRunning) {\n          return;\n        } else {\n          onTransitionEnd();\n        }\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') {\n          targetIndex = parseInt(targetIndex);\n        }\n\n        if (!isNaN(targetIndex)) {\n          // from directly called goTo function\n          if (!e) {\n            targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex));\n          }\n\n          indexGap = targetIndex - absIndex;\n        }\n      } // gallery: make sure new page won't overlap with current page\n\n\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; // make sure index is in range\n\n      if (carousel && loop) {\n        if (index < indexMin) {\n          index += slideCount;\n        }\n\n        if (index > indexMax) {\n          index -= slideCount;\n        }\n      } // if index is changed, start rendering\n\n\n      if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n        render(e);\n      }\n    }\n  } // on controls click\n\n\n  function onControlsClick(e, dir) {\n    if (running) {\n      if (preventActionWhenRunning) {\n        return;\n      } else {\n        onTransitionEnd();\n      }\n    }\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) {\n        target = target.parentNode;\n      }\n\n      var targetIn = [prevButton, nextButton].indexOf(target);\n\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\n      if (autoWidth) {\n        index = Math.floor(index);\n      } // pass e when click control buttons or keydown\n\n\n      render(passEventObject || e && e.type === 'keydown' ? e : null);\n    }\n  } // on nav click\n\n\n  function onNavClick(e) {\n    if (running) {\n      if (preventActionWhenRunning) {\n        return;\n      } else {\n        onTransitionEnd();\n      }\n    }\n\n    e = getEvent(e);\n    var target = getTarget(e),\n        navIndex; // find the clicked nav item\n\n    while (target !== navContainer && !hasAttr(target, 'data-nav')) {\n      target = target.parentNode;\n    }\n\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) {\n          stopAutoplay();\n        }\n\n        navClicked = -1; // reset navClicked\n      }\n    }\n  } // autoplay functions\n\n\n  function setAutoplayTimer() {\n    autoplayTimer = setInterval(function () {\n      onControlsClick(null, autoplayDirection);\n    }, autoplayTimeout);\n    animating = true;\n  }\n\n  function stopAutoplayTimer() {\n    clearInterval(autoplayTimer);\n    animating = false;\n  }\n\n  function updateAutoplayButton(action, txt, localizedAction) {\n    setAttrs(autoplayButton, {\n      'data-action': action\n    });\n    autoplayButton.innerHTML = autoplayHtmlStrings[0] + localizedAction + autoplayHtmlStrings[1];\n  }\n\n  function startAutoplay() {\n    setAutoplayTimer();\n\n    if (autoplayButton) {\n      updateAutoplayButton('stop', autoplayText[1], Drupal.t('tns.keyword.Stop'));\n    }\n  }\n\n  function stopAutoplay() {\n    stopAutoplayTimer();\n\n    if (autoplayButton) {\n      updateAutoplayButton('start', autoplayText[0], Drupal.t('tns.keyword.Start'));\n    }\n  } // programaitcally play/pause the slider\n\n\n  function play() {\n    if (autoplay && !animating) {\n      startAutoplay();\n      autoplayUserPaused = false;\n    }\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  } // keydown events on document\n\n\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  } // on key control\n\n\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) {\n          onControlsClick(e, -1);\n        }\n      } else if (!nextButton.disabled) {\n        onControlsClick(e, 1);\n      }\n    }\n  } // set focus\n\n\n  function setFocus(el) {\n    el.focus();\n  } // on key nav\n\n\n  function onNavKeydown(e) {\n    e = getEvent(e);\n    var curElement = doc.activeElement;\n\n    if (!hasAttr(curElement, 'data-nav')) {\n      return;\n    } // var code = e.keyCode,\n\n\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) {\n          setFocus(navItems[navIndex - 1]);\n        }\n      } else if (keyIndex === 1) {\n        if (navIndex < pages - 1) {\n          setFocus(navItems[navIndex + 1]);\n        }\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\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) {\n        return;\n      } else {\n        onTransitionEnd();\n      }\n    }\n\n    if (autoplay && animating) {\n      stopAutoplayTimer();\n    }\n\n    panStart = true;\n\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\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) {\n          rafIndex = raf(function () {\n            panUpdate(e);\n          });\n        }\n      } else {\n        if (moveDirectionExpected === '?') {\n          moveDirectionExpected = getMoveDirectionExpected();\n        }\n\n        if (moveDirectionExpected) {\n          preventScroll = true;\n        }\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\n    caf(rafIndex);\n\n    if (panStart) {\n      rafIndex = raf(function () {\n        panUpdate(e);\n      });\n    }\n\n    if (moveDirectionExpected === '?') {\n      moveDirectionExpected = getMoveDirectionExpected();\n    }\n\n    if (moveDirectionExpected) {\n      if (!preventScroll && isTouchEvent(e)) {\n        preventScroll = true;\n      }\n\n      try {\n        if (e.type) {\n          events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e));\n        }\n      } catch (err) {}\n\n      var x = translateInit,\n          dist = getDist(lastPosition, initPosition);\n\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\n      if (carousel) {\n        resetDuration(container, '');\n      }\n\n      panStart = false;\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, {\n            'click': function preventClick(e) {\n              preventDefaultBehavior(e);\n              removeEvents(target, {\n                'click': preventClick\n              });\n            }\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\n              if (moved <= 0) {\n                index = indexMin;\n              } else if (moved >= slidePositions[slideCountNew - 1]) {\n                index = indexMax;\n              } else {\n                var i = 0;\n\n                while (i < slideCountNew && moved >= slidePositions[i]) {\n                  index = i;\n\n                  if (moved > slidePositions[i] && dist < 0) {\n                    index += 1;\n                  }\n\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    } // reset\n\n\n    if (options.preventScrollOnTouch === 'auto') {\n      preventScroll = false;\n    }\n\n    if (swipeAngle) {\n      moveDirectionExpected = '?';\n    }\n\n    if (autoplay && !animating) {\n      setAutoplayTimer();\n    }\n  } // === RESIZE FUNCTIONS === //\n  // (slidePositions, index, items) => vertical_conentWrapper.height\n\n\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   * 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\n\n  function updateNavVisibility() {\n    if (!nav || navAsThumbnails) {\n      return;\n    }\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      } // cache pages\n\n\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\nexports.tns = tns;\n"]}