{"version":3,"sources":["webpack:///./ref/constants.js","webpack:///projects/commits/components/author_select.vue","webpack:///./projects/commits/components/author_select.vue?3dea","webpack:///./projects/commits/components/author_select.vue?d9f8","webpack:///./projects/commits/components/author_select.vue","webpack:///./projects/commits/store/actions.js","webpack:///./projects/commits/store/mutation_types.js","webpack:///./projects/commits/store/mutations.js","webpack:///./projects/commits/store/index.js","webpack:///./projects/commits/store/state.js","webpack:///./projects/commits/index.js","webpack:///./pages/projects/commits/show/index.js","webpack:///./commits.js","webpack:////build/source/vendor/assets/javascripts/jquery.endless-scroll.js","webpack:///./pager.js","webpack:///./ref/stores/mutation_types.js","webpack:///./ref/stores/actions.js","webpack:///./ref/stores/getters.js","webpack:///./ref/stores/mutations.js","webpack:///./ref/stores/index.js","webpack:///./ref/stores/state.js","webpack:///./lib/utils/http_status.js","webpack:///./loading_icon_for_legacy_js.js","webpack:///./ref/components/ambiguous_ref_modal.vue?5230","webpack:///ref/components/ambiguous_ref_modal.vue","webpack:///./ref/components/ambiguous_ref_modal.vue?b76c","webpack:///./ref/components/ambiguous_ref_modal.vue","webpack:///./ref/init_ambiguous_ref_modal.js","webpack:///./gpg_badges.js","webpack:///./ref/format_refs.js","webpack:///ref/components/ref_selector.vue","webpack:///./ref/components/ref_selector.vue?1e36","webpack:///./ref/components/ref_selector.vue?3221","webpack:///./ref/components/ref_selector.vue","webpack:///./render_vue_component_for_legacy_js.js","webpack:///./users_select/constants.js"],"names":["REF_TYPE_BRANCHES","REF_TYPE_TAGS","REF_TYPE_COMMITS","ALL_REF_TYPES","Object","freeze","BRANCH_REF_TYPE","TAG_REF_TYPE","TAG_REF_TYPE_ICON","BRANCH_REF_TYPE_ICON","REF_TYPE_PARAM_NAME","X_TOTAL_HEADER","SEARCH_DEBOUNCE_MS","DEFAULT_DEBOUNCE_AND_THROTTLE_MS","DEFAULT_I18N","defaultLabelText","__","dropdownHeader","searchPlaceholder","noResultsWithQuery","noResults","branchesErrorMessage","tagsErrorMessage","commitsErrorMessage","branches","tags","commits","noRefSelected","totalCountLabel","s__","tooltipMessage","name","components","GlAvatar","GlCollapsibleListbox","directives","GlTooltip","GlTooltipDirective","props","projectCommitsEl","type","HTMLDivElement","required","data","hasSearchParam","currentAuthor","searchTerm","searching","computed","mapState","dropdownText","dropdownItems","commitAuthorOptions","commitsAuthors","map","author","value","text","secondaryText","username","avatarUrl","avatar_url","options","textSrOnly","tooltipTitle","searchSummarySrText","n__","length","mounted","_this","fetchAuthors","params","queryToObject","window","location","search","searchParam","authorParam","commitsSearchInput","querySelector","setAttribute","dataset","toggle","addEventListener","_debounce","event","setSearchParam","target","methods","mapActions","selectAuthor","user","commitListElement","style","opacity","transition","visitUrl","commitsPath","searchAuthors","handleSearch","input","Boolean","_vm","this","_c","_self","rawName","ref","attrs","staticClass","on","scopedSlots","_u","key","fn","_v","_s","proxy","item","_e","model","callback","$$v","expression","setInitialData","commit","receiveAuthorsSuccess","authors","receiveAuthorsError","createAlert","message","dispatch","state","projectId","axios","get","joinPaths","gon","relative_url_root","project_id","states","ACTIVE_AND_BLOCKED_USER_STATES","then","catch","error","Sentry","assign","Vue","use","Vuex","Store","actions","mutations","el","constructor","limit","timer","$contentList","$","Pager","init","parseInt","prepareData","processCommits","bind","content","searchField","lastSearch","val","initSearch","clearTimeout","setTimeout","filterResults","_this2","form","Promise","resolve","commitsUrl","attr","serialize","addClass","serializeArray","reduce","acc","obj","html","removeClass","history","replaceState","page","document","title","processedData","$processedData","$commitsHeadersLast","find","last","lastShownDay","loadedShownDayFirst","filter","first","commitsCount","nextUntil","not","Number","localTimeAgo","commitsLimit","addShortcutsExtension","ShortcutsNavigation","GpgBadges","fetch","getElementById","store","render","h","AuthorSelectApp","_commitsPath$match","refType","treePath","commitsPathPrefix","match","generateRefDestinationUrl","selectedRef","selectedRefType","selectedRefURI","encodeURIComponent","selectedTreePath","encodeSaferUrl","commitsPathSuffix","useSymbolicRefNames","createElement","RefSelector","queryParams","sort","selected","matches","initCommitsRefSwitcher","initAmbiguousRefModal","endlessScroll","extend","bottomPixels","fireOnce","loader","insertAfter","resetCounter","ceaseFire","is_scrollable","firing","fired","fireSequence","apply","scroll","height","scrollTop","inner_wrap","wrapInner","after","remove","preload","disable","noop","successCallback","errorCallback","container","offset","getParameterByName","$container","$loading","getOld","initLoadMore","show","url","removeParams","append","count","isScrollable","hide","err","finally","$w","off","fireDelay","is","setEnabledRefTypes","refTypes","setParams","setUseSymbolicRefNames","setProjectId","setSelectedRef","query","dispatchIfRefTypeEnabled","action","enabledRefTypes","includes","searchBranches","Api","response","searchTags","searchCommits","getters","isQueryPossiblyASha","test","isLoading","requestCount","list","convertObjectPropsToCamelCase","b","undefined","default","protected","totalCount","headers","shortId","id","subtitle","_error$response","status","HTTP_STATUS_NOT_FOUND","createRefModule","namespaced","HTTP_STATUS_ABORTED","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_CONFLICT","HTTP_STATUS_GONE","HTTP_STATUS_PAYLOAD_TOO_LARGE","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_TOO_MANY_REQUESTS","HTTP_STATUS_INTERNAL_SERVER_ERROR","successCodes","defaultValue","prop","_GlLoadingIcon$props$","GlLoadingIcon","loadingIconForLegacyJS","inline","color","size","classes","label","renderVueComponentForLegacyJS","class","i18n","description","sprintf","secondaryDescription","viewTagButton","viewBranchButton","tagRefType","branchRefType","GlModal","GlButton","GlSprintf","refName","String","$refs","ambiguousRefModal","navigate","URL","href","searchParams","set","toString","$options","isRefTypeSet","parseBoolean","ambiguous","AmbiguousRefModal","tag","badges","children","displayError","endpoint","reject","Error","signatures","forEach","signature","commit_sha","replaceWith","convertToListBoxItems","items","GlBadge","GlIcon","ProtectedBadge","inheritAttrs","disabled","Array","validator","_isArray","every","Set","translations","toggleButtonClass","lastQuery","mapGetters","listBoxItems","addToFinalResult","header","push","formatListBoxItems","extendedToggleButtonClass","isArray","footerSlotProps","errors","errorsList","formatErrors","selectedRefForDisplay","replace","buttonText","noResultsMessage","dropdownIcon","icon","watch","immediate","handler","beforeCreate","$store","createStore","created","debouncedSearch","$watch","storeSearch","onSearchBoxInput","searchQuery","trim","selectRef","$emit","totalCountText","component","_g","_b","$event","group","_t","_l","errorMessage","$attrs","$listeners","domProps","Component","vm","$mount","$forceUpdate","$el","cloneNode","$destroy","AJAX_USERS_SELECT_PARAMS_MAP","group_id","todo_filter","todo_state_filter","current_user","author_id"],"mappings":"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","file":"pages.projects.commits.show.146d08c3.chunk.js","sourcesContent":["import { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\nimport { s__, __ } from '~/locale';\n\nexport const REF_TYPE_BRANCHES = 'REF_TYPE_BRANCHES';\nexport const REF_TYPE_TAGS = 'REF_TYPE_TAGS';\nexport const REF_TYPE_COMMITS = 'REF_TYPE_COMMITS';\nexport const ALL_REF_TYPES = Object.freeze([REF_TYPE_BRANCHES, REF_TYPE_TAGS, REF_TYPE_COMMITS]);\nexport const BRANCH_REF_TYPE = 'heads';\nexport const TAG_REF_TYPE = 'tags';\nexport const TAG_REF_TYPE_ICON = 'tag';\nexport const BRANCH_REF_TYPE_ICON = 'branch';\nexport const SEARCH_ICON = 'search';\nexport const REF_TYPE_PARAM_NAME = 'ref_type';\n\nexport const X_TOTAL_HEADER = 'x-total';\n\nexport const SEARCH_DEBOUNCE_MS = DEFAULT_DEBOUNCE_AND_THROTTLE_MS;\n\nexport const DEFAULT_I18N = Object.freeze({\n defaultLabelText: __('default'),\n dropdownHeader: __('Select Git revision'),\n searchPlaceholder: __('Search by Git revision'),\n noResultsWithQuery: __('No matching results for \"%{query}\"'),\n noResults: __('No matching results'),\n branchesErrorMessage: __('An error occurred while fetching branches. Retry the search.'),\n tagsErrorMessage: __('An error occurred while fetching tags. Retry the search.'),\n commitsErrorMessage: __('An error occurred while fetching commits. Retry the search.'),\n branches: __('Branches'),\n tags: __('Tags'),\n commits: __('Commits'),\n noRefSelected: __('No ref selected'),\n totalCountLabel: s__('TotalRefCountIndicator|1000+'),\n});\n","<script>\nimport { GlAvatar, GlCollapsibleListbox, GlTooltipDirective } from '@gitlab/ui';\nimport { debounce } from 'lodash';\n// eslint-disable-next-line no-restricted-imports\nimport { mapActions, mapState } from 'vuex';\nimport { queryToObject, visitUrl } from '~/lib/utils/url_utility';\nimport { n__, __ } from '~/locale';\nimport { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\n\nconst tooltipMessage = __('Searching by both author and message is currently not supported.');\n\nexport default {\n name: 'AuthorSelect',\n components: {\n GlAvatar,\n GlCollapsibleListbox,\n },\n directives: {\n GlTooltip: GlTooltipDirective,\n },\n props: {\n projectCommitsEl: {\n type: HTMLDivElement,\n required: true,\n },\n },\n data() {\n return {\n hasSearchParam: false,\n currentAuthor: '',\n searchTerm: '',\n searching: false,\n };\n },\n computed: {\n ...mapState(['commitsPath', 'commitsAuthors']),\n dropdownText() {\n return this.currentAuthor || __('Author');\n },\n dropdownItems() {\n const commitAuthorOptions = this.commitsAuthors.map((author) => ({\n value: author.name,\n text: author.name,\n secondaryText: author.username,\n avatarUrl: author.avatar_url,\n }));\n if (this.searchTerm) return commitAuthorOptions;\n\n const defaultOptions = {\n text: '',\n options: [{ text: __('Any Author'), value: '' }],\n textSrOnly: true,\n };\n const authorOptionsGroup = {\n text: 'authors',\n options: commitAuthorOptions,\n textSrOnly: true,\n };\n return [defaultOptions, authorOptionsGroup];\n },\n tooltipTitle() {\n return this.hasSearchParam && tooltipMessage;\n },\n searchSummarySrText() {\n return n__('%d author', '%d authors', this.commitsAuthors.length);\n },\n },\n mounted() {\n this.fetchAuthors();\n const params = queryToObject(window.location.search);\n const { search: searchParam, author: authorParam } = params;\n const commitsSearchInput = this.projectCommitsEl.querySelector('#commits-search');\n\n if (authorParam) {\n commitsSearchInput.setAttribute('disabled', true);\n commitsSearchInput.dataset.toggle = 'tooltip';\n commitsSearchInput.setAttribute('title', tooltipMessage);\n this.currentAuthor = authorParam;\n }\n\n if (searchParam) {\n this.hasSearchParam = true;\n }\n\n commitsSearchInput.addEventListener(\n 'keyup',\n debounce((event) => this.setSearchParam(event.target.value), 500), // keyup & time is to match effect of \"filter by commit message\"\n );\n },\n methods: {\n ...mapActions(['fetchAuthors']),\n selectAuthor(user) {\n // Follow up issue \"Remove usage of $.fadeIn from the codebase\"\n // > https://gitlab.com/gitlab-org/gitlab/-/issues/214395\n\n // Follow up issue \"Refactor commit list to a Vue Component\"\n // To resolving mixing Vue + Vanilla JS\n // > https://gitlab.com/gitlab-org/gitlab/-/issues/214010\n const commitListElement = this.projectCommitsEl.querySelector('#commits-list');\n\n // To mimick effect of \"filter by commit message\"\n commitListElement.style.opacity = 0.5;\n commitListElement.style.transition = 'opacity 200ms';\n\n if (!user) {\n return visitUrl(this.commitsPath);\n }\n\n return visitUrl(`${this.commitsPath}?author=${user}`);\n },\n searchAuthors: debounce(async function debouncedSearch() {\n this.searching = true;\n await this.fetchAuthors(this.searchTerm);\n this.searching = false;\n }, DEFAULT_DEBOUNCE_AND_THROTTLE_MS),\n handleSearch(input) {\n this.searchTerm = input;\n this.searchAuthors();\n },\n setSearchParam(value) {\n this.hasSearchParam = Boolean(value);\n },\n },\n};\n</script>\n\n<template>\n <div ref=\"listboxContainer\" v-gl-tooltip :title=\"tooltipTitle\" :disabled=\"!hasSearchParam\">\n <gl-collapsible-listbox\n v-model=\"currentAuthor\"\n block\n is-check-centered\n searchable\n class=\"gl-mt-3 sm:gl-mt-0\"\n :items=\"dropdownItems\"\n :header-text=\"__('Search by author')\"\n :toggle-text=\"dropdownText\"\n :search-placeholder=\"__('Search')\"\n :searching=\"searching\"\n :disabled=\"hasSearchParam\"\n @search=\"handleSearch\"\n @select=\"selectAuthor\"\n >\n <template #search-summary-sr-only>\n {{ searchSummarySrText }}\n </template>\n <template #list-item=\"{ item }\">\n <span class=\"gl-flex gl-items-center\">\n <gl-avatar\n v-if=\"item.avatarUrl\"\n class=\"gl-mr-3\"\n :size=\"32\"\n :entity-name=\"item.text\"\n :src=\"item.avatarUrl\"\n :alt=\"item.text\"\n />\n <span class=\"gl-flex gl-flex-col gl-overflow-hidden gl-hyphens-auto gl-break-words\">\n {{ item.text }}\n <span v-if=\"item.secondaryText\" class=\"gl-text-subtle\">\n {{ item.secondaryText }}\n </span>\n </span>\n </span>\n </template>\n </gl-collapsible-listbox>\n </div>\n</template>\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./author_select.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./author_select.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./author_select.vue?vue&type=template&id=0f52a20e\"\nimport script from \"./author_select.vue?vue&type=script&lang=js\"\nexport * from \"./author_select.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\"}],ref:\"listboxContainer\",attrs:{\"title\":_vm.tooltipTitle,\"disabled\":!_vm.hasSearchParam}},[_c('gl-collapsible-listbox',{staticClass:\"gl-mt-3 sm:gl-mt-0\",attrs:{\"block\":\"\",\"is-check-centered\":\"\",\"searchable\":\"\",\"items\":_vm.dropdownItems,\"header-text\":_vm.__('Search by author'),\"toggle-text\":_vm.dropdownText,\"search-placeholder\":_vm.__('Search'),\"searching\":_vm.searching,\"disabled\":_vm.hasSearchParam},on:{\"search\":_vm.handleSearch,\"select\":_vm.selectAuthor},scopedSlots:_vm._u([{key:\"search-summary-sr-only\",fn:function(){return [_vm._v(\"\\n \"+_vm._s(_vm.searchSummarySrText)+\"\\n \")]},proxy:true},{key:\"list-item\",fn:function({ item }){return [_c('span',{staticClass:\"gl-flex gl-items-center\"},[(item.avatarUrl)?_c('gl-avatar',{staticClass:\"gl-mr-3\",attrs:{\"size\":32,\"entity-name\":item.text,\"src\":item.avatarUrl,\"alt\":item.text}}):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"gl-flex gl-flex-col gl-overflow-hidden gl-hyphens-auto gl-break-words\"},[_vm._v(\"\\n \"+_vm._s(item.text)+\"\\n \"),(item.secondaryText)?_c('span',{staticClass:\"gl-text-subtle\"},[_vm._v(\"\\n \"+_vm._s(item.secondaryText)+\"\\n \")]):_vm._e()])],1)]}}]),model:{value:(_vm.currentAuthor),callback:function ($$v) {_vm.currentAuthor=$$v},expression:\"currentAuthor\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import * as Sentry from '~/sentry/sentry_browser_wrapper';\nimport { createAlert } from '~/alert';\nimport axios from '~/lib/utils/axios_utils';\nimport { joinPaths } from '~/lib/utils/url_utility';\nimport { __ } from '~/locale';\nimport { ACTIVE_AND_BLOCKED_USER_STATES } from '~/users_select/constants';\nimport * as types from './mutation_types';\n\nexport default {\n setInitialData({ commit }, data) {\n commit(types.SET_INITIAL_DATA, data);\n },\n receiveAuthorsSuccess({ commit }, authors) {\n commit(types.COMMITS_AUTHORS, authors);\n },\n receiveAuthorsError() {\n createAlert({\n message: __('An error occurred fetching the project authors.'),\n });\n },\n fetchAuthors({ dispatch, state }, author = null) {\n const { projectId } = state;\n return axios\n .get(joinPaths(gon.relative_url_root || '', '/-/autocomplete/users.json'), {\n params: {\n project_id: projectId,\n states: ACTIVE_AND_BLOCKED_USER_STATES,\n search: author,\n },\n })\n .then(({ data }) => dispatch('receiveAuthorsSuccess', data))\n .catch((error) => {\n Sentry.captureException(error);\n dispatch('receiveAuthorsError');\n });\n },\n};\n","export const SET_INITIAL_DATA = 'SET_INITIAL_DATA';\nexport const COMMITS_AUTHORS = 'COMMITS_AUTHORS';\n","import * as types from './mutation_types';\n\nexport default {\n [types.SET_INITIAL_DATA](state, data) {\n Object.assign(state, data);\n },\n [types.COMMITS_AUTHORS](state, data) {\n state.commitsAuthors = data;\n },\n};\n","import Vue from 'vue';\n// eslint-disable-next-line no-restricted-imports\nimport Vuex from 'vuex';\nimport actions from './actions';\nimport mutations from './mutations';\nimport state from './state';\n\nVue.use(Vuex);\n\nexport const createStore = () => ({\n actions,\n mutations,\n state: state(),\n});\n\nexport default new Vuex.Store(createStore());\n","export default () => ({\n commitsPath: null,\n projectId: null,\n commitsAuthors: [],\n});\n","import Vue from 'vue';\n// eslint-disable-next-line no-restricted-imports\nimport Vuex from 'vuex';\nimport { encodeSaferUrl, joinPaths, visitUrl } from '~/lib/utils/url_utility';\nimport RefSelector from '~/ref/components/ref_selector.vue';\nimport AuthorSelectApp from './components/author_select.vue';\nimport store from './store';\n\nVue.use(Vuex);\n\nexport const mountCommits = (el) => {\n if (!el) {\n return null;\n }\n\n store.dispatch('setInitialData', el.dataset);\n\n return new Vue({\n el,\n store,\n render(h) {\n return h(AuthorSelectApp, {\n props: {\n projectCommitsEl: document.querySelector('.js-project-commits-show'),\n },\n });\n },\n });\n};\n\nexport const initCommitsRefSwitcher = () => {\n const el = document.getElementById('js-project-commits-ref-switcher');\n const COMMITS_PATH_REGEX = /^(.*?)\\/-\\/commits/g;\n\n if (!el) return false;\n\n const { projectId, ref, commitsPath, refType, treePath } = el.dataset;\n const commitsPathPrefix = commitsPath.match(COMMITS_PATH_REGEX)?.[0];\n\n const generateRefDestinationUrl = (selectedRef, selectedRefType) => {\n const selectedRefURI = selectedRef ? encodeURIComponent(selectedRef) : '';\n const selectedTreePath = treePath ? encodeSaferUrl(treePath) : ''; // Do not escape '/'.\n const commitsPathSuffix = selectedRefType ? `?ref_type=${selectedRefType}` : '';\n return joinPaths(commitsPathPrefix, selectedRefURI, selectedTreePath) + commitsPathSuffix;\n };\n const useSymbolicRefNames = Boolean(refType);\n return new Vue({\n el,\n render(createElement) {\n return createElement(RefSelector, {\n props: {\n projectId,\n queryParams: { sort: 'updated_desc' },\n value: useSymbolicRefNames ? `refs/${refType}/${ref}` : ref,\n useSymbolicRefNames,\n },\n on: {\n input(selected) {\n const matches = selected.match(/refs\\/(heads|tags)\\/(.+)/);\n if (useSymbolicRefNames && matches) {\n visitUrl(generateRefDestinationUrl(matches[2], matches[1]));\n } else {\n visitUrl(generateRefDestinationUrl(selected));\n }\n },\n },\n });\n },\n });\n};\n","import { addShortcutsExtension } from '~/behaviors/shortcuts';\nimport ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';\nimport CommitsList from '~/commits';\nimport GpgBadges from '~/gpg_badges';\nimport { mountCommits, initCommitsRefSwitcher } from '~/projects/commits';\nimport initAmbiguousRefModal from '~/ref/init_ambiguous_ref_modal';\n\nnew CommitsList(document.querySelector('.js-project-commits-show').dataset.commitsLimit); // eslint-disable-line no-new\naddShortcutsExtension(ShortcutsNavigation);\nGpgBadges.fetch();\nmountCommits(document.getElementById('js-author-dropdown'));\ninitCommitsRefSwitcher();\ninitAmbiguousRefModal();\n","import $ from 'jquery';\nimport { n__ } from '~/locale';\nimport axios from './lib/utils/axios_utils';\nimport { localTimeAgo } from './lib/utils/datetime_utility';\nimport Pager from './pager';\n\nexport default class CommitsList {\n constructor(limit = 0) {\n this.timer = null;\n\n this.$contentList = $('.content_list');\n\n Pager.init({ limit: parseInt(limit, 10), prepareData: this.processCommits.bind(this) });\n\n this.content = $('#commits-list');\n this.searchField = $('#commits-search');\n this.lastSearch = this.searchField.val();\n this.initSearch();\n }\n\n initSearch() {\n this.timer = null;\n this.searchField.on('keyup', () => {\n clearTimeout(this.timer);\n this.timer = setTimeout(this.filterResults.bind(this), 500);\n });\n }\n\n filterResults() {\n const form = $('.commits-search-form');\n const search = this.searchField.val();\n if (search === this.lastSearch) return Promise.resolve();\n const commitsUrl = `${form.attr('action')}?${form.serialize()}`;\n this.content.addClass('gl-opacity-5');\n const params = form.serializeArray().reduce(\n (acc, obj) =>\n Object.assign(acc, {\n [obj.name]: obj.value,\n }),\n {},\n );\n\n return axios\n .get(form.attr('action'), {\n params,\n })\n .then(({ data }) => {\n this.lastSearch = search;\n this.content.html(data.html);\n this.content.removeClass('gl-opacity-5');\n\n // Change url so if user reload a page - search results are saved\n window.history.replaceState(\n {\n page: commitsUrl,\n },\n document.title,\n commitsUrl,\n );\n })\n .catch(() => {\n this.content.removeClass('gl-opacity-5');\n this.lastSearch = null;\n });\n }\n\n // Prepare loaded data.\n processCommits(data) {\n let processedData = data;\n const $processedData = $(processedData);\n const $commitsHeadersLast = this.$contentList.find('li.js-commit-header').last();\n const lastShownDay = $commitsHeadersLast.data('day');\n const $loadedCommitsHeadersFirst = $processedData.filter('li.js-commit-header').first();\n const loadedShownDayFirst = $loadedCommitsHeadersFirst.data('day');\n let commitsCount;\n\n // If commits headers show the same date,\n // remove the last header and change the previous one.\n if (lastShownDay === loadedShownDayFirst) {\n // Last shown commits count under the last commits header.\n commitsCount = $commitsHeadersLast.nextUntil('li.js-commit-header').find('li.commit').length;\n\n // Remove duplicate of commits header.\n processedData = $processedData.not(`li.js-commit-header[data-day='${loadedShownDayFirst}']`);\n\n // Update commits count in the previous commits header.\n commitsCount += Number(\n $(processedData).nextUntil('li.js-commit-header').first().find('li.commit').length,\n );\n\n $commitsHeadersLast\n .find('span.commits-count')\n .text(n__('%d commit', '%d commits', commitsCount));\n }\n\n localTimeAgo($processedData.find('.js-timeago').get());\n\n return processedData;\n }\n}\n","/**\n * Endless Scroll plugin for jQuery\n *\n * v1.4.8\n *\n * Copyright (c) 2008 Fred Wu\n *\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n */\n\n/**\n * Usage:\n *\n * // using default options\n * $(document).endlessScroll();\n *\n * // using some custom options\n * $(document).endlessScroll({\n * fireOnce: false,\n * loader: \"<div class=\\\"loading\\\"><div>\",\n * callback: function(){\n * alert(\"test\");\n * }\n * });\n *\n * Configuration options:\n *\n * bottomPixels integer the number of pixels from the bottom of the page that triggers the event\n * fireOnce boolean only fire once until the execution of the current event is completed\n * loader string the HTML to be displayed during loading\n * data string|function plain HTML data, can be either a string or a function that returns a string,\n * when passed as a function it accepts one argument: fire sequence (the number\n * of times the event triggered during the current page session)\n * insertAfter string jQuery selector syntax: where to put the loader as well as the plain HTML data\n * callback function callback function, accepts one argument: fire sequence (the number of times\n * the event triggered during the current page session)\n * resetCounter function resets the fire sequence counter if the function returns true, this function\n * could also perform hook actions since it is applied at the start of the event\n * ceaseFire function stops the event (no more endless scrolling) if the function returns true\n *\n * Usage tips:\n *\n * The plugin is more useful when used with the callback function, which can then make AJAX calls to retrieve content.\n * The fire sequence argument (for the callback function) is useful for 'pagination'-like features.\n */\n\nexport const setupEndlessScroll = ($) => {\n\n $.fn.endlessScroll = function(options) {\n\n var defaults = {\n bottomPixels : 50,\n fireOnce : true,\n loader : \"<br />Loading...<br />\",\n data : \"\",\n insertAfter : \"div:last\",\n resetCounter : function() { return false; },\n callback : function() { return true; },\n ceaseFire : function() { return false; }\n };\n\n var options = $.extend({}, defaults, options),\n data = false,\n firing = true,\n fired = false,\n fireSequence = 0,\n is_scrollable;\n\n if (options.ceaseFire.apply(this) === true)\n firing = false;\n\n if (firing === true) {\n $(this).scroll(function() {\n if (options.ceaseFire.apply(this) === true) {\n firing = false;\n return; // Scroll will still get called, but nothing will happen\n }\n\n if (this == document || this == window) {\n is_scrollable = $(document).height() - $(window).height() <= $(window).scrollTop() + options.bottomPixels;\n } else {\n // calculates the actual height of the scrolling container\n var inner_wrap = $(\".endless_scroll_inner_wrap\", this);\n if (inner_wrap.length == 0)\n inner_wrap = $(this).wrapInner(\"<div class=\\\"endless_scroll_inner_wrap\\\" />\").find(\".endless_scroll_inner_wrap\");\n is_scrollable = inner_wrap.length > 0 &&\n (inner_wrap.height() - $(this).height() <= $(this).scrollTop() + options.bottomPixels);\n }\n\n if (is_scrollable && (options.fireOnce == false || (options.fireOnce == true && fired != true))) {\n if (options.resetCounter.apply(this) === true) fireSequence = 0;\n\n fired = true;\n fireSequence++;\n\n $(options.insertAfter).after(\"<div id=\\\"endless_scroll_loader\\\">\" + options.loader + \"</div>\");\n\n data = typeof options.data == 'function' ? options.data.apply(this, [fireSequence]) : options.data;\n\n if (data !== false) {\n $(options.insertAfter).after(\"<div>\" + data + \"</div>\");\n\n options.callback.apply(this, [fireSequence]);\n\n fired = false;\n }\n\n $(\"#endless_scroll_loader\").remove();\n }\n });\n }\n };\n};\n","import $ from 'jquery';\nimport { setupEndlessScroll } from 'vendor/jquery.endless-scroll';\nimport axios from '~/lib/utils/axios_utils';\nimport { removeParams, getParameterByName } from '~/lib/utils/url_utility';\n\nsetupEndlessScroll($);\n\nconst ENDLESS_SCROLL_BOTTOM_PX = 400;\nconst ENDLESS_SCROLL_FIRE_DELAY_MS = 1000;\n\nexport default {\n init({\n limit = 0,\n preload = false,\n disable = false,\n prepareData = $.noop,\n successCallback = $.noop,\n errorCallback = $.noop,\n container = '',\n } = {}) {\n this.limit = limit;\n this.offset = parseInt(getParameterByName('offset'), 10) || this.limit;\n this.disable = disable;\n this.prepareData = prepareData;\n this.successCallback = successCallback;\n this.errorCallback = errorCallback;\n this.$container = $(container);\n this.$loading = this.$container.length\n ? this.$container.find('.loading').first()\n : $('.loading').first();\n if (preload) {\n this.offset = 0;\n this.getOld();\n }\n this.initLoadMore();\n },\n\n getOld() {\n this.$loading.show();\n const url = $('.content_list').data('href') || removeParams(['limit', 'offset']);\n\n axios\n .get(url, {\n params: {\n limit: this.limit,\n offset: this.offset,\n },\n })\n .then(({ data }) => {\n this.append(data.count, this.prepareData(data.html));\n this.successCallback();\n\n // keep loading until we've filled the viewport height\n if (!this.disable && !this.isScrollable()) {\n this.getOld();\n } else {\n this.$loading.hide();\n }\n })\n .catch((err) => this.errorCallback(err))\n .finally(() => this.$loading.hide());\n },\n\n append(count, html) {\n $('.content_list').append(html);\n if (count > 0) {\n this.offset += count;\n\n if (count < this.limit) {\n this.disable = true;\n }\n } else {\n this.disable = true;\n }\n },\n\n isScrollable() {\n const $w = $(window);\n return $(document).height() > $w.height() + $w.scrollTop() + ENDLESS_SCROLL_BOTTOM_PX;\n },\n\n initLoadMore() {\n // eslint-disable-next-line @gitlab/no-global-event-off\n $(document).off('scroll');\n $(document).endlessScroll({\n bottomPixels: ENDLESS_SCROLL_BOTTOM_PX,\n fireDelay: ENDLESS_SCROLL_FIRE_DELAY_MS,\n fireOnce: true,\n ceaseFire: () => this.disable === true,\n callback: () => {\n if (this.$container.length && !this.$container.is(':visible')) {\n return;\n }\n\n if (!this.$loading.is(':visible')) {\n this.$loading.show();\n this.getOld();\n }\n },\n });\n },\n};\n","export const SET_ENABLED_REF_TYPES = 'SET_ENABLED_REF_TYPES';\nexport const SET_USE_SYMBOLIC_REF_NAMES = 'SET_USE_SYMBOLIC_REF_NAMES';\nexport const SET_PARAMS = 'SET_PARAMS';\n\nexport const SET_PROJECT_ID = 'SET_PROJECT_ID';\nexport const SET_SELECTED_REF = 'SET_SELECTED_REF';\nexport const SET_QUERY = 'SET_QUERY';\n\nexport const REQUEST_START = 'REQUEST_START';\nexport const REQUEST_FINISH = 'REQUEST_FINISH';\n\nexport const RECEIVE_BRANCHES_SUCCESS = 'RECEIVE_BRANCHES_SUCCESS';\nexport const RECEIVE_BRANCHES_ERROR = 'RECEIVE_BRANCHES_ERROR';\n\nexport const RECEIVE_TAGS_SUCCESS = 'RECEIVE_TAGS_SUCCESS';\nexport const RECEIVE_TAGS_ERROR = 'RECEIVE_TAGS_ERROR';\n\nexport const RECEIVE_COMMITS_SUCCESS = 'RECEIVE_COMMITS_SUCCESS';\nexport const RECEIVE_COMMITS_ERROR = 'RECEIVE_COMMITS_ERROR';\nexport const RESET_COMMIT_MATCHES = 'RESET_COMMIT_MATCHES';\n","import Api from '~/api';\nimport { REF_TYPE_BRANCHES, REF_TYPE_TAGS, REF_TYPE_COMMITS } from '../constants';\nimport * as types from './mutation_types';\n\nexport const setEnabledRefTypes = ({ commit }, refTypes) =>\n commit(types.SET_ENABLED_REF_TYPES, refTypes);\n\nexport const setParams = ({ commit }, params) => commit(types.SET_PARAMS, params);\n\nexport const setUseSymbolicRefNames = ({ commit }, useSymbolicRefNames) =>\n commit(types.SET_USE_SYMBOLIC_REF_NAMES, useSymbolicRefNames);\n\nexport const setProjectId = ({ commit }, projectId) => commit(types.SET_PROJECT_ID, projectId);\n\nexport const setSelectedRef = ({ commit }, selectedRef) =>\n commit(types.SET_SELECTED_REF, selectedRef);\n\nexport const search = ({ state, dispatch, commit }, query) => {\n commit(types.SET_QUERY, query);\n\n const dispatchIfRefTypeEnabled = (refType, action) => {\n if (state.enabledRefTypes.includes(refType)) {\n dispatch(action);\n }\n };\n dispatchIfRefTypeEnabled(REF_TYPE_BRANCHES, 'searchBranches');\n dispatchIfRefTypeEnabled(REF_TYPE_TAGS, 'searchTags');\n dispatchIfRefTypeEnabled(REF_TYPE_COMMITS, 'searchCommits');\n};\n\nexport const searchBranches = ({ commit, state }) => {\n commit(types.REQUEST_START);\n\n Api.branches(state.projectId, state.query, state.params)\n .then((response) => {\n commit(types.RECEIVE_BRANCHES_SUCCESS, response);\n })\n .catch((error) => {\n commit(types.RECEIVE_BRANCHES_ERROR, error);\n })\n .finally(() => {\n commit(types.REQUEST_FINISH);\n });\n};\n\nexport const searchTags = ({ commit, state }) => {\n commit(types.REQUEST_START);\n\n Api.tags(state.projectId, state.query)\n .then((response) => {\n commit(types.RECEIVE_TAGS_SUCCESS, response);\n })\n .catch((error) => {\n commit(types.RECEIVE_TAGS_ERROR, error);\n })\n .finally(() => {\n commit(types.REQUEST_FINISH);\n });\n};\n\nexport const searchCommits = ({ commit, state, getters }) => {\n // Only query the Commit API if the search query looks like a commit SHA\n if (getters.isQueryPossiblyASha) {\n commit(types.REQUEST_START);\n\n Api.commit(state.projectId, state.query)\n .then((response) => {\n commit(types.RECEIVE_COMMITS_SUCCESS, response);\n })\n .catch((error) => {\n commit(types.RECEIVE_COMMITS_ERROR, error);\n })\n .finally(() => {\n commit(types.REQUEST_FINISH);\n });\n } else {\n commit(types.RESET_COMMIT_MATCHES);\n }\n};\n","/** Returns `true` if the query string looks like it could be a commit SHA */\nexport const isQueryPossiblyASha = ({ query }) => /^[0-9a-f]{4,40}$/i.test(query);\n\n/** Returns `true` if there is at least one in-progress request */\nexport const isLoading = ({ requestCount }) => requestCount > 0;\n","import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';\nimport { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';\nimport { X_TOTAL_HEADER } from '../constants';\nimport * as types from './mutation_types';\n\nexport default {\n [types.SET_ENABLED_REF_TYPES](state, refTypes) {\n state.enabledRefTypes = refTypes;\n },\n [types.SET_USE_SYMBOLIC_REF_NAMES](state, useSymbolicRefNames) {\n state.useSymbolicRefNames = useSymbolicRefNames;\n },\n [types.SET_PARAMS](state, params) {\n state.params = params;\n },\n [types.SET_PROJECT_ID](state, projectId) {\n state.projectId = projectId;\n },\n [types.SET_SELECTED_REF](state, selectedRef) {\n state.selectedRef = selectedRef;\n },\n [types.SET_QUERY](state, query) {\n state.query = query;\n },\n\n [types.REQUEST_START](state) {\n state.requestCount += 1;\n },\n [types.REQUEST_FINISH](state) {\n state.requestCount -= 1;\n },\n\n [types.RECEIVE_BRANCHES_SUCCESS](state, response) {\n state.matches.branches = {\n list: convertObjectPropsToCamelCase(response.data).map((b) => ({\n name: b.name,\n value: state.useSymbolicRefNames ? `refs/heads/${b.name}` : undefined,\n default: b.default,\n protected: b.protected,\n })),\n totalCount: parseInt(response.headers[X_TOTAL_HEADER], 10),\n error: null,\n };\n },\n [types.RECEIVE_BRANCHES_ERROR](state, error) {\n state.matches.branches = {\n list: [],\n totalCount: 0,\n error,\n };\n },\n\n [types.RECEIVE_TAGS_SUCCESS](state, response) {\n state.matches.tags = {\n list: convertObjectPropsToCamelCase(response.data).map((b) => ({\n name: b.name,\n value: state.useSymbolicRefNames ? `refs/tags/${b.name}` : undefined,\n protected: b.protected,\n })),\n totalCount: parseInt(response.headers[X_TOTAL_HEADER], 10),\n error: null,\n };\n },\n [types.RECEIVE_TAGS_ERROR](state, error) {\n state.matches.tags = {\n list: [],\n totalCount: 0,\n error,\n };\n },\n\n [types.RECEIVE_COMMITS_SUCCESS](state, response) {\n const commit = convertObjectPropsToCamelCase(response.data);\n\n state.matches.commits = {\n list: [\n {\n name: commit.shortId,\n value: commit.id,\n subtitle: commit.title,\n },\n ],\n totalCount: 1,\n error: null,\n };\n },\n [types.RECEIVE_COMMITS_ERROR](state, error) {\n state.matches.commits = {\n list: [],\n totalCount: 0,\n\n // 404's are expected when the search query doesn't match any commits\n // and shouldn't be treated as an actual error\n error: error.response?.status !== HTTP_STATUS_NOT_FOUND ? error : null,\n };\n },\n [types.RESET_COMMIT_MATCHES](state) {\n state.matches.commits = {\n list: [],\n totalCount: 0,\n error: null,\n };\n },\n};\n","import Vue from 'vue';\n// eslint-disable-next-line no-restricted-imports\nimport Vuex from 'vuex';\nimport * as actions from './actions';\nimport * as getters from './getters';\nimport mutations from './mutations';\nimport createState from './state';\n\nVue.use(Vuex);\n\nexport default () =>\n new Vuex.Store({\n actions,\n getters,\n mutations,\n state: createState(),\n });\n\nexport const createRefModule = () => ({\n namespaced: true,\n actions,\n getters,\n mutations,\n state: createState(),\n});\n","const createRefTypeState = () => ({\n list: [],\n totalCount: 0,\n error: null,\n});\n\nexport default () => ({\n enabledRefTypes: [],\n projectId: null,\n\n query: '',\n matches: {\n branches: createRefTypeState(),\n tags: createRefTypeState(),\n commits: createRefTypeState(),\n },\n selectedRef: null,\n params: null,\n requestCount: 0,\n});\n","export const HTTP_STATUS_ABORTED = 0;\nexport const HTTP_STATUS_OK = 200;\nexport const HTTP_STATUS_CREATED = 201;\nexport const HTTP_STATUS_ACCEPTED = 202;\nexport const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION = 203;\nexport const HTTP_STATUS_NO_CONTENT = 204;\nexport const HTTP_STATUS_RESET_CONTENT = 205;\nexport const HTTP_STATUS_PARTIAL_CONTENT = 206;\nexport const HTTP_STATUS_MULTI_STATUS = 207;\nexport const HTTP_STATUS_ALREADY_REPORTED = 208;\nexport const HTTP_STATUS_IM_USED = 226;\nexport const HTTP_STATUS_BAD_REQUEST = 400;\nexport const HTTP_STATUS_UNAUTHORIZED = 401;\nexport const HTTP_STATUS_FORBIDDEN = 403;\nexport const HTTP_STATUS_NOT_FOUND = 404;\nexport const HTTP_STATUS_METHOD_NOT_ALLOWED = 405;\nexport const HTTP_STATUS_CONFLICT = 409;\nexport const HTTP_STATUS_GONE = 410;\nexport const HTTP_STATUS_PAYLOAD_TOO_LARGE = 413;\nexport const HTTP_STATUS_IM_A_TEAPOT = 418;\nexport const HTTP_STATUS_UNPROCESSABLE_ENTITY = 422;\nexport const HTTP_STATUS_TOO_MANY_REQUESTS = 429;\nexport const HTTP_STATUS_INTERNAL_SERVER_ERROR = 500;\nexport const HTTP_STATUS_SERVICE_UNAVAILABLE = 503;\n\nexport const successCodes = [\n HTTP_STATUS_OK,\n HTTP_STATUS_CREATED,\n HTTP_STATUS_ACCEPTED,\n HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION,\n HTTP_STATUS_NO_CONTENT,\n HTTP_STATUS_RESET_CONTENT,\n HTTP_STATUS_PARTIAL_CONTENT,\n HTTP_STATUS_MULTI_STATUS,\n HTTP_STATUS_ALREADY_REPORTED,\n HTTP_STATUS_IM_USED,\n];\n","import { GlLoadingIcon } from '@gitlab/ui';\nimport { __ } from '~/locale';\nimport { renderVueComponentForLegacyJS } from './render_vue_component_for_legacy_js';\n\nconst defaultValue = (prop) => GlLoadingIcon.props[prop]?.default;\n\n/**\n * Returns a loading icon/spinner element.\n *\n * This should *only* be used in existing legacy areas of code where Vue is not\n * in use, as part of the migration strategy defined in\n * https://gitlab.com/groups/gitlab-org/-/epics/7626.\n *\n * @param {object} props - The props to configure the spinner.\n * @param {boolean} props.inline - Display the spinner inline; otherwise, as a block.\n * @param {string} props.color - The color of the spinner ('dark' or 'light')\n * @param {string} props.size - The size of the spinner ('sm', 'md', 'lg', 'xl')\n * @param {string[]} props.classes - Additional classes to apply to the element.\n * @param {string} props.label - The ARIA label to apply to the spinner.\n * @returns {HTMLElement}\n */\nexport const loadingIconForLegacyJS = ({\n inline = defaultValue('inline'),\n color = defaultValue('color'),\n size = defaultValue('size'),\n classes = [],\n label = __('Loading'),\n} = {}) =>\n renderVueComponentForLegacyJS(GlLoadingIcon, {\n class: classes,\n props: {\n inline,\n color,\n size,\n label,\n },\n });\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ambiguous_ref_modal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ambiguous_ref_modal.vue?vue&type=script&lang=js\"","<!-- eslint-disable vue/multi-word-component-names -->\n<script>\nimport { GlModal, GlButton, GlSprintf } from '@gitlab/ui';\nimport { sprintf, s__ } from '~/locale';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport { REF_TYPE_PARAM_NAME, TAG_REF_TYPE, BRANCH_REF_TYPE } from '../constants';\n\nexport default {\n i18n: {\n title: s__('AmbiguousRef|Which reference do you want to view?'),\n description: sprintf(\n s__('AmbiguousRef|There is a branch and a tag with the same name of %{ref}.'),\n ),\n secondaryDescription: s__('AmbiguousRef|Which reference would you like to view?'),\n viewTagButton: s__('AmbiguousRef|View tag'),\n viewBranchButton: s__('AmbiguousRef|View branch'),\n },\n tagRefType: TAG_REF_TYPE,\n branchRefType: BRANCH_REF_TYPE,\n components: {\n GlModal,\n GlButton,\n GlSprintf,\n },\n\n props: {\n refName: {\n type: String,\n required: true,\n },\n },\n mounted() {\n this.$refs.ambiguousRefModal.show();\n },\n methods: {\n navigate(refType) {\n const url = new URL(window.location.href);\n url.searchParams.set(REF_TYPE_PARAM_NAME, refType);\n\n visitUrl(url.toString());\n },\n },\n};\n</script>\n\n<template>\n <gl-modal\n ref=\"ambiguousRefModal\"\n modal-id=\"ambiguous-ref\"\n :title=\"$options.i18n.title\"\n @primary=\"navigate\"\n >\n <p class=\"gl-mb-0\">\n <gl-sprintf :message=\"$options.i18n.description\">\n <template #ref\n ><code>{{ refName }}</code></template\n >\n </gl-sprintf>\n </p>\n\n <p>\n {{ $options.i18n.secondaryDescription }}\n </p>\n\n <template #modal-footer>\n <gl-button\n category=\"secondary\"\n variant=\"confirm\"\n data-testid=\"view-tag-btn\"\n @click=\"() => navigate($options.tagRefType)\"\n >{{ $options.i18n.viewTagButton }}</gl-button\n >\n <gl-button\n category=\"secondary\"\n variant=\"confirm\"\n data-testid=\"view-branch-btn\"\n @click=\"() => navigate($options.branchRefType)\"\n >{{ $options.i18n.viewBranchButton }}</gl-button\n >\n </template>\n </gl-modal>\n</template>\n","import { render, staticRenderFns } from \"./ambiguous_ref_modal.vue?vue&type=template&id=553f57e6\"\nimport script from \"./ambiguous_ref_modal.vue?vue&type=script&lang=js\"\nexport * from \"./ambiguous_ref_modal.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-modal',{ref:\"ambiguousRefModal\",attrs:{\"modal-id\":\"ambiguous-ref\",\"title\":_vm.$options.i18n.title},on:{\"primary\":_vm.navigate},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('gl-button',{attrs:{\"category\":\"secondary\",\"variant\":\"confirm\",\"data-testid\":\"view-tag-btn\"},on:{\"click\":() => _vm.navigate(_vm.$options.tagRefType)}},[_vm._v(_vm._s(_vm.$options.i18n.viewTagButton))]),_vm._v(\" \"),_c('gl-button',{attrs:{\"category\":\"secondary\",\"variant\":\"confirm\",\"data-testid\":\"view-branch-btn\"},on:{\"click\":() => _vm.navigate(_vm.$options.branchRefType)}},[_vm._v(_vm._s(_vm.$options.i18n.viewBranchButton))])]},proxy:true}])},[_c('p',{staticClass:\"gl-mb-0\"},[_c('gl-sprintf',{attrs:{\"message\":_vm.$options.i18n.description},scopedSlots:_vm._u([{key:\"ref\",fn:function(){return [_c('code',[_vm._v(_vm._s(_vm.refName))])]},proxy:true}])})],1),_vm._v(\" \"),_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$options.i18n.secondaryDescription)+\"\\n \")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\nimport { parseBoolean } from '~/lib/utils/common_utils';\nimport { getParameterByName } from '~/lib/utils/url_utility';\nimport AmbiguousRefModal from './components/ambiguous_ref_modal.vue';\nimport { REF_TYPE_PARAM_NAME, TAG_REF_TYPE, BRANCH_REF_TYPE } from './constants';\n\nexport default (el = document.querySelector('#js-ambiguous-ref-modal')) => {\n const refType = getParameterByName(REF_TYPE_PARAM_NAME);\n const isRefTypeSet = refType === TAG_REF_TYPE || refType === BRANCH_REF_TYPE; // if ref_type is already set in the URL, we don't want to display the modal\n if (!el || isRefTypeSet || !parseBoolean(el.dataset.ambiguous)) return false;\n\n const { ref } = el.dataset;\n\n return new Vue({\n el,\n render(createElement) {\n return createElement(AmbiguousRefModal, { props: { refName: ref } });\n },\n });\n};\n","import $ from 'jquery';\nimport { createAlert } from '~/alert';\nimport axios from '~/lib/utils/axios_utils';\nimport { queryToObject } from '~/lib/utils/url_utility';\nimport { loadingIconForLegacyJS } from '~/loading_icon_for_legacy_js';\n\nimport { __ } from '~/locale';\n\nexport default class GpgBadges {\n static fetch() {\n const tag = $('.js-signature-container');\n if (tag.length === 0) {\n return Promise.resolve();\n }\n\n const badges = $('.js-loading-signature-badge');\n\n badges.html(loadingIconForLegacyJS());\n badges.children().attr('aria-label', __('Loading'));\n\n const displayError = () =>\n createAlert({\n message: __('An error occurred while loading commit signatures'),\n });\n\n const endpoint = tag.data('signaturesPath');\n if (!endpoint) {\n displayError();\n return Promise.reject(new Error(__('Missing commit signatures endpoint!')));\n }\n\n const params = queryToObject(tag.serialize());\n return axios\n .get(endpoint, { params })\n .then(({ data }) => {\n data.signatures.forEach((signature) => {\n badges.filter(`[data-commit-sha=\"${signature.commit_sha}\"]`).replaceWith(signature.html);\n });\n })\n .catch(displayError);\n }\n}\n","import { DEFAULT_I18N } from './constants';\n\nfunction convertToListBoxItems(items) {\n return items.map((item) => ({\n text: item.name,\n value: item.value || item.name,\n protected: item.protected,\n default: item.default,\n }));\n}\n\n/**\n * Format multiple lists to array of group options for listbox\n * @param branches list of branches\n * @param tags list of tags\n * @param commits list of commits\n * @returns {*[]} array of group items with header and options\n */\nexport const formatListBoxItems = (branches, tags, commits) => {\n const listBoxItems = [];\n\n const addToFinalResult = (items, header) => {\n if (items && items.length > 0) {\n listBoxItems.push({\n text: header,\n options: convertToListBoxItems(items),\n });\n }\n };\n\n addToFinalResult(branches, DEFAULT_I18N.branches);\n addToFinalResult(tags, DEFAULT_I18N.tags);\n addToFinalResult(commits, DEFAULT_I18N.commits);\n\n return listBoxItems;\n};\n\n/**\n * Check error existence and add to final array\n * @param branches list of branches\n * @param tags list of tags\n * @param commits list of commits\n * @returns {*[]} array of error messages\n */\nexport const formatErrors = (branches, tags, commits) => {\n const errorsList = [];\n\n if (branches && branches.error) {\n errorsList.push(DEFAULT_I18N.branchesErrorMessage);\n }\n\n if (tags && tags.error) {\n errorsList.push(DEFAULT_I18N.tagsErrorMessage);\n }\n\n if (commits && commits.error) {\n errorsList.push(DEFAULT_I18N.commitsErrorMessage);\n }\n\n return errorsList;\n};\n","<script>\nimport { GlBadge, GlIcon, GlCollapsibleListbox } from '@gitlab/ui';\nimport { debounce, isArray } from 'lodash';\n// eslint-disable-next-line no-restricted-imports\nimport { mapActions, mapGetters, mapState } from 'vuex';\nimport { sprintf } from '~/locale';\nimport ProtectedBadge from '~/vue_shared/components/badges/protected_badge.vue';\nimport {\n ALL_REF_TYPES,\n SEARCH_DEBOUNCE_MS,\n DEFAULT_I18N,\n REF_TYPE_BRANCHES,\n REF_TYPE_TAGS,\n REF_TYPE_COMMITS,\n TAG_REF_TYPE,\n BRANCH_REF_TYPE,\n TAG_REF_TYPE_ICON,\n BRANCH_REF_TYPE_ICON,\n} from '../constants';\nimport createStore from '../stores';\nimport { formatListBoxItems, formatErrors } from '../format_refs';\n\nexport default {\n name: 'RefSelector',\n components: {\n GlBadge,\n GlIcon,\n GlCollapsibleListbox,\n ProtectedBadge,\n },\n inheritAttrs: false,\n props: {\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n enabledRefTypes: {\n type: Array,\n required: false,\n default: () => ALL_REF_TYPES,\n validator: (val) =>\n // It has to be an array\n isArray(val) &&\n // with at least one item\n val.length > 0 &&\n // and only \"REF_TYPE_BRANCHES\", \"REF_TYPE_TAGS\", and \"REF_TYPE_COMMITS\" are allowed\n val.every((item) => ALL_REF_TYPES.includes(item)) &&\n // and no duplicates are allowed\n val.length === new Set(val).size,\n },\n value: {\n type: String,\n required: false,\n default: '',\n },\n queryParams: {\n type: Object,\n required: false,\n default: () => {},\n },\n projectId: {\n type: String,\n required: true,\n },\n translations: {\n type: Object,\n required: false,\n default: () => ({}),\n },\n useSymbolicRefNames: {\n type: Boolean,\n required: false,\n default: false,\n },\n\n /** The validation state of this component. */\n state: {\n type: Boolean,\n required: false,\n default: true,\n },\n\n /* Underlying form field name for scenarios where ref_selector\n * is used as part of submitting an HTML form\n */\n name: {\n type: String,\n required: false,\n default: '',\n },\n toggleButtonClass: {\n type: [String, Object, Array],\n required: false,\n default: null,\n },\n },\n data() {\n return {\n query: '',\n };\n },\n computed: {\n ...mapState({\n matches: (state) => state.matches,\n lastQuery: (state) => state.query,\n selectedRef: (state) => state.selectedRef,\n params: (state) => state.params,\n }),\n ...mapGetters(['isLoading', 'isQueryPossiblyASha']),\n i18n() {\n return {\n ...DEFAULT_I18N,\n ...this.translations,\n };\n },\n listBoxItems() {\n return formatListBoxItems(this.branches, this.tags, this.commits);\n },\n branches() {\n return this.enabledRefTypes.includes(REF_TYPE_BRANCHES) ? this.matches.branches.list : [];\n },\n tags() {\n return this.enabledRefTypes.includes(REF_TYPE_TAGS) ? this.matches.tags.list : [];\n },\n commits() {\n return this.enabledRefTypes.includes(REF_TYPE_COMMITS) ? this.matches.commits.list : [];\n },\n extendedToggleButtonClass() {\n const classes = [\n {\n '!gl-shadow-inner-1-red-500': !this.state,\n 'gl-font-monospace': Boolean(this.selectedRef),\n },\n 'gl-mb-0',\n ];\n\n if (Array.isArray(this.toggleButtonClass)) {\n classes.push(...this.toggleButtonClass);\n } else {\n classes.push(this.toggleButtonClass);\n }\n\n return classes;\n },\n footerSlotProps() {\n return {\n isLoading: this.isLoading,\n matches: this.matches,\n query: this.lastQuery,\n };\n },\n errors() {\n return formatErrors(this.matches.branches, this.matches.tags, this.matches.commits);\n },\n selectedRefForDisplay() {\n if (this.useSymbolicRefNames && this.selectedRef) {\n return this.selectedRef.replace(/^refs\\/(tags|heads)\\//, '');\n }\n\n return this.selectedRef;\n },\n buttonText() {\n return this.selectedRefForDisplay || this.i18n.noRefSelected;\n },\n noResultsMessage() {\n return this.lastQuery\n ? sprintf(this.i18n.noResultsWithQuery, {\n query: this.lastQuery,\n })\n : this.i18n.noResults;\n },\n dropdownIcon() {\n let icon;\n\n if (this.selectedRef.includes(`refs/${TAG_REF_TYPE}`)) {\n icon = TAG_REF_TYPE_ICON;\n } else if (this.selectedRef.includes(`refs/${BRANCH_REF_TYPE}`)) {\n icon = BRANCH_REF_TYPE_ICON;\n }\n\n return icon;\n },\n },\n watch: {\n // Keep the Vuex store synchronized if the parent\n // component updates the selected ref through v-model\n value: {\n immediate: true,\n handler() {\n if (this.value !== this.selectedRef) {\n this.setSelectedRef(this.value);\n }\n },\n },\n },\n beforeCreate() {\n // Setting the store here instead of using\n // the built in `store` component option because\n // we need each new `RefSelector` instance to\n // create a new Vuex store instance.\n // See https://github.com/vuejs/vuex/issues/414#issue-184491718.\n this.$store = createStore();\n },\n created() {\n // This method is defined here instead of in `methods`\n // because we need to access the .cancel() method\n // lodash attaches to the function, which is\n // made inaccessible by Vue.\n this.debouncedSearch = debounce(this.search, SEARCH_DEBOUNCE_MS);\n\n this.setProjectId(this.projectId);\n this.setParams(this.queryParams);\n\n this.$watch(\n 'enabledRefTypes',\n () => {\n this.setEnabledRefTypes(this.enabledRefTypes);\n this.search();\n },\n { immediate: true },\n );\n\n this.$watch(\n 'useSymbolicRefNames',\n () => this.setUseSymbolicRefNames(this.useSymbolicRefNames),\n { immediate: true },\n );\n },\n methods: {\n ...mapActions([\n 'setEnabledRefTypes',\n 'setUseSymbolicRefNames',\n 'setParams',\n 'setProjectId',\n 'setSelectedRef',\n ]),\n ...mapActions({ storeSearch: 'search' }),\n onSearchBoxInput(searchQuery = '') {\n this.query = searchQuery?.trim();\n this.debouncedSearch();\n },\n selectRef(ref) {\n if (this.disabled) {\n return;\n }\n\n this.setSelectedRef(ref);\n this.$emit('input', this.selectedRef);\n },\n search() {\n this.storeSearch(this.query);\n },\n totalCountText(count) {\n return count > 999 ? this.i18n.totalCountLabel : `${count}`;\n },\n },\n};\n</script>\n\n<template>\n <div>\n <gl-collapsible-listbox\n class=\"ref-selector gl-w-full\"\n block\n searchable\n :selected=\"selectedRef\"\n :header-text=\"i18n.dropdownHeader\"\n :items=\"listBoxItems\"\n :no-results-text=\"noResultsMessage\"\n :searching=\"isLoading\"\n :search-placeholder=\"i18n.searchPlaceholder\"\n :toggle-class=\"extendedToggleButtonClass\"\n :toggle-text=\"buttonText\"\n :icon=\"dropdownIcon\"\n :disabled=\"disabled\"\n v-bind=\"$attrs\"\n v-on=\"$listeners\"\n @hidden=\"$emit('hide')\"\n @search=\"onSearchBoxInput\"\n @select=\"selectRef\"\n >\n <template #group-label=\"{ group }\">\n {{ group.text }} <gl-badge>{{ totalCountText(group.options.length) }}</gl-badge>\n </template>\n <template #list-item=\"{ item }\">\n {{ item.text }}\n <gl-badge v-if=\"item.default\" variant=\"info\">{{ i18n.defaultLabelText }}</gl-badge>\n <protected-badge v-if=\"item.protected\" />\n </template>\n <template #footer>\n <slot name=\"footer\" v-bind=\"footerSlotProps\"></slot>\n <div\n v-for=\"errorMessage in errors\"\n :key=\"errorMessage\"\n data-testid=\"red-selector-error-list\"\n class=\"gl-mx-4 gl-my-3 gl-flex gl-items-start gl-text-red-500\"\n >\n <gl-icon name=\"error\" class=\"gl-mr-2 gl-mt-2 gl-shrink-0\" />\n <span>{{ errorMessage }}</span>\n </div>\n </template>\n </gl-collapsible-listbox>\n <input\n v-if=\"name\"\n data-testid=\"selected-ref-form-field\"\n type=\"hidden\"\n :value=\"selectedRef\"\n :name=\"name\"\n />\n </div>\n</template>\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ref_selector.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ref_selector.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ref_selector.vue?vue&type=template&id=02d8f25e\"\nimport script from \"./ref_selector.vue?vue&type=script&lang=js\"\nexport * from \"./ref_selector.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('gl-collapsible-listbox',_vm._g(_vm._b({staticClass:\"ref-selector gl-w-full\",attrs:{\"block\":\"\",\"searchable\":\"\",\"selected\":_vm.selectedRef,\"header-text\":_vm.i18n.dropdownHeader,\"items\":_vm.listBoxItems,\"no-results-text\":_vm.noResultsMessage,\"searching\":_vm.isLoading,\"search-placeholder\":_vm.i18n.searchPlaceholder,\"toggle-class\":_vm.extendedToggleButtonClass,\"toggle-text\":_vm.buttonText,\"icon\":_vm.dropdownIcon,\"disabled\":_vm.disabled},on:{\"hidden\":function($event){return _vm.$emit('hide')},\"search\":_vm.onSearchBoxInput,\"select\":_vm.selectRef},scopedSlots:_vm._u([{key:\"group-label\",fn:function({ group }){return [_vm._v(\"\\n \"+_vm._s(group.text)+\" \"),_c('gl-badge',[_vm._v(_vm._s(_vm.totalCountText(group.options.length)))])]}},{key:\"list-item\",fn:function({ item }){return [_vm._v(\"\\n \"+_vm._s(item.text)+\"\\n \"),(item.default)?_c('gl-badge',{attrs:{\"variant\":\"info\"}},[_vm._v(_vm._s(_vm.i18n.defaultLabelText))]):_vm._e(),_vm._v(\" \"),(item.protected)?_c('protected-badge'):_vm._e()]}},{key:\"footer\",fn:function(){return [_vm._t(\"footer\",null,null,_vm.footerSlotProps),_vm._v(\" \"),_vm._l((_vm.errors),function(errorMessage){return _c('div',{key:errorMessage,staticClass:\"gl-mx-4 gl-my-3 gl-flex gl-items-start gl-text-red-500\",attrs:{\"data-testid\":\"red-selector-error-list\"}},[_c('gl-icon',{staticClass:\"gl-mr-2 gl-mt-2 gl-shrink-0\",attrs:{\"name\":\"error\"}}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(errorMessage))])],1)})]},proxy:true}],null,true)},'gl-collapsible-listbox',_vm.$attrs,false),_vm.$listeners)),_vm._v(\" \"),(_vm.name)?_c('input',{attrs:{\"data-testid\":\"selected-ref-form-field\",\"type\":\"hidden\",\"name\":_vm.name},domProps:{\"value\":_vm.selectedRef}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\n\n/**\n * Returns the root element of the given Vue component.\n *\n * This should *only* be used in existing legacy areas of code where Vue is not\n * in use. For example, as part of the migration strategy defined in\n * https://gitlab.com/groups/gitlab-org/-/epics/7626.\n *\n * @param {Object} Component - The Vue component to render.\n * @param {Object} data - The data object to pass to the render function.\n * @param {string|Array} children - The children to render in the default slot\n * of the component.\n * @returns {HTMLElement}\n */\nexport const renderVueComponentForLegacyJS = (Component, data, children) => {\n const vm = new Vue({\n render(h) {\n return h(Component, data, children);\n },\n });\n\n vm.$mount();\n\n // Ensure it's rendered\n vm.$forceUpdate();\n\n const el = vm.$el.cloneNode(true);\n vm.$destroy();\n\n return el;\n};\n","export const AJAX_USERS_SELECT_PARAMS_MAP = {\n project_id: 'projectId',\n group_id: 'groupId',\n todo_filter: 'todoFilter',\n todo_state_filter: 'todoStateFilter',\n current_user: 'showCurrentUser',\n author_id: 'authorId',\n states: 'states',\n};\n\nexport const ACTIVE_AND_BLOCKED_USER_STATES = ['active', 'blocked', 'ldap_blocked'];\n"],"sourceRoot":""}