{"version":3,"sources":["webpack:///./create_label.js","webpack:///./labels_select.js","webpack:///./milestone_select.js","webpack:///./pages/projects/merge_requests/index/index.js","webpack:///./filtered_search/issuable_filtered_search_token_keys.js","webpack:///./boards/stores/boards_store.js","webpack:///./filtered_search/event_hub.js","webpack:///./filtered_search/components/recent_searches_dropdown_content.vue?177e","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?e063","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:///./pages/search/init_filtered_search.js","webpack:///./pages/constants.js","webpack:///./behaviors/shortcuts/shortcuts_navigation.js","webpack:///./project_select_combo_button.js","webpack:///./project_select.js","webpack:///./pages/projects/project.js","webpack:///./pages/projects/index.js","webpack:///./pages/projects/constants.js","webpack:///./issuable_bulk_update_sidebar.js","webpack:///./issue_status_select.js","webpack:///./subscription_select.js","webpack:///./issuable_index.js","webpack:///./issuable_bulk_update_actions.js"],"names":["CreateLabelDropdown","$el","namespacePath","projectPath","_classCallCheck","this","$dropdownBack","$","closest","$cancelButton","$newLabelField","$newColorField","$colorPreview","$newLabelError","$newLabelCreateButton","$colorSuggestions","hide","disable","cleanBinding","addBinding","off","self","on","e","$this","addColorValue","enableLabelCreateButton","bind","resetForm","preventDefault","stopPropagation","trigger","saveLabel","val","data","css","parent","addClass","enable","removeClass","_this","Api","newLabel","title","color","label","errors","message","Object","keys","map","key","concat","humanize","join","html","show","document","LabelsSelect","els","$els","options","arguments","length","undefined","each","i","dropdown","$block","$dropdown","$form","$loading","$selectbox","$sidebarCollapsedValue","$value","abilityName","defaultLabel","issueUpdateURL","labelUrl","saveLabelData","selectedLabel","showAny","showNo","$sidebarLabelTooltip","initialSelected","fieldName","showMenuAbove","$dropdownContainer","find","hasClass","split","__","fadeOut","is","value","get","handleClick","tooltip","selected","_","isEqual","label_ids","fadeIn","axios","put","then","_ref","labelCount","template","labelTooltipTitle","labelTitles","labels","getLabelTemplate","removeAttr","text","slice","push","attr","container","catch","flash","glDropdown","term","callback","res","chain","groupBy","dup","id","duplicate","extraData","unshift","isAny","positionMenuAbove","renderRow","instance","$a","$li","colorEl","indeterminate","removesAll","selectedClass","marked","dropdownName","dropdownValue","indexOf","splice","toString","replace","DropdownUtils","duplicateLabelColor","_slicedToArray","escape","prop","search","fields","selectable","filterable","toggleLabel","el","$dropdownParent","$dropdownInputField","isSelected","selectedLabels","index","sprintf","firstLabel","hidden","isIssueIndex","isMRIndex","page","Issuable","filterResults","submit","multiSelect","vue","clicked","clickEvent","boardsModel","isMarking","selectedObj","fadeOutLoader","enableBulkLabelDropdown","setDropdownData","ModalStore","store","filter","boardsStore","detail","issue","ListLabel","textColor","update","opened","previousSelection","updateLabel","preserveContext","setOriginalDropdownData","bindEvents","tplData","tpl","onSelectCheckboxIssue","IssuableBulkUpdateActions","willUpdateLabels","markedIds","unmarkedIds","indeterminateIds","getOriginalIndeterminateIds","getOriginalCommonIds","$container","MilestoneSelect","currentProject","JSON","parse","init","milestoneLinkNoneTemplate","milestoneLinkTemplate","selectedMilestone","selectedMilestoneDefault","milestonesUrl","showUpcoming","showStarted","useId","defaultNo","$selectBox","extraOptions","name","milestone","currentTarget","dataset","modalStoreFilter","isSelecting","milestone_id","_ref2","remaining","timeFor","due_date","boardStoreIssueSet","ListMilestone","boardStoreIssueDelete","window","__webpack_require__","r","__webpack_exports__","_issuable_index__WEBPACK_IMPORTED_MODULE_0__","_behaviors_shortcuts_shortcuts_navigation__WEBPACK_IMPORTED_MODULE_1__","_users_select__WEBPACK_IMPORTED_MODULE_2__","_pages_search_init_filtered_search__WEBPACK_IMPORTED_MODULE_3__","_filtered_search_issuable_filtered_search_token_keys__WEBPACK_IMPORTED_MODULE_4__","_pages_constants__WEBPACK_IMPORTED_MODULE_5__","_pages_projects_constants__WEBPACK_IMPORTED_MODULE_6__","addEventListener","IssuableFilteredSearchTokenKeys","addExtraTokensForMergeRequests","initFilteredSearch","FILTERED_SEARCH","MERGE_REQUESTS","filteredSearchTokenKeys","IssuableIndex","ISSUABLE_INDEX","MERGE_REQUEST","ShortcutsNavigation","UsersSelect","_filtered_search_token_keys__WEBPACK_IMPORTED_MODULE_0__","tokenKeys","type","param","symbol","icon","tag","gon","current_user_id","FilteredSearchTokenKeys","url","tokenKey","d","jquery__WEBPACK_IMPORTED_MODULE_0__","jquery__WEBPACK_IMPORTED_MODULE_0___default","n","underscore__WEBPACK_IMPORTED_MODULE_1__","underscore__WEBPACK_IMPORTED_MODULE_1___default","vue__WEBPACK_IMPORTED_MODULE_2__","js_cookie__WEBPACK_IMPORTED_MODULE_3__","js_cookie__WEBPACK_IMPORTED_MODULE_3___default","_lib_utils_common_utils__WEBPACK_IMPORTED_MODULE_4__","disabled","path","state","moving","list","create","lists","getUrlParamsArray","addList","listObj","defaultAvatar","List","new","backlogList","findList","save","issues","forEach","removeIssue","sortBy","removeBlankState","updateNewListDropdown","listId","shouldAddBlankState","addBlankState","welcomeIsHidden","list_type","position","removeList","Cookies","set","expires","parseBoolean","moveList","listFrom","orderLists","_this2","parseInt","moveIssueToList","listTo","newIndex","issueTo","findIssue","issueLists","getLists","listLabels","listIssue","updateIssueLabel","removeLabel","findAssignee","assignee","removeAssignee","currentMilestone","currentLists","some","removeMilestone","addMilestone","currentList","addIssue","removeLabels","shouldRemoveIssue","moveIssueInList","oldIndex","idArray","beforeId","afterId","moveIssue","byType","updateFiltersUrl","history","pushState","_len","args","Array","_key","Vue","apply","_len2","_key2","delete","event_hub","components_recent_searches_dropdown_contentvue_type_script_lang_js_","props","items","required","isLocalStorageAvailable","Boolean","default","allowedKeys","computed","processedItems","item","_FilteredSearchTokeni","filtered_search_tokenizer","processTokens","tokens","searchToken","token","prefix","suffix","hasItems","methods","onItemActivated","$emit","onRequestClearRecentSearches","component","componentNormalizer","_vm","_h","$createElement","_c","_self","_l","staticClass","attrs","click","$event","tokenIndex","_v","_s","__file","recent_searches_dropdown_content","RecentSearchesRoot","recentSearchesStore","recentSearchesService","wrapperElement","service","render","onRequestClearRecentSearchesWrapper","eventHub","$on","$off","vm","components","RecentSearchesDropdownContent","resultantSearches","setRecentSearches","unbindEvents","$destroy","RecentSearchesStore","initialState","recent_searches_store_classCallCheck","assign","recentSearches","newSearch","trimmedSearches","trim","uniq","RecentSearchesServiceError","recent_searches_service_error_classCallCheck","prototype","Error","RecentSearchesService","localStorageKey","recent_searches_service_classCallCheck","AccessorUtilities","isLocalStorageAccessSafe","isAvailable","error","Promise","reject","input","localStorage","getItem","searches","err","resolve","setItem","stringify","FilteredSearchManager","_ref$isGroup","isGroup","_ref$isGroupAncestor","isGroupAncestor","_ref$isGroupDecendent","isGroupDecendent","_ref$filteredSearchTo","_ref$stateFiltersSele","stateFiltersSelector","filtered_search_manager_classCallCheck","states","FilteredSearchContainer","filteredSearchInput","querySelector","filteredSearchInputForm","form","clearSearchButton","tokensContainer","recentsStorageKeyNames","merge_requests","getKeys","searchHistoryDropdownElement","fullPath","recentSearchesKey","fetchingRecentSearchesPromise","fetch","Flash","tokenizer","FilteredSearchTokenizer","dropdownManager","FilteredSearchDropdownManager","baseEndpoint","getAttribute","recentSearchesRoot","loadSearchParamsFromURL","setDropdown","cleanupWrapper","cleanup","removeEventListener","destroy","stateFilters","searchStateWrapper","searchState","applyToStateFilters","filterEl","_this3","_this4","querySelectorAll","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","FilteredSearchVisualTokens","getLastVisualTokenBeforeInput","_DropdownUtils$getVis","getVisualTokenValues","tokenName","tokenValue","canEdit","getLastTokenPartial","removeLastTokenPartial","updateCurrentDropdownOffset","selectionStart","setSelectionRange","activeElements","mapping","currentDropdown","element","isHandledAsync","stopImmediatePropagation","blur","resetDropdowns","destroyDroplab","addClassIfElementExists","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","parentElement","removeChild","_this7","_this$tokenizer$proce","isLastVisualTokenValid","addFilterVisualToken","uppercaseTokenName","shouldUppercaseTokenName","capitalizeTokenValue","shouldCapitalizeTokenValue","fragments","inputValues","last","pop","searchTerms","addSearchVisualToken","match","_this8","searchQuery","addRecentSearch","urlParams","modifyUrlParams","_this9","params","getAllParams","usernameParams","getUsernameParams","hasFilteredSearch","p","keyParam","decodeURIComponent","condition","searchByConditionUrl","sanitizedValue","searchByKeyParam","lastIndexOf","sanitizedKey","quotationsToUse","saveCurrentSearchQuery","_this10","paths","_this$tokenizer$proce2","currentState","getParameterByName","searchByConditionKeyValue","toLowerCase","tokenConfig","searchByKey","underscoredKey","tokenPath","lowercaseValueOnSubmit","encodeURIComponent","sanitized","parameterizedUrl","updateObject","visitUrl","usernamesById","attribute","user","username","currentDropdownRef","reference","dispatchInputEvent","dispatchEvent","CustomEvent","_filtered_search_filtered_search_manager__WEBPACK_IMPORTED_MODULE_0__","setup","ISSUES","ADMIN_RUNNERS","_possibleConstructorReturn","_getPrototypeOf","Mousetrap","findAndFollowLink","enabledHelp","Shortcuts","ProjectSelectComboButton","select","projectSelectInput","newItemBtn","resourceType","resourceLabel","formattedText","deriveTextVariants","groupId","initLocalStorage","siblings","openDropdown","getProjectFromLocalStorage","selectProject","localStorageItemType","setBtnTextFromLocalStorage","event","select2","selectedProjectData","projectMeta","setNewItemBtnAttributes","setProjectInLocalStorage","cachedProjectData","project","defaultTextPrefix","presetTextSuffix","projectString","projectSelect","simpleFilter","includeGroups","allProjects","orderBy","withIssuesEnabled","withMergeRequestsEnabled","withShared","includeProjectsInSubgroups","allowClear","minimumInputLength","finalCallback","projectsCallback","projects","results","groupsCallback","groups","groupProjects","with_issues_enabled","with_merge_requests_enabled","with_shared","include_subgroups","order_by","membership","web_url","name_with_namespace","initSelection","dropdownCssClass","Project","$cloneOptions","$projectCloneField","$cloneBtnLabel","mobileCloneField","selectedCloneOption","cloneType","activeText","$label","toggleClass","clipboardText","initRefSwitcher","parents","projectId","cookieKey","projectSelectDropdown","changeProject","location","refListItem","createElement","refLink","href","ref","filterRemote","filterByText","inputFieldName","li","cloneNode","header","className","link","appendChild","obj","$visit","shouldVisit","action","divider","serialize","_dismissable_callout__WEBPACK_IMPORTED_MODULE_0__","_projects_gke_cluster_dropdowns__WEBPACK_IMPORTED_MODULE_1__","_project__WEBPACK_IMPORTED_MODULE_2__","_behaviors_shortcuts_shortcuts_navigation__WEBPACK_IMPORTED_MODULE_3__","body","initDismissableCallout","initGkeDropdowns","ISSUE","IssuableBulkUpdateSidebar","initDomElements","initDropdowns","setupBulkUpdateActions","$checkedIssues","$page","$sidebar","$sidebarInnerContainer","$bulkEditCancelBtn","$bulkEditSubmitBtn","$bulkUpdateEnableBtn","$otherFilters","$checkAllContainer","$issueChecks","$issuesList","$issuableIdsInput","toggleBulkEdit","selectAll","updateFormState","prepForSubmit","$item","noCheckedIssues","toggleSubmitButtonDisabled","updateSelectedIssuableIds","setTimeout","toggleSidebarDisplay","toggleBulkEditButtonDisabled","toggleOtherFiltersDisabled","toggleCheckboxDisplay","getCheckedIssueIds","checkAllButtonState","pagePrefix","issuable_index_classCallCheck","initBulkUpdate","resetIncomingEmailToken","$resetToken","new_address","focus","userCanBulkUpdate","alreadyInitialized","bulkUpdateSidebar","prefixId","_lib_utils_axios_utils__WEBPACK_IMPORTED_MODULE_2__","_flash__WEBPACK_IMPORTED_MODULE_3__","getElement","$labelDropdown","onFormSubmit","getFormDataAsObject","reload","onFormSubmitFailure","getSelectedIssues","has","getLabelsFromSelection","labelsData","labelId","getUnmarkedIndeterminedLabels","result","labelsToKeep","formData","state_event","assignee_id","assignee_ids","issuable_ids","subscription_event","add_label_ids","remove_label_ids","$labelSelect","getOriginalMarkedIds","labelIds","intersection","uniqueIds","issuableLabels","difference","selector","scopeEl"],"mappings":"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","file":"pages.projects.merge_requests.index.56831eeb.chunk.js","sourcesContent":["/* eslint-disable func-names, prefer-arrow-callback */\n\nimport $ from 'jquery';\nimport Api from './api';\nimport { humanize } from './lib/utils/text_utility';\n\nexport default class CreateLabelDropdown {\n constructor($el, namespacePath, projectPath) {\n this.$el = $el;\n this.namespacePath = namespacePath;\n this.projectPath = projectPath;\n this.$dropdownBack = $('.dropdown-menu-back', this.$el.closest('.dropdown'));\n this.$cancelButton = $('.js-cancel-label-btn', this.$el);\n this.$newLabelField = $('#new_label_name', this.$el);\n this.$newColorField = $('#new_label_color', this.$el);\n this.$colorPreview = $('.js-dropdown-label-color-preview', this.$el);\n this.$newLabelError = $('.js-label-error', this.$el);\n this.$newLabelCreateButton = $('.js-new-label-btn', this.$el);\n this.$colorSuggestions = $('.suggest-colors-dropdown a', this.$el);\n\n this.$newLabelError.hide();\n this.$newLabelCreateButton.disable();\n\n this.cleanBinding();\n this.addBinding();\n }\n\n cleanBinding() {\n this.$colorSuggestions.off('click');\n this.$newLabelField.off('keyup change');\n this.$newColorField.off('keyup change');\n this.$dropdownBack.off('click');\n this.$cancelButton.off('click');\n this.$newLabelCreateButton.off('click');\n }\n\n addBinding() {\n const self = this;\n\n this.$colorSuggestions.on('click', function(e) {\n const $this = $(this);\n self.addColorValue(e, $this);\n });\n\n this.$newLabelField.on('keyup change', this.enableLabelCreateButton.bind(this));\n this.$newColorField.on('keyup change', this.enableLabelCreateButton.bind(this));\n\n this.$dropdownBack.on('click', this.resetForm.bind(this));\n\n this.$cancelButton.on('click', function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n self.resetForm();\n self.$dropdownBack.trigger('click');\n });\n\n this.$newLabelCreateButton.on('click', this.saveLabel.bind(this));\n }\n\n addColorValue(e, $this) {\n e.preventDefault();\n e.stopPropagation();\n\n this.$newColorField.val($this.data('color')).trigger('change');\n this.$colorPreview\n .css('background-color', $this.data('color'))\n .parent()\n .addClass('is-active');\n }\n\n enableLabelCreateButton() {\n if (this.$newLabelField.val() !== '' && this.$newColorField.val() !== '') {\n this.$newLabelError.hide();\n this.$newLabelCreateButton.enable();\n } else {\n this.$newLabelCreateButton.disable();\n }\n }\n\n resetForm() {\n this.$newLabelField.val('').trigger('change');\n\n this.$newColorField.val('').trigger('change');\n\n this.$colorPreview\n .css('background-color', '')\n .parent()\n .removeClass('is-active');\n }\n\n saveLabel(e) {\n e.preventDefault();\n e.stopPropagation();\n\n Api.newLabel(\n this.namespacePath,\n this.projectPath,\n {\n title: this.$newLabelField.val(),\n color: this.$newColorField.val(),\n },\n label => {\n this.$newLabelCreateButton.enable();\n\n if (label.message) {\n let errors;\n\n if (typeof label.message === 'string') {\n errors = label.message;\n } else {\n errors = Object.keys(label.message)\n .map(key => `${humanize(key)} ${label.message[key].join(', ')}`)\n .join('
');\n }\n\n this.$newLabelError.html(errors).show();\n } else {\n this.$dropdownBack.trigger('click');\n\n $(document).trigger('created.label', label);\n }\n },\n );\n }\n}\n","/* eslint-disable no-useless-return, func-names, no-var, no-underscore-dangle, prefer-arrow-callback, one-var, no-unused-vars, prefer-template, no-new, consistent-return, object-shorthand, no-shadow, no-param-reassign, vars-on-top, no-lonely-if, no-else-return, dot-notation, no-empty */\n/* global Issuable */\n/* global ListLabel */\n\nimport $ from 'jquery';\nimport _ from 'underscore';\nimport { sprintf, __ } from './locale';\nimport axios from './lib/utils/axios_utils';\nimport IssuableBulkUpdateActions from './issuable_bulk_update_actions';\nimport DropdownUtils from './filtered_search/dropdown_utils';\nimport CreateLabelDropdown from './create_label';\nimport flash from './flash';\nimport ModalStore from './boards/stores/modal_store';\nimport boardsStore from './boards/stores/boards_store';\n\nexport default class LabelsSelect {\n constructor(els, options = {}) {\n var _this, $els;\n _this = this;\n\n $els = $(els);\n\n if (!els) {\n $els = $('.js-label-select');\n }\n\n $els.each(function(i, dropdown) {\n var $block,\n $colorPreview,\n $dropdown,\n $form,\n $loading,\n $selectbox,\n $sidebarCollapsedValue,\n $value,\n abilityName,\n defaultLabel,\n enableLabelCreateButton,\n issueURLSplit,\n issueUpdateURL,\n labelUrl,\n namespacePath,\n projectPath,\n saveLabelData,\n selectedLabel,\n showAny,\n showNo,\n $sidebarLabelTooltip,\n initialSelected,\n $toggleText,\n fieldName,\n useId,\n propertyName,\n showMenuAbove,\n $container,\n $dropdownContainer;\n $dropdown = $(dropdown);\n $dropdownContainer = $dropdown.closest('.labels-filter');\n $toggleText = $dropdown.find('.dropdown-toggle-text');\n namespacePath = $dropdown.data('namespacePath');\n projectPath = $dropdown.data('projectPath');\n issueUpdateURL = $dropdown.data('issueUpdate');\n selectedLabel = $dropdown.data('selected');\n if (selectedLabel != null && !$dropdown.hasClass('js-multiselect')) {\n selectedLabel = selectedLabel.split(',');\n }\n showNo = $dropdown.data('showNo');\n showAny = $dropdown.data('showAny');\n showMenuAbove = $dropdown.data('showMenuAbove');\n defaultLabel = $dropdown.data('defaultLabel') || __('Label');\n abilityName = $dropdown.data('abilityName');\n $selectbox = $dropdown.closest('.selectbox');\n $block = $selectbox.closest('.block');\n $form = $dropdown.closest('form, .js-issuable-update');\n $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon span');\n $sidebarLabelTooltip = $block.find('.js-sidebar-labels-tooltip');\n $value = $block.find('.value');\n $loading = $block.find('.block-loading').fadeOut();\n fieldName = $dropdown.data('fieldName');\n useId = $dropdown.is(\n '.js-issuable-form-dropdown, .js-filter-bulk-update, .js-label-sidebar-dropdown',\n );\n propertyName = useId ? 'id' : 'title';\n initialSelected = $selectbox\n .find('input[name=\"' + $dropdown.data('fieldName') + '\"]')\n .map(function() {\n return this.value;\n })\n .get();\n const { handleClick } = options;\n\n $sidebarLabelTooltip.tooltip();\n\n if ($dropdown.closest('.dropdown').find('.dropdown-new-label').length) {\n new CreateLabelDropdown(\n $dropdown.closest('.dropdown').find('.dropdown-new-label'),\n namespacePath,\n projectPath,\n );\n }\n\n saveLabelData = function() {\n var data, selected;\n selected = $dropdown\n .closest('.selectbox')\n .find(\"input[name='\" + fieldName + \"']\")\n .map(function() {\n return this.value;\n })\n .get();\n\n if (_.isEqual(initialSelected, selected)) return;\n initialSelected = selected;\n\n data = {};\n data[abilityName] = {};\n data[abilityName].label_ids = selected;\n if (!selected.length) {\n data[abilityName].label_ids = [''];\n }\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n axios\n .put(issueUpdateURL, data)\n .then(({ data }) => {\n var labelCount, template, labelTooltipTitle, labelTitles, formattedLabels;\n $loading.fadeOut();\n $dropdown.trigger('loaded.gl.dropdown');\n $selectbox.hide();\n data.issueUpdateURL = issueUpdateURL;\n labelCount = 0;\n if (data.labels.length && issueUpdateURL) {\n template = LabelsSelect.getLabelTemplate({\n labels: data.labels,\n issueUpdateURL,\n });\n labelCount = data.labels.length;\n } else {\n template = 'None';\n }\n $value.removeAttr('style').html(template);\n $sidebarCollapsedValue.text(labelCount);\n\n if (data.labels.length) {\n labelTitles = data.labels.map(function(label) {\n return label.title;\n });\n\n if (labelTitles.length > 5) {\n labelTitles = labelTitles.slice(0, 5);\n labelTitles.push('and ' + (data.labels.length - 5) + ' more');\n }\n\n labelTooltipTitle = labelTitles.join(', ');\n } else {\n labelTooltipTitle = __('Labels');\n }\n\n $sidebarLabelTooltip.attr('title', labelTooltipTitle).tooltip('_fixTitle');\n\n $('.has-tooltip', $value).tooltip({\n container: 'body',\n });\n })\n .catch(() => flash(__('Error saving label update.')));\n };\n $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: function(term, callback) {\n labelUrl = $dropdown.attr('data-labels');\n axios\n .get(labelUrl)\n .then(res => {\n let data = _.chain(res.data)\n .groupBy(function(label) {\n return label.title;\n })\n .map(function(label) {\n var color;\n color = _.map(label, function(dup) {\n return dup.color;\n });\n return {\n id: label[0].id,\n title: label[0].title,\n color: color,\n duplicate: color.length > 1,\n };\n })\n .value();\n if ($dropdown.hasClass('js-extra-options')) {\n var extraData = [];\n if (showNo) {\n extraData.unshift({\n id: 0,\n title: 'No Label',\n });\n }\n if (showAny) {\n extraData.unshift({\n isAny: true,\n title: 'Any Label',\n });\n }\n if (extraData.length) {\n extraData.push('divider');\n data = extraData.concat(data);\n }\n }\n\n callback(data);\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n })\n .catch(() => flash(__('Error fetching labels.')));\n },\n renderRow: function(label, instance) {\n var $a,\n $li,\n color,\n colorEl,\n indeterminate,\n removesAll,\n selectedClass,\n spacing,\n i,\n marked,\n dropdownName,\n dropdownValue;\n $li = $('
  • ');\n $a = $('');\n selectedClass = [];\n removesAll = label.id <= 0 || label.id == null;\n if ($dropdown.hasClass('js-filter-bulk-update')) {\n indeterminate = $dropdown.data('indeterminate') || [];\n marked = $dropdown.data('marked') || [];\n\n if (indeterminate.indexOf(label.id) !== -1) {\n selectedClass.push('is-indeterminate');\n }\n\n if (marked.indexOf(label.id) !== -1) {\n // Remove is-indeterminate class if the item will be marked as active\n i = selectedClass.indexOf('is-indeterminate');\n if (i !== -1) {\n selectedClass.splice(i, 1);\n }\n selectedClass.push('is-active');\n }\n } else {\n if (this.id(label)) {\n dropdownName = $dropdown.data('fieldName');\n dropdownValue = this.id(label)\n .toString()\n .replace(/'/g, \"\\\\'\");\n\n if (\n $form.find(\n \"input[type='hidden'][name='\" +\n dropdownName +\n \"'][value='\" +\n dropdownValue +\n \"']\",\n ).length\n ) {\n selectedClass.push('is-active');\n }\n }\n\n if ($dropdown.hasClass('js-multiselect') && removesAll) {\n selectedClass.push('dropdown-clear-active');\n }\n }\n if (label.duplicate) {\n color = DropdownUtils.duplicateLabelColor(label.color);\n } else {\n if (label.color != null) {\n [color] = label.color;\n }\n }\n if (color) {\n colorEl = \"\";\n } else {\n colorEl = '';\n }\n // We need to identify which items are actually labels\n if (label.id) {\n selectedClass.push('label-item');\n $a.attr('data-label-id', label.id);\n }\n $a.addClass(selectedClass.join(' ')).html(`${colorEl} ${_.escape(label.title)}`);\n // Return generated html\n return $li.html($a).prop('outerHTML');\n },\n search: {\n fields: ['title'],\n },\n selectable: true,\n filterable: true,\n selected: $dropdown.data('selected') || [],\n toggleLabel: function(selected, el) {\n var $dropdownParent = $dropdown.parent();\n var $dropdownInputField = $dropdownParent.find('.dropdown-input-field');\n var isSelected = el !== null ? el.hasClass('is-active') : false;\n\n var title = selected ? selected.title : null;\n var selectedLabels = this.selected;\n\n if ($dropdownInputField.length && $dropdownInputField.val().length) {\n $dropdownParent.find('.dropdown-input-clear').trigger('click');\n }\n\n if (selected && selected.id === 0) {\n this.selected = [];\n return 'No Label';\n } else if (isSelected) {\n this.selected.push(title);\n } else if (!isSelected && title) {\n var index = this.selected.indexOf(title);\n this.selected.splice(index, 1);\n }\n\n if (selectedLabels.length === 1) {\n return selectedLabels;\n } else if (selectedLabels.length) {\n return sprintf(__('%{firstLabel} +%{labelCount} more'), {\n firstLabel: selectedLabels[0],\n labelCount: selectedLabels.length - 1,\n });\n } else {\n return defaultLabel;\n }\n },\n fieldName: $dropdown.data('fieldName'),\n id: function(label) {\n if (label.id <= 0) return label.title;\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return label.id;\n }\n\n if ($dropdown.hasClass('js-filter-submit') && label.isAny == null) {\n return label.title;\n } else {\n return label.id;\n }\n },\n hidden: function() {\n var isIssueIndex, isMRIndex, page, selectedLabels;\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = page === 'projects:merge_requests:index';\n $selectbox.hide();\n // display:block overrides the hide-collapse rule\n $value.removeAttr('style');\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return;\n }\n\n if ($('html').hasClass('issue-boards-page')) {\n return;\n }\n if ($dropdown.hasClass('js-multiselect')) {\n if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n selectedLabels = $dropdown\n .closest('form')\n .find(\"input:hidden[name='\" + $dropdown.data('fieldName') + \"']\");\n Issuable.filterResults($dropdown.closest('form'));\n } else if ($dropdown.hasClass('js-filter-submit')) {\n $dropdown.closest('form').submit();\n } else {\n if (!$dropdown.hasClass('js-filter-bulk-update')) {\n saveLabelData();\n }\n }\n }\n },\n multiSelect: $dropdown.hasClass('js-multiselect'),\n vue: $dropdown.hasClass('js-issue-board-sidebar'),\n clicked: function(clickEvent) {\n const { $el, e, isMarking } = clickEvent;\n const label = clickEvent.selectedObj;\n\n var isIssueIndex, isMRIndex, page, boardsModel;\n var fadeOutLoader = () => {\n $loading.fadeOut();\n };\n\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = page === 'projects:merge_requests:index';\n\n if ($dropdown.parent().find('.is-active:not(.dropdown-clear-active)').length) {\n $dropdown\n .parent()\n .find('.dropdown-clear-active')\n .removeClass('is-active');\n }\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return;\n }\n\n if ($dropdown.hasClass('js-filter-bulk-update')) {\n _this.enableBulkLabelDropdown();\n _this.setDropdownData($dropdown, isMarking, label.id);\n return;\n }\n\n if ($dropdown.closest('.add-issues-modal').length) {\n boardsModel = ModalStore.store.filter;\n }\n\n if (boardsModel) {\n if (label.isAny) {\n boardsModel['label_name'] = [];\n } else if ($el.hasClass('is-active')) {\n boardsModel['label_name'].push(label.title);\n }\n\n e.preventDefault();\n return;\n } else if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n if (!$dropdown.hasClass('js-multiselect')) {\n selectedLabel = label.title;\n return Issuable.filterResults($dropdown.closest('form'));\n }\n } else if ($dropdown.hasClass('js-filter-submit')) {\n return $dropdown.closest('form').submit();\n } else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n if ($el.hasClass('is-active')) {\n boardsStore.detail.issue.labels.push(\n new ListLabel({\n id: label.id,\n title: label.title,\n color: label.color[0],\n textColor: '#fff',\n }),\n );\n } else {\n var { labels } = boardsStore.detail.issue;\n labels = labels.filter(function(selectedLabel) {\n return selectedLabel.id !== label.id;\n });\n boardsStore.detail.issue.labels = labels;\n }\n\n $loading.fadeIn();\n\n boardsStore.detail.issue\n .update($dropdown.attr('data-issue-update'))\n .then(fadeOutLoader)\n .catch(fadeOutLoader);\n } else if (handleClick) {\n e.preventDefault();\n handleClick(label);\n } else {\n if ($dropdown.hasClass('js-multiselect')) {\n } else {\n return saveLabelData();\n }\n }\n },\n opened: function(e) {\n if ($dropdown.hasClass('js-issue-board-sidebar')) {\n const previousSelection = $dropdown.attr('data-selected');\n this.selected = previousSelection ? previousSelection.split(',') : [];\n $dropdown.data('glDropdown').updateLabel();\n }\n },\n preserveContext: true,\n });\n\n // Set dropdown data\n _this.setOriginalDropdownData($dropdownContainer, $dropdown);\n });\n this.bindEvents();\n }\n\n static getLabelTemplate(tplData) {\n // We could use ES6 template string here\n // and properly indent markup for readability\n // but that also introduces unintended white-space\n // so best approach is to use traditional way of\n // concatenation\n // see: http://2ality.com/2016/05/template-literal-whitespace.html#joining-arrays\n const tpl = _.template(\n [\n '<% _.each(labels, function(label){ %>',\n '?label_name[]=<%- encodeURIComponent(label.title) %>\">',\n '\" style=\"background-color: <%- label.color %>; color: <%- label.text_color %>;\">',\n '<%- label.title %>',\n '',\n '',\n '<% }); %>',\n ].join(''),\n );\n\n return tpl(tplData);\n }\n\n bindEvents() {\n return $('body').on('change', '.selected-issuable', this.onSelectCheckboxIssue);\n }\n // eslint-disable-next-line class-methods-use-this\n onSelectCheckboxIssue() {\n if ($('.selected-issuable:checked').length) {\n return;\n }\n return $('.issues-bulk-update .labels-filter .dropdown-toggle-text').text('Label');\n }\n // eslint-disable-next-line class-methods-use-this\n enableBulkLabelDropdown() {\n IssuableBulkUpdateActions.willUpdateLabels = true;\n }\n // eslint-disable-next-line class-methods-use-this\n setDropdownData($dropdown, isMarking, value) {\n var i, markedIds, unmarkedIds, indeterminateIds;\n\n markedIds = $dropdown.data('marked') || [];\n unmarkedIds = $dropdown.data('unmarked') || [];\n indeterminateIds = $dropdown.data('indeterminate') || [];\n\n if (isMarking) {\n markedIds.push(value);\n\n i = indeterminateIds.indexOf(value);\n if (i > -1) {\n indeterminateIds.splice(i, 1);\n }\n\n i = unmarkedIds.indexOf(value);\n if (i > -1) {\n unmarkedIds.splice(i, 1);\n }\n } else {\n // If marked item (not common) is unmarked\n i = markedIds.indexOf(value);\n if (i > -1) {\n markedIds.splice(i, 1);\n }\n\n // If an indeterminate item is being unmarked\n if (IssuableBulkUpdateActions.getOriginalIndeterminateIds().indexOf(value) > -1) {\n unmarkedIds.push(value);\n }\n\n // If a marked item is being unmarked\n // (a marked item could also be a label that is present in all selection)\n if (IssuableBulkUpdateActions.getOriginalCommonIds().indexOf(value) > -1) {\n unmarkedIds.push(value);\n }\n }\n\n $dropdown.data('marked', markedIds);\n $dropdown.data('unmarked', unmarkedIds);\n $dropdown.data('indeterminate', indeterminateIds);\n }\n // eslint-disable-next-line class-methods-use-this\n setOriginalDropdownData($container, $dropdown) {\n const labels = [];\n $container.find('[name=\"label_name[]\"]').map(function() {\n return labels.push(this.value);\n });\n $dropdown.data('marked', labels);\n }\n}\n","/* eslint-disable one-var, no-unused-vars, object-shorthand, no-else-return, no-self-compare, consistent-return, no-param-reassign, no-shadow */\n/* global Issuable */\n/* global ListMilestone */\n\nimport $ from 'jquery';\nimport _ from 'underscore';\nimport { __ } from '~/locale';\nimport '~/gl_dropdown';\nimport axios from './lib/utils/axios_utils';\nimport { timeFor } from './lib/utils/datetime_utility';\nimport ModalStore from './boards/stores/modal_store';\nimport boardsStore, {\n boardStoreIssueSet,\n boardStoreIssueDelete,\n} from './boards/stores/boards_store';\n\nexport default class MilestoneSelect {\n constructor(currentProject, els, options = {}) {\n if (currentProject !== null) {\n this.currentProject =\n typeof currentProject === 'string' ? JSON.parse(currentProject) : currentProject;\n }\n\n MilestoneSelect.init(els, options);\n }\n\n static init(els, options) {\n let $els = $(els);\n\n if (!els) {\n $els = $('.js-milestone-select');\n }\n\n $els.each((i, dropdown) => {\n let milestoneLinkNoneTemplate,\n milestoneLinkTemplate,\n selectedMilestone,\n selectedMilestoneDefault;\n const $dropdown = $(dropdown);\n const projectId = $dropdown.data('projectId');\n const milestonesUrl = $dropdown.data('milestones');\n const issueUpdateURL = $dropdown.data('issueUpdate');\n const showNo = $dropdown.data('showNo');\n const showAny = $dropdown.data('showAny');\n const showMenuAbove = $dropdown.data('showMenuAbove');\n const showUpcoming = $dropdown.data('showUpcoming');\n const showStarted = $dropdown.data('showStarted');\n const useId = $dropdown.data('useId');\n const defaultLabel = $dropdown.data('defaultLabel');\n const defaultNo = $dropdown.data('defaultNo');\n const issuableId = $dropdown.data('issuableId');\n const abilityName = $dropdown.data('abilityName');\n const $selectBox = $dropdown.closest('.selectbox');\n const $block = $selectBox.closest('.block');\n const $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon');\n const $value = $block.find('.value');\n const $loading = $block.find('.block-loading').fadeOut();\n selectedMilestoneDefault = showAny ? '' : null;\n selectedMilestoneDefault = showNo && defaultNo ? 'No Milestone' : selectedMilestoneDefault;\n selectedMilestone = $dropdown.data('selected') || selectedMilestoneDefault;\n\n if (issueUpdateURL) {\n milestoneLinkTemplate = _.template(\n '\" class=\"bold has-tooltip\" data-container=\"body\" title=\"<%- remaining %>\"><%- title %>',\n );\n milestoneLinkNoneTemplate = 'None';\n }\n return $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: (term, callback) =>\n axios.get(milestonesUrl).then(({ data }) => {\n const extraOptions = [];\n if (showAny) {\n extraOptions.push({\n id: null,\n name: null,\n title: 'Any Milestone',\n });\n }\n if (showNo) {\n extraOptions.push({\n id: -1,\n name: 'No Milestone',\n title: 'No Milestone',\n });\n }\n if (showUpcoming) {\n extraOptions.push({\n id: -2,\n name: '#upcoming',\n title: 'Upcoming',\n });\n }\n if (showStarted) {\n extraOptions.push({\n id: -3,\n name: '#started',\n title: 'Started',\n });\n }\n if (extraOptions.length) {\n extraOptions.push('divider');\n }\n\n callback(extraOptions.concat(data));\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n $(`[data-milestone-id=\"${_.escape(selectedMilestone)}\"] > a`).addClass('is-active');\n }),\n renderRow: milestone => `\n
  • \n \n ${_.escape(milestone.title)}\n \n
  • \n `,\n filterable: true,\n search: {\n fields: ['title'],\n },\n selectable: true,\n toggleLabel: (selected, el, e) => {\n if (selected && 'id' in selected && $(el).hasClass('is-active')) {\n return selected.title;\n } else {\n return defaultLabel;\n }\n },\n defaultLabel: defaultLabel,\n fieldName: $dropdown.data('fieldName'),\n text: milestone => _.escape(milestone.title),\n id: milestone => {\n if (!useId && !$dropdown.is('.js-issuable-form-dropdown')) {\n return milestone.name;\n } else {\n return milestone.id;\n }\n },\n hidden: () => {\n $selectBox.hide();\n // display:block overrides the hide-collapse rule\n return $value.css('display', '');\n },\n opened: e => {\n const $el = $(e.currentTarget);\n if ($dropdown.hasClass('js-issue-board-sidebar') || options.handleClick) {\n selectedMilestone = $dropdown[0].dataset.selected || selectedMilestoneDefault;\n }\n $('a.is-active', $el).removeClass('is-active');\n $(`[data-milestone-id=\"${_.escape(selectedMilestone)}\"] > a`, $el).addClass('is-active');\n },\n vue: $dropdown.hasClass('js-issue-board-sidebar'),\n clicked: clickEvent => {\n const { $el, e } = clickEvent;\n let selected = clickEvent.selectedObj;\n\n let data, modalStoreFilter;\n if (!selected) return;\n\n if (options.handleClick) {\n e.preventDefault();\n options.handleClick(selected);\n return;\n }\n\n const page = $('body').attr('data-page');\n const isIssueIndex = page === 'projects:issues:index';\n const isMRIndex = page === page && page === 'projects:merge_requests:index';\n const isSelecting = selected.name !== selectedMilestone;\n selectedMilestone = isSelecting ? selected.name : selectedMilestoneDefault;\n\n if (\n $dropdown.hasClass('js-filter-bulk-update') ||\n $dropdown.hasClass('js-issuable-form-dropdown')\n ) {\n e.preventDefault();\n return;\n }\n\n if ($dropdown.closest('.add-issues-modal').length) {\n modalStoreFilter = ModalStore.store.filter;\n }\n\n if (modalStoreFilter) {\n modalStoreFilter[$dropdown.data('fieldName')] = selected.name;\n e.preventDefault();\n } else if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n return Issuable.filterResults($dropdown.closest('form'));\n } else if ($dropdown.hasClass('js-filter-submit')) {\n return $dropdown.closest('form').submit();\n } else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n if (selected.id !== -1 && isSelecting) {\n boardStoreIssueSet(\n 'milestone',\n new ListMilestone({\n id: selected.id,\n title: selected.name,\n }),\n );\n } else {\n boardStoreIssueDelete('milestone');\n }\n\n $dropdown.trigger('loading.gl.dropdown');\n $loading.removeClass('hidden').fadeIn();\n\n boardsStore.detail.issue\n .update($dropdown.attr('data-issue-update'))\n .then(() => {\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n })\n .catch(() => {\n $loading.fadeOut();\n });\n } else {\n selected = $selectBox.find('input[type=\"hidden\"]').val();\n data = {};\n data[abilityName] = {};\n data[abilityName].milestone_id = selected != null ? selected : null;\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n return axios\n .put(issueUpdateURL, data)\n .then(({ data }) => {\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n $selectBox.hide();\n $value.css('display', '');\n if (data.milestone != null) {\n data.milestone.remaining = timeFor(data.milestone.due_date);\n data.milestone.name = data.milestone.title;\n $value.html(milestoneLinkTemplate(data.milestone));\n return $sidebarCollapsedValue\n .attr(\n 'data-original-title',\n `${data.milestone.name}
    ${data.milestone.remaining}`,\n )\n .find('span')\n .text(data.milestone.title);\n } else {\n $value.html(milestoneLinkNoneTemplate);\n return $sidebarCollapsedValue\n .attr('data-original-title', __('Milestone'))\n .find('span')\n .text(__('None'));\n }\n })\n .catch(() => {\n $loading.fadeOut();\n });\n }\n },\n });\n });\n }\n}\n\nwindow.MilestoneSelect = MilestoneSelect;\n","import IssuableIndex from '~/issuable_index';\nimport ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';\nimport UsersSelect from '~/users_select';\nimport initFilteredSearch from '~/pages/search/init_filtered_search';\nimport IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys';\nimport { FILTERED_SEARCH } from '~/pages/constants';\nimport { ISSUABLE_INDEX } from '~/pages/projects/constants';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n IssuableFilteredSearchTokenKeys.addExtraTokensForMergeRequests();\n\n initFilteredSearch({\n page: FILTERED_SEARCH.MERGE_REQUESTS,\n filteredSearchTokenKeys: IssuableFilteredSearchTokenKeys,\n });\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","import FilteredSearchTokenKeys from './filtered_search_token_keys';\n\nexport const tokenKeys = [\n {\n key: 'author',\n type: 'string',\n param: 'username',\n symbol: '@',\n icon: 'pencil',\n tag: '@author',\n },\n {\n key: 'assignee',\n type: 'string',\n param: 'username',\n symbol: '@',\n icon: 'user',\n tag: '@assignee',\n },\n {\n key: 'milestone',\n type: 'string',\n param: 'title',\n symbol: '%',\n icon: 'clock',\n tag: '%milestone',\n },\n {\n key: 'label',\n type: 'array',\n param: 'name[]',\n symbol: '~',\n icon: 'labels',\n tag: '~label',\n },\n];\n\nif (gon.current_user_id) {\n // Appending tokenkeys only logged-in\n tokenKeys.push({\n key: 'my-reaction',\n type: 'string',\n param: 'emoji',\n symbol: '',\n icon: 'thumb-up',\n tag: 'emoji',\n });\n}\n\nexport const alternativeTokenKeys = [\n {\n key: 'label',\n type: 'string',\n param: 'name',\n symbol: '~',\n },\n];\n\nexport const conditions = [\n {\n url: 'assignee_id=None',\n tokenKey: 'assignee',\n value: 'none',\n },\n {\n url: 'assignee_id=Any',\n tokenKey: 'assignee',\n value: 'any',\n },\n {\n url: 'milestone_title=None',\n tokenKey: 'milestone',\n value: 'none',\n },\n {\n url: 'milestone_title=Any',\n tokenKey: 'milestone',\n value: 'any',\n },\n {\n url: 'milestone_title=%23upcoming',\n tokenKey: 'milestone',\n value: 'upcoming',\n },\n {\n url: 'milestone_title=%23started',\n tokenKey: 'milestone',\n value: 'started',\n },\n {\n url: 'label_name[]=None',\n tokenKey: 'label',\n value: 'none',\n },\n {\n url: 'label_name[]=Any',\n tokenKey: 'any',\n value: 'any',\n },\n {\n url: 'my_reaction_emoji=None',\n tokenKey: 'my-reaction',\n value: 'none',\n },\n {\n url: 'my_reaction_emoji=Any',\n tokenKey: 'my-reaction',\n value: 'any',\n },\n];\n\nconst IssuableFilteredSearchTokenKeys = new FilteredSearchTokenKeys(\n tokenKeys,\n alternativeTokenKeys,\n conditions,\n);\n\nexport default IssuableFilteredSearchTokenKeys;\n","/* eslint-disable no-shadow */\n/* global List */\n\nimport $ from 'jquery';\nimport _ from 'underscore';\nimport Vue from 'vue';\nimport Cookies from 'js-cookie';\nimport { getUrlParamsArray, parseBoolean } from '~/lib/utils/common_utils';\n\nconst boardsStore = {\n disabled: false,\n filter: {\n path: '',\n },\n state: {},\n detail: {\n issue: {},\n },\n moving: {\n issue: {},\n list: {},\n },\n create() {\n this.state.lists = [];\n this.filter.path = getUrlParamsArray().join('&');\n this.detail = {\n issue: {},\n };\n },\n addList(listObj, defaultAvatar) {\n const list = new List(listObj, defaultAvatar);\n this.state.lists.push(list);\n\n return list;\n },\n new(listObj) {\n const list = this.addList(listObj);\n const backlogList = this.findList('type', 'backlog', 'backlog');\n\n list\n .save()\n .then(() => {\n // Remove any new issues from the backlog\n // as they will be visible in the new list\n list.issues.forEach(backlogList.removeIssue.bind(backlogList));\n this.state.lists = _.sortBy(this.state.lists, 'position');\n })\n .catch(() => {\n // https://gitlab.com/gitlab-org/gitlab-ce/issues/30821\n });\n this.removeBlankState();\n },\n updateNewListDropdown(listId) {\n $(`.js-board-list-${listId}`).removeClass('is-active');\n },\n shouldAddBlankState() {\n // Decide whether to add the blank state\n return !this.state.lists.filter(list => list.type !== 'backlog' && list.type !== 'closed')[0];\n },\n addBlankState() {\n if (!this.shouldAddBlankState() || this.welcomeIsHidden() || this.disabled) return;\n\n this.addList({\n id: 'blank',\n list_type: 'blank',\n title: 'Welcome to your Issue Board!',\n position: 0,\n });\n\n this.state.lists = _.sortBy(this.state.lists, 'position');\n },\n removeBlankState() {\n this.removeList('blank');\n\n Cookies.set('issue_board_welcome_hidden', 'true', {\n expires: 365 * 10,\n path: '',\n });\n },\n welcomeIsHidden() {\n return parseBoolean(Cookies.get('issue_board_welcome_hidden'));\n },\n removeList(id, type = 'blank') {\n const list = this.findList('id', id, type);\n\n if (!list) return;\n\n this.state.lists = this.state.lists.filter(list => list.id !== id);\n },\n moveList(listFrom, orderLists) {\n orderLists.forEach((id, i) => {\n const list = this.findList('id', parseInt(id, 10));\n\n list.position = i;\n });\n listFrom.update();\n },\n moveIssueToList(listFrom, listTo, issue, newIndex) {\n const issueTo = listTo.findIssue(issue.id);\n const issueLists = issue.getLists();\n const listLabels = issueLists.map(listIssue => listIssue.label);\n\n if (!issueTo) {\n // Check if target list assignee is already present in this issue\n if (\n listTo.type === 'assignee' &&\n listFrom.type === 'assignee' &&\n issue.findAssignee(listTo.assignee)\n ) {\n const targetIssue = listTo.findIssue(issue.id);\n targetIssue.removeAssignee(listFrom.assignee);\n } else if (listTo.type === 'milestone') {\n const currentMilestone = issue.milestone;\n const currentLists = this.state.lists\n .filter(list => list.type === 'milestone' && list.id !== listTo.id)\n .filter(list => list.issues.some(listIssue => issue.id === listIssue.id));\n\n issue.removeMilestone(currentMilestone);\n issue.addMilestone(listTo.milestone);\n currentLists.forEach(currentList => currentList.removeIssue(issue));\n listTo.addIssue(issue, listFrom, newIndex);\n } else {\n // Add to new lists issues if it doesn't already exist\n listTo.addIssue(issue, listFrom, newIndex);\n }\n } else {\n listTo.updateIssueLabel(issue, listFrom);\n issueTo.removeLabel(listFrom.label);\n }\n\n if (listTo.type === 'closed' && listFrom.type !== 'backlog') {\n issueLists.forEach(list => {\n list.removeIssue(issue);\n });\n issue.removeLabels(listLabels);\n } else if (listTo.type === 'backlog' && listFrom.type === 'assignee') {\n issue.removeAssignee(listFrom.assignee);\n listFrom.removeIssue(issue);\n } else if (listTo.type === 'backlog' && listFrom.type === 'milestone') {\n issue.removeMilestone(listFrom.milestone);\n listFrom.removeIssue(issue);\n } else if (this.shouldRemoveIssue(listFrom, listTo)) {\n listFrom.removeIssue(issue);\n }\n },\n shouldRemoveIssue(listFrom, listTo) {\n return (\n (listTo.type !== 'label' && listFrom.type === 'assignee') ||\n (listTo.type !== 'assignee' && listFrom.type === 'label') ||\n listFrom.type === 'backlog'\n );\n },\n moveIssueInList(list, issue, oldIndex, newIndex, idArray) {\n const beforeId = parseInt(idArray[newIndex - 1], 10) || null;\n const afterId = parseInt(idArray[newIndex + 1], 10) || null;\n\n list.moveIssue(issue, oldIndex, newIndex, beforeId, afterId);\n },\n findList(key, val, type = 'label') {\n const filteredList = this.state.lists.filter(list => {\n const byType = type\n ? list.type === type || list.type === 'assignee' || list.type === 'milestone'\n : true;\n\n return list[key] === val && byType;\n });\n return filteredList[0];\n },\n updateFiltersUrl() {\n window.history.pushState(null, null, `?${this.filter.path}`);\n },\n};\n\n// hacks added in order to allow milestone_select to function properly\n// TODO: remove these\n\nexport function boardStoreIssueSet(...args) {\n Vue.set(boardsStore.detail.issue, ...args);\n}\n\nexport function boardStoreIssueDelete(...args) {\n Vue.delete(boardsStore.detail.issue, ...args);\n}\n\nexport default boardsStore;\n","import Vue from 'vue';\n\nexport default new Vue();\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--1!../../../../../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--1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./recent_searches_dropdown_content.vue?vue&type=script&lang=js&\"","\n\n","import { render, staticRenderFns } from \"./recent_searches_dropdown_content.vue?vue&type=template&id=bbbc6146&\"\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\ncomponent.options.__file = \"recent_searches_dropdown_content.vue\"\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,tokenIndex){return _c('span',{key:(\"dropdown-token-\" + tokenIndex),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(\"You don't have any recent searches\")])])}\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(recentSearchesStore, recentSearchesService, wrapperElement) {\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() {\n return state;\n },\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\nexport default RecentSearchesRoot;\n","import _ from 'underscore';\n\nclass RecentSearchesStore {\n constructor(initialState = {}, allowedKeys) {\n this.state = Object.assign(\n {\n isLocalStorageAvailable: true,\n recentSearches: [],\n allowedKeys,\n },\n initialState,\n );\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 { getParameterByName, getUrlParamsArray } from '~/lib/utils/common_utils';\nimport IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys';\nimport { visitUrl } from '../lib/utils/url_utility';\nimport Flash from '../flash';\nimport FilteredSearchContainer from './container';\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 = IssuableFilteredSearchTokenKeys,\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(\n '.js-filtered-search-history-dropdown',\n );\n const fullPath = this.searchHistoryDropdownElement\n ? this.searchHistoryDropdownElement.dataset.fullPath\n : '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\n .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 (\n !isElementInFilteredSearch &&\n !isElementInDynamicFilterDropdown &&\n !isElementInStaticFilterDropdown &&\n inputContainer\n ) {\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 } = this.tokenizer.processTokens(\n input.value,\n this.filteredSearchTokenKeys.getKeys(),\n );\n const { isLastVisualTokenValid } = 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 uppercaseTokenName: this.filteredSearchTokenKeys.shouldUppercaseTokenName(t.key),\n capitalizeTokenValue: this.filteredSearchTokenKeys.shouldCapitalizeTokenValue(t.key),\n });\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, null, {\n uppercaseTokenName: this.filteredSearchTokenKeys.shouldUppercaseTokenName(tokenKey),\n capitalizeTokenValue: this.filteredSearchTokenKeys.shouldCapitalizeTokenValue(tokenKey),\n });\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 const tokenKey = FilteredSearchVisualTokens.getLastTokenPartial();\n FilteredSearchVisualTokens.addFilterVisualToken(searchToken, null, {\n capitalizeTokenValue: this.filteredSearchTokenKeys.shouldCapitalizeTokenValue(tokenKey),\n });\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\n .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 })\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(condition.tokenKey, 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 const { uppercaseTokenName, capitalizeTokenValue } = match;\n FilteredSearchVisualTokens.addFilterVisualToken(\n sanitizedKey,\n `${symbol}${quotationsToUse}${sanitizedValue}${quotationsToUse}`,\n {\n canEdit,\n uppercaseTokenName,\n capitalizeTokenValue,\n },\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]}`, {\n canEdit,\n });\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]}`, {\n canEdit,\n });\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 tokenKeys = this.filteredSearchTokenKeys.getKeys();\n const { tokens, searchToken } = this.tokenizer.processTokens(searchQuery, tokenKeys);\n const currentState = state || getParameterByName('state') || 'opened';\n paths.push(`state=${currentState}`);\n\n tokens.forEach(token => {\n const condition = this.filteredSearchTokenKeys.searchByConditionKeyValue(\n token.key,\n token.value.toLowerCase(),\n );\n const tokenConfig = this.filteredSearchTokenKeys.searchByKey(token.key) || {};\n const { param } = tokenConfig;\n\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 (tokenConfig.lowercaseValueOnSubmit) {\n tokenValue = tokenValue.toLowerCase();\n }\n\n if (\n (tokenValue[0] === \"'\" && tokenValue[tokenValue.length - 1] === \"'\") ||\n (tokenValue[0] === '\"' && tokenValue[tokenValue.length - 1] === '\"')\n ) {\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\n .split(' ')\n .map(t => encodeURIComponent(t))\n .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 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 import/prefer-default-export */\n\nexport const FILTERED_SEARCH = {\n MERGE_REQUESTS: 'merge_requests',\n ISSUES: 'issues',\n ADMIN_RUNNERS: 'admin/runners',\n};\n","import Mousetrap from 'mousetrap';\nimport findAndFollowLink from '../../lib/utils/navigation_utility';\nimport Shortcuts from './shortcuts';\n\nexport default class ShortcutsNavigation extends Shortcuts {\n constructor() {\n super();\n\n Mousetrap.bind('g p', () => findAndFollowLink('.shortcuts-project'));\n Mousetrap.bind('g v', () => findAndFollowLink('.shortcuts-project-activity'));\n Mousetrap.bind('g f', () => findAndFollowLink('.shortcuts-tree'));\n Mousetrap.bind('g c', () => findAndFollowLink('.shortcuts-commits'));\n Mousetrap.bind('g j', () => findAndFollowLink('.shortcuts-builds'));\n Mousetrap.bind('g n', () => findAndFollowLink('.shortcuts-network'));\n Mousetrap.bind('g d', () => findAndFollowLink('.shortcuts-repository-charts'));\n Mousetrap.bind('g i', () => findAndFollowLink('.shortcuts-issues'));\n Mousetrap.bind('g b', () => findAndFollowLink('.shortcuts-issue-boards'));\n Mousetrap.bind('g m', () => findAndFollowLink('.shortcuts-merge_requests'));\n Mousetrap.bind('g w', () => findAndFollowLink('.shortcuts-wiki'));\n Mousetrap.bind('g s', () => findAndFollowLink('.shortcuts-snippets'));\n Mousetrap.bind('g k', () => findAndFollowLink('.shortcuts-kubernetes'));\n Mousetrap.bind('g e', () => findAndFollowLink('.shortcuts-environments'));\n Mousetrap.bind('g l', () => findAndFollowLink('.shortcuts-metrics'));\n Mousetrap.bind('i', () => findAndFollowLink('.shortcuts-new-issue'));\n\n this.enabledHelp.push('.hidden-shortcut.project');\n }\n}\n","import $ from 'jquery';\nimport AccessorUtilities from './lib/utils/accessor';\n\nexport default class ProjectSelectComboButton {\n constructor(select) {\n this.projectSelectInput = $(select);\n this.newItemBtn = $('.new-project-item-link');\n this.resourceType = this.newItemBtn.data('type');\n this.resourceLabel = this.newItemBtn.data('label');\n this.formattedText = this.deriveTextVariants();\n this.groupId = this.projectSelectInput.data('groupId');\n this.bindEvents();\n this.initLocalStorage();\n }\n\n bindEvents() {\n this.projectSelectInput\n .siblings('.new-project-item-select-button')\n .on('click', e => this.openDropdown(e));\n\n this.newItemBtn.on('click', e => {\n if (!this.getProjectFromLocalStorage()) {\n e.preventDefault();\n this.openDropdown(e);\n }\n });\n\n this.projectSelectInput.on('change', () => this.selectProject());\n }\n\n initLocalStorage() {\n const localStorageIsSafe = AccessorUtilities.isLocalStorageAccessSafe();\n\n if (localStorageIsSafe) {\n this.localStorageKey = [\n 'group',\n this.groupId,\n this.formattedText.localStorageItemType,\n 'recent-project',\n ].join('-');\n this.setBtnTextFromLocalStorage();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n openDropdown(event) {\n $(event.currentTarget)\n .siblings('.project-item-select')\n .select2('open');\n }\n\n selectProject() {\n const selectedProjectData = JSON.parse(this.projectSelectInput.val());\n const projectUrl = `${selectedProjectData.url}/${this.projectSelectInput.data('relativePath')}`;\n const projectName = selectedProjectData.name;\n\n const projectMeta = {\n url: projectUrl,\n name: projectName,\n };\n\n this.setNewItemBtnAttributes(projectMeta);\n this.setProjectInLocalStorage(projectMeta);\n }\n\n setBtnTextFromLocalStorage() {\n const cachedProjectData = this.getProjectFromLocalStorage();\n\n this.setNewItemBtnAttributes(cachedProjectData);\n }\n\n setNewItemBtnAttributes(project) {\n if (project) {\n this.newItemBtn.attr('href', project.url);\n this.newItemBtn.text(`${this.formattedText.defaultTextPrefix} in ${project.name}`);\n } else {\n this.newItemBtn.text(`Select project to create ${this.formattedText.presetTextSuffix}`);\n }\n }\n\n getProjectFromLocalStorage() {\n const projectString = localStorage.getItem(this.localStorageKey);\n\n return JSON.parse(projectString);\n }\n\n setProjectInLocalStorage(projectMeta) {\n const projectString = JSON.stringify(projectMeta);\n\n localStorage.setItem(this.localStorageKey, projectString);\n }\n\n deriveTextVariants() {\n const defaultTextPrefix = this.resourceLabel;\n\n // the trailing slice call depluralizes each of these strings (e.g. new-issues -> new-issue)\n const localStorageItemType = `new-${this.resourceType\n .split('_')\n .join('-')\n .slice(0, -1)}`;\n const presetTextSuffix = this.resourceType\n .split('_')\n .join(' ')\n .slice(0, -1);\n\n return {\n localStorageItemType, // new-issue / new-merge-request\n defaultTextPrefix, // New issue / New merge request\n presetTextSuffix, // issue / merge request\n };\n }\n}\n","/* eslint-disable func-names, no-var, object-shorthand, one-var, no-else-return */\n\nimport $ from 'jquery';\nimport Api from './api';\nimport ProjectSelectComboButton from './project_select_combo_button';\n\nexport default function projectSelect() {\n $('.ajax-project-select').each(function(i, select) {\n var placeholder;\n const simpleFilter = $(select).data('simpleFilter') || false;\n this.groupId = $(select).data('groupId');\n this.includeGroups = $(select).data('includeGroups');\n this.allProjects = $(select).data('allProjects') || false;\n this.orderBy = $(select).data('orderBy') || 'id';\n this.withIssuesEnabled = $(select).data('withIssuesEnabled');\n this.withMergeRequestsEnabled = $(select).data('withMergeRequestsEnabled');\n this.withShared =\n $(select).data('withShared') === undefined ? true : $(select).data('withShared');\n this.includeProjectsInSubgroups = $(select).data('includeProjectsInSubgroups') || false;\n this.allowClear = $(select).data('allowClear') || false;\n\n placeholder = 'Search for project';\n if (this.includeGroups) {\n placeholder += ' or group';\n }\n\n $(select).select2({\n placeholder: placeholder,\n minimumInputLength: 0,\n query: (function(_this) {\n return function(query) {\n var finalCallback, projectsCallback;\n finalCallback = function(projects) {\n var data;\n data = {\n results: projects,\n };\n return query.callback(data);\n };\n if (_this.includeGroups) {\n projectsCallback = function(projects) {\n var groupsCallback;\n groupsCallback = function(groups) {\n var data;\n data = groups.concat(projects);\n return finalCallback(data);\n };\n return Api.groups(query.term, {}, groupsCallback);\n };\n } else {\n projectsCallback = finalCallback;\n }\n if (_this.groupId) {\n return Api.groupProjects(\n _this.groupId,\n query.term,\n {\n with_issues_enabled: _this.withIssuesEnabled,\n with_merge_requests_enabled: _this.withMergeRequestsEnabled,\n with_shared: _this.withShared,\n include_subgroups: _this.includeProjectsInSubgroups,\n },\n projectsCallback,\n );\n } else {\n return Api.projects(\n query.term,\n {\n order_by: _this.orderBy,\n with_issues_enabled: _this.withIssuesEnabled,\n with_merge_requests_enabled: _this.withMergeRequestsEnabled,\n membership: !_this.allProjects,\n },\n projectsCallback,\n );\n }\n };\n })(this),\n id: function(project) {\n if (simpleFilter) return project.id;\n return JSON.stringify({\n name: project.name,\n url: project.web_url,\n });\n },\n text: function(project) {\n return project.name_with_namespace || project.name;\n },\n\n initSelection: function(el, callback) {\n return Api.project(el.val()).then(({ data }) => callback(data));\n },\n\n allowClear: this.allowClear,\n\n dropdownCssClass: 'ajax-project-dropdown',\n });\n if (simpleFilter) return select;\n return new ProjectSelectComboButton(select);\n });\n}\n","/* eslint-disable func-names, no-var, no-return-assign, one-var, object-shorthand, vars-on-top */\n\nimport $ from 'jquery';\nimport Cookies from 'js-cookie';\nimport { __ } from '~/locale';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport axios from '~/lib/utils/axios_utils';\nimport flash from '~/flash';\nimport projectSelect from '../../project_select';\n\nexport default class Project {\n constructor() {\n const $cloneOptions = $('ul.clone-options-dropdown');\n const $projectCloneField = $('#project_clone');\n const $cloneBtnLabel = $('.js-git-clone-holder .js-clone-dropdown-label');\n const mobileCloneField = document.querySelector(\n '.js-mobile-git-clone .js-clone-dropdown-label',\n );\n\n const selectedCloneOption = $cloneBtnLabel.text().trim();\n if (selectedCloneOption.length > 0) {\n $(`a:contains('${selectedCloneOption}')`, $cloneOptions).addClass('is-active');\n }\n\n $('a', $cloneOptions).on('click', e => {\n e.preventDefault();\n const $this = $(e.currentTarget);\n const url = $this.attr('href');\n const cloneType = $this.data('cloneType');\n\n $('.is-active', $cloneOptions).removeClass('is-active');\n $(`a[data-clone-type=\"${cloneType}\"]`).each(function() {\n const $el = $(this);\n const activeText = $el.find('.dropdown-menu-inner-title').text();\n const $container = $el.closest('.project-clone-holder');\n const $label = $container.find('.js-clone-dropdown-label');\n\n $el.toggleClass('is-active');\n $label.text(activeText);\n });\n\n if (mobileCloneField) {\n mobileCloneField.dataset.clipboardText = url;\n } else {\n $projectCloneField.val(url);\n }\n $('.js-git-empty .js-clone').text(url);\n });\n // Ref switcher\n Project.initRefSwitcher();\n $('.project-refs-select').on('change', function() {\n return $(this)\n .parents('form')\n .submit();\n });\n $('.hide-no-ssh-message').on('click', function(e) {\n Cookies.set('hide_no_ssh_message', 'false');\n $(this)\n .parents('.no-ssh-key-message')\n .remove();\n return e.preventDefault();\n });\n $('.hide-no-password-message').on('click', function(e) {\n Cookies.set('hide_no_password_message', 'false');\n $(this)\n .parents('.no-password-message')\n .remove();\n return e.preventDefault();\n });\n $('.hide-auto-devops-implicitly-enabled-banner').on('click', function(e) {\n const projectId = $(this).data('project-id');\n const cookieKey = `hide_auto_devops_implicitly_enabled_banner_${projectId}`;\n Cookies.set(cookieKey, 'false');\n $(this)\n .parents('.auto-devops-implicitly-enabled-banner')\n .remove();\n return e.preventDefault();\n });\n Project.projectSelectDropdown();\n }\n\n static projectSelectDropdown() {\n projectSelect();\n $('.project-item-select').on('click', e => Project.changeProject($(e.currentTarget).val()));\n }\n\n static changeProject(url) {\n return (window.location = url);\n }\n\n static initRefSwitcher() {\n var refListItem = document.createElement('li');\n var refLink = document.createElement('a');\n\n refLink.href = '#';\n\n return $('.js-project-refs-dropdown').each(function() {\n var $dropdown, selected;\n $dropdown = $(this);\n selected = $dropdown.data('selected');\n return $dropdown.glDropdown({\n data(term, callback) {\n axios\n .get($dropdown.data('refsUrl'), {\n params: {\n ref: $dropdown.data('ref'),\n search: term,\n },\n })\n .then(({ data }) => callback(data))\n .catch(() => flash(__('An error occurred while getting projects')));\n },\n selectable: true,\n filterable: true,\n filterRemote: true,\n filterByText: true,\n inputFieldName: $dropdown.data('inputFieldName'),\n fieldName: $dropdown.data('fieldName'),\n renderRow: function(ref) {\n var li = refListItem.cloneNode(false);\n\n if (ref.header != null) {\n li.className = 'dropdown-header';\n li.textContent = ref.header;\n } else {\n var link = refLink.cloneNode(false);\n\n if (ref === selected) {\n link.className = 'is-active';\n }\n\n link.textContent = ref;\n link.dataset.ref = ref;\n\n li.appendChild(link);\n }\n\n return li;\n },\n id: function(obj, $el) {\n return $el.attr('data-ref');\n },\n toggleLabel: function(obj, $el) {\n return $el.text().trim();\n },\n clicked: function(options) {\n const { e } = options;\n e.preventDefault();\n if ($('input[name=\"ref\"]').length) {\n var $form = $dropdown.closest('form');\n\n var $visit = $dropdown.data('visit');\n var shouldVisit = $visit ? true : $visit;\n var action = $form.attr('action');\n var divider = action.indexOf('?') === -1 ? '?' : '&';\n if (shouldVisit) {\n visitUrl(`${action}${divider}${$form.serialize()}`);\n }\n }\n },\n });\n });\n }\n}\n","import initDismissableCallout from '~/dismissable_callout';\nimport initGkeDropdowns from '~/projects/gke_cluster_dropdowns';\nimport Project from './project';\nimport ShortcutsNavigation from '../../behaviors/shortcuts/shortcuts_navigation';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const { page } = document.body.dataset;\n const newClusterViews = [\n 'projects:clusters:new',\n 'projects:clusters:create_gcp',\n 'projects:clusters:create_user',\n ];\n\n if (newClusterViews.indexOf(page) > -1) {\n initDismissableCallout('.gcp-signup-offer');\n initGkeDropdowns();\n }\n\n new Project(); // eslint-disable-line no-new\n new ShortcutsNavigation(); // eslint-disable-line no-new\n});\n","/* eslint-disable import/prefer-default-export */\n\nexport const ISSUABLE_INDEX = {\n MERGE_REQUEST: 'merge_request_',\n ISSUE: 'issue_',\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-issuable');\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-issuable: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-issuable: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';\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","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\n .put($resetToken.attr('href'))\n .then(({ data }) => {\n $('#issuable_email')\n .val(data.new_address)\n .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 consistent-return, func-names, array-callback-return, prefer-arrow-callback, no-unused-vars */\n\nimport $ from 'jquery';\nimport _ from 'underscore';\nimport axios from './lib/utils/axios_utils';\nimport Flash from './flash';\n\nexport default {\n init({ container, form, issues, prefixId } = {}) {\n this.prefixId = prefixId || 'issue_';\n this.form = form || this.getElement('.bulk-update');\n this.$labelDropdown = this.form.find('.js-label-select');\n this.issues = issues || this.getElement('.issues-list .issue');\n this.willUpdateLabels = false;\n this.bindEvents();\n },\n\n bindEvents() {\n return this.form.off('submit').on('submit', this.onFormSubmit.bind(this));\n },\n\n onFormSubmit(e) {\n e.preventDefault();\n return this.submit();\n },\n\n submit() {\n axios[this.form.attr('method')](this.form.attr('action'), this.getFormDataAsObject())\n .then(() => window.location.reload())\n .catch(() => this.onFormSubmitFailure());\n },\n\n onFormSubmitFailure() {\n this.form.find('[type=\"submit\"]').enable();\n return new Flash('Issue update failed');\n },\n\n getSelectedIssues() {\n return this.issues.has('.selected-issuable:checked');\n },\n\n getLabelsFromSelection() {\n const labels = [];\n this.getSelectedIssues().map(function() {\n const labelsData = $(this).data('labels');\n if (labelsData) {\n return labelsData.map(function(labelId) {\n if (labels.indexOf(labelId) === -1) {\n return labels.push(labelId);\n }\n });\n }\n });\n return labels;\n },\n\n /**\n * Will return only labels that were marked previously and the user has unmarked\n * @return {Array} Label IDs\n */\n\n getUnmarkedIndeterminedLabels() {\n const result = [];\n const labelsToKeep = this.$labelDropdown.data('indeterminate');\n\n this.getLabelsFromSelection().forEach(id => {\n if (labelsToKeep.indexOf(id) === -1) {\n result.push(id);\n }\n });\n\n return result;\n },\n\n /**\n * Simple form serialization, it will return just what we need\n * Returns key/value pairs from form data\n */\n\n getFormDataAsObject() {\n const formData = {\n update: {\n state_event: this.form.find('input[name=\"update[state_event]\"]').val(),\n // For Merge Requests\n assignee_id: this.form.find('input[name=\"update[assignee_id]\"]').val(),\n // For Issues\n assignee_ids: [this.form.find('input[name=\"update[assignee_ids][]\"]').val()],\n milestone_id: this.form.find('input[name=\"update[milestone_id]\"]').val(),\n issuable_ids: this.form.find('input[name=\"update[issuable_ids]\"]').val(),\n subscription_event: this.form.find('input[name=\"update[subscription_event]\"]').val(),\n add_label_ids: [],\n remove_label_ids: [],\n },\n };\n if (this.willUpdateLabels) {\n formData.update.add_label_ids = this.$labelDropdown.data('marked');\n formData.update.remove_label_ids = this.$labelDropdown.data('unmarked');\n }\n return formData;\n },\n\n setOriginalDropdownData() {\n const $labelSelect = $('.bulk-update .js-label-select');\n $labelSelect.data('common', this.getOriginalCommonIds());\n $labelSelect.data('marked', this.getOriginalMarkedIds());\n $labelSelect.data('indeterminate', this.getOriginalIndeterminateIds());\n },\n\n // From issuable's initial bulk selection\n getOriginalCommonIds() {\n const labelIds = [];\n\n this.getElement('.selected-issuable:checked').each((i, el) => {\n labelIds.push(this.getElement(`#${this.prefixId}${el.dataset.id}`).data('labels'));\n });\n return _.intersection.apply(this, labelIds);\n },\n\n // From issuable's initial bulk selection\n getOriginalMarkedIds() {\n const labelIds = [];\n this.getElement('.selected-issuable:checked').each((i, el) => {\n labelIds.push(this.getElement(`#${this.prefixId}${el.dataset.id}`).data('labels'));\n });\n return _.intersection.apply(this, labelIds);\n },\n\n // From issuable's initial bulk selection\n getOriginalIndeterminateIds() {\n const uniqueIds = [];\n const labelIds = [];\n let issuableLabels = [];\n\n // Collect unique label IDs for all checked issues\n this.getElement('.selected-issuable:checked').each((i, el) => {\n issuableLabels = this.getElement(`#${this.prefixId}${el.dataset.id}`).data('labels');\n issuableLabels.forEach(labelId => {\n // Store unique IDs\n if (uniqueIds.indexOf(labelId) === -1) {\n uniqueIds.push(labelId);\n }\n });\n // Store array of IDs per issuable\n labelIds.push(issuableLabels);\n });\n // Add uniqueIds to add it as argument for _.intersection\n labelIds.unshift(uniqueIds);\n // Return IDs that are present but not in all selected issueables\n return _.difference(uniqueIds, _.intersection.apply(this, labelIds));\n },\n\n getElement(selector) {\n this.scopeEl = this.scopeEl || $('.content');\n return this.scopeEl.find(selector);\n },\n};\n"],"sourceRoot":""}