{"version":3,"sources":["webpack:///./labels_select.js","webpack:///./create_label.js","webpack:///./users_select.js","webpack:///./issuable_bulk_update_actions.js"],"names":["LabelsSelect","els","_this","$els","options","arguments","length","undefined","_classCallCheck","this","jquery__WEBPACK_IMPORTED_MODULE_0___default","each","i","dropdown","$block","$dropdown","$form","$loading","$selectbox","$sidebarCollapsedValue","$value","abilityName","defaultLabel","issueUpdateURL","labelUrl","namespacePath","projectPath","saveLabelData","selectedLabel","showAny","showNo","$sidebarLabelTooltip","initialSelected","fieldName","showMenuAbove","$dropdownContainer","closest","find","data","hasClass","split","fadeOut","is","map","value","get","handleClick","tooltip","_create_label__WEBPACK_IMPORTED_MODULE_6__","selected","underscore__WEBPACK_IMPORTED_MODULE_1___default","a","isEqual","label_ids","removeClass","fadeIn","trigger","_lib_utils_axios_utils__WEBPACK_IMPORTED_MODULE_3__","put","then","_ref","labelCount","template","labelTooltipTitle","labelTitles","hide","labels","getLabelTemplate","removeAttr","html","text","label","title","slice","push","join","Object","_locale__WEBPACK_IMPORTED_MODULE_2__","attr","container","catch","_flash__WEBPACK_IMPORTED_MODULE_7__","glDropdown","term","callback","res","chain","groupBy","color","dup","id","duplicate","extraData","unshift","isAny","concat","positionMenuAbove","renderRow","instance","$a","$li","colorEl","indeterminate","removesAll","selectedClass","marked","dropdownName","dropdownValue","indexOf","splice","toString","replace","_filtered_search_dropdown_utils__WEBPACK_IMPORTED_MODULE_5__","duplicateLabelColor","addClass","escape","prop","search","fields","selectable","filterable","toggleLabel","el","$dropdownParent","parent","$dropdownInputField","isSelected","selectedLabels","val","index","hidden","isIssueIndex","isMRIndex","page","Issuable","filterResults","submit","multiSelect","vue","clicked","clickEvent","boardsModel","$el","e","isMarking","selectedObj","fadeOutLoader","enableBulkLabelDropdown","setDropdownData","_boards_stores_modal_store__WEBPACK_IMPORTED_MODULE_8__","store","filter","preventDefault","gl","issueBoards","BoardsStore","detail","issue","ListLabel","textColor","update","setOriginalDropdownData","bindEvents","on","onSelectCheckboxIssue","_issuable_bulk_update_actions__WEBPACK_IMPORTED_MODULE_4__","willUpdateLabels","markedIds","unmarkedIds","indeterminateIds","getOriginalIndeterminateIds","getOriginalCommonIds","$container","tplData","tpl","CreateLabelDropdown","$dropdownBack","$cancelButton","$newLabelField","$newColorField","$colorPreview","$newLabelError","$newLabelCreateButton","$colorSuggestions","disable","cleanBinding","addBinding","off","self","$this","addColorValue","enableLabelCreateButton","bind","resetForm","stopPropagation","saveLabel","css","enable","_api__WEBPACK_IMPORTED_MODULE_1__","newLabel","message","errors","keys","key","_lib_utils_text_utility__WEBPACK_IMPORTED_MODULE_2__","show","document","UsersSelect","currentUser","users","user","usersPath","userPath","_typeof","JSON","parse","$collapsedSidebar","assignTo","assigneeTemplate","collapsedAssigneeTemplate","defaultNullUser","firstUser","issueURL","selectedId","selectedIdDefault","showAnyUser","showNullUser","projectId","groupId","showCurrentUser","todoFilter","todoStateFilter","authorId","assignYourself","unassignedSelected","remove","input","createElement","type","name","currentUserInfo","dataset","meta","before","after","addEventListener","getSelectedUserInputs","getSelected","parseInt","checkMaxSelect","maxSelect","firstSelectedId","emitSidebarEvent","getMultiSelectDropdownTitle","selectedUser","selectedUsers","u","otherSelected","s","currentTarget","$input","$","gon","current_user_id","current_user_fullname","assignee_id","_lib_utils_axios_utils__WEBPACK_IMPORTED_MODULE_2__","tooltipTitle","assignee","username","avatar","avatar_url","_locale__WEBPACK_IMPORTED_MODULE_3__","processData","selectedInputs","uniq","userId","_input$dataset","avatarUrl","anyUser","j","len","obj","showDivider","beforeDivider","header","sort","b","forEach","filterRemote","inputValue","filterInput","filteredFullData","parseData","inputMeta","isActive","previouslySelected","toLowerCase","element","addInput","isSelecting","_boards_stores_modal_store__WEBPACK_IMPORTED_MODULE_4__","opened","highlightSelected","updateLabel","img","default_avatar_url","select","showEmailUser","skipLdap","skipUsers","select2","placeholder","multiple","minimumInputLength","query","emailUser","nullUser","ref","results","match","trimmed","trim","invite","initSelection","args","call","apply","formatResult","formatSelection","dropdownCssClass","escapeMarkup","m","window","noop","prototype","user_id","test","url","buildUrl","_ref2","params","active","project_id","group_id","skip_ldap","todo_filter","todo_state_filter","current_user","author_id","skip_users","_ref3","relative_url_root","__webpack_exports__","_flash__WEBPACK_IMPORTED_MODULE_3__","__webpack_require__","init","form","issues","prefixId","getElement","$labelDropdown","onFormSubmit","getFormDataAsObject","location","reload","onFormSubmitFailure","getSelectedIssues","has","getLabelsFromSelection","labelsData","labelId","getUnmarkedIndeterminedLabels","result","labelsToKeep","formData","state_event","assignee_ids","milestone_id","issuable_ids","subscription_event","add_label_ids","remove_label_ids","$labelSelect","getOriginalMarkedIds","_this2","labelIds","intersection","_this3","_this4","uniqueIds","issuableLabels","difference","selector","scopeEl"],"mappings":"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","file":"commons~pages.dashboard.issues~pages.dashboard.merge_requests~pages.groups.boards~pages.projects.boa~594b4d02.33d0314b.chunk.js","sourcesContent":["/* eslint-disable no-useless-return, func-names, space-before-function-paren, wrap-iife, no-var, no-underscore-dangle, prefer-arrow-callback, max-len, one-var, no-unused-vars, one-var-declaration-per-line, prefer-template, no-new, consistent-return, object-shorthand, comma-dangle, no-shadow, no-param-reassign, brace-style, vars-on-top, quotes, no-lonely-if, no-else-return, dot-notation, no-empty, no-return-assign, camelcase, prefer-spread */\n/* global Issuable */\n/* global ListLabel */\n\nimport $ from 'jquery';\nimport _ from 'underscore';\nimport { __ } 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';\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, $colorPreview, $dropdown, $form, $loading, $selectbox, $sidebarCollapsedValue, $value, abilityName, defaultLabel, enableLabelCreateButton, issueURLSplit, issueUpdateURL, labelUrl, namespacePath, projectPath, saveLabelData, selectedLabel, showAny, showNo, $sidebarLabelTooltip, initialSelected, $toggleText, fieldName, useId, propertyName, showMenuAbove, $container, $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 labelUrl = $dropdown.data('labels');\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');\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('.js-issuable-form-dropdown, .js-filter-bulk-update, .js-label-sidebar-dropdown');\n propertyName = useId ? 'id' : 'title';\n initialSelected = $selectbox\n .find('input[name=\"' + $dropdown.data('fieldName') + '\"]')\n .map(function () {\n return this.value;\n }).get();\n const handleClick = options.handleClick;\n\n $sidebarLabelTooltip.tooltip();\n\n if ($dropdown.closest('.dropdown').find('.dropdown-new-label').length) {\n new CreateLabelDropdown($dropdown.closest('.dropdown').find('.dropdown-new-label'), namespacePath, projectPath);\n }\n\n saveLabelData = function() {\n var data, selected;\n selected = $dropdown.closest('.selectbox').find(\"input[name='\" + fieldName + \"']\").map(function() {\n return this.value;\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.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 }\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 }\n else {\n labelTooltipTitle = __('Labels');\n }\n\n $sidebarLabelTooltip\n .attr('title', labelTooltipTitle)\n .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 axios.get(labelUrl)\n .then((res) => {\n let data = _.chain(res.data).groupBy(function(label) {\n return label.title;\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 }).value();\n if ($dropdown.hasClass('js-extra-options')) {\n var extraData = [];\n if (showNo) {\n extraData.unshift({\n id: 0,\n title: '没有标记'\n });\n }\n if (showAny) {\n extraData.unshift({\n isAny: true,\n title: '所有标记'\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, $li, color, colorEl, indeterminate, removesAll, selectedClass, spacing, i, marked, dropdownName, 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).toString().replace(/'/g, '\\\\\\'');\n\n if ($form.find(\"input[type='hidden'][name='\" + dropdownName + \"'][value='\" + dropdownValue + \"']\").length) {\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 }\n else {\n if (label.color != null) {\n color = label.color[0];\n }\n }\n if (color) {\n colorEl = \"\";\n }\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 var title = selected.title;\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.id === 0) {\n this.selected = [];\n return '无标记';\n }\n else if (isSelected) {\n this.selected.push(title);\n }\n else {\n var index = this.selected.indexOf(title);\n this.selected.splice(index, 1);\n }\n\n if (selectedLabels.length === 1) {\n return selectedLabels;\n }\n else if (selectedLabels.length) {\n return selectedLabels[0] + \" +\" + (selectedLabels.length - 1) + \" more\";\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 }\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.closest('form').find(\"input:hidden[name='\" + ($dropdown.data('fieldName')) + \"']\");\n Issuable.filterResults($dropdown.closest('form'));\n }\n else if ($dropdown.hasClass('js-filter-submit')) {\n $dropdown.closest('form').submit();\n }\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.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 }\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 }\n else if ($dropdown.hasClass('js-filter-submit')) {\n return $dropdown.closest('form').submit();\n }\n else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n if ($el.hasClass('is-active')) {\n gl.issueBoards.BoardsStore.detail.issue.labels.push(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 = gl.issueBoards.BoardsStore.detail.issue.labels;\n labels = labels.filter(function (selectedLabel) {\n return selectedLabel.id !== label.id;\n });\n gl.issueBoards.BoardsStore.detail.issue.labels = labels;\n }\n\n $loading.fadeIn();\n\n gl.issueBoards.BoardsStore.detail.issue.update($dropdown.attr('data-issue-update'))\n .then(fadeOutLoader)\n .catch(fadeOutLoader);\n }\n else if (handleClick) {\n e.preventDefault();\n handleClick(label);\n }\n else {\n if ($dropdown.hasClass('js-multiselect')) {\n\n }\n else {\n return saveLabelData();\n }\n }\n },\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 '<% _.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 return tpl(tplData);\n }\n\n bindEvents() {\n return $('body').on('change', '.selected_issue', this.onSelectCheckboxIssue);\n }\n // eslint-disable-next-line class-methods-use-this\n onSelectCheckboxIssue() {\n if ($('.selected_issue: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 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\n .val('')\n .trigger('change');\n\n this.$newColorField\n .val('')\n .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(this.namespacePath, this.projectPath, {\n title: this.$newLabelField.val(),\n color: this.$newColorField.val(),\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).map(key =>\n `${humanize(key)} ${label.message[key].join(', ')}`,\n ).join('
    ');\n }\n\n this.$newLabelError\n .html(errors)\n .show();\n } else {\n this.$dropdownBack.trigger('click');\n\n $(document).trigger('created.label', label);\n }\n });\n }\n}\n","/* eslint-disable func-names, space-before-function-paren, one-var, no-var, prefer-rest-params, wrap-iife, quotes, max-len, one-var-declaration-per-line, vars-on-top, prefer-arrow-callback, consistent-return, comma-dangle, object-shorthand, no-shadow, no-unused-vars, no-else-return, no-self-compare, prefer-template, no-unused-expressions, no-lonely-if, yoda, prefer-spread, no-void, camelcase, no-param-reassign */\n/* global Issuable */\n/* global emitSidebarEvent */\n\nimport $ from 'jquery';\nimport _ from 'underscore';\nimport axios from './lib/utils/axios_utils';\nimport { __ } from './locale';\nimport ModalStore from './boards/stores/modal_store';\n\n// TODO: remove eventHub hack after code splitting refactor\nwindow.emitSidebarEvent = window.emitSidebarEvent || $.noop;\n\nfunction UsersSelect(currentUser, els, options = {}) {\n var $els;\n this.users = this.users.bind(this);\n this.user = this.user.bind(this);\n this.usersPath = \"/autocomplete/users.json\";\n this.userPath = \"/autocomplete/users/:id.json\";\n if (currentUser != null) {\n if (typeof currentUser === 'object') {\n this.currentUser = currentUser;\n } else {\n this.currentUser = JSON.parse(currentUser);\n }\n }\n\n const { handleClick } = options;\n\n $els = $(els);\n\n if (!els) {\n $els = $('.js-user-search');\n }\n\n $els.each((function(_this) {\n return function(i, dropdown) {\n var options = {};\n var $block, $collapsedSidebar, $dropdown, $loading, $selectbox, $value, abilityName, assignTo, assigneeTemplate, collapsedAssigneeTemplate, defaultLabel, defaultNullUser, firstUser, issueURL, selectedId, selectedIdDefault, showAnyUser, showNullUser, showMenuAbove;\n $dropdown = $(dropdown);\n options.projectId = $dropdown.data('projectId');\n options.groupId = $dropdown.data('groupId');\n options.showCurrentUser = $dropdown.data('currentUser');\n options.todoFilter = $dropdown.data('todoFilter');\n options.todoStateFilter = $dropdown.data('todoStateFilter');\n showNullUser = $dropdown.data('nullUser');\n defaultNullUser = $dropdown.data('nullUserDefault');\n showMenuAbove = $dropdown.data('showMenuAbove');\n showAnyUser = $dropdown.data('anyUser');\n firstUser = $dropdown.data('firstUser');\n options.authorId = $dropdown.data('authorId');\n defaultLabel = $dropdown.data('defaultLabel');\n issueURL = $dropdown.data('issueUpdate');\n $selectbox = $dropdown.closest('.selectbox');\n $block = $selectbox.closest('.block');\n abilityName = $dropdown.data('abilityName');\n $value = $block.find('.value');\n $collapsedSidebar = $block.find('.sidebar-collapsed-user');\n $loading = $block.find('.block-loading').fadeOut();\n selectedIdDefault = (defaultNullUser && showNullUser) ? 0 : null;\n selectedId = $dropdown.data('selected');\n\n if (selectedId === undefined) {\n selectedId = selectedIdDefault;\n }\n\n const assignYourself = function () {\n const unassignedSelected = $dropdown.closest('.selectbox')\n .find(`input[name='${$dropdown.data('fieldName')}'][value=0]`);\n\n if (unassignedSelected) {\n unassignedSelected.remove();\n }\n\n // Save current selected user to the DOM\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = $dropdown.data('fieldName');\n\n const currentUserInfo = $dropdown.data('currentUserInfo');\n\n if (currentUserInfo) {\n input.value = currentUserInfo.id;\n input.dataset.meta = _.escape(currentUserInfo.name);\n } else if (_this.currentUser) {\n input.value = _this.currentUser.id;\n }\n\n if ($selectbox) {\n $dropdown.parent().before(input);\n } else {\n $dropdown.after(input);\n }\n };\n\n if ($block[0]) {\n $block[0].addEventListener('assignYourself', assignYourself);\n }\n\n const getSelectedUserInputs = function() {\n return $selectbox\n .find(`input[name=\"${$dropdown.data('fieldName')}\"]`);\n };\n\n const getSelected = function() {\n return getSelectedUserInputs()\n .map((index, input) => parseInt(input.value, 10))\n .get();\n };\n\n const checkMaxSelect = function() {\n const maxSelect = $dropdown.data('maxSelect');\n if (maxSelect) {\n const selected = getSelected();\n\n if (selected.length > maxSelect) {\n const firstSelectedId = selected[0];\n const firstSelected = $dropdown.closest('.selectbox')\n .find(`input[name='${$dropdown.data('fieldName')}'][value=${firstSelectedId}]`);\n\n firstSelected.remove();\n emitSidebarEvent('sidebar.removeAssignee', {\n id: firstSelectedId,\n });\n }\n }\n };\n\n const getMultiSelectDropdownTitle = function(selectedUser, isSelected) {\n const selectedUsers = getSelected()\n .filter(u => u !== 0);\n\n const firstUser = getSelectedUserInputs()\n .map((index, input) => ({\n name: input.dataset.meta,\n value: parseInt(input.value, 10),\n }))\n .filter(u => u.id !== 0)\n .get(0);\n\n if (selectedUsers.length === 0) {\n return '未指派';\n } else if (selectedUsers.length === 1) {\n return firstUser.name;\n } else if (isSelected) {\n const otherSelected = selectedUsers.filter(s => s !== selectedUser.id);\n return `${selectedUser.name} + ${otherSelected.length} more`;\n } else {\n return `${firstUser.name} + ${selectedUsers.length - 1} more`;\n }\n };\n\n $('.assign-to-me-link').on('click', (e) => {\n e.preventDefault();\n $(e.currentTarget).hide();\n\n if ($dropdown.data('multiSelect')) {\n assignYourself();\n checkMaxSelect();\n\n const currentUserInfo = $dropdown.data('currentUserInfo');\n $dropdown.find('.dropdown-toggle-text').text(getMultiSelectDropdownTitle(currentUserInfo)).removeClass('is-default');\n } else {\n const $input = $(`input[name=\"${$dropdown.data('fieldName')}\"]`);\n $input.val(gon.current_user_id);\n selectedId = $input.val();\n $dropdown.find('.dropdown-toggle-text').text(gon.current_user_fullname).removeClass('is-default');\n }\n });\n\n $block.on('click', '.js-assign-yourself', (e) => {\n e.preventDefault();\n return assignTo(_this.currentUser.id);\n });\n\n assignTo = function(selected) {\n var data;\n data = {};\n data[abilityName] = {};\n data[abilityName].assignee_id = selected != null ? selected : null;\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n\n return axios.put(issueURL, data)\n .then(({ data }) => {\n var user, tooltipTitle;\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n if (data.assignee) {\n user = {\n name: data.assignee.name,\n username: data.assignee.username,\n avatar: data.assignee.avatar_url\n };\n tooltipTitle = _.escape(user.name);\n } else {\n user = {\n name: '未指派',\n username: '',\n avatar: ''\n };\n tooltipTitle = __('Assignee');\n }\n $value.html(assigneeTemplate(user));\n $collapsedSidebar.attr('title', tooltipTitle).tooltip('_fixTitle');\n return $collapsedSidebar.html(collapsedAssigneeTemplate(user));\n });\n };\n collapsedAssigneeTemplate = _.template('<% if( avatar ) { %> \"> \"\"\"> <% } else { %> <% } %>');\n assigneeTemplate = _.template('<% if (username) { %> \"> <% if( avatar ) { %> \"\"\"> <% } %> <%- name %> @<%- username %> <% } else { %> No assignee - assign yourself <% } %>');\n return $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: function(term, callback) {\n return _this.users(term, options, function(users) {\n // GitLabDropdownFilter returns this.instance\n // GitLabDropdownRemote returns this.options.instance\n const glDropdown = this.instance || this.options.instance;\n glDropdown.options.processData(term, users, callback);\n }.bind(this));\n },\n processData: function(term, data, callback) {\n let users = data;\n\n // Only show assigned user list when there is no search term\n if ($dropdown.hasClass('js-multiselect') && term.length === 0) {\n const selectedInputs = getSelectedUserInputs();\n\n // Potential duplicate entries when dealing with issue board\n // because issue board is also managed by vue\n const selectedUsers = _.uniq(selectedInputs, false, a => a.value)\n .filter((input) => {\n const userId = parseInt(input.value, 10);\n const inUsersArray = users.find(u => u.id === userId);\n\n return !inUsersArray && userId !== 0;\n })\n .map((input) => {\n const userId = parseInt(input.value, 10);\n const { avatarUrl, avatar_url, name, username } = input.dataset;\n return {\n avatar_url: avatarUrl || avatar_url,\n id: userId,\n name,\n username,\n };\n });\n\n users = data.concat(selectedUsers);\n }\n\n let anyUser;\n let index;\n let j;\n let len;\n let name;\n let obj;\n let showDivider;\n if (term.length === 0) {\n showDivider = 0;\n if (firstUser) {\n // Move current user to the front of the list\n for (index = j = 0, len = users.length; j < len; index = (j += 1)) {\n obj = users[index];\n if (obj.username === firstUser) {\n users.splice(index, 1);\n users.unshift(obj);\n break;\n }\n }\n }\n if (showNullUser) {\n showDivider += 1;\n users.unshift({\n beforeDivider: true,\n name: '未指派',\n id: 0\n });\n }\n if (showAnyUser) {\n showDivider += 1;\n name = showAnyUser;\n if (name === true) {\n name = 'Any User';\n }\n anyUser = {\n beforeDivider: true,\n name: name,\n id: null\n };\n users.unshift(anyUser);\n }\n\n if (showDivider) {\n users.splice(showDivider, 0, 'divider');\n }\n\n if ($dropdown.hasClass('js-multiselect')) {\n const selected = getSelected().filter(i => i !== 0);\n\n if (selected.length > 0) {\n if ($dropdown.data('dropdownHeader')) {\n showDivider += 1;\n users.splice(showDivider, 0, {\n header: $dropdown.data('dropdownHeader'),\n });\n }\n\n const selectedUsers = users\n .filter(u => selected.indexOf(u.id) !== -1)\n .sort((a, b) => a.name > b.name);\n\n users = users.filter(u => selected.indexOf(u.id) === -1);\n\n selectedUsers.forEach((selectedUser) => {\n showDivider += 1;\n users.splice(showDivider, 0, selectedUser);\n });\n\n users.splice(showDivider + 1, 0, 'divider');\n }\n }\n }\n\n callback(users);\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n },\n filterable: true,\n filterRemote: true,\n search: {\n fields: ['name', 'username']\n },\n selectable: true,\n fieldName: $dropdown.data('fieldName'),\n toggleLabel: function(selected, el, glDropdown) {\n const inputValue = glDropdown.filterInput.val();\n\n if (this.multiSelect && inputValue === '') {\n // Remove non-users from the fullData array\n const users = glDropdown.filteredFullData();\n const callback = glDropdown.parseData.bind(glDropdown);\n\n // Update the data model\n this.processData(inputValue, users, callback);\n }\n\n if (this.multiSelect) {\n return getMultiSelectDropdownTitle(selected, $(el).hasClass('is-active'));\n }\n\n if (selected && 'id' in selected && $(el).hasClass('is-active')) {\n $dropdown.find('.dropdown-toggle-text').removeClass('is-default');\n if (selected.text) {\n return selected.text;\n } else {\n return selected.name;\n }\n } else {\n $dropdown.find('.dropdown-toggle-text').addClass('is-default');\n return defaultLabel;\n }\n },\n defaultLabel: defaultLabel,\n hidden: function(e) {\n if ($dropdown.hasClass('js-multiselect')) {\n emitSidebarEvent('sidebar.saveAssignees');\n }\n\n if (!$dropdown.data('alwaysShowSelectbox')) {\n $selectbox.hide();\n\n // Recalculate where .value is because vue might have changed it\n $block = $selectbox.closest('.block');\n $value = $block.find('.value');\n // display:block overrides the hide-collapse rule\n $value.css('display', '');\n }\n },\n multiSelect: $dropdown.hasClass('js-multiselect'),\n inputMeta: $dropdown.data('inputMeta'),\n clicked: function(options) {\n const { $el, e, isMarking } = options;\n const user = options.selectedObj;\n\n if ($dropdown.hasClass('js-multiselect')) {\n const isActive = $el.hasClass('is-active');\n const previouslySelected = $dropdown.closest('.selectbox')\n .find(\"input[name='\" + ($dropdown.data('fieldName')) + \"'][value!=0]\");\n\n // Enables support for limiting the number of users selected\n // Automatically removes the first on the list if more users are selected\n checkMaxSelect();\n\n if (user.beforeDivider && user.name.toLowerCase() === '未指派') {\n // Unassigned selected\n previouslySelected.each((index, element) => {\n const id = parseInt(element.value, 10);\n element.remove();\n });\n emitSidebarEvent('sidebar.removeAllAssignees');\n } else if (isActive) {\n // user selected\n emitSidebarEvent('sidebar.addAssignee', user);\n\n // Remove unassigned selection (if it was previously selected)\n const unassignedSelected = $dropdown.closest('.selectbox')\n .find(\"input[name='\" + ($dropdown.data('fieldName')) + \"'][value=0]\");\n\n if (unassignedSelected) {\n unassignedSelected.remove();\n }\n } else {\n if (previouslySelected.length === 0) {\n // Select unassigned because there is no more selected users\n this.addInput($dropdown.data('fieldName'), 0, {});\n }\n\n // User unselected\n emitSidebarEvent('sidebar.removeAssignee', user);\n }\n\n if (getSelected().find(u => u === gon.current_user_id)) {\n $('.assign-to-me-link').hide();\n } else {\n $('.assign-to-me-link').show();\n }\n }\n\n var isIssueIndex, isMRIndex, page, selected;\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = (page === page && page === 'projects:merge_requests:index');\n if ($dropdown.hasClass('js-filter-bulk-update') || $dropdown.hasClass('js-issuable-form-dropdown')) {\n e.preventDefault();\n\n const isSelecting = (user.id !== selectedId);\n selectedId = isSelecting ? user.id : selectedIdDefault;\n\n if (selectedId === gon.current_user_id) {\n $('.assign-to-me-link').hide();\n } else {\n $('.assign-to-me-link').show();\n }\n return;\n }\n if ($el.closest('.add-issues-modal').length) {\n ModalStore.store.filter[$dropdown.data('fieldName')] = user.id;\n } else if (handleClick) {\n e.preventDefault();\n handleClick(user, isMarking);\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-multiselect')) {\n selected = $dropdown.closest('.selectbox').find(\"input[name='\" + ($dropdown.data('fieldName')) + \"']\").val();\n return assignTo(selected);\n }\n\n // Automatically close dropdown after assignee is selected\n // since CE has no multiple assignees\n // EE does not have a max-select\n if ($dropdown.data('maxSelect') &&\n getSelected().length === $dropdown.data('maxSelect')) {\n // Close the dropdown\n $dropdown.dropdown('toggle');\n }\n },\n id: function (user) {\n return user.id;\n },\n opened: function(e) {\n const $el = $(e.currentTarget);\n const selected = getSelected();\n if ($dropdown.hasClass('js-issue-board-sidebar') && selected.length === 0) {\n this.addInput($dropdown.data('fieldName'), 0, {});\n }\n $el.find('.is-active').removeClass('is-active');\n\n function highlightSelected(id) {\n $el.find(`li[data-user-id=\"${id}\"] .dropdown-menu-user-link`).addClass('is-active');\n }\n\n if (selected.length > 0) {\n getSelected().forEach(selectedId => highlightSelected(selectedId));\n } else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n highlightSelected(0);\n } else {\n highlightSelected(selectedId);\n }\n },\n updateLabel: $dropdown.data('dropdownTitle'),\n renderRow: function(user) {\n var avatar, img, listClosingTags, listWithName, listWithUserName, username;\n username = user.username ? \"@\" + user.username : \"\";\n avatar = user.avatar_url ? user.avatar_url : gon.default_avatar_url;\n\n let selected = false;\n\n if (this.multiSelect) {\n selected = getSelected().find(u => user.id === u);\n\n const fieldName = this.fieldName;\n const field = $dropdown.closest('.selectbox').find(\"input[name='\" + fieldName + \"'][value='\" + user.id + \"']\");\n\n if (field.length) {\n selected = true;\n }\n } else {\n selected = user.id === selectedId;\n }\n\n img = \"\";\n if (user.beforeDivider != null) {\n `
  • ${_.escape(user.name)}
  • `;\n } else {\n img = \"\";\n }\n\n return `\n
  • \n \n ${img}\n \n ${_.escape(user.name)}\n \n ${username ? `${username}` : ''}\n \n
  • \n `;\n }\n });\n };\n })(this));\n $('.ajax-users-select').each((function(_this) {\n return function(i, select) {\n var firstUser, showAnyUser, showEmailUser, showNullUser;\n var options = {};\n options.skipLdap = $(select).hasClass('skip_ldap');\n options.projectId = $(select).data('projectId');\n options.groupId = $(select).data('groupId');\n options.showCurrentUser = $(select).data('currentUser');\n options.authorId = $(select).data('authorId');\n options.skipUsers = $(select).data('skipUsers');\n showNullUser = $(select).data('nullUser');\n showAnyUser = $(select).data('anyUser');\n showEmailUser = $(select).data('emailUser');\n firstUser = $(select).data('firstUser');\n return $(select).select2({\n placeholder: \"Search for a user\",\n multiple: $(select).hasClass('multiselect'),\n minimumInputLength: 0,\n query: function(query) {\n return _this.users(query.term, options, function(users) {\n var anyUser, data, emailUser, index, j, len, name, nullUser, obj, ref;\n data = {\n results: users\n };\n if (query.term.length === 0) {\n if (firstUser) {\n // Move current user to the front of the list\n ref = data.results;\n for (index = j = 0, len = ref.length; j < len; index = (j += 1)) {\n obj = ref[index];\n if (obj.username === firstUser) {\n data.results.splice(index, 1);\n data.results.unshift(obj);\n break;\n }\n }\n }\n if (showNullUser) {\n nullUser = {\n name: '未指派',\n id: 0\n };\n data.results.unshift(nullUser);\n }\n if (showAnyUser) {\n name = showAnyUser;\n if (name === true) {\n name = 'Any User';\n }\n anyUser = {\n name: name,\n id: null\n };\n data.results.unshift(anyUser);\n }\n }\n if (showEmailUser && data.results.length === 0 && query.term.match(/^[^@]+@[^@]+$/)) {\n var trimmed = query.term.trim();\n emailUser = {\n name: \"邀请 \\\"\" + query.term + \"\\\" by email\",\n username: trimmed,\n id: trimmed,\n invite: true\n };\n data.results.unshift(emailUser);\n }\n return query.callback(data);\n });\n },\n initSelection: function() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.initSelection.apply(_this, args);\n },\n formatResult: function() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.formatResult.apply(_this, args);\n },\n formatSelection: function() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.formatSelection.apply(_this, args);\n },\n dropdownCssClass: \"ajax-users-dropdown\",\n // we do not want to escape markup since we are displaying html in results\n escapeMarkup: function(m) {\n return m;\n }\n });\n };\n })(this));\n}\n\nUsersSelect.prototype.initSelection = function(element, callback) {\n var id, nullUser;\n id = $(element).val();\n if (id === \"0\") {\n nullUser = {\n name: '未指派'\n };\n return callback(nullUser);\n } else if (id !== \"\") {\n return this.user(id, callback);\n }\n};\n\nUsersSelect.prototype.formatResult = function(user) {\n var avatar;\n if (user.avatar_url) {\n avatar = user.avatar_url;\n } else {\n avatar = gon.default_avatar_url;\n }\n return \"
    \";\n};\n\nUsersSelect.prototype.formatSelection = function(user) {\n return _.escape(user.name);\n};\n\nUsersSelect.prototype.user = function(user_id, callback) {\n if (!/^\\d+$/.test(user_id)) {\n return false;\n }\n\n var url;\n url = this.buildUrl(this.userPath);\n url = url.replace(':id', user_id);\n return axios.get(url)\n .then(({ data }) => {\n callback(data);\n });\n};\n\n// Return users list. Filtered by query\n// Only active users retrieved\nUsersSelect.prototype.users = function(query, options, callback) {\n const url = this.buildUrl(this.usersPath);\n const params = {\n search: query,\n active: true,\n project_id: options.projectId || null,\n group_id: options.groupId || null,\n skip_ldap: options.skipLdap || null,\n todo_filter: options.todoFilter || null,\n todo_state_filter: options.todoStateFilter || null,\n current_user: options.showCurrentUser || null,\n author_id: options.authorId || null,\n skip_users: options.skipUsers || null\n };\n return axios.get(url, { params })\n .then(({ data }) => {\n callback(data);\n });\n};\n\nUsersSelect.prototype.buildUrl = function(url) {\n if (gon.relative_url_root != null) {\n url = gon.relative_url_root.replace(/\\/$/, '') + url;\n }\n return url;\n};\n\nexport default UsersSelect;\n","/* eslint-disable comma-dangle, quotes, consistent-return, func-names, array-callback-return, space-before-function-paren, prefer-arrow-callback, max-len, no-unused-expressions, no-sequences, no-underscore-dangle, no-unused-vars, no-param-reassign */\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_issue: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_issue: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_issue: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_issue: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":""}