{"version":3,"file":"masonry_init-Dbo-0CbW.js","sources":["../../../node_modules/get-size/get-size.js","../../../node_modules/outlayer/node_modules/ev-emitter/ev-emitter.js","../../../node_modules/desandro-matches-selector/matches-selector.js","../../../node_modules/fizzy-ui-utils/utils.js","../../../node_modules/outlayer/item.js","../../../node_modules/outlayer/outlayer.js","../../../node_modules/packery/js/rect.js","../../../node_modules/packery/js/packer.js","../../../node_modules/packery/js/item.js","../../../node_modules/packery/js/packery.js","../../../node_modules/ev-emitter/ev-emitter.js","../../../node_modules/imagesloaded/imagesloaded.js","../../../app/frontend/entrypoints/masonry_init.js"],"sourcesContent":["/*!\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 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 * 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 * 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 * 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 * Rect\n * low-level utility class for basic geometry\n */\n\n( function( window, factory ) {\n // universal module definition\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.Packery = window.Packery || {};\n window.Packery.Rect = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\n// -------------------------- Rect -------------------------- //\n\nfunction Rect( props ) {\n // extend properties from defaults\n for ( var prop in Rect.defaults ) {\n this[ prop ] = Rect.defaults[ prop ];\n }\n\n for ( prop in props ) {\n this[ prop ] = props[ prop ];\n }\n\n}\n\nRect.defaults = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n};\n\nvar proto = Rect.prototype;\n\n/**\n * Determines whether or not this rectangle wholly encloses another rectangle or point.\n * @param {Rect} rect\n * @returns {Boolean}\n**/\nproto.contains = function( rect ) {\n // points don't have width or height\n var otherWidth = rect.width || 0;\n var otherHeight = rect.height || 0;\n return this.x <= rect.x &&\n this.y <= rect.y &&\n this.x + this.width >= rect.x + otherWidth &&\n this.y + this.height >= rect.y + otherHeight;\n};\n\n/**\n * Determines whether or not the rectangle intersects with another.\n * @param {Rect} rect\n * @returns {Boolean}\n**/\nproto.overlaps = function( rect ) {\n var thisRight = this.x + this.width;\n var thisBottom = this.y + this.height;\n var rectRight = rect.x + rect.width;\n var rectBottom = rect.y + rect.height;\n\n // http://stackoverflow.com/a/306332\n return this.x < rectRight &&\n thisRight > rect.x &&\n this.y < rectBottom &&\n thisBottom > rect.y;\n};\n\n/**\n * @param {Rect} rect - the overlapping rect\n * @returns {Array} freeRects - rects representing the area around the rect\n**/\nproto.getMaximalFreeRects = function( rect ) {\n\n // if no intersection, return false\n if ( !this.overlaps( rect ) ) {\n return false;\n }\n\n var freeRects = [];\n var freeRect;\n\n var thisRight = this.x + this.width;\n var thisBottom = this.y + this.height;\n var rectRight = rect.x + rect.width;\n var rectBottom = rect.y + rect.height;\n\n // top\n if ( this.y < rect.y ) {\n freeRect = new Rect({\n x: this.x,\n y: this.y,\n width: this.width,\n height: rect.y - this.y\n });\n freeRects.push( freeRect );\n }\n\n // right\n if ( thisRight > rectRight ) {\n freeRect = new Rect({\n x: rectRight,\n y: this.y,\n width: thisRight - rectRight,\n height: this.height\n });\n freeRects.push( freeRect );\n }\n\n // bottom\n if ( thisBottom > rectBottom ) {\n freeRect = new Rect({\n x: this.x,\n y: rectBottom,\n width: this.width,\n height: thisBottom - rectBottom\n });\n freeRects.push( freeRect );\n }\n\n // left\n if ( this.x < rect.x ) {\n freeRect = new Rect({\n x: this.x,\n y: this.y,\n width: rect.x - this.x,\n height: this.height\n });\n freeRects.push( freeRect );\n }\n\n return freeRects;\n};\n\nproto.canFit = function( rect ) {\n return this.width >= rect.width && this.height >= rect.height;\n};\n\nreturn Rect;\n\n}));\n","/**\n * Packer\n * bin-packing algorithm\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( [ './rect' ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./rect')\n );\n } else {\n // browser global\n var Packery = window.Packery = window.Packery || {};\n Packery.Packer = factory( Packery.Rect );\n }\n\n}( window, function factory( Rect ) {\n'use strict';\n\n// -------------------------- Packer -------------------------- //\n\n/**\n * @param {Number} width\n * @param {Number} height\n * @param {String} sortDirection\n * topLeft for vertical, leftTop for horizontal\n */\nfunction Packer( width, height, sortDirection ) {\n this.width = width || 0;\n this.height = height || 0;\n this.sortDirection = sortDirection || 'downwardLeftToRight';\n\n this.reset();\n}\n\nvar proto = Packer.prototype;\n\nproto.reset = function() {\n this.spaces = [];\n\n var initialSpace = new Rect({\n x: 0,\n y: 0,\n width: this.width,\n height: this.height\n });\n\n this.spaces.push( initialSpace );\n // set sorter\n this.sorter = sorters[ this.sortDirection ] || sorters.downwardLeftToRight;\n};\n\n// change x and y of rect to fit with in Packer's available spaces\nproto.pack = function( rect ) {\n for ( var i=0; i < this.spaces.length; i++ ) {\n var space = this.spaces[i];\n if ( space.canFit( rect ) ) {\n this.placeInSpace( rect, space );\n break;\n }\n }\n};\n\nproto.columnPack = function( rect ) {\n for ( var i=0; i < this.spaces.length; i++ ) {\n var space = this.spaces[i];\n var canFitInSpaceColumn = space.x <= rect.x &&\n space.x + space.width >= rect.x + rect.width &&\n space.height >= rect.height - 0.01; // fudge number for rounding error\n if ( canFitInSpaceColumn ) {\n rect.y = space.y;\n this.placed( rect );\n break;\n }\n }\n};\n\nproto.rowPack = function( rect ) {\n for ( var i=0; i < this.spaces.length; i++ ) {\n var space = this.spaces[i];\n var canFitInSpaceRow = space.y <= rect.y &&\n space.y + space.height >= rect.y + rect.height &&\n space.width >= rect.width - 0.01; // fudge number for rounding error\n if ( canFitInSpaceRow ) {\n rect.x = space.x;\n this.placed( rect );\n break;\n }\n }\n};\n\nproto.placeInSpace = function( rect, space ) {\n // place rect in space\n rect.x = space.x;\n rect.y = space.y;\n\n this.placed( rect );\n};\n\n// update spaces with placed rect\nproto.placed = function( rect ) {\n // update spaces\n var revisedSpaces = [];\n for ( var i=0; i < this.spaces.length; i++ ) {\n var space = this.spaces[i];\n var newSpaces = space.getMaximalFreeRects( rect );\n // add either the original space or the new spaces to the revised spaces\n if ( newSpaces ) {\n revisedSpaces.push.apply( revisedSpaces, newSpaces );\n } else {\n revisedSpaces.push( space );\n }\n }\n\n this.spaces = revisedSpaces;\n\n this.mergeSortSpaces();\n};\n\nproto.mergeSortSpaces = function() {\n // remove redundant spaces\n Packer.mergeRects( this.spaces );\n this.spaces.sort( this.sorter );\n};\n\n// add a space back\nproto.addSpace = function( rect ) {\n this.spaces.push( rect );\n this.mergeSortSpaces();\n};\n\n// -------------------------- utility functions -------------------------- //\n\n/**\n * Remove redundant rectangle from array of rectangles\n * @param {Array} rects: an array of Rects\n * @returns {Array} rects: an array of Rects\n**/\nPacker.mergeRects = function( rects ) {\n var i = 0;\n var rect = rects[i];\n\n rectLoop:\n while ( rect ) {\n var j = 0;\n var compareRect = rects[ i + j ];\n\n while ( compareRect ) {\n if ( compareRect == rect ) {\n j++; // next\n } else if ( compareRect.contains( rect ) ) {\n // remove rect\n rects.splice( i, 1 );\n rect = rects[i]; // set next rect\n continue rectLoop; // bail on compareLoop\n } else if ( rect.contains( compareRect ) ) {\n // remove compareRect\n rects.splice( i + j, 1 );\n } else {\n j++;\n }\n compareRect = rects[ i + j ]; // set next compareRect\n }\n i++;\n rect = rects[i];\n }\n\n return rects;\n};\n\n\n// -------------------------- sorters -------------------------- //\n\n// functions for sorting rects in order\nvar sorters = {\n // top down, then left to right\n downwardLeftToRight: function( a, b ) {\n return a.y - b.y || a.x - b.x;\n },\n // left to right, then top down\n rightwardTopToBottom: function( a, b ) {\n return a.x - b.x || a.y - b.y;\n }\n};\n\n\n// -------------------------- -------------------------- //\n\nreturn Packer;\n\n}));\n","/**\n * Packery Item Element\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 './rect'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('./rect')\n );\n } else {\n // browser global\n window.Packery.Item = factory(\n window.Outlayer,\n window.Packery.Rect\n );\n }\n\n}( window, function factory( Outlayer, Rect ) {\n'use strict';\n\n// -------------------------- Item -------------------------- //\n\nvar docElemStyle = document.documentElement.style;\n\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\n// sub-class Item\nvar Item = function PackeryItem() {\n Outlayer.Item.apply( this, arguments );\n};\n\nvar proto = Item.prototype = Object.create( Outlayer.Item.prototype );\n\nvar __create = proto._create;\nproto._create = function() {\n // call default _create logic\n __create.call( this );\n this.rect = new Rect();\n};\n\nvar _moveTo = proto.moveTo;\nproto.moveTo = function( x, y ) {\n // don't shift 1px while dragging\n var dx = Math.abs( this.position.x - x );\n var dy = Math.abs( this.position.y - y );\n\n var canHackGoTo = this.layout.dragItemCount && !this.isPlacing &&\n !this.isTransitioning && dx < 1 && dy < 1;\n if ( canHackGoTo ) {\n this.goTo( x, y );\n return;\n }\n _moveTo.apply( this, arguments );\n};\n\n// -------------------------- placing -------------------------- //\n\nproto.enablePlacing = function() {\n this.removeTransitionStyles();\n // remove transform property from transition\n if ( this.isTransitioning && transformProperty ) {\n this.element.style[ transformProperty ] = 'none';\n }\n this.isTransitioning = false;\n this.getSize();\n this.layout._setRectSize( this.element, this.rect );\n this.isPlacing = true;\n};\n\nproto.disablePlacing = function() {\n this.isPlacing = false;\n};\n\n// ----- ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n var parent = this.element.parentNode;\n if ( parent ) {\n parent.removeChild( this.element );\n }\n // add space back to packer\n this.layout.packer.addSpace( this.rect );\n this.emitEvent( 'remove', [ this ] );\n};\n\n// ----- dropPlaceholder ----- //\n\nproto.showDropPlaceholder = function() {\n var dropPlaceholder = this.dropPlaceholder;\n if ( !dropPlaceholder ) {\n // create dropPlaceholder\n dropPlaceholder = this.dropPlaceholder = document.createElement('div');\n dropPlaceholder.className = 'packery-drop-placeholder';\n dropPlaceholder.style.position = 'absolute';\n }\n\n dropPlaceholder.style.width = this.size.width + 'px';\n dropPlaceholder.style.height = this.size.height + 'px';\n this.positionDropPlaceholder();\n this.layout.element.appendChild( dropPlaceholder );\n};\n\nproto.positionDropPlaceholder = function() {\n this.dropPlaceholder.style[ transformProperty ] = 'translate(' +\n this.rect.x + 'px, ' + this.rect.y + 'px)';\n};\n\nproto.hideDropPlaceholder = function() {\n // only remove once, #333\n var parent = this.dropPlaceholder.parentNode;\n if ( parent ) {\n parent.removeChild( this.dropPlaceholder );\n }\n};\n\n// ----- ----- //\n\nreturn Item;\n\n}));\n","/*!\n * Packery v2.1.2\n * Gapless, draggable grid layouts\n *\n * Licensed GPLv3 for open source use\n * or Packery Commercial License for commercial use\n *\n * http://packery.metafizzy.co\n * Copyright 2013-2018 Metafizzy\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 'get-size/get-size',\n 'outlayer/outlayer',\n './rect',\n './packer',\n './item'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('get-size'),\n require('outlayer'),\n require('./rect'),\n require('./packer'),\n require('./item')\n );\n } else {\n // browser global\n window.Packery = factory(\n window.getSize,\n window.Outlayer,\n window.Packery.Rect,\n window.Packery.Packer,\n window.Packery.Item\n );\n }\n\n}( window, function factory( getSize, Outlayer, Rect, Packer, Item ) {\n'use strict';\n\n// ----- Rect ----- //\n\n// allow for pixel rounding errors IE8-IE11 & Firefox; #227\nRect.prototype.canFit = function( rect ) {\n return this.width >= rect.width - 1 && this.height >= rect.height - 1;\n};\n\n// -------------------------- Packery -------------------------- //\n\n// create an Outlayer layout class\nvar Packery = Outlayer.create('packery');\nPackery.Item = Item;\n\nvar proto = Packery.prototype;\n\nproto._create = function() {\n // call super\n Outlayer.prototype._create.call( this );\n\n // initial properties\n this.packer = new Packer();\n // packer for drop targets\n this.shiftPacker = new Packer();\n this.isEnabled = true;\n\n this.dragItemCount = 0;\n\n // create drag handlers\n var _this = this;\n this.handleDraggabilly = {\n dragStart: function() {\n _this.itemDragStart( this.element );\n },\n dragMove: function() {\n _this.itemDragMove( this.element, this.position.x, this.position.y );\n },\n dragEnd: function() {\n _this.itemDragEnd( this.element );\n }\n };\n\n this.handleUIDraggable = {\n start: function handleUIDraggableStart( event, ui ) {\n // HTML5 may trigger dragstart, dismiss HTML5 dragging\n if ( !ui ) {\n return;\n }\n _this.itemDragStart( event.currentTarget );\n },\n drag: function handleUIDraggableDrag( event, ui ) {\n if ( !ui ) {\n return;\n }\n _this.itemDragMove( event.currentTarget, ui.position.left, ui.position.top );\n },\n stop: function handleUIDraggableStop( event, ui ) {\n if ( !ui ) {\n return;\n }\n _this.itemDragEnd( event.currentTarget );\n }\n };\n\n};\n\n\n// ----- init & layout ----- //\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n\n this._getMeasurements();\n\n // reset packer\n var width, height, sortDirection;\n // packer settings, if horizontal or vertical\n if ( this._getOption('horizontal') ) {\n width = Infinity;\n height = this.size.innerHeight + this.gutter;\n sortDirection = 'rightwardTopToBottom';\n } else {\n width = this.size.innerWidth + this.gutter;\n height = Infinity;\n sortDirection = 'downwardLeftToRight';\n }\n\n this.packer.width = this.shiftPacker.width = width;\n this.packer.height = this.shiftPacker.height = height;\n this.packer.sortDirection = this.shiftPacker.sortDirection = sortDirection;\n\n this.packer.reset();\n\n // layout\n this.maxY = 0;\n this.maxX = 0;\n};\n\n/**\n * update columnWidth, rowHeight, & gutter\n * @private\n */\nproto._getMeasurements = function() {\n this._getMeasurement( 'columnWidth', 'width' );\n this._getMeasurement( 'rowHeight', 'height' );\n this._getMeasurement( 'gutter', 'width' );\n};\n\nproto._getItemLayoutPosition = function( item ) {\n this._setRectSize( item.element, item.rect );\n if ( this.isShifting || this.dragItemCount > 0 ) {\n var packMethod = this._getPackMethod();\n this.packer[ packMethod ]( item.rect );\n } else {\n this.packer.pack( item.rect );\n }\n\n this._setMaxXY( item.rect );\n return item.rect;\n};\n\nproto.shiftLayout = function() {\n this.isShifting = true;\n this.layout();\n delete this.isShifting;\n};\n\nproto._getPackMethod = function() {\n return this._getOption('horizontal') ? 'rowPack' : 'columnPack';\n};\n\n\n/**\n * set max X and Y value, for size of container\n * @param {Packery.Rect} rect\n * @private\n */\nproto._setMaxXY = function( rect ) {\n this.maxX = Math.max( rect.x + rect.width, this.maxX );\n this.maxY = Math.max( rect.y + rect.height, this.maxY );\n};\n\n/**\n * set the width and height of a rect, applying columnWidth and rowHeight\n * @param {Element} elem\n * @param {Packery.Rect} rect\n */\nproto._setRectSize = function( elem, rect ) {\n var size = getSize( elem );\n var w = size.outerWidth;\n var h = size.outerHeight;\n // size for columnWidth and rowHeight, if available\n // only check if size is non-zero, #177\n if ( w || h ) {\n w = this._applyGridGutter( w, this.columnWidth );\n h = this._applyGridGutter( h, this.rowHeight );\n }\n // rect must fit in packer\n rect.width = Math.min( w, this.packer.width );\n rect.height = Math.min( h, this.packer.height );\n};\n\n/**\n * fits item to columnWidth/rowHeight and adds gutter\n * @param {Number} measurement - item width or height\n * @param {Number} gridSize - columnWidth or rowHeight\n * @returns measurement\n */\nproto._applyGridGutter = function( measurement, gridSize ) {\n // just add gutter if no gridSize\n if ( !gridSize ) {\n return measurement + this.gutter;\n }\n gridSize += this.gutter;\n // fit item to columnWidth/rowHeight\n var remainder = measurement % gridSize;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n measurement = Math[ mathMethod ]( measurement / gridSize ) * gridSize;\n return measurement;\n};\n\nproto._getContainerSize = function() {\n if ( this._getOption('horizontal') ) {\n return {\n width: this.maxX - this.gutter\n };\n } else {\n return {\n height: this.maxY - this.gutter\n };\n }\n};\n\n\n// -------------------------- stamp -------------------------- //\n\n/**\n * makes space for element\n * @param {Element} elem\n */\nproto._manageStamp = function( elem ) {\n\n var item = this.getItem( elem );\n var rect;\n if ( item && item.isPlacing ) {\n rect = item.rect;\n } else {\n var offset = this._getElementOffset( elem );\n rect = new Rect({\n x: this._getOption('originLeft') ? offset.left : offset.right,\n y: this._getOption('originTop') ? offset.top : offset.bottom\n });\n }\n\n this._setRectSize( elem, rect );\n // save its space in the packer\n this.packer.placed( rect );\n this._setMaxXY( rect );\n};\n\n// -------------------------- methods -------------------------- //\n\nfunction verticalSorter( a, b ) {\n return a.position.y - b.position.y || a.position.x - b.position.x;\n}\n\nfunction horizontalSorter( a, b ) {\n return a.position.x - b.position.x || a.position.y - b.position.y;\n}\n\nproto.sortItemsByPosition = function() {\n var sorter = this._getOption('horizontal') ? horizontalSorter : verticalSorter;\n this.items.sort( sorter );\n};\n\n/**\n * Fit item element in its current position\n * Packery will position elements around it\n * useful for expanding elements\n *\n * @param {Element} elem\n * @param {Number} x - horizontal destination position, optional\n * @param {Number} y - vertical destination position, optional\n */\nproto.fit = function( elem, x, y ) {\n var item = this.getItem( elem );\n if ( !item ) {\n return;\n }\n\n // stamp item to get it out of layout\n this.stamp( item.element );\n // set placing flag\n item.enablePlacing();\n this.updateShiftTargets( item );\n // fall back to current position for fitting\n x = x === undefined ? item.rect.x: x;\n y = y === undefined ? item.rect.y: y;\n // position it best at its destination\n this.shift( item, x, y );\n this._bindFitEvents( item );\n item.moveTo( item.rect.x, item.rect.y );\n // layout everything else\n this.shiftLayout();\n // return back to regularly scheduled programming\n this.unstamp( item.element );\n this.sortItemsByPosition();\n item.disablePlacing();\n};\n\n/**\n * emit event when item is fit and other items are laid out\n * @param {Packery.Item} item\n * @private\n */\nproto._bindFitEvents = function( item ) {\n var _this = this;\n var ticks = 0;\n function onLayout() {\n ticks++;\n if ( ticks != 2 ) {\n return;\n }\n _this.dispatchEvent( 'fitComplete', null, [ item ] );\n }\n // when item is laid out\n item.once( 'layout', onLayout );\n // when all items are laid out\n this.once( 'layoutComplete', onLayout );\n};\n\n// -------------------------- resize -------------------------- //\n\n// debounced, layout on resize\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #285, outlayer#9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n if ( this.options.shiftPercentResize ) {\n this.resizeShiftPercentLayout();\n } else {\n this.layout();\n }\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 var innerSize = this._getOption('horizontal') ? 'innerHeight' : 'innerWidth';\n return size[ innerSize ] != this.size[ innerSize ];\n};\n\nproto.resizeShiftPercentLayout = function() {\n var items = this._getItemsForLayout( this.items );\n\n var isHorizontal = this._getOption('horizontal');\n var coord = isHorizontal ? 'y' : 'x';\n var measure = isHorizontal ? 'height' : 'width';\n var segmentName = isHorizontal ? 'rowHeight' : 'columnWidth';\n var innerSize = isHorizontal ? 'innerHeight' : 'innerWidth';\n\n // proportional re-align items\n var previousSegment = this[ segmentName ];\n previousSegment = previousSegment && previousSegment + this.gutter;\n\n if ( previousSegment ) {\n this._getMeasurements();\n var currentSegment = this[ segmentName ] + this.gutter;\n items.forEach( function( item ) {\n var seg = Math.round( item.rect[ coord ] / previousSegment );\n item.rect[ coord ] = seg * currentSegment;\n });\n } else {\n var currentSize = getSize( this.element )[ innerSize ] + this.gutter;\n var previousSize = this.packer[ measure ];\n items.forEach( function( item ) {\n item.rect[ coord ] = ( item.rect[ coord ] / previousSize ) * currentSize;\n });\n }\n\n this.shiftLayout();\n};\n\n// -------------------------- drag -------------------------- //\n\n/**\n * handle an item drag start event\n * @param {Element} elem\n */\nproto.itemDragStart = function( elem ) {\n if ( !this.isEnabled ) {\n return;\n }\n this.stamp( elem );\n // this.ignore( elem );\n var item = this.getItem( elem );\n if ( !item ) {\n return;\n }\n\n item.enablePlacing();\n item.showDropPlaceholder();\n this.dragItemCount++;\n this.updateShiftTargets( item );\n};\n\nproto.updateShiftTargets = function( dropItem ) {\n this.shiftPacker.reset();\n\n // pack stamps\n this._getBoundingRect();\n var isOriginLeft = this._getOption('originLeft');\n var isOriginTop = this._getOption('originTop');\n this.stamps.forEach( function( stamp ) {\n // ignore dragged item\n var item = this.getItem( stamp );\n if ( item && item.isPlacing ) {\n return;\n }\n var offset = this._getElementOffset( stamp );\n var rect = new Rect({\n x: isOriginLeft ? offset.left : offset.right,\n y: isOriginTop ? offset.top : offset.bottom\n });\n this._setRectSize( stamp, rect );\n // save its space in the packer\n this.shiftPacker.placed( rect );\n }, this );\n\n // reset shiftTargets\n var isHorizontal = this._getOption('horizontal');\n var segmentName = isHorizontal ? 'rowHeight' : 'columnWidth';\n var measure = isHorizontal ? 'height' : 'width';\n\n this.shiftTargetKeys = [];\n this.shiftTargets = [];\n var boundsSize;\n var segment = this[ segmentName ];\n segment = segment && segment + this.gutter;\n\n if ( segment ) {\n var segmentSpan = Math.ceil( dropItem.rect[ measure ] / segment );\n var segs = Math.floor( ( this.shiftPacker[ measure ] + this.gutter ) / segment );\n boundsSize = ( segs - segmentSpan ) * segment;\n // add targets on top\n for ( var i=0; i < segs; i++ ) {\n var initialX = isHorizontal ? 0 : i * segment;\n var initialY = isHorizontal ? i * segment : 0;\n this._addShiftTarget( initialX, initialY, boundsSize );\n }\n } else {\n boundsSize = ( this.shiftPacker[ measure ] + this.gutter ) - dropItem.rect[ measure ];\n this._addShiftTarget( 0, 0, boundsSize );\n }\n\n // pack each item to measure where shiftTargets are\n var items = this._getItemsForLayout( this.items );\n var packMethod = this._getPackMethod();\n items.forEach( function( item ) {\n var rect = item.rect;\n this._setRectSize( item.element, rect );\n this.shiftPacker[ packMethod ]( rect );\n\n // add top left corner\n this._addShiftTarget( rect.x, rect.y, boundsSize );\n // add bottom left / top right corner\n var cornerX = isHorizontal ? rect.x + rect.width : rect.x;\n var cornerY = isHorizontal ? rect.y : rect.y + rect.height;\n this._addShiftTarget( cornerX, cornerY, boundsSize );\n\n if ( segment ) {\n // add targets for each column on bottom / row on right\n var segSpan = Math.round( rect[ measure ] / segment );\n for ( var i=1; i < segSpan; i++ ) {\n var segX = isHorizontal ? cornerX : rect.x + segment * i;\n var segY = isHorizontal ? rect.y + segment * i : cornerY;\n this._addShiftTarget( segX, segY, boundsSize );\n }\n }\n }, this );\n\n};\n\nproto._addShiftTarget = function( x, y, boundsSize ) {\n var checkCoord = this._getOption('horizontal') ? y : x;\n if ( checkCoord !== 0 && checkCoord > boundsSize ) {\n return;\n }\n // create string for a key, easier to keep track of what targets\n var key = x + ',' + y;\n var hasKey = this.shiftTargetKeys.indexOf( key ) != -1;\n if ( hasKey ) {\n return;\n }\n this.shiftTargetKeys.push( key );\n this.shiftTargets.push({ x: x, y: y });\n};\n\n// -------------------------- drop -------------------------- //\n\nproto.shift = function( item, x, y ) {\n var shiftPosition;\n var minDistance = Infinity;\n var position = { x: x, y: y };\n this.shiftTargets.forEach( function( target ) {\n var distance = getDistance( target, position );\n if ( distance < minDistance ) {\n shiftPosition = target;\n minDistance = distance;\n }\n });\n item.rect.x = shiftPosition.x;\n item.rect.y = shiftPosition.y;\n};\n\nfunction getDistance( a, b ) {\n var dx = b.x - a.x;\n var dy = b.y - a.y;\n return Math.sqrt( dx * dx + dy * dy );\n}\n\n// -------------------------- drag move -------------------------- //\n\nvar DRAG_THROTTLE_TIME = 120;\n\n/**\n * handle an item drag move event\n * @param {Element} elem\n * @param {Number} x - horizontal change in position\n * @param {Number} y - vertical change in position\n */\nproto.itemDragMove = function( elem, x, y ) {\n var item = this.isEnabled && this.getItem( elem );\n if ( !item ) {\n return;\n }\n\n x -= this.size.paddingLeft;\n y -= this.size.paddingTop;\n\n var _this = this;\n function onDrag() {\n _this.shift( item, x, y );\n item.positionDropPlaceholder();\n _this.layout();\n }\n\n // throttle\n var now = new Date();\n var isThrottled = this._itemDragTime && now - this._itemDragTime < DRAG_THROTTLE_TIME;\n if ( isThrottled ) {\n clearTimeout( this.dragTimeout );\n this.dragTimeout = setTimeout( onDrag, DRAG_THROTTLE_TIME );\n } else {\n onDrag();\n this._itemDragTime = now;\n }\n};\n\n// -------------------------- drag end -------------------------- //\n\n/**\n * handle an item drag end event\n * @param {Element} elem\n */\nproto.itemDragEnd = function( elem ) {\n var item = this.isEnabled && this.getItem( elem );\n if ( !item ) {\n return;\n }\n\n clearTimeout( this.dragTimeout );\n item.element.classList.add('is-positioning-post-drag');\n\n var completeCount = 0;\n var _this = this;\n function onDragEndLayoutComplete() {\n completeCount++;\n if ( completeCount != 2 ) {\n return;\n }\n // reset drag item\n item.element.classList.remove('is-positioning-post-drag');\n item.hideDropPlaceholder();\n _this.dispatchEvent( 'dragItemPositioned', null, [ item ] );\n }\n\n item.once( 'layout', onDragEndLayoutComplete );\n this.once( 'layoutComplete', onDragEndLayoutComplete );\n item.moveTo( item.rect.x, item.rect.y );\n this.layout();\n this.dragItemCount = Math.max( 0, this.dragItemCount - 1 );\n this.sortItemsByPosition();\n item.disablePlacing();\n this.unstamp( item.element );\n};\n\n/**\n * binds Draggabilly events\n * @param {Draggabilly} draggie\n */\nproto.bindDraggabillyEvents = function( draggie ) {\n this._bindDraggabillyEvents( draggie, 'on' );\n};\n\nproto.unbindDraggabillyEvents = function( draggie ) {\n this._bindDraggabillyEvents( draggie, 'off' );\n};\n\nproto._bindDraggabillyEvents = function( draggie, method ) {\n var handlers = this.handleDraggabilly;\n draggie[ method ]( 'dragStart', handlers.dragStart );\n draggie[ method ]( 'dragMove', handlers.dragMove );\n draggie[ method ]( 'dragEnd', handlers.dragEnd );\n};\n\n/**\n * binds jQuery UI Draggable events\n * @param {jQuery} $elems\n */\nproto.bindUIDraggableEvents = function( $elems ) {\n this._bindUIDraggableEvents( $elems, 'on' );\n};\n\nproto.unbindUIDraggableEvents = function( $elems ) {\n this._bindUIDraggableEvents( $elems, 'off' );\n};\n\nproto._bindUIDraggableEvents = function( $elems, method ) {\n var handlers = this.handleUIDraggable;\n $elems\n [ method ]( 'dragstart', handlers.start )\n [ method ]( 'drag', handlers.drag )\n [ method ]( 'dragstop', handlers.stop );\n};\n\n// ----- destroy ----- //\n\nvar _destroy = proto.destroy;\nproto.destroy = function() {\n _destroy.apply( this, arguments );\n // disable flag; prevent drag events from triggering. #72\n this.isEnabled = false;\n};\n\n// ----- ----- //\n\nPackery.Rect = Rect;\nPackery.Packer = Packer;\n\nreturn Packery;\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 * 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","import Packery from 'packery';\nimport imagesLoaded from 'imagesloaded';\n\nfunction initMasonry() {\n const grid = document.querySelector('.gallery_thumbs');\n if (!grid) return;\n\n const packery = new Packery(grid, {\n itemSelector: '.gallery_item',\n gutter: 10 ,\n percentPosition: true\n\n });\n window.packery = packery;\n\n imagesLoaded( grid ).on( 'progress', function() {\n // layout Masonry after each image loads\n packery.layout();\n });\n\n packery.remove_item = function(item_id) {\n const item = document.getElementById(\"item_\" + item_id);\n packery.remove(item);\n packery.layout();\n }\n}\n\naddEventListener(\"turbo:before-stream-render\", ((event) => {\n const fallbackToDefaultActions = event.detail.render\n\n event.detail.render = function (streamElement) {\n if (streamElement.action == \"destroy\") {\n console.log(\"Destroying item\", streamElement.dataset.itemId);\n const item_id = streamElement.dataset.itemId;\n packery.remove_item(item_id);\n } else {\n fallbackToDefaultActions(streamElement)\n }\n }\n}))\n\n\ndocument.addEventListener('DOMContentLoaded', initMasonry);\n"],"names":["window","factory","module","getStyleSize","value","num","isValid","noop","logError","message","measurements","measurementsLength","getZeroSize","size","i","measurement","getStyle","elem","style","isSetup","isBoxSizeOuter","setup","div","body","getSize","isBorderBox","paddingWidth","paddingHeight","marginWidth","marginHeight","borderWidth","borderHeight","isBorderBoxSizeOuter","styleWidth","styleHeight","global","this","EvEmitter","proto","eventName","listener","events","listeners","onceEvents","onceListeners","index","args","isOnce","matchesMethod","ElemProto","prefixes","prefix","method","selector","require$$0","matchesSelector","utils","a","b","prop","arraySlice","obj","isArrayLike","ary","event","elems","ffElems","childElems","_class","methodName","threshold","timeoutName","timeout","_this","callback","readyState","str","match","$1","$2","console","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","dataOptionsAttr","jQuery","attr","options","error","instance","require$$1","isEmptyObj","docElemStyle","transitionProperty","transformProperty","transitionEndEvent","vendorProperties","Item","element","layout","elemStyle","supportedProp","isOriginLeft","isOriginTop","xValue","yValue","x","y","layoutSize","xPadding","xProperty","xResetProperty","yPadding","yProperty","yResetProperty","isHorizontal","curX","curY","didNotMove","transX","transY","transitionStyle","_transition","toDashedAll","transitionProps","duration","dashedVendorProperties","propertyName","onTransitionEnd","cleanStyle","cleanTransitionStyle","delay","transitionEndProperty","styleProperty","optionStyle","require$$2","require$$3","GUID","instances","Outlayer","queryElement","id","isInitLayout","opts","option","oldOption","canBindResize","itemElems","items","item","layoutInstant","isInstant","queue","position","stagger","getMilliseconds","isResizingContainer","measure","isWidth","elemSize","onComplete","count","doneCount","tick","type","emitArgs","$event","boundingRect","thisRect","offset","hasSizes","previousItems","removeItems","Layout","subclass","Parent","SubClass","msUnits","time","matches","unit","mult","Rect","props","rect","otherWidth","otherHeight","thisRight","thisBottom","rectRight","rectBottom","freeRects","freeRect","Packery","Packer","width","height","sortDirection","initialSpace","sorters","space","canFitInSpaceColumn","canFitInSpaceRow","revisedSpaces","newSpaces","rects","rectLoop","j","compareRect","__create","_moveTo","dx","dy","canHackGoTo","parent","dropPlaceholder","require$$4","ui","packMethod","w","h","gridSize","remainder","mathMethod","verticalSorter","horizontalSorter","sorter","ticks","onLayout","innerSize","coord","segmentName","previousSegment","currentSegment","seg","currentSize","previousSize","dropItem","stamp","boundsSize","segment","segmentSpan","segs","initialX","initialY","cornerX","cornerY","segSpan","segX","segY","checkCoord","key","hasKey","shiftPosition","minDistance","target","distance","getDistance","DRAG_THROTTLE_TIME","onDrag","now","isThrottled","completeCount","onDragEndLayoutComplete","draggie","handlers","$elems","_destroy","$","makeArray","ImagesLoaded","onAlways","queryElem","elementNodeTypes","nodeType","childImgs","img","children","child","reURL","url","loadingImage","LoadingImage","background","Background","onProgress","image","jqMethod","isLoaded","parentNode","initMasonry","grid","packery","imagesLoaded","item_id","fallbackToDefaultActions","streamElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}