{"version":3,"sources":["webpack:///./filtered_search/event_hub.js","webpack:///./filtered_search/components/recent_searches_dropdown_content.vue?53f7","webpack:///filtered_search/components/recent_searches_dropdown_content.vue","webpack:///./filtered_search/components/recent_searches_dropdown_content.vue","webpack:///./filtered_search/components/recent_searches_dropdown_content.vue?dc03","webpack:///./filtered_search/recent_searches_root.js","webpack:///./filtered_search/stores/recent_searches_store.js","webpack:///./filtered_search/services/recent_searches_service_error.js","webpack:///./filtered_search/services/recent_searches_service.js","webpack:///./filtered_search/filtered_search_manager.js","webpack:///./issue_status_select.js","webpack:///./subscription_select.js","webpack:///./pages/constants.js","webpack:///./pages/search/init_filtered_search.js","webpack:///./issuable_bulk_update_sidebar.js","webpack:///./issuable_index.js","webpack:///./pages/projects/constants.js","webpack:///./pages/projects/merge_requests/index/index.js"],"names":["event_hub","vue_esm","components_recent_searches_dropdown_contentvue_type_script_lang_js","name","props","items","type","Array","required","isLocalStorageAvailable","Boolean","default","allowedKeys","computed","processedItems","_this","this","map","item","_FilteredSearchTokeni","filtered_search_tokenizer","processTokens","tokens","searchToken","text","token","prefix","key","suffix","symbol","value","hasItems","length","methods","onItemActivated","$emit","onRequestClearRecentSearches","e","stopPropagation","recent_searches_dropdown_content","Object","componentNormalizer","_vm","_h","$createElement","_c","_self","_l","index","staticClass","attrs","on","click","$event","_v","_s","recent_searches_root","RecentSearchesRoot","recentSearchesStore","recentSearchesService","wrapperElement","_classCallCheck","store","service","bindEvents","render","onRequestClearRecentSearchesWrapper","bind","$on","$off","state","vm","el","components","RecentSearchesDropdownContent","data","template","resultantSearches","setRecentSearches","save","unbindEvents","$destroy","recent_searches_store","RecentSearchesStore","initialState","arguments","undefined","recent_searches_store_classCallCheck","assign","recentSearches","newSearch","concat","trimmedSearches","search","trim","underscore_default","a","uniq","slice","RecentSearchesServiceError","message","recent_searches_service_error_classCallCheck","prototype","Error","recent_searches_service_error","recent_searches_service","RecentSearchesService","localStorageKey","recent_searches_service_classCallCheck","isAvailable","error","Promise","reject","input","window","localStorage","getItem","searches","JSON","parse","err","resolve","setItem","stringify","accessor","isLocalStorageAccessSafe","filtered_search_manager_FilteredSearchManager","FilteredSearchManager","_ref","page","_ref$isGroup","isGroup","_ref$isGroupAncestor","isGroupAncestor","_ref$isGroupDecendent","isGroupDecendent","_ref$filteredSearchTo","filteredSearchTokenKeys","filtered_search_token_keys","_ref$stateFiltersSele","stateFiltersSelector","filtered_search_manager_classCallCheck","states","container","filteredSearchInput","querySelector","filteredSearchInputForm","form","clearSearchButton","tokensContainer","recentsStorageKeyNames","issues","merge_requests","getKeys","searchHistoryDropdownElement","document","recentSearchesKey","dataset","fullPath","fetchingRecentSearchesPromise","fetch","catch","flash","then","tokenizer","dropdownManager","filtered_search_dropdown_manager","baseEndpoint","getAttribute","recentSearchesRoot","init","loadSearchParamsFromURL","setDropdown","cleanupWrapper","cleanup","addEventListener","removeEventListener","destroy","_this2","stateFilters","searchStateWrapper","searchState","applyToStateFilters","filterEl","_this3","callback","_this4","querySelectorAll","forEach","indexOf","handleFormSubmit","setDropdownWrapper","toggleClearSearchButtonWrapper","toggleClearSearchButton","handleInputPlaceholderWrapper","handleInputPlaceholder","handleInputVisualTokenWrapper","handleInputVisualToken","checkForEnterWrapper","checkForEnter","onClearSearchWrapper","onClearSearch","checkForBackspaceWrapper","checkForBackspace","call","removeSelectedTokenKeydownWrapper","removeSelectedTokenKeydown","unselectEditTokensWrapper","unselectEditTokens","editTokenWrapper","editToken","tokenChange","addInputContainerFocusWrapper","addInputContainerFocus","removeInputContainerFocusWrapper","removeInputContainerFocus","onrecentSearchesItemSelectedWrapper","onrecentSearchesItemSelected","removeTokenWrapper","removeToken","bindStateEvents","unbindStateEvents","_this5","backspaceCount","keyCode","lastVisualToken","filtered_search_visual_tokens","getLastVisualTokenBeforeInput","_DropdownUtils$getVis","dropdown_utils","getVisualTokenValues","tokenName","tokenValue","canEdit","getLastTokenPartial","removeLastTokenPartial","updateCurrentDropdownOffset","selectionStart","preventDefault","setSelectionRange","activeElements","mapping","currentDropdown","element","isHandledAsync","stopImmediatePropagation","blur","resetDropdowns","destroyDroplab","dom_utils","closest","inputContainer","isElementInFilteredSearch","contains","target","isElementInDynamicFilterDropdown","isElementInStaticFilterDropdown","classList","remove","button","selectToken","removeSelectedToken","isElementInFilterDropdown","isElementTokensContainer","moveInputToTheRight","sanitizedTokenName","textContent","query","getSearchQuery","hasHidden","add","currentPlaceholder","placeholder","clearSearch","_this6","removeElements","children","t","canClearToken","_DropdownUtils$getVis2","push","parentElement","removeChild","_tokenizer$processTok","isLastVisualTokenValid","replace","addFilterVisualToken","fragments","split","inputValues","tokenKey","last","pop","searchTerms","join","addSearchVisualToken","match","_this7","searchQuery","addRecentSearch","urlParams","modifyUrlParams","_this8","common_utils","params","getAllParams","usernameParams","getUsernameParams","hasFilteredSearch","p","keyParam","decodeURIComponent","condition","searchByConditionUrl","sanitizedValue","searchByKeyParam","lastIndexOf","sanitizedKey","quotationsToUse","id","parseInt","saveCurrentSearchQuery","currentTarget","_this9","paths","_tokenizer$processTok2","currentState","searchByConditionKeyValue","toLowerCase","param","searchByKey","underscoredKey","tokenPath","url","encodeURIComponent","sanitized","parameterizedUrl","updateObject","url_utility","usernamesById","attribute","user","username","dropdown","currentDropdownRef","reference","dispatchInputEvent","dispatchEvent","CustomEvent","issueStatusSelect","jquery__WEBPACK_IMPORTED_MODULE_0___default","each","i","fieldName","glDropdown","selectable","toggleLabel","selected","instance","label","$item","find","clicked","options","obj","subscriptionSelect","__webpack_require__","d","__webpack_exports__","FILTERED_SEARCH","MERGE_REQUESTS","ISSUES","_filtered_search_filtered_search_manager__WEBPACK_IMPORTED_MODULE_0__","setup","IssuableBulkUpdateSidebar","initDomElements","initDropdowns","setupBulkUpdateActions","$page","jquery_default","$sidebar","$sidebarInnerContainer","$bulkEditCancelBtn","$bulkEditSubmitBtn","$bulkUpdateEnableBtn","$otherFilters","$checkAllContainer","$issueChecks","$issuesList","$issuableIdsInput","toggleBulkEdit","selectAll","updateFormState","prepForSubmit","labels_select","milestone_select","issue_status_select","subscription_select","issuable_bulk_update_actions","setOriginalDropdownData","noCheckedIssues","toggleSubmitButtonDisabled","updateSelectedIssuableIds","setTimeout","disable","enable","toggleSidebarDisplay","toggleBulkEditButtonDisabled","toggleOtherFiltersDisabled","toggleCheckboxDisplay","val","getCheckedIssueIds","checkAllButtonState","prop","show","toggleClass","$checkedIssues","issuable_index_IssuableIndex","IssuableIndex","pagePrefix","issuable_index_classCallCheck","initBulkUpdate","resetIncomingEmailToken","userCanBulkUpdate","alreadyInitialized","bulkUpdateSidebar","prefixId","issuable_bulk_update_sidebar","$resetToken","axios_utils","put","attr","new_address","focus","locale","ISSUABLE_INDEX","MERGE_REQUEST","ISSUE","_pages_search_init_filtered_search__WEBPACK_IMPORTED_MODULE_3__","_pages_constants__WEBPACK_IMPORTED_MODULE_4__","_issuable_index__WEBPACK_IMPORTED_MODULE_0__","_pages_projects_constants__WEBPACK_IMPORTED_MODULE_5__","_shortcuts_navigation__WEBPACK_IMPORTED_MODULE_1__","_users_select__WEBPACK_IMPORTED_MODULE_2__"],"mappings":"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","file":"pages.projects.merge_requests.index.5a8b83e1.chunk.js","sourcesContent":["import Vue from 'vue';\n\nexport default new Vue();\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./recent_searches_dropdown_content.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./recent_searches_dropdown_content.vue?vue&type=script&lang=js\"","\n\n
\n
\n This feature requires local storage to be enabled\n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n You don't have any recent searches\n
\n
\n\n","import { render, staticRenderFns } from \"./recent_searches_dropdown_content.vue?vue&type=template&id=4d4ee114\"\nimport script from \"./recent_searches_dropdown_content.vue?vue&type=script&lang=js\"\nexport * from \"./recent_searches_dropdown_content.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(!_vm.isLocalStorageAvailable)?_c('div',{staticClass:\"dropdown-info-note\"},[_vm._v(\"\\n This feature requires local storage to be enabled\\n \")]):(_vm.hasItems)?_c('ul',[_vm._l((_vm.processedItems),function(item,index){return _c('li',{key:(\"processed-items-\" + index)},[_c('button',{staticClass:\"filtered-search-history-dropdown-item\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.onItemActivated(item.text)}}},[_c('span',_vm._l((item.tokens),function(token,index){return _c('span',{key:(\"dropdown-token-\" + index),staticClass:\"filtered-search-history-dropdown-token\"},[_c('span',{staticClass:\"name\"},[_vm._v(_vm._s(token.prefix))]),_vm._v(\" \"),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(token.suffix))])])})),_vm._v(\" \"),_c('span',{staticClass:\"filtered-search-history-dropdown-search-token\"},[_vm._v(\"\\n \"+_vm._s(item.searchToken)+\"\\n \")])])])}),_vm._v(\" \"),_c('li',{staticClass:\"divider\"}),_vm._v(\" \"),_c('li',[_c('button',{staticClass:\"filtered-search-history-clear-button\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.onRequestClearRecentSearches($event)}}},[_vm._v(\"\\n Clear recent searches\\n \")])])],2):_c('div',{staticClass:\"dropdown-info-note\"},[_vm._v(\"\\n You don't have any recent searches\\n \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\nimport RecentSearchesDropdownContent from './components/recent_searches_dropdown_content.vue';\nimport eventHub from './event_hub';\n\nclass RecentSearchesRoot {\n constructor(\n recentSearchesStore,\n recentSearchesService,\n wrapperElement,\n ) {\n this.store = recentSearchesStore;\n this.service = recentSearchesService;\n this.wrapperElement = wrapperElement;\n }\n\n init() {\n this.bindEvents();\n this.render();\n }\n\n bindEvents() {\n this.onRequestClearRecentSearchesWrapper = this.onRequestClearRecentSearches.bind(this);\n\n eventHub.$on('requestClearRecentSearches', this.onRequestClearRecentSearchesWrapper);\n }\n\n unbindEvents() {\n eventHub.$off('requestClearRecentSearches', this.onRequestClearRecentSearchesWrapper);\n }\n\n render() {\n const { state } = this.store;\n this.vm = new Vue({\n el: this.wrapperElement,\n components: {\n RecentSearchesDropdownContent,\n },\n data() { return state; },\n template: `\n \n `,\n });\n }\n\n onRequestClearRecentSearches() {\n const resultantSearches = this.store.setRecentSearches([]);\n this.service.save(resultantSearches);\n }\n\n destroy() {\n this.unbindEvents();\n if (this.vm) {\n this.vm.$destroy();\n }\n }\n\n}\n\nexport default RecentSearchesRoot;\n","import _ from 'underscore';\n\nclass RecentSearchesStore {\n constructor(initialState = {}, allowedKeys) {\n this.state = Object.assign({\n isLocalStorageAvailable: true,\n recentSearches: [],\n allowedKeys,\n }, initialState);\n }\n\n addRecentSearch(newSearch) {\n this.setRecentSearches([newSearch].concat(this.state.recentSearches));\n\n return this.state.recentSearches;\n }\n\n setRecentSearches(searches = []) {\n const trimmedSearches = searches.map(search => search.trim());\n this.state.recentSearches = _.uniq(trimmedSearches).slice(0, 5);\n return this.state.recentSearches;\n }\n}\n\nexport default RecentSearchesStore;\n","class RecentSearchesServiceError {\n constructor(message) {\n this.name = 'RecentSearchesServiceError';\n this.message = message || 'Recent Searches Service is unavailable';\n }\n}\n\n// Can't use `extends` for builtin prototypes and get true inheritance yet\nRecentSearchesServiceError.prototype = Error.prototype;\n\nexport default RecentSearchesServiceError;\n","import RecentSearchesServiceError from './recent_searches_service_error';\nimport AccessorUtilities from '../../lib/utils/accessor';\n\nclass RecentSearchesService {\n constructor(localStorageKey = 'issuable-recent-searches') {\n this.localStorageKey = localStorageKey;\n }\n\n fetch() {\n if (!RecentSearchesService.isAvailable()) {\n const error = new RecentSearchesServiceError();\n return Promise.reject(error);\n }\n\n const input = window.localStorage.getItem(this.localStorageKey);\n\n let searches = [];\n if (input && input.length > 0) {\n try {\n searches = JSON.parse(input);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n\n return Promise.resolve(searches);\n }\n\n save(searches = []) {\n if (!RecentSearchesService.isAvailable()) return;\n\n window.localStorage.setItem(this.localStorageKey, JSON.stringify(searches));\n }\n\n static isAvailable() {\n return AccessorUtilities.isLocalStorageAccessSafe();\n }\n}\n\nexport default RecentSearchesService;\n","import _ from 'underscore';\nimport {\n getParameterByName,\n getUrlParamsArray,\n} from '~/lib/utils/common_utils';\nimport { visitUrl } from '../lib/utils/url_utility';\nimport Flash from '../flash';\nimport FilteredSearchContainer from './container';\nimport FilteredSearchTokenKeys from './filtered_search_token_keys';\nimport RecentSearchesRoot from './recent_searches_root';\nimport RecentSearchesStore from './stores/recent_searches_store';\nimport RecentSearchesService from './services/recent_searches_service';\nimport eventHub from './event_hub';\nimport { addClassIfElementExists } from '../lib/utils/dom_utils';\nimport FilteredSearchTokenizer from './filtered_search_tokenizer';\nimport FilteredSearchDropdownManager from './filtered_search_dropdown_manager';\nimport FilteredSearchVisualTokens from './filtered_search_visual_tokens';\nimport DropdownUtils from './dropdown_utils';\n\nexport default class FilteredSearchManager {\n constructor({\n page,\n isGroup = false,\n isGroupAncestor = true,\n isGroupDecendent = false,\n filteredSearchTokenKeys = FilteredSearchTokenKeys,\n stateFiltersSelector = '.issues-state-filters',\n }) {\n this.isGroup = isGroup;\n this.isGroupAncestor = isGroupAncestor;\n this.isGroupDecendent = isGroupDecendent;\n this.states = ['opened', 'closed', 'merged', 'all'];\n\n this.page = page;\n this.container = FilteredSearchContainer.container;\n this.filteredSearchInput = this.container.querySelector('.filtered-search');\n this.filteredSearchInputForm = this.filteredSearchInput.form;\n this.clearSearchButton = this.container.querySelector('.clear-search');\n this.tokensContainer = this.container.querySelector('.tokens-container');\n this.filteredSearchTokenKeys = filteredSearchTokenKeys;\n this.stateFiltersSelector = stateFiltersSelector;\n this.recentsStorageKeyNames = {\n issues: 'issue-recent-searches',\n merge_requests: 'merge-request-recent-searches',\n };\n\n this.recentSearchesStore = new RecentSearchesStore({\n isLocalStorageAvailable: RecentSearchesService.isAvailable(),\n allowedKeys: this.filteredSearchTokenKeys.getKeys(),\n });\n this.searchHistoryDropdownElement = document.querySelector('.js-filtered-search-history-dropdown');\n const fullPath = this.searchHistoryDropdownElement ?\n this.searchHistoryDropdownElement.dataset.fullPath : 'project';\n const recentSearchesKey = `${fullPath}-${this.recentsStorageKeyNames[this.page]}`;\n this.recentSearchesService = new RecentSearchesService(recentSearchesKey);\n }\n\n setup() {\n // Fetch recent searches from localStorage\n this.fetchingRecentSearchesPromise = this.recentSearchesService.fetch()\n .catch((error) => {\n if (error.name === 'RecentSearchesServiceError') return undefined;\n // eslint-disable-next-line no-new\n new Flash('An error occurred while parsing recent searches');\n // Gracefully fail to empty array\n return [];\n })\n .then((searches) => {\n if (!searches) {\n return;\n }\n\n // Put any searches that may have come in before\n // we fetched the saved searches ahead of the already saved ones\n const resultantSearches = this.recentSearchesStore.setRecentSearches(\n this.recentSearchesStore.state.recentSearches.concat(searches),\n );\n this.recentSearchesService.save(resultantSearches);\n });\n\n if (this.filteredSearchInput) {\n this.tokenizer = FilteredSearchTokenizer;\n this.dropdownManager = new FilteredSearchDropdownManager({\n baseEndpoint: this.filteredSearchInput.getAttribute('data-base-endpoint') || '',\n tokenizer: this.tokenizer,\n page: this.page,\n isGroup: this.isGroup,\n isGroupAncestor: this.isGroupAncestor,\n isGroupDecendent: this.isGroupDecendent,\n filteredSearchTokenKeys: this.filteredSearchTokenKeys,\n });\n\n this.recentSearchesRoot = new RecentSearchesRoot(\n this.recentSearchesStore,\n this.recentSearchesService,\n this.searchHistoryDropdownElement,\n );\n this.recentSearchesRoot.init();\n\n this.bindEvents();\n this.loadSearchParamsFromURL();\n this.dropdownManager.setDropdown();\n this.cleanupWrapper = this.cleanup.bind(this);\n document.addEventListener('beforeunload', this.cleanupWrapper);\n }\n }\n\n cleanup() {\n this.unbindEvents();\n document.removeEventListener('beforeunload', this.cleanupWrapper);\n\n if (this.recentSearchesRoot) {\n this.recentSearchesRoot.destroy();\n }\n }\n\n bindStateEvents() {\n this.stateFilters = document.querySelector(`.container-fluid ${this.stateFiltersSelector}`);\n\n if (this.stateFilters) {\n this.searchStateWrapper = this.searchState.bind(this);\n\n this.applyToStateFilters((filterEl) => {\n filterEl.addEventListener('click', this.searchStateWrapper);\n });\n }\n }\n\n unbindStateEvents() {\n if (this.stateFilters) {\n this.applyToStateFilters((filterEl) => {\n filterEl.removeEventListener('click', this.searchStateWrapper);\n });\n }\n }\n\n applyToStateFilters(callback) {\n this.stateFilters.querySelectorAll('a[data-state]').forEach((filterEl) => {\n if (this.states.indexOf(filterEl.dataset.state) > -1) {\n callback(filterEl);\n }\n });\n }\n\n bindEvents() {\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n this.setDropdownWrapper = this.dropdownManager.setDropdown.bind(this.dropdownManager);\n this.toggleClearSearchButtonWrapper = this.toggleClearSearchButton.bind(this);\n this.handleInputPlaceholderWrapper = this.handleInputPlaceholder.bind(this);\n this.handleInputVisualTokenWrapper = this.handleInputVisualToken.bind(this);\n this.checkForEnterWrapper = this.checkForEnter.bind(this);\n this.onClearSearchWrapper = this.onClearSearch.bind(this);\n this.checkForBackspaceWrapper = this.checkForBackspace.call(this);\n this.removeSelectedTokenKeydownWrapper = this.removeSelectedTokenKeydown.bind(this);\n this.unselectEditTokensWrapper = this.unselectEditTokens.bind(this);\n this.editTokenWrapper = this.editToken.bind(this);\n this.tokenChange = this.tokenChange.bind(this);\n this.addInputContainerFocusWrapper = this.addInputContainerFocus.bind(this);\n this.removeInputContainerFocusWrapper = this.removeInputContainerFocus.bind(this);\n this.onrecentSearchesItemSelectedWrapper = this.onrecentSearchesItemSelected.bind(this);\n this.removeTokenWrapper = this.removeToken.bind(this);\n\n this.filteredSearchInputForm.addEventListener('submit', this.handleFormSubmit);\n this.filteredSearchInput.addEventListener('input', this.setDropdownWrapper);\n this.filteredSearchInput.addEventListener('input', this.toggleClearSearchButtonWrapper);\n this.filteredSearchInput.addEventListener('input', this.handleInputPlaceholderWrapper);\n this.filteredSearchInput.addEventListener('input', this.handleInputVisualTokenWrapper);\n this.filteredSearchInput.addEventListener('keydown', this.checkForEnterWrapper);\n this.filteredSearchInput.addEventListener('keyup', this.checkForBackspaceWrapper);\n this.filteredSearchInput.addEventListener('click', this.tokenChange);\n this.filteredSearchInput.addEventListener('keyup', this.tokenChange);\n this.filteredSearchInput.addEventListener('focus', this.addInputContainerFocusWrapper);\n this.tokensContainer.addEventListener('click', this.removeTokenWrapper);\n this.tokensContainer.addEventListener('click', this.editTokenWrapper);\n this.clearSearchButton.addEventListener('click', this.onClearSearchWrapper);\n document.addEventListener('click', this.unselectEditTokensWrapper);\n document.addEventListener('click', this.removeInputContainerFocusWrapper);\n document.addEventListener('keydown', this.removeSelectedTokenKeydownWrapper);\n eventHub.$on('recentSearchesItemSelected', this.onrecentSearchesItemSelectedWrapper);\n\n this.bindStateEvents();\n }\n\n unbindEvents() {\n this.filteredSearchInputForm.removeEventListener('submit', this.handleFormSubmit);\n this.filteredSearchInput.removeEventListener('input', this.setDropdownWrapper);\n this.filteredSearchInput.removeEventListener('input', this.toggleClearSearchButtonWrapper);\n this.filteredSearchInput.removeEventListener('input', this.handleInputPlaceholderWrapper);\n this.filteredSearchInput.removeEventListener('input', this.handleInputVisualTokenWrapper);\n this.filteredSearchInput.removeEventListener('keydown', this.checkForEnterWrapper);\n this.filteredSearchInput.removeEventListener('keyup', this.checkForBackspaceWrapper);\n this.filteredSearchInput.removeEventListener('click', this.tokenChange);\n this.filteredSearchInput.removeEventListener('keyup', this.tokenChange);\n this.filteredSearchInput.removeEventListener('focus', this.addInputContainerFocusWrapper);\n this.tokensContainer.removeEventListener('click', this.removeTokenWrapper);\n this.tokensContainer.removeEventListener('click', this.editTokenWrapper);\n this.clearSearchButton.removeEventListener('click', this.onClearSearchWrapper);\n document.removeEventListener('click', this.unselectEditTokensWrapper);\n document.removeEventListener('click', this.removeInputContainerFocusWrapper);\n document.removeEventListener('keydown', this.removeSelectedTokenKeydownWrapper);\n eventHub.$off('recentSearchesItemSelected', this.onrecentSearchesItemSelectedWrapper);\n\n this.unbindStateEvents();\n }\n\n checkForBackspace() {\n let backspaceCount = 0;\n\n // closure for keeping track of the number of backspace keystrokes\n return (e) => {\n // 8 = Backspace Key\n // 46 = Delete Key\n if (e.keyCode === 8 || e.keyCode === 46) {\n const { lastVisualToken } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n const { tokenName, tokenValue } = DropdownUtils.getVisualTokenValues(lastVisualToken);\n const canEdit = tokenName && this.canEdit && this.canEdit(tokenName, tokenValue);\n\n if (this.filteredSearchInput.value === '' && lastVisualToken && canEdit) {\n backspaceCount += 1;\n\n if (backspaceCount === 2) {\n backspaceCount = 0;\n this.filteredSearchInput.value = FilteredSearchVisualTokens.getLastTokenPartial();\n FilteredSearchVisualTokens.removeLastTokenPartial();\n }\n }\n\n // Reposition dropdown so that it is aligned with cursor\n this.dropdownManager.updateCurrentDropdownOffset();\n } else {\n backspaceCount = 0;\n }\n };\n }\n\n checkForEnter(e) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n const { selectionStart } = this.filteredSearchInput;\n\n e.preventDefault();\n this.filteredSearchInput.setSelectionRange(selectionStart, selectionStart);\n }\n\n if (e.keyCode === 13) {\n const dropdown = this.dropdownManager.mapping[this.dropdownManager.currentDropdown];\n const dropdownEl = dropdown.element;\n const activeElements = dropdownEl.querySelectorAll('.droplab-item-active');\n\n e.preventDefault();\n\n if (!activeElements.length) {\n if (this.isHandledAsync) {\n e.stopImmediatePropagation();\n\n this.filteredSearchInput.blur();\n this.dropdownManager.resetDropdowns();\n } else {\n // Prevent droplab from opening dropdown\n this.dropdownManager.destroyDroplab();\n }\n\n this.search();\n }\n }\n }\n\n addInputContainerFocus() {\n addClassIfElementExists(this.filteredSearchInput.closest('.filtered-search-box'), 'focus');\n }\n\n removeInputContainerFocus(e) {\n const inputContainer = this.filteredSearchInput.closest('.filtered-search-box');\n const isElementInFilteredSearch = inputContainer && inputContainer.contains(e.target);\n const isElementInDynamicFilterDropdown = e.target.closest('.filter-dropdown') !== null;\n const isElementInStaticFilterDropdown = e.target.closest('ul[data-dropdown]') !== null;\n\n if (!isElementInFilteredSearch && !isElementInDynamicFilterDropdown &&\n !isElementInStaticFilterDropdown && inputContainer) {\n inputContainer.classList.remove('focus');\n }\n }\n\n removeToken(e) {\n const removeButtonSelected = e.target.closest('.remove-token');\n\n if (removeButtonSelected) {\n e.preventDefault();\n // Prevent editToken from being triggered after token is removed\n e.stopImmediatePropagation();\n\n const button = e.target.closest('.selectable');\n FilteredSearchVisualTokens.selectToken(button, true);\n this.removeSelectedToken();\n }\n }\n\n unselectEditTokens(e) {\n const inputContainer = this.container.querySelector('.filtered-search-box');\n const isElementInFilteredSearch = inputContainer && inputContainer.contains(e.target);\n const isElementInFilterDropdown = e.target.closest('.filter-dropdown') !== null;\n const isElementTokensContainer = e.target.classList.contains('tokens-container');\n\n if ((!isElementInFilteredSearch && !isElementInFilterDropdown) || isElementTokensContainer) {\n FilteredSearchVisualTokens.moveInputToTheRight();\n this.dropdownManager.resetDropdowns();\n }\n }\n\n editToken(e) {\n const token = e.target.closest('.js-visual-token');\n const sanitizedTokenName = token && token.querySelector('.name').textContent.trim();\n const canEdit = this.canEdit && this.canEdit(sanitizedTokenName);\n\n if (token && canEdit) {\n e.preventDefault();\n e.stopPropagation();\n FilteredSearchVisualTokens.editToken(token);\n this.tokenChange();\n }\n }\n\n toggleClearSearchButton() {\n const query = DropdownUtils.getSearchQuery();\n const hidden = 'hidden';\n const hasHidden = this.clearSearchButton.classList.contains(hidden);\n\n if (query.length === 0 && !hasHidden) {\n this.clearSearchButton.classList.add(hidden);\n } else if (query.length && hasHidden) {\n this.clearSearchButton.classList.remove(hidden);\n }\n }\n\n handleInputPlaceholder() {\n const query = DropdownUtils.getSearchQuery();\n const placeholder = 'Search or filter results...';\n const currentPlaceholder = this.filteredSearchInput.placeholder;\n\n if (query.length === 0 && currentPlaceholder !== placeholder) {\n this.filteredSearchInput.placeholder = placeholder;\n } else if (query.length > 0 && currentPlaceholder !== '') {\n this.filteredSearchInput.placeholder = '';\n }\n }\n\n removeSelectedTokenKeydown(e) {\n // 8 = Backspace Key\n // 46 = Delete Key\n if (e.keyCode === 8 || e.keyCode === 46) {\n this.removeSelectedToken();\n }\n }\n\n removeSelectedToken() {\n FilteredSearchVisualTokens.removeSelectedToken();\n this.handleInputPlaceholder();\n this.toggleClearSearchButton();\n this.dropdownManager.updateCurrentDropdownOffset();\n }\n\n onClearSearch(e) {\n e.preventDefault();\n this.clearSearch();\n }\n\n clearSearch() {\n this.filteredSearchInput.value = '';\n\n const removeElements = [];\n\n [].forEach.call(this.tokensContainer.children, (t) => {\n let canClearToken = t.classList.contains('js-visual-token');\n\n if (canClearToken) {\n const { tokenName, tokenValue } = DropdownUtils.getVisualTokenValues(t);\n canClearToken = this.canEdit && this.canEdit(tokenName, tokenValue);\n }\n\n if (canClearToken) {\n removeElements.push(t);\n }\n });\n\n removeElements.forEach((el) => {\n el.parentElement.removeChild(el);\n });\n\n this.clearSearchButton.classList.add('hidden');\n this.handleInputPlaceholder();\n\n this.dropdownManager.resetDropdowns();\n\n if (this.isHandledAsync) {\n this.search();\n }\n }\n\n handleInputVisualToken() {\n const input = this.filteredSearchInput;\n const { tokens, searchToken }\n = this.tokenizer.processTokens(input.value, this.filteredSearchTokenKeys.getKeys());\n const { isLastVisualTokenValid }\n = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n\n if (isLastVisualTokenValid) {\n tokens.forEach((t) => {\n input.value = input.value.replace(`${t.key}:${t.symbol}${t.value}`, '');\n FilteredSearchVisualTokens.addFilterVisualToken(t.key, `${t.symbol}${t.value}`);\n });\n\n const fragments = searchToken.split(':');\n if (fragments.length > 1) {\n const inputValues = fragments[0].split(' ');\n const tokenKey = _.last(inputValues);\n\n if (inputValues.length > 1) {\n inputValues.pop();\n const searchTerms = inputValues.join(' ');\n\n input.value = input.value.replace(searchTerms, '');\n FilteredSearchVisualTokens.addSearchVisualToken(searchTerms);\n }\n\n FilteredSearchVisualTokens.addFilterVisualToken(tokenKey);\n input.value = input.value.replace(`${tokenKey}:`, '');\n }\n } else {\n // Keep listening to token until we determine that the user is done typing the token value\n const valueCompletedRegex = /([~%@]{0,1}\".+\")|([~%@]{0,1}'.+')|^((?![~%@]')(?![~%@]\")(?!')(?!\")).*/g;\n\n if (searchToken.match(valueCompletedRegex) && input.value[input.value.length - 1] === ' ') {\n FilteredSearchVisualTokens.addFilterVisualToken(searchToken);\n\n // Trim the last space as seen in the if statement above\n input.value = input.value.replace(searchToken, '').trim();\n }\n }\n }\n\n handleFormSubmit(e) {\n e.preventDefault();\n this.search();\n }\n\n saveCurrentSearchQuery() {\n // Don't save before we have fetched the already saved searches\n this.fetchingRecentSearchesPromise.then(() => {\n const searchQuery = DropdownUtils.getSearchQuery();\n if (searchQuery.length > 0) {\n const resultantSearches = this.recentSearchesStore.addRecentSearch(searchQuery);\n this.recentSearchesService.save(resultantSearches);\n }\n }).catch(() => {\n // https://gitlab.com/gitlab-org/gitlab-ce/issues/30821\n });\n }\n\n // allows for modifying params array when a param can't be included in the URL (e.g. Service Desk)\n getAllParams(urlParams) {\n return this.modifyUrlParams ? this.modifyUrlParams(urlParams) : urlParams;\n }\n\n loadSearchParamsFromURL() {\n const urlParams = getUrlParamsArray();\n const params = this.getAllParams(urlParams);\n const usernameParams = this.getUsernameParams();\n let hasFilteredSearch = false;\n\n params.forEach((p) => {\n const split = p.split('=');\n const keyParam = decodeURIComponent(split[0]);\n const value = split[1];\n\n // Check if it matches edge conditions listed in this.filteredSearchTokenKeys\n const condition = this.filteredSearchTokenKeys.searchByConditionUrl(p);\n\n if (condition) {\n hasFilteredSearch = true;\n const canEdit = this.canEdit && this.canEdit(condition.tokenKey);\n FilteredSearchVisualTokens.addFilterVisualToken(\n condition.tokenKey,\n condition.value,\n canEdit,\n );\n } else {\n // Sanitize value since URL converts spaces into +\n // Replace before decode so that we know what was originally + versus the encoded +\n const sanitizedValue = value ? decodeURIComponent(value.replace(/\\+/g, ' ')) : value;\n const match = this.filteredSearchTokenKeys.searchByKeyParam(keyParam);\n\n if (match) {\n // Use lastIndexOf because the token key is allowed to contain underscore\n // e.g. 'my_reaction' is the token key of 'my_reaction_emoji'\n const lastIndexOf = keyParam.lastIndexOf('_');\n let sanitizedKey = lastIndexOf !== -1 ? keyParam.slice(0, lastIndexOf) : keyParam;\n // Replace underscore with hyphen in the sanitizedkey.\n // e.g. 'my_reaction' => 'my-reaction'\n sanitizedKey = sanitizedKey.replace('_', '-');\n const { symbol } = match;\n let quotationsToUse = '';\n\n if (sanitizedValue.indexOf(' ') !== -1) {\n // Prefer \", but use ' if required\n quotationsToUse = sanitizedValue.indexOf('\"') === -1 ? '\"' : '\\'';\n }\n\n hasFilteredSearch = true;\n const canEdit = this.canEdit && this.canEdit(sanitizedKey, sanitizedValue);\n FilteredSearchVisualTokens.addFilterVisualToken(\n sanitizedKey,\n `${symbol}${quotationsToUse}${sanitizedValue}${quotationsToUse}`,\n canEdit,\n );\n } else if (!match && keyParam === 'assignee_id') {\n const id = parseInt(value, 10);\n if (usernameParams[id]) {\n hasFilteredSearch = true;\n const tokenName = 'assignee';\n const canEdit = this.canEdit && this.canEdit(tokenName);\n FilteredSearchVisualTokens.addFilterVisualToken(tokenName, `@${usernameParams[id]}`, canEdit);\n }\n } else if (!match && keyParam === 'author_id') {\n const id = parseInt(value, 10);\n if (usernameParams[id]) {\n hasFilteredSearch = true;\n const tokenName = 'author';\n const canEdit = this.canEdit && this.canEdit(tokenName);\n FilteredSearchVisualTokens.addFilterVisualToken(tokenName, `@${usernameParams[id]}`, canEdit);\n }\n } else if (!match && keyParam === 'search') {\n hasFilteredSearch = true;\n this.filteredSearchInput.value = sanitizedValue;\n }\n }\n });\n\n this.saveCurrentSearchQuery();\n\n if (hasFilteredSearch) {\n this.clearSearchButton.classList.remove('hidden');\n this.handleInputPlaceholder();\n }\n }\n\n searchState(e) {\n e.preventDefault();\n const target = e.currentTarget;\n // remove focus outline after click\n target.blur();\n\n const state = target.dataset && target.dataset.state;\n\n if (state) {\n this.search(state);\n }\n }\n\n search(state = null) {\n const paths = [];\n const searchQuery = DropdownUtils.getSearchQuery();\n\n this.saveCurrentSearchQuery();\n\n const { tokens, searchToken }\n = this.tokenizer.processTokens(searchQuery, this.filteredSearchTokenKeys.getKeys());\n const currentState = state || getParameterByName('state') || 'opened';\n paths.push(`state=${currentState}`);\n\n tokens.forEach((token) => {\n const condition = this.filteredSearchTokenKeys\n .searchByConditionKeyValue(token.key, token.value.toLowerCase());\n const { param } = this.filteredSearchTokenKeys.searchByKey(token.key) || {};\n // Replace hyphen with underscore to use as request parameter\n // e.g. 'my-reaction' => 'my_reaction'\n const underscoredKey = token.key.replace('-', '_');\n const keyParam = param ? `${underscoredKey}_${param}` : underscoredKey;\n let tokenPath = '';\n\n if (condition) {\n tokenPath = condition.url;\n } else {\n let tokenValue = token.value;\n\n if ((tokenValue[0] === '\\'' && tokenValue[tokenValue.length - 1] === '\\'') ||\n (tokenValue[0] === '\"' && tokenValue[tokenValue.length - 1] === '\"')) {\n tokenValue = tokenValue.slice(1, tokenValue.length - 1);\n }\n\n tokenPath = `${keyParam}=${encodeURIComponent(tokenValue)}`;\n }\n\n paths.push(tokenPath);\n });\n\n if (searchToken) {\n const sanitized = searchToken.split(' ').map(t => encodeURIComponent(t)).join('+');\n paths.push(`search=${sanitized}`);\n }\n\n const parameterizedUrl = `?scope=all&utf8=%E2%9C%93&${paths.join('&')}`;\n\n if (this.updateObject) {\n this.updateObject(parameterizedUrl);\n } else {\n visitUrl(parameterizedUrl);\n }\n }\n\n getUsernameParams() {\n const usernamesById = {};\n try {\n const attribute = this.filteredSearchInput.getAttribute('data-username-params');\n JSON.parse(attribute).forEach((user) => {\n usernamesById[user.id] = user.username;\n });\n } catch (e) {\n // do nothing\n }\n return usernamesById;\n }\n\n tokenChange() {\n const dropdown = this.dropdownManager.mapping[this.dropdownManager.currentDropdown];\n\n if (dropdown) {\n const currentDropdownRef = dropdown.reference;\n\n this.setDropdownWrapper();\n currentDropdownRef.dispatchInputEvent();\n }\n }\n\n onrecentSearchesItemSelected(text) {\n this.clearSearch();\n this.filteredSearchInput.value = text;\n this.filteredSearchInput.dispatchEvent(new CustomEvent('input'));\n this.search();\n }\n\n // eslint-disable-next-line class-methods-use-this\n canEdit() {\n return true;\n }\n}\n","import $ from 'jquery';\n\nexport default function issueStatusSelect() {\n $('.js-issue-status').each((i, el) => {\n const fieldName = $(el).data('fieldName');\n return $(el).glDropdown({\n selectable: true,\n fieldName,\n toggleLabel(selected, element, instance) {\n let label = 'Author';\n const $item = instance.dropdown.find('.is-active');\n if ($item.length) {\n label = $item.text();\n }\n return label;\n },\n clicked(options) {\n return options.e.preventDefault();\n },\n id(obj, element) {\n return $(element).data('id');\n },\n });\n });\n}\n","import $ from 'jquery';\n\nexport default function subscriptionSelect() {\n $('.js-subscription-event').each((i, element) => {\n const fieldName = $(element).data('fieldName');\n\n return $(element).glDropdown({\n selectable: true,\n fieldName,\n toggleLabel(selected, el, instance) {\n let label = 'Subscription';\n const $item = instance.dropdown.find('.is-active');\n if ($item.length) {\n label = $item.text();\n }\n return label;\n },\n clicked(options) {\n return options.e.preventDefault();\n },\n id(obj, el) {\n return $(el).data('id');\n },\n });\n });\n}\n","/* eslint-disable import/prefer-default-export */\n\nexport const FILTERED_SEARCH = {\n MERGE_REQUESTS: 'merge_requests',\n ISSUES: 'issues',\n};\n","import FilteredSearchManager from '~/filtered_search/filtered_search_manager';\n\nexport default ({\n page,\n filteredSearchTokenKeys,\n isGroup,\n isGroupAncestor,\n isGroupDecendent,\n stateFiltersSelector,\n}) => {\n const filteredSearchEnabled = FilteredSearchManager && document.querySelector('.filtered-search');\n if (filteredSearchEnabled) {\n const filteredSearchManager = new FilteredSearchManager({\n page,\n isGroup,\n isGroupAncestor,\n isGroupDecendent,\n filteredSearchTokenKeys,\n stateFiltersSelector,\n });\n filteredSearchManager.setup();\n }\n};\n","/* eslint-disable class-methods-use-this, no-new */\n\nimport $ from 'jquery';\nimport IssuableBulkUpdateActions from './issuable_bulk_update_actions';\nimport MilestoneSelect from './milestone_select';\nimport issueStatusSelect from './issue_status_select';\nimport subscriptionSelect from './subscription_select';\nimport LabelsSelect from './labels_select';\n\nconst HIDDEN_CLASS = 'hidden';\nconst DISABLED_CONTENT_CLASS = 'disabled-content';\nconst SIDEBAR_EXPANDED_CLASS = 'right-sidebar-expanded issuable-bulk-update-sidebar';\nconst SIDEBAR_COLLAPSED_CLASS = 'right-sidebar-collapsed issuable-bulk-update-sidebar';\n\nexport default class IssuableBulkUpdateSidebar {\n constructor() {\n this.initDomElements();\n this.bindEvents();\n this.initDropdowns();\n this.setupBulkUpdateActions();\n }\n\n initDomElements() {\n this.$page = $('.layout-page');\n this.$sidebar = $('.right-sidebar');\n this.$sidebarInnerContainer = this.$sidebar.find('.issuable-sidebar');\n this.$bulkEditCancelBtn = $('.js-bulk-update-menu-hide');\n this.$bulkEditSubmitBtn = $('.update-selected-issues');\n this.$bulkUpdateEnableBtn = $('.js-bulk-update-toggle');\n this.$otherFilters = $('.issues-other-filters');\n this.$checkAllContainer = $('.check-all-holder');\n this.$issueChecks = $('.issue-check');\n this.$issuesList = $('.selected_issue');\n this.$issuableIdsInput = $('#update_issuable_ids');\n }\n\n bindEvents() {\n this.$bulkUpdateEnableBtn.on('click', e => this.toggleBulkEdit(e, true));\n this.$bulkEditCancelBtn.on('click', e => this.toggleBulkEdit(e, false));\n this.$checkAllContainer.on('click', e => this.selectAll(e));\n this.$issuesList.on('change', () => this.updateFormState());\n this.$bulkEditSubmitBtn.on('click', () => this.prepForSubmit());\n this.$checkAllContainer.on('click', () => this.updateFormState());\n }\n\n initDropdowns() {\n new LabelsSelect();\n new MilestoneSelect();\n issueStatusSelect();\n subscriptionSelect();\n }\n\n setupBulkUpdateActions() {\n IssuableBulkUpdateActions.setOriginalDropdownData();\n }\n\n updateFormState() {\n const noCheckedIssues = !$('.selected_issue:checked').length;\n\n this.toggleSubmitButtonDisabled(noCheckedIssues);\n this.updateSelectedIssuableIds();\n\n IssuableBulkUpdateActions.setOriginalDropdownData();\n }\n\n prepForSubmit() {\n // if submit button is disabled, submission is blocked. This ensures we disable after\n // form submission is carried out\n setTimeout(() => this.$bulkEditSubmitBtn.disable());\n this.updateSelectedIssuableIds();\n }\n\n toggleBulkEdit(e, enable) {\n e.preventDefault();\n\n this.toggleSidebarDisplay(enable);\n this.toggleBulkEditButtonDisabled(enable);\n this.toggleOtherFiltersDisabled(enable);\n this.toggleCheckboxDisplay(enable);\n }\n\n updateSelectedIssuableIds() {\n this.$issuableIdsInput.val(IssuableBulkUpdateSidebar.getCheckedIssueIds());\n }\n\n selectAll() {\n const checkAllButtonState = this.$checkAllContainer.find('input').prop('checked');\n\n this.$issuesList.prop('checked', checkAllButtonState);\n }\n\n toggleSidebarDisplay(show) {\n this.$page.toggleClass(SIDEBAR_EXPANDED_CLASS, show);\n this.$page.toggleClass(SIDEBAR_COLLAPSED_CLASS, !show);\n this.$sidebarInnerContainer.toggleClass(HIDDEN_CLASS, !show);\n this.$sidebar.toggleClass(SIDEBAR_EXPANDED_CLASS, show);\n this.$sidebar.toggleClass(SIDEBAR_COLLAPSED_CLASS, !show);\n }\n\n toggleBulkEditButtonDisabled(disable) {\n if (disable) {\n this.$bulkUpdateEnableBtn.disable();\n } else {\n this.$bulkUpdateEnableBtn.enable();\n }\n }\n\n toggleCheckboxDisplay(show) {\n this.$checkAllContainer.toggleClass(HIDDEN_CLASS, !show);\n this.$issueChecks.toggleClass(HIDDEN_CLASS, !show);\n }\n\n toggleOtherFiltersDisabled(disable) {\n this.$otherFilters.toggleClass(DISABLED_CONTENT_CLASS, disable);\n }\n\n toggleSubmitButtonDisabled(disable) {\n if (disable) {\n this.$bulkEditSubmitBtn.disable();\n } else {\n this.$bulkEditSubmitBtn.enable();\n }\n }\n\n static getCheckedIssueIds() {\n const $checkedIssues = $('.selected_issue:checked');\n\n if ($checkedIssues.length > 0) {\n return $.map($checkedIssues, value => $(value).data('id'));\n }\n\n return [];\n }\n}\n","import $ from 'jquery';\nimport axios from './lib/utils/axios_utils';\nimport flash from './flash';\nimport { __ } from './locale';\nimport IssuableBulkUpdateSidebar from './issuable_bulk_update_sidebar';\nimport IssuableBulkUpdateActions from './issuable_bulk_update_actions';\n\nexport default class IssuableIndex {\n constructor(pagePrefix) {\n this.initBulkUpdate(pagePrefix);\n IssuableIndex.resetIncomingEmailToken();\n }\n initBulkUpdate(pagePrefix) {\n const userCanBulkUpdate = $('.issues-bulk-update').length > 0;\n const alreadyInitialized = !!this.bulkUpdateSidebar;\n\n if (userCanBulkUpdate && !alreadyInitialized) {\n IssuableBulkUpdateActions.init({\n prefixId: pagePrefix,\n });\n\n this.bulkUpdateSidebar = new IssuableBulkUpdateSidebar();\n }\n }\n\n static resetIncomingEmailToken() {\n const $resetToken = $('.incoming-email-token-reset');\n\n $resetToken.on('click', (e) => {\n e.preventDefault();\n\n $resetToken.text('resetting...');\n\n axios.put($resetToken.attr('href'))\n .then(({ data }) => {\n $('#issuable_email').val(data.new_address).focus();\n\n $resetToken.text('reset it');\n })\n .catch(() => {\n flash(__('There was an error when reseting email token.'));\n\n $resetToken.text('reset it');\n });\n });\n }\n}\n","/* eslint-disable import/prefer-default-export */\n\nexport const ISSUABLE_INDEX = {\n MERGE_REQUEST: 'merge_request_',\n ISSUE: 'issue_',\n};\n","import IssuableIndex from '~/issuable_index';\nimport ShortcutsNavigation from '~/shortcuts_navigation';\nimport UsersSelect from '~/users_select';\nimport initFilteredSearch from '~/pages/search/init_filtered_search';\nimport { FILTERED_SEARCH } from '~/pages/constants';\nimport { ISSUABLE_INDEX } from '~/pages/projects/constants';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n initFilteredSearch({\n page: FILTERED_SEARCH.MERGE_REQUESTS,\n });\n new IssuableIndex(ISSUABLE_INDEX.MERGE_REQUEST); // eslint-disable-line no-new\n new ShortcutsNavigation(); // eslint-disable-line no-new\n new UsersSelect(); // eslint-disable-line no-new\n});\n"],"sourceRoot":""}