Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClement Ho <ClemMakesApps@gmail.com>2016-12-14 08:30:28 +0300
committerClement Ho <ClemMakesApps@gmail.com>2017-01-10 01:01:25 +0300
commit1f7659912ca73f6774c4f1b66ad4e5e48cc51068 (patch)
tree83e354249e77a501b9c57d799fe3af74e3568384 /app/assets
parent2461b9b635501fc9ae98d246e0dd6d23af555351 (diff)
Add jasmine tests to dropdown utils
Diffstat (limited to 'app/assets')
-rw-r--r--app/assets/javascripts/filtered_search/dropdown_utils.js.es668
1 files changed, 68 insertions, 0 deletions
diff --git a/app/assets/javascripts/filtered_search/dropdown_utils.js.es6 b/app/assets/javascripts/filtered_search/dropdown_utils.js.es6
new file mode 100644
index 00000000000..3837b020fd3
--- /dev/null
+++ b/app/assets/javascripts/filtered_search/dropdown_utils.js.es6
@@ -0,0 +1,68 @@
+(() => {
+ class DropdownUtils {
+ static getEscapedText(text) {
+ let escapedText = text;
+ const hasSpace = text.indexOf(' ') !== -1;
+ const hasDoubleQuote = text.indexOf('"') !== -1;
+
+ // Encapsulate value with quotes if it has spaces
+ // Known side effect: values's with both single and double quotes
+ // won't escape properly
+ if (hasSpace) {
+ if (hasDoubleQuote) {
+ escapedText = `'${text}'`;
+ } else {
+ // Encapsulate singleQuotes or if it hasSpace
+ escapedText = `"${text}"`;
+ }
+ }
+
+ return escapedText;
+ }
+
+ static filterWithSymbol(filterSymbol, item, query) {
+ const updatedItem = item;
+ const { value } = gl.FilteredSearchTokenizer.getLastTokenObject(query);
+ const valueWithoutColon = value.slice(1).toLowerCase();
+ const prefix = valueWithoutColon[0];
+ const valueWithoutPrefix = valueWithoutColon.slice(1);
+
+ const title = updatedItem.title.toLowerCase();
+
+ // Eg. filterSymbol = ~ for labels
+ const matchWithoutPrefix =
+ prefix === filterSymbol && title.indexOf(valueWithoutPrefix) !== -1;
+ const match = title.indexOf(valueWithoutColon) !== -1;
+
+ updatedItem.droplab_hidden = !match && !matchWithoutPrefix;
+ return updatedItem;
+ }
+
+ static filterMethod(item, query) {
+ const updatedItem = item;
+ const { value } = gl.FilteredSearchTokenizer.getLastTokenObject(query);
+
+ if (value === '') {
+ updatedItem.droplab_hidden = false;
+ } else {
+ updatedItem.droplab_hidden = updatedItem.hint.indexOf(value) === -1;
+ }
+
+ return updatedItem;
+ }
+
+ static setDataValueIfSelected(selected) {
+ const dataValue = selected.getAttribute('data-value');
+
+ if (dataValue) {
+ gl.FilteredSearchDropdownManager.addWordToInput(dataValue);
+ }
+
+ // Return boolean based on whether it was set
+ return dataValue !== null;
+ }
+ }
+
+ window.gl = window.gl || {};
+ gl.DropdownUtils = DropdownUtils;
+})();