masonry-rails 0.2.1 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +5 -7
- data/Gemfile.lock +8 -67
- data/README.md +50 -7
- data/VERSION +1 -1
- data/masonry-rails.gemspec +35 -27
- data/vendor/assets/javascripts/{debounce.js → isotope/debounce.js} +0 -0
- data/vendor/assets/javascripts/isotope/isotope.js +628 -0
- data/vendor/assets/javascripts/isotope/item.js +75 -0
- data/vendor/assets/javascripts/{jquery.debounced_resize.js → isotope/jquery.debounced_resize.js} +0 -0
- data/vendor/assets/javascripts/{jquery.isotope.js → isotope/jquery.isotope.js} +0 -0
- data/vendor/assets/javascripts/{jquery.isotope.min.js → isotope/jquery.isotope.min.js} +0 -0
- data/vendor/assets/javascripts/{jquery.throttled_resize.js → isotope/jquery.throttled_resize.js} +0 -0
- data/vendor/assets/javascripts/isotope/layout-mode.js +156 -0
- data/vendor/assets/javascripts/isotope/layout/cells-by-column.js +64 -0
- data/vendor/assets/javascripts/isotope/layout/cells-by-row.js +59 -0
- data/vendor/assets/javascripts/isotope/layout/fit-columns.js +65 -0
- data/vendor/assets/javascripts/isotope/layout/horizontal.js +54 -0
- data/vendor/assets/javascripts/isotope/layout/packery.js +97 -0
- data/vendor/assets/javascripts/masonry/layout/horizontal.js +152 -0
- data/vendor/assets/javascripts/masonry/masonry.min.js +9 -0
- metadata +58 -38
@@ -0,0 +1,75 @@
|
|
1
|
+
/**
|
2
|
+
* Isotope Item
|
3
|
+
**/
|
4
|
+
|
5
|
+
( function( window ) {
|
6
|
+
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
// -------------------------- Item -------------------------- //
|
10
|
+
|
11
|
+
function itemDefinition( Outlayer ) {
|
12
|
+
|
13
|
+
// sub-class Outlayer Item
|
14
|
+
function Item() {
|
15
|
+
Outlayer.Item.apply( this, arguments );
|
16
|
+
}
|
17
|
+
|
18
|
+
Item.prototype = new Outlayer.Item();
|
19
|
+
|
20
|
+
Item.prototype._create = function() {
|
21
|
+
// assign id, used for original-order sorting
|
22
|
+
this.id = this.layout.itemGUID++;
|
23
|
+
Outlayer.Item.prototype._create.call( this );
|
24
|
+
this.sortData = {};
|
25
|
+
};
|
26
|
+
|
27
|
+
Item.prototype.updateSortData = function() {
|
28
|
+
if ( this.isIgnored ) {
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
// default sorters
|
32
|
+
this.sortData.id = this.id;
|
33
|
+
// for backward compatibility
|
34
|
+
this.sortData['original-order'] = this.id;
|
35
|
+
this.sortData.random = Math.random();
|
36
|
+
// go thru getSortData obj and apply the sorters
|
37
|
+
var getSortData = this.layout.options.getSortData;
|
38
|
+
var sorters = this.layout._sorters;
|
39
|
+
for ( var key in getSortData ) {
|
40
|
+
var sorter = sorters[ key ];
|
41
|
+
this.sortData[ key ] = sorter( this.element, this );
|
42
|
+
}
|
43
|
+
};
|
44
|
+
|
45
|
+
var _destroy = Item.prototype.destroy;
|
46
|
+
Item.prototype.destroy = function() {
|
47
|
+
// call super
|
48
|
+
_destroy.apply( this, arguments );
|
49
|
+
// reset display, #741
|
50
|
+
this.css({
|
51
|
+
display: ''
|
52
|
+
});
|
53
|
+
};
|
54
|
+
|
55
|
+
return Item;
|
56
|
+
|
57
|
+
}
|
58
|
+
|
59
|
+
// -------------------------- transport -------------------------- //
|
60
|
+
|
61
|
+
if ( typeof define === 'function' && define.amd ) {
|
62
|
+
// AMD
|
63
|
+
define( [
|
64
|
+
'outlayer/outlayer'
|
65
|
+
],
|
66
|
+
itemDefinition );
|
67
|
+
} else {
|
68
|
+
// browser global
|
69
|
+
window.Isotope = window.Isotope || {};
|
70
|
+
window.Isotope.Item = itemDefinition(
|
71
|
+
window.Outlayer
|
72
|
+
);
|
73
|
+
}
|
74
|
+
|
75
|
+
})( window );
|
data/vendor/assets/javascripts/{jquery.debounced_resize.js → isotope/jquery.debounced_resize.js}
RENAMED
File without changes
|
File without changes
|
File without changes
|
data/vendor/assets/javascripts/{jquery.throttled_resize.js → isotope/jquery.throttled_resize.js}
RENAMED
File without changes
|
@@ -0,0 +1,156 @@
|
|
1
|
+
( function( window ) {
|
2
|
+
|
3
|
+
'use strict';
|
4
|
+
|
5
|
+
// -------------------------- -------------------------- //
|
6
|
+
|
7
|
+
function layoutModeDefinition( getSize, Outlayer ) {
|
8
|
+
|
9
|
+
// layout mode class
|
10
|
+
function LayoutMode( isotope ) {
|
11
|
+
this.isotope = isotope;
|
12
|
+
// link properties
|
13
|
+
if ( isotope ) {
|
14
|
+
this.options = isotope.options[ this.namespace ];
|
15
|
+
this.element = isotope.element;
|
16
|
+
this.items = isotope.filteredItems;
|
17
|
+
this.size = isotope.size;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
/**
|
22
|
+
* some methods should just defer to default Outlayer method
|
23
|
+
* and reference the Isotope instance as `this`
|
24
|
+
**/
|
25
|
+
( function() {
|
26
|
+
var facadeMethods = [
|
27
|
+
'_resetLayout',
|
28
|
+
'_getItemLayoutPosition',
|
29
|
+
'_manageStamp',
|
30
|
+
'_getContainerSize',
|
31
|
+
'_getElementOffset',
|
32
|
+
'needsResizeLayout'
|
33
|
+
];
|
34
|
+
|
35
|
+
for ( var i=0, len = facadeMethods.length; i < len; i++ ) {
|
36
|
+
var methodName = facadeMethods[i];
|
37
|
+
LayoutMode.prototype[ methodName ] = getOutlayerMethod( methodName );
|
38
|
+
}
|
39
|
+
|
40
|
+
function getOutlayerMethod( methodName ) {
|
41
|
+
return function() {
|
42
|
+
return Outlayer.prototype[ methodName ].apply( this.isotope, arguments );
|
43
|
+
};
|
44
|
+
}
|
45
|
+
})();
|
46
|
+
|
47
|
+
// ----- ----- //
|
48
|
+
|
49
|
+
// for horizontal layout modes, check vertical size
|
50
|
+
LayoutMode.prototype.needsVerticalResizeLayout = function() {
|
51
|
+
// don't trigger if size did not change
|
52
|
+
var size = getSize( this.isotope.element );
|
53
|
+
// check that this.size and size are there
|
54
|
+
// IE8 triggers resize on body size change, so they might not be
|
55
|
+
var hasSizes = this.isotope.size && size;
|
56
|
+
return hasSizes && size.innerHeight !== this.isotope.size.innerHeight;
|
57
|
+
};
|
58
|
+
|
59
|
+
// ----- measurements ----- //
|
60
|
+
|
61
|
+
LayoutMode.prototype._getMeasurement = function() {
|
62
|
+
this.isotope._getMeasurement.apply( this, arguments );
|
63
|
+
};
|
64
|
+
|
65
|
+
LayoutMode.prototype.getColumnWidth = function() {
|
66
|
+
this.getSegmentSize( 'column', 'Width' );
|
67
|
+
};
|
68
|
+
|
69
|
+
LayoutMode.prototype.getRowHeight = function() {
|
70
|
+
this.getSegmentSize( 'row', 'Height' );
|
71
|
+
};
|
72
|
+
|
73
|
+
/**
|
74
|
+
* get columnWidth or rowHeight
|
75
|
+
* segment: 'column' or 'row'
|
76
|
+
* size 'Width' or 'Height'
|
77
|
+
**/
|
78
|
+
LayoutMode.prototype.getSegmentSize = function( segment, size ) {
|
79
|
+
var segmentName = segment + size;
|
80
|
+
var outerSize = 'outer' + size;
|
81
|
+
// columnWidth / outerWidth // rowHeight / outerHeight
|
82
|
+
this._getMeasurement( segmentName, outerSize );
|
83
|
+
// got rowHeight or columnWidth, we can chill
|
84
|
+
if ( this[ segmentName ] ) {
|
85
|
+
return;
|
86
|
+
}
|
87
|
+
// fall back to item of first element
|
88
|
+
var firstItemSize = this.getFirstItemSize();
|
89
|
+
this[ segmentName ] = firstItemSize && firstItemSize[ outerSize ] ||
|
90
|
+
// or size of container
|
91
|
+
this.isotope.size[ 'inner' + size ];
|
92
|
+
};
|
93
|
+
|
94
|
+
LayoutMode.prototype.getFirstItemSize = function() {
|
95
|
+
var firstItem = this.isotope.filteredItems[0];
|
96
|
+
return firstItem && firstItem.element && getSize( firstItem.element );
|
97
|
+
};
|
98
|
+
|
99
|
+
// ----- methods that should reference isotope ----- //
|
100
|
+
|
101
|
+
LayoutMode.prototype.layout = function() {
|
102
|
+
this.isotope.layout.apply( this.isotope, arguments );
|
103
|
+
};
|
104
|
+
|
105
|
+
LayoutMode.prototype.getSize = function() {
|
106
|
+
this.isotope.getSize();
|
107
|
+
this.size = this.isotope.size;
|
108
|
+
};
|
109
|
+
|
110
|
+
// -------------------------- create -------------------------- //
|
111
|
+
|
112
|
+
LayoutMode.modes = {};
|
113
|
+
|
114
|
+
LayoutMode.create = function( namespace, options ) {
|
115
|
+
|
116
|
+
function Mode() {
|
117
|
+
LayoutMode.apply( this, arguments );
|
118
|
+
}
|
119
|
+
|
120
|
+
Mode.prototype = new LayoutMode();
|
121
|
+
|
122
|
+
// default options
|
123
|
+
if ( options ) {
|
124
|
+
Mode.options = options;
|
125
|
+
}
|
126
|
+
|
127
|
+
Mode.prototype.namespace = namespace;
|
128
|
+
// register in Isotope
|
129
|
+
LayoutMode.modes[ namespace ] = Mode;
|
130
|
+
|
131
|
+
return Mode;
|
132
|
+
};
|
133
|
+
|
134
|
+
|
135
|
+
return LayoutMode;
|
136
|
+
|
137
|
+
}
|
138
|
+
|
139
|
+
if ( typeof define === 'function' && define.amd ) {
|
140
|
+
// AMD
|
141
|
+
define( [
|
142
|
+
'get-size/get-size',
|
143
|
+
'outlayer/outlayer'
|
144
|
+
],
|
145
|
+
layoutModeDefinition );
|
146
|
+
} else {
|
147
|
+
// browser global
|
148
|
+
window.Isotope = window.Isotope || {};
|
149
|
+
window.Isotope.LayoutMode = layoutModeDefinition(
|
150
|
+
window.getSize,
|
151
|
+
window.Outlayer
|
152
|
+
);
|
153
|
+
}
|
154
|
+
|
155
|
+
|
156
|
+
})( window );
|
@@ -0,0 +1,64 @@
|
|
1
|
+
/*!
|
2
|
+
* cellsByColumn layout mode for Isotope
|
3
|
+
* http://isotope.metafizzy.co
|
4
|
+
*/
|
5
|
+
|
6
|
+
( function( window ) {
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
function cellsByColumnDefinition( LayoutMode ) {
|
11
|
+
|
12
|
+
var CellsByColumn = LayoutMode.create( 'cellsByColumn' );
|
13
|
+
|
14
|
+
CellsByColumn.prototype._resetLayout = function() {
|
15
|
+
// reset properties
|
16
|
+
this.itemIndex = 0;
|
17
|
+
// measurements
|
18
|
+
this.getColumnWidth();
|
19
|
+
this.getRowHeight();
|
20
|
+
// set rows
|
21
|
+
this.rows = Math.floor( this.isotope.size.innerHeight / this.rowHeight );
|
22
|
+
this.rows = Math.max( this.rows, 1 );
|
23
|
+
};
|
24
|
+
|
25
|
+
CellsByColumn.prototype._getItemLayoutPosition = function( item ) {
|
26
|
+
item.getSize();
|
27
|
+
var col = Math.floor( this.itemIndex / this.rows );
|
28
|
+
var row = this.itemIndex % this.rows;
|
29
|
+
// center item within cell
|
30
|
+
var x = ( col + 0.5 ) * this.columnWidth - item.size.outerWidth / 2;
|
31
|
+
var y = ( row + 0.5 ) * this.rowHeight - item.size.outerHeight / 2;
|
32
|
+
this.itemIndex++;
|
33
|
+
return { x: x, y: y };
|
34
|
+
};
|
35
|
+
|
36
|
+
CellsByColumn.prototype._getContainerSize = function() {
|
37
|
+
return {
|
38
|
+
width: Math.ceil( this.itemIndex / this.rows ) * this.columnWidth
|
39
|
+
};
|
40
|
+
};
|
41
|
+
|
42
|
+
CellsByColumn.prototype.needsResizeLayout = function() {
|
43
|
+
return this.needsVerticalResizeLayout();
|
44
|
+
};
|
45
|
+
|
46
|
+
return CellsByColumn;
|
47
|
+
|
48
|
+
}
|
49
|
+
|
50
|
+
if ( typeof define === 'function' && define.amd ) {
|
51
|
+
// AMD
|
52
|
+
define( [
|
53
|
+
'isotope/js/layout-mode'
|
54
|
+
],
|
55
|
+
cellsByColumnDefinition );
|
56
|
+
} else {
|
57
|
+
// browser global
|
58
|
+
cellsByColumnDefinition(
|
59
|
+
window.Isotope.LayoutMode
|
60
|
+
);
|
61
|
+
}
|
62
|
+
|
63
|
+
|
64
|
+
})( window );
|
@@ -0,0 +1,59 @@
|
|
1
|
+
/*!
|
2
|
+
* cellsByRows layout mode for Isotope
|
3
|
+
* http://isotope.metafizzy.co
|
4
|
+
*/
|
5
|
+
|
6
|
+
( function( window ) {
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
function cellsByRowDefinition( LayoutMode ) {
|
11
|
+
|
12
|
+
var CellsByRow = LayoutMode.create( 'cellsByRow' );
|
13
|
+
|
14
|
+
CellsByRow.prototype._resetLayout = function() {
|
15
|
+
// reset properties
|
16
|
+
this.itemIndex = 0;
|
17
|
+
// measurements
|
18
|
+
this.getColumnWidth();
|
19
|
+
this.getRowHeight();
|
20
|
+
// set cols
|
21
|
+
this.cols = Math.floor( this.isotope.size.innerWidth / this.columnWidth );
|
22
|
+
this.cols = Math.max( this.cols, 1 );
|
23
|
+
};
|
24
|
+
|
25
|
+
CellsByRow.prototype._getItemLayoutPosition = function( item ) {
|
26
|
+
item.getSize();
|
27
|
+
var col = this.itemIndex % this.cols;
|
28
|
+
var row = Math.floor( this.itemIndex / this.cols );
|
29
|
+
// center item within cell
|
30
|
+
var x = ( col + 0.5 ) * this.columnWidth - item.size.outerWidth / 2;
|
31
|
+
var y = ( row + 0.5 ) * this.rowHeight - item.size.outerHeight / 2;
|
32
|
+
this.itemIndex++;
|
33
|
+
return { x: x, y: y };
|
34
|
+
};
|
35
|
+
|
36
|
+
CellsByRow.prototype._getContainerSize = function() {
|
37
|
+
return {
|
38
|
+
height: Math.ceil( this.itemIndex / this.cols ) * this.rowHeight
|
39
|
+
};
|
40
|
+
};
|
41
|
+
|
42
|
+
return CellsByRow;
|
43
|
+
|
44
|
+
}
|
45
|
+
|
46
|
+
if ( typeof define === 'function' && define.amd ) {
|
47
|
+
// AMD
|
48
|
+
define( [
|
49
|
+
'isotope/js/layout-mode'
|
50
|
+
],
|
51
|
+
cellsByRowDefinition );
|
52
|
+
} else {
|
53
|
+
// browser global
|
54
|
+
cellsByRowDefinition(
|
55
|
+
window.Isotope.LayoutMode
|
56
|
+
);
|
57
|
+
}
|
58
|
+
|
59
|
+
})( window );
|
@@ -0,0 +1,65 @@
|
|
1
|
+
/*!
|
2
|
+
* fitColumns layout mode for Isotope
|
3
|
+
* http://isotope.metafizzy.co
|
4
|
+
*/
|
5
|
+
|
6
|
+
( function( window ) {
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
function fitColumnsDefinition( LayoutMode ) {
|
11
|
+
|
12
|
+
var FitColumns = LayoutMode.create('fitColumns');
|
13
|
+
|
14
|
+
FitColumns.prototype._resetLayout = function() {
|
15
|
+
this.x = 0;
|
16
|
+
this.y = 0;
|
17
|
+
this.maxX = 0;
|
18
|
+
};
|
19
|
+
|
20
|
+
FitColumns.prototype._getItemLayoutPosition = function( item ) {
|
21
|
+
item.getSize();
|
22
|
+
|
23
|
+
// if this element cannot fit in the current row
|
24
|
+
if ( this.y !== 0 && item.size.outerHeight + this.y > this.isotope.size.innerHeight ) {
|
25
|
+
this.y = 0;
|
26
|
+
this.x = this.maxX;
|
27
|
+
}
|
28
|
+
|
29
|
+
var position = {
|
30
|
+
x: this.x,
|
31
|
+
y: this.y
|
32
|
+
};
|
33
|
+
|
34
|
+
this.maxX = Math.max( this.maxX, this.x + item.size.outerWidth );
|
35
|
+
this.y += item.size.outerHeight;
|
36
|
+
|
37
|
+
return position;
|
38
|
+
};
|
39
|
+
|
40
|
+
FitColumns.prototype._getContainerSize = function() {
|
41
|
+
return { width: this.maxX };
|
42
|
+
};
|
43
|
+
|
44
|
+
FitColumns.prototype.needsResizeLayout = function() {
|
45
|
+
return this.needsVerticalResizeLayout();
|
46
|
+
};
|
47
|
+
|
48
|
+
return FitColumns;
|
49
|
+
|
50
|
+
}
|
51
|
+
|
52
|
+
if ( typeof define === 'function' && define.amd ) {
|
53
|
+
// AMD
|
54
|
+
define( [
|
55
|
+
'isotope/js/layout-mode'
|
56
|
+
],
|
57
|
+
fitColumnsDefinition );
|
58
|
+
} else {
|
59
|
+
// browser global
|
60
|
+
fitColumnsDefinition(
|
61
|
+
window.Isotope.LayoutMode
|
62
|
+
);
|
63
|
+
}
|
64
|
+
|
65
|
+
})( window );
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/*!
|
2
|
+
* horizontal layout mode for Isotope
|
3
|
+
* http://isotope.metafizzy.co
|
4
|
+
*/
|
5
|
+
|
6
|
+
( function( window ) {
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
function horizontalDefinition( LayoutMode ) {
|
11
|
+
|
12
|
+
var Horizontal = LayoutMode.create( 'horizontal', {
|
13
|
+
verticalAlignment: 0
|
14
|
+
});
|
15
|
+
|
16
|
+
Horizontal.prototype._resetLayout = function() {
|
17
|
+
this.x = 0;
|
18
|
+
};
|
19
|
+
|
20
|
+
Horizontal.prototype._getItemLayoutPosition = function( item ) {
|
21
|
+
item.getSize();
|
22
|
+
var y = ( this.isotope.size.innerHeight - item.size.outerHeight ) *
|
23
|
+
this.options.verticalAlignment;
|
24
|
+
var x = this.x;
|
25
|
+
this.x += item.size.outerWidth;
|
26
|
+
return { x: x, y: y };
|
27
|
+
};
|
28
|
+
|
29
|
+
Horizontal.prototype._getContainerSize = function() {
|
30
|
+
return { width: this.x };
|
31
|
+
};
|
32
|
+
|
33
|
+
Horizontal.prototype.needsResizeLayout = function() {
|
34
|
+
return this.needsVerticalResizeLayout();
|
35
|
+
};
|
36
|
+
|
37
|
+
return Horizontal;
|
38
|
+
|
39
|
+
}
|
40
|
+
|
41
|
+
if ( typeof define === 'function' && define.amd ) {
|
42
|
+
// AMD
|
43
|
+
define( [
|
44
|
+
'isotope/js/layout-mode'
|
45
|
+
],
|
46
|
+
horizontalDefinition );
|
47
|
+
} else {
|
48
|
+
// browser global
|
49
|
+
horizontalDefinition(
|
50
|
+
window.Isotope.LayoutMode
|
51
|
+
);
|
52
|
+
}
|
53
|
+
|
54
|
+
})( window );
|