diff --git a/jquery.isotope.js b/jquery.isotope.js index 7d5631c..975b32d 100644 --- a/jquery.isotope.js +++ b/jquery.isotope.js @@ -565,26 +565,39 @@ // used on all the filtered atoms _sort : function() { - - var sortBy = this.options.sortBy, - getSorter = this._getSorter, - sortDir = this.options.sortAscending ? 1 : -1, - sortFn = function( alpha, beta ) { - var a = getSorter( alpha, sortBy ), - b = getSorter( beta, sortBy ); - // fall back to original order if data matches - if ( a === b && sortBy !== 'original-order') { - a = getSorter( alpha, 'original-order' ); - b = getSorter( beta, 'original-order' ); + var sortBy = $.map(this.options.sortBy.split(','), $.trim) + , getSorter = this._getSorter + , sortDir = this.options.sortAscending ? 1 : -1 + , len = sortBy.length + , sortFunc = function (a, b){ + isNaN(a) && (a = a.toLowerCase()); + isNaN(b) && (b = b.toLowerCase()); + return ( a > b ) ? 1 : ( a < b ) ? -1 : 0; } - return ( ( a > b ) ? 1 : ( a < b ) ? -1 : 0 ) * sortDir; - }; - - this.$filteredAtoms.sort( sortFn ); + ; + this.$filteredAtoms.sort(function(alpha, beta){ + var sort, comparison = 0, i = 0 + , a , b + ; + if (sortBy[0] === 'original-order') { + a = getSorter(alpha, 'original-order' ); + b = getSorter(beta, 'original-order' ); + return sortFunc(a, b) * sortDir; + } else { + while(comparison == 0 && i < len){ + sort = sortBy[i], + a = getSorter(alpha, sort), + b = getSorter(beta, sort); + comparison = sortFunc(a, b); + i+=1; + } + return comparison * sortDir; + } + }); }, - _getSorter : function( elem, sortBy ) { - return $.data( elem, 'isotope-sort-data' )[ sortBy ]; + _getSorter : function( elem, sortBy ) { + return $.data( elem, 'isotope-sort-data' )[ sortBy ]; }, // ====================== Layout Helpers ======================