epfl-elements 5.6.0 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +479 -0
- package/assets/config/bootstrap-variables.scss +3 -2
- package/dist/components/molecules/breadcrumb/breadcrumb-dropdown.twig +0 -1
- package/dist/components/molecules/breadcrumb/breadcrumb-tagged.twig +0 -1
- package/dist/components/molecules/form-group/form-group-valid.twig +13 -0
- package/dist/components/molecules/form-group/form-group.yml +2 -0
- package/dist/components/molecules/table-of-contents/table-of-contents-inline.twig +8 -0
- package/dist/components/molecules/table-of-contents/table-of-contents-multi-level.twig +14 -0
- package/dist/components/molecules/table-of-contents/table-of-contents.twig +9 -0
- package/dist/components/molecules/table-of-contents/table-of-contents.yml +13 -0
- package/dist/components/organisms/form/form.twig +1 -0
- package/dist/components/organisms/header/header-light-drawer.twig +7 -7
- package/dist/components/organisms/header/header-light-submenu.twig +39 -0
- package/dist/components/organisms/header/header-light.twig +3 -16
- package/dist/components/organisms/header/header.yml +13 -0
- package/dist/components/pages/event-detail/event-detail.twig +1 -1
- package/dist/components/pages/event-list/event-list.twig +16 -16
- package/dist/components/pages/facultes/facultes.twig +1 -1
- package/dist/components/pages/news-homepage/news-homepage.twig +2 -3
- package/dist/css/elements.css +75 -23
- package/dist/css/elements.min.css +1 -1
- package/dist/css/elements.min.css.map +1 -1
- package/dist/css/reader.css +2 -1
- package/dist/css/reader.min.css +1 -1
- package/dist/css/reader.min.css.map +1 -1
- package/dist/css/vendors.min.css +2 -2
- package/dist/js/elements.js +3275 -3255
- package/dist/js/elements.min.js +1 -1
- package/dist/js/elements.min.js.map +1 -1
- package/dist/js/reader.js +44616 -44431
- package/dist/js/reader.min.js +17 -17
- package/dist/js/reader.min.js.map +1 -1
- package/dist/js/spritemap.js +2 -2
- package/dist/js/vendors.min.js +1 -1
- package/dist/package.json +3 -3
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js/elements.min.js","mappings":"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","sources":["webpack://epfl-elements/./node_modules/desandro-matches-selector/matches-selector.js","webpack://epfl-elements/./node_modules/ev-emitter/ev-emitter.js","webpack://epfl-elements/./node_modules/fizzy-ui-utils/utils.js","webpack://epfl-elements/./node_modules/flickity-as-nav-for/as-nav-for.js","webpack://epfl-elements/./node_modules/flickity-fullscreen/fullscreen.js","webpack://epfl-elements/./node_modules/flickity/js/add-remove-cell.js","webpack://epfl-elements/./node_modules/flickity/js/animate.js","webpack://epfl-elements/./node_modules/flickity/js/cell.js","webpack://epfl-elements/./node_modules/flickity/js/drag.js","webpack://epfl-elements/./node_modules/flickity/js/flickity.js","webpack://epfl-elements/./node_modules/flickity/js/index.js","webpack://epfl-elements/./node_modules/flickity/js/lazyload.js","webpack://epfl-elements/./node_modules/flickity/js/page-dots.js","webpack://epfl-elements/./node_modules/flickity/js/player.js","webpack://epfl-elements/./node_modules/flickity/js/prev-next-button.js","webpack://epfl-elements/./node_modules/flickity/js/slide.js","webpack://epfl-elements/./node_modules/get-size/get-size.js","webpack://epfl-elements/./node_modules/imagesloaded/imagesloaded.js","webpack://epfl-elements/./node_modules/unidragger/unidragger.js","webpack://epfl-elements/./node_modules/unipointer/unipointer.js","webpack://epfl-elements/webpack/bootstrap","webpack://epfl-elements/webpack/runtime/compat get default export","webpack://epfl-elements/webpack/runtime/define property getters","webpack://epfl-elements/webpack/runtime/hasOwnProperty shorthand","webpack://epfl-elements/./assets/components/atoms/upload/upload.js","webpack://epfl-elements/./assets/components/molecules/datepicker/datepicker-fancy.js","webpack://epfl-elements/./assets/components/molecules/gallery/gallery.js","webpack://epfl-elements/./assets/components/molecules/social/social.js","webpack://epfl-elements/./assets/icons/svg-icons.js","webpack://epfl-elements/./assets/components/organisms/nav-main/nav-main.js","webpack://epfl-elements/./assets/components/atoms/drawer/drawer.js","webpack://epfl-elements/./assets/components/content-types/study-plan/study-plan.js","webpack://epfl-elements/./assets/components/organisms/cookie-consent/cookie-consent.js","webpack://epfl-elements/./assets/components/organisms/restauration/restauration.js","webpack://epfl-elements/./assets/components/entrypoint.js","webpack://epfl-elements/./assets/components/atoms/select/select-multiple.js","webpack://epfl-elements/./assets/components/atoms/tag/tag-input.js","webpack://epfl-elements/./assets/components/molecules/datepicker/datepicker.js","webpack://epfl-elements/./assets/components/atoms/popover/popover.js","webpack://epfl-elements/./assets/components/molecules/search/search.js","webpack://epfl-elements/./assets/components/molecules/search/search-mobile.js","webpack://epfl-elements/./assets/components/content-types/coursebook/coursebook.js","webpack://epfl-elements/./assets/components/organisms/card-slider/card-slider.js","webpack://epfl-elements/./assets/components/molecules/breadcrumb/breadcrumb.js","webpack://epfl-elements/./assets/components/organisms/footer/back-to-top-button.js","webpack://epfl-elements/./assets/components/atoms/range/range.js","webpack://epfl-elements/./assets/components/pages/lab-homepage/lab-homepage.js","webpack://epfl-elements/./assets/components/guide.js","webpack://epfl-elements/./assets/components/anchors.js"],"sourcesContent":["/**\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 * 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 * 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 * Flickity asNavFor v2.0.1\n * enable asNavFor 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// -------------------------- asNavFor prototype -------------------------- //\n\n// Flickity.defaults.asNavFor = null;\n\nFlickity.createMethods.push('_createAsNavFor');\n\nvar proto = Flickity.prototype;\n\nproto._createAsNavFor = function() {\n this.on( 'activate', this.activateAsNavFor );\n this.on( 'deactivate', this.deactivateAsNavFor );\n this.on( 'destroy', this.destroyAsNavFor );\n\n var asNavForOption = this.options.asNavFor;\n if ( !asNavForOption ) {\n return;\n }\n // HACK do async, give time for other flickity to be initalized\n var _this = this;\n setTimeout( function initNavCompanion() {\n _this.setNavCompanion( asNavForOption );\n });\n};\n\nproto.setNavCompanion = function( elem ) {\n elem = utils.getQueryElement( elem );\n var companion = Flickity.data( elem );\n // stop if no companion or companion is self\n if ( !companion || companion == this ) {\n return;\n }\n\n this.navCompanion = companion;\n // companion select\n var _this = this;\n this.onNavCompanionSelect = function() {\n _this.navCompanionSelect();\n };\n companion.on( 'select', this.onNavCompanionSelect );\n // click\n this.on( 'staticClick', this.onNavStaticClick );\n\n this.navCompanionSelect( true );\n};\n\nproto.navCompanionSelect = function( isInstant ) {\n if ( !this.navCompanion ) {\n return;\n }\n // select slide that matches first cell of slide\n var selectedCell = this.navCompanion.selectedCells[0];\n var firstIndex = this.navCompanion.cells.indexOf( selectedCell );\n var lastIndex = firstIndex + this.navCompanion.selectedCells.length - 1;\n var selectIndex = Math.floor( lerp( firstIndex, lastIndex,\n this.navCompanion.cellAlign ) );\n this.selectCell( selectIndex, false, isInstant );\n // set nav selected class\n this.removeNavSelectedElements();\n // stop if companion has more cells than this one\n if ( selectIndex >= this.cells.length ) {\n return;\n }\n\n var selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\n this.navSelectedElements = selectedCells.map( function( cell ) {\n return cell.element;\n });\n this.changeNavSelectedClass('add');\n};\n\nfunction lerp( a, b, t ) {\n return ( b - a ) * t + a;\n}\n\nproto.changeNavSelectedClass = function( method ) {\n this.navSelectedElements.forEach( function( navElem ) {\n navElem.classList[ method ]('is-nav-selected');\n });\n};\n\nproto.activateAsNavFor = function() {\n this.navCompanionSelect( true );\n};\n\nproto.removeNavSelectedElements = function() {\n if ( !this.navSelectedElements ) {\n return;\n }\n this.changeNavSelectedClass('remove');\n delete this.navSelectedElements;\n};\n\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\n if ( typeof cellIndex == 'number' ) {\n this.navCompanion.selectCell( cellIndex );\n }\n};\n\nproto.deactivateAsNavFor = function() {\n this.removeNavSelectedElements();\n};\n\nproto.destroyAsNavFor = function() {\n if ( !this.navCompanion ) {\n return;\n }\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\n this.off( 'staticClick', this.onNavStaticClick );\n delete this.navCompanion;\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","/*!\n * Flickity fullscreen v1.1.1\n * Enable fullscreen view 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 ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity')\n );\n } else {\n // browser global\n factory(\n window.Flickity\n );\n }\n\n}( window, function factory( Flickity ) {\n\n'use strict';\n\nFlickity.createMethods.push('_createFullscreen');\nvar proto = Flickity.prototype;\n\n\nproto._createFullscreen = function() {\n this.isFullscreen = false;\n\n if ( !this.options.fullscreen ) {\n return;\n }\n // buttons\n this.viewFullscreenButton = new FullscreenButton( 'view', this );\n this.exitFullscreenButton = new FullscreenButton( 'exit', this );\n\n this.on( 'activate', this._changeFullscreenActive );\n this.on( 'deactivate', this._changeFullscreenActive );\n};\n\n// ----- activation ----- //\n\nproto._changeFullscreenActive = function() {\n var childMethod = this.isActive ? 'appendChild' : 'removeChild';\n this.element[ childMethod ]( this.viewFullscreenButton.element );\n this.element[ childMethod ]( this.exitFullscreenButton.element );\n // activate or deactivate buttons\n var activeMethod = this.isActive ? 'activate' : 'deactivate';\n this.viewFullscreenButton[ activeMethod ]();\n this.exitFullscreenButton[ activeMethod ]();\n};\n\n// ----- view, exit, toggle ----- //\n\nproto.viewFullscreen = function() {\n this._changeFullscreen( true );\n this.focus();\n};\n\nproto.exitFullscreen = function() {\n this._changeFullscreen( false );\n};\n\nproto._changeFullscreen = function( isView ) {\n if ( this.isFullscreen == isView ) {\n return;\n }\n this.isFullscreen = isView;\n var classMethod = isView ? 'add' : 'remove';\n document.documentElement.classList[ classMethod ]('is-flickity-fullscreen');\n this.element.classList[ classMethod ]('is-fullscreen');\n this.resize();\n // HACK extra reposition on fullscreen for images\n if ( this.isFullscreen ) {\n this.reposition();\n }\n this.dispatchEvent( 'fullscreenChange', null, [ isView ] );\n};\n\nproto.toggleFullscreen = function() {\n this._changeFullscreen( !this.isFullscreen );\n};\n\n// ----- setGallerySize ----- //\n\n// overwrite so fullscreen cells are full height\nvar setGallerySize = proto.setGallerySize;\nproto.setGallerySize = function() {\n if ( !this.options.setGallerySize ) {\n return;\n }\n if ( this.isFullscreen ) {\n // remove height style on fullscreen\n this.viewport.style.height = '';\n } else {\n // otherwise, do normal\n setGallerySize.call( this );\n }\n};\n\n// ----- keyboard ----- //\n\n// ESC key closes full screen\nFlickity.keyboardHandlers[27] = function() {\n this.exitFullscreen();\n};\n\n// ----- FullscreenButton ----- //\n\nfunction FullscreenButton( name, flickity ) {\n this.name = name;\n this.createButton();\n this.createIcon();\n // events\n // trigger viewFullscreen or exitFullscreen on click\n this.onClick = function() {\n flickity[ name + 'Fullscreen' ]();\n };\n this.clickHandler = this.onClick.bind( this );\n}\n\nFullscreenButton.prototype.createButton = function() {\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-fullscreen-button ' +\n 'flickity-fullscreen-button-' + this.name;\n // prevent button from submitting form\n element.setAttribute( 'type', 'button' );\n // set label\n var label = capitalize( this.name + ' full-screen' );\n element.setAttribute( 'aria-label', label );\n element.title = label;\n};\n\nfunction capitalize( text ) {\n return text[0].toUpperCase() + text.slice(1);\n}\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\nvar pathDirections = {\n view: 'M15,20,7,28h5v4H0V20H4v5l8-8Zm5-5,8-8v5h4V0H20V4h5l-8,8Z',\n exit: 'M32,3l-7,7h5v4H18V2h4V7l7-7ZM3,32l7-7v5h4V18H2v4H7L0,29Z',\n};\n\nFullscreenButton.prototype.createIcon = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 32 32' );\n // path & direction\n var path = document.createElementNS( svgURI, 'path');\n var direction = pathDirections[ this.name ];\n path.setAttribute( 'd', direction );\n // put it together\n svg.appendChild( path );\n this.element.appendChild( svg );\n};\n\nFullscreenButton.prototype.activate = function() {\n this.element.addEventListener( 'click', this.clickHandler );\n};\n\nFullscreenButton.prototype.deactivate = function() {\n this.element.removeEventListener( 'click', this.clickHandler );\n};\n\nFlickity.FullscreenButton = FullscreenButton;\n\n// ----- fin ----- //\n\nreturn Flickity;\n\n}));\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\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 - Elements to insert\n * @param {Integer} index - Zero-based number to insert\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 - ELements to remove\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 * @param {Boolean} isPositioningSlider - Positions slider after selection\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","// animate\n( function( window, factory ) {\n // universal module definition\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 -= 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 transforms 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 var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\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","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\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 this.element.removeAttribute('aria-hidden');\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} shift - 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","// drag\n( function( window, factory ) {\n // universal module definition\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 %= 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( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\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 - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\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","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\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/* eslint-enable max-params */\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 if ( instance ) 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 - options to extend\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, NodeList, HTMLElement]} elems - elements to make into cells\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 - cells to size\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 /* eslint-disable-next-line no-invalid-this */\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 = new 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, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\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 - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\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 - multiple elements\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 - child element\n * @returns {Flickit.Cell} cell - parent 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, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\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 ...\n // #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, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\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 * Flickity v2.2.2\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-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\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 return Flickity;\n} );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\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 * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\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","// page dots\n( function( window, factory ) {\n // universal module definition\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","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\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","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\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","// slide\n( function( window, factory ) {\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.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 * 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 * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n // universal module definition\n\n /*global define: false, module: false, require: false */\n\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.imagesLoaded = factory(\n window,\n window.EvEmitter\n );\n }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// -------------------------- factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n'use strict';\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\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// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n var queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = extend( {}, this.options );\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n extend( this.options, options );\n }\n\n if ( onAlways ) {\n this.on( 'always', onAlways );\n }\n\n this.getImages();\n\n if ( $ ) {\n // add jQuery Deferred object\n this.jqDeferred = new $.Deferred();\n }\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName == 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n var nodeType = elem.nodeType;\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n return;\n }\n var childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( var i=0; i < childImgs.length; i++ ) {\n var img = childImgs[i];\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n var children = elem.querySelectorAll( this.options.background );\n for ( i=0; i < children.length; i++ ) {\n var child = children[i];\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nvar elementNodeTypes = {\n 1: true,\n 9: true,\n 11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n return;\n }\n // get url inside url(\"...\")\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n var matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n var url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n var loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n var background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n var _this = this;\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n function onProgress( image, elem, message ) {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( function() {\n _this.progress( image, elem, message );\n });\n }\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount == this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( 'progress: ' + message, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) {\n return;\n }\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, callback ) {\n var instance = new ImagesLoaded( this, options, callback );\n return instance.jqDeferred.promise( $(this) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n","/*!\n * Unidragger v2.3.1\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 // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\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 * 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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/* globals $ */\n\nexport default () => {\n $('.upload').find('input[type=\"file\"]').each(function () {\n const $input = $(this);\n const $preview = $input.next().next('.upload-preview');\n\n $input.on('change', () => {\n const files = $input[0].files;\n let previewContent = files[0].name;\n\n if (files.length > 1) {\n previewContent = `<ul>${Array.from(files).map(file => `<li>${file.name}</li>`).join().replace(/,/g, '')}</ul>`;\n }\n\n $preview.html(previewContent);\n });\n });\n};\n\n","/* globals $ */\n\nexport default () => {\n // initialise booleans to enable or disable js mobile features, based on css breakpoints\n let isMobile = false;\n let showLastMonthWeek = false;\n let initialWeek = false;\n const now = new Date();\n const timestamp = new Date(now.getFullYear(), now.getMonth(), now.getDate()) / 1;\n\n /*\n * define if all dates in a row are disabled\n */\n function isRowDisabled(weekNum, container) {\n const disabledCount = $(`tbody tr:nth-child(${weekNum}) .picker__day--outfocus`, container)\n .length;\n if (disabledCount === 7) {\n return true;\n }\n return false;\n }\n\n /*\n * Custom managemet of prev / next on mobile\n */\n function handlePrevNext(container, selected) {\n let weekNum = $('tr', container).index($('tr:has(.picker__day--selected)', container));\n if (initialWeek) {\n weekNum = initialWeek;\n initialWeek = false;\n }\n\n // only setup listeners when on mobile\n if (!isMobile) return container;\n\n if (showLastMonthWeek) {\n // handle display last week of the month after clicking prev\n showLastMonthWeek = false;\n weekNum = 6;\n if (isRowDisabled(6, container)) {\n weekNum = 5;\n }\n }\n\n // initialise data attibute\n $('tbody', container).attr('data-week', weekNum);\n\n $('.picker__nav--next', container).on('click', (e) => {\n if (weekNum < 6 && !isRowDisabled(weekNum + 1, container)) {\n // if we are not displaying the last row:\n // disable built-in behaviour and update data attribute\n e.stopPropagation();\n weekNum += 1;\n $('tbody', container).css('transition', 'left 0.4s');\n $('tbody', container).attr('data-week', weekNum);\n } else {\n // let plugin proceed to next month\n\n // reset week index\n weekNum = 1;\n }\n });\n\n $('.picker__nav--prev', container).on('click', (e) => {\n if (weekNum > 1) {\n // if we are not displaying the first row:\n // disable built-in behaviour and update visual to show previous week\n e.stopPropagation();\n weekNum -= 1;\n $('tbody', container).css('transition', 'left 0.4s');\n $('tbody', container).attr('data-week', weekNum);\n } else {\n // let plugin proceed to previous month\n\n // set flag to display last week of month at next render\n showLastMonthWeek = true;\n }\n });\n\n // enable transitions only when prev/next arrow are clicked\n $('.picker__day', container).each(function () {\n $(this).on('click', function () {\n $(this)\n .parent()\n .parent()\n .parent()\n .css('transition', 'left 0s');\n });\n });\n }\n\n /*\n * Focus today\n */\n function selectToday(picker) {\n // select today's week on initialisation\n picker.set('select', [now.getFullYear(), now.getMonth(), now.getDate()]);\n }\n\n /*\n * Display correct month labels on the side of the desktop version\n */\n function handleMonthLabels(picker, months) {\n const alreadyHandled = $('.nextMonthLabel', picker.$holder).length > 0;\n if (alreadyHandled) {\n return true;\n }\n\n const wrapper = picker.component.$node.parent();\n const next = $('.nextMonthLabel', wrapper);\n const prev = $('.prevMonthLabel', wrapper);\n\n let nextMonthIndex = picker.component.item.view.month + 1;\n if (nextMonthIndex === months.length) nextMonthIndex = 0;\n\n let prevMonthIndex = picker.component.item.view.month - 1;\n if (prevMonthIndex < 0) prevMonthIndex = 11;\n\n next.html(months[nextMonthIndex]);\n prev.html(months[prevMonthIndex]);\n\n $('.picker__box', picker.$root).append(next.clone());\n $('.picker__box', picker.$root).append(prev.clone());\n }\n\n /*\n * handle custom highlights\n */\n function setHighlights(container) {\n // we check all displayed dates, and highlight the ones we want to\n $('.picker__day--infocus', container).each(function () {\n const currentTimestamp = $(this).data('pick');\n const date = new Date(currentTimestamp);\n const dateString = `${date.getFullYear()}-${`0${date.getMonth() + 1}`.slice(-2)}-${`0${date.getDate()}`.slice(-2)}`;\n\n // this is arbitrary. change this with personal logic when needed and add you own class\n if (dateString === '2018-03-28') {\n $(this).addClass('custom-highlight');\n }\n });\n }\n\n /*\n * INIT datepicket-event\n */\n $('.datepicker-fancy').each(function () {\n const monthsShort = [\n 'Jan',\n 'Fév',\n 'Mar',\n 'Avr',\n 'Mai',\n 'Jui',\n 'Jui',\n 'Aoû',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Déc',\n ];\n const container = $(this).parent();\n $(this).pickadate({\n monthsFull: [\n 'Janvier',\n 'Février',\n 'Mars',\n 'Avril',\n 'Mai',\n 'Juin',\n 'Juillet',\n 'Août',\n 'Septembre',\n 'Octobre',\n 'Novembre',\n 'Décembre',\n ],\n monthsShort,\n weekdaysFull: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\n weekdaysShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],\n labelMonthNext: 'Prochain mois',\n labelMonthPrev: 'Mois précédent',\n labelMonthSelect: 'Sélectionnez un mois',\n labelYearSelect: 'Sélectionnez une année',\n format: 'd mmmm yyyy',\n firstDay: 1,\n today: '',\n clear: '',\n close: '',\n onRender() {\n handleMonthLabels(this, monthsShort);\n\n if (isMobile) {\n // refresh listeners after render\n handlePrevNext(container);\n }\n },\n onStart() {\n selectToday(this);\n setHighlights(this);\n\n // focus on today's week on start\n const selected = $('tr:has(.picker__day--selected)', container);\n if (selected.length > 0) {\n initialWeek = $('tr', container).index(selected);\n }\n\n // enable mobile behaviour when needed\n isMobile = $('.datepicker-fancy + .picker table').css('display') === 'block';\n }\n });\n });\n};\n","/* globals $ */\n\nimport Flickity from 'flickity';\nimport 'flickity-fullscreen';\nimport 'flickity-as-nav-for';\nimport 'imagesloaded';\n\nfunction setFlickityOnGallery($gallery) {\n const $items = $gallery.find('.gallery-item');\n\n // Toggle opacity to avoid load blink\n $gallery.addClass('ready');\n\n // Add counter\n $items.each(function (i) {\n $(this).find('figcaption')\n .append(`\n <span class=\"gallery-counter\">${i + 1}/${$items.length}</span>\n `);\n });\n\n // Instantiate Flickity gallery\n new Flickity($gallery.get(0), {\n pageDots: false,\n fullscreen: true,\n setGallerySize: true,\n arrowShape: 'M14.2,45.8L53,7.1c1.6-1.6,1.6-4.3,0-5.9s-4.3-1.6-5.9,0L1.2,47c-1.6,1.6-1.6,4.3,0,5.9c0,0,0,0,0,0l45.8,45.8c1.6,1.6,4.3,1.6,5.9,0s1.6-4.3,0-5.9L14.2,54.1h81.6c2.3,0,4.2-1.9,4.2-4.2s-1.9-4.2-4.2-4.2H14.2z',\n });\n\n // Replace fullscreen icons\n $('.flickity-fullscreen-button-view svg path')\n .attr(\n 'd',\n 'M32,11.9h-2.7V6.5H24V3.8h8V11.9z M24,28.2v-2.7h5.3v-5.4H32v8.2H24z M0,20.1h2.7v5.4H8v2.7H0V20.1z M8,3.8v2.7H2.7v5.4H0V3.8H8z',\n );\n $('.flickity-fullscreen-button-exit svg path')\n .attr(\n 'd',\n 'M18.1,16l13.4,13.4c0.6,0.6,0.6,1.5,0,2.1c-0.6,0.6-1.5,0.6-2.1,0L16,18.1L2.6,31.6c-0.6,0.6-1.5,0.6-2.1,0c-0.6-0.6-0.6-1.5,0-2.1l0,0L13.9,16L0.4,2.6C-0.1,2-0.1,1,0.4,0.4s1.5-0.6,2.1,0L16,13.9L29.4,0.4c0.6-0.6,1.5-0.6,2.1,0c0.6,0.6,0.6,1.5,0,2.1L18.1,16z',\n );\n\n // Improve prev/next buttons position\n const height = $gallery.find('.gallery-item.is-selected img')\n .height();\n $gallery.find('.flickity-prev-next-button')\n .css('top', `${height / 2}px`);\n}\n\nfunction setFlickityGalleryNav($galleryNav) {\n $galleryNav.imagesLoaded()\n .always(function (instance) {\n const target = $galleryNav.data('gallery');\n\n // Toggle opacity to avoid load blink\n $galleryNav.addClass('ready');\n\n // Instantiate Flickity nav\n new Flickity($galleryNav.get(0), {\n asNavFor: `#${target}`,\n cellAlign: 'left',\n pageDots: false,\n prevNextButtons: false,\n contain: true,\n });\n })\n .fail(function () {\n console.log(`one image is broken for a gallery nav`);\n });\n}\n\nexport default () => {\n const $galleries = $('.gallery');\n\n // Base gallery logic\n if ($galleries.length > 0) {\n console.log('starting to gallerynav');\n $galleries.each(function (i) {\n $(this).imagesLoaded()\n .always(function (instance) {\n setFlickityOnGallery($($galleries[i]));\n\n // once the galary is loaded, try to find any nav linked for the current gallery\n const $galleryNavs = $(`.gallery-nav[data-gallery='${$galleries[i].id}']`);\n\n if ($galleryNavs.length > 0) {\n $galleryNavs.each(function (j) {\n setFlickityGalleryNav($($galleryNavs[j], $galleries[i].id));\n });\n }\n })\n .fail(function () {\n console.log(`one image is broken for a gallery`);\n });\n });\n }\n};\n","/* globals $, ClipboardJS */\n\nexport default () => {\n $('.social-share-copy').each(function () {\n const copyBtn = $(this);\n const baseText = copyBtn.text();\n const successText = copyBtn.data('success');\n const clipboard = new ClipboardJS(copyBtn[0], {\n target: (trigger) => {\n return $(trigger).prev(\"input\")[0];\n },\n });\n\n clipboard.on('success', (e) => {\n $(e.trigger).text(successText);\n setTimeout(() => $(e.trigger).text(baseText), 3000);\n\n e.clearSelection();\n });\n });\n};\n","const svgIcons = () => {\n loadIcons(window.svgPath || 'icons/icons.svg');\n loadIcons(window.featherSvgPath || 'icons/feather-sprite.svg');\n};\n\nexport default svgIcons;\n\nfunction loadIcons (svgPath) {\n const ajax = new XMLHttpRequest();\n ajax.open('GET', svgPath, true);\n ajax.send();\n ajax.onload = function (e) {\n if (e.target.status === 200) {\n const div = document.createElement('div');\n div.setAttribute('style', 'display: none');\n div.innerHTML = ajax.responseText;\n document.body.insertAdjacentElement('beforeend', div);\n }\n };\n}\n","/* global $ */\n\nconst nav = () => {\n // declare classes used to identify current menu and its parents (based on wordpress classes)\n const activeClass = 'current-menu-parent';\n const parentClass = 'current-menu-ancestor';\n\n // toggle mobile navigation\n const toggleMobileMenu = () => {\n // handle correct menu display when on level 0 page on mobile\n const firstLeveItem = $('.nav-main .nav-menu>.current-menu-item');\n if (firstLeveItem.length > 0) {\n const parent = firstLeveItem.parents()[1];\n $(parent).addClass(activeClass);\n }\n\n $('body').toggleClass('mobile-menu-open');\n };\n\n // Open or close desktop toggle navigation, keeping its actual position.\n // Used for the hamburger desktop menu to display current position\n const toggleDesktopMenu = (mustOpen = false) => {\n const navToggle = $('.nav-toggle');\n navToggle.toggleClass('open');\n const offsetX = navToggle.offset().left + navToggle.outerWidth(true);\n const offsetY = navToggle.offset().top - $(window).scrollTop();\n $('.nav-main').css('top', offsetY);\n\n $('body').toggleClass('desktop-menu-open');\n if (mustOpen && $('body').hasClass('desktop-menu-open')) {\n $('.nav-main').css('left', offsetX);\n } else {\n $('.nav-main').css('left', '');\n }\n };\n\n // moves the navigation one level up when clicking a \"back\" link\n // eslint-disable-next-line\n $('.nav-main .nav-back a').on('click', function(e) {\n e.preventDefault();\n\n const parents = $(this).parents();\n\n const parent = parents[2];\n $(parent)\n .removeClass(parentClass)\n .removeClass(activeClass);\n\n const ancestor = parents[4];\n $(ancestor)\n .removeClass(parentClass)\n .addClass(activeClass);\n });\n\n /*\n move the navigation one level down,\n when clicking the \"show children\" arrow on the right of a menu item\n */\n // eslint-disable-next-line\n $('.nav-main .nav-arrow').on('click', function(e) {\n e.preventDefault();\n\n const parents = $(this).parents();\n\n const parent = parents[0];\n $(parent).addClass(activeClass);\n\n const ancestor = parents[2];\n $(ancestor)\n .addClass(parentClass)\n .removeClass(activeClass);\n });\n\n // bind action to mobile menu toggle\n $('.nav-toggle-mobile').on('click', () => {\n toggleMobileMenu();\n });\n\n // Bind action to close toggle navigation, when clicking the white overlay\n $('.overlay').on('click', (e) => {\n e.preventDefault();\n toggleDesktopMenu();\n });\n\n // Bind action to the desktop hamburger (next to breadcrumbs)\n // eslint-disable-next-line\n $('.nav-toggle').on('click', function() {\n if ($(this).hasClass('nav-toggle-async') && !$(this).hasClass('open')) {\n $(this).addClass('is-loading');\n\n // Demo of loading resolution\n if ($('#styleguide').length > 0) {\n setTimeout(() => $('.nav-toggle-async').trigger('loadend'), 700);\n }\n } else {\n toggleDesktopMenu(true);\n }\n });\n\n // eslint-disable-next-line\n $('.nav-toggle').on('loadend', function() {\n $(this).removeClass('is-loading');\n toggleDesktopMenu(true);\n });\n};\n\nexport default nav;\n","/* global $ */\n\nconst drawer = () => {\n $('.drawer-toggle').click(function () {\n const $drawer = $(this).parent('.drawer');\n const $drawerLink = $drawer.find('.drawer-link');\n const $drawerToggle = $(this);\n const breakpoint = 992;\n\n if ($drawer.hasClass('open')) {\n $drawer.removeClass('open');\n $drawer.css({ width: '' });\n $drawerLink.css({ width: $drawerToggle.width() });\n } else {\n let linkWidth = '100%';\n\n if ($(window).width() > breakpoint) {\n linkWidth = $drawerLink.find('.text').outerWidth();\n $drawer.css({ width: linkWidth });\n }\n $drawer.addClass('open');\n $drawerLink.css({ width: linkWidth });\n }\n });\n};\n\nexport default drawer;\n","/* global $ */\n\nexport default () => {\n\n $('.btn-collapse').click(function(){\n\n const parent = $(this).parent(\".line\");\n const toggleIcon = $(this).find(\"span\")\n\n parent.toggleClass('open');\n toggleIcon.toggleClass('show');\n });\n\n};\n","/* globals jQuery */\n\nlet bannerElement\nfunction cookieConsent(opt_visible) {\n if (bannerElement) {\n setVisibility(bannerElement, opt_visible)\n } else {\n window.cookieconsent.initialise(\n get_cookieconsent_config(),\n (popup) => {\n bannerElement = popup.element\n setVisibility(bannerElement, opt_visible)\n },\n (err) => console.error(err)\n )\n window.cookieconsent.initialise = (() => { })\n }\n}\n\njQuery.fn.extend({ cookieConsent })\nexport default cookieConsent\n\nfunction setVisibility(cookieBanner, visible) {\n if (visible === true) {\n jQuery(cookieBanner).show().removeClass(\"cc-invisible\")\n } else if (visible === false) {\n jQuery(cookieBanner).hide().addClass(\"cc-invisible\")\n }\n}\n\nfunction get_cookieconsent_config() {\n // Translation\n const cookieI18n = {\n en: {\n msg: 'When you access EPFL websites, we may set cookies on your '\n + 'devices and process personal data about you in accordance with '\n + 'our <a tabindex=\"0\" class=\"cc-link\" target=\"_blank\" '\n + 'href=\"//go.epfl.ch/privacy-policy\">privacy policy</a>. '\n + 'You can block cookies by using your browser settings.'\n },\n fr: {\n msg: 'Lorsque vous accédez aux sites web de l\\'EPFL, nous pouvons '\n + 'installer des cookies sur vos appareils et traiter des données '\n + 'personnelles vous concernant conformément à notre '\n + '<a tabindex=\"0\" class=\"cc-link\" target=\"_blank\" '\n + 'href=\"//go.epfl.ch/protection-des-donnees\">'\n + 'politique de confidentialité</a>. Vous pouvez bloquer les '\n + 'cookies à l\\'aide des paramètres de votre navigateur.'\n },\n de: {\n msg: 'Wenn Sie auf die Websites der EPFL zugreifen, können wir in '\n + 'Übereinstimmung mit unserer '\n + '<a tabindex=\"0\" class=\"cc-link\" target=\"_blank\" '\n + 'href=\"//go.epfl.ch/privacy-policy\">Datenschutzerklärung</a> '\n + 'Cookies auf Ihren Geräten speichern und Personendaten bearbeiten. '\n + 'Über die Einstellungen in Ihrem Browser können Sie Cookies '\n + 'blockieren.',\n }\n };\n // Retrieve language, default 'fr'\n const langAttribute = document.documentElement.lang;\n let lang = langAttribute.substring(0, 2);\n if (!cookieI18n[lang]) {\n lang = 'fr';\n }\n\n // Retrieve the domain\n // Don't work with google.co.uk for example\n let domain_name = 'epfl.ch';\n const hostame = window.location.hostname;\n if (hostame === 'localhost' || hostame === '127.0.0.1') {\n domain_name = hostame;\n } else {\n const hostParts = hostame.split('.').reverse();\n if (hostParts[0] !== undefined && hostParts[1] !== undefined) {\n domain_name = `${hostParts[1]}.${hostParts[0]}`;\n }\n }\n\n const config = {\n theme: 'classic',\n palette: {\n popup: {\n background: 'rgba(69, 69, 69, 0.96)'\n },\n button: {\n background: '#b51f1f'\n }\n },\n content: {\n message: cookieI18n[lang].msg,\n dismiss: 'OK',\n },\n showLink: false,\n cookie: {\n name: 'petitpois', // Chosen by a magical unicorn!\n domain: domain_name,\n autoAttach: false // attach it manually to the end, or SEO will crawl it before any content\n }\n }\n return config;\n}\n","/* globals $ */\n\nexport const nutrimenuScore = [\n 'E', 'D-', 'D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+'];\n\nexport default () => {\n const slider = $('#nutrimenu-score');\n const output = $(\"output[for='nutrimenu-score']\");\n\n if (slider.length > 0 && output.length > 0) {\n // eslint-disable-next-line radix\n output.val(nutrimenuScore[parseInt(slider.val()) - 1]);\n\n slider.on('input', function () {\n // eslint-disable-next-line radix\n output.val(nutrimenuScore[parseInt($(this).val()) - 1]);\n });\n }\n};\n","/* globals jQuery, Tablesaw */\n\nimport upload from './atoms/upload/upload';\nimport breadcrumb from './molecules/breadcrumb/breadcrumb';\nimport datepicker from './molecules/datepicker/datepicker';\nimport datepickerEvent from './molecules/datepicker/datepicker-fancy';\nimport popover from './atoms/popover/popover';\nimport gallery from './molecules/gallery/gallery';\nimport social from './molecules/social/social';\nimport selectMultiple from './atoms/select/select-multiple';\nimport tagInput from './atoms/tag/tag-input';\nimport cardSlider from './organisms/card-slider/card-slider';\nimport svgIcons from '../icons/svg-icons';\nimport nav from './organisms/nav-main/nav-main.js';\nimport drawer from './atoms/drawer/drawer.js';\nimport search from './molecules/search/search.js';\nimport searchMobile from './molecules/search/search-mobile.js';\nimport coursebook from './content-types/coursebook/coursebook.js';\nimport studyplan from './content-types/study-plan/study-plan.js';\nimport cookieconsent from './organisms/cookie-consent/cookie-consent.js';\nimport backToTopBtn from './organisms/footer/back-to-top-button.js';\nimport anchors from './anchors';\nimport rangeSlider from './atoms/range/range.js';\nimport restauration from './organisms/restauration/restauration';\n\nimport guide from './guide.js';\n\njQuery.fn.extend({\n epflElements () {\n upload();\n selectMultiple();\n tagInput();\n datepicker();\n datepickerEvent();\n popover();\n gallery();\n search();\n searchMobile();\n social();\n coursebook();\n Tablesaw.init();\n cardSlider();\n svgIcons();\n nav();\n drawer();\n breadcrumb();\n cookieconsent();\n backToTopBtn();\n rangeSlider();\n restauration();\n studyplan();\n\n guide();\n anchors();\n }\n});\n\n// Run that once the page is done loading:\njQuery(jQuery.fn.epflElements);\n","/* globals $ */\n\nexport default () => {\n $('.select-multiple').each((index, element) => {\n $(element).multipleSelect({\n placeholder: $(element).attr('data-placeholder') || '',\n width: '100%',\n });\n });\n};\n","/* globals $ */\n\nexport default () => {\n $('.tag-input').selectize({\n plugins: ['remove_button'],\n render: {\n item: (data, escape) => `<div class=\"tag tag-primary\">${escape(data.text)}</div>`,\n },\n create: input => ({\n value: input,\n text: input,\n }),\n });\n};\n","/* globals $ */\n\nexport default () => {\n $('.datepicker').pickadate({\n monthsFull: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],\n monthsShort: ['Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jui', 'Jui', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc'],\n weekdaysFull: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\n weekdaysShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],\n labelMonthNext: 'Prochain mois',\n labelMonthPrev: 'Mois précédent',\n labelMonthSelect: 'Sélectionnez un mois',\n labelYearSelect: 'Sélectionnez une année',\n format: 'd mmmm yyyy',\n firstDay: 1,\n today: '',\n clear: '',\n close: '',\n });\n};\n","/* globals $ */\n\nexport default () => {\n $(function () {\n $('[data-toggle=\"popover\"]').popover({\n placement: 'top',\n html: true,\n offset: -135,\n template: '<div class=\"popover\" role=\"tooltip\"><div class=\"popover-body\"></div></div>',\n });\n });\n};\n\n","/* global $ */\n\nexport default () => {\n $('.search').on('shown.bs.dropdown', () => {\n $('.search input[type=\"text\"]').trigger('focus');\n });\n};\n","/* global $ */\n\nexport default () => {\n\n $('#search-mobile-toggle').on('click', () => {\n\n const searchContainer = $('.search-mobile');\n const searchField = searchContainer.find('.form-control');\n\n searchContainer.toggleClass('show');\n $('body').toggleClass('search-open');\n\n if (searchContainer.hasClass('show')) {\n searchField.trigger('focus');\n }\n\n });\n\n $('#search-mobile-close').on('click', () => {\n\n const searchContainer = $('.search-mobile');\n\n searchContainer.removeClass('show');\n $('body').removeClass('search-open');\n\n });\n\n};\n","/* global $ */\n\nexport default () => {\n const id = new Date().getTime().toString(16);\n $('.coursebook-program .tree>li').each((i, collapse) => {\n\n // identify toggle and target\n const toggle = $('.underline a', collapse);\n const target = $('>ul', collapse);\n\n // generate page-unique id\n const itemId = `${id}-${i}`;\n\n // set correct attributes\n target.addClass('collapse collapse-item collapse-item-desktop');\n toggle.addClass('collapse-title collapse-title-desktop collapsed');\n target.attr('id', itemId);\n toggle.attr('data-target', `#${itemId}`);\n toggle.attr('data-toggle', 'collapse');\n\n // automatically add full width buttons at the end of the collapse\n const link = $('<a></a>');\n link.addClass('btn btn-block btn-sm btn-primary my-3');\n link.html(\"Voir le plan d'études\");\n link.attr('href', toggle.attr('href'));\n target.append(link);\n });\n};\n","/* globals $ */\n\nimport Flickity from 'flickity';\nimport Imagesloaded from 'imagesloaded';\n\nexport default () => {\n if ($('.card-slider-wrapper').length > 0) {\n // Mobile width corresponds to SM breakpoint from Bootstrap.\n const isMobile = $(window).width() < 768;\n\n $( \".card-slider-wrapper\" ).each( ( index, cardSliderWrapper ) => {\n let flkty;\n let cardSlider = $(cardSliderWrapper).find('.card-slider')[0];\n\n Imagesloaded(cardSlider, () => {\n flkty = new Flickity(cardSlider, {\n cellAlign: 'left',\n setGallerySize: true,\n pageDots: isMobile,\n prevNextButtons: false,\n contain: true,\n groupCells: false,\n });\n\n $(cardSliderWrapper).find('#card-slider-prev').on('click', () => {\n flkty.previous();\n });\n\n $(cardSliderWrapper).find('#card-slider-next').on('click', () => {\n flkty.next();\n });\n\n $(cardSliderWrapper).find('.card-slider-cell').css('height', '100%');\n\n flkty.on('select', () => {\n $(cardSliderWrapper).find('.card-slider-btn').removeClass('disabled');\n\n if (flkty.selectedIndex === 0) {\n $(cardSliderWrapper).find('#card-slider-prev').addClass('disabled');\n }\n\n if (\n flkty.selectedIndex + 1 === flkty.slides.length ||\n flkty.selectedIndex + 2 === flkty.slides.length\n ) {\n $(cardSliderWrapper).find('#card-slider-next').addClass('disabled');\n }\n });\n\n });\n });\n }\n};\n","/* globals $ */\n\nexport default () => {\n const expandBreadcrumb = $('.btn-expand-links');\n const breadcrumbDropToggle = $('.dropdown-toggle');\n\n // add class 'has-expanded-links'\n expandBreadcrumb.on('click', () => {\n $('.breadcrumb-wrapper .breadcrumb').addClass('has-expanded-links');\n });\n\n // improve dropdown position\n breadcrumbDropToggle.on('click', (e) => {\n const btnPos = $(e.currentTarget).offset().left;\n const documentWitdh = $(document).width();\n const dropdown = $(e.currentTarget).siblings('.dropdown-menu');\n const dropdownWidth = dropdown.width();\n const btnOffset = documentWitdh - btnPos;\n\n // remove class 'open-left' from all .dropdown-menu elements\n $('.dropdown-menu').removeClass('open-left');\n // add the class back if the dropdown is too close to the right side of the window\n if (dropdownWidth > btnOffset) {\n dropdown.addClass('open-left');\n }\n });\n};\n","/* globals $ */\n\n\nexport default () => {\n\n const backToTopBtn = $('#back-to-top');\n\n $(window).scroll(function() {\n if ($(window).scrollTop() > 500) {\n backToTopBtn.addClass('show');\n } else {\n backToTopBtn.removeClass('show');\n }\n });\n\n backToTopBtn.on('click', function(e) {\n e.preventDefault();\n $('html, body').animate({scrollTop:0}, '300');\n });\n\n};\n","export default () => {\n // Create colored progress bar for damn webkit browsers >.<\n\n const rangeSlider = document.querySelector('input[type=range]');\n\n if (rangeSlider) {\n rangeSlider.style.setProperty('--val', +rangeSlider.value);\n rangeSlider.style.setProperty('--max', +rangeSlider.max);\n rangeSlider.style.setProperty('--min', +rangeSlider.min);\n\n rangeSlider.addEventListener('input', () => {\n rangeSlider.style.setProperty('--val', +rangeSlider.value);\n }, false);\n }\n};\n","/* globals $, introJs */\n\nexport default () => {\n if ($('#tour-lab').length > 0) {\n const startIntro = () => {\n const intro = introJs();\n intro.setOptions({\n buttonClass: 'btn btn-secondary btn-sm mt-4',\n tooltipPosition: 'auto',\n positionPrecedence: ['bottom', 'top', 'right', 'left'],\n scrollTo: 'tooltip',\n scrollToElement: true,\n steps: [\n {\n intro:\n \"This is the laboratory's homepage. <b>It serves to guide the visitors to the different sub-contents</b>. The main contents are projects and publications. Here is the hierarchical order that we are proposing.\",\n },\n {\n element: '#tour-hero',\n intro:\n 'Define the <b>laboratory title</b> and a <b>cover image</b> using the <a href=\"#/organisms/hero\" target=\"_blank\">hero</a> component or only <b>a title</b>, if there is no cover, using the following step structure.',\n },\n {\n element: '#tour-intro',\n intro:\n 'Type a <b>succinct introduction paragraph</b> wrapped inside a <code>.container-grid</code> (the title can also be added here)',\n },\n {\n element: '#tour-projects',\n intro: `\n The main objective of a laboratory is to show the projects that are carried out there. In this section, you can use the <a href=\"#/content-types/research-project\" target=\"_blank\">Research project</a> content types to show them. We advise you to put a <b>maximum of 3 projects</b> on the lab’s homepage and then put a link to the page that lists all the projects.\n `,\n },\n {\n element: '#tour-publications',\n intro: `\n Laboratories also produce publications. You can list <b>up to 5</b> here with the <a href=\"#/content-types/publication\" target=\"_blank\">Publication</a> component and add a link to the page that lists all the publications.\n `,\n },\n {\n element: '#tour-news',\n intro: `\n If you have some news about your laboratory, you can list the latest at this location. We advise you not to list too much (maximum 2) and use the component <a href=\"#/content-types/news\" target=\"_blank\">News</a> content-types (<b>Basic teaser</b>) and add a link to all news page.\n `,\n },\n {\n element: '#tour-partof',\n intro: `\n <p>\n This section is intended to <b>provide the context of the laboratory</b>. It is possible for a laboratory to belong to several institutes and/or faculties. If this is the case, we advise you to use a teaser that brings the visitor to a listing page, rather than putting them all on the lab’s homepage. Laboratories can have themes that categorize them. It is recommended to use component “tag” to list them.\n </p>\n <p>\n For this part, you can use some of the <a href=\"#/content-types/school\" target=\"_blank\">School</a> and <a href=\"#/content-types/institute\" target=\"_blank\">Institute</a> content types. The themes are based on the <a href=\"#/atoms/tag\" target=\"_blank\">tag</a> component.\n </p>\n `,\n },\n {\n element: '#tour-contact',\n intro: `\n <b>Several people may want to contact</b> the laboratory: press, potential collaborators, people interested in your work or simply people who want to know where you are located. That’s why we recommend using the <a href=\"#/organisms/contact\" target=\"_blank\">Contact</a> component (<b>Banner</b>) that gives all this information.\n `,\n },\n {\n element: '#tour-team',\n intro: `\n Some visitors may want to ask you questions or <b>see who composes the laboratory's team</b>. It is possible to link to the team page using the <a href=\"#/content-types/basic-page\" target=\"_blank\">Teaser basic page</a> component.\n `,\n },\n {\n element: '#tour-sponsors',\n intro: `\n It is possible that you have sponsors. On a second column, you can list them thanks to the <a href=\"#/molecules/sponsor\" target=\"_blank\">Sponsor</a> component.\n `,\n },\n ],\n });\n intro.start();\n };\n\n $('#tour-start').click(() => startIntro());\n }\n};\n","import lab from './pages/lab-homepage/lab-homepage.js';\n\nexport default () => {\n lab();\n};\n","/* global $ */\n\nexport default () => {\n $('a').on('click', (e) => {\n const target_href = $(e.target).attr('href');\n if (target_href && target_href.length > 1 && target_href.match('^#')) {\n $(e.target)[0].scrollIntoView();\n }\n });\n};\n"],"names":["window","factory","matchesMethod","ElemProto","Element","prototype","matches","matchesSelector","prefixes","i","length","method","elem","selector","EvEmitter","proto","on","eventName","listener","events","this","_events","listeners","indexOf","push","once","onceEvents","_onceEvents","off","index","splice","emitEvent","args","slice","onceListeners","apply","allOff","utils","a","b","prop","num","div","arraySlice","Array","makeArray","obj","isArray","call","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","Flickity","createMethods","_createAsNavFor","activateAsNavFor","deactivateAsNavFor","destroyAsNavFor","asNavForOption","asNavFor","setNavCompanion","companion","navCompanion","onNavCompanionSelect","navCompanionSelect","onNavStaticClick","isInstant","selectedCell","selectedCells","firstIndex","cells","lastIndex","selectIndex","Math","floor","t","cellAlign","selectCell","removeNavSelectedElements","navSelectedElements","map","cell","element","changeNavSelectedClass","navElem","classList","pointer","cellElement","cellIndex","_createFullscreen","isFullscreen","fullscreen","viewFullscreenButton","FullscreenButton","exitFullscreenButton","_changeFullscreenActive","childMethod","isActive","activeMethod","viewFullscreen","_changeFullscreen","focus","exitFullscreen","isView","classMethod","documentElement","resize","reposition","dispatchEvent","toggleFullscreen","setGallerySize","name","flickity","createButton","createIcon","onClick","clickHandler","bind","viewport","style","height","keyboardHandlers","createElement","setAttribute","text","label","toUpperCase","title","svgURI","pathDirections","view","exit","svg","createElementNS","path","direction","appendChild","activate","deactivate","removeEventListener","insert","_makeCells","len","undefined","fragment","createDocumentFragment","getCellsFragment","isAppend","slider","insertCellElement","insertBefore","endCells","_sizeCells","cellChange","append","prepend","remove","getCells","minCellIndex","min","cellSizeChange","getCell","getSize","changedCellIndex","isPositioningSlider","prevSelectedElem","selectedElement","_positionCells","_getWrapShiftCells","selectedIndex","getCellSlideIndex","slides","select","positionSliderAtSelected","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","requestAnimationFrame","wrapAround","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","transform","firstSlide","positionX","target","progress","slidesWidth","selectedSlide","velocity","position","percentPosition","round","size","innerWidth","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cellShift","wrapShift","outerWidth","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","Cell","parent","create","destroy","unselect","side","originSide","removeAttribute","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","width","add","removeChild","Unidragger","extend","defaults","draggable","dragThreshold","_touchActionValue","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","activeElement","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","pageX","pageY","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","pageXOffset","y","pageYOffset","nodeName","isTouchStart","isTouchPointer","pointerType","isFocusNode","preventDefault","hasDragStarted","moveVector","abs","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","dragStart","dragStartPosition","startAnimation","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","originBound","max","endBound","getLastSlide","dragMoveTime","Date","dragEnd","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","isDragSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","contain","dist","minDist","isWrapAround","slideIndex","slide","wrap","delta","staticClick","clickedCell","getParentCell","cellElem","onscroll","scroll","scrollMoveX","scrollMoveY","_pointerDone","Slide","animatePrototype","getComputedStyle","moveElements","toElem","GUID","instances","queryElement","flickityGUID","option","$element","constructor","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","id","guid","_createSlider","watchCSS","opts","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","positionCells","getLastCell","maxCellHeight","cellX","startCell","outerHeight","updateSlides","_containSlides","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","_init","setCellAlign","cellAlignShorthands","center","left","right","shorthand","adaptiveHeight","_unshiftCells","gapX","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","emitArgs","$event","jQEvent","Event","trigger","isWrap","_wrapSelect","prevIndex","wrapIndex","backWrapDelta","forewardWrapDelta","previous","next","unselectSelectedSlide","selectedElements","getCellElements","initialIndex","queryCell","value","getAdjacentCellElements","adjCount","cellElems","uiChange","childUIPointerDown","onresize","content","onkeydown","isNotFocused","handler","keyCode","leftMethod","rightMethod","prevScrollY","preventScroll","scrollTo","removeData","bridget","setJQuery","jq","LazyLoader","img","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","src","srcset","onload","complete","onerror","Unipointer","PageDots","Object","holder","dots","handleClick","setDots","bindStartEvent","unbindStartEvent","addDots","removeDots","count","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","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","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","createSVG","update","shape","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","onclick","enable","disabled","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","isOriginLeft","lastCell","lastMargin","getStyleSize","parseFloat","isNaN","logError","message","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","padding","borderStyle","borderWidth","boxSizing","setup","nodeType","display","innerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","$","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","addImage","background","addElementBackgroundImages","elementNodeTypes","childImgs","child","LoadingImage","Background","url","Image","reURL","exec","backgroundImage","addBackground","loadingImage","onProgress","image","progressedCount","hasAnyBroken","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","unbindEvents","makeJQueryPlugin","fn","imagesLoaded","promise","_bindHandles","isAdd","bindMethod","touchAction","handle","_bindStartEvent","PointerEvent","cursorNodes","OPTION","clickTypes","radio","checkbox","button","submit","file","isCursorNode","isClickType","isOkay","_pointerReset","focused","blur","isDragging","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp","getPointerPoint","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","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","n","getter","__esModule","d","definition","key","o","defineProperty","enumerable","get","hasOwnProperty","find","each","$input","$preview","files","previewContent","from","join","html","isMobile","showLastMonthWeek","initialWeek","now","isRowDisabled","weekNum","container","getFullYear","getMonth","getDate","monthsShort","pickadate","monthsFull","weekdaysFull","weekdaysShort","labelMonthNext","labelMonthPrev","labelMonthSelect","labelYearSelect","format","firstDay","today","close","onRender","picker","months","$holder","wrapper","component","$node","prev","nextMonthIndex","item","month","prevMonthIndex","$root","clone","handleMonthLabels","e","stopPropagation","css","handlePrevNext","onStart","set","currentTimestamp","date","addClass","setHighlights","selected","$galleries","always","$gallery","$items","setFlickityOnGallery","$galleryNavs","j","$galleryNav","fail","copyBtn","baseText","successText","ClipboardJS","clearSelection","loadIcons","svgPath","ajax","XMLHttpRequest","open","send","status","innerHTML","responseText","insertAdjacentElement","activeClass","parentClass","toggleDesktopMenu","mustOpen","navToggle","toggleClass","offsetX","offset","offsetY","top","scrollTop","hasClass","parents","removeClass","ancestor","firstLeveItem","toggleMobileMenu","click","$drawer","$drawerLink","$drawerToggle","linkWidth","toggleIcon","bannerElement","cookieConsent","opt_visible","setVisibility","cookieconsent","initialise","cookieI18n","en","msg","fr","de","lang","substring","domain_name","hostame","location","hostname","hostParts","split","reverse","theme","palette","popup","dismiss","showLink","cookie","domain","autoAttach","get_cookieconsent_config","err","cookieBanner","visible","show","hide","nutrimenuScore","output","val","epflElements","upload","multipleSelect","placeholder","selectize","plugins","render","escape","input","datepickerEvent","popover","placement","template","gallery","searchContainer","searchField","social","getTime","toString","collapse","toggle","itemId","link","coursebook","Tablesaw","init","cardSliderWrapper","flkty","cardSlider","Imagesloaded","featherSvgPath","nav","drawer","expandBreadcrumb","breadcrumbDropToggle","btnPos","currentTarget","documentWitdh","dropdown","siblings","dropdownWidth","btnOffset","breadcrumb","backToTopBtn","rangeSlider","setProperty","restauration","studyplan","startIntro","intro","introJs","setOptions","buttonClass","tooltipPosition","positionPrecedence","scrollToElement","steps","start","lab","target_href","scrollIntoView"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"js/elements.min.js","mappings":"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","sources":["webpack://epfl-elements/./node_modules/fizzy-ui-utils/utils.js","webpack://epfl-elements/./node_modules/flickity/js/page-dots.js","webpack://epfl-elements/./node_modules/flickity/js/flickity.js","webpack://epfl-elements/./node_modules/get-size/get-size.js","webpack://epfl-elements/./node_modules/flickity/js/animate.js","webpack://epfl-elements/./node_modules/flickity/js/prev-next-button.js","webpack://epfl-elements/./node_modules/ev-emitter/ev-emitter.js","webpack://epfl-elements/./node_modules/desandro-matches-selector/matches-selector.js","webpack://epfl-elements/./node_modules/flickity/js/index.js","webpack://epfl-elements/./node_modules/flickity-fullscreen/fullscreen.js","webpack://epfl-elements/./node_modules/imagesloaded/imagesloaded.js","webpack://epfl-elements/./node_modules/unipointer/unipointer.js","webpack://epfl-elements/./node_modules/flickity/js/cell.js","webpack://epfl-elements/./node_modules/flickity-as-nav-for/as-nav-for.js","webpack://epfl-elements/./node_modules/flickity/js/slide.js","webpack://epfl-elements/./node_modules/flickity/js/drag.js","webpack://epfl-elements/./node_modules/flickity/js/add-remove-cell.js","webpack://epfl-elements/./node_modules/flickity/js/lazyload.js","webpack://epfl-elements/./node_modules/flickity/js/player.js","webpack://epfl-elements/./node_modules/unidragger/unidragger.js","webpack://epfl-elements/webpack/bootstrap","webpack://epfl-elements/webpack/runtime/compat get default export","webpack://epfl-elements/webpack/runtime/define property getters","webpack://epfl-elements/webpack/runtime/hasOwnProperty shorthand","webpack://epfl-elements/./assets/components/atoms/upload/upload.js","webpack://epfl-elements/./assets/components/molecules/datepicker/datepicker-fancy.js","webpack://epfl-elements/./assets/components/molecules/gallery/gallery.js","webpack://epfl-elements/./assets/components/molecules/social/social.js","webpack://epfl-elements/./assets/icons/svg-icons.js","webpack://epfl-elements/./assets/components/organisms/nav-main/nav-main.js","webpack://epfl-elements/./assets/components/atoms/drawer/drawer.js","webpack://epfl-elements/./assets/components/content-types/study-plan/study-plan.js","webpack://epfl-elements/./assets/components/organisms/cookie-consent/cookie-consent.js","webpack://epfl-elements/./assets/components/organisms/restauration/restauration.js","webpack://epfl-elements/./assets/components/entrypoint.js","webpack://epfl-elements/./assets/components/atoms/select/select-multiple.js","webpack://epfl-elements/./assets/components/atoms/tag/tag-input.js","webpack://epfl-elements/./assets/components/molecules/datepicker/datepicker.js","webpack://epfl-elements/./assets/components/atoms/popover/popover.js","webpack://epfl-elements/./assets/components/molecules/search/search.js","webpack://epfl-elements/./assets/components/molecules/search/search-mobile.js","webpack://epfl-elements/./assets/components/content-types/coursebook/coursebook.js","webpack://epfl-elements/./assets/components/organisms/card-slider/card-slider.js","webpack://epfl-elements/./assets/components/molecules/breadcrumb/breadcrumb.js","webpack://epfl-elements/./assets/components/organisms/footer/back-to-top-button.js","webpack://epfl-elements/./assets/components/atoms/range/range.js","webpack://epfl-elements/./assets/components/pages/lab-homepage/lab-homepage.js","webpack://epfl-elements/./assets/components/guide.js","webpack://epfl-elements/./assets/components/anchors.js"],"sourcesContent":["/**\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","// page dots\n( function( window, factory ) {\n // universal module definition\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","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\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/* eslint-enable max-params */\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 if ( instance ) 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 - options to extend\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, NodeList, HTMLElement]} elems - elements to make into cells\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 - cells to size\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 /* eslint-disable-next-line no-invalid-this */\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 = new 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, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\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 - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\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 - multiple elements\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 - child element\n * @returns {Flickit.Cell} cell - parent 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, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\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 ...\n // #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, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\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 * 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","// animate\n( function( window, factory ) {\n // universal module definition\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 -= 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 transforms 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 var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\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","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\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 * 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 * 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 * Flickity v2.2.2\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-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\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 return Flickity;\n} );\n","/*!\n * Flickity fullscreen v1.1.1\n * Enable fullscreen view 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 ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity')\n );\n } else {\n // browser global\n factory(\n window.Flickity\n );\n }\n\n}( window, function factory( Flickity ) {\n\n'use strict';\n\nFlickity.createMethods.push('_createFullscreen');\nvar proto = Flickity.prototype;\n\n\nproto._createFullscreen = function() {\n this.isFullscreen = false;\n\n if ( !this.options.fullscreen ) {\n return;\n }\n // buttons\n this.viewFullscreenButton = new FullscreenButton( 'view', this );\n this.exitFullscreenButton = new FullscreenButton( 'exit', this );\n\n this.on( 'activate', this._changeFullscreenActive );\n this.on( 'deactivate', this._changeFullscreenActive );\n};\n\n// ----- activation ----- //\n\nproto._changeFullscreenActive = function() {\n var childMethod = this.isActive ? 'appendChild' : 'removeChild';\n this.element[ childMethod ]( this.viewFullscreenButton.element );\n this.element[ childMethod ]( this.exitFullscreenButton.element );\n // activate or deactivate buttons\n var activeMethod = this.isActive ? 'activate' : 'deactivate';\n this.viewFullscreenButton[ activeMethod ]();\n this.exitFullscreenButton[ activeMethod ]();\n};\n\n// ----- view, exit, toggle ----- //\n\nproto.viewFullscreen = function() {\n this._changeFullscreen( true );\n this.focus();\n};\n\nproto.exitFullscreen = function() {\n this._changeFullscreen( false );\n};\n\nproto._changeFullscreen = function( isView ) {\n if ( this.isFullscreen == isView ) {\n return;\n }\n this.isFullscreen = isView;\n var classMethod = isView ? 'add' : 'remove';\n document.documentElement.classList[ classMethod ]('is-flickity-fullscreen');\n this.element.classList[ classMethod ]('is-fullscreen');\n this.resize();\n // HACK extra reposition on fullscreen for images\n if ( this.isFullscreen ) {\n this.reposition();\n }\n this.dispatchEvent( 'fullscreenChange', null, [ isView ] );\n};\n\nproto.toggleFullscreen = function() {\n this._changeFullscreen( !this.isFullscreen );\n};\n\n// ----- setGallerySize ----- //\n\n// overwrite so fullscreen cells are full height\nvar setGallerySize = proto.setGallerySize;\nproto.setGallerySize = function() {\n if ( !this.options.setGallerySize ) {\n return;\n }\n if ( this.isFullscreen ) {\n // remove height style on fullscreen\n this.viewport.style.height = '';\n } else {\n // otherwise, do normal\n setGallerySize.call( this );\n }\n};\n\n// ----- keyboard ----- //\n\n// ESC key closes full screen\nFlickity.keyboardHandlers[27] = function() {\n this.exitFullscreen();\n};\n\n// ----- FullscreenButton ----- //\n\nfunction FullscreenButton( name, flickity ) {\n this.name = name;\n this.createButton();\n this.createIcon();\n // events\n // trigger viewFullscreen or exitFullscreen on click\n this.onClick = function() {\n flickity[ name + 'Fullscreen' ]();\n };\n this.clickHandler = this.onClick.bind( this );\n}\n\nFullscreenButton.prototype.createButton = function() {\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-fullscreen-button ' +\n 'flickity-fullscreen-button-' + this.name;\n // prevent button from submitting form\n element.setAttribute( 'type', 'button' );\n // set label\n var label = capitalize( this.name + ' full-screen' );\n element.setAttribute( 'aria-label', label );\n element.title = label;\n};\n\nfunction capitalize( text ) {\n return text[0].toUpperCase() + text.slice(1);\n}\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\nvar pathDirections = {\n view: 'M15,20,7,28h5v4H0V20H4v5l8-8Zm5-5,8-8v5h4V0H20V4h5l-8,8Z',\n exit: 'M32,3l-7,7h5v4H18V2h4V7l7-7ZM3,32l7-7v5h4V18H2v4H7L0,29Z',\n};\n\nFullscreenButton.prototype.createIcon = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 32 32' );\n // path & direction\n var path = document.createElementNS( svgURI, 'path');\n var direction = pathDirections[ this.name ];\n path.setAttribute( 'd', direction );\n // put it together\n svg.appendChild( path );\n this.element.appendChild( svg );\n};\n\nFullscreenButton.prototype.activate = function() {\n this.element.addEventListener( 'click', this.clickHandler );\n};\n\nFullscreenButton.prototype.deactivate = function() {\n this.element.removeEventListener( 'click', this.clickHandler );\n};\n\nFlickity.FullscreenButton = FullscreenButton;\n\n// ----- fin ----- //\n\nreturn Flickity;\n\n}));\n","/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n // universal module definition\n\n /*global define: false, module: false, require: false */\n\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.imagesLoaded = factory(\n window,\n window.EvEmitter\n );\n }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// -------------------------- factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n'use strict';\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\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// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n var queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = extend( {}, this.options );\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n extend( this.options, options );\n }\n\n if ( onAlways ) {\n this.on( 'always', onAlways );\n }\n\n this.getImages();\n\n if ( $ ) {\n // add jQuery Deferred object\n this.jqDeferred = new $.Deferred();\n }\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName == 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n var nodeType = elem.nodeType;\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n return;\n }\n var childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( var i=0; i < childImgs.length; i++ ) {\n var img = childImgs[i];\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n var children = elem.querySelectorAll( this.options.background );\n for ( i=0; i < children.length; i++ ) {\n var child = children[i];\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nvar elementNodeTypes = {\n 1: true,\n 9: true,\n 11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n return;\n }\n // get url inside url(\"...\")\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n var matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n var url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n var loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n var background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n var _this = this;\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n function onProgress( image, elem, message ) {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( function() {\n _this.progress( image, elem, message );\n });\n }\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount == this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( 'progress: ' + message, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) {\n return;\n }\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, callback ) {\n var instance = new ImagesLoaded( this, options, callback );\n return instance.jqDeferred.promise( $(this) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\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 ( 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","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\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 this.element.removeAttribute('aria-hidden');\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} shift - 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 * Flickity asNavFor v2.0.1\n * enable asNavFor 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// -------------------------- asNavFor prototype -------------------------- //\n\n// Flickity.defaults.asNavFor = null;\n\nFlickity.createMethods.push('_createAsNavFor');\n\nvar proto = Flickity.prototype;\n\nproto._createAsNavFor = function() {\n this.on( 'activate', this.activateAsNavFor );\n this.on( 'deactivate', this.deactivateAsNavFor );\n this.on( 'destroy', this.destroyAsNavFor );\n\n var asNavForOption = this.options.asNavFor;\n if ( !asNavForOption ) {\n return;\n }\n // HACK do async, give time for other flickity to be initalized\n var _this = this;\n setTimeout( function initNavCompanion() {\n _this.setNavCompanion( asNavForOption );\n });\n};\n\nproto.setNavCompanion = function( elem ) {\n elem = utils.getQueryElement( elem );\n var companion = Flickity.data( elem );\n // stop if no companion or companion is self\n if ( !companion || companion == this ) {\n return;\n }\n\n this.navCompanion = companion;\n // companion select\n var _this = this;\n this.onNavCompanionSelect = function() {\n _this.navCompanionSelect();\n };\n companion.on( 'select', this.onNavCompanionSelect );\n // click\n this.on( 'staticClick', this.onNavStaticClick );\n\n this.navCompanionSelect( true );\n};\n\nproto.navCompanionSelect = function( isInstant ) {\n if ( !this.navCompanion ) {\n return;\n }\n // select slide that matches first cell of slide\n var selectedCell = this.navCompanion.selectedCells[0];\n var firstIndex = this.navCompanion.cells.indexOf( selectedCell );\n var lastIndex = firstIndex + this.navCompanion.selectedCells.length - 1;\n var selectIndex = Math.floor( lerp( firstIndex, lastIndex,\n this.navCompanion.cellAlign ) );\n this.selectCell( selectIndex, false, isInstant );\n // set nav selected class\n this.removeNavSelectedElements();\n // stop if companion has more cells than this one\n if ( selectIndex >= this.cells.length ) {\n return;\n }\n\n var selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\n this.navSelectedElements = selectedCells.map( function( cell ) {\n return cell.element;\n });\n this.changeNavSelectedClass('add');\n};\n\nfunction lerp( a, b, t ) {\n return ( b - a ) * t + a;\n}\n\nproto.changeNavSelectedClass = function( method ) {\n this.navSelectedElements.forEach( function( navElem ) {\n navElem.classList[ method ]('is-nav-selected');\n });\n};\n\nproto.activateAsNavFor = function() {\n this.navCompanionSelect( true );\n};\n\nproto.removeNavSelectedElements = function() {\n if ( !this.navSelectedElements ) {\n return;\n }\n this.changeNavSelectedClass('remove');\n delete this.navSelectedElements;\n};\n\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\n if ( typeof cellIndex == 'number' ) {\n this.navCompanion.selectCell( cellIndex );\n }\n};\n\nproto.deactivateAsNavFor = function() {\n this.removeNavSelectedElements();\n};\n\nproto.destroyAsNavFor = function() {\n if ( !this.navCompanion ) {\n return;\n }\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\n this.off( 'staticClick', this.onNavStaticClick );\n delete this.navCompanion;\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","// slide\n( function( window, factory ) {\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.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","// drag\n( function( window, factory ) {\n // universal module definition\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 %= 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( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\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 - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\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","// add, remove cell\n( function( window, factory ) {\n // universal module definition\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 - Elements to insert\n * @param {Integer} index - Zero-based number to insert\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 - ELements to remove\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 * @param {Boolean} isPositioningSlider - Positions slider after selection\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","// lazyload\n( function( window, factory ) {\n // universal module definition\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 * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\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","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\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 * Unidragger v2.3.1\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 // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/* globals $ */\n\nexport default () => {\n $('.upload').find('input[type=\"file\"]').each(function () {\n const $input = $(this);\n const $preview = $input.next().next('.upload-preview');\n\n $input.on('change', () => {\n const files = $input[0].files;\n let previewContent = files[0].name;\n\n if (files.length > 1) {\n previewContent = `<ul>${Array.from(files).map(file => `<li>${file.name}</li>`).join().replace(/,/g, '')}</ul>`;\n }\n\n $preview.html(previewContent);\n });\n });\n};\n\n","/* globals $ */\n\nexport default () => {\n // initialise booleans to enable or disable js mobile features, based on css breakpoints\n let isMobile = false;\n let showLastMonthWeek = false;\n let initialWeek = false;\n const now = new Date();\n const timestamp = new Date(now.getFullYear(), now.getMonth(), now.getDate()) / 1;\n\n /*\n * define if all dates in a row are disabled\n */\n function isRowDisabled(weekNum, container) {\n const disabledCount = $(`tbody tr:nth-child(${weekNum}) .picker__day--outfocus`, container)\n .length;\n if (disabledCount === 7) {\n return true;\n }\n return false;\n }\n\n /*\n * Custom managemet of prev / next on mobile\n */\n function handlePrevNext(container, selected) {\n let weekNum = $('tr', container).index($('tr:has(.picker__day--selected)', container));\n if (initialWeek) {\n weekNum = initialWeek;\n initialWeek = false;\n }\n\n // only setup listeners when on mobile\n if (!isMobile) return container;\n\n if (showLastMonthWeek) {\n // handle display last week of the month after clicking prev\n showLastMonthWeek = false;\n weekNum = 6;\n if (isRowDisabled(6, container)) {\n weekNum = 5;\n }\n }\n\n // initialise data attibute\n $('tbody', container).attr('data-week', weekNum);\n\n $('.picker__nav--next', container).on('click', (e) => {\n if (weekNum < 6 && !isRowDisabled(weekNum + 1, container)) {\n // if we are not displaying the last row:\n // disable built-in behaviour and update data attribute\n e.stopPropagation();\n weekNum += 1;\n $('tbody', container).css('transition', 'left 0.4s');\n $('tbody', container).attr('data-week', weekNum);\n } else {\n // let plugin proceed to next month\n\n // reset week index\n weekNum = 1;\n }\n });\n\n $('.picker__nav--prev', container).on('click', (e) => {\n if (weekNum > 1) {\n // if we are not displaying the first row:\n // disable built-in behaviour and update visual to show previous week\n e.stopPropagation();\n weekNum -= 1;\n $('tbody', container).css('transition', 'left 0.4s');\n $('tbody', container).attr('data-week', weekNum);\n } else {\n // let plugin proceed to previous month\n\n // set flag to display last week of month at next render\n showLastMonthWeek = true;\n }\n });\n\n // enable transitions only when prev/next arrow are clicked\n $('.picker__day', container).each(function () {\n $(this).on('click', function () {\n $(this)\n .parent()\n .parent()\n .parent()\n .css('transition', 'left 0s');\n });\n });\n }\n\n /*\n * Focus today\n */\n function selectToday(picker) {\n // select today's week on initialisation\n picker.set('select', [now.getFullYear(), now.getMonth(), now.getDate()]);\n }\n\n /*\n * Display correct month labels on the side of the desktop version\n */\n function handleMonthLabels(picker, months) {\n const alreadyHandled = $('.nextMonthLabel', picker.$holder).length > 0;\n if (alreadyHandled) {\n return true;\n }\n\n const wrapper = picker.component.$node.parent();\n const next = $('.nextMonthLabel', wrapper);\n const prev = $('.prevMonthLabel', wrapper);\n\n let nextMonthIndex = picker.component.item.view.month + 1;\n if (nextMonthIndex === months.length) nextMonthIndex = 0;\n\n let prevMonthIndex = picker.component.item.view.month - 1;\n if (prevMonthIndex < 0) prevMonthIndex = 11;\n\n next.html(months[nextMonthIndex]);\n prev.html(months[prevMonthIndex]);\n\n $('.picker__box', picker.$root).append(next.clone());\n $('.picker__box', picker.$root).append(prev.clone());\n }\n\n /*\n * handle custom highlights\n */\n function setHighlights(container) {\n // we check all displayed dates, and highlight the ones we want to\n $('.picker__day--infocus', container).each(function () {\n const currentTimestamp = $(this).data('pick');\n const date = new Date(currentTimestamp);\n const dateString = `${date.getFullYear()}-${`0${date.getMonth() + 1}`.slice(-2)}-${`0${date.getDate()}`.slice(-2)}`;\n\n // this is arbitrary. change this with personal logic when needed and add you own class\n if (dateString === '2018-03-28') {\n $(this).addClass('custom-highlight');\n }\n });\n }\n\n /*\n * INIT datepicket-event\n */\n $('.datepicker-fancy').each(function () {\n const monthsShort = [\n 'Jan',\n 'Fév',\n 'Mar',\n 'Avr',\n 'Mai',\n 'Jui',\n 'Jui',\n 'Aoû',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Déc',\n ];\n const container = $(this).parent();\n $(this).pickadate({\n monthsFull: [\n 'Janvier',\n 'Février',\n 'Mars',\n 'Avril',\n 'Mai',\n 'Juin',\n 'Juillet',\n 'Août',\n 'Septembre',\n 'Octobre',\n 'Novembre',\n 'Décembre',\n ],\n monthsShort,\n weekdaysFull: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\n weekdaysShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],\n labelMonthNext: 'Prochain mois',\n labelMonthPrev: 'Mois précédent',\n labelMonthSelect: 'Sélectionnez un mois',\n labelYearSelect: 'Sélectionnez une année',\n format: 'd mmmm yyyy',\n firstDay: 1,\n today: '',\n clear: '',\n close: '',\n onRender() {\n handleMonthLabels(this, monthsShort);\n\n if (isMobile) {\n // refresh listeners after render\n handlePrevNext(container);\n }\n },\n onStart() {\n selectToday(this);\n setHighlights(this);\n\n // focus on today's week on start\n const selected = $('tr:has(.picker__day--selected)', container);\n if (selected.length > 0) {\n initialWeek = $('tr', container).index(selected);\n }\n\n // enable mobile behaviour when needed\n isMobile = $('.datepicker-fancy + .picker table').css('display') === 'block';\n }\n });\n });\n};\n","/* globals $ */\n\nimport Flickity from 'flickity';\nimport 'flickity-fullscreen';\nimport 'flickity-as-nav-for';\nimport 'imagesloaded';\n\nfunction setFlickityOnGallery($gallery) {\n const $items = $gallery.find('.gallery-item');\n\n // Toggle opacity to avoid load blink\n $gallery.addClass('ready');\n\n // Add counter\n $items.each(function (i) {\n $(this).find('figcaption')\n .append(`\n <span class=\"gallery-counter\">${i + 1}/${$items.length}</span>\n `);\n });\n\n // Instantiate Flickity gallery\n new Flickity($gallery.get(0), {\n pageDots: false,\n fullscreen: true,\n setGallerySize: true,\n arrowShape: 'M14.2,45.8L53,7.1c1.6-1.6,1.6-4.3,0-5.9s-4.3-1.6-5.9,0L1.2,47c-1.6,1.6-1.6,4.3,0,5.9c0,0,0,0,0,0l45.8,45.8c1.6,1.6,4.3,1.6,5.9,0s1.6-4.3,0-5.9L14.2,54.1h81.6c2.3,0,4.2-1.9,4.2-4.2s-1.9-4.2-4.2-4.2H14.2z',\n });\n\n // Replace fullscreen icons\n $('.flickity-fullscreen-button-view svg path')\n .attr(\n 'd',\n 'M32,11.9h-2.7V6.5H24V3.8h8V11.9z M24,28.2v-2.7h5.3v-5.4H32v8.2H24z M0,20.1h2.7v5.4H8v2.7H0V20.1z M8,3.8v2.7H2.7v5.4H0V3.8H8z',\n );\n $('.flickity-fullscreen-button-exit svg path')\n .attr(\n 'd',\n 'M18.1,16l13.4,13.4c0.6,0.6,0.6,1.5,0,2.1c-0.6,0.6-1.5,0.6-2.1,0L16,18.1L2.6,31.6c-0.6,0.6-1.5,0.6-2.1,0c-0.6-0.6-0.6-1.5,0-2.1l0,0L13.9,16L0.4,2.6C-0.1,2-0.1,1,0.4,0.4s1.5-0.6,2.1,0L16,13.9L29.4,0.4c0.6-0.6,1.5-0.6,2.1,0c0.6,0.6,0.6,1.5,0,2.1L18.1,16z',\n );\n\n // Improve prev/next buttons position\n const height = $gallery.find('.gallery-item.is-selected img')\n .height();\n $gallery.find('.flickity-prev-next-button')\n .css('top', `${height / 2}px`);\n}\n\nfunction setFlickityGalleryNav($galleryNav) {\n $galleryNav.imagesLoaded()\n .always(function (instance) {\n const target = $galleryNav.data('gallery');\n\n // Toggle opacity to avoid load blink\n $galleryNav.addClass('ready');\n\n // Instantiate Flickity nav\n new Flickity($galleryNav.get(0), {\n asNavFor: `#${target}`,\n cellAlign: 'left',\n pageDots: false,\n prevNextButtons: false,\n contain: true,\n });\n })\n .fail(function () {\n console.log(`one image is broken for a gallery nav`);\n });\n}\n\nexport default () => {\n const $galleries = $('.gallery');\n\n // Base gallery logic\n if ($galleries.length > 0) {\n console.log('starting to gallerynav');\n $galleries.each(function (i) {\n $(this).imagesLoaded()\n .always(function (instance) {\n setFlickityOnGallery($($galleries[i]));\n\n // once the galary is loaded, try to find any nav linked for the current gallery\n const $galleryNavs = $(`.gallery-nav[data-gallery='${$galleries[i].id}']`);\n\n if ($galleryNavs.length > 0) {\n $galleryNavs.each(function (j) {\n setFlickityGalleryNav($($galleryNavs[j], $galleries[i].id));\n });\n }\n })\n .fail(function () {\n console.log(`one image is broken for a gallery`);\n });\n });\n }\n};\n","/* globals $, ClipboardJS */\n\nexport default () => {\n $('.social-share-copy').each(function () {\n const copyBtn = $(this);\n const baseText = copyBtn.text();\n const successText = copyBtn.data('success');\n const clipboard = new ClipboardJS(copyBtn[0], {\n target: (trigger) => {\n return $(trigger).prev(\"input\")[0];\n },\n });\n\n clipboard.on('success', (e) => {\n $(e.trigger).text(successText);\n setTimeout(() => $(e.trigger).text(baseText), 3000);\n\n e.clearSelection();\n });\n });\n};\n","const svgIcons = () => {\n loadIcons(window.svgPath || 'icons/icons.svg');\n loadIcons(window.featherSvgPath || 'icons/feather-sprite.svg');\n};\n\nexport default svgIcons;\n\nfunction loadIcons (svgPath) {\n const ajax = new XMLHttpRequest();\n ajax.open('GET', svgPath, true);\n ajax.send();\n ajax.onload = function (e) {\n if (e.target.status === 200) {\n const div = document.createElement('div');\n div.setAttribute('style', 'display: none');\n div.innerHTML = ajax.responseText;\n document.body.insertAdjacentElement('beforeend', div);\n }\n };\n}\n","/* global $ */\n\nconst nav = () => {\n // declare classes used to identify current menu and its parents (based on wordpress classes)\n const activeClass = 'current-menu-parent';\n const parentClass = 'current-menu-ancestor';\n\n // toggle mobile navigation\n const toggleMobileMenu = () => {\n // handle correct menu display when on level 0 page on mobile\n const firstLeveItem = $('.nav-main .nav-menu>.current-menu-item');\n if (firstLeveItem.length > 0) {\n const parent = firstLeveItem.parents()[1];\n $(parent).addClass(activeClass);\n }\n\n $('body').toggleClass('mobile-menu-open');\n };\n\n // Open or close desktop toggle navigation, keeping its actual position.\n // Used for the hamburger desktop menu to display current position\n const toggleDesktopMenu = (mustOpen = false) => {\n const navToggle = $('.nav-toggle');\n navToggle.toggleClass('open');\n const offsetX = navToggle.offset().left + navToggle.outerWidth(true);\n const offsetY = navToggle.offset().top - $(window).scrollTop();\n $('.nav-main').css('top', offsetY);\n\n $('body').toggleClass('desktop-menu-open');\n if (mustOpen && $('body').hasClass('desktop-menu-open')) {\n $('.nav-main').css('left', offsetX);\n } else {\n $('.nav-main').css('left', '');\n }\n };\n\n // moves the navigation one level up when clicking a \"back\" link\n // eslint-disable-next-line\n $('.nav-main .nav-back a').on('click', function(e) {\n e.preventDefault();\n\n const parents = $(this).parents();\n\n const parent = parents[2];\n $(parent)\n .removeClass(parentClass)\n .removeClass(activeClass);\n\n const ancestor = parents[4];\n $(ancestor)\n .removeClass(parentClass)\n .addClass(activeClass);\n });\n\n /*\n move the navigation one level down,\n when clicking the \"show children\" arrow on the right of a menu item\n */\n // eslint-disable-next-line\n $('.nav-main .nav-arrow').on('click', function(e) {\n e.preventDefault();\n\n const parents = $(this).parents();\n\n const parent = parents[0];\n $(parent).addClass(activeClass);\n\n const ancestor = parents[2];\n $(ancestor)\n .addClass(parentClass)\n .removeClass(activeClass);\n });\n\n // bind action to mobile menu toggle\n $('.nav-toggle-mobile').on('click', () => {\n toggleMobileMenu();\n });\n\n // Bind action to close toggle navigation, when clicking the white overlay\n $('.overlay').on('click', (e) => {\n e.preventDefault();\n toggleDesktopMenu();\n });\n\n // Bind action to the desktop hamburger (next to breadcrumbs)\n // eslint-disable-next-line\n $('.nav-toggle').on('click', function() {\n if ($(this).hasClass('nav-toggle-async') && !$(this).hasClass('open')) {\n $(this).addClass('is-loading');\n\n // Demo of loading resolution\n if ($('#styleguide').length > 0) {\n setTimeout(() => $('.nav-toggle-async').trigger('loadend'), 700);\n }\n } else {\n toggleDesktopMenu(true);\n }\n });\n\n // eslint-disable-next-line\n $('.nav-toggle').on('loadend', function() {\n $(this).removeClass('is-loading');\n toggleDesktopMenu(true);\n });\n};\n\nexport default nav;\n","/* global $ */\n\nconst drawer = () => {\n $('.drawer-toggle').click(function () {\n const $drawer = $(this).parent('.drawer');\n const $drawerLink = $drawer.find('.drawer-link');\n const $drawerToggle = $(this);\n const breakpoint = 992;\n\n if ($drawer.hasClass('open')) {\n $drawer.removeClass('open');\n $drawer.css({ width: '' });\n $drawerLink.css({ width: $drawerToggle.width() });\n } else {\n let linkWidth = '100%';\n\n if ($(window).width() > breakpoint) {\n linkWidth = $drawerLink.find('.text').outerWidth();\n $drawer.css({ width: linkWidth });\n }\n $drawer.addClass('open');\n $drawerLink.css({ width: linkWidth });\n }\n });\n};\n\nexport default drawer;\n","/* global $ */\n\nexport default () => {\n\n $('.btn-collapse').click(function(){\n\n const parent = $(this).parent(\".line\");\n const toggleIcon = $(this).find(\"span\")\n\n parent.toggleClass('open');\n toggleIcon.toggleClass('show');\n });\n\n};\n","/* globals jQuery */\n\nlet bannerElement\nfunction cookieConsent(opt_visible) {\n if (bannerElement) {\n setVisibility(bannerElement, opt_visible)\n } else {\n window.cookieconsent.initialise(\n get_cookieconsent_config(),\n (popup) => {\n bannerElement = popup.element\n setVisibility(bannerElement, opt_visible)\n },\n (err) => console.error(err)\n )\n window.cookieconsent.initialise = (() => { })\n }\n}\n\njQuery.fn.extend({ cookieConsent })\nexport default cookieConsent\n\nfunction setVisibility(cookieBanner, visible) {\n if (visible === true) {\n jQuery(cookieBanner).show().removeClass(\"cc-invisible\")\n } else if (visible === false) {\n jQuery(cookieBanner).hide().addClass(\"cc-invisible\")\n }\n}\n\nfunction get_cookieconsent_config() {\n // Translation\n const cookieI18n = {\n en: {\n msg: 'When you access EPFL websites, we may set cookies on your '\n + 'devices and process personal data about you in accordance with '\n + 'our <a tabindex=\"0\" class=\"cc-link\" target=\"_blank\" '\n + 'href=\"//go.epfl.ch/privacy-policy\">privacy policy</a>. '\n + 'You can block cookies by using your browser settings.'\n },\n fr: {\n msg: 'Lorsque vous accédez aux sites web de l\\'EPFL, nous pouvons '\n + 'installer des cookies sur vos appareils et traiter des données '\n + 'personnelles vous concernant conformément à notre '\n + '<a tabindex=\"0\" class=\"cc-link\" target=\"_blank\" '\n + 'href=\"//go.epfl.ch/protection-des-donnees\">'\n + 'politique de confidentialité</a>. Vous pouvez bloquer les '\n + 'cookies à l\\'aide des paramètres de votre navigateur.'\n },\n de: {\n msg: 'Wenn Sie auf die Websites der EPFL zugreifen, können wir in '\n + 'Übereinstimmung mit unserer '\n + '<a tabindex=\"0\" class=\"cc-link\" target=\"_blank\" '\n + 'href=\"//go.epfl.ch/privacy-policy\">Datenschutzerklärung</a> '\n + 'Cookies auf Ihren Geräten speichern und Personendaten bearbeiten. '\n + 'Über die Einstellungen in Ihrem Browser können Sie Cookies '\n + 'blockieren.',\n }\n };\n // Retrieve language, default 'fr'\n const langAttribute = document.documentElement.lang;\n let lang = langAttribute.substring(0, 2);\n if (!cookieI18n[lang]) {\n lang = 'fr';\n }\n\n // Retrieve the domain\n // Don't work with google.co.uk for example\n let domain_name = 'epfl.ch';\n const hostame = window.location.hostname;\n if (hostame === 'localhost' || hostame === '127.0.0.1') {\n domain_name = hostame;\n } else {\n const hostParts = hostame.split('.').reverse();\n if (hostParts[0] !== undefined && hostParts[1] !== undefined) {\n domain_name = `${hostParts[1]}.${hostParts[0]}`;\n }\n }\n\n const config = {\n theme: 'classic',\n palette: {\n popup: {\n background: 'rgba(69, 69, 69, 0.96)'\n },\n button: {\n background: '#b51f1f'\n }\n },\n content: {\n message: cookieI18n[lang].msg,\n dismiss: 'OK',\n },\n showLink: false,\n cookie: {\n name: 'petitpois', // Chosen by a magical unicorn!\n domain: domain_name,\n autoAttach: false // attach it manually to the end, or SEO will crawl it before any content\n }\n }\n return config;\n}\n","/* globals $ */\n\nexport const nutrimenuScore = [\n 'E', 'D-', 'D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+'];\n\nexport default () => {\n const slider = $('#nutrimenu-score');\n const output = $(\"output[for='nutrimenu-score']\");\n\n if (slider.length > 0 && output.length > 0) {\n // eslint-disable-next-line radix\n output.val(nutrimenuScore[parseInt(slider.val()) - 1]);\n\n slider.on('input', function () {\n // eslint-disable-next-line radix\n output.val(nutrimenuScore[parseInt($(this).val()) - 1]);\n });\n }\n};\n","/* globals jQuery, Tablesaw */\n\nimport upload from './atoms/upload/upload';\nimport breadcrumb from './molecules/breadcrumb/breadcrumb';\nimport datepicker from './molecules/datepicker/datepicker';\nimport datepickerEvent from './molecules/datepicker/datepicker-fancy';\nimport popover from './atoms/popover/popover';\nimport gallery from './molecules/gallery/gallery';\nimport social from './molecules/social/social';\nimport selectMultiple from './atoms/select/select-multiple';\nimport tagInput from './atoms/tag/tag-input';\nimport cardSlider from './organisms/card-slider/card-slider';\nimport svgIcons from '../icons/svg-icons';\nimport nav from './organisms/nav-main/nav-main.js';\nimport drawer from './atoms/drawer/drawer.js';\nimport search from './molecules/search/search.js';\nimport searchMobile from './molecules/search/search-mobile.js';\nimport coursebook from './content-types/coursebook/coursebook.js';\nimport studyplan from './content-types/study-plan/study-plan.js';\nimport cookieconsent from './organisms/cookie-consent/cookie-consent.js';\nimport backToTopBtn from './organisms/footer/back-to-top-button.js';\nimport anchors from './anchors';\nimport rangeSlider from './atoms/range/range.js';\nimport restauration from './organisms/restauration/restauration';\n\nimport guide from './guide.js';\n\njQuery.fn.extend({\n epflElements () {\n upload();\n selectMultiple();\n tagInput();\n datepicker();\n datepickerEvent();\n popover();\n gallery();\n search();\n searchMobile();\n social();\n coursebook();\n Tablesaw.init();\n cardSlider();\n svgIcons();\n nav();\n drawer();\n breadcrumb();\n cookieconsent();\n backToTopBtn();\n rangeSlider();\n restauration();\n studyplan();\n\n guide();\n anchors();\n }\n});\n\n// Run that once the page is done loading:\njQuery(jQuery.fn.epflElements);\n","/* globals $ */\n\nexport default () => {\n $('.select-multiple').each((index, element) => {\n $(element).multipleSelect({\n placeholder: $(element).attr('data-placeholder') || '',\n width: '100%',\n });\n });\n};\n","/* globals $ */\n\nexport default () => {\n $('.tag-input').selectize({\n plugins: ['remove_button'],\n render: {\n item: (data, escape) => `<div class=\"tag tag-primary\">${escape(data.text)}</div>`,\n },\n create: input => ({\n value: input,\n text: input,\n }),\n });\n};\n","/* globals $ */\n\nexport default () => {\n $('.datepicker').pickadate({\n monthsFull: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],\n monthsShort: ['Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jui', 'Jui', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc'],\n weekdaysFull: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\n weekdaysShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],\n labelMonthNext: 'Prochain mois',\n labelMonthPrev: 'Mois précédent',\n labelMonthSelect: 'Sélectionnez un mois',\n labelYearSelect: 'Sélectionnez une année',\n format: 'd mmmm yyyy',\n firstDay: 1,\n today: '',\n clear: '',\n close: '',\n });\n};\n","/* globals $ */\n\nexport default () => {\n $(function () {\n $('[data-toggle=\"popover\"]').popover({\n placement: 'top',\n html: true,\n offset: -135,\n template: '<div class=\"popover\" role=\"tooltip\"><div class=\"popover-body\"></div></div>',\n });\n });\n};\n\n","/* global $ */\n\nexport default () => {\n $('.search').on('shown.bs.dropdown', () => {\n $('.search input[type=\"text\"]').trigger('focus');\n });\n};\n","/* global $ */\n\nexport default () => {\n\n $('#search-mobile-toggle').on('click', () => {\n\n const searchContainer = $('.search-mobile');\n const searchField = searchContainer.find('.form-control');\n\n searchContainer.toggleClass('show');\n $('body').toggleClass('search-open');\n\n if (searchContainer.hasClass('show')) {\n searchField.trigger('focus');\n }\n\n });\n\n $('#search-mobile-close').on('click', () => {\n\n const searchContainer = $('.search-mobile');\n\n searchContainer.removeClass('show');\n $('body').removeClass('search-open');\n\n });\n\n};\n","/* global $ */\n\nexport default () => {\n const id = new Date().getTime().toString(16);\n $('.coursebook-program .tree>li').each((i, collapse) => {\n\n // identify toggle and target\n const toggle = $('.underline a', collapse);\n const target = $('>ul', collapse);\n\n // generate page-unique id\n const itemId = `${id}-${i}`;\n\n // set correct attributes\n target.addClass('collapse collapse-item collapse-item-desktop');\n toggle.addClass('collapse-title collapse-title-desktop collapsed');\n target.attr('id', itemId);\n toggle.attr('data-target', `#${itemId}`);\n toggle.attr('data-toggle', 'collapse');\n\n // automatically add full width buttons at the end of the collapse\n const link = $('<a></a>');\n link.addClass('btn btn-block btn-sm btn-primary my-3');\n link.html(\"Voir le plan d'études\");\n link.attr('href', toggle.attr('href'));\n target.append(link);\n });\n};\n","/* globals $ */\n\nimport Flickity from 'flickity';\nimport Imagesloaded from 'imagesloaded';\n\nexport default () => {\n if ($('.card-slider-wrapper').length > 0) {\n // Mobile width corresponds to SM breakpoint from Bootstrap.\n const isMobile = $(window).width() < 768;\n\n $( \".card-slider-wrapper\" ).each( ( index, cardSliderWrapper ) => {\n let flkty;\n let cardSlider = $(cardSliderWrapper).find('.card-slider')[0];\n\n Imagesloaded(cardSlider, () => {\n flkty = new Flickity(cardSlider, {\n cellAlign: 'left',\n setGallerySize: true,\n pageDots: isMobile,\n prevNextButtons: false,\n contain: true,\n groupCells: false,\n });\n\n $(cardSliderWrapper).find('#card-slider-prev').on('click', () => {\n flkty.previous();\n });\n\n $(cardSliderWrapper).find('#card-slider-next').on('click', () => {\n flkty.next();\n });\n\n $(cardSliderWrapper).find('.card-slider-cell').css('height', '100%');\n\n flkty.on('select', () => {\n $(cardSliderWrapper).find('.card-slider-btn').removeClass('disabled');\n\n if (flkty.selectedIndex === 0) {\n $(cardSliderWrapper).find('#card-slider-prev').addClass('disabled');\n }\n\n if (\n flkty.selectedIndex + 1 === flkty.slides.length ||\n flkty.selectedIndex + 2 === flkty.slides.length\n ) {\n $(cardSliderWrapper).find('#card-slider-next').addClass('disabled');\n }\n });\n\n });\n });\n }\n};\n","/* globals $ */\n\nexport default () => {\n const expandBreadcrumb = $('.btn-expand-links');\n const breadcrumbDropToggle = $('.dropdown-toggle');\n\n // add class 'has-expanded-links'\n expandBreadcrumb.on('click', () => {\n $('.breadcrumb-wrapper .breadcrumb').addClass('has-expanded-links');\n });\n\n // improve dropdown position\n breadcrumbDropToggle.on('click', (e) => {\n const btnPos = $(e.currentTarget).offset().left;\n const documentWitdh = $(document).width();\n const dropdown = $(e.currentTarget).siblings('.dropdown-menu');\n const dropdownWidth = dropdown.width();\n const btnOffset = documentWitdh - btnPos;\n\n // remove class 'open-left' from all .dropdown-menu elements\n $('.dropdown-menu').removeClass('open-left');\n // add the class back if the dropdown is too close to the right side of the window\n if (dropdownWidth > btnOffset) {\n dropdown.addClass('open-left');\n }\n });\n};\n","/* globals $ */\n\n\nexport default () => {\n\n const backToTopBtn = $('#back-to-top');\n\n $(window).scroll(function() {\n if ($(window).scrollTop() > 500) {\n backToTopBtn.addClass('show');\n } else {\n backToTopBtn.removeClass('show');\n }\n });\n\n backToTopBtn.on('click', function(e) {\n e.preventDefault();\n $('html, body').animate({scrollTop:0}, '300');\n });\n\n};\n","export default () => {\n // Create colored progress bar for damn webkit browsers >.<\n\n const rangeSlider = document.querySelector('input[type=range]');\n\n if (rangeSlider) {\n rangeSlider.style.setProperty('--val', +rangeSlider.value);\n rangeSlider.style.setProperty('--max', +rangeSlider.max);\n rangeSlider.style.setProperty('--min', +rangeSlider.min);\n\n rangeSlider.addEventListener('input', () => {\n rangeSlider.style.setProperty('--val', +rangeSlider.value);\n }, false);\n }\n};\n","/* globals $, introJs */\n\nexport default () => {\n if ($('#tour-lab').length > 0) {\n const startIntro = () => {\n const intro = introJs();\n intro.setOptions({\n buttonClass: 'btn btn-secondary btn-sm mt-4',\n tooltipPosition: 'auto',\n positionPrecedence: ['bottom', 'top', 'right', 'left'],\n scrollTo: 'tooltip',\n scrollToElement: true,\n steps: [\n {\n intro:\n \"This is the laboratory's homepage. <b>It serves to guide the visitors to the different sub-contents</b>. The main contents are projects and publications. Here is the hierarchical order that we are proposing.\",\n },\n {\n element: '#tour-hero',\n intro:\n 'Define the <b>laboratory title</b> and a <b>cover image</b> using the <a href=\"#/organisms/hero\" target=\"_blank\">hero</a> component or only <b>a title</b>, if there is no cover, using the following step structure.',\n },\n {\n element: '#tour-intro',\n intro:\n 'Type a <b>succinct introduction paragraph</b> wrapped inside a <code>.container-grid</code> (the title can also be added here)',\n },\n {\n element: '#tour-projects',\n intro: `\n The main objective of a laboratory is to show the projects that are carried out there. In this section, you can use the <a href=\"#/content-types/research-project\" target=\"_blank\">Research project</a> content types to show them. We advise you to put a <b>maximum of 3 projects</b> on the lab’s homepage and then put a link to the page that lists all the projects.\n `,\n },\n {\n element: '#tour-publications',\n intro: `\n Laboratories also produce publications. You can list <b>up to 5</b> here with the <a href=\"#/content-types/publication\" target=\"_blank\">Publication</a> component and add a link to the page that lists all the publications.\n `,\n },\n {\n element: '#tour-news',\n intro: `\n If you have some news about your laboratory, you can list the latest at this location. We advise you not to list too much (maximum 2) and use the component <a href=\"#/content-types/news\" target=\"_blank\">News</a> content-types (<b>Basic teaser</b>) and add a link to all news page.\n `,\n },\n {\n element: '#tour-partof',\n intro: `\n <p>\n This section is intended to <b>provide the context of the laboratory</b>. It is possible for a laboratory to belong to several institutes and/or faculties. If this is the case, we advise you to use a teaser that brings the visitor to a listing page, rather than putting them all on the lab’s homepage. Laboratories can have themes that categorize them. It is recommended to use component “tag” to list them.\n </p>\n <p>\n For this part, you can use some of the <a href=\"#/content-types/school\" target=\"_blank\">School</a> and <a href=\"#/content-types/institute\" target=\"_blank\">Institute</a> content types. The themes are based on the <a href=\"#/atoms/tag\" target=\"_blank\">tag</a> component.\n </p>\n `,\n },\n {\n element: '#tour-contact',\n intro: `\n <b>Several people may want to contact</b> the laboratory: press, potential collaborators, people interested in your work or simply people who want to know where you are located. That’s why we recommend using the <a href=\"#/organisms/contact\" target=\"_blank\">Contact</a> component (<b>Banner</b>) that gives all this information.\n `,\n },\n {\n element: '#tour-team',\n intro: `\n Some visitors may want to ask you questions or <b>see who composes the laboratory's team</b>. It is possible to link to the team page using the <a href=\"#/content-types/basic-page\" target=\"_blank\">Teaser basic page</a> component.\n `,\n },\n {\n element: '#tour-sponsors',\n intro: `\n It is possible that you have sponsors. On a second column, you can list them thanks to the <a href=\"#/molecules/sponsor\" target=\"_blank\">Sponsor</a> component.\n `,\n },\n ],\n });\n intro.start();\n };\n\n $('#tour-start').click(() => startIntro());\n }\n};\n","import lab from './pages/lab-homepage/lab-homepage.js';\n\nexport default () => {\n lab();\n};\n","/* global $ */\n\nexport default () => {\n $('a').on('click', (e) => {\n const target_href = $(e.target).attr('href');\n if (target_href && target_href.length > 1 && target_href.match('^#')) {\n $(e.target)[0].scrollIntoView();\n }\n });\n};\n"],"names":["window","matchesSelector","utils","a","b","prop","num","div","arraySlice","Array","prototype","slice","makeArray","obj","isArray","length","call","removeFrom","ary","index","indexOf","splice","getParent","elem","selector","parentNode","document","body","getQueryElement","querySelector","handleEvent","event","method","type","this","filterFindElements","elems","ffElems","forEach","HTMLElement","push","childElems","querySelectorAll","i","debounceMethod","_class","methodName","threshold","timeoutName","timeout","clearTimeout","args","arguments","_this","setTimeout","apply","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","factory","Flickity","Unipointer","PageDots","parent","_create","Object","create","holder","createElement","dots","handleClick","onClick","bind","on","childUIPointerDown","activate","setDots","bindStartEvent","element","appendChild","deactivate","removeEventListener","unbindStartEvent","removeChild","delta","slides","addDots","removeDots","count","fragment","createDocumentFragment","newDots","max","dot","setAttribute","updateSelected","selectedDot","removeAttribute","selectedIndex","onTap","target","nodeName","uiChange","select","destroy","allOff","extend","defaults","pageDots","createMethods","proto","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","EvEmitter","getSize","Cell","Slide","animatePrototype","getComputedStyle","moveElements","toElem","shift","GUID","instances","queryElement","flickityGUID","option","$element","constructor","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","percentPosition","resize","selectedAttraction","setGallerySize","id","guid","eventName","restingFrames","x","velocity","originSide","rightToLeft","viewport","_createSlider","watchCSS","listener","opts","isActive","classList","add","_filterFindCellElements","children","slider","reloadCells","tabIndex","emitEvent","selectInitialIndex","isInitActivated","dispatchEvent","style","cellSelector","cells","_makeCells","positionCells","_getWrapShiftCells","map","cellElem","getLastCell","getLastSlide","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","size","outerWidth","len","cell","setPosition","Math","outerHeight","slideableWidth","updateSlides","_containSlides","slidesWidth","slide","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","updateTarget","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","innerWidth","_init","reposition","positionSliderAtSelected","setCellAlign","cursorPosition","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","selectedSlide","wrapAround","_unshiftCells","beforeShiftCells","afterShiftCells","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","modulo","prevIndex","startAnimation","wrapIndex","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","value","getCellSlideIndex","getCell","getCells","getParentCell","getAdjacentCellElements","adjCount","undefined","cellElems","slideIndex","preventDefault","focus","onresize","content","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","leftMethod","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","remove","removeData","bridget","setJQuery","jq","getStyleSize","parseFloat","isNaN","logError","message","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","width","padding","borderStyle","borderWidth","boxSizing","documentElement","round","setup","nodeType","display","innerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","isAnimating","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","translateX","getPositionValue","transform","firstSlide","positionX","progress","position","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","afterGap","gap","cellShift","wrapShift","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","svgURI","PrevNextButton","direction","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","shape","path","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","onclick","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","off","events","_events","listeners","once","onceEvents","_onceEvents","onceListeners","matchesMethod","ElemProto","Element","matches","prefixes","_createFullscreen","isFullscreen","fullscreen","viewFullscreenButton","FullscreenButton","exitFullscreenButton","_changeFullscreenActive","childMethod","activeMethod","viewFullscreen","_changeFullscreen","exitFullscreen","isView","classMethod","toggleFullscreen","name","flickity","createButton","createIcon","clickHandler","text","label","toUpperCase","title","pathDirections","view","exit","$","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","addImage","background","addElementBackgroundImages","elementNodeTypes","childImgs","img","child","LoadingImage","Background","url","Image","reURL","exec","backgroundImage","addBackground","loadingImage","onProgress","image","progressedCount","hasAnyBroken","complete","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","src","onload","unbindEvents","onerror","makeJQueryPlugin","fn","imagesLoaded","promise","_bindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","pointerId","pointerDown","_bindPostStartEvents","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","y","pageY","side","renderPosition","setDefaultTarget","marginProperty","_createAsNavFor","activateAsNavFor","deactivateAsNavFor","destroyAsNavFor","asNavForOption","asNavFor","setNavCompanion","companion","navCompanion","onNavCompanionSelect","navCompanionSelect","onNavStaticClick","firstIndex","selectIndex","floor","t","removeNavSelectedElements","navSelectedElements","changeNavSelectedClass","navElem","cellElement","isOriginLeft","lastCell","lastMargin","Unidragger","draggable","dragThreshold","_touchActionValue","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","bindHandles","unbindHandles","bindDrag","unbindDrag","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","focusNodes","INPUT","TEXTAREA","SELECT","isTouchStart","isTouchPointer","pointerType","isFocusNode","hasDragStarted","moveVector","isTouchScrolling","_dragPointerUp","dragStart","dragStartPosition","_dragPointerMove","_dragMove","dragMove","previousDragX","originBound","dragMoveTime","Date","dragEnd","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","wrap","staticClick","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","insert","getCellsFragment","isAppend","insertCellElement","insertBefore","endCells","cellChange","append","prepend","minCellIndex","cellSizeChange","changedCellIndex","isPositioningSlider","prevSelectedElem","LazyLoader","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","srcset","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","_bindHandles","touchAction","handle","cursorNodes","OPTION","clickTypes","radio","checkbox","submit","file","isCursorNode","isClickType","isOkay","focused","blur","isDragging","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","n","getter","__esModule","d","definition","key","o","defineProperty","enumerable","get","hasOwnProperty","find","each","$input","$preview","files","previewContent","from","join","html","isMobile","showLastMonthWeek","initialWeek","now","isRowDisabled","weekNum","container","getFullYear","getMonth","getDate","monthsShort","pickadate","monthsFull","weekdaysFull","weekdaysShort","labelMonthNext","labelMonthPrev","labelMonthSelect","labelYearSelect","format","firstDay","today","close","onRender","picker","months","$holder","wrapper","component","$node","prev","nextMonthIndex","item","month","prevMonthIndex","$root","clone","handleMonthLabels","e","stopPropagation","css","handlePrevNext","onStart","set","currentTimestamp","date","addClass","setHighlights","selected","$galleries","always","$gallery","$items","setFlickityOnGallery","$galleryNavs","j","$galleryNav","fail","copyBtn","baseText","successText","ClipboardJS","clearSelection","loadIcons","svgPath","ajax","XMLHttpRequest","open","send","status","innerHTML","responseText","insertAdjacentElement","activeClass","parentClass","toggleDesktopMenu","mustOpen","navToggle","toggleClass","offsetX","offset","offsetY","top","scrollTop","hasClass","parents","removeClass","ancestor","firstLeveItem","toggleMobileMenu","click","$drawer","$drawerLink","$drawerToggle","linkWidth","toggleIcon","bannerElement","cookieConsent","opt_visible","setVisibility","cookieconsent","initialise","cookieI18n","en","msg","fr","de","lang","substring","domain_name","hostame","location","hostname","hostParts","split","reverse","theme","palette","popup","dismiss","showLink","cookie","domain","autoAttach","get_cookieconsent_config","err","cookieBanner","visible","show","hide","nutrimenuScore","output","val","epflElements","upload","multipleSelect","placeholder","selectize","plugins","render","escape","input","datepickerEvent","popover","placement","template","gallery","searchContainer","searchField","social","getTime","toString","collapse","toggle","itemId","link","coursebook","Tablesaw","init","cardSliderWrapper","flkty","cardSlider","Imagesloaded","featherSvgPath","nav","drawer","expandBreadcrumb","breadcrumbDropToggle","btnPos","currentTarget","documentWitdh","dropdown","siblings","dropdownWidth","btnOffset","breadcrumb","backToTopBtn","rangeSlider","setProperty","restauration","studyplan","startIntro","intro","introJs","setOptions","buttonClass","tooltipPosition","positionPrecedence","scrollToElement","steps","start","lab","target_href","scrollIntoView"],"ignoreList":[],"sourceRoot":""}
|