summaryrefslogtreecommitdiffstats
path: root/js/vendor/masonry
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/masonry')
-rw-r--r--js/vendor/masonry/.bower.json51
-rw-r--r--js/vendor/masonry/README.mdown80
-rw-r--r--js/vendor/masonry/bower.json41
-rw-r--r--js/vendor/masonry/masonry.js205
4 files changed, 377 insertions, 0 deletions
diff --git a/js/vendor/masonry/.bower.json b/js/vendor/masonry/.bower.json
new file mode 100644
index 000000000..463331a4c
--- /dev/null
+++ b/js/vendor/masonry/.bower.json
@@ -0,0 +1,51 @@
+{
+ "name": "masonry",
+ "version": "4.0.0",
+ "description": "Cascading grid layout library",
+ "main": "masonry.js",
+ "dependencies": {
+ "get-size": "~2.0.2",
+ "outlayer": "~2.0.0"
+ },
+ "devDependencies": {
+ "jquery-bridget": "~2.0.0",
+ "qunit": "^1.12",
+ "jquery": ">=1.4.3 <4"
+ },
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "sandbox/",
+ "CONTRIBUTING.mdown",
+ "gulpfile.js",
+ "package.json"
+ ],
+ "homepage": "http://masonry.desandro.com",
+ "authors": [
+ "David DeSandro"
+ ],
+ "keywords": [
+ "masonry",
+ "layout",
+ "outlayer"
+ ],
+ "license": "MIT",
+ "moduleType": [
+ "amd",
+ "globals",
+ "node"
+ ],
+ "_release": "4.0.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v4.0.0",
+ "commit": "707ac6eebf112b2413cee2e9ed6457fba346cabc"
+ },
+ "_source": "git://github.com/desandro/masonry.git",
+ "_target": "~4.0.0",
+ "_originalSource": "masonry",
+ "_direct": true
+} \ No newline at end of file
diff --git a/js/vendor/masonry/README.mdown b/js/vendor/masonry/README.mdown
new file mode 100644
index 000000000..23e737980
--- /dev/null
+++ b/js/vendor/masonry/README.mdown
@@ -0,0 +1,80 @@
+# Masonry
+
+_Cascading grid layout library_
+
+Masonry works by placing elements in optimal position based on available vertical space, sort of like a mason fitting stones in a wall. You’ve probably seen it in use all over the Internet.
+
+See [masonry.desandro.com](http://masonry.desandro.com) for complete docs and demos.
+
+## Install
+
+### Download
+
++ [masonry.pkgd.js](https://github.com/desandro/masonry/raw/master/dist/masonry.pkgd.js) un-minified, or
++ [masonry.pkgd.min.js](https://github.com/desandro/masonry/raw/master/dist/masonry.pkgd.min.js) minified
+
+### CDN
+
+Link directly to Masonry files on [npmcdn](https://npmcdn.com/).
+
+``` html
+<script src="https://npmcdn.com/masonry-layout@4.0/dist/masonry.pkgd.js"></script>
+<!-- or -->
+<script src="https://npmcdn.com/masonry-layout@4.0/dist/masonry.pkgd.min.js"></script>
+```
+
+### Package managers
+
+Bower: `bower install masonry --save`
+
+[npm](https://www.npmjs.com/package/masonry-layout): `npm install masonry-layout --save`
+
+## Initialize
+
+With jQuery
+
+``` js
+$('.grid').masonry({
+ // options...
+ itemSelector: '.grid-item',
+ columnWidth: 200
+});
+```
+
+With vanilla JavaScript
+
+``` js
+// vanilla JS
+// init with element
+var grid = document.querySelector('.grid');
+var msnry = new Masonry( grid, {
+ // options...
+ itemSelector: '.grid-item',
+ columnWidth: 200
+});
+
+// init with selector
+var msnry = new Masonry( '.grid', {
+ // options...
+});
+```
+
+With HTML
+
+Add a `data-masonry` attribute to your element. Options can be set in JSON in the value.
+
+``` html
+<div class="grid" data-masonry='{ "itemSelector": ".grid-item", "columnWidth": 200 }'>
+ <div class="grid-item"></div>
+ <div class="grid-item"></div>
+ ...
+</div>
+```
+
+## License
+
+Masonry is released under the [MIT license](http://desandro.mit-license.org). Have at it.
+
+* * *
+
+Made by David DeSandro
diff --git a/js/vendor/masonry/bower.json b/js/vendor/masonry/bower.json
new file mode 100644
index 000000000..7226f1e16
--- /dev/null
+++ b/js/vendor/masonry/bower.json
@@ -0,0 +1,41 @@
+{
+ "name": "masonry",
+ "version": "4.0.0",
+ "description": "Cascading grid layout library",
+ "main": "masonry.js",
+ "dependencies": {
+ "get-size": "~2.0.2",
+ "outlayer": "~2.0.0"
+ },
+ "devDependencies": {
+ "jquery-bridget": "~2.0.0",
+ "qunit": "^1.12",
+ "jquery": ">=1.4.3 <4"
+ },
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "sandbox/",
+ "CONTRIBUTING.mdown",
+ "gulpfile.js",
+ "package.json"
+ ],
+ "homepage": "http://masonry.desandro.com",
+ "authors": [
+ "David DeSandro"
+ ],
+ "keywords": [
+ "masonry",
+ "layout",
+ "outlayer"
+ ],
+ "license": "MIT",
+ "moduleType": [
+ "amd",
+ "globals",
+ "node"
+ ]
+}
diff --git a/js/vendor/masonry/masonry.js b/js/vendor/masonry/masonry.js
new file mode 100644
index 000000000..309017746
--- /dev/null
+++ b/js/vendor/masonry/masonry.js
@@ -0,0 +1,205 @@
+/*!
+ * Masonry v4.0.0
+ * Cascading grid layout library
+ * http://masonry.desandro.com
+ * MIT License
+ * by David DeSandro
+ */
+
+( function( window, factory ) {
+ // universal module definition
+ /* jshint strict: false */ /*globals define, module, require */
+ if ( typeof define == 'function' && define.amd ) {
+ // AMD
+ define( [
+ 'outlayer/outlayer',
+ 'get-size/get-size'
+ ],
+ factory );
+ } else if ( typeof module == 'object' && module.exports ) {
+ // CommonJS
+ module.exports = factory(
+ require('outlayer'),
+ require('get-size')
+ );
+ } else {
+ // browser global
+ window.Masonry = factory(
+ window.Outlayer,
+ window.getSize
+ );
+ }
+
+}( window, function factory( Outlayer, getSize ) {
+
+'use strict';
+
+// -------------------------- masonryDefinition -------------------------- //
+
+ // create an Outlayer layout class
+ var Masonry = Outlayer.create('masonry');
+ // isFitWidth -> fitWidth
+ Masonry.compatOptions.fitWidth = 'isFitWidth';
+
+ Masonry.prototype._resetLayout = function() {
+ this.getSize();
+ this._getMeasurement( 'columnWidth', 'outerWidth' );
+ this._getMeasurement( 'gutter', 'outerWidth' );
+ this.measureColumns();
+
+ // reset column Y
+ this.colYs = [];
+ for ( var i=0; i < this.cols; i++ ) {
+ this.colYs.push( 0 );
+ }
+
+ this.maxY = 0;
+ };
+
+ Masonry.prototype.measureColumns = function() {
+ this.getContainerWidth();
+ // if columnWidth is 0, default to outerWidth of first item
+ if ( !this.columnWidth ) {
+ var firstItem = this.items[0];
+ var firstItemElem = firstItem && firstItem.element;
+ // columnWidth fall back to item of first element
+ this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||
+ // if first elem has no width, default to size of container
+ this.containerWidth;
+ }
+
+ var columnWidth = this.columnWidth += this.gutter;
+
+ // calculate columns
+ var containerWidth = this.containerWidth + this.gutter;
+ var cols = containerWidth / columnWidth;
+ // fix rounding errors, typically with gutters
+ var excess = columnWidth - containerWidth % columnWidth;
+ // if overshoot is less than a pixel, round up, otherwise floor it
+ var mathMethod = excess && excess < 1 ? 'round' : 'floor';
+ cols = Math[ mathMethod ]( cols );
+ this.cols = Math.max( cols, 1 );
+ };
+
+ Masonry.prototype.getContainerWidth = function() {
+ // container is parent if fit width
+ var isFitWidth = this._getOption('fitWidth');
+ var container = isFitWidth ? this.element.parentNode : this.element;
+ // check that this.size and size are there
+ // IE8 triggers resize on body size change, so they might not be
+ var size = getSize( container );
+ this.containerWidth = size && size.innerWidth;
+ };
+
+ Masonry.prototype._getItemLayoutPosition = function( item ) {
+ item.getSize();
+ // how many columns does this brick span
+ var remainder = item.size.outerWidth % this.columnWidth;
+ var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';
+ // round if off by 1 pixel, otherwise use ceil
+ var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );
+ colSpan = Math.min( colSpan, this.cols );
+
+ var colGroup = this._getColGroup( colSpan );
+ // get the minimum Y value from the columns
+ var minimumY = Math.min.apply( Math, colGroup );
+ var shortColIndex = colGroup.indexOf( minimumY );
+
+ // position the brick
+ var position = {
+ x: this.columnWidth * shortColIndex,
+ y: minimumY
+ };
+
+ // apply setHeight to necessary columns
+ var setHeight = minimumY + item.size.outerHeight;
+ var setSpan = this.cols + 1 - colGroup.length;
+ for ( var i = 0; i < setSpan; i++ ) {
+ this.colYs[ shortColIndex + i ] = setHeight;
+ }
+
+ return position;
+ };
+
+ /**
+ * @param {Number} colSpan - number of columns the element spans
+ * @returns {Array} colGroup
+ */
+ Masonry.prototype._getColGroup = function( colSpan ) {
+ if ( colSpan < 2 ) {
+ // if brick spans only one column, use all the column Ys
+ return this.colYs;
+ }
+
+ var colGroup = [];
+ // how many different places could this brick fit horizontally
+ var groupCount = this.cols + 1 - colSpan;
+ // for each group potential horizontal position
+ for ( var i = 0; i < groupCount; i++ ) {
+ // make an array of colY values for that one group
+ var groupColYs = this.colYs.slice( i, i + colSpan );
+ // and get the max value of the array
+ colGroup[i] = Math.max.apply( Math, groupColYs );
+ }
+ return colGroup;
+ };
+
+ Masonry.prototype._manageStamp = function( stamp ) {
+ var stampSize = getSize( stamp );
+ var offset = this._getElementOffset( stamp );
+ // get the columns that this stamp affects
+ var isOriginLeft = this._getOption('originLeft');
+ var firstX = isOriginLeft ? offset.left : offset.right;
+ var lastX = firstX + stampSize.outerWidth;
+ var firstCol = Math.floor( firstX / this.columnWidth );
+ firstCol = Math.max( 0, firstCol );
+ var lastCol = Math.floor( lastX / this.columnWidth );
+ // lastCol should not go over if multiple of columnWidth #425
+ lastCol -= lastX % this.columnWidth ? 0 : 1;
+ lastCol = Math.min( this.cols - 1, lastCol );
+ // set colYs to bottom of the stamp
+
+ var isOriginTop = this._getOption('originTop');
+ var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +
+ stampSize.outerHeight;
+ for ( var i = firstCol; i <= lastCol; i++ ) {
+ this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );
+ }
+ };
+
+ Masonry.prototype._getContainerSize = function() {
+ this.maxY = Math.max.apply( Math, this.colYs );
+ var size = {
+ height: this.maxY
+ };
+
+ if ( this._getOption('fitWidth') ) {
+ size.width = this._getContainerFitWidth();
+ }
+
+ return size;
+ };
+
+ Masonry.prototype._getContainerFitWidth = function() {
+ var unusedCols = 0;
+ // count unused columns
+ var i = this.cols;
+ while ( --i ) {
+ if ( this.colYs[i] !== 0 ) {
+ break;
+ }
+ unusedCols++;
+ }
+ // fit container to columns that have been used
+ return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;
+ };
+
+ Masonry.prototype.needsResizeLayout = function() {
+ var previousWidth = this.containerWidth;
+ this.getContainerWidth();
+ return previousWidth != this.containerWidth;
+ };
+
+ return Masonry;
+
+}));