From 15454eb503bda8ffa9579e08ebe3f3f7114b7643 Mon Sep 17 00:00:00 2001
From: Clement Ho <ClemMakesApps@gmail.com>
Date: Wed, 7 Dec 2016 12:51:25 -0600
Subject: [PATCH] Add ability to search for filter dropdowns without filter
 symbol

---
 .../filtered_search/dropdown_assignee.js.es6      | 15 +++++++++++++++
 .../filtered_search/dropdown_author.js.es6        | 11 +++++++++--
 .../filtered_search/dropdown_label.js.es6         |  8 ++++++--
 .../filtered_search/dropdown_milestone.js.es6     |  9 +++++++--
 4 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/app/assets/javascripts/filtered_search/dropdown_assignee.js.es6 b/app/assets/javascripts/filtered_search/dropdown_assignee.js.es6
index e791de5ad41..63fbe30ee84 100644
--- a/app/assets/javascripts/filtered_search/dropdown_assignee.js.es6
+++ b/app/assets/javascripts/filtered_search/dropdown_assignee.js.es6
@@ -23,6 +23,21 @@
       super.renderContent();
       droplab.setData(this.hookId, '/autocomplete/users.json?search=&per_page=20&active=true&project_id=2&group_id=&skip_ldap=&todo_filter=&todo_state_filter=&current_user=true&push_code_to_protected_branches=&author_id=&skip_users=');
     }
+
+    filterMethod(item, query) {
+      const { value } = gl.FilteredSearchTokenizer.getLastTokenObject(query);
+      const valueWithoutColon = value.slice(1).toLowerCase();
+      const valueWithoutPrefix = valueWithoutColon.slice(1);
+
+      const username = item.username.toLowerCase();
+      const name = item.name.toLowerCase();
+
+      const noUsernameMatch = username.indexOf(valueWithoutPrefix) === -1 && username.indexOf(valueWithoutColon) === -1;
+      const noNameMatch = name.indexOf(valueWithoutColon) === -1;
+
+      item.droplab_hidden = noUsernameMatch && noNameMatch;
+      return item;
+    }
   }
 
   global.DropdownAssignee = DropdownAssignee;
diff --git a/app/assets/javascripts/filtered_search/dropdown_author.js.es6 b/app/assets/javascripts/filtered_search/dropdown_author.js.es6
index 64c310ba7ad..37e2e80533b 100644
--- a/app/assets/javascripts/filtered_search/dropdown_author.js.es6
+++ b/app/assets/javascripts/filtered_search/dropdown_author.js.es6
@@ -22,9 +22,16 @@
 
     filterMethod(item, query) {
       const { value } = gl.FilteredSearchTokenizer.getLastTokenObject(query);
-      const valueWithoutPrefix = value.slice(1);
+      const valueWithoutColon = value.slice(1).toLowerCase();
+      const valueWithoutPrefix = valueWithoutColon.slice(1);
 
-      item.droplab_hidden = item['username'].indexOf(valueWithoutPrefix) === -1;
+      const username = item.username.toLowerCase();
+      const name = item.name.toLowerCase();
+
+      const noUsernameMatch = username.indexOf(valueWithoutPrefix) === -1 && username.indexOf(valueWithoutColon) === -1;
+      const noNameMatch = name.indexOf(valueWithoutColon) === -1;
+
+      item.droplab_hidden = noUsernameMatch && noNameMatch;
       return item;
     }
   }
diff --git a/app/assets/javascripts/filtered_search/dropdown_label.js.es6 b/app/assets/javascripts/filtered_search/dropdown_label.js.es6
index c5493f7a887..e2c1305597a 100644
--- a/app/assets/javascripts/filtered_search/dropdown_label.js.es6
+++ b/app/assets/javascripts/filtered_search/dropdown_label.js.es6
@@ -27,9 +27,13 @@
 
     filterMethod(item, query) {
       const { value } = gl.FilteredSearchTokenizer.getLastTokenObject(query);
-      const valueWithoutPrefix = value.slice(1);
+      const valueWithoutColon = value.slice(1).toLowerCase();
+      const valueWithoutPrefix = valueWithoutColon.slice(1);
 
-      item.droplab_hidden = item['title'].indexOf(valueWithoutPrefix) === -1;
+      const title = item.title.toLowerCase();
+      const noTitleMatch = title.indexOf(valueWithoutPrefix) === -1 && title.indexOf(valueWithoutColon) === -1;
+
+      item.droplab_hidden = noTitleMatch;
       return item;
     }
   }
diff --git a/app/assets/javascripts/filtered_search/dropdown_milestone.js.es6 b/app/assets/javascripts/filtered_search/dropdown_milestone.js.es6
index 8317ce5824c..cd185d31917 100644
--- a/app/assets/javascripts/filtered_search/dropdown_milestone.js.es6
+++ b/app/assets/javascripts/filtered_search/dropdown_milestone.js.es6
@@ -27,9 +27,14 @@
 
     filterMethod(item, query) {
       const { value } = gl.FilteredSearchTokenizer.getLastTokenObject(query);
-      const valueWithoutPrefix = value.slice(1);
+      const valueWithoutColon = value.slice(1).toLowerCase();
+      const valueWithoutPrefix = valueWithoutColon.slice(1);
 
-      item.droplab_hidden = item['title'].indexOf(valueWithoutPrefix) === -1;
+      const title = item.title.toLowerCase();
+
+      const noTitleMatch = title.indexOf(valueWithoutPrefix) === -1 && title.indexOf(valueWithoutColon) === -1;
+
+      item.droplab_hidden = noTitleMatch;
       return item;
     }
   }
-- 
2.30.9