{"version":3,"sources":["webpack:///./pages/projects/blame/show/index.js","webpack:///./new_commit_form.js","webpack:///./lib/utils/ace_utils.js","webpack:///./blob/file_template_selector.js","webpack:///./blob/template_selectors/type_selector.js","webpack:///./blob/template_selectors/ci_yaml_selector.js","webpack:///./blob/template_selectors/dockerfile_selector.js","webpack:///./blob/template_selectors/gitignore_selector.js","webpack:///./blob/template_selectors/license_selector.js","webpack:///./blob/file_template_mediator.js","webpack:///./blob_edit/edit_blob.js","webpack:///./blob/blob_file_dropzone.js","webpack:///./blob_edit/blob_bundle.js","webpack:///./behaviors/shortcuts/shortcuts_navigation.js","webpack:///./project_select_combo_button.js","webpack:///./project_select.js","webpack:///./line_highlighter.js","webpack:///./blob/blob_fork_suggestion.js","webpack:///./pages/projects/project.js","webpack:///./pages/projects/index.js","webpack:///./lib/utils/constants.js","webpack:///./blob/blob_line_permalink_updater.js","webpack:///./behaviors/shortcuts/shortcuts_blob.js","webpack:///./pages/projects/init_blob.js"],"names":["__webpack_require__","r","__webpack_exports__","_pages_projects_init_blob__WEBPACK_IMPORTED_MODULE_0__","document","addEventListener","initBlob","NewCommitForm","form","_classCallCheck","this","renderDestination","bind","branchName","find","originalBranch","createMergeRequest","createMergeRequestContainer","keyup","different","val","show","wasDifferent","prop","hide","getModeByFileExtension","path","ace","require","getModeForPath","mode","d","FileTemplateSelector","mediator","$dropdown","$wrapper","cfg","config","$","dropdown","wrapper","$loadingIcon","$dropdownToggleText","initDropdown","init","removeClass","addClass","hasClass","text","options","query","e","data","preventDefault","selectTemplateFile","opts","selectedObj","name","reportSelection","FileTemplateTypeSelector","_ref","_this","dropdownData","type_selector_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","call","_this2","glDropdown","filterable","selectable","toggleLabel","item","clicked","selectTemplateTypeOptions","BlobCiYamlSelector","ci_yaml_selector_classCallCheck","ci_yaml_selector_possibleConstructorReturn","ci_yaml_selector_getPrototypeOf","key","pattern","type","search","fields","reportSelectionName","DockerfileSelector","dockerfile_selector_classCallCheck","dockerfile_selector_possibleConstructorReturn","dockerfile_selector_getPrototypeOf","BlobGitignoreSelector","gitignore_selector_classCallCheck","gitignore_selector_possibleConstructorReturn","gitignore_selector_getPrototypeOf","BlobLicenseSelector","license_selector_classCallCheck","license_selector_possibleConstructorReturn","license_selector_getPrototypeOf","el","$el","project","fullname","id","FileTemplateMediator","editor","currentAction","projectId","file_template_mediator_classCallCheck","initTemplateSelectors","initTemplateTypeSelector","initDomElements","initDropdowns","initPageEvents","templateSelectors","GitignoreSelector","LicenseSelector","map","TemplateSelectorClass","typeSelector","templateSelector","$templatesMenu","$undoMenu","$fileEditor","$undoBtn","$templateSelectors","$filenameInput","$fileContent","$commitForm","$navLinks","hideTemplateSelectorMenu","displayMatchedTemplateSelector","listenForFilenameInput","prepFileContentForSubmit","listenForPreviewMode","on","_this3","submit","getValue","_this4","hash","target","href","split","isHidden","showTemplateSelectorMenu","forEach","selector","setToggleText","cacheToggleText","selectTemplateType","_this5","renderLoading","destroyUndoMenu","fetchFileTemplate","then","file","showUndoMenu","setEditorContent","setFilename","renderLoaded","catch","err","Flash","concat","_this6","currentInput","getFilename","test","_this7","arguments","length","undefined","Promise","resolve","Api","projectTemplate","newValue","content","setValue","focus","navigateFileStart","_this8","restoreFromCache","cacheFileContents","off","cachedToggleText","getTemplateSelectorToggleText","cachedContent","cachedFilename","setTemplateSelectorToggleText","getToggleText","trigger","selected","EditBlob","assetsPath","aceMode","edit_blob_classCallCheck","configureAceEditor","initModePanesAndLinks","initSoftWrap","initFileSelectors","filePath","set","loadModule","edit","$blockScrolling","Infinity","getSession","setMode","fileTemplateMediator","TemplateSelectorMediator","$editModePanes","$editModeLinks","editModeLinkClickHandler","currentLink","paneId","attr","currentPane","filter","parent","fadeIn","$toggleButton","axios","post","empty","append","renderGFM","createFlash","__","isSoftWrapped","toggleSoftWrap","toggleClass","setUseWrapMode","toggleLoading","$icon","loading","disable","HIDDEN_CLASS","enable","Dropzone","autoDiscover","BlobFileDropzone","method","blob_file_dropzone_classCallCheck","formDropzone","submitButton","submitButtonLoadingIcon","dropzoneMessage","dropzone","autoProcessQueue","url","clickable","uploadMultiple","paramName","maxFilesize","gon","max_file_size","parallelUploads","maxFiles","addRemoveLinks","previewsContainer","headers","csrf","html","header","response","modal","visitUrl","removeFile","xhr","formData","error","errorMessage","stripped","stopPropagation","getQueuedFiles","alert","processQueue","editBlobForm","uploadBlobForm","deleteBlobForm","urlRoot","window","onbeforeunload","gl","utils","disableButtonIfEmptyField","ShortcutsNavigation","Mousetrap","findAndFollowLink","enabledHelp","push","Shortcuts","ProjectSelectComboButton","select","projectSelectInput","newItemBtn","resourceType","resourceLabel","formattedText","deriveTextVariants","groupId","bindEvents","initLocalStorage","siblings","openDropdown","getProjectFromLocalStorage","selectProject","AccessorUtilities","isLocalStorageAccessSafe","localStorageKey","localStorageItemType","join","setBtnTextFromLocalStorage","event","currentTarget","select2","selectedProjectData","JSON","parse","projectMeta","setNewItemBtnAttributes","setProjectInLocalStorage","cachedProjectData","defaultTextPrefix","presetTextSuffix","projectString","localStorage","getItem","stringify","setItem","slice","projectSelect","each","i","placeholder","simpleFilter","includeGroups","allProjects","orderBy","withIssuesEnabled","withMergeRequestsEnabled","withShared","includeProjectsInSubgroups","allowClear","minimumInputLength","finalCallback","projectsCallback","projects","results","callback","groupsCallback","groups","term","groupProjects","with_issues_enabled","with_merge_requests_enabled","with_shared","include_subgroups","order_by","membership","web_url","name_with_namespace","initSelection","dropdownCssClass","jquery__WEBPACK_IMPORTED_MODULE_0__","jquery__WEBPACK_IMPORTED_MODULE_0___default","n","LineHighlighter","highlightLineClass","fileHolderSelector","scrollFileHolder","location","_hash","setHash","highlightLine","clickHandler","highlightHash","prototype","$fileHolder","newHash","range","clearHighlight","hashToRange","highlightRange","lineSelector","scrollOptions","offset","scrollTo","current","lineNumber","closest","shiftKey","matches","match","parseInt","ref","reverse","firstLineNumber","lastLineNumber","__setLocationHash__","value","history","pushState","title","defaults","openButtons","forkButtons","cancelButtons","suggestionSections","actionTextPieces","BlobForkSuggestion","elementMap","Object","assign","onOpenButtonClick","onCancelButtonClick","forkPath","action","showSuggestionSection","hideSuggestionSection","Project","$cloneOptions","$projectCloneField","$cloneBtnLabel","mobileCloneField","querySelector","selectedCloneOption","trim","$this","cloneType","activeText","$label","dataset","clipboardText","initRefSwitcher","parents","Cookies","remove","cookieKey","projectSelectDropdown","changeProject","refListItem","createElement","refLink","get","params","flash","filterRemote","filterByText","inputFieldName","fieldName","renderRow","li","cloneNode","className","textContent","link","appendChild","obj","$form","$visit","shouldVisit","divider","indexOf","serialize","_dismissable_callout__WEBPACK_IMPORTED_MODULE_0__","_projects_gke_cluster_dropdowns__WEBPACK_IMPORTED_MODULE_1__","_project__WEBPACK_IMPORTED_MODULE_2__","_behaviors_shortcuts_shortcuts_navigation__WEBPACK_IMPORTED_MODULE_3__","page","body","initDismissableCallout","initGkeDropdowns","BYTES_IN_KIB","lineNumberRe","updateLineNumbersOnBlobPermalinks","linksToUpdate","getLocationHash","hashUrlString","Array","permalinkButton","baseHref","getAttribute","setAttribute","BlobLinePermalinkUpdater","blobContentHolder","lineNumberSelector","elementsToUpdate","updateBlameAndBlobPermalinkCb","setTimeout","skipResetBindings","fileBlobPermalinkUrl","ShortcutsBlob","moveToFilePermalink","_assertThisInitialized","querySelectorAll","fileBlobPermalinkUrlElement","initBlobBundle"],"mappings":"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","file":"pages.projects.blame.show.5afafede.chunk.js","sourcesContent":["import initBlob from '~/pages/projects/init_blob';\n\ndocument.addEventListener('DOMContentLoaded', initBlob);\n","/* eslint-disable no-var, no-return-assign */\nexport default class NewCommitForm {\n constructor(form) {\n this.form = form;\n this.renderDestination = this.renderDestination.bind(this);\n this.branchName = form.find('.js-branch-name');\n this.originalBranch = form.find('.js-original-branch');\n this.createMergeRequest = form.find('.js-create-merge-request');\n this.createMergeRequestContainer = form.find('.js-create-merge-request-container');\n this.branchName.keyup(this.renderDestination);\n this.renderDestination();\n }\n renderDestination() {\n var different;\n different = this.branchName.val() !== this.originalBranch.val();\n if (different) {\n this.createMergeRequestContainer.show();\n if (!this.wasDifferent) {\n this.createMergeRequest.prop('checked', true);\n }\n } else {\n this.createMergeRequestContainer.hide();\n this.createMergeRequest.prop('checked', false);\n }\n return (this.wasDifferent = different);\n }\n}\n","/* global ace */\n\nexport default function getModeByFileExtension(path) {\n const modelist = ace.require('ace/ext/modelist');\n return modelist.getModeForPath(path).mode;\n}\n","import $ from 'jquery';\n\nexport default class FileTemplateSelector {\n constructor(mediator) {\n this.mediator = mediator;\n this.$dropdown = null;\n this.$wrapper = null;\n }\n\n init() {\n const cfg = this.config;\n\n this.$dropdown = $(cfg.dropdown);\n this.$wrapper = $(cfg.wrapper);\n this.$loadingIcon = this.$wrapper.find('.fa-chevron-down');\n this.$dropdownToggleText = this.$wrapper.find('.dropdown-toggle-text');\n\n this.initDropdown();\n }\n\n show() {\n if (this.$dropdown === null) {\n this.init();\n }\n\n this.$wrapper.removeClass('hidden');\n }\n\n hide() {\n if (this.$dropdown !== null) {\n this.$wrapper.addClass('hidden');\n }\n }\n\n isHidden() {\n return this.$wrapper.hasClass('hidden');\n }\n\n getToggleText() {\n return this.$dropdownToggleText.text();\n }\n\n setToggleText(text) {\n this.$dropdownToggleText.text(text);\n }\n\n renderLoading() {\n this.$loadingIcon.addClass('fa-spinner fa-spin').removeClass('fa-chevron-down');\n }\n\n renderLoaded() {\n this.$loadingIcon.addClass('fa-chevron-down').removeClass('fa-spinner fa-spin');\n }\n\n reportSelection(options) {\n const { query, e, data } = options;\n e.preventDefault();\n return this.mediator.selectTemplateFile(this, query, data);\n }\n\n reportSelectionName(options) {\n const opts = options;\n opts.query = options.selectedObj.name;\n\n this.reportSelection(opts);\n }\n}\n","import FileTemplateSelector from '../file_template_selector';\n\nexport default class FileTemplateTypeSelector extends FileTemplateSelector {\n constructor({ mediator, dropdownData }) {\n super(mediator);\n this.mediator = mediator;\n this.config = {\n dropdown: '.js-template-type-selector',\n wrapper: '.js-template-type-selector-wrap',\n dropdownData,\n };\n }\n\n initDropdown() {\n this.$dropdown.glDropdown({\n data: this.config.dropdownData,\n filterable: false,\n selectable: true,\n toggleLabel: item => item.name,\n clicked: options => this.mediator.selectTemplateTypeOptions(options),\n text: item => item.name,\n });\n }\n}\n","import FileTemplateSelector from '../file_template_selector';\n\nexport default class BlobCiYamlSelector extends FileTemplateSelector {\n constructor({ mediator }) {\n super(mediator);\n this.config = {\n key: 'gitlab-ci-yaml',\n name: '.gitlab-ci.yml',\n pattern: /(.gitlab-ci.yml)/,\n type: 'gitlab_ci_ymls',\n dropdown: '.js-gitlab-ci-yml-selector',\n wrapper: '.js-gitlab-ci-yml-selector-wrap',\n };\n }\n\n initDropdown() {\n // maybe move to super class as well\n this.$dropdown.glDropdown({\n data: this.$dropdown.data('data'),\n filterable: true,\n selectable: true,\n toggleLabel: item => item.name,\n search: {\n fields: ['name'],\n },\n clicked: options => this.reportSelectionName(options),\n text: item => item.name,\n });\n }\n}\n","import FileTemplateSelector from '../file_template_selector';\n\nexport default class DockerfileSelector extends FileTemplateSelector {\n constructor({ mediator }) {\n super(mediator);\n this.config = {\n key: 'dockerfile',\n name: 'Dockerfile',\n pattern: /(Dockerfile)/,\n type: 'dockerfiles',\n dropdown: '.js-dockerfile-selector',\n wrapper: '.js-dockerfile-selector-wrap',\n };\n }\n\n initDropdown() {\n // maybe move to super class as well\n this.$dropdown.glDropdown({\n data: this.$dropdown.data('data'),\n filterable: true,\n selectable: true,\n toggleLabel: item => item.name,\n search: {\n fields: ['name'],\n },\n clicked: options => this.reportSelectionName(options),\n text: item => item.name,\n });\n }\n}\n","import FileTemplateSelector from '../file_template_selector';\n\nexport default class BlobGitignoreSelector extends FileTemplateSelector {\n constructor({ mediator }) {\n super(mediator);\n this.config = {\n key: 'gitignore',\n name: '.gitignore',\n pattern: /(.gitignore)/,\n type: 'gitignores',\n dropdown: '.js-gitignore-selector',\n wrapper: '.js-gitignore-selector-wrap',\n };\n }\n\n initDropdown() {\n this.$dropdown.glDropdown({\n data: this.$dropdown.data('data'),\n filterable: true,\n selectable: true,\n toggleLabel: item => item.name,\n search: {\n fields: ['name'],\n },\n clicked: options => this.reportSelectionName(options),\n text: item => item.name,\n });\n }\n}\n","import FileTemplateSelector from '../file_template_selector';\n\nexport default class BlobLicenseSelector extends FileTemplateSelector {\n constructor({ mediator }) {\n super(mediator);\n this.config = {\n key: 'license',\n name: 'LICENSE',\n pattern: /^(.+\\/)?(licen[sc]e|copying)($|\\.)/i,\n type: 'licenses',\n dropdown: '.js-license-selector',\n wrapper: '.js-license-selector-wrap',\n };\n }\n\n initDropdown() {\n this.$dropdown.glDropdown({\n data: this.$dropdown.data('data'),\n filterable: true,\n selectable: true,\n toggleLabel: item => item.name,\n search: {\n fields: ['name'],\n },\n clicked: options => {\n const { e } = options;\n const el = options.$el;\n const query = options.selectedObj;\n\n const data = {\n project: this.$dropdown.data('project'),\n fullname: this.$dropdown.data('fullname'),\n };\n\n this.reportSelection({\n query: query.id,\n el,\n e,\n data,\n });\n },\n text: item => item.name,\n });\n }\n}\n","import Api from '~/api';\n\nimport $ from 'jquery';\nimport Flash from '../flash';\nimport FileTemplateTypeSelector from './template_selectors/type_selector';\nimport BlobCiYamlSelector from './template_selectors/ci_yaml_selector';\nimport DockerfileSelector from './template_selectors/dockerfile_selector';\nimport GitignoreSelector from './template_selectors/gitignore_selector';\nimport LicenseSelector from './template_selectors/license_selector';\n\nexport default class FileTemplateMediator {\n constructor({ editor, currentAction, projectId }) {\n this.editor = editor;\n this.currentAction = currentAction;\n this.projectId = projectId;\n\n this.initTemplateSelectors();\n this.initTemplateTypeSelector();\n this.initDomElements();\n this.initDropdowns();\n this.initPageEvents();\n }\n\n initTemplateSelectors() {\n // Order dictates template type dropdown item order\n this.templateSelectors = [\n GitignoreSelector,\n BlobCiYamlSelector,\n DockerfileSelector,\n LicenseSelector,\n ].map(TemplateSelectorClass => new TemplateSelectorClass({ mediator: this }));\n }\n\n initTemplateTypeSelector() {\n this.typeSelector = new FileTemplateTypeSelector({\n mediator: this,\n dropdownData: this.templateSelectors.map(templateSelector => {\n const cfg = templateSelector.config;\n\n return {\n name: cfg.name,\n key: cfg.key,\n };\n }),\n });\n }\n\n initDomElements() {\n const $templatesMenu = $('.template-selectors-menu');\n const $undoMenu = $templatesMenu.find('.template-selectors-undo-menu');\n const $fileEditor = $('.file-editor');\n\n this.$templatesMenu = $templatesMenu;\n this.$undoMenu = $undoMenu;\n this.$undoBtn = $undoMenu.find('button');\n this.$templateSelectors = $templatesMenu.find('.template-selector-dropdowns-wrap');\n this.$filenameInput = $fileEditor.find('.js-file-path-name-input');\n this.$fileContent = $fileEditor.find('#file-content');\n this.$commitForm = $fileEditor.find('form');\n this.$navLinks = $fileEditor.find('.nav-links');\n }\n\n initDropdowns() {\n if (this.currentAction === 'create') {\n this.typeSelector.show();\n } else {\n this.hideTemplateSelectorMenu();\n }\n\n this.displayMatchedTemplateSelector();\n }\n\n initPageEvents() {\n this.listenForFilenameInput();\n this.prepFileContentForSubmit();\n this.listenForPreviewMode();\n }\n\n listenForFilenameInput() {\n this.$filenameInput.on('keyup blur', () => {\n this.displayMatchedTemplateSelector();\n });\n }\n\n prepFileContentForSubmit() {\n this.$commitForm.submit(() => {\n this.$fileContent.val(this.editor.getValue());\n });\n }\n\n listenForPreviewMode() {\n this.$navLinks.on('click', 'a', e => {\n const urlPieces = e.target.href.split('#');\n const hash = urlPieces[1];\n if (hash === 'preview') {\n this.hideTemplateSelectorMenu();\n } else if (hash === 'editor' && !this.typeSelector.isHidden()) {\n this.showTemplateSelectorMenu();\n }\n });\n }\n\n selectTemplateType(item, e) {\n if (e) {\n e.preventDefault();\n }\n\n this.templateSelectors.forEach(selector => {\n if (selector.config.key === item.key) {\n selector.show();\n } else {\n selector.hide();\n }\n });\n\n this.typeSelector.setToggleText(item.name);\n\n this.cacheToggleText();\n }\n\n selectTemplateTypeOptions(options) {\n this.selectTemplateType(options.selectedObj, options.e);\n }\n\n selectTemplateFile(selector, query, data) {\n selector.renderLoading();\n // in case undo menu is already there\n this.destroyUndoMenu();\n this.fetchFileTemplate(selector.config.type, query, data)\n .then(file => {\n this.showUndoMenu();\n this.setEditorContent(file);\n this.setFilename(selector.config.name);\n selector.renderLoaded();\n })\n .catch(err => new Flash(`An error occurred while fetching the template: ${err}`));\n }\n\n displayMatchedTemplateSelector() {\n const currentInput = this.getFilename();\n this.templateSelectors.forEach(selector => {\n const match = selector.config.pattern.test(currentInput);\n\n if (match) {\n this.typeSelector.show();\n this.selectTemplateType(selector.config);\n this.showTemplateSelectorMenu();\n }\n });\n }\n\n fetchFileTemplate(type, query, data = {}) {\n return new Promise(resolve => {\n const resolveFile = file => resolve(file);\n\n Api.projectTemplate(this.projectId, type, query, data, resolveFile);\n });\n }\n\n setEditorContent(file) {\n if (!file && file !== '') return;\n\n const newValue = file.content || file;\n\n this.editor.setValue(newValue, 1);\n\n this.editor.focus();\n\n this.editor.navigateFileStart();\n }\n\n findTemplateSelectorByKey(key) {\n return this.templateSelectors.find(selector => selector.config.key === key);\n }\n\n showUndoMenu() {\n this.$undoMenu.removeClass('hidden');\n\n this.$undoBtn.on('click', () => {\n this.restoreFromCache();\n this.destroyUndoMenu();\n });\n }\n\n destroyUndoMenu() {\n this.cacheFileContents();\n this.cacheToggleText();\n this.$undoMenu.addClass('hidden');\n this.$undoBtn.off('click');\n }\n\n hideTemplateSelectorMenu() {\n this.$templatesMenu.hide();\n }\n\n showTemplateSelectorMenu() {\n this.$templatesMenu.show();\n }\n\n cacheToggleText() {\n this.cachedToggleText = this.getTemplateSelectorToggleText();\n }\n\n cacheFileContents() {\n this.cachedContent = this.editor.getValue();\n this.cachedFilename = this.getFilename();\n }\n\n restoreFromCache() {\n this.setEditorContent(this.cachedContent);\n this.setFilename(this.cachedFilename);\n this.setTemplateSelectorToggleText();\n }\n\n getTemplateSelectorToggleText() {\n return this.$templateSelectors\n .find('.js-template-selector-wrap:visible .dropdown-toggle-text')\n .text();\n }\n\n setTemplateSelectorToggleText() {\n return this.$templateSelectors\n .find('.js-template-selector-wrap:visible .dropdown-toggle-text')\n .text(this.cachedToggleText);\n }\n\n getTypeSelectorToggleText() {\n return this.typeSelector.getToggleText();\n }\n\n getFilename() {\n return this.$filenameInput.val();\n }\n\n setFilename(name) {\n this.$filenameInput.val(name).trigger('change');\n }\n\n getSelected() {\n return this.templateSelectors.find(selector => selector.selected);\n }\n}\n","/* global ace */\n\nimport $ from 'jquery';\nimport axios from '~/lib/utils/axios_utils';\nimport createFlash from '~/flash';\nimport { __ } from '~/locale';\nimport TemplateSelectorMediator from '../blob/file_template_mediator';\nimport getModeByFileExtension from '~/lib/utils/ace_utils';\n\nexport default class EditBlob {\n constructor(assetsPath, aceMode, currentAction, projectId) {\n this.configureAceEditor(aceMode, assetsPath);\n this.initModePanesAndLinks();\n this.initSoftWrap();\n this.initFileSelectors(currentAction, projectId);\n }\n\n configureAceEditor(filePath, assetsPath) {\n ace.config.set('modePath', `${assetsPath}/ace`);\n ace.config.loadModule('ace/ext/searchbox');\n ace.config.loadModule('ace/ext/modelist');\n\n this.editor = ace.edit('editor');\n\n // This prevents warnings re: automatic scrolling being logged\n this.editor.$blockScrolling = Infinity;\n\n this.editor.focus();\n\n if (filePath) {\n this.editor.getSession().setMode(getModeByFileExtension(filePath));\n }\n }\n\n initFileSelectors(currentAction, projectId) {\n this.fileTemplateMediator = new TemplateSelectorMediator({\n currentAction,\n editor: this.editor,\n projectId,\n });\n }\n\n initModePanesAndLinks() {\n this.$editModePanes = $('.js-edit-mode-pane');\n this.$editModeLinks = $('.js-edit-mode a');\n this.$editModeLinks.on('click', e => this.editModeLinkClickHandler(e));\n }\n\n editModeLinkClickHandler(e) {\n e.preventDefault();\n\n const currentLink = $(e.target);\n const paneId = currentLink.attr('href');\n const currentPane = this.$editModePanes.filter(paneId);\n\n this.$editModeLinks.parent().removeClass('active hover');\n\n currentLink.parent().addClass('active hover');\n\n this.$editModePanes.hide();\n\n currentPane.fadeIn(200);\n\n if (paneId === '#preview') {\n this.$toggleButton.hide();\n axios\n .post(currentLink.data('previewUrl'), {\n content: this.editor.getValue(),\n })\n .then(({ data }) => {\n currentPane.empty().append(data);\n currentPane.renderGFM();\n })\n .catch(() => createFlash(__('An error occurred previewing the blob')));\n }\n\n this.$toggleButton.show();\n\n return this.editor.focus();\n }\n\n initSoftWrap() {\n this.isSoftWrapped = false;\n this.$toggleButton = $('.soft-wrap-toggle');\n this.$toggleButton.on('click', () => this.toggleSoftWrap());\n }\n\n toggleSoftWrap() {\n this.isSoftWrapped = !this.isSoftWrapped;\n this.$toggleButton.toggleClass('soft-wrap-active', this.isSoftWrapped);\n this.editor.getSession().setUseWrapMode(this.isSoftWrapped);\n }\n}\n","/* eslint-disable func-names, object-shorthand, prefer-arrow-callback */\n\nimport $ from 'jquery';\nimport Dropzone from 'dropzone';\nimport { visitUrl } from '../lib/utils/url_utility';\nimport { HIDDEN_CLASS } from '../lib/utils/constants';\nimport csrf from '../lib/utils/csrf';\n\nDropzone.autoDiscover = false;\n\nfunction toggleLoading($el, $icon, loading) {\n if (loading) {\n $el.disable();\n $icon.removeClass(HIDDEN_CLASS);\n } else {\n $el.enable();\n $icon.addClass(HIDDEN_CLASS);\n }\n}\nexport default class BlobFileDropzone {\n constructor(form, method) {\n const formDropzone = form.find('.dropzone');\n const submitButton = form.find('#submit-all');\n const submitButtonLoadingIcon = submitButton.find('.js-loading-icon');\n const dropzoneMessage = form.find('.dz-message');\n Dropzone.autoDiscover = false;\n\n const dropzone = formDropzone.dropzone({\n autoDiscover: false,\n autoProcessQueue: false,\n url: form.attr('action'),\n // Rails uses a hidden input field for PUT\n // http://stackoverflow.com/questions/21056482/how-to-set-method-put-in-form-tag-in-rails\n method: method,\n clickable: true,\n uploadMultiple: false,\n paramName: 'file',\n maxFilesize: gon.max_file_size || 10,\n parallelUploads: 1,\n maxFiles: 1,\n addRemoveLinks: true,\n previewsContainer: '.dropzone-previews',\n headers: csrf.headers,\n init: function() {\n this.on('addedfile', function() {\n toggleLoading(submitButton, submitButtonLoadingIcon, false);\n dropzoneMessage.addClass(HIDDEN_CLASS);\n $('.dropzone-alerts')\n .html('')\n .hide();\n });\n this.on('removedfile', function() {\n toggleLoading(submitButton, submitButtonLoadingIcon, false);\n dropzoneMessage.removeClass(HIDDEN_CLASS);\n });\n this.on('success', function(header, response) {\n $('#modal-upload-blob').modal('hide');\n visitUrl(response.filePath);\n });\n this.on('maxfilesexceeded', function(file) {\n dropzoneMessage.addClass(HIDDEN_CLASS);\n this.removeFile(file);\n });\n this.on('sending', function(file, xhr, formData) {\n formData.append('branch_name', form.find('.js-branch-name').val());\n formData.append('create_merge_request', form.find('.js-create-merge-request').val());\n formData.append('commit_message', form.find('.js-commit-message').val());\n });\n },\n // Override behavior of adding error underneath preview\n error: function(file, errorMessage) {\n const stripped = $('
')\n .html(errorMessage)\n .text();\n $('.dropzone-alerts')\n .html(`Error uploading file: \"${stripped}\"`)\n .show();\n this.removeFile(file);\n },\n });\n\n submitButton.on('click', e => {\n e.preventDefault();\n e.stopPropagation();\n if (dropzone[0].dropzone.getQueuedFiles().length === 0) {\n // eslint-disable-next-line no-alert\n alert('Please select a file');\n return false;\n }\n toggleLoading(submitButton, submitButtonLoadingIcon, true);\n dropzone[0].dropzone.processQueue();\n return false;\n });\n }\n}\n","/* eslint-disable no-new */\n\nimport $ from 'jquery';\nimport NewCommitForm from '../new_commit_form';\nimport EditBlob from './edit_blob';\nimport BlobFileDropzone from '../blob/blob_file_dropzone';\n\nexport default () => {\n const editBlobForm = $('.js-edit-blob-form');\n const uploadBlobForm = $('.js-upload-blob-form');\n const deleteBlobForm = $('.js-delete-blob-form');\n\n if (editBlobForm.length) {\n const urlRoot = editBlobForm.data('relativeUrlRoot');\n const assetsPath = editBlobForm.data('assetsPrefix');\n const filePath = editBlobForm.data('blobFilename');\n const currentAction = $('.js-file-title').data('currentAction');\n const projectId = editBlobForm.data('project-id');\n const commitButton = $('.js-commit-button');\n\n commitButton.on('click', () => {\n window.onbeforeunload = null;\n });\n\n new EditBlob(`${urlRoot}${assetsPath}`, filePath, currentAction, projectId);\n new NewCommitForm(editBlobForm);\n\n // returning here blocks page navigation\n window.onbeforeunload = () => '';\n }\n\n if (uploadBlobForm.length) {\n const method = uploadBlobForm.data('method');\n\n new BlobFileDropzone(uploadBlobForm, method);\n new NewCommitForm(uploadBlobForm);\n\n window.gl.utils.disableButtonIfEmptyField(\n uploadBlobForm.find('.js-commit-message'),\n '.btn-upload-file',\n );\n }\n\n if (deleteBlobForm.length) {\n new NewCommitForm(deleteBlobForm);\n }\n};\n","import Mousetrap from 'mousetrap';\nimport findAndFollowLink from '../../lib/utils/navigation_utility';\nimport Shortcuts from './shortcuts';\n\nexport default class ShortcutsNavigation extends Shortcuts {\n constructor() {\n super();\n\n Mousetrap.bind('g p', () => findAndFollowLink('.shortcuts-project'));\n Mousetrap.bind('g v', () => findAndFollowLink('.shortcuts-project-activity'));\n Mousetrap.bind('g f', () => findAndFollowLink('.shortcuts-tree'));\n Mousetrap.bind('g c', () => findAndFollowLink('.shortcuts-commits'));\n Mousetrap.bind('g j', () => findAndFollowLink('.shortcuts-builds'));\n Mousetrap.bind('g n', () => findAndFollowLink('.shortcuts-network'));\n Mousetrap.bind('g d', () => findAndFollowLink('.shortcuts-repository-charts'));\n Mousetrap.bind('g i', () => findAndFollowLink('.shortcuts-issues'));\n Mousetrap.bind('g b', () => findAndFollowLink('.shortcuts-issue-boards'));\n Mousetrap.bind('g m', () => findAndFollowLink('.shortcuts-merge_requests'));\n Mousetrap.bind('g w', () => findAndFollowLink('.shortcuts-wiki'));\n Mousetrap.bind('g s', () => findAndFollowLink('.shortcuts-snippets'));\n Mousetrap.bind('g k', () => findAndFollowLink('.shortcuts-kubernetes'));\n Mousetrap.bind('g e', () => findAndFollowLink('.shortcuts-environments'));\n Mousetrap.bind('g l', () => findAndFollowLink('.shortcuts-metrics'));\n Mousetrap.bind('i', () => findAndFollowLink('.shortcuts-new-issue'));\n\n this.enabledHelp.push('.hidden-shortcut.project');\n }\n}\n","import $ from 'jquery';\nimport AccessorUtilities from './lib/utils/accessor';\n\nexport default class ProjectSelectComboButton {\n constructor(select) {\n this.projectSelectInput = $(select);\n this.newItemBtn = $('.new-project-item-link');\n this.resourceType = this.newItemBtn.data('type');\n this.resourceLabel = this.newItemBtn.data('label');\n this.formattedText = this.deriveTextVariants();\n this.groupId = this.projectSelectInput.data('groupId');\n this.bindEvents();\n this.initLocalStorage();\n }\n\n bindEvents() {\n this.projectSelectInput\n .siblings('.new-project-item-select-button')\n .on('click', e => this.openDropdown(e));\n\n this.newItemBtn.on('click', e => {\n if (!this.getProjectFromLocalStorage()) {\n e.preventDefault();\n this.openDropdown(e);\n }\n });\n\n this.projectSelectInput.on('change', () => this.selectProject());\n }\n\n initLocalStorage() {\n const localStorageIsSafe = AccessorUtilities.isLocalStorageAccessSafe();\n\n if (localStorageIsSafe) {\n this.localStorageKey = [\n 'group',\n this.groupId,\n this.formattedText.localStorageItemType,\n 'recent-project',\n ].join('-');\n this.setBtnTextFromLocalStorage();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n openDropdown(event) {\n $(event.currentTarget)\n .siblings('.project-item-select')\n .select2('open');\n }\n\n selectProject() {\n const selectedProjectData = JSON.parse(this.projectSelectInput.val());\n const projectUrl = `${selectedProjectData.url}/${this.projectSelectInput.data('relativePath')}`;\n const projectName = selectedProjectData.name;\n\n const projectMeta = {\n url: projectUrl,\n name: projectName,\n };\n\n this.setNewItemBtnAttributes(projectMeta);\n this.setProjectInLocalStorage(projectMeta);\n }\n\n setBtnTextFromLocalStorage() {\n const cachedProjectData = this.getProjectFromLocalStorage();\n\n this.setNewItemBtnAttributes(cachedProjectData);\n }\n\n setNewItemBtnAttributes(project) {\n if (project) {\n this.newItemBtn.attr('href', project.url);\n this.newItemBtn.text(`${this.formattedText.defaultTextPrefix} in ${project.name}`);\n } else {\n this.newItemBtn.text(`Select project to create ${this.formattedText.presetTextSuffix}`);\n }\n }\n\n getProjectFromLocalStorage() {\n const projectString = localStorage.getItem(this.localStorageKey);\n\n return JSON.parse(projectString);\n }\n\n setProjectInLocalStorage(projectMeta) {\n const projectString = JSON.stringify(projectMeta);\n\n localStorage.setItem(this.localStorageKey, projectString);\n }\n\n deriveTextVariants() {\n const defaultTextPrefix = this.resourceLabel;\n\n // the trailing slice call depluralizes each of these strings (e.g. new-issues -> new-issue)\n const localStorageItemType = `new-${this.resourceType\n .split('_')\n .join('-')\n .slice(0, -1)}`;\n const presetTextSuffix = this.resourceType\n .split('_')\n .join(' ')\n .slice(0, -1);\n\n return {\n localStorageItemType, // new-issue / new-merge-request\n defaultTextPrefix, // New issue / New merge request\n presetTextSuffix, // issue / merge request\n };\n }\n}\n","/* eslint-disable func-names, no-var, object-shorthand, one-var, no-else-return */\n\nimport $ from 'jquery';\nimport Api from './api';\nimport ProjectSelectComboButton from './project_select_combo_button';\n\nexport default function projectSelect() {\n $('.ajax-project-select').each(function(i, select) {\n var placeholder;\n const simpleFilter = $(select).data('simpleFilter') || false;\n this.groupId = $(select).data('groupId');\n this.includeGroups = $(select).data('includeGroups');\n this.allProjects = $(select).data('allProjects') || false;\n this.orderBy = $(select).data('orderBy') || 'id';\n this.withIssuesEnabled = $(select).data('withIssuesEnabled');\n this.withMergeRequestsEnabled = $(select).data('withMergeRequestsEnabled');\n this.withShared =\n $(select).data('withShared') === undefined ? true : $(select).data('withShared');\n this.includeProjectsInSubgroups = $(select).data('includeProjectsInSubgroups') || false;\n this.allowClear = $(select).data('allowClear') || false;\n\n placeholder = 'Search for project';\n if (this.includeGroups) {\n placeholder += ' or group';\n }\n\n $(select).select2({\n placeholder: placeholder,\n minimumInputLength: 0,\n query: (function(_this) {\n return function(query) {\n var finalCallback, projectsCallback;\n finalCallback = function(projects) {\n var data;\n data = {\n results: projects,\n };\n return query.callback(data);\n };\n if (_this.includeGroups) {\n projectsCallback = function(projects) {\n var groupsCallback;\n groupsCallback = function(groups) {\n var data;\n data = groups.concat(projects);\n return finalCallback(data);\n };\n return Api.groups(query.term, {}, groupsCallback);\n };\n } else {\n projectsCallback = finalCallback;\n }\n if (_this.groupId) {\n return Api.groupProjects(\n _this.groupId,\n query.term,\n {\n with_issues_enabled: _this.withIssuesEnabled,\n with_merge_requests_enabled: _this.withMergeRequestsEnabled,\n with_shared: _this.withShared,\n include_subgroups: _this.includeProjectsInSubgroups,\n },\n projectsCallback,\n );\n } else {\n return Api.projects(\n query.term,\n {\n order_by: _this.orderBy,\n with_issues_enabled: _this.withIssuesEnabled,\n with_merge_requests_enabled: _this.withMergeRequestsEnabled,\n membership: !_this.allProjects,\n },\n projectsCallback,\n );\n }\n };\n })(this),\n id: function(project) {\n if (simpleFilter) return project.id;\n return JSON.stringify({\n name: project.name,\n url: project.web_url,\n });\n },\n text: function(project) {\n return project.name_with_namespace || project.name;\n },\n\n initSelection: function(el, callback) {\n return Api.project(el.val()).then(({ data }) => callback(data));\n },\n\n allowClear: this.allowClear,\n\n dropdownCssClass: 'ajax-project-dropdown',\n });\n if (simpleFilter) return select;\n return new ProjectSelectComboButton(select);\n });\n}\n","/* eslint-disable func-names, no-var, no-underscore-dangle, no-param-reassign, prefer-template, consistent-return, one-var, no-else-return */\n\nimport $ from 'jquery';\n\n// LineHighlighter\n//\n// Handles single- and multi-line selection and highlight for blob views.\n//\n//\n// ### Example Markup\n//\n//
\n//
\n//
\n// 1\n// 2\n// 3\n// 4\n// 5\n//
\n//
\n//         \n//           ...\n//           ...\n//           ...\n//           ...\n//           ...\n//         \n//       
\n//
\n//
\n//\n\nconst LineHighlighter = function(options = {}) {\n options.highlightLineClass = options.highlightLineClass || 'hll';\n options.fileHolderSelector = options.fileHolderSelector || '.file-holder';\n options.scrollFileHolder = options.scrollFileHolder || false;\n options.hash = options.hash || window.location.hash;\n\n this.options = options;\n this._hash = options.hash;\n this.highlightLineClass = options.highlightLineClass;\n this.setHash = this.setHash.bind(this);\n this.highlightLine = this.highlightLine.bind(this);\n this.clickHandler = this.clickHandler.bind(this);\n this.highlightHash = this.highlightHash.bind(this);\n\n this.bindEvents();\n this.highlightHash();\n};\n\nLineHighlighter.prototype.bindEvents = function() {\n const $fileHolder = $(this.options.fileHolderSelector);\n\n $fileHolder.on('click', 'a[data-line-number]', this.clickHandler);\n $fileHolder.on('highlight:line', this.highlightHash);\n};\n\nLineHighlighter.prototype.highlightHash = function(newHash) {\n let range;\n if (newHash && typeof newHash === 'string') this._hash = newHash;\n\n this.clearHighlight();\n\n if (this._hash !== '') {\n range = this.hashToRange(this._hash);\n if (range[0]) {\n this.highlightRange(range);\n const lineSelector = `#L${range[0]}`;\n const scrollOptions = {\n // Scroll to the first highlighted line on initial load\n // Offset -50 for the sticky top bar, and another -100 for some context\n offset: -150,\n };\n if (this.options.scrollFileHolder) {\n $(this.options.fileHolderSelector).scrollTo(lineSelector, scrollOptions);\n } else {\n $.scrollTo(lineSelector, scrollOptions);\n }\n }\n }\n};\n\nLineHighlighter.prototype.clickHandler = function(event) {\n var current, lineNumber, range;\n event.preventDefault();\n this.clearHighlight();\n lineNumber = $(event.target)\n .closest('a')\n .data('lineNumber');\n current = this.hashToRange(this._hash);\n if (!(current[0] && event.shiftKey)) {\n // If there's no current selection, or there is but Shift wasn't held,\n // treat this like a single-line selection.\n this.setHash(lineNumber);\n return this.highlightLine(lineNumber);\n } else if (event.shiftKey) {\n if (lineNumber < current[0]) {\n range = [lineNumber, current[0]];\n } else {\n range = [current[0], lineNumber];\n }\n this.setHash(range[0], range[1]);\n return this.highlightRange(range);\n }\n};\n\nLineHighlighter.prototype.clearHighlight = function() {\n return $('.' + this.highlightLineClass).removeClass(this.highlightLineClass);\n};\n\n// Convert a URL hash String into line numbers\n//\n// hash - Hash String\n//\n// Examples:\n//\n// hashToRange('#L5') # => [5, null]\n// hashToRange('#L5-15') # => [5, 15]\n// hashToRange('#foo') # => [null, null]\n//\n// Returns an Array\nLineHighlighter.prototype.hashToRange = function(hash) {\n var first, last, matches;\n // ?L(\\d+)(?:-(\\d+))?$/)\n matches = hash.match(/^#?L(\\d+)(?:-(\\d+))?$/);\n if (matches && matches.length) {\n first = parseInt(matches[1], 10);\n last = matches[2] ? parseInt(matches[2], 10) : null;\n return [first, last];\n } else {\n return [null, null];\n }\n};\n\n// Highlight a single line\n//\n// lineNumber - Line number to highlight\nLineHighlighter.prototype.highlightLine = function(lineNumber) {\n return $('#LC' + lineNumber).addClass(this.highlightLineClass);\n};\n\n// Highlight all lines within a range\n//\n// range - Array containing the starting and ending line numbers\nLineHighlighter.prototype.highlightRange = function(range) {\n if (range[1]) {\n const results = [];\n const ref = range[0] <= range[1] ? range : range.reverse();\n\n for (let lineNumber = range[0]; lineNumber <= ref[1]; lineNumber += 1) {\n results.push(this.highlightLine(lineNumber));\n }\n\n return results;\n } else {\n return this.highlightLine(range[0]);\n }\n};\n\n// Set the URL hash string\nLineHighlighter.prototype.setHash = function(firstLineNumber, lastLineNumber) {\n var hash;\n if (lastLineNumber) {\n hash = '#L' + firstLineNumber + '-' + lastLineNumber;\n } else {\n hash = '#L' + firstLineNumber;\n }\n this._hash = hash;\n return this.__setLocationHash__(hash);\n};\n\n// Make the actual hash change in the browser\n//\n// This method is stubbed in tests.\nLineHighlighter.prototype.__setLocationHash__ = function(value) {\n return window.history.pushState(\n {\n url: value,\n // We're using pushState instead of assigning location.hash directly to\n // prevent the page from scrolling on the hashchange event\n },\n document.title,\n value,\n );\n};\n\nexport default LineHighlighter;\n","import $ from 'jquery';\n\nconst defaults = {\n // Buttons that will show the `suggestionSections`\n // has `data-fork-path`, and `data-action`\n openButtons: [],\n // Update the href(from `openButton` -> `data-fork-path`)\n // whenever a `openButton` is clicked\n forkButtons: [],\n // Buttons to hide the `suggestionSections`\n cancelButtons: [],\n // Section to show/hide\n suggestionSections: [],\n // Pieces of text that need updating depending on the action, `edit`, `replace`, `delete`\n actionTextPieces: [],\n};\n\nclass BlobForkSuggestion {\n constructor(options) {\n this.elementMap = Object.assign({}, defaults, options);\n this.onOpenButtonClick = this.onOpenButtonClick.bind(this);\n this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n }\n\n init() {\n this.bindEvents();\n\n return this;\n }\n\n bindEvents() {\n $(this.elementMap.openButtons).on('click', this.onOpenButtonClick);\n $(this.elementMap.cancelButtons).on('click', this.onCancelButtonClick);\n }\n\n showSuggestionSection(forkPath, action = 'edit') {\n $(this.elementMap.suggestionSections).removeClass('hidden');\n $(this.elementMap.forkButtons).attr('href', forkPath);\n $(this.elementMap.actionTextPieces).text(action);\n }\n\n hideSuggestionSection() {\n $(this.elementMap.suggestionSections).addClass('hidden');\n }\n\n onOpenButtonClick(e) {\n const forkPath = $(e.currentTarget).attr('data-fork-path');\n const action = $(e.currentTarget).attr('data-action');\n this.showSuggestionSection(forkPath, action);\n }\n\n onCancelButtonClick() {\n this.hideSuggestionSection();\n }\n\n destroy() {\n $(this.elementMap.openButtons).off('click', this.onOpenButtonClick);\n $(this.elementMap.cancelButtons).off('click', this.onCancelButtonClick);\n }\n}\n\nexport default BlobForkSuggestion;\n","/* eslint-disable func-names, no-var, no-return-assign, one-var, object-shorthand, vars-on-top */\n\nimport $ from 'jquery';\nimport Cookies from 'js-cookie';\nimport { __ } from '~/locale';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport axios from '~/lib/utils/axios_utils';\nimport flash from '~/flash';\nimport projectSelect from '../../project_select';\n\nexport default class Project {\n constructor() {\n const $cloneOptions = $('ul.clone-options-dropdown');\n const $projectCloneField = $('#project_clone');\n const $cloneBtnLabel = $('.js-git-clone-holder .js-clone-dropdown-label');\n const mobileCloneField = document.querySelector(\n '.js-mobile-git-clone .js-clone-dropdown-label',\n );\n\n const selectedCloneOption = $cloneBtnLabel.text().trim();\n if (selectedCloneOption.length > 0) {\n $(`a:contains('${selectedCloneOption}')`, $cloneOptions).addClass('is-active');\n }\n\n $('a', $cloneOptions).on('click', e => {\n e.preventDefault();\n const $this = $(e.currentTarget);\n const url = $this.attr('href');\n const cloneType = $this.data('cloneType');\n\n $('.is-active', $cloneOptions).removeClass('is-active');\n $(`a[data-clone-type=\"${cloneType}\"]`).each(function() {\n const $el = $(this);\n const activeText = $el.find('.dropdown-menu-inner-title').text();\n const $container = $el.closest('.project-clone-holder');\n const $label = $container.find('.js-clone-dropdown-label');\n\n $el.toggleClass('is-active');\n $label.text(activeText);\n });\n\n if (mobileCloneField) {\n mobileCloneField.dataset.clipboardText = url;\n } else {\n $projectCloneField.val(url);\n }\n $('.js-git-empty .js-clone').text(url);\n });\n // Ref switcher\n Project.initRefSwitcher();\n $('.project-refs-select').on('change', function() {\n return $(this)\n .parents('form')\n .submit();\n });\n $('.hide-no-ssh-message').on('click', function(e) {\n Cookies.set('hide_no_ssh_message', 'false');\n $(this)\n .parents('.no-ssh-key-message')\n .remove();\n return e.preventDefault();\n });\n $('.hide-no-password-message').on('click', function(e) {\n Cookies.set('hide_no_password_message', 'false');\n $(this)\n .parents('.no-password-message')\n .remove();\n return e.preventDefault();\n });\n $('.hide-auto-devops-implicitly-enabled-banner').on('click', function(e) {\n const projectId = $(this).data('project-id');\n const cookieKey = `hide_auto_devops_implicitly_enabled_banner_${projectId}`;\n Cookies.set(cookieKey, 'false');\n $(this)\n .parents('.auto-devops-implicitly-enabled-banner')\n .remove();\n return e.preventDefault();\n });\n Project.projectSelectDropdown();\n }\n\n static projectSelectDropdown() {\n projectSelect();\n $('.project-item-select').on('click', e => Project.changeProject($(e.currentTarget).val()));\n }\n\n static changeProject(url) {\n return (window.location = url);\n }\n\n static initRefSwitcher() {\n var refListItem = document.createElement('li');\n var refLink = document.createElement('a');\n\n refLink.href = '#';\n\n return $('.js-project-refs-dropdown').each(function() {\n var $dropdown, selected;\n $dropdown = $(this);\n selected = $dropdown.data('selected');\n return $dropdown.glDropdown({\n data(term, callback) {\n axios\n .get($dropdown.data('refsUrl'), {\n params: {\n ref: $dropdown.data('ref'),\n search: term,\n },\n })\n .then(({ data }) => callback(data))\n .catch(() => flash(__('An error occurred while getting projects')));\n },\n selectable: true,\n filterable: true,\n filterRemote: true,\n filterByText: true,\n inputFieldName: $dropdown.data('inputFieldName'),\n fieldName: $dropdown.data('fieldName'),\n renderRow: function(ref) {\n var li = refListItem.cloneNode(false);\n\n if (ref.header != null) {\n li.className = 'dropdown-header';\n li.textContent = ref.header;\n } else {\n var link = refLink.cloneNode(false);\n\n if (ref === selected) {\n link.className = 'is-active';\n }\n\n link.textContent = ref;\n link.dataset.ref = ref;\n\n li.appendChild(link);\n }\n\n return li;\n },\n id: function(obj, $el) {\n return $el.attr('data-ref');\n },\n toggleLabel: function(obj, $el) {\n return $el.text().trim();\n },\n clicked: function(options) {\n const { e } = options;\n e.preventDefault();\n if ($('input[name=\"ref\"]').length) {\n var $form = $dropdown.closest('form');\n\n var $visit = $dropdown.data('visit');\n var shouldVisit = $visit ? true : $visit;\n var action = $form.attr('action');\n var divider = action.indexOf('?') === -1 ? '?' : '&';\n if (shouldVisit) {\n visitUrl(`${action}${divider}${$form.serialize()}`);\n }\n }\n },\n });\n });\n }\n}\n","import initDismissableCallout from '~/dismissable_callout';\nimport initGkeDropdowns from '~/projects/gke_cluster_dropdowns';\nimport Project from './project';\nimport ShortcutsNavigation from '../../behaviors/shortcuts/shortcuts_navigation';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const { page } = document.body.dataset;\n const newClusterViews = [\n 'projects:clusters:new',\n 'projects:clusters:create_gcp',\n 'projects:clusters:create_user',\n ];\n\n if (newClusterViews.indexOf(page) > -1) {\n initDismissableCallout('.gcp-signup-offer');\n initGkeDropdowns();\n }\n\n new Project(); // eslint-disable-line no-new\n new ShortcutsNavigation(); // eslint-disable-line no-new\n});\n","export const BYTES_IN_KIB = 1024;\nexport const HIDDEN_CLASS = 'hidden';\n","import { getLocationHash } from '../lib/utils/url_utility';\n\nconst lineNumberRe = /^L[0-9]+/;\n\nconst updateLineNumbersOnBlobPermalinks = linksToUpdate => {\n const hash = getLocationHash();\n if (hash && lineNumberRe.test(hash)) {\n const hashUrlString = `#${hash}`;\n\n [].concat(Array.prototype.slice.call(linksToUpdate)).forEach(permalinkButton => {\n const baseHref =\n permalinkButton.getAttribute('data-original-href') ||\n (() => {\n const href = permalinkButton.getAttribute('href');\n permalinkButton.setAttribute('data-original-href', href);\n return href;\n })();\n permalinkButton.setAttribute('href', `${baseHref}${hashUrlString}`);\n });\n }\n};\n\nfunction BlobLinePermalinkUpdater(blobContentHolder, lineNumberSelector, elementsToUpdate) {\n const updateBlameAndBlobPermalinkCb = () => {\n // Wait for the hash to update from the LineHighlighter callback\n setTimeout(() => {\n updateLineNumbersOnBlobPermalinks(elementsToUpdate);\n }, 0);\n };\n\n blobContentHolder.addEventListener('click', e => {\n if (e.target.matches(lineNumberSelector)) {\n updateBlameAndBlobPermalinkCb();\n }\n });\n updateBlameAndBlobPermalinkCb();\n}\n\nexport default BlobLinePermalinkUpdater;\n","import Mousetrap from 'mousetrap';\nimport { getLocationHash, visitUrl } from '../../lib/utils/url_utility';\nimport Shortcuts from './shortcuts';\n\nconst defaults = {\n skipResetBindings: false,\n fileBlobPermalinkUrl: null,\n};\n\nexport default class ShortcutsBlob extends Shortcuts {\n constructor(opts) {\n const options = Object.assign({}, defaults, opts);\n super(options.skipResetBindings);\n this.options = options;\n\n Mousetrap.bind('y', this.moveToFilePermalink.bind(this));\n }\n\n moveToFilePermalink() {\n if (this.options.fileBlobPermalinkUrl) {\n const hash = getLocationHash();\n const hashUrlString = hash ? `#${hash}` : '';\n visitUrl(`${this.options.fileBlobPermalinkUrl}${hashUrlString}`);\n }\n }\n}\n","import LineHighlighter from '~/line_highlighter';\nimport BlobLinePermalinkUpdater from '~/blob/blob_line_permalink_updater';\nimport ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';\nimport ShortcutsBlob from '~/behaviors/shortcuts/shortcuts_blob';\nimport BlobForkSuggestion from '~/blob/blob_fork_suggestion';\nimport initBlobBundle from '~/blob_edit/blob_bundle';\n\nexport default () => {\n new LineHighlighter(); // eslint-disable-line no-new\n\n // eslint-disable-next-line no-new\n new BlobLinePermalinkUpdater(\n document.querySelector('#blob-content-holder'),\n '.diff-line-num[data-line-number]',\n document.querySelectorAll('.js-data-file-blob-permalink-url, .js-blob-blame-link'),\n );\n\n const fileBlobPermalinkUrlElement = document.querySelector('.js-data-file-blob-permalink-url');\n const fileBlobPermalinkUrl =\n fileBlobPermalinkUrlElement && fileBlobPermalinkUrlElement.getAttribute('href');\n\n new ShortcutsNavigation(); // eslint-disable-line no-new\n\n // eslint-disable-next-line no-new\n new ShortcutsBlob({\n skipResetBindings: true,\n fileBlobPermalinkUrl,\n });\n\n new BlobForkSuggestion({\n openButtons: document.querySelectorAll('.js-edit-blob-link-fork-toggler'),\n forkButtons: document.querySelectorAll('.js-fork-suggestion-button'),\n cancelButtons: document.querySelectorAll('.js-cancel-fork-suggestion-button'),\n suggestionSections: document.querySelectorAll('.js-file-fork-suggestion-section'),\n actionTextPieces: document.querySelectorAll('.js-file-fork-suggestion-section-action'),\n }).init();\n\n initBlobBundle();\n};\n"],"sourceRoot":""}