From 8e2650024c44e25302966f219b19c27effaaba0a Mon Sep 17 00:00:00 2001 From: David DeSandro Date: Sun, 1 Dec 2013 15:59:09 -0500 Subject: [PATCH] remove elements from filteredItems as well --- js/isotope.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/js/isotope.js b/js/isotope.js index 15929be..666a761 100644 --- a/js/isotope.js +++ b/js/isotope.js @@ -40,6 +40,48 @@ var getText = docElem.textContent ? return elem.innerText; }; +var objToString = Object.prototype.toString; +function isArray( obj ) { + return objToString.call( obj ) === '[object Array]'; +} + +// index of helper cause IE8 +var indexOf = Array.prototype.indexOf ? function( ary, obj ) { + return ary.indexOf( obj ); + } : function( ary, obj ) { + for ( var i=0, len = ary.length; i < len; i++ ) { + if ( ary[i] === obj ) { + return i; + } + } + return -1; + }; + +// turn element or nodeList into an array +function makeArray( obj ) { + var ary = []; + if ( isArray( obj ) ) { + // use object if already an array + ary = obj; + } else if ( obj && typeof obj.length === 'number' ) { + // convert nodeList to array + for ( var i=0, len = obj.length; i < len; i++ ) { + ary.push( obj[i] ); + } + } else { + // array of single index + ary.push( obj ); + } + return ary; +} + +function removeFrom( obj, ary ) { + var index = indexOf( ary, obj ); + if ( index !== -1 ) { + ary.splice( index, 1 ); + } +} + // -------------------------- isotopeDefinition -------------------------- // // used for AMD definition and requires @@ -144,7 +186,7 @@ function isotopeDefinition( Outlayer, getSize, matchesSelector, Item, LayoutMode // set any options pass this.option( opts ); this._getIsInstant(); - // where the magic happens, amirite + // filter, sort, and layout this.filteredItems = this._filter( this.items ); this._sort(); this._layout(); @@ -412,6 +454,26 @@ function isotopeDefinition( Outlayer, getSize, matchesSelector, Item, LayoutMode this._mode().resize(); }; + // -------------------------- remove -------------------------- // + + var _remove = Isotope.prototype.remove; + Isotope.prototype.remove = function( elems ) { + elems = makeArray( elems ); + var removeItems = this.getItems( elems ); + // do regular thing + _remove.call( this, elems ); + // bail if no items to remove + if ( !removeItems || !removeItems.length ) { + return; + } + // remove elems from filteredItems + for ( var i=0, len = removeItems.length; i < len; i++ ) { + var item = removeItems[i]; + // remove item from collection + removeFrom( item, this.filteredItems ); + } + }; + // ----- ----- // return Isotope;