{"version":3,"sources":["webpack:///scripts/component--gallery--1e5f2cd293d99a514b92.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/flickity-sync/flickity-sync.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/prev-next-button.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./project/client/src/site__ale001/components/blocks/gallery/component.js"],"names":["webpackJsonp","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/desandro-matches-selector/matches-selector.js","module","exports","__webpack_require__","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","Symbol","iterator","window","factory","undefined","call","matchesMethod","ElemProto","Element","prototype","matches","matchesSelector","prefixes","i","length","prefix","method","elem","selector","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/ev-emitter/ev-emitter.js","global","EvEmitter","proto","on","eventName","listener","events","this","_events","listeners","indexOf","push","once","onceEvents","_onceEvents","off","index","splice","emitEvent","args","slice","onceListeners","apply","allOff","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js","__WEBPACK_AMD_DEFINE_ARRAY__","_typeof","obj","constructor","utils","extend","a","b","prop","modulo","num","div","arraySlice","Array","makeArray","isArray","removeFrom","ary","getParent","parentNode","document","body","getQueryElement","querySelector","handleEvent","event","type","filterFindElements","elems","ffElems","forEach","HTMLElement","childElems","querySelectorAll","debounceMethod","_class","methodName","threshold","timeoutName","timeout","clearTimeout","arguments","_this","setTimeout","docReady","callback","readyState","addEventListener","toDashed","str","replace","match","$1","$2","toLowerCase","console","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","options","attr","getAttribute","JSON","parse","error","className","instance","data","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity-sync/flickity-sync.js","Flickity","createMethods","_createSync","syncers","syncOption","sync","unsyncAll","companion","_syncCompanion","syncListener","selectedIndex","select","guid","flickity","unsync","_unsync","_unsyncCompanion","id","syncer","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/add-remove-cell.js","getCellsFragment","cells","fragment","createDocumentFragment","cell","appendChild","element","insert","_makeCells","len","isAppend","slider","insertCellElement","insertBefore","endCells","_sizeCells","cellChange","append","prepend","remove","getCells","minCellIndex","Math","min","cellSizeChange","getCell","getSize","changedCellIndex","isPositioningSlider","prevSelectedElem","selectedElement","_positionCells","_getWrapShiftCells","setGallerySize","getCellSlideIndex","slides","positionSliderAtSelected","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/animate.js","startAnimation","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","requestAnimationFrame","wrapAround","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","style","transform","firstSlide","positionX","target","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","round","size","innerWidth","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cellShift","wrapShift","outerWidth","_unshiftCells","getFrictionFactor","applyForce","force","getRestingPosition","isDraggable","dragVelocity","dragX","dragForce","distance","selectedAttraction","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/cell.js","Cell","parent","create","setAttribute","destroy","unselect","side","originSide","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","width","cellAlign","classList","add","removeAttribute","removeChild","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/drag.js","Unidragger","getScrollPosition","pageXOffset","y","pageYOffset","defaults","draggable","dragThreshold","_touchActionValue","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","viewport","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","pointer","_pointerDownDefault","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","activeElement","pointerDownBlur","pointerDownScroll","pointerDownPointer","pageX","pageY","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","nodeName","focus","isTouchStart","isTouchPointer","pointerType","isFocusNode","preventDefault","hasDragStarted","moveVector","abs","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","removeEventListener","dragStart","dragStartPosition","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","max","endBound","getLastSlide","dragMoveTime","Date","dragEnd","freeScroll","dragEndRestingSelect","restingX","dragEndBoostSelect","isDragSelect","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","contain","d","md","isWrapAround","slideIndex","slide","wrap","floor","delta","staticClick","clickedCell","getParentCell","cellElem","cellIndex","onscroll","scroll","scrollMoveX","scrollMoveY","_pointerDone","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js","Slide","animatePrototype","moveElements","toElem","queryElement","flickityGUID","instances","option","$element","_create","getComputedStyle","GUID","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","createElement","_createSlider","watchCSS","activate","opts","isActive","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","positionCells","map","getLastCell","maxCellHeight","cellX","startCell","outerHeight","updateSlides","_containSlides","isOriginLeft","nextMargin","canCellFit","_getCanCellFit","addCell","slideWidth","firstMargin","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","_init","reposition","setCellAlign","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","gapX","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","wrapIndex","backWrapDelta","forewardWrapDelta","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","initialIndex","queryCell","selectCell","value","getAdjacentCellElements","adjCount","cellElems","uiChange","childUIPointerDown","onresize","content","deactivate","onkeydown","isNotFocused","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","preventScroll","scrollTo","removeData","bridget","setJQuery","jq","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/index.js","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/lazyload.js","getCellLazyImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","LazyLoader","img","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","src","srcset","onload","complete","onerror","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/page-dots.js","Unipointer","PageDots","Object","holder","dots","handleClick","onClick","bind","setDots","bindStartEvent","unbindStartEvent","addDots","removeDots","count","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/player.js","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/prev-next-button.js","PrevNextButton","getArrowMovements","shape","x0","x1","y1","x2","y2","x3","svgURI","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","path","pathMovements","arrowShape","onclick","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/slide.js","lastCell","lastMargin","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/get-size/get-size.js","getStyleSize","parseFloat","isNaN","noop","getZeroSize","innerHeight","measurementsLength","measurements","getStyle","logError","setup","isSetup","padding","borderStyle","borderWidth","boxSizing","documentElement","isBoxSizeOuter","nodeType","display","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","message","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/unidragger/unidragger.js","_bindHandles","isAdd","bindMethod","touchAction","handle","_bindStartEvent","PointerEvent","cursorNodes","OPTION","clickTypes","radio","checkbox","button","submit","image","file","isCursorNode","isClickType","isOkay","_pointerReset","focused","blur","isDragging","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp","getPointerPoint","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/unipointer/unipointer.js","startEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointerId","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","onmouseup","_pointerUp","onpointerup","ontouchend","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/blocks/gallery/component.js","_interopRequireDefault","__esModule","default","_classCallCheck","Constructor","TypeError","defineProperty","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","_jquery","_jquery2","_flickity","_flickity2","_debug","_debug2","_lib","log","ImageGalleryComponent","nextKeyCodes","split","previousKeyCodes","SHIFT_PRESSED","$thumbnails","find","thumbnailsContainerSelector","$main","mainContainerSelector","component","init","fn","debounce","main","get","removeClass","mainContainerHiddenClass","matchMedia","thumbs","thumbnailsContainerHiddenClass","mainSlider","ready","onReady","onShowMainSlide","thumbSlider","onSelectThumb","onCellClick","currentTarget","selected","mainInstance","getMainSlider","DEFAULTS","thumbnailsItemSelector"],"mappings":"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","file":"scripts/component--gallery--1e5f2cd293d99a514b92.js","sourcesContent":["webpackJsonp([\"component--gallery\"],{\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/desandro-matches-selector/matches-selector.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n(function (window, factory) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n})(window, function factory() {\n 'use strict';\n\n var matchesMethod = function () {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if (ElemProto.matches) {\n return 'matches';\n }\n // check un-prefixed\n if (ElemProto.matchesSelector) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = ['webkit', 'moz', 'ms', 'o'];\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if (ElemProto[method]) {\n return method;\n }\n }\n }();\n\n return function matchesSelector(elem, selector) {\n return elem[matchesMethod](selector);\n };\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/ev-emitter/ev-emitter.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n(function (global, factory) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if (true) {\n // AMD - RequireJS\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n})(typeof window != 'undefined' ? window : undefined, function () {\n\n \"use strict\";\n\n function EvEmitter() {}\n\n var proto = EvEmitter.prototype;\n\n proto.on = function (eventName, listener) {\n if (!eventName || !listener) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[eventName] = events[eventName] || [];\n // only add once\n if (listeners.indexOf(listener) == -1) {\n listeners.push(listener);\n }\n\n return this;\n };\n\n proto.once = function (eventName, listener) {\n if (!eventName || !listener) {\n return;\n }\n // add event\n this.on(eventName, listener);\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[eventName] = onceEvents[eventName] || {};\n // set flag\n onceListeners[listener] = true;\n\n return this;\n };\n\n proto.off = function (eventName, listener) {\n var listeners = this._events && this._events[eventName];\n if (!listeners || !listeners.length) {\n return;\n }\n var index = listeners.indexOf(listener);\n if (index != -1) {\n listeners.splice(index, 1);\n }\n\n return this;\n };\n\n proto.emitEvent = function (eventName, args) {\n var listeners = this._events && this._events[eventName];\n if (!listeners || !listeners.length) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[eventName];\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n var isOnce = onceListeners && onceListeners[listener];\n if (isOnce) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off(eventName, listener);\n // unset once flag\n delete onceListeners[listener];\n }\n // trigger listener\n listener.apply(this, args);\n }\n\n return this;\n };\n\n proto.allOff = function () {\n delete this._events;\n delete this._onceEvents;\n };\n\n return EvEmitter;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n(function (window, factory) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/desandro-matches-selector/matches-selector.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (matchesSelector) {\n return factory(window, matchesSelector);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('desandro-matches-selector'));\n } else {\n // browser global\n window.fizzyUIUtils = factory(window, window.matchesSelector);\n }\n})(window, function factory(window, matchesSelector) {\n\n 'use strict';\n\n var utils = {};\n\n // ----- extend ----- //\n\n // extends objects\n utils.extend = function (a, b) {\n for (var prop in b) {\n a[prop] = b[prop];\n }\n return a;\n };\n\n // ----- modulo ----- //\n\n utils.modulo = function (num, div) {\n return (num % div + div) % div;\n };\n\n // ----- makeArray ----- //\n\n var arraySlice = Array.prototype.slice;\n\n // turn element or nodeList into an array\n utils.makeArray = function (obj) {\n if (Array.isArray(obj)) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if (obj === null || obj === undefined) {\n return [];\n }\n\n var isArrayLike = (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == 'object' && typeof obj.length == 'number';\n if (isArrayLike) {\n // convert nodeList to array\n return arraySlice.call(obj);\n }\n\n // array of single index\n return [obj];\n };\n\n // ----- removeFrom ----- //\n\n utils.removeFrom = function (ary, obj) {\n var index = ary.indexOf(obj);\n if (index != -1) {\n ary.splice(index, 1);\n }\n };\n\n // ----- getParent ----- //\n\n utils.getParent = function (elem, selector) {\n while (elem.parentNode && elem != document.body) {\n elem = elem.parentNode;\n if (matchesSelector(elem, selector)) {\n return elem;\n }\n }\n };\n\n // ----- getQueryElement ----- //\n\n // use element as selector string\n utils.getQueryElement = function (elem) {\n if (typeof elem == 'string') {\n return document.querySelector(elem);\n }\n return elem;\n };\n\n // ----- handleEvent ----- //\n\n // enable .ontype to trigger from .addEventListener( elem, 'type' )\n utils.handleEvent = function (event) {\n var method = 'on' + event.type;\n if (this[method]) {\n this[method](event);\n }\n };\n\n // ----- filterFindElements ----- //\n\n utils.filterFindElements = function (elems, selector) {\n // make array of elems\n elems = utils.makeArray(elems);\n var ffElems = [];\n\n elems.forEach(function (elem) {\n // check that elem is an actual element\n if (!(elem instanceof HTMLElement)) {\n return;\n }\n // add elem if no selector\n if (!selector) {\n ffElems.push(elem);\n return;\n }\n // filter & find items if we have a selector\n // filter\n if (matchesSelector(elem, selector)) {\n ffElems.push(elem);\n }\n // find children\n var childElems = elem.querySelectorAll(selector);\n // concat childElems to filterFound array\n for (var i = 0; i < childElems.length; i++) {\n ffElems.push(childElems[i]);\n }\n });\n\n return ffElems;\n };\n\n // ----- debounceMethod ----- //\n\n utils.debounceMethod = function (_class, methodName, threshold) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[methodName];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[methodName] = function () {\n var timeout = this[timeoutName];\n clearTimeout(timeout);\n\n var args = arguments;\n var _this = this;\n this[timeoutName] = setTimeout(function () {\n method.apply(_this, args);\n delete _this[timeoutName];\n }, threshold);\n };\n };\n\n // ----- docReady ----- //\n\n utils.docReady = function (callback) {\n var readyState = document.readyState;\n if (readyState == 'complete' || readyState == 'interactive') {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout(callback);\n } else {\n document.addEventListener('DOMContentLoaded', callback);\n }\n };\n\n // ----- htmlInit ----- //\n\n // http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\n utils.toDashed = function (str) {\n return str.replace(/(.)([A-Z])/g, function (match, $1, $2) {\n return $1 + '-' + $2;\n }).toLowerCase();\n };\n\n var console = window.console;\n /**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\n utils.htmlInit = function (WidgetClass, namespace) {\n utils.docReady(function () {\n var dashedNamespace = utils.toDashed(namespace);\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll('[' + dataAttr + ']');\n var jsDashElems = document.querySelectorAll('.js-' + dashedNamespace);\n var elems = utils.makeArray(dataAttrElems).concat(utils.makeArray(jsDashElems));\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach(function (elem) {\n var attr = elem.getAttribute(dataAttr) || elem.getAttribute(dataOptionsAttr);\n var options;\n try {\n options = attr && JSON.parse(attr);\n } catch (error) {\n // log error, do not initialize\n if (console) {\n console.error('Error parsing ' + dataAttr + ' on ' + elem.className + ': ' + error);\n }\n return;\n }\n // initialize\n var instance = new WidgetClass(elem, options);\n // make available via $().data('namespace')\n if (jQuery) {\n jQuery.data(elem, namespace, instance);\n }\n });\n });\n };\n\n // ----- ----- //\n\n return utils;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity-sync/flickity-sync.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * Flickity sync v2.0.0\n * enable sync for Flickity\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true*/\n\n(function (window, factory) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/index.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('flickity'), require('fizzy-ui-utils'));\n } else {\n // browser global\n window.Flickity = factory(window.Flickity, window.fizzyUIUtils);\n }\n})(window, function factory(Flickity, utils) {\n\n 'use strict';\n\n // -------------------------- sync prototype -------------------------- //\n\n // Flickity.defaults.sync = false;\n\n Flickity.createMethods.push('_createSync');\n\n Flickity.prototype._createSync = function () {\n this.syncers = {};\n var syncOption = this.options.sync;\n\n this.on('destroy', this.unsyncAll);\n\n if (!syncOption) {\n return;\n }\n // HACK do async, give time for other flickity to be initalized\n var _this = this;\n setTimeout(function initSyncCompanion() {\n _this.sync(syncOption);\n });\n };\n\n /**\n * sync\n * @param {Element} or {String} elem\n */\n Flickity.prototype.sync = function (elem) {\n elem = utils.getQueryElement(elem);\n var companion = Flickity.data(elem);\n if (!companion) {\n return;\n }\n // two hearts, that beat as one\n this._syncCompanion(companion);\n companion._syncCompanion(this);\n };\n\n /**\n * @param {Flickity} companion\n */\n Flickity.prototype._syncCompanion = function (companion) {\n var _this = this;\n function syncListener() {\n var index = _this.selectedIndex;\n // do not select if already selected, prevent infinite loop\n if (companion.selectedIndex != index) {\n companion.select(index);\n }\n }\n this.on('select', syncListener);\n // keep track of all synced flickities\n // hold on to listener to unsync\n this.syncers[companion.guid] = {\n flickity: companion,\n listener: syncListener\n };\n };\n\n /**\n * unsync\n * @param {Element} or {String} elem\n */\n Flickity.prototype.unsync = function (elem) {\n elem = utils.getQueryElement(elem);\n var companion = Flickity.data(elem);\n this._unsync(companion);\n };\n\n /**\n * @param {Flickity} companion\n */\n Flickity.prototype._unsync = function (companion) {\n if (!companion) {\n return;\n }\n // I love you but I've chosen darkness\n this._unsyncCompanion(companion);\n companion._unsyncCompanion(this);\n };\n\n /**\n * @param {Flickity} companion\n */\n Flickity.prototype._unsyncCompanion = function (companion) {\n var id = companion.guid;\n var syncer = this.syncers[id];\n this.off('select', syncer.listener);\n delete this.syncers[id];\n };\n\n Flickity.prototype.unsyncAll = function () {\n for (var id in this.syncers) {\n var syncer = this.syncers[id];\n this._unsync(syncer.flickity);\n }\n };\n\n // ----- ----- //\n\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/add-remove-cell.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// add, remove cell\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (Flickity, utils) {\n return factory(window, Flickity, utils);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('./flickity'), require('fizzy-ui-utils'));\n } else {\n // browser global\n factory(window, window.Flickity, window.fizzyUIUtils);\n }\n})(window, function factory(window, Flickity, utils) {\n\n 'use strict';\n\n // append cells to a document fragment\n\n function getCellsFragment(cells) {\n var fragment = document.createDocumentFragment();\n cells.forEach(function (cell) {\n fragment.appendChild(cell.element);\n });\n return fragment;\n }\n\n // -------------------------- add/remove cell prototype -------------------------- //\n\n var proto = Flickity.prototype;\n\n /**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\n proto.insert = function (elems, index) {\n var cells = this._makeCells(elems);\n if (!cells || !cells.length) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment(cells);\n // append to slider\n var isAppend = index == len;\n if (isAppend) {\n this.slider.appendChild(fragment);\n } else {\n var insertCellElement = this.cells[index].element;\n this.slider.insertBefore(fragment, insertCellElement);\n }\n // add to this.cells\n if (index === 0) {\n // prepend, add to start\n this.cells = cells.concat(this.cells);\n } else if (isAppend) {\n // append, add to end\n this.cells = this.cells.concat(cells);\n } else {\n // insert in this.cells\n var endCells = this.cells.splice(index, len - index);\n this.cells = this.cells.concat(cells).concat(endCells);\n }\n\n this._sizeCells(cells);\n this.cellChange(index, true);\n };\n\n proto.append = function (elems) {\n this.insert(elems, this.cells.length);\n };\n\n proto.prepend = function (elems) {\n this.insert(elems, 0);\n };\n\n /**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\n proto.remove = function (elems) {\n var cells = this.getCells(elems);\n if (!cells || !cells.length) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach(function (cell) {\n cell.remove();\n var index = this.cells.indexOf(cell);\n minCellIndex = Math.min(index, minCellIndex);\n utils.removeFrom(this.cells, cell);\n }, this);\n\n this.cellChange(minCellIndex, true);\n };\n\n /**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\n proto.cellSizeChange = function (elem) {\n var cell = this.getCell(elem);\n if (!cell) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf(cell);\n this.cellChange(index);\n };\n\n /**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\n proto.cellChange = function (changedCellIndex, isPositioningSlider) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells(changedCellIndex);\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell(prevSelectedElem);\n if (cell) {\n this.selectedIndex = this.getCellSlideIndex(cell);\n }\n this.selectedIndex = Math.min(this.slides.length - 1, this.selectedIndex);\n\n this.emitEvent('cellChange', [changedCellIndex]);\n // position slider\n this.select(this.selectedIndex);\n // do not position slider after lazy load\n if (isPositioningSlider) {\n this.positionSliderAtSelected();\n }\n };\n\n // ----- ----- //\n\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/animate.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// animate\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (utils) {\n return factory(window, utils);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('fizzy-ui-utils'));\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(window, window.fizzyUIUtils);\n }\n})(window, function factory(window, utils) {\n\n 'use strict';\n\n // -------------------------- animate -------------------------- //\n\n var proto = {};\n\n proto.startAnimation = function () {\n if (this.isAnimating) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n };\n\n proto.animate = function () {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle(previousX);\n // animate next frame\n if (this.isAnimating) {\n var _this = this;\n requestAnimationFrame(function animateFrame() {\n _this.animate();\n });\n }\n };\n\n proto.positionSlider = function () {\n var x = this.x;\n // wrap position around\n if (this.options.wrapAround && this.cells.length > 1) {\n x = utils.modulo(x, this.slideableWidth);\n x = x - this.slideableWidth;\n this.shiftWrapCells(x);\n }\n\n this.setTranslateX(x, this.isAnimating);\n this.dispatchScrollEvent();\n };\n\n proto.setTranslateX = function (x, is3d) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue(x);\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ? 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n };\n\n proto.dispatchScrollEvent = function () {\n var firstSlide = this.slides[0];\n if (!firstSlide) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent('scroll', null, [progress, positionX]);\n };\n\n proto.positionSliderAtSelected = function () {\n if (!this.cells.length) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n };\n\n proto.getPositionValue = function (position) {\n if (this.options.percentPosition) {\n // percent position, round to 2 digits, like 12.34%\n return Math.round(position / this.size.innerWidth * 10000) * 0.01 + '%';\n } else {\n // pixel positioning\n return Math.round(position) + 'px';\n }\n };\n\n proto.settle = function (previousX) {\n // keep track of frames where x hasn't moved\n if (!this.isPointerDown && Math.round(this.x * 100) == Math.round(previousX * 100)) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if (this.restingFrames > 2) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent('settle', null, [this.selectedIndex]);\n }\n };\n\n proto.shiftWrapCells = function (x) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells(this.beforeShiftCells, beforeGap, -1);\n // shift after cells\n var afterGap = this.size.innerWidth - (x + this.slideableWidth + this.cursorPosition);\n this._shiftCells(this.afterShiftCells, afterGap, 1);\n };\n\n proto._shiftCells = function (cells, gap, shift) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift(cellShift);\n gap -= cell.size.outerWidth;\n }\n };\n\n proto._unshiftCells = function (cells) {\n if (!cells || !cells.length) {\n return;\n }\n for (var i = 0; i < cells.length; i++) {\n cells[i].wrapShift(0);\n }\n };\n\n // -------------------------- physics -------------------------- //\n\n proto.integratePhysics = function () {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n };\n\n proto.applyForce = function (force) {\n this.velocity += force;\n };\n\n proto.getFrictionFactor = function () {\n return 1 - this.options[this.isFreeScrolling ? 'freeScrollFriction' : 'friction'];\n };\n\n proto.getRestingPosition = function () {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / (1 - this.getFrictionFactor());\n };\n\n proto.applyDragForce = function () {\n if (!this.isDraggable || !this.isPointerDown) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce(dragForce);\n };\n\n proto.applySelectedAttraction = function () {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if (dragDown || this.isFreeScrolling || !this.slides.length) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce(force);\n };\n\n return proto;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/cell.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// Flickity.Cell\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/get-size/get-size.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (getSize) {\n return factory(window, getSize);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('get-size'));\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(window, window.getSize);\n }\n})(window, function factory(window, getSize) {\n\n 'use strict';\n\n function Cell(elem, parent) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n }\n\n var proto = Cell.prototype;\n\n proto.create = function () {\n this.element.style.position = 'absolute';\n this.element.setAttribute('aria-hidden', 'true');\n this.x = 0;\n this.shift = 0;\n };\n\n proto.destroy = function () {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[side] = '';\n };\n\n proto.getSize = function () {\n this.size = getSize(this.element);\n };\n\n proto.setPosition = function (x) {\n this.x = x;\n this.updateTarget();\n this.renderPosition(x);\n };\n\n // setDefaultTarget v1 method, backwards compatibility, remove in v3\n proto.updateTarget = proto.setDefaultTarget = function () {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[marginProperty] + this.size.width * this.parent.cellAlign;\n };\n\n proto.renderPosition = function (x) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[side] = this.parent.getPositionValue(x);\n };\n\n proto.select = function () {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n };\n\n proto.unselect = function () {\n this.element.classList.remove('is-selected');\n this.element.setAttribute('aria-hidden', 'true');\n };\n\n /**\n * @param {Integer} factor - 0, 1, or -1\n **/\n proto.wrapShift = function (shift) {\n this.shift = shift;\n this.renderPosition(this.x + this.parent.slideableWidth * shift);\n };\n\n proto.remove = function () {\n this.element.parentNode.removeChild(this.element);\n };\n\n return Cell;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/drag.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// drag\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/unidragger/unidragger.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (Flickity, Unidragger, utils) {\n return factory(window, Flickity, Unidragger, utils);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('./flickity'), require('unidragger'), require('fizzy-ui-utils'));\n } else {\n // browser global\n window.Flickity = factory(window, window.Flickity, window.Unidragger, window.fizzyUIUtils);\n }\n})(window, function factory(window, Flickity, Unidragger, utils) {\n\n 'use strict';\n\n // ----- defaults ----- //\n\n utils.extend(Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3\n });\n\n // ----- create ----- //\n\n Flickity.createMethods.push('_createDrag');\n\n // -------------------------- drag prototype -------------------------- //\n\n var proto = Flickity.prototype;\n utils.extend(proto, Unidragger.prototype);\n proto._touchActionValue = 'pan-y';\n\n // -------------------------- -------------------------- //\n\n var isTouch = 'createTouch' in document;\n var isTouchmoveScrollCanceled = false;\n\n proto._createDrag = function () {\n this.on('activate', this.onActivateDrag);\n this.on('uiChange', this._uiChangeDrag);\n this.on('deactivate', this.onDeactivateDrag);\n this.on('cellChange', this.updateDraggable);\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if (isTouch && !isTouchmoveScrollCanceled) {\n window.addEventListener('touchmove', function () {});\n isTouchmoveScrollCanceled = true;\n }\n };\n\n proto.onActivateDrag = function () {\n this.handles = [this.viewport];\n this.bindHandles();\n this.updateDraggable();\n };\n\n proto.onDeactivateDrag = function () {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n };\n\n proto.updateDraggable = function () {\n // disable dragging if less than 2 slides. #278\n if (this.options.draggable == '>1') {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if (this.isDraggable) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n };\n\n // backwards compatibility\n proto.bindDrag = function () {\n this.options.draggable = true;\n this.updateDraggable();\n };\n\n proto.unbindDrag = function () {\n this.options.draggable = false;\n this.updateDraggable();\n };\n\n proto._uiChangeDrag = function () {\n delete this.isFreeScrolling;\n };\n\n // -------------------------- pointer events -------------------------- //\n\n proto.pointerDown = function (event, pointer) {\n if (!this.isDraggable) {\n this._pointerDownDefault(event, pointer);\n return;\n }\n var isOkay = this.okayPointerDown(event);\n if (!isOkay) {\n return;\n }\n\n this._pointerDownPreventDefault(event);\n this.pointerDownFocus(event);\n // blur\n if (document.activeElement != this.element) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener('scroll', this);\n\n this._pointerDownDefault(event, pointer);\n };\n\n // default pointerDown logic, used for staticClick\n proto._pointerDownDefault = function (event, pointer) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY\n };\n // bind move and end events\n this._bindPostStartEvents(event);\n this.dispatchEvent('pointerDown', event, [pointer]);\n };\n\n var focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true\n };\n\n proto.pointerDownFocus = function (event) {\n var isFocusNode = focusNodes[event.target.nodeName];\n if (!isFocusNode) {\n this.focus();\n }\n };\n\n proto._pointerDownPreventDefault = function (event) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[event.target.nodeName];\n if (!isTouchStart && !isTouchPointer && !isFocusNode) {\n event.preventDefault();\n }\n };\n\n // ----- move ----- //\n\n proto.hasDragStarted = function (moveVector) {\n return Math.abs(moveVector.x) > this.options.dragThreshold;\n };\n\n // ----- up ----- //\n\n proto.pointerUp = function (event, pointer) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent('pointerUp', event, [pointer]);\n this._dragPointerUp(event, pointer);\n };\n\n proto.pointerDone = function () {\n window.removeEventListener('scroll', this);\n delete this.pointerDownScroll;\n };\n\n // -------------------------- dragging -------------------------- //\n\n proto.dragStart = function (event, pointer) {\n if (!this.isDraggable) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener('scroll', this);\n this.dispatchEvent('dragStart', event, [pointer]);\n };\n\n proto.pointerMove = function (event, pointer) {\n var moveVector = this._dragPointerMove(event, pointer);\n this.dispatchEvent('pointerMove', event, [pointer, moveVector]);\n this._dragMove(event, pointer, moveVector);\n };\n\n proto.dragMove = function (event, pointer, moveVector) {\n if (!this.isDraggable) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if (this.options.wrapAround) {\n // wrap around move. #589\n moveVector.x = moveVector.x % this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if (!this.options.wrapAround && this.slides.length) {\n // slow drag\n var originBound = Math.max(-this.slides[0].target, this.dragStartPosition);\n dragX = dragX > originBound ? (dragX + originBound) * 0.5 : dragX;\n var endBound = Math.min(-this.getLastSlide().target, this.dragStartPosition);\n dragX = dragX < endBound ? (dragX + endBound) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent('dragMove', event, [pointer, moveVector]);\n };\n\n proto.dragEnd = function (event, pointer) {\n if (!this.isDraggable) {\n return;\n }\n if (this.options.freeScroll) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if (this.options.freeScroll && !this.options.wrapAround) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target && -restingX < this.getLastSlide().target;\n } else if (!this.options.freeScroll && index == this.selectedIndex) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select(index);\n delete this.isDragSelect;\n this.dispatchEvent('dragEnd', event, [pointer]);\n };\n\n proto.dragEndRestingSelect = function () {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs(this.getSlideDistance(-restingX, this.selectedIndex));\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting(restingX, distance, 1);\n var negativeResting = this._getClosestResting(restingX, distance, -1);\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ? positiveResting.index : negativeResting.index;\n return index;\n };\n\n /**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\n proto._getClosestResting = function (restingX, distance, increment) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function (d, md) {\n return d <= md;\n } : function (d, md) {\n return d < md;\n };\n while (condition(distance, minDistance)) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance(-restingX, index);\n if (distance === null) {\n break;\n }\n distance = Math.abs(distance);\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n };\n\n /**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\n proto.getSlideDistance = function (x, index) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo(index, len) : index;\n var slide = this.slides[slideIndex];\n if (!slide) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor(index / len) : 0;\n return x - (slide.target + wrap);\n };\n\n proto.dragEndBoostSelect = function () {\n // do not boost if no previousDragX or dragMoveTime\n if (this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100) {\n return 0;\n }\n\n var distance = this.getSlideDistance(-this.dragX, this.selectedIndex);\n var delta = this.previousDragX - this.dragX;\n if (distance > 0 && delta > 0) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if (distance < 0 && delta < 0) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n };\n\n // ----- staticClick ----- //\n\n proto.staticClick = function (event, pointer) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell(event.target);\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf(clickedCell);\n this.dispatchEvent('staticClick', event, [pointer, cellElem, cellIndex]);\n };\n\n // ----- scroll ----- //\n\n proto.onscroll = function () {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if (Math.abs(scrollMoveX) > 3 || Math.abs(scrollMoveY) > 3) {\n this._pointerDone();\n }\n };\n\n // ----- utils ----- //\n\n function getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n\n // ----- ----- //\n\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// Flickity main\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/ev-emitter/ev-emitter.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/get-size/get-size.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/cell.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/slide.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/animate.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (EvEmitter, getSize, utils, Cell, Slide, animatePrototype) {\n return factory(window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('ev-emitter'), require('get-size'), require('fizzy-ui-utils'), require('./cell'), require('./slide'), require('./animate'));\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(window, window.EvEmitter, window.getSize, window.fizzyUIUtils, _Flickity.Cell, _Flickity.Slide, _Flickity.animatePrototype);\n }\n})(window, function factory(window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype) {\n\n 'use strict';\n\n // vars\n\n var jQuery = window.jQuery;\n var getComputedStyle = window.getComputedStyle;\n var console = window.console;\n\n function moveElements(elems, toElem) {\n elems = utils.makeArray(elems);\n while (elems.length) {\n toElem.appendChild(elems.shift());\n }\n }\n\n // -------------------------- Flickity -------------------------- //\n\n // globally unique identifiers\n var GUID = 0;\n // internal store of all Flickity intances\n var instances = {};\n\n function Flickity(element, options) {\n var queryElement = utils.getQueryElement(element);\n if (!queryElement) {\n if (console) {\n console.error('Bad element for Flickity: ' + (queryElement || element));\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if (this.element.flickityGUID) {\n var instance = instances[this.element.flickityGUID];\n instance.option(options);\n return instance;\n }\n\n // add jQuery\n if (jQuery) {\n this.$element = jQuery(this.element);\n }\n // options\n this.options = utils.extend({}, this.constructor.defaults);\n this.option(options);\n\n // kick things off\n this._create();\n }\n\n Flickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true\n // watchCSS: false,\n // wrapAround: false\n };\n\n // hash of methods triggered on _create()\n Flickity.createMethods = [];\n\n var proto = Flickity.prototype;\n // inherit EventEmitter\n utils.extend(proto, EvEmitter.prototype);\n\n proto._create = function () {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[id] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if (this.options.resize || this.options.watchCSS) {\n window.addEventListener('resize', this);\n }\n\n // add listeners from on option\n for (var eventName in this.options.on) {\n var listener = this.options.on[eventName];\n this.on(eventName, listener);\n }\n\n Flickity.createMethods.forEach(function (method) {\n this[method]();\n }, this);\n\n if (this.options.watchCSS) {\n this.watchCSS();\n } else {\n this.activate();\n }\n };\n\n /**\n * set options\n * @param {Object} opts\n */\n proto.option = function (opts) {\n utils.extend(this.options, opts);\n };\n\n proto.activate = function () {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if (this.options.rightToLeft) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements(this.element.children);\n moveElements(cellElems, this.slider);\n this.viewport.appendChild(this.slider);\n this.element.appendChild(this.viewport);\n // get cells from children\n this.reloadCells();\n\n if (this.options.accessibility) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener('keydown', this);\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n };\n\n // slider positions the cells\n proto._createSlider = function () {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[this.originSide] = 0;\n this.slider = slider;\n };\n\n proto._filterFindCellElements = function (elems) {\n return utils.filterFindElements(elems, this.options.cellSelector);\n };\n\n // goes through all children\n proto.reloadCells = function () {\n // collection of item elements\n this.cells = this._makeCells(this.slider.children);\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n };\n\n /**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\n proto._makeCells = function (elems) {\n var cellElems = this._filterFindCellElements(elems);\n\n // create new Flickity for collection\n var cells = cellElems.map(function (cellElem) {\n return new Cell(cellElem, this);\n }, this);\n\n return cells;\n };\n\n proto.getLastCell = function () {\n return this.cells[this.cells.length - 1];\n };\n\n proto.getLastSlide = function () {\n return this.slides[this.slides.length - 1];\n };\n\n // positions all cells\n proto.positionCells = function () {\n // size all cells\n this._sizeCells(this.cells);\n // position all cells\n this._positionCells(0);\n };\n\n /**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\n proto._positionCells = function (index) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if (index > 0) {\n var startCell = this.cells[index - 1];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for (var i = index; i < len; i++) {\n var cell = this.cells[i];\n cell.setPosition(cellX);\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max(cell.size.outerHeight, this.maxCellHeight);\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n };\n\n /**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\n proto._sizeCells = function (cells) {\n cells.forEach(function (cell) {\n cell.getSize();\n });\n };\n\n // -------------------------- -------------------------- //\n\n proto.updateSlides = function () {\n this.slides = [];\n if (!this.cells.length) {\n return;\n }\n\n var slide = new Slide(this);\n this.slides.push(slide);\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach(function (cell, i) {\n // just add cell if first cell in slide\n if (!slide.cells.length) {\n slide.addCell(cell);\n return;\n }\n\n var slideWidth = slide.outerWidth - slide.firstMargin + (cell.size.outerWidth - cell.size[nextMargin]);\n\n if (canCellFit.call(this, i, slideWidth)) {\n slide.addCell(cell);\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide(this);\n this.slides.push(slide);\n slide.addCell(cell);\n }\n }, this);\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n };\n\n proto._getCanCellFit = function () {\n var groupCells = this.options.groupCells;\n if (!groupCells) {\n return function () {\n return false;\n };\n } else if (typeof groupCells == 'number') {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt(groupCells, 10);\n return function (i) {\n return i % number !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' && groupCells.match(/^(\\d+)%$/);\n var percent = percentMatch ? parseInt(percentMatch[1], 10) / 100 : 1;\n return function (i, slideWidth) {\n return slideWidth <= (this.size.innerWidth + 1) * percent;\n };\n };\n\n // alias _init for jQuery plugin .flickity()\n proto._init = proto.reposition = function () {\n this.positionCells();\n this.positionSliderAtSelected();\n };\n\n proto.getSize = function () {\n this.size = getSize(this.element);\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n };\n\n var cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5\n },\n left: {\n left: 0,\n right: 1\n },\n right: {\n right: 0,\n left: 1\n }\n };\n\n proto.setCellAlign = function () {\n var shorthand = cellAlignShorthands[this.options.cellAlign];\n this.cellAlign = shorthand ? shorthand[this.originSide] : this.options.cellAlign;\n };\n\n proto.setGallerySize = function () {\n if (this.options.setGallerySize) {\n var height = this.options.adaptiveHeight && this.selectedSlide ? this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n };\n\n proto._getWrapShiftCells = function () {\n // only for wrap-around\n if (!this.options.wrapAround) {\n return;\n }\n // unshift previous cells\n this._unshiftCells(this.beforeShiftCells);\n this._unshiftCells(this.afterShiftCells);\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells(gapX, cellIndex, -1);\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells(gapX, 0, 1);\n };\n\n proto._getGapCells = function (gapX, cellIndex, increment) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while (gapX > 0) {\n var cell = this.cells[cellIndex];\n if (!cell) {\n break;\n }\n cells.push(cell);\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n };\n\n // ----- contain ----- //\n\n // contain cell targets so no excess sliding\n proto._containSlides = function () {\n if (!this.options.contain || this.options.wrapAround || !this.cells.length) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[endMargin];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[beginMargin];\n var endBound = contentWidth - this.size.innerWidth * (1 - this.cellAlign);\n // contain each cell target\n this.slides.forEach(function (slide) {\n if (isContentSmaller) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max(slide.target, beginBound);\n slide.target = Math.min(slide.target, endBound);\n }\n }, this);\n };\n\n // ----- ----- //\n\n /**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\n proto.dispatchEvent = function (type, event, args) {\n var emitArgs = event ? [event].concat(args) : args;\n this.emitEvent(type, emitArgs);\n\n if (jQuery && this.$element) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if (event) {\n // create jQuery event\n var jQEvent = jQuery.Event(event);\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger($event, args);\n }\n };\n\n // -------------------------- select -------------------------- //\n\n /**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\n proto.select = function (index, isWrap, isInstant) {\n if (!this.isActive) {\n return;\n }\n index = parseInt(index, 10);\n this._wrapSelect(index);\n\n if (this.options.wrapAround || isWrap) {\n index = utils.modulo(index, this.slides.length);\n }\n // bail if invalid index\n if (!this.slides[index]) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if (isInstant) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if (this.options.adaptiveHeight) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent('select', null, [index]);\n // change event if new index\n if (index != prevIndex) {\n this.dispatchEvent('change', null, [index]);\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n };\n\n // wraps position for wrapAround, to move to closest slide. #113\n proto._wrapSelect = function (index) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if (!isWrapping) {\n return index;\n }\n var wrapIndex = utils.modulo(index, len);\n // go to shortest\n var delta = Math.abs(wrapIndex - this.selectedIndex);\n var backWrapDelta = Math.abs(wrapIndex + len - this.selectedIndex);\n var forewardWrapDelta = Math.abs(wrapIndex - len - this.selectedIndex);\n if (!this.isDragSelect && backWrapDelta < delta) {\n index += len;\n } else if (!this.isDragSelect && forewardWrapDelta < delta) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if (index < 0) {\n this.x -= this.slideableWidth;\n } else if (index >= len) {\n this.x += this.slideableWidth;\n }\n };\n\n proto.previous = function (isWrap, isInstant) {\n this.select(this.selectedIndex - 1, isWrap, isInstant);\n };\n\n proto.next = function (isWrap, isInstant) {\n this.select(this.selectedIndex + 1, isWrap, isInstant);\n };\n\n proto.updateSelectedSlide = function () {\n var slide = this.slides[this.selectedIndex];\n // selectedIndex could be outside of slides, if triggered before resize()\n if (!slide) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n };\n\n proto.unselectSelectedSlide = function () {\n if (this.selectedSlide) {\n this.selectedSlide.unselect();\n }\n };\n\n proto.selectInitialIndex = function () {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if (this.isInitActivated) {\n this.select(this.selectedIndex, false, true);\n return;\n }\n // select with selector string\n if (initialIndex && typeof initialIndex == 'string') {\n var cell = this.queryCell(initialIndex);\n if (cell) {\n this.selectCell(initialIndex, false, true);\n return;\n }\n }\n\n var index = 0;\n // select with number\n if (initialIndex && this.slides[initialIndex]) {\n index = initialIndex;\n }\n // select instantly\n this.select(index, false, true);\n };\n\n /**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\n proto.selectCell = function (value, isWrap, isInstant) {\n // get cell\n var cell = this.queryCell(value);\n if (!cell) {\n return;\n }\n\n var index = this.getCellSlideIndex(cell);\n this.select(index, isWrap, isInstant);\n };\n\n proto.getCellSlideIndex = function (cell) {\n // get index of slides that has cell\n for (var i = 0; i < this.slides.length; i++) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf(cell);\n if (index != -1) {\n return i;\n }\n }\n };\n\n // -------------------------- get cells -------------------------- //\n\n /**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\n proto.getCell = function (elem) {\n // loop through cells to get the one that matches\n for (var i = 0; i < this.cells.length; i++) {\n var cell = this.cells[i];\n if (cell.element == elem) {\n return cell;\n }\n }\n };\n\n /**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\n proto.getCells = function (elems) {\n elems = utils.makeArray(elems);\n var cells = [];\n elems.forEach(function (elem) {\n var cell = this.getCell(elem);\n if (cell) {\n cells.push(cell);\n }\n }, this);\n return cells;\n };\n\n /**\n * get cell elements\n * @returns {Array} cellElems\n */\n proto.getCellElements = function () {\n return this.cells.map(function (cell) {\n return cell.element;\n });\n };\n\n /**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\n proto.getParentCell = function (elem) {\n // first check if elem is cell\n var cell = this.getCell(elem);\n if (cell) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent(elem, '.flickity-slider > *');\n return this.getCell(elem);\n };\n\n /**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\n proto.getAdjacentCellElements = function (adjCount, index) {\n if (!adjCount) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if (1 + adjCount * 2 >= len) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for (var i = index - adjCount; i <= index + adjCount; i++) {\n var slideIndex = this.options.wrapAround ? utils.modulo(i, len) : i;\n var slide = this.slides[slideIndex];\n if (slide) {\n cellElems = cellElems.concat(slide.getCellElements());\n }\n }\n return cellElems;\n };\n\n /**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\n proto.queryCell = function (selector) {\n if (typeof selector == 'number') {\n // use number as index\n return this.cells[selector];\n }\n if (typeof selector == 'string') {\n // do not select invalid selectors from hash: #123, #/. #791\n if (selector.match(/^[#\\.]?[\\d\\/]/)) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector(selector);\n }\n // get cell from element\n return this.getCell(selector);\n };\n\n // -------------------------- events -------------------------- //\n\n proto.uiChange = function () {\n this.emitEvent('uiChange');\n };\n\n // keep focus on element when child UI elements are clicked\n proto.childUIPointerDown = function (event) {\n // HACK iOS does not allow touch events to bubble up?!\n if (event.type != 'touchstart') {\n event.preventDefault();\n }\n this.focus();\n };\n\n // ----- resize ----- //\n\n proto.onresize = function () {\n this.watchCSS();\n this.resize();\n };\n\n utils.debounceMethod(Flickity, 'onresize', 150);\n\n proto.resize = function () {\n if (!this.isActive) {\n return;\n }\n this.getSize();\n // wrap values\n if (this.options.wrapAround) {\n this.x = utils.modulo(this.x, this.slideableWidth);\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell(selectedElement, false, true);\n };\n\n // watches the :after property, activates/deactivates\n proto.watchCSS = function () {\n var watchOption = this.options.watchCSS;\n if (!watchOption) {\n return;\n }\n\n var afterContent = getComputedStyle(this.element, ':after').content;\n // activate if :after { content: 'flickity' }\n if (afterContent.indexOf('flickity') != -1) {\n this.activate();\n } else {\n this.deactivate();\n }\n };\n\n // ----- keydown ----- //\n\n // go previous/next if left/right keys pressed\n proto.onkeydown = function (event) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if (!this.options.accessibility || isNotFocused) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[event.keyCode];\n if (handler) {\n handler.call(this);\n }\n };\n\n Flickity.keyboardHandlers = {\n // left arrow\n 37: function _() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[leftMethod]();\n },\n // right arrow\n 39: function _() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[rightMethod]();\n }\n };\n\n // ----- focus ----- //\n\n proto.focus = function () {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if (window.pageYOffset != prevScrollY) {\n window.scrollTo(window.pageXOffset, prevScrollY);\n }\n };\n\n // -------------------------- destroy -------------------------- //\n\n // deactivate all Flickity functionality, but keep stuff available\n proto.deactivate = function () {\n if (!this.isActive) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach(function (cell) {\n cell.destroy();\n });\n this.element.removeChild(this.viewport);\n // move child elements back into element\n moveElements(this.slider.children, this.element);\n if (this.options.accessibility) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener('keydown', this);\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n };\n\n proto.destroy = function () {\n this.deactivate();\n window.removeEventListener('resize', this);\n this.allOff();\n this.emitEvent('destroy');\n if (jQuery && this.$element) {\n jQuery.removeData(this.element, 'flickity');\n }\n delete this.element.flickityGUID;\n delete instances[this.guid];\n };\n\n // -------------------------- prototype -------------------------- //\n\n utils.extend(proto, animatePrototype);\n\n // -------------------------- extras -------------------------- //\n\n /**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\n Flickity.data = function (elem) {\n elem = utils.getQueryElement(elem);\n var id = elem && elem.flickityGUID;\n return id && instances[id];\n };\n\n utils.htmlInit(Flickity, 'flickity');\n\n if (jQuery && jQuery.bridget) {\n jQuery.bridget('flickity', Flickity);\n }\n\n // set internal jQuery, for Webpack + jQuery v3, #478\n Flickity.setJQuery = function (jq) {\n jQuery = jq;\n };\n\n Flickity.Cell = Cell;\n Flickity.Slide = Slide;\n\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * Flickity v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/drag.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/prev-next-button.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/page-dots.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/player.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/add-remove-cell.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/lazyload.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('./flickity'), require('./drag'), require('./prev-next-button'), require('./page-dots'), require('./player'), require('./add-remove-cell'), require('./lazyload'));\n }\n})(window, function factory(Flickity) {\n /*jshint strict: false*/\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/lazyload.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// lazyload\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (Flickity, utils) {\n return factory(window, Flickity, utils);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('./flickity'), require('fizzy-ui-utils'));\n } else {\n // browser global\n factory(window, window.Flickity, window.fizzyUIUtils);\n }\n})(window, function factory(window, Flickity, utils) {\n 'use strict';\n\n Flickity.createMethods.push('_createLazyload');\n var proto = Flickity.prototype;\n\n proto._createLazyload = function () {\n this.on('select', this.lazyLoad);\n };\n\n proto.lazyLoad = function () {\n var lazyLoad = this.options.lazyLoad;\n if (!lazyLoad) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements(adjCount);\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach(function (cellElem) {\n var lazyCellImages = getCellLazyImages(cellElem);\n lazyImages = lazyImages.concat(lazyCellImages);\n });\n // load lazy images\n lazyImages.forEach(function (img) {\n new LazyLoader(img, this);\n }, this);\n };\n\n function getCellLazyImages(cellElem) {\n // check if cell element is lazy image\n if (cellElem.nodeName == 'IMG') {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if (lazyloadAttr || srcAttr || srcsetAttr) {\n return [cellElem];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' + 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll(lazySelector);\n return utils.makeArray(imgs);\n }\n\n // -------------------------- LazyLoader -------------------------- //\n\n /**\n * class to handle loading images\n */\n function LazyLoader(img, flickity) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n }\n\n LazyLoader.prototype.handleEvent = utils.handleEvent;\n\n LazyLoader.prototype.load = function () {\n this.img.addEventListener('load', this);\n this.img.addEventListener('error', this);\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') || this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if (srcset) {\n this.img.setAttribute('srcset', srcset);\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n };\n\n LazyLoader.prototype.onload = function (event) {\n this.complete(event, 'flickity-lazyloaded');\n };\n\n LazyLoader.prototype.onerror = function (event) {\n this.complete(event, 'flickity-lazyerror');\n };\n\n LazyLoader.prototype.complete = function (event, className) {\n // unbind events\n this.img.removeEventListener('load', this);\n this.img.removeEventListener('error', this);\n\n var cell = this.flickity.getParentCell(this.img);\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange(cellElem);\n\n this.img.classList.add(className);\n this.flickity.dispatchEvent('lazyLoad', event, cellElem);\n };\n\n // ----- ----- //\n\n Flickity.LazyLoader = LazyLoader;\n\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/page-dots.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// page dots\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/unipointer/unipointer.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (Flickity, Unipointer, utils) {\n return factory(window, Flickity, Unipointer, utils);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('./flickity'), require('unipointer'), require('fizzy-ui-utils'));\n } else {\n // browser global\n factory(window, window.Flickity, window.Unipointer, window.fizzyUIUtils);\n }\n})(window, function factory(window, Flickity, Unipointer, utils) {\n\n // -------------------------- PageDots -------------------------- //\n\n 'use strict';\n\n function PageDots(parent) {\n this.parent = parent;\n this._create();\n }\n\n PageDots.prototype = Object.create(Unipointer.prototype);\n\n PageDots.prototype._create = function () {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind(this);\n this.on('pointerDown', this.parent.childUIPointerDown.bind(this.parent));\n };\n\n PageDots.prototype.activate = function () {\n this.setDots();\n this.holder.addEventListener('click', this.handleClick);\n this.bindStartEvent(this.holder);\n // add to DOM\n this.parent.element.appendChild(this.holder);\n };\n\n PageDots.prototype.deactivate = function () {\n this.holder.removeEventListener('click', this.handleClick);\n this.unbindStartEvent(this.holder);\n // remove from DOM\n this.parent.element.removeChild(this.holder);\n };\n\n PageDots.prototype.setDots = function () {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if (delta > 0) {\n this.addDots(delta);\n } else if (delta < 0) {\n this.removeDots(-delta);\n }\n };\n\n PageDots.prototype.addDots = function (count) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for (var i = length; i < max; i++) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute('aria-label', 'Page dot ' + (i + 1));\n fragment.appendChild(dot);\n newDots.push(dot);\n }\n\n this.holder.appendChild(fragment);\n this.dots = this.dots.concat(newDots);\n };\n\n PageDots.prototype.removeDots = function (count) {\n // remove from this.dots collection\n var removeDots = this.dots.splice(this.dots.length - count, count);\n // remove from DOM\n removeDots.forEach(function (dot) {\n this.holder.removeChild(dot);\n }, this);\n };\n\n PageDots.prototype.updateSelected = function () {\n // remove selected class on previous\n if (this.selectedDot) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if (!this.dots.length) {\n return;\n }\n this.selectedDot = this.dots[this.parent.selectedIndex];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute('aria-current', 'step');\n };\n\n PageDots.prototype.onTap = // old method name, backwards-compatible\n PageDots.prototype.onClick = function (event) {\n var target = event.target;\n // only care about dot clicks\n if (target.nodeName != 'LI') {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf(target);\n this.parent.select(index);\n };\n\n PageDots.prototype.destroy = function () {\n this.deactivate();\n this.allOff();\n };\n\n Flickity.PageDots = PageDots;\n\n // -------------------------- Flickity -------------------------- //\n\n utils.extend(Flickity.defaults, {\n pageDots: true\n });\n\n Flickity.createMethods.push('_createPageDots');\n\n var proto = Flickity.prototype;\n\n proto._createPageDots = function () {\n if (!this.options.pageDots) {\n return;\n }\n this.pageDots = new PageDots(this);\n // events\n this.on('activate', this.activatePageDots);\n this.on('select', this.updateSelectedPageDots);\n this.on('cellChange', this.updatePageDots);\n this.on('resize', this.updatePageDots);\n this.on('deactivate', this.deactivatePageDots);\n };\n\n proto.activatePageDots = function () {\n this.pageDots.activate();\n };\n\n proto.updateSelectedPageDots = function () {\n this.pageDots.updateSelected();\n };\n\n proto.updatePageDots = function () {\n this.pageDots.setDots();\n };\n\n proto.deactivatePageDots = function () {\n this.pageDots.deactivate();\n };\n\n // ----- ----- //\n\n Flickity.PageDots = PageDots;\n\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/player.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// player & autoPlay\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/ev-emitter/ev-emitter.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (EvEmitter, utils, Flickity) {\n return factory(EvEmitter, utils, Flickity);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('ev-emitter'), require('fizzy-ui-utils'), require('./flickity'));\n } else {\n // browser global\n factory(window.EvEmitter, window.fizzyUIUtils, window.Flickity);\n }\n})(window, function factory(EvEmitter, utils, Flickity) {\n\n 'use strict';\n\n // -------------------------- Player -------------------------- //\n\n function Player(parent) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind(this);\n this.onVisibilityPlay = this.visibilityPlay.bind(this);\n }\n\n Player.prototype = Object.create(EvEmitter.prototype);\n\n // start play\n Player.prototype.play = function () {\n if (this.state == 'playing') {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if (isPageHidden) {\n document.addEventListener('visibilitychange', this.onVisibilityPlay);\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n // start ticking\n this.tick();\n };\n\n Player.prototype.tick = function () {\n // do not tick if not playing\n if (this.state != 'playing') {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout(function () {\n _this.parent.next(true);\n _this.tick();\n }, time);\n };\n\n Player.prototype.stop = function () {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n };\n\n Player.prototype.clear = function () {\n clearTimeout(this.timeout);\n };\n\n Player.prototype.pause = function () {\n if (this.state == 'playing') {\n this.state = 'paused';\n this.clear();\n }\n };\n\n Player.prototype.unpause = function () {\n // re-start play if paused\n if (this.state == 'paused') {\n this.play();\n }\n };\n\n // pause if page visibility is hidden, unpause if visible\n Player.prototype.visibilityChange = function () {\n var isPageHidden = document.hidden;\n this[isPageHidden ? 'pause' : 'unpause']();\n };\n\n Player.prototype.visibilityPlay = function () {\n this.play();\n document.removeEventListener('visibilitychange', this.onVisibilityPlay);\n };\n\n // -------------------------- Flickity -------------------------- //\n\n utils.extend(Flickity.defaults, {\n pauseAutoPlayOnHover: true\n });\n\n Flickity.createMethods.push('_createPlayer');\n var proto = Flickity.prototype;\n\n proto._createPlayer = function () {\n this.player = new Player(this);\n\n this.on('activate', this.activatePlayer);\n this.on('uiChange', this.stopPlayer);\n this.on('pointerDown', this.stopPlayer);\n this.on('deactivate', this.deactivatePlayer);\n };\n\n proto.activatePlayer = function () {\n if (!this.options.autoPlay) {\n return;\n }\n this.player.play();\n this.element.addEventListener('mouseenter', this);\n };\n\n // Player API, don't hate the ... thanks I know where the door is\n\n proto.playPlayer = function () {\n this.player.play();\n };\n\n proto.stopPlayer = function () {\n this.player.stop();\n };\n\n proto.pausePlayer = function () {\n this.player.pause();\n };\n\n proto.unpausePlayer = function () {\n this.player.unpause();\n };\n\n proto.deactivatePlayer = function () {\n this.player.stop();\n this.element.removeEventListener('mouseenter', this);\n };\n\n // ----- mouseenter/leave ----- //\n\n // pause auto-play on hover\n proto.onmouseenter = function () {\n if (!this.options.pauseAutoPlayOnHover) {\n return;\n }\n this.player.pause();\n this.element.addEventListener('mouseleave', this);\n };\n\n // resume auto-play on hover off\n proto.onmouseleave = function () {\n this.player.unpause();\n this.element.removeEventListener('mouseleave', this);\n };\n\n // ----- ----- //\n\n Flickity.Player = Player;\n\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/prev-next-button.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// prev/next buttons\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/flickity.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/unipointer/unipointer.js\"), __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/fizzy-ui-utils/utils.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (Flickity, Unipointer, utils) {\n return factory(window, Flickity, Unipointer, utils);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('./flickity'), require('unipointer'), require('fizzy-ui-utils'));\n } else {\n // browser global\n factory(window, window.Flickity, window.Unipointer, window.fizzyUIUtils);\n }\n})(window, function factory(window, Flickity, Unipointer, utils) {\n 'use strict';\n\n var svgURI = 'http://www.w3.org/2000/svg';\n\n // -------------------------- PrevNextButton -------------------------- //\n\n function PrevNextButton(direction, parent) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n }\n\n PrevNextButton.prototype = Object.create(Unipointer.prototype);\n\n PrevNextButton.prototype._create = function () {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute('type', 'button');\n // init as disabled\n this.disable();\n\n element.setAttribute('aria-label', this.isPrevious ? 'Previous' : 'Next');\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild(svg);\n // events\n this.parent.on('select', this.update.bind(this));\n this.on('pointerDown', this.parent.childUIPointerDown.bind(this.parent));\n };\n\n PrevNextButton.prototype.activate = function () {\n this.bindStartEvent(this.element);\n this.element.addEventListener('click', this);\n // add to DOM\n this.parent.element.appendChild(this.element);\n };\n\n PrevNextButton.prototype.deactivate = function () {\n // remove from DOM\n this.parent.element.removeChild(this.element);\n // click events\n this.unbindStartEvent(this.element);\n this.element.removeEventListener('click', this);\n };\n\n PrevNextButton.prototype.createSVG = function () {\n var svg = document.createElementNS(svgURI, 'svg');\n svg.setAttribute('class', 'flickity-button-icon');\n svg.setAttribute('viewBox', '0 0 100 100');\n var path = document.createElementNS(svgURI, 'path');\n var pathMovements = getArrowMovements(this.parent.options.arrowShape);\n path.setAttribute('d', pathMovements);\n path.setAttribute('class', 'arrow');\n // rotate arrow\n if (!this.isLeft) {\n path.setAttribute('transform', 'translate(100, 100) rotate(180) ');\n }\n svg.appendChild(path);\n return svg;\n };\n\n // get SVG path movmement\n function getArrowMovements(shape) {\n // use shape as movement if string\n if (typeof shape == 'string') {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' + ' L ' + shape.x1 + ',' + (shape.y1 + 50) + ' L ' + shape.x2 + ',' + (shape.y2 + 50) + ' L ' + shape.x3 + ',50 ' + ' L ' + shape.x2 + ',' + (50 - shape.y2) + ' L ' + shape.x1 + ',' + (50 - shape.y1) + ' Z';\n }\n\n PrevNextButton.prototype.handleEvent = utils.handleEvent;\n\n PrevNextButton.prototype.onclick = function () {\n if (!this.isEnabled) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[method]();\n };\n\n // ----- ----- //\n\n PrevNextButton.prototype.enable = function () {\n if (this.isEnabled) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n };\n\n PrevNextButton.prototype.disable = function () {\n if (!this.isEnabled) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n };\n\n PrevNextButton.prototype.update = function () {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if (this.parent.options.wrapAround && slides.length > 1) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[method]();\n };\n\n PrevNextButton.prototype.destroy = function () {\n this.deactivate();\n this.allOff();\n };\n\n // -------------------------- Flickity prototype -------------------------- //\n\n utils.extend(Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n }\n });\n\n Flickity.createMethods.push('_createPrevNextButtons');\n var proto = Flickity.prototype;\n\n proto._createPrevNextButtons = function () {\n if (!this.options.prevNextButtons) {\n return;\n }\n\n this.prevButton = new PrevNextButton(-1, this);\n this.nextButton = new PrevNextButton(1, this);\n\n this.on('activate', this.activatePrevNextButtons);\n };\n\n proto.activatePrevNextButtons = function () {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on('deactivate', this.deactivatePrevNextButtons);\n };\n\n proto.deactivatePrevNextButtons = function () {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off('deactivate', this.deactivatePrevNextButtons);\n };\n\n // -------------------------- -------------------------- //\n\n Flickity.PrevNextButton = PrevNextButton;\n\n return Flickity;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/slide.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// slide\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n})(window, function factory() {\n 'use strict';\n\n function Slide(parent) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n }\n\n var proto = Slide.prototype;\n\n proto.addCell = function (cell) {\n this.cells.push(cell);\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max(cell.size.outerHeight, this.height);\n // first cell stuff\n if (this.cells.length == 1) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[beginMargin];\n }\n };\n\n proto.updateTarget = function () {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[endMargin] : 0;\n var slideWidth = this.outerWidth - (this.firstMargin + lastMargin);\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n };\n\n proto.getLastCell = function () {\n return this.cells[this.cells.length - 1];\n };\n\n proto.select = function () {\n this.cells.forEach(function (cell) {\n cell.select();\n });\n };\n\n proto.unselect = function () {\n this.cells.forEach(function (cell) {\n cell.unselect();\n });\n };\n\n proto.getCellElements = function () {\n return this.cells.map(function (cell) {\n return cell.element;\n });\n };\n\n return Slide;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/get-size/get-size.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n(function (window, factory) {\n /* jshint strict: false */ /* globals define, module */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n})(window, function factory() {\n 'use strict';\n\n // -------------------------- helpers -------------------------- //\n\n // get a number from a string, not a percentage\n\n function getStyleSize(value) {\n var num = parseFloat(value);\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN(num);\n return isValid && num;\n }\n\n function noop() {}\n\n var logError = typeof console == 'undefined' ? noop : function (message) {\n console.error(message);\n };\n\n // -------------------------- measurements -------------------------- //\n\n var measurements = ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'borderBottomWidth'];\n\n var measurementsLength = measurements.length;\n\n function getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for (var i = 0; i < measurementsLength; i++) {\n var measurement = measurements[i];\n size[measurement] = 0;\n }\n return size;\n }\n\n // -------------------------- getStyle -------------------------- //\n\n /**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\n function getStyle(elem) {\n var style = getComputedStyle(elem);\n if (!style) {\n logError('Style returned ' + style + '. Are you running this code in a hidden iframe on Firefox? ' + 'See https://bit.ly/getsizebug1');\n }\n return style;\n }\n\n // -------------------------- setup -------------------------- //\n\n var isSetup = false;\n\n var isBoxSizeOuter;\n\n /**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\n function setup() {\n // setup once\n if (isSetup) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild(div);\n var style = getStyle(div);\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round(getStyleSize(style.width)) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild(div);\n }\n\n // -------------------------- getSize -------------------------- //\n\n function getSize(elem) {\n setup();\n\n // use querySeletor if elem is string\n if (typeof elem == 'string') {\n elem = document.querySelector(elem);\n }\n\n // do not proceed on non-objects\n if (!elem || (typeof elem === 'undefined' ? 'undefined' : _typeof(elem)) != 'object' || !elem.nodeType) {\n return;\n }\n\n var style = getStyle(elem);\n\n // if hidden, everything is 0\n if (style.display == 'none') {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for (var i = 0; i < measurementsLength; i++) {\n var measurement = measurements[i];\n var value = style[measurement];\n var num = parseFloat(value);\n // any 'auto', 'medium' value will be 0\n size[measurement] = !isNaN(num) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize(style.width);\n if (styleWidth !== false) {\n size.width = styleWidth + (\n // add padding and border unless it's already including it\n isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth);\n }\n\n var styleHeight = getStyleSize(style.height);\n if (styleHeight !== false) {\n size.height = styleHeight + (\n // add padding and border unless it's already including it\n isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight);\n }\n\n size.innerWidth = size.width - (paddingWidth + borderWidth);\n size.innerHeight = size.height - (paddingHeight + borderHeight);\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n }\n\n return getSize;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/unidragger/unidragger.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n(function (window, factory) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/unipointer/unipointer.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (Unipointer) {\n return factory(window, Unipointer);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('unipointer'));\n } else {\n // browser global\n window.Unidragger = factory(window, window.Unipointer);\n }\n})(window, function factory(window, Unipointer) {\n\n 'use strict';\n\n // -------------------------- Unidragger -------------------------- //\n\n function Unidragger() {}\n\n // inherit Unipointer & EvEmitter\n var proto = Unidragger.prototype = Object.create(Unipointer.prototype);\n\n // ----- bind start ----- //\n\n proto.bindHandles = function () {\n this._bindHandles(true);\n };\n\n proto.unbindHandles = function () {\n this._bindHandles(false);\n };\n\n /**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\n proto._bindHandles = function (isAdd) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for (var i = 0; i < this.handles.length; i++) {\n var handle = this.handles[i];\n this._bindStartEvent(handle, isAdd);\n handle[bindMethod]('click', this);\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if (window.PointerEvent) {\n handle.style.touchAction = touchAction;\n }\n }\n };\n\n // prototype so it can be overwriteable by Flickity\n proto._touchActionValue = 'none';\n\n // ----- start event ----- //\n\n /**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\n proto.pointerDown = function (event, pointer) {\n var isOkay = this.okayPointerDown(event);\n if (!isOkay) {\n return;\n }\n // track start event position\n this.pointerDownPointer = pointer;\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents(event);\n this.emitEvent('pointerDown', [event, pointer]);\n };\n\n // nodes that have text fields\n var cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true\n };\n\n // input types that do not have text fields\n var clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true\n };\n\n // dismiss inputs with text fields. flickity#403, flickity#404\n proto.okayPointerDown = function (event) {\n var isCursorNode = cursorNodes[event.target.nodeName];\n var isClickType = clickTypes[event.target.type];\n var isOkay = !isCursorNode || isClickType;\n if (!isOkay) {\n this._pointerReset();\n }\n return isOkay;\n };\n\n // kludge to blur previously focused input\n proto.pointerDownBlur = function () {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if (canBlur) {\n focused.blur();\n }\n };\n\n // ----- move event ----- //\n\n /**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\n proto.pointerMove = function (event, pointer) {\n var moveVector = this._dragPointerMove(event, pointer);\n this.emitEvent('pointerMove', [event, pointer, moveVector]);\n this._dragMove(event, pointer, moveVector);\n };\n\n // base pointer move logic\n proto._dragPointerMove = function (event, pointer) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if (!this.isDragging && this.hasDragStarted(moveVector)) {\n this._dragStart(event, pointer);\n }\n return moveVector;\n };\n\n // condition if pointer has moved far enough to start drag\n proto.hasDragStarted = function (moveVector) {\n return Math.abs(moveVector.x) > 3 || Math.abs(moveVector.y) > 3;\n };\n\n // ----- end event ----- //\n\n /**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\n proto.pointerUp = function (event, pointer) {\n this.emitEvent('pointerUp', [event, pointer]);\n this._dragPointerUp(event, pointer);\n };\n\n proto._dragPointerUp = function (event, pointer) {\n if (this.isDragging) {\n this._dragEnd(event, pointer);\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick(event, pointer);\n }\n };\n\n // -------------------------- drag -------------------------- //\n\n // dragStart\n proto._dragStart = function (event, pointer) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart(event, pointer);\n };\n\n proto.dragStart = function (event, pointer) {\n this.emitEvent('dragStart', [event, pointer]);\n };\n\n // dragMove\n proto._dragMove = function (event, pointer, moveVector) {\n // do not drag if not dragging yet\n if (!this.isDragging) {\n return;\n }\n\n this.dragMove(event, pointer, moveVector);\n };\n\n proto.dragMove = function (event, pointer, moveVector) {\n event.preventDefault();\n this.emitEvent('dragMove', [event, pointer, moveVector]);\n };\n\n // dragEnd\n proto._dragEnd = function (event, pointer) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout(function () {\n delete this.isPreventingClicks;\n }.bind(this));\n\n this.dragEnd(event, pointer);\n };\n\n proto.dragEnd = function (event, pointer) {\n this.emitEvent('dragEnd', [event, pointer]);\n };\n\n // ----- onclick ----- //\n\n // handle all clicks and prevent clicks when dragging\n proto.onclick = function (event) {\n if (this.isPreventingClicks) {\n event.preventDefault();\n }\n };\n\n // ----- staticClick ----- //\n\n // triggered after pointer down & up with no/tiny movement\n proto._staticClick = function (event, pointer) {\n // ignore emulated mouse up clicks\n if (this.isIgnoringMouseUp && event.type == 'mouseup') {\n return;\n }\n\n this.staticClick(event, pointer);\n\n // set flag for emulated clicks 300ms after touchend\n if (event.type != 'mouseup') {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout(function () {\n delete this.isIgnoringMouseUp;\n }.bind(this), 400);\n }\n };\n\n proto.staticClick = function (event, pointer) {\n this.emitEvent('staticClick', [event, pointer]);\n };\n\n // ----- utils ----- //\n\n Unidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n // ----- ----- //\n\n return Unidragger;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/unipointer/unipointer.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n(function (window, factory) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/ev-emitter/ev-emitter.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (EvEmitter) {\n return factory(window, EvEmitter);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('ev-emitter'));\n } else {\n // browser global\n window.Unipointer = factory(window, window.EvEmitter);\n }\n})(window, function factory(window, EvEmitter) {\n\n 'use strict';\n\n function noop() {}\n\n function Unipointer() {}\n\n // inherit EvEmitter\n var proto = Unipointer.prototype = Object.create(EvEmitter.prototype);\n\n proto.bindStartEvent = function (elem) {\n this._bindStartEvent(elem, true);\n };\n\n proto.unbindStartEvent = function (elem) {\n this._bindStartEvent(elem, false);\n };\n\n /**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\n proto._bindStartEvent = function (elem, isAdd) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if (window.PointerEvent) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ('ontouchstart' in window) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\n }\n elem[bindMethod](startEvent, this);\n };\n\n // trigger handler methods for events\n proto.handleEvent = function (event) {\n var method = 'on' + event.type;\n if (this[method]) {\n this[method](event);\n }\n };\n\n // returns the touch that we're keeping track of\n proto.getTouch = function (touches) {\n for (var i = 0; i < touches.length; i++) {\n var touch = touches[i];\n if (touch.identifier == this.pointerIdentifier) {\n return touch;\n }\n }\n };\n\n // ----- start event ----- //\n\n proto.onmousedown = function (event) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if (button && button !== 0 && button !== 1) {\n return;\n }\n this._pointerDown(event, event);\n };\n\n proto.ontouchstart = function (event) {\n this._pointerDown(event, event.changedTouches[0]);\n };\n\n proto.onpointerdown = function (event) {\n this._pointerDown(event, event);\n };\n\n /**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\n proto._pointerDown = function (event, pointer) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if (event.button || this.isPointerDown) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown(event, pointer);\n };\n\n proto.pointerDown = function (event, pointer) {\n this._bindPostStartEvents(event);\n this.emitEvent('pointerDown', [event, pointer]);\n };\n\n // hash of events to be bound after start event\n var postStartEvents = {\n mousedown: ['mousemove', 'mouseup'],\n touchstart: ['touchmove', 'touchend', 'touchcancel'],\n pointerdown: ['pointermove', 'pointerup', 'pointercancel']\n };\n\n proto._bindPostStartEvents = function (event) {\n if (!event) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[event.type];\n // bind events to node\n events.forEach(function (eventName) {\n window.addEventListener(eventName, this);\n }, this);\n // save these arguments\n this._boundPointerEvents = events;\n };\n\n proto._unbindPostStartEvents = function () {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if (!this._boundPointerEvents) {\n return;\n }\n this._boundPointerEvents.forEach(function (eventName) {\n window.removeEventListener(eventName, this);\n }, this);\n\n delete this._boundPointerEvents;\n };\n\n // ----- move event ----- //\n\n proto.onmousemove = function (event) {\n this._pointerMove(event, event);\n };\n\n proto.onpointermove = function (event) {\n if (event.pointerId == this.pointerIdentifier) {\n this._pointerMove(event, event);\n }\n };\n\n proto.ontouchmove = function (event) {\n var touch = this.getTouch(event.changedTouches);\n if (touch) {\n this._pointerMove(event, touch);\n }\n };\n\n /**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\n proto._pointerMove = function (event, pointer) {\n this.pointerMove(event, pointer);\n };\n\n // public\n proto.pointerMove = function (event, pointer) {\n this.emitEvent('pointerMove', [event, pointer]);\n };\n\n // ----- end event ----- //\n\n\n proto.onmouseup = function (event) {\n this._pointerUp(event, event);\n };\n\n proto.onpointerup = function (event) {\n if (event.pointerId == this.pointerIdentifier) {\n this._pointerUp(event, event);\n }\n };\n\n proto.ontouchend = function (event) {\n var touch = this.getTouch(event.changedTouches);\n if (touch) {\n this._pointerUp(event, touch);\n }\n };\n\n /**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\n proto._pointerUp = function (event, pointer) {\n this._pointerDone();\n this.pointerUp(event, pointer);\n };\n\n // public\n proto.pointerUp = function (event, pointer) {\n this.emitEvent('pointerUp', [event, pointer]);\n };\n\n // ----- pointer done ----- //\n\n // triggered on pointer up & pointer cancel\n proto._pointerDone = function () {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n };\n\n proto._pointerReset = function () {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n };\n\n proto.pointerDone = noop;\n\n // ----- pointer cancel ----- //\n\n proto.onpointercancel = function (event) {\n if (event.pointerId == this.pointerIdentifier) {\n this._pointerCancel(event, event);\n }\n };\n\n proto.ontouchcancel = function (event) {\n var touch = this.getTouch(event.changedTouches);\n if (touch) {\n this._pointerCancel(event, touch);\n }\n };\n\n /**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\n proto._pointerCancel = function (event, pointer) {\n this._pointerDone();\n this.pointerCancel(event, pointer);\n };\n\n // public\n proto.pointerCancel = function (event, pointer) {\n this.emitEvent('pointerCancel', [event, pointer]);\n };\n\n // ----- ----- //\n\n // utility function for getting x/y coords from event\n Unipointer.getPointerPoint = function (pointer) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n };\n\n // ----- ----- //\n\n return Unipointer;\n});\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/blocks/gallery/component.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n// import debounce from '@core/plugins/lib/fn.js';\n\n\nvar _jquery = __webpack_require__(\"external \\\"jQuery\\\"\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _flickity = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity/js/index.js\");\n\nvar _flickity2 = _interopRequireDefault(_flickity);\n\n__webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/flickity-sync/flickity-sync.js\");\n\nvar _debug = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/debug/src/browser.js\");\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _lib = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/core/plugins/lib/index.js\");\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _index = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/blocks/gallery/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nwindow.Symbol = Symbol;\nvar log = (0, _debug2.default)('components/blocks/gallery:flickity');\n\nvar ImageGalleryComponent = function () {\n function ImageGalleryComponent(element, options) {\n _classCallCheck(this, ImageGalleryComponent);\n\n this.element = element;\n this.$element = (0, _jquery2.default)(element);\n this.options = options;\n this.options.nextKeyCodes = this.options.nextKeyCodes.replace(' ', '').split(',') || [];\n this.options.previousKeyCodes = this.options.previousKeyCodes.replace(' ', '').split(',') || [];\n this.SHIFT_PRESSED = false;\n\n this.$thumbnails = this.$element.find(this.options.thumbnailsContainerSelector);\n this.$main = this.$element.find(this.options.mainContainerSelector);\n\n this.element.component = this;\n\n log('constructed', this.element);\n\n this.init();\n }\n\n _createClass(ImageGalleryComponent, [{\n key: 'watch',\n value: function watch() {\n window.addEventListener('resize', this.fn.debounce(this.init.bind(this), 150));\n log('watching', this.element);\n }\n /**\r\n * // 1. trigger redraw for transition\r\n */\n\n }, {\n key: 'init',\n value: function init() {\n var element = this.element;\n\n var main = this.$main.get(0);\n this.$main.removeClass(this.options.mainContainerHiddenClass);\n main.offsetHeight; // 1\n\n if (window.matchMedia('(minWidth: 36em)')) {\n\n var thumbs = this.$thumbnails.get(0);\n this.$thumbnails.removeClass(this.options.thumbnailsContainerHiddenClass);\n thumbs.offsetHeight; // 1\n\n this.mainSlider = new _flickity2.default(main, {\n pageDots: true,\n draggable: true,\n // asNavFor: thumbs,\n setGallerySize: true,\n prevNextButtons: false,\n on: {\n ready: this.onReady.bind(this)\n }\n });\n\n this.mainSlider.on('select', this.onShowMainSlide.bind(this));\n\n this.thumbSlider = new _flickity2.default(thumbs, {\n adaptiveHeight: false,\n setGallerySize: false,\n sync: this.options.mainContainerSelector,\n pageDots: false,\n contain: true,\n arrowShape: this.options.arrowShape\n });\n\n this.thumbSlider.on('select', this.onSelectThumb.bind(this));\n this.$thumbnails.on('click', 'button', this.onCellClick.bind(this));\n\n log('initalised.mediumUpScreens', this.element);\n } else {\n this.mainSlider = new _flickity2.default(main, {\n pageDots: true,\n setGallerySize: true,\n prevNextButtons: false\n });\n\n log('initalised.smallScreens', element);\n }\n }\n }, {\n key: 'onReady',\n value: function onReady() {\n log('Flickity ready');\n this.onShowMainSlide();\n }\n }, {\n key: 'onCellClick',\n value: function onCellClick(event) {\n var currentTarget = event.currentTarget;\n\n var selected = this.$thumbnails.find('button').index(currentTarget);\n log('onCellClick', { currentTarget: currentTarget, selected: selected });\n this.thumbSlider.select(selected);\n }\n }, {\n key: 'onSelectThumb',\n value: function onSelectThumb(index) {\n log('onSelectThumb', index);\n\n var selected = this.$thumbnails.find('.is-selected');\n // selected.focus();\n\n this.mainSlider.select(selected.index());\n }\n }, {\n key: 'onShowMainSlide',\n value: function onShowMainSlide(index) {\n log('onShowMainSlide index', index || this.options.initialIndex);\n\n var mainInstance = this.getMainSlider();\n log('mainInstance.selectedElement', mainInstance.selectedElement, mainInstance.selectedElement.className);\n\n //\tPresumes listeners are ready - see comment in lazy-iframe.js\n mainInstance.cells.forEach(function (slide) {\n (0, _jquery2.default)(slide.element).trigger('hide');\n });\n (0, _jquery2.default)(mainInstance.selectedElement).trigger('show');\n }\n }, {\n key: 'getMainSlider',\n value: function getMainSlider() {\n return _flickity2.default.data(this.$main[0]);\n }\n }]);\n\n return ImageGalleryComponent;\n}();\n\nImageGalleryComponent.DEFAULTS = {\n mainContainerSelector: '.block-gallery__main-container',\n mainContainerHiddenClass: 'block-gallery__main--is-hidden',\n thumbnailsContainerSelector: '.block-gallery__thumbnails-container',\n thumbnailsItemSelector: '.block-gallery__thumbnail-item',\n thumbnailsContainerHiddenClass: 'block-gallery__thumbnails-container--is-hidden',\n nextKeyCodes: '39, 40', // right or down\n previousKeyCodes: '37, 48', // left or up\n // https://flickity.metafizzy.co/options.html#arrowshape\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n },\n initialIndex: 0\n};\nexports.default = ImageGalleryComponent;\n//plugin(PLUGIN_NAME, ImageGalleryComponent);\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// scripts/component--gallery--1e5f2cd293d99a514b92.js","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/desandro-matches-selector/matches-selector.js","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ev-emitter/ev-emitter.js","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fizzy-ui-utils/utils.js","/*!\n * Flickity sync v2.0.0\n * enable sync for Flickity\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true*/\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'flickity/js/index',\n 'fizzy-ui-utils/utils'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( Flickity, utils ) {\n\n'use strict';\n\n// -------------------------- sync prototype -------------------------- //\n\n// Flickity.defaults.sync = false;\n\nFlickity.createMethods.push('_createSync');\n\nFlickity.prototype._createSync = function() {\n this.syncers = {};\n var syncOption = this.options.sync;\n\n this.on( 'destroy', this.unsyncAll );\n\n if ( !syncOption ) {\n return;\n }\n // HACK do async, give time for other flickity to be initalized\n var _this = this;\n setTimeout( function initSyncCompanion() {\n _this.sync( syncOption );\n });\n};\n\n/**\n * sync\n * @param {Element} or {String} elem\n */\nFlickity.prototype.sync = function( elem ) {\n elem = utils.getQueryElement( elem );\n var companion = Flickity.data( elem );\n if ( !companion ) {\n return;\n }\n // two hearts, that beat as one\n this._syncCompanion( companion );\n companion._syncCompanion( this );\n};\n\n/**\n * @param {Flickity} companion\n */\nFlickity.prototype._syncCompanion = function( companion ) {\n var _this = this;\n function syncListener() {\n var index = _this.selectedIndex;\n // do not select if already selected, prevent infinite loop\n if ( companion.selectedIndex != index ) {\n companion.select( index );\n }\n }\n this.on( 'select', syncListener );\n // keep track of all synced flickities\n // hold on to listener to unsync\n this.syncers[ companion.guid ] = {\n flickity: companion,\n listener: syncListener\n };\n};\n\n/**\n * unsync\n * @param {Element} or {String} elem\n */\nFlickity.prototype.unsync = function( elem ) {\n elem = utils.getQueryElement( elem );\n var companion = Flickity.data( elem );\n this._unsync( companion );\n};\n\n/**\n * @param {Flickity} companion\n */\nFlickity.prototype._unsync = function( companion ) {\n if ( !companion ) {\n return;\n }\n // I love you but I've chosen darkness\n this._unsyncCompanion( companion );\n companion._unsyncCompanion( this );\n};\n\n/**\n * @param {Flickity} companion\n */\nFlickity.prototype._unsyncCompanion = function( companion ) {\n var id = companion.guid;\n var syncer = this.syncers[ id ];\n this.off( 'select', syncer.listener );\n delete this.syncers[ id ];\n};\n\nFlickity.prototype.unsyncAll = function() {\n for ( var id in this.syncers ) {\n var syncer = this.syncers[ id ];\n this._unsync( syncer.flickity );\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity-sync/flickity-sync.js","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n });\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/add-remove-cell.js","// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils'\n ], function( utils ) {\n return factory( window, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n });\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i=0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i=0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/animate.js","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size'\n ], function( getSize ) {\n return factory( window, getSize );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/cell.js","// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x = moveVector.x % this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/drag.js","// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate'\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i=index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n });\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match(/^(\\d+)%$/);\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5\n },\n left: {\n left: 0,\n right: 1\n },\n right: {\n right: 0,\n left: 1\n }\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i=0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i=0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility ||isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n });\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/flickity.js","/*!\n * Flickity v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n})( window, function factory( Flickity ) {\n /*jshint strict: false*/\n return Flickity;\n});\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/index.js","// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n });\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/lazyload.js","// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/page-dots.js","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity'\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/player.js","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path');\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/prev-next-button.js","// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n });\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n });\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\nreturn Slide;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/slide.js","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/get-size/get-size.js","/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n this.pointerDownPointer = pointer;\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/unidragger/unidragger.js","/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/unipointer/unipointer.js","import $ from 'jquery';\r\nimport Flickity from 'flickity';\r\nimport 'flickity-sync';\r\n\r\n// import debounce from '@core/plugins/lib/fn.js';\r\nimport debug from 'debug';\r\nimport plugin from '@core/plugins/lib';\r\nimport { PLUGIN_NAME } from './index';\r\n\r\nwindow.Symbol = Symbol;\r\nconst log = debug('components/blocks/gallery:flickity');\r\n\r\nclass ImageGalleryComponent {\r\n\r\n constructor (element, options) {\r\n this.element = element;\r\n this.$element = $(element);\r\n this.options = options;\r\n this.options.nextKeyCodes = this.options.nextKeyCodes.replace(' ', '').split(',') || [];\r\n this.options.previousKeyCodes = this.options.previousKeyCodes.replace(' ', '').split(',') || [];\r\n this.SHIFT_PRESSED = false;\r\n\r\n this.$thumbnails = this.$element.find(this.options.thumbnailsContainerSelector);\r\n this.$main = this.$element.find(this.options.mainContainerSelector);\r\n\r\n this.element.component = this;\r\n\r\n log('constructed', this.element);\r\n\r\n this.init();\r\n }\r\n\r\n watch () {\r\n window.addEventListener('resize',\r\n this.fn.debounce(this.init.bind(this), 150));\r\n log('watching', this.element);\r\n\r\n }\r\n /**\r\n * // 1. trigger redraw for transition\r\n */\r\n init () {\r\n const element = this.element;\r\n\r\n const main = this.$main.get(0);\r\n this.$main.removeClass(this.options.mainContainerHiddenClass);\r\n main.offsetHeight; // 1\r\n\r\n if (window.matchMedia('(minWidth: 36em)')) {\r\n\r\n const thumbs = this.$thumbnails.get(0);\r\n this.$thumbnails.removeClass(this.options.thumbnailsContainerHiddenClass);\r\n thumbs.offsetHeight; // 1\r\n\r\n this.mainSlider = new Flickity(main, {\r\n pageDots: true,\r\n\t\t\t\tdraggable: true,\r\n\t\t\t\t// asNavFor: thumbs,\r\n setGallerySize: true,\r\n\t\t\t\tprevNextButtons: false,\r\n\t\t\t\ton: {\r\n\t\t\t\t\tready: this.onReady.bind(this)\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n this.mainSlider.on('select', this.onShowMainSlide.bind(this));\r\n\r\n\r\n this.thumbSlider = new Flickity(thumbs, {\r\n adaptiveHeight: false,\r\n setGallerySize: false,\r\n sync: this.options.mainContainerSelector,\r\n pageDots: false,\r\n contain: true,\r\n arrowShape: this.options.arrowShape\r\n });\r\n\r\n this.thumbSlider.on('select', this.onSelectThumb.bind(this));\r\n this.$thumbnails.on('click', 'button', this.onCellClick.bind(this));\r\n\r\n log('initalised.mediumUpScreens', this.element);\r\n } else {\r\n\t\t\tthis.mainSlider = new Flickity(main, {\r\n pageDots: true,\r\n setGallerySize: true,\r\n prevNextButtons: false\r\n });\r\n\r\n log('initalised.smallScreens', element);\r\n\t\t}\r\n\t}\r\n\r\n\tonReady () {\r\n\t\tlog('Flickity ready');\r\n\t\tthis.onShowMainSlide();\r\n\t}\r\n\r\n onCellClick (event) {\r\n const {currentTarget} = event;\r\n const selected = this.$thumbnails.find('button').index(currentTarget);\r\n log('onCellClick', {currentTarget, selected});\r\n this.thumbSlider.select(selected);\r\n }\r\n\r\n onSelectThumb (index) {\r\n log('onSelectThumb', index);\r\n\r\n const selected = this.$thumbnails.find('.is-selected');\r\n // selected.focus();\r\n\r\n this.mainSlider.select(selected.index());\r\n\t}\r\n\r\n\tonShowMainSlide (index) {\r\n\t\tlog('onShowMainSlide index', index || this.options.initialIndex);\r\n\r\n\t\tconst mainInstance = this.getMainSlider();\r\n\t\tlog('mainInstance.selectedElement', mainInstance.selectedElement, mainInstance.selectedElement.className);\r\n\r\n\t\t//\tPresumes listeners are ready - see comment in lazy-iframe.js\r\n\t\tmainInstance.cells.forEach((slide)=>{\r\n\t\t\t$(slide.element).trigger('hide');\r\n\t\t});\r\n\t\t$(mainInstance.selectedElement).trigger('show');\r\n\t}\r\n\r\n\tgetMainSlider () {\r\n\t\treturn Flickity.data(this.$main[0]);\r\n\t}\r\n}\r\n\r\nImageGalleryComponent.DEFAULTS = {\r\n mainContainerSelector: '.block-gallery__main-container',\r\n mainContainerHiddenClass: 'block-gallery__main--is-hidden',\r\n thumbnailsContainerSelector: '.block-gallery__thumbnails-container',\r\n thumbnailsItemSelector: '.block-gallery__thumbnail-item',\r\n thumbnailsContainerHiddenClass: 'block-gallery__thumbnails-container--is-hidden',\r\n nextKeyCodes: '39, 40', // right or down\r\n previousKeyCodes: '37, 48', // left or up\r\n // https://flickity.metafizzy.co/options.html#arrowshape\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60, y1: 50,\r\n x2: 70, y2: 40,\r\n x3: 30\r\n\t},\r\n\tinitialIndex: 0\r\n};\r\nexport default ImageGalleryComponent;\r\n//plugin(PLUGIN_NAME, ImageGalleryComponent);\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./project/client/src/site__ale001/components/blocks/gallery/component.js"],"sourceRoot":""}