Browse Source

Fix LayoutMode._getMeasurement and Masonry.measureColumns

need this.items to match this.filteredItems
Fixes #593
tag v2.0.0-beta.5
pull/726/head v2.0.0-beta.5
David DeSandro 11 years ago
parent
commit
36d1684965
  1. 2
      bower.json
  2. 2
      js/isotope.js
  3. 6
      js/layout-mode.js
  4. 9
      js/layout-modes/masonry.js
  5. 10
      test/index.html
  6. 39
      test/masonry-measure-columns.js
  7. 4
      test/tests.css

2
bower.json

@ -1,6 +1,6 @@
{
"name": "isotope",
"version": "2.0.0-beta.4",
"version": "2.0.0-beta.5",
"description": "Filter and sort magical layouts",
"main": [
"js/item.js",

2
js/isotope.js

@ -1,5 +1,5 @@
/*!
* Isotope v2.0.0-beta.4
* Isotope v2.0.0-beta.5
* Magical sorting and filtering layouts
* http://isotope.metafizzy.co
*/

6
js/layout-mode.js

@ -12,7 +12,6 @@ function layoutModeDefinition( getSize, Outlayer ) {
// link properties
if ( isotope ) {
this.options = isotope.options[ this.namespace ];
this._getMeasurement = isotope._getMeasurement;
this.element = isotope.element;
this.items = isotope.filteredItems;
this.size = isotope.size;
@ -63,6 +62,11 @@ function layoutModeDefinition( getSize, Outlayer ) {
// ----- measurements ----- //
LayoutMode.prototype._getMeasurement = function() {
console.log('getting measurement', this.options.columnWidth );
this.isotope._getMeasurement.apply( this, arguments );
};
LayoutMode.prototype.getColumnWidth = function() {
this.getSegmentSize( 'column', 'Width' );
};

9
js/layout-modes/masonry.js

@ -28,6 +28,7 @@ function masonryDefinition( LayoutMode, Masonry ) {
// save on to these methods
var _getElementOffset = MasonryMode.prototype._getElementOffset;
var layout = MasonryMode.prototype.layout;
var _getMeasurement = MasonryMode.prototype._getMeasurement;
// sub-class Masonry
extend( MasonryMode.prototype, Masonry.prototype );
@ -35,6 +36,14 @@ function masonryDefinition( LayoutMode, Masonry ) {
// set back, as it was overwritten by Masonry
MasonryMode.prototype._getElementOffset = _getElementOffset;
MasonryMode.prototype.layout = layout;
MasonryMode.prototype._getMeasurement = _getMeasurement;
var measureColumns = MasonryMode.prototype.measureColumns;
MasonryMode.prototype.measureColumns = function() {
// set items, used if measuring first item
this.items = this.isotope.filteredItems;
measureColumns.call( this );
};
return MasonryMode;
}

10
test/index.html

@ -36,6 +36,7 @@
<script src="filtering.js"></script>
<script src="layout-complete.js"></script>
<script src="get-segment-size.js"></script>
<script src="masonry-measure-columns.js"></script>
</head>
<body>
@ -99,5 +100,14 @@
<div class="item"></div>
</div>
<h2>Masonry</h2>
<div id="masonry-measure-columns" class="container">
<div class="grid-sizer"></div>
<div class="item a">a</div>
<div class="item b">b</div>
<div class="item c">c</div>
</div>
</body>
</html>

39
test/masonry-measure-columns.js

@ -0,0 +1,39 @@
( function() {
'use strict';
test( 'Masonry.measureColumns', function() {
var iso = new Isotope( '#masonry-measure-columns', {
itemSelector: '.item',
layoutMode: 'masonry',
transitionDuration: 0
});
var msnryMode = iso.modes.masonry;
equal( msnryMode.columnWidth, 60, 'after layout, measured first element' );
iso.modes.masonry._getMeasurement( 'columnWidth', 'outerWidth' );
equal( msnryMode.columnWidth, 0, '_getMeasurement, no option' );
iso.modes.masonry.measureColumns();
equal( msnryMode.columnWidth, 60, 'measureColumns, no option' );
iso.arrange({ filter: '.c' });
iso.modes.masonry.measureColumns();
equal( msnryMode.columnWidth, 60, 'measureColumns after filter first item, no option' );
iso.arrange({
masonry: { columnWidth: 80 }
});
equal( msnryMode.columnWidth, 80, '.arrange() masonry.columnWidth option set number' );
iso.arrange({
masonry: { columnWidth: '.grid-sizer' }
});
equal( msnryMode.columnWidth, 70, '.arrange() masonry.columnWidth option set selector string' );
});
})();

4
test/tests.css

@ -70,3 +70,7 @@ body {
height: 40px;
margin-bottom: 7px;
}
#masonry-measure-columns .grid-sizer {
width: 70px;
}

Loading…
Cancel
Save