From 04c4fe9633cb1c2c2b74761b6efd5fd5754463c4 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 11 Jun 2016 15:09:08 +1000 Subject: [PATCH] Fixes logic error in filter search The search was using !$.inArray when the expression should be $.inArray === -1 since it returns the index of the value in the array. Also tidied up the code so it is easier to read. Fixes #1918 --- modules/system/assets/ui/js/filter.js | 12 +++++------- modules/system/assets/ui/storm-min.js | 7 +++---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/modules/system/assets/ui/js/filter.js b/modules/system/assets/ui/js/filter.js index 2bd54e6ec..2bf876415 100644 --- a/modules/system/assets/ui/js/filter.js +++ b/modules/system/assets/ui/js/filter.js @@ -302,15 +302,13 @@ * Ensure any active items do not appear in the search results */ if (items.active.length) { - var compareFunc = function(a, b) { return a.id == b.id }, - inArrayFunc = function(elem, array, testFunc) { - var i = array.length - do { if (i-- === 0) return i } while (testFunc(array[i], elem)) - return i - } + var activeIds = [] + $.each(items.active, function (key, obj) { + activeIds.push(obj.id) + }) filtered = $.grep(available, function(item) { - return !inArrayFunc(item, items.active, compareFunc) + return $.inArray(item.id, activeIds) === -1 }) } else { diff --git a/modules/system/assets/ui/storm-min.js b/modules/system/assets/ui/storm-min.js index 8edc55a42..449989279 100644 --- a/modules/system/assets/ui/storm-min.js +++ b/modules/system/assets/ui/storm-min.js @@ -2974,10 +2974,9 @@ if(!this.scopeValues[this.activeScopeName]) return var self=this,filtered=[],items=this.scopeValues[scopeName] -if(items.active.length){var compareFunc=function(a,b){return a.id==b.id},inArrayFunc=function(elem,array,testFunc){var i=array.length -do{if(i--===0)return i}while(testFunc(array[i],elem)) -return i} -filtered=$.grep(available,function(item){return!inArrayFunc(item,items.active,compareFunc)})} +if(items.active.length){var activeIds=[] +$.each(items.active,function(key,obj){activeIds.push(obj.id)}) +filtered=$.grep(available,function(item){return $.inArray(item.id,activeIds)===-1})} else{filtered=available} var container=$('#controlFilterPopover .filter-items > ul').empty() self.addItemsToListElement(container,filtered)}