{"version":3,"sources":["fjGallery.js"],"names":["modules","installedModules","__webpack_require__","moduleId","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","global","win","window","self","_typeof","Symbol","iterator","obj","constructor","isNode","Public","clone","merge","arguments","merge_recursive","base","extend","typeOf","key","recursive","argv","result","size","length","index","item","sitem","input","toString","slice","toLowerCase","output","type","callback","document","readyState","attachEvent","addEventListener","_liteReady2","_interopRequireDefault","_global","_fjGallery2","default","oldPlugin","fjGallery","noConflict","this","jQuery","oldInit","init","jQcontainer","$container","data","oldDestroy","destroy","removeData","jQueryPlugin","args","Array","unshift","res","apply","oldJqPlugin","fn","querySelectorAll","g","Function","eval","e","value","_createClass","defineProperties","target","props","descriptor","writable","Constructor","protoProps","staticProps","_throttle2","_merge2","_rafl2","_justifiedLayout2","fjGalleryList","updateFjGallery","forEach","resize","instanceID","container","userOptions","instance","TypeError","_classCallCheck","images","defaults","itemSelector","imageSelector","gutter","rowHeight","rowHeightTolerance","resizeThrottle","onInit","onDestroy","onAppendImages","onBeforeJustify","onJustify","dataOptions","dataset","pureDataOptions","keys","loweCaseOption","substr","options","pureOptions","el","styles","getComputedStyle","getPropertyValue","transform","style","push","splice","appendImages","addToFjGalleryList","$images","$item","fjGalleryImage","querySelector","$image","width","parseFloat","getAttribute","height","loadSizes","img","cb","interval","hasSize","addedListeners","onHasSize","onLoaded","onError","checkSize","removeListeners","itemData","dimensions","naturalWidth","naturalHeight","clearInterval","removeEventListener","setInterval","justify","justifyArray","justifiedData","containerWidth","getBoundingClientRect","containerPadding","top","css","right","bottom","left","boxSpacing","targetRowHeight","targetRowHeightTolerance","containerHeight","position","boxes","removeFromFjGalleryList","val","plugin","items","HTMLElement","nodeType","nodeName","len","k","ret","delay","noTrailing","debounceMode","timeoutID","lastExec","undefined","elapsed","Number","Date","exec","clearTimeout","setTimeout","webpackPolyfill","deprecate","paths","children","request","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","curr","ms","Math","max","prev","req","cancel","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","bind","Row","createNewRow","layoutConfig","layoutData","isBreakoutRow","fullWidthBreakoutRowCadence","_rows","_containerHeight","spacing","horizontal","edgeCaseMinRowHeight","edgeCaseMaxRowHeight","rightToLeft","widowLayoutStyle","addRow","row","_layoutItems","concat","getItems","vertical","config","itemLayoutData","itemAdded","currentRow","nextToLastRowHeight","laidOutItems","maxNumRows","POSITIVE_INFINITY","forceAspectRatio","showWidows","isNaN","_awakeItems","_inViewportItems","_leadingOrphans","_trailingOrphans","_orphans","_widowCount","map","aspectRatio","forcedAspectRatio","some","Error","addItem","isLayoutComplete","forceComplete","widowCount","params","minAspectRatio","maxAspectRatio","previousRowWidthWithoutSpacing","previousAspectRatio","previousTargetAspectRatio","newItems","rowWidthWithoutSpacing","newAspectRatio","reduce","sum","targetAspectRatio","completeLayout","abs","newHeight","clampedToNativeRatio","clampedHeight","errorWidthPerItem","roundedCumulativeErrors","centerOffset","itemWidthSum","indexOf","min","round","fitToWidth"],"mappings":"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","file":"fjGallery.min.js","sourcesContent":["/*!\n * Name : Flickr's Justified Gallery [fjGallery]\n * Version : 1.0.2\n * Author : nK \n * GitHub : https://github.com/nk-o/flickr-justified-gallery\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nvar win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\") {\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\r\n * @name JavaScript/NodeJS Merge v1.2.0\r\n * @author yeikos\r\n * @repository https://github.com/yeikos/js.merge\r\n\r\n * Copyright 2014 yeikos - MIT license\r\n * https://raw.github.com/yeikos/js.merge/master/LICENSE\r\n */\n\n;(function (isNode) {\n\n\t/**\r\n * Merge one or more objects \r\n * @param bool? clone\r\n * @param mixed,... arguments\r\n * @return object\r\n */\n\n\tvar Public = function Public(clone) {\n\n\t\treturn merge(clone === true, false, arguments);\n\t},\n\t publicName = 'merge';\n\n\t/**\r\n * Merge two or more objects recursively \r\n * @param bool? clone\r\n * @param mixed,... arguments\r\n * @return object\r\n */\n\n\tPublic.recursive = function (clone) {\n\n\t\treturn merge(clone === true, true, arguments);\n\t};\n\n\t/**\r\n * Clone the input removing any reference\r\n * @param mixed input\r\n * @return mixed\r\n */\n\n\tPublic.clone = function (input) {\n\n\t\tvar output = input,\n\t\t type = typeOf(input),\n\t\t index,\n\t\t size;\n\n\t\tif (type === 'array') {\n\n\t\t\toutput = [];\n\t\t\tsize = input.length;\n\n\t\t\tfor (index = 0; index < size; ++index) {\n\n\t\t\t\toutput[index] = Public.clone(input[index]);\n\t\t\t}\n\t\t} else if (type === 'object') {\n\n\t\t\toutput = {};\n\n\t\t\tfor (index in input) {\n\n\t\t\t\toutput[index] = Public.clone(input[index]);\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t};\n\n\t/**\r\n * Merge two objects recursively\r\n * @param mixed input\r\n * @param mixed extend\r\n * @return mixed\r\n */\n\n\tfunction merge_recursive(base, extend) {\n\n\t\tif (typeOf(base) !== 'object') return extend;\n\n\t\tfor (var key in extend) {\n\n\t\t\tif (typeOf(base[key]) === 'object' && typeOf(extend[key]) === 'object') {\n\n\t\t\t\tbase[key] = merge_recursive(base[key], extend[key]);\n\t\t\t} else {\n\n\t\t\t\tbase[key] = extend[key];\n\t\t\t}\n\t\t}\n\n\t\treturn base;\n\t}\n\n\t/**\r\n * Merge two or more objects\r\n * @param bool clone\r\n * @param bool recursive\r\n * @param array argv\r\n * @return object\r\n */\n\n\tfunction merge(clone, recursive, argv) {\n\n\t\tvar result = argv[0],\n\t\t size = argv.length;\n\n\t\tif (clone || typeOf(result) !== 'object') result = {};\n\n\t\tfor (var index = 0; index < size; ++index) {\n\n\t\t\tvar item = argv[index],\n\t\t\t type = typeOf(item);\n\n\t\t\tif (type !== 'object') continue;\n\n\t\t\tfor (var key in item) {\n\n\t\t\t\tvar sitem = clone ? Public.clone(item[key]) : item[key];\n\n\t\t\t\tif (recursive) {\n\n\t\t\t\t\tresult[key] = merge_recursive(result[key], sitem);\n\t\t\t\t} else {\n\n\t\t\t\t\tresult[key] = sitem;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\r\n * Get type of variable\r\n * @param mixed input\r\n * @return string\r\n *\r\n * @see http://jsperf.com/typeofvar\r\n */\n\n\tfunction typeOf(input) {\n\n\t\treturn {}.toString.call(input).slice(8, -1).toLowerCase();\n\t}\n\n\tif (isNode) {\n\n\t\tmodule.exports = Public;\n\t} else {\n\n\t\twindow[publicName] = Public;\n\t}\n})(( false ? 'undefined' : _typeof(module)) === 'object' && module && _typeof(module.exports) === 'object' && module.exports);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8)(module)))\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (callback) {\n\n\tif (document.readyState === 'complete' || document.readyState === 'interactive') {\n\t\t// Already ready or interactive, execute callback\n\t\tcallback.call();\n\t} else if (document.attachEvent) {\n\t\t// Old browsers\n\t\tdocument.attachEvent('onreadystatechange', function () {\n\t\t\tif (document.readyState === 'interactive') callback.call();\n\t\t});\n\t} else if (document.addEventListener) {\n\t\t// Modern browsers\n\t\tdocument.addEventListener('DOMContentLoaded', callback);\n\t}\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(4);\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _liteReady = __webpack_require__(2);\n\nvar _liteReady2 = _interopRequireDefault(_liteReady);\n\nvar _global = __webpack_require__(0);\n\nvar _fjGallery = __webpack_require__(6);\n\nvar _fjGallery2 = _interopRequireDefault(_fjGallery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// no conflict\nvar oldPlugin = _global.window.fjGallery;\n_global.window.fjGallery = _fjGallery2.default;\n_global.window.fjGallery.noConflict = function () {\n _global.window.fjGallery = oldPlugin;\n return this;\n};\n\n// jQuery support\nif (typeof _global.jQuery !== 'undefined') {\n // add data to jQuery .data('fjGallery')\n var oldInit = _global.window.fjGallery.constructor.prototype.init;\n _global.window.fjGallery.constructor.prototype.init = function () {\n this.jQcontainer = (0, _global.jQuery)(this.$container);\n this.jQcontainer.data('fjGallery', this);\n if (oldInit) {\n oldInit.call(this);\n }\n };\n\n // remove data from jQuery .data('fjGallery')\n var oldDestroy = _global.window.fjGallery.constructor.prototype.destroy;\n _global.window.fjGallery.constructor.prototype.destroy = function () {\n if (this.jQcontainer) {\n this.jQcontainer.removeData('fjGallery');\n }\n if (oldDestroy) {\n oldDestroy.call(this);\n }\n };\n\n var jQueryPlugin = function jQueryPlugin() {\n var args = arguments || [];\n Array.prototype.unshift.call(args, this);\n var res = _fjGallery2.default.apply(_global.window, args);\n return (typeof res === 'undefined' ? 'undefined' : _typeof(res)) !== 'object' ? res : this;\n };\n jQueryPlugin.constructor = _fjGallery2.default.constructor;\n\n // no conflict\n var oldJqPlugin = _global.jQuery.fn.fjGallery;\n _global.jQuery.fn.fjGallery = jQueryPlugin;\n _global.jQuery.fn.fjGallery.noConflict = function () {\n _global.jQuery.fn.fjGallery = oldJqPlugin;\n return this;\n };\n}\n\n// .fj-gallery initialization\n(0, _liteReady2.default)(function () {\n (0, _fjGallery2.default)(document.querySelectorAll('.fj-gallery'));\n});\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar g;\n\n// This works in non-strict mode\ng = function () {\n\treturn this;\n}();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _throttle = __webpack_require__(7);\n\nvar _throttle2 = _interopRequireDefault(_throttle);\n\nvar _merge = __webpack_require__(1);\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _liteReady = __webpack_require__(2);\n\nvar _liteReady2 = _interopRequireDefault(_liteReady);\n\nvar _rafl = __webpack_require__(9);\n\nvar _rafl2 = _interopRequireDefault(_rafl);\n\nvar _justifiedLayout = __webpack_require__(10);\n\nvar _justifiedLayout2 = _interopRequireDefault(_justifiedLayout);\n\nvar _global = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// list with all fjGallery instances\n// need to render all in one scroll/resize event\nvar fjGalleryList = [];\n\nfunction updateFjGallery() {\n (0, _rafl2.default)(function () {\n fjGalleryList.forEach(function (item) {\n item.resize();\n });\n });\n}\n\n_global.window.addEventListener('resize', updateFjGallery);\n_global.window.addEventListener('orientationchange', updateFjGallery);\n_global.window.addEventListener('load', updateFjGallery);\n(0, _liteReady2.default)(function () {\n updateFjGallery();\n});\n\n// get image dimensions\n// thanks https://gist.github.com/dimsemenov/5382856\nfunction getImgDemensions(img, cb) {\n var interval = void 0;\n var hasSize = false;\n var addedListeners = false;\n\n var onHasSize = function onHasSize() {\n if (hasSize) {\n cb(hasSize);\n return;\n }\n\n hasSize = {\n width: img.naturalWidth,\n height: img.naturalHeight\n };\n cb(hasSize);\n\n clearInterval(interval);\n if (addedListeners) {\n // eslint-disable-next-line no-use-before-define\n removeListeners();\n }\n };\n var onLoaded = function onLoaded() {\n onHasSize();\n };\n var onError = function onError() {\n onHasSize();\n };\n var checkSize = function checkSize() {\n if (img.naturalWidth > 0) {\n onHasSize();\n }\n };\n var addListeners = function addListeners() {\n addedListeners = true;\n img.addEventListener('load', onLoaded);\n img.addEventListener('error', onError);\n };\n var removeListeners = function removeListeners() {\n addedListeners = false;\n img.removeEventListener('load', onLoaded);\n img.removeEventListener('error', onError);\n };\n\n checkSize();\n\n if (!hasSize) {\n addListeners();\n interval = setInterval(checkSize, 100);\n }\n}\n\nvar instanceID = 0;\n\n// fjGallery class\n\nvar fjGallery = function () {\n function fjGallery(container, userOptions) {\n _classCallCheck(this, fjGallery);\n\n var self = this;\n\n self.instanceID = instanceID++;\n\n self.$container = container;\n\n self.images = [];\n\n self.defaults = {\n itemSelector: '.fj-gallery-item',\n imageSelector: 'img',\n gutter: 10, // supports object like `{ horizontal: 10, vertical: 10 }`.\n rowHeight: 320,\n rowHeightTolerance: 0.25, // [0, 1]\n resizeThrottle: 200,\n\n // events\n onInit: null, // function() {}\n onDestroy: null, // function() {}\n onAppendImages: null, // function() {}\n onBeforeJustify: null, // function() {}\n onJustify: null // function() {}\n };\n\n // prepare data-options\n var dataOptions = self.$container.dataset || {};\n var pureDataOptions = {};\n Object.keys(dataOptions).forEach(function (key) {\n var loweCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1);\n if (loweCaseOption && typeof self.defaults[loweCaseOption] !== 'undefined') {\n pureDataOptions[loweCaseOption] = dataOptions[key];\n }\n });\n\n self.options = (0, _merge2.default)({}, self.defaults, pureDataOptions, userOptions);\n self.pureOptions = (0, _merge2.default)({}, self.options);\n\n // throttle for resize\n self.resize = (0, _throttle2.default)(self.options.resizeThrottle, self.resize);\n\n self.init();\n }\n\n // add styles to element\n\n\n _createClass(fjGallery, [{\n key: 'css',\n value: function css(el, styles) {\n if (typeof styles === 'string') {\n return _global.window.getComputedStyle(el).getPropertyValue(styles);\n }\n\n // add transform property with vendor prefix\n if (styles.transform) {\n styles['-webkit-transform'] = styles.transform;\n }\n\n Object.keys(styles).forEach(function (key) {\n el.style[key] = styles[key];\n });\n return el;\n }\n\n // add to fjGallery instances list\n\n }, {\n key: 'addToFjGalleryList',\n value: function addToFjGalleryList() {\n fjGalleryList.push(this);\n updateFjGallery();\n }\n\n // remove from fjGallery instances list\n\n }, {\n key: 'removeFromFjGalleryList',\n value: function removeFromFjGalleryList() {\n var self = this;\n\n fjGalleryList.forEach(function (item, key) {\n if (item.instanceID === self.instanceID) {\n fjGalleryList.splice(key, 1);\n }\n });\n }\n }, {\n key: 'init',\n value: function init() {\n var self = this;\n\n self.appendImages(self.$container.querySelectorAll(self.options.itemSelector));\n\n self.addToFjGalleryList();\n\n // call onInit event\n if (self.options.onInit) {\n self.options.onInit.call(self);\n }\n }\n\n // append images\n\n }, {\n key: 'appendImages',\n value: function appendImages($images) {\n var self = this;\n\n // check if jQuery\n if (_global.window.jQuery && $images instanceof _global.window.jQuery) {\n $images = $images.get();\n }\n\n if (!$images || !$images.length) {\n return;\n }\n\n $images.forEach(function ($item) {\n // if $images is jQuery, for some reason in this array there is undefined item, that not a DOM,\n // so we need to check for $item.querySelector.\n if ($item && !$item.fjGalleryImage && $item.querySelector) {\n var $image = $item.querySelector(self.options.imageSelector);\n\n if ($image) {\n $item.fjGalleryImage = self;\n var data = {\n $item: $item,\n $image: $image,\n width: parseFloat($image.getAttribute('width')) || false,\n height: parseFloat($image.getAttribute('height')) || false,\n loadSizes: function loadSizes() {\n var itemData = this;\n getImgDemensions($image, function (dimensions) {\n if (itemData.width !== dimensions.width || itemData.height !== dimensions.height) {\n itemData.width = dimensions.width;\n itemData.height = dimensions.height;\n self.resize();\n }\n });\n }\n };\n data.loadSizes();\n\n self.images.push(data);\n }\n }\n });\n\n // call onAppendImages event\n if (self.options.onAppendImages) {\n self.options.onAppendImages.call(self, [$images]);\n }\n\n self.justify();\n }\n\n // justify images\n\n }, {\n key: 'justify',\n value: function justify() {\n var self = this;\n var justifyArray = [];\n\n // call onBeforeJustify event\n if (self.options.onBeforeJustify) {\n self.options.onBeforeJustify.call(self);\n }\n\n self.images.forEach(function (data) {\n if (data.width && data.height) {\n justifyArray.push(data.width / data.height);\n }\n });\n\n var justifiedData = (0, _justifiedLayout2.default)(justifyArray, {\n containerWidth: self.$container.getBoundingClientRect().width,\n containerPadding: {\n top: parseFloat(self.css(self.$container, 'padding-top')) || 0,\n right: parseFloat(self.css(self.$container, 'padding-right')) || 0,\n bottom: parseFloat(self.css(self.$container, 'padding-bottom')) || 0,\n left: parseFloat(self.css(self.$container, 'padding-left')) || 0\n },\n boxSpacing: self.options.gutter,\n targetRowHeight: self.options.rowHeight,\n targetRowHeightTolerance: self.options.rowHeightTolerance\n });\n\n self.css(self.$container, {\n height: justifiedData.containerHeight + 'px'\n });\n\n var i = 0;\n self.images.forEach(function (data) {\n if (data.width && data.height) {\n self.css(data.$item, {\n position: 'absolute',\n transform: 'translateX(' + justifiedData.boxes[i].left + 'px) translateY(' + justifiedData.boxes[i].top + 'px) translateZ(0)',\n width: justifiedData.boxes[i].width + 'px',\n height: justifiedData.boxes[i].height + 'px'\n });\n i++;\n }\n });\n\n // call onJustify event\n if (self.options.onJustify) {\n self.options.onJustify.call(self);\n }\n }\n\n // update options and resize gallery items\n\n }, {\n key: 'updateOptions',\n value: function updateOptions(options) {\n var self = this;\n self.options = (0, _merge2.default)({}, self.options, options);\n self.justify();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n var self = this;\n\n self.removeFromFjGalleryList();\n\n // call onDestroy event\n if (self.options.onDestroy) {\n self.options.onDestroy.call(self);\n }\n\n // remove styles.\n self.css(self.$container, {\n height: ''\n });\n self.images.forEach(function (data) {\n self.css(data.$item, {\n position: '',\n transform: '',\n width: '',\n height: ''\n });\n });\n\n // delete fjGalleryImage instance from images\n self.images.forEach(function (val) {\n delete val.$item.fjGalleryImage;\n });\n\n // delete fjGallery instance from container\n delete self.$container.fjGallery;\n }\n }, {\n key: 'resize',\n value: function resize() {\n var self = this;\n\n self.justify();\n }\n }]);\n\n return fjGallery;\n}();\n\n// global definition\n\n\nvar plugin = function plugin(items) {\n // check for dom element\n // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n if ((typeof HTMLElement === 'undefined' ? 'undefined' : _typeof(HTMLElement)) === 'object' ? items instanceof HTMLElement : items && (typeof items === 'undefined' ? 'undefined' : _typeof(items)) === 'object' && items !== null && items.nodeType === 1 && typeof items.nodeName === 'string') {\n items = [items];\n }\n\n var options = arguments[1];\n var args = Array.prototype.slice.call(arguments, 2);\n var len = items.length;\n var k = 0;\n var ret = void 0;\n\n for (k; k < len; k++) {\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object' || typeof options === 'undefined') {\n if (!items[k].fjGallery) {\n // eslint-disable-next-line new-cap\n items[k].fjGallery = new fjGallery(items[k], options);\n }\n } else if (items[k].fjGallery) {\n // eslint-disable-next-line prefer-spread\n ret = items[k].fjGallery[options].apply(items[k].fjGallery, args);\n }\n if (typeof ret !== 'undefined') {\n return ret;\n }\n }\n\n return items;\n};\nplugin.constructor = fjGallery;\n\nexports.default = plugin;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Boolean} noTrailing Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset)\n * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {Boolean} debounceMode If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @return {Function} A new, throttled, function.\n */\nmodule.exports = function (delay, noTrailing, callback, debounceMode) {\n\n\t// After wrapper has stopped being called, this timeout ensures that\n\t// `callback` is executed at the proper times in `throttle` and `end`\n\t// debounce modes.\n\tvar timeoutID;\n\n\t// Keep track of the last time `callback` was executed.\n\tvar lastExec = 0;\n\n\t// `noTrailing` defaults to falsy.\n\tif (typeof noTrailing !== 'boolean') {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t// The `wrapper` function encapsulates all of the throttling / debouncing\n\t// functionality and when executed will limit the rate at which `callback`\n\t// is executed.\n\tfunction wrapper() {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec() {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\t// If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t// to allow future `callback` executions.\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (debounceMode && !timeoutID) {\n\t\t\t// Since `wrapper` is being called for the first time and\n\t\t\t// `debounceMode` is true (at begin), execute `callback`.\n\t\t\texec();\n\t\t}\n\n\t\t// Clear any existing timeout.\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\t// In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t// `callback`.\n\t\t\texec();\n\t\t} else if (noTrailing !== true) {\n\t\t\t// In trailing throttle mode, since `delay` time has not been\n\t\t\t// exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t// recent execution.\n\t\t\t//\n\t\t\t// If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t// after `delay` ms.\n\t\t\t//\n\t\t\t// If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t// execute after `delay` ms.\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\t}\n\n\t// Return the wrapper function.\n\treturn wrapper;\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function () {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function get() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function get() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar global = __webpack_require__(0);\n\n/**\n * `requestAnimationFrame()`\n */\n\nvar request = global.requestAnimationFrame || global.webkitRequestAnimationFrame || global.mozRequestAnimationFrame || fallback;\n\nvar prev = +new Date();\nfunction fallback(fn) {\n var curr = +new Date();\n var ms = Math.max(0, 16 - (curr - prev));\n var req = setTimeout(fn, ms);\n return prev = curr, req;\n}\n\n/**\n * `cancelAnimationFrame()`\n */\n\nvar cancel = global.cancelAnimationFrame || global.webkitCancelAnimationFrame || global.mozCancelAnimationFrame || clearTimeout;\n\nif (Function.prototype.bind) {\n request = request.bind(global);\n cancel = cancel.bind(global);\n}\n\nexports = module.exports = request;\nexports.cancel = cancel;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*!\n * Copyright 2016 Yahoo Inc.\n * Licensed under the terms of the MIT license. Please see LICENSE file in the project root for terms.\n * @license\n */\n\n\n\nvar merge = __webpack_require__(1),\n Row = __webpack_require__(11);\n\n/**\n * Create a new, empty row.\n *\n * @method createNewRow\n * @param layoutConfig {Object} The layout configuration\n * @param layoutData {Object} The current state of the layout\n * @return A new, empty row of the type specified by this layout.\n */\n\nfunction createNewRow(layoutConfig, layoutData) {\n\n\tvar isBreakoutRow;\n\n\t// Work out if this is a full width breakout row\n\tif (layoutConfig.fullWidthBreakoutRowCadence !== false) {\n\t\tif ((layoutData._rows.length + 1) % layoutConfig.fullWidthBreakoutRowCadence === 0) {\n\t\t\tisBreakoutRow = true;\n\t\t}\n\t}\n\n\treturn new Row({\n\t\ttop: layoutData._containerHeight,\n\t\tleft: layoutConfig.containerPadding.left,\n\t\twidth: layoutConfig.containerWidth - layoutConfig.containerPadding.left - layoutConfig.containerPadding.right,\n\t\tspacing: layoutConfig.boxSpacing.horizontal,\n\t\ttargetRowHeight: layoutConfig.targetRowHeight,\n\t\ttargetRowHeightTolerance: layoutConfig.targetRowHeightTolerance,\n\t\tedgeCaseMinRowHeight: 0.5 * layoutConfig.targetRowHeight,\n\t\tedgeCaseMaxRowHeight: 2 * layoutConfig.targetRowHeight,\n\t\trightToLeft: false,\n\t\tisBreakoutRow: isBreakoutRow,\n\t\twidowLayoutStyle: layoutConfig.widowLayoutStyle\n\t});\n}\n\n/**\n * Add a completed row to the layout.\n * Note: the row must have already been completed.\n *\n * @method addRow\n * @param layoutConfig {Object} The layout configuration\n * @param layoutData {Object} The current state of the layout\n * @param row {Row} The row to add.\n * @return {Array} Each item added to the row.\n */\n\nfunction addRow(layoutConfig, layoutData, row) {\n\n\tlayoutData._rows.push(row);\n\tlayoutData._layoutItems = layoutData._layoutItems.concat(row.getItems());\n\n\t// Increment the container height\n\tlayoutData._containerHeight += row.height + layoutConfig.boxSpacing.vertical;\n\n\treturn row.items;\n}\n\n/**\n * Calculate the current layout for all items in the list that require layout.\n * \"Layout\" means geometry: position within container and size\n *\n * @method computeLayout\n * @param layoutConfig {Object} The layout configuration\n * @param layoutData {Object} The current state of the layout\n * @param itemLayoutData {Array} Array of items to lay out, with data required to lay out each item\n * @return {Object} The newly-calculated layout, containing the new container height, and lists of layout items\n */\n\nfunction computeLayout(layoutConfig, layoutData, itemLayoutData) {\n\n\tvar laidOutItems = [],\n\t itemAdded,\n\t currentRow,\n\t nextToLastRowHeight;\n\n\t// Apply forced aspect ratio if specified, and set a flag.\n\tif (layoutConfig.forceAspectRatio) {\n\t\titemLayoutData.forEach(function (itemData) {\n\t\t\titemData.forcedAspectRatio = true;\n\t\t\titemData.aspectRatio = layoutConfig.forceAspectRatio;\n\t\t});\n\t}\n\n\t// Loop through the items\n\titemLayoutData.some(function (itemData, i) {\n\n\t\tif (isNaN(itemData.aspectRatio)) {\n\t\t\tthrow new Error(\"Item \" + i + \" has an invalid aspect ratio\");\n\t\t}\n\n\t\t// If not currently building up a row, make a new one.\n\t\tif (!currentRow) {\n\t\t\tcurrentRow = createNewRow(layoutConfig, layoutData);\n\t\t}\n\n\t\t// Attempt to add item to the current row.\n\t\titemAdded = currentRow.addItem(itemData);\n\n\t\tif (currentRow.isLayoutComplete()) {\n\n\t\t\t// Row is filled; add it and start a new one\n\t\t\tlaidOutItems = laidOutItems.concat(addRow(layoutConfig, layoutData, currentRow));\n\n\t\t\tif (layoutData._rows.length >= layoutConfig.maxNumRows) {\n\t\t\t\tcurrentRow = null;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcurrentRow = createNewRow(layoutConfig, layoutData);\n\n\t\t\t// Item was rejected; add it to its own row\n\t\t\tif (!itemAdded) {\n\n\t\t\t\titemAdded = currentRow.addItem(itemData);\n\n\t\t\t\tif (currentRow.isLayoutComplete()) {\n\n\t\t\t\t\t// If the rejected item fills a row on its own, add the row and start another new one\n\t\t\t\t\tlaidOutItems = laidOutItems.concat(addRow(layoutConfig, layoutData, currentRow));\n\t\t\t\t\tif (layoutData._rows.length >= layoutConfig.maxNumRows) {\n\t\t\t\t\t\tcurrentRow = null;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentRow = createNewRow(layoutConfig, layoutData);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle any leftover content (orphans) depending on where they lie\n\t// in this layout update, and in the total content set.\n\tif (currentRow && currentRow.getItems().length && layoutConfig.showWidows) {\n\n\t\t// Last page of all content or orphan suppression is suppressed; lay out orphans.\n\t\tif (layoutData._rows.length) {\n\n\t\t\t// Only Match previous row's height if it exists and it isn't a breakout row\n\t\t\tif (layoutData._rows[layoutData._rows.length - 1].isBreakoutRow) {\n\t\t\t\tnextToLastRowHeight = layoutData._rows[layoutData._rows.length - 1].targetRowHeight;\n\t\t\t} else {\n\t\t\t\tnextToLastRowHeight = layoutData._rows[layoutData._rows.length - 1].height;\n\t\t\t}\n\n\t\t\tcurrentRow.forceComplete(false, nextToLastRowHeight);\n\t\t} else {\n\n\t\t\t// ...else use target height if there is no other row height to reference.\n\t\t\tcurrentRow.forceComplete(false);\n\t\t}\n\n\t\tlaidOutItems = laidOutItems.concat(addRow(layoutConfig, layoutData, currentRow));\n\t\tlayoutConfig._widowCount = currentRow.getItems().length;\n\t}\n\n\t// We need to clean up the bottom container padding\n\t// First remove the height added for box spacing\n\tlayoutData._containerHeight = layoutData._containerHeight - layoutConfig.boxSpacing.vertical;\n\t// Then add our bottom container padding\n\tlayoutData._containerHeight = layoutData._containerHeight + layoutConfig.containerPadding.bottom;\n\n\treturn {\n\t\tcontainerHeight: layoutData._containerHeight,\n\t\twidowCount: layoutConfig._widowCount,\n\t\tboxes: layoutData._layoutItems\n\t};\n}\n\n/**\n * Takes in a bunch of box data and config. Returns\n * geometry to lay them out in a justified view.\n *\n * @method covertSizesToAspectRatios\n * @param sizes {Array} Array of objects with widths and heights\n * @return {Array} A list of aspect ratios\n */\n\nmodule.exports = function (input, config) {\n\tvar layoutConfig = {};\n\tvar layoutData = {};\n\n\t// Defaults\n\tvar defaults = {\n\t\tcontainerWidth: 1060,\n\t\tcontainerPadding: 10,\n\t\tboxSpacing: 10,\n\t\ttargetRowHeight: 320,\n\t\ttargetRowHeightTolerance: 0.25,\n\t\tmaxNumRows: Number.POSITIVE_INFINITY,\n\t\tforceAspectRatio: false,\n\t\tshowWidows: true,\n\t\tfullWidthBreakoutRowCadence: false,\n\t\twidowLayoutStyle: 'left'\n\t};\n\n\tvar containerPadding = {};\n\tvar boxSpacing = {};\n\n\tconfig = config || {};\n\n\t// Merge defaults and config passed in\n\tlayoutConfig = merge(defaults, config);\n\n\t// Sort out padding and spacing values\n\tcontainerPadding.top = !isNaN(parseFloat(layoutConfig.containerPadding.top)) ? layoutConfig.containerPadding.top : layoutConfig.containerPadding;\n\tcontainerPadding.right = !isNaN(parseFloat(layoutConfig.containerPadding.right)) ? layoutConfig.containerPadding.right : layoutConfig.containerPadding;\n\tcontainerPadding.bottom = !isNaN(parseFloat(layoutConfig.containerPadding.bottom)) ? layoutConfig.containerPadding.bottom : layoutConfig.containerPadding;\n\tcontainerPadding.left = !isNaN(parseFloat(layoutConfig.containerPadding.left)) ? layoutConfig.containerPadding.left : layoutConfig.containerPadding;\n\tboxSpacing.horizontal = !isNaN(parseFloat(layoutConfig.boxSpacing.horizontal)) ? layoutConfig.boxSpacing.horizontal : layoutConfig.boxSpacing;\n\tboxSpacing.vertical = !isNaN(parseFloat(layoutConfig.boxSpacing.vertical)) ? layoutConfig.boxSpacing.vertical : layoutConfig.boxSpacing;\n\n\tlayoutConfig.containerPadding = containerPadding;\n\tlayoutConfig.boxSpacing = boxSpacing;\n\n\t// Local\n\tlayoutData._layoutItems = [];\n\tlayoutData._awakeItems = [];\n\tlayoutData._inViewportItems = [];\n\tlayoutData._leadingOrphans = [];\n\tlayoutData._trailingOrphans = [];\n\tlayoutData._containerHeight = layoutConfig.containerPadding.top;\n\tlayoutData._rows = [];\n\tlayoutData._orphans = [];\n\tlayoutConfig._widowCount = 0;\n\n\t// Convert widths and heights to aspect ratios if we need to\n\treturn computeLayout(layoutConfig, layoutData, input.map(function (item) {\n\t\tif (item.width && item.height) {\n\t\t\treturn { aspectRatio: item.width / item.height };\n\t\t} else {\n\t\t\treturn { aspectRatio: item };\n\t\t}\n\t}));\n};\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*!\n * Copyright 2016 Yahoo Inc.\n * Licensed under the terms of the MIT license. Please see LICENSE file in the project root for terms.\n * @license\n */\n\nvar merge = __webpack_require__(1);\n\n/**\n * Row\n * Wrapper for each row in a justified layout.\n * Stores relevant values and provides methods for calculating layout of individual rows.\n *\n * @param {Object} layoutConfig - The same as that passed\n * @param {Object} Initialization parameters. The following are all required:\n * @param params.top {Number} Top of row, relative to container\n * @param params.left {Number} Left side of row relative to container (equal to container left padding)\n * @param params.width {Number} Width of row, not including container padding\n * @param params.spacing {Number} Horizontal spacing between items\n * @param params.targetRowHeight {Number} Layout algorithm will aim for this row height\n * @param params.targetRowHeightTolerance {Number} Row heights may vary +/- (`targetRowHeight` x `targetRowHeightTolerance`)\n * @param params.edgeCaseMinRowHeight {Number} Absolute minimum row height for edge cases that cannot be resolved within tolerance.\n * @param params.edgeCaseMaxRowHeight {Number} Absolute maximum row height for edge cases that cannot be resolved within tolerance.\n * @param params.isBreakoutRow {Boolean} Is this row in particular one of those breakout rows? Always false if it's not that kind of photo list\n * @param params.widowLayoutStyle {String} If widows are visible, how should they be laid out?\n * @constructor\n */\n\nvar Row = module.exports = function (params) {\n\n\t// Top of row, relative to container\n\tthis.top = params.top;\n\n\t// Left side of row relative to container (equal to container left padding)\n\tthis.left = params.left;\n\n\t// Width of row, not including container padding\n\tthis.width = params.width;\n\n\t// Horizontal spacing between items\n\tthis.spacing = params.spacing;\n\n\t// Row height calculation values\n\tthis.targetRowHeight = params.targetRowHeight;\n\tthis.targetRowHeightTolerance = params.targetRowHeightTolerance;\n\tthis.minAspectRatio = this.width / params.targetRowHeight * (1 - params.targetRowHeightTolerance);\n\tthis.maxAspectRatio = this.width / params.targetRowHeight * (1 + params.targetRowHeightTolerance);\n\n\t// Edge case row height minimum/maximum\n\tthis.edgeCaseMinRowHeight = params.edgeCaseMinRowHeight;\n\tthis.edgeCaseMaxRowHeight = params.edgeCaseMaxRowHeight;\n\n\t// Widow layout direction\n\tthis.widowLayoutStyle = params.widowLayoutStyle;\n\n\t// Full width breakout rows\n\tthis.isBreakoutRow = params.isBreakoutRow;\n\n\t// Store layout data for each item in row\n\tthis.items = [];\n\n\t// Height remains at 0 until it's been calculated\n\tthis.height = 0;\n};\n\nRow.prototype = {\n\n\t/**\n * Attempt to add a single item to the row.\n * This is the heart of the justified algorithm.\n * This method is direction-agnostic; it deals only with sizes, not positions.\n *\n * If the item fits in the row, without pushing row height beyond min/max tolerance,\n * the item is added and the method returns true.\n *\n * If the item leaves row height too high, there may be room to scale it down and add another item.\n * In this case, the item is added and the method returns true, but the row is incomplete.\n *\n * If the item leaves row height too short, there are too many items to fit within tolerance.\n * The method will either accept or reject the new item, favoring the resulting row height closest to within tolerance.\n * If the item is rejected, left/right padding will be required to fit the row height within tolerance;\n * if the item is accepted, top/bottom cropping will be required to fit the row height within tolerance.\n *\n * @method addItem\n * @param itemData {Object} Item layout data, containing item aspect ratio.\n * @return {Boolean} True if successfully added; false if rejected.\n */\n\n\taddItem: function addItem(itemData) {\n\n\t\tvar newItems = this.items.concat(itemData),\n\n\t\t// Calculate aspect ratios for items only; exclude spacing\n\t\trowWidthWithoutSpacing = this.width - (newItems.length - 1) * this.spacing,\n\t\t newAspectRatio = newItems.reduce(function (sum, item) {\n\t\t\treturn sum + item.aspectRatio;\n\t\t}, 0),\n\t\t targetAspectRatio = rowWidthWithoutSpacing / this.targetRowHeight,\n\t\t previousRowWidthWithoutSpacing,\n\t\t previousAspectRatio,\n\t\t previousTargetAspectRatio;\n\n\t\t// Handle big full-width breakout photos if we're doing them\n\t\tif (this.isBreakoutRow) {\n\t\t\t// Only do it if there's no other items in this row\n\t\t\tif (this.items.length === 0) {\n\t\t\t\t// Only go full width if this photo is a square or landscape\n\t\t\t\tif (itemData.aspectRatio >= 1) {\n\t\t\t\t\t// Close out the row with a full width photo\n\t\t\t\t\tthis.items.push(itemData);\n\t\t\t\t\tthis.completeLayout(rowWidthWithoutSpacing / itemData.aspectRatio, 'justify');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (newAspectRatio < this.minAspectRatio) {\n\n\t\t\t// New aspect ratio is too narrow / scaled row height is too tall.\n\t\t\t// Accept this item and leave row open for more items.\n\n\t\t\tthis.items.push(merge(itemData));\n\t\t\treturn true;\n\t\t} else if (newAspectRatio > this.maxAspectRatio) {\n\n\t\t\t// New aspect ratio is too wide / scaled row height will be too short.\n\t\t\t// Accept item if the resulting aspect ratio is closer to target than it would be without the item.\n\t\t\t// NOTE: Any row that falls into this block will require cropping/padding on individual items.\n\n\t\t\tif (this.items.length === 0) {\n\n\t\t\t\t// When there are no existing items, force acceptance of the new item and complete the layout.\n\t\t\t\t// This is the pano special case.\n\t\t\t\tthis.items.push(merge(itemData));\n\t\t\t\tthis.completeLayout(rowWidthWithoutSpacing / newAspectRatio, 'justify');\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Calculate width/aspect ratio for row before adding new item\n\t\t\tpreviousRowWidthWithoutSpacing = this.width - (this.items.length - 1) * this.spacing;\n\t\t\tpreviousAspectRatio = this.items.reduce(function (sum, item) {\n\t\t\t\treturn sum + item.aspectRatio;\n\t\t\t}, 0);\n\t\t\tpreviousTargetAspectRatio = previousRowWidthWithoutSpacing / this.targetRowHeight;\n\n\t\t\tif (Math.abs(newAspectRatio - targetAspectRatio) > Math.abs(previousAspectRatio - previousTargetAspectRatio)) {\n\n\t\t\t\t// Row with new item is us farther away from target than row without; complete layout and reject item.\n\t\t\t\tthis.completeLayout(previousRowWidthWithoutSpacing / previousAspectRatio, 'justify');\n\t\t\t\treturn false;\n\t\t\t} else {\n\n\t\t\t\t// Row with new item is us closer to target than row without;\n\t\t\t\t// accept the new item and complete the row layout.\n\t\t\t\tthis.items.push(merge(itemData));\n\t\t\t\tthis.completeLayout(rowWidthWithoutSpacing / newAspectRatio, 'justify');\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// New aspect ratio / scaled row height is within tolerance;\n\t\t\t// accept the new item and complete the row layout.\n\t\t\tthis.items.push(merge(itemData));\n\t\t\tthis.completeLayout(rowWidthWithoutSpacing / newAspectRatio, 'justify');\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t/**\n * Check if a row has completed its layout.\n *\n * @method isLayoutComplete\n * @return {Boolean} True if complete; false if not.\n */\n\n\tisLayoutComplete: function isLayoutComplete() {\n\t\treturn this.height > 0;\n\t},\n\n\t/**\n * Set row height and compute item geometry from that height.\n * Will justify items within the row unless instructed not to.\n *\n * @method completeLayout\n * @param newHeight {Number} Set row height to this value.\n * @param widowLayoutStyle {String} How should widows display? Supported: left | justify | center\n */\n\n\tcompleteLayout: function completeLayout(newHeight, widowLayoutStyle) {\n\n\t\tvar itemWidthSum = this.left,\n\t\t rowWidthWithoutSpacing = this.width - (this.items.length - 1) * this.spacing,\n\t\t clampedToNativeRatio,\n\t\t clampedHeight,\n\t\t errorWidthPerItem,\n\t\t roundedCumulativeErrors,\n\t\t singleItemGeometry,\n\t\t centerOffset;\n\n\t\t// Justify unless explicitly specified otherwise.\n\t\tif (typeof widowLayoutStyle === 'undefined' || ['justify', 'center', 'left'].indexOf(widowLayoutStyle) < 0) {\n\t\t\twidowLayoutStyle = 'left';\n\t\t}\n\n\t\t// Clamp row height to edge case minimum/maximum.\n\t\tclampedHeight = Math.max(this.edgeCaseMinRowHeight, Math.min(newHeight, this.edgeCaseMaxRowHeight));\n\n\t\tif (newHeight !== clampedHeight) {\n\n\t\t\t// If row height was clamped, the resulting row/item aspect ratio will be off,\n\t\t\t// so force it to fit the width (recalculate aspectRatio to match clamped height).\n\t\t\t// NOTE: this will result in cropping/padding commensurate to the amount of clamping.\n\t\t\tthis.height = clampedHeight;\n\t\t\tclampedToNativeRatio = rowWidthWithoutSpacing / clampedHeight / (rowWidthWithoutSpacing / newHeight);\n\t\t} else {\n\n\t\t\t// If not clamped, leave ratio at 1.0.\n\t\t\tthis.height = newHeight;\n\t\t\tclampedToNativeRatio = 1.0;\n\t\t}\n\n\t\t// Compute item geometry based on newHeight.\n\t\tthis.items.forEach(function (item) {\n\n\t\t\titem.top = this.top;\n\t\t\titem.width = item.aspectRatio * this.height * clampedToNativeRatio;\n\t\t\titem.height = this.height;\n\n\t\t\t// Left-to-right.\n\t\t\t// TODO right to left\n\t\t\t// item.left = this.width - itemWidthSum - item.width;\n\t\t\titem.left = itemWidthSum;\n\n\t\t\t// Increment width.\n\t\t\titemWidthSum += item.width + this.spacing;\n\t\t}, this);\n\n\t\t// If specified, ensure items fill row and distribute error\n\t\t// caused by rounding width and height across all items.\n\t\tif (widowLayoutStyle === 'justify') {\n\n\t\t\titemWidthSum -= this.spacing + this.left;\n\n\t\t\terrorWidthPerItem = (itemWidthSum - this.width) / this.items.length;\n\t\t\troundedCumulativeErrors = this.items.map(function (item, i) {\n\t\t\t\treturn Math.round((i + 1) * errorWidthPerItem);\n\t\t\t});\n\n\t\t\tif (this.items.length === 1) {\n\n\t\t\t\t// For rows with only one item, adjust item width to fill row.\n\t\t\t\tsingleItemGeometry = this.items[0];\n\t\t\t\tsingleItemGeometry.width -= Math.round(errorWidthPerItem);\n\t\t\t} else {\n\n\t\t\t\t// For rows with multiple items, adjust item width and shift items to fill the row,\n\t\t\t\t// while maintaining equal spacing between items in the row.\n\t\t\t\tthis.items.forEach(function (item, i) {\n\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\titem.left -= roundedCumulativeErrors[i - 1];\n\t\t\t\t\t\titem.width -= roundedCumulativeErrors[i] - roundedCumulativeErrors[i - 1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\titem.width -= roundedCumulativeErrors[i];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (widowLayoutStyle === 'center') {\n\n\t\t\t// Center widows\n\t\t\tcenterOffset = (this.width - itemWidthSum) / 2;\n\n\t\t\tthis.items.forEach(function (item) {\n\t\t\t\titem.left += centerOffset + this.spacing;\n\t\t\t}, this);\n\t\t}\n\t},\n\n\t/**\n * Force completion of row layout with current items.\n *\n * @method forceComplete\n * @param fitToWidth {Boolean} Stretch current items to fill the row width.\n * This will likely result in padding.\n * @param fitToWidth {Number}\n */\n\n\tforceComplete: function forceComplete(fitToWidth, rowHeight) {\n\n\t\t// TODO Handle fitting to width\n\t\t// var rowWidthWithoutSpacing = this.width - (this.items.length - 1) * this.spacing,\n\t\t// \tcurrentAspectRatio = this.items.reduce(function (sum, item) {\n\t\t// \t\treturn sum + item.aspectRatio;\n\t\t// \t}, 0);\n\n\t\tif (typeof rowHeight === 'number') {\n\n\t\t\tthis.completeLayout(rowHeight, this.widowLayoutStyle);\n\t\t} else {\n\n\t\t\t// Complete using target row height.\n\t\t\tthis.completeLayout(this.targetRowHeight, this.widowLayoutStyle);\n\t\t}\n\t},\n\n\t/**\n * Return layout data for items within row.\n * Note: returns actual list, not a copy.\n *\n * @method getItems\n * @return Layout data for items within row.\n */\n\n\tgetItems: function getItems() {\n\t\treturn this.items;\n\t}\n\n};\n\n/***/ })\n/******/ ]);"]}