{"version":3,"file":"image_masonry.js","mappings":"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","sources":["webpack://trace_taiwan/./node_modules/fizzy-ui-utils/utils.js","webpack://trace_taiwan/./node_modules/get-size/get-size.js","webpack://trace_taiwan/./node_modules/ev-emitter/ev-emitter.js","webpack://trace_taiwan/./node_modules/outlayer/outlayer.js","webpack://trace_taiwan/./node_modules/outlayer/item.js","webpack://trace_taiwan/./node_modules/masonry-layout/masonry.js","webpack://trace_taiwan/./node_modules/outlayer/node_modules/ev-emitter/ev-emitter.js","webpack://trace_taiwan/./node_modules/imagesloaded/imagesloaded.js","webpack://trace_taiwan/./node_modules/desandro-matches-selector/matches-selector.js","webpack://trace_taiwan/webpack/bootstrap","webpack://trace_taiwan/webpack/runtime/compat get default export","webpack://trace_taiwan/webpack/runtime/define property getters","webpack://trace_taiwan/webpack/runtime/hasOwnProperty shorthand","webpack://trace_taiwan/./app/javascript/packs/image_masonry.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","/*!\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 * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n 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\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let 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 let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let 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 return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n","/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter 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 // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n","/**\n * Outlayer Item\n */\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 - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n","/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\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 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\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 * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( window, require('ev-emitter') );\n } else {\n // browser global\n window.imagesLoaded = factory( window, window.EvEmitter );\n }\n\n} )( typeof window !== 'undefined' ? window : this,\n function factory( window, EvEmitter ) {\n\nlet $ = window.jQuery;\nlet console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\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, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\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 let 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 = {};\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n Object.assign( this.options, options );\n }\n\n if ( onAlways ) this.on( 'always', onAlways );\n\n this.getImages();\n // add jQuery Deferred object\n if ( $ ) this.jqDeferred = new $.Deferred();\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.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\nconst elementNodeTypes = [ 1, 9, 11 ];\n\n/**\n * @param {Node} elem\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 let { nodeType } = elem;\n if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;\n\n let childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( let img of childImgs ) {\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n let children = elem.querySelectorAll( this.options.background );\n for ( let child of children ) {\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nconst reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n let style = getComputedStyle( elem );\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n if ( !style ) return;\n\n // get url inside url(\"...\")\n let matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n let 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 let loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n let background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\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 /* eslint-disable-next-line func-style */\n let onProgress = ( image, elem, message ) => {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( () => {\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 let eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n let 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 let 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 // add crossOrigin attribute. #204\n if ( this.img.crossOrigin ) {\n this.proxyImage.crossOrigin = this.img.crossOrigin;\n }\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.currentSrc || 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 let { parentNode } = this.img;\n // emit progress with parent or self \n let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;\n this.emitEvent( 'progress', [ this, elem, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n let 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 let 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 ) return;\n\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, onAlways ) {\n let instance = new ImagesLoaded( this, options, onAlways );\n return instance.jqDeferred.promise( $( this ) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\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","// 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); }","import imagesLoaded from 'imagesloaded';\nimport Masonry from 'masonry-layout';\n\nvar grid = document.querySelector('.masonry-grid');\nvar msnry;\n\nif (grid) {\n imagesLoaded( grid, function() {\n // init layout after all images have loaded\n msnry = new Masonry( grid, {\n itemSelector: '.grid-item',\n percentPosition: true,\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","getStyleSize","value","parseFloat","isNaN","logError","message","measurements","measurementsLength","getStyle","style","getComputedStyle","isBoxSizeOuter","isSetup","getSize","createElement","width","padding","borderStyle","borderWidth","boxSizing","documentElement","appendChild","Math","round","removeChild","setup","nodeType","display","size","height","innerWidth","innerHeight","outerWidth","outerHeight","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","global","EvEmitter","proto","on","eventName","listener","events","_events","listeners","includes","once","onceEvents","_onceEvents","off","emitEvent","onceListeners","allOff","module","exports","Item","noop","GUID","instances","Outlayer","element","queryElement","$element","extend","constructor","defaults","option","id","outlayerGUID","_create","_getOption","layout","containerStyle","position","initLayout","originLeft","originTop","resize","resizeContainer","transitionDuration","hiddenStyle","opacity","transform","visibleStyle","subclass","Parent","SubClass","Object","create","opts","oldOption","compatOptions","undefined","horizontal","layoutInstant","reloadItems","stamps","stamp","bindResize","items","_itemize","children","itemElems","_filterFindItemElements","item","itemSelector","getItemElements","map","_resetLayout","_manageStamps","isInstant","_isLayoutInited","layoutItems","_init","_getMeasurement","_getItemsForLayout","_layoutItems","_postLayout","filter","isIgnored","_emitCompleteOnItems","queue","_getItemLayoutPosition","isLayoutInstant","_processLayoutQueue","x","y","updateStagger","_positionItem","stagger","time","matches","unit","msUnits","getMilliseconds","goTo","moveTo","_getContainerSize","_setContainerMeasure","measure","isWidth","elemSize","max","onComplete","dispatchEvent","count","doneCount","tick","emitArgs","$event","Event","trigger","ignore","getItem","unignore","_find","unstamp","_getBoundingRect","_manageStamp","boundingRect","getBoundingClientRect","_boundingRect","left","top","right","bottom","_getElementOffset","thisRect","isResizeBound","unbindResize","removeEventListener","onresize","needsResizeLayout","addItems","appended","reveal","prepended","previousItems","hide","revealItemElements","getItems","hideItemElements","remove","removeItems","destroy","removeData","Layout","bridget","ms","s","docElemStyle","transitionProperty","transition","transformProperty","transitionEndEvent","WebkitTransition","vendorProperties","transitionDelay","_transn","ingProperties","clean","onEnd","css","elemStyle","getPosition","isOriginLeft","isOriginTop","xValue","yValue","layoutSize","layoutPosition","xPadding","xProperty","xResetProperty","getXValue","yPadding","yProperty","yResetProperty","getYValue","isHorizontal","percentPosition","_transitionTo","curX","curY","didNotMove","setPosition","isTransitioning","transX","transY","transitionStyle","getTranslate","to","onTransitionEnd","isCleaning","_nonTransition","_removeStyles","_transition","from","enableTransition","transitionProps","duration","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","dashedVendorProperties","target","propertyName","isEmptyObj","disableTransition","removeTransitionStyles","cleanStyle","cleanTransitionStyle","delay","removeElem","isHidden","getHideRevealTransitionEndProperty","onRevealTransitionEnd","styleProperty","optionStyle","onHideTransitionEnd","Masonry","fitWidth","measureColumns","colYs","cols","maxY","horizontalColIndex","getContainerWidth","columnWidth","firstItem","firstItemElem","containerWidth","gutter","excess","container","remainder","colSpan","min","colPosition","horizontalOrder","col","setHeight","setMax","_getTopColPosition","colGroup","_getTopColGroup","minimumY","groupCount","_getColGroupY","groupColYs","_getHorizontalColPosition","hasSize","stampSize","offset","firstX","lastX","firstCol","floor","lastCol","stampMaxY","_getContainerFitWidth","unusedCols","previousWidth","imagesLoaded","$","ImagesLoaded","onAlways","queryElem","elements","assign","getImages","jqDeferred","Deferred","check","bind","images","addElementImages","elementNodeTypes","nodeName","addImage","background","addElementBackgroundImages","childImgs","img","child","reURL","LoadingImage","Background","url","Image","exec","backgroundImage","addBackground","loadingImage","progressedCount","hasAnyBroken","complete","onProgress","image","progress","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","crossOrigin","src","currentSrc","onload","unbindEvents","onerror","makeJQueryPlugin","fn","promise","matchesMethod","ElemProto","Element","prefixes","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","key","o","defineProperty","enumerable","get","hasOwnProperty","grid"],"ignoreList":[],"sourceRoot":""}