summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/filtered_search
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/filtered_search')
-rw-r--r--app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue12
-rw-r--r--app/assets/javascripts/filtered_search/dropdown_emoji.js1
-rw-r--r--app/assets/javascripts/filtered_search/droplab/drop_down.js4
-rw-r--r--app/assets/javascripts/filtered_search/droplab/hook_button.js1
-rw-r--r--app/assets/javascripts/filtered_search/droplab/hook_input.js1
-rw-r--r--app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js5
-rw-r--r--app/assets/javascripts/filtered_search/visual_token_value.js2
7 files changed, 20 insertions, 6 deletions
diff --git a/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue b/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue
index 4c2f55fd174..679c8caffdb 100644
--- a/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue
+++ b/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue
@@ -69,14 +69,18 @@ export default {
</script>
<template>
<div>
- <div v-if="!isLocalStorageAvailable" ref="localStorageNote" class="dropdown-info-note">
+ <div
+ v-if="!isLocalStorageAvailable"
+ data-testid="local-storage-note"
+ class="dropdown-info-note"
+ >
{{ __('This feature requires local storage to be enabled') }}
</div>
<ul v-else-if="hasItems">
<li
v-for="(item, index) in processedItems"
- ref="dropdownItem"
:key="`processed-items-${index}`"
+ data-testid="dropdown-item"
>
<button
type="button"
@@ -100,7 +104,7 @@ export default {
<li class="divider"></li>
<li>
<button
- ref="clearButton"
+ data-testid="clear-button"
type="button"
class="filtered-search-history-clear-button"
@click="onRequestClearRecentSearches($event)"
@@ -109,7 +113,7 @@ export default {
</button>
</li>
</ul>
- <div v-else ref="dropdownNote" class="dropdown-info-note">
+ <div v-else data-testid="dropdown-note" class="dropdown-info-note">
{{ __("You don't have any recent searches") }}
</div>
</div>
diff --git a/app/assets/javascripts/filtered_search/dropdown_emoji.js b/app/assets/javascripts/filtered_search/dropdown_emoji.js
index 5adc074b3ce..aeea66bf51c 100644
--- a/app/assets/javascripts/filtered_search/dropdown_emoji.js
+++ b/app/assets/javascripts/filtered_search/dropdown_emoji.js
@@ -75,6 +75,7 @@ export default class DropdownEmoji extends FilteredSearchDropdown {
const name = valueElement.innerText;
const emojiTag = this.glEmojiTag(name);
const emojiElement = dropdownItem.querySelector('gl-emoji');
+ // eslint-disable-next-line no-unsanitized/property
emojiElement.outerHTML = emojiTag;
}
});
diff --git a/app/assets/javascripts/filtered_search/droplab/drop_down.js b/app/assets/javascripts/filtered_search/droplab/drop_down.js
index 398a7b26677..e7edc678773 100644
--- a/app/assets/javascripts/filtered_search/droplab/drop_down.js
+++ b/app/assets/javascripts/filtered_search/droplab/drop_down.js
@@ -107,7 +107,7 @@ class DropDown {
}
const renderableList = this.list.querySelector('ul[data-dynamic]') || this.list;
-
+ // eslint-disable-next-line no-unsanitized/property
renderableList.innerHTML = children.join('');
const listEvent = new CustomEvent('render.dl', {
@@ -121,7 +121,7 @@ class DropDown {
renderChildren(data) {
const html = utils.template(this.templateString, data);
const template = document.createElement('div');
-
+ // eslint-disable-next-line no-unsanitized/property
template.innerHTML = html;
DropDown.setImagesSrc(template);
template.firstChild.style.display = data.droplab_hidden ? 'none' : 'block';
diff --git a/app/assets/javascripts/filtered_search/droplab/hook_button.js b/app/assets/javascripts/filtered_search/droplab/hook_button.js
index c51d6167fa3..805905e7750 100644
--- a/app/assets/javascripts/filtered_search/droplab/hook_button.js
+++ b/app/assets/javascripts/filtered_search/droplab/hook_button.js
@@ -42,6 +42,7 @@ class HookButton extends Hook {
}
restoreInitialState() {
+ // eslint-disable-next-line no-unsanitized/property
this.list.list.innerHTML = this.list.initialState;
}
diff --git a/app/assets/javascripts/filtered_search/droplab/hook_input.js b/app/assets/javascripts/filtered_search/droplab/hook_input.js
index c523dae347f..32dfe0372bb 100644
--- a/app/assets/javascripts/filtered_search/droplab/hook_input.js
+++ b/app/assets/javascripts/filtered_search/droplab/hook_input.js
@@ -97,6 +97,7 @@ class HookInput extends Hook {
}
restoreInitialState() {
+ // eslint-disable-next-line no-unsanitized/property
this.list.list.innerHTML = this.list.initialState;
}
diff --git a/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js b/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js
index 7143cb50ea6..0c01220a7be 100644
--- a/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js
+++ b/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js
@@ -122,6 +122,7 @@ export default class FilteredSearchVisualTokens {
const hasOperator = Boolean(operator);
if (value) {
+ // eslint-disable-next-line no-unsanitized/property
li.innerHTML = FilteredSearchVisualTokens.createVisualTokenElementHTML({
canEdit,
uppercaseTokenName,
@@ -138,6 +139,7 @@ export default class FilteredSearchVisualTokens {
operatorHTML = '<div class="operator"></div>';
}
+ // eslint-disable-next-line no-unsanitized/property
li.innerHTML = nameHTML + operatorHTML;
}
@@ -160,6 +162,8 @@ export default class FilteredSearchVisualTokens {
if (!isLastVisualTokenValid && lastVisualToken.classList.contains('filtered-search-token')) {
const name = FilteredSearchVisualTokens.getLastTokenPartial();
const operator = FilteredSearchVisualTokens.getLastTokenOperator();
+
+ // eslint-disable-next-line no-unsanitized/property
lastVisualToken.innerHTML = FilteredSearchVisualTokens.createVisualTokenElementHTML({
hasOperator: Boolean(operator),
});
@@ -293,6 +297,7 @@ export default class FilteredSearchVisualTokens {
const button = lastVisualToken.querySelector('.selectable');
const valueContainer = lastVisualToken.querySelector('.value-container');
button.removeChild(valueContainer);
+ // eslint-disable-next-line no-unsanitized/property
lastVisualToken.innerHTML = button.innerHTML;
} else if (operator) {
lastVisualToken.removeChild(operator);
diff --git a/app/assets/javascripts/filtered_search/visual_token_value.js b/app/assets/javascripts/filtered_search/visual_token_value.js
index 707add10009..0d144398531 100644
--- a/app/assets/javascripts/filtered_search/visual_token_value.js
+++ b/app/assets/javascripts/filtered_search/visual_token_value.js
@@ -47,6 +47,7 @@ export default class VisualTokenValue {
/* eslint-disable no-param-reassign */
tokenValueContainer.dataset.originalValue = tokenValue;
+ // eslint-disable-next-line no-unsanitized/property
tokenValueElement.innerHTML = `
<img class="avatar s20" src="${user.avatar_url}" alt="">
${escape(user.name)}
@@ -152,6 +153,7 @@ export default class VisualTokenValue {
}
container.dataset.originalValue = value;
+ // eslint-disable-next-line no-unsanitized/property
element.innerHTML = Emoji.glEmojiTag(value);
});
}