{"version":3,"sources":["webpack:///./lib/utils/poll.js","webpack:///./new_commit_form.js","webpack:///./pages/projects/blob/show/index.js","webpack:////builds/gitlab/gitlabhq/node_modules/visibilityjs/lib/visibility.timers.js","webpack:////builds/gitlab/gitlabhq/node_modules/visibilityjs/lib/visibility.core.js","webpack:///./lib/utils/ace_utils.js","webpack:///./blob/viewer/index.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:///./gpg_badges.js","webpack:///./behaviors/shortcuts/shortcuts_navigation.js","webpack:///./project_select_combo_button.js","webpack:///./project_select.js","webpack:///./pages/projects/project.js","webpack:///./line_highlighter.js","webpack:///./blob/blob_fork_suggestion.js","webpack:///./projects/tree/components/commit_pipeline_status_component.vue?1e58","webpack:///./projects/tree/services/commit_pipeline_service.js","webpack:///./projects/tree/components/commit_pipeline_status_component.vue?8852","webpack:///projects/tree/components/commit_pipeline_status_component.vue","webpack:///./projects/tree/components/commit_pipeline_status_component.vue","webpack:///./vue_shared/directives/tooltip.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","webpack:////builds/gitlab/gitlabhq/node_modules/visibilityjs/index.js","webpack:///./lib/utils/http_status.js","webpack:///./vue_shared/components/ci_icon.vue?89ed","webpack:///vue_shared/components/ci_icon.vue","webpack:///./vue_shared/components/ci_icon.vue?1dcc","webpack:///./vue_shared/components/ci_icon.vue"],"names":["Poll","options","arguments","length","undefined","_classCallCheck","this","data","notificationCallback","intervalHeader","timeoutID","canPoll","response","_this","headers","normalizeHeaders","pollInterval","parseInt","successCodes","indexOf","status","clearTimeout","setTimeout","makeRequest","successCallback","_this2","_this$options","resource","method","errorCallback","then","checkConditions","catch","error","httpStatusCodes","ABORTED","enable","NewCommitForm","form","renderDestination","bind","branchName","find","originalBranch","createMergeRequest","createMergeRequestContainer","keyup","different","val","show","wasDifferent","prop","hide","__webpack_require__","r","__webpack_exports__","vue__WEBPACK_IMPORTED_MODULE_0__","_projects_tree_components_commit_pipeline_status_component_vue__WEBPACK_IMPORTED_MODULE_1__","_blob_viewer_index__WEBPACK_IMPORTED_MODULE_2__","_pages_projects_init_blob__WEBPACK_IMPORTED_MODULE_3__","_gpg_badges__WEBPACK_IMPORTED_MODULE_4__","document","addEventListener","BlobViewer","initBlob","CommitPipelineStatusEl","querySelector","statusLink","remove","Vue","el","components","commitPipelineStatus","render","createElement","props","endpoint","dataset","GpgBadges","fetch","window","lastTimer","install","Visibility","every","interval","hiddenInterval","callback","_time","number","_timers","visible","hidden","_run","isSupported","_listen","stop","id","_stop","_timed","_wasHidden","change","_stopRun","runNow","timer","runner","last","Date","call","delay","setInterval","clearInterval","event","isHidden","wasHidden","i","module","exports","global","lastId","self","onVisible","support","listener","e","state","unbind","_callbacks","afterPrerendering","_doc","webkitHidden","visibilityState","webkitVisibilityState","_change","_init","apply","attachEvent","getModeByFileExtension","path","ace","require","getModeForPath","mode","d","initAuxiliaryViewer","initRichViewer","initMainViewers","auxiliaryViewer","loadViewer","viewer","richType","initViewer","promise","default","Flash","Promise","all","viewerParam","url","getAttribute","resolve","setAttribute","axios","get","_ref","innerHTML","html","$fileHolder","$","switcher","switcherBtns","querySelectorAll","copySourceBtn","simpleViewer","richViewer","initBindings","switchToInitialViewer","initialViewerName","location","hash","switchToViewer","Array","from","forEach","switchViewHandler","classList","contains","blur","target","currentTarget","preventDefault","activeViewer","add","tooltip","name","newViewer","concat","oldButton","newButton","oldViewer","toggleCopyButtonState","renderGFM","trigger","handleLocationHash","FileTemplateSelector","mediator","$dropdown","$wrapper","cfg","config","dropdown","wrapper","$loadingIcon","$dropdownToggleText","initDropdown","init","removeClass","addClass","hasClass","text","query","selectTemplateFile","opts","selectedObj","reportSelection","FileTemplateTypeSelector","dropdownData","type_selector_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","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","project","fullname","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","href","split","showTemplateSelectorMenu","selector","setToggleText","cacheToggleText","selectTemplateType","_this5","renderLoading","destroyUndoMenu","fetchFileTemplate","file","showUndoMenu","setEditorContent","setFilename","renderLoaded","err","_this6","currentInput","getFilename","test","_this7","Api","projectTemplate","newValue","content","setValue","focus","navigateFileStart","_this8","restoreFromCache","cacheFileContents","off","cachedToggleText","getTemplateSelectorToggleText","cachedContent","cachedFilename","setTemplateSelectorToggleText","getToggleText","selected","EditBlob","edit_blob_classCallCheck","configureAceEditor","initModePanesAndLinks","initSoftWrap","initFileSelectors","filePath","assetsPath","isMarkdown","set","loadModule","edit","addEditorMarkdownListeners","$blockScrolling","Infinity","getSession","setMode","_this$options2","fileTemplateMediator","TemplateSelectorMediator","$editModePanes","$editModeLinks","editModeLinkClickHandler","currentLink","paneId","attr","currentPane","filter","parent","fadeIn","$toggleButton","post","empty","append","createFlash","__","isSoftWrapped","toggleSoftWrap","toggleClass","setUseWrapMode","toggleLoading","$icon","loading","disable","HIDDEN_CLASS","Dropzone","autoDiscover","BlobFileDropzone","blob_file_dropzone_classCallCheck","formDropzone","submitButton","submitButtonLoadingIcon","dropzoneMessage","dropzone","autoProcessQueue","clickable","uploadMultiple","paramName","maxFilesize","gon","max_file_size","parallelUploads","maxFiles","addRemoveLinks","previewsContainer","csrf","header","modal","visitUrl","removeFile","xhr","formData","errorMessage","stripped","stopPropagation","getQueuedFiles","alert","processQueue","editBlobForm","uploadBlobForm","deleteBlobForm","urlRoot","commitButton","onbeforeunload","gl","utils","disableButtonIfEmptyField","tag","badges","displayError","reject","Error","params","parseQueryStringIntoObject","serialize","signatures","signature","commit_sha","replaceWith","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","t","select2","selectedProjectData","JSON","parse","projectMeta","setNewItemBtnAttributes","setProjectInLocalStorage","cachedProjectData","defaultTextPrefix","presetTextSuffix","projectString","localStorage","getItem","stringify","setItem","slice","projectSelect","each","placeholder","simpleFilter","includeGroups","allProjects","orderBy","withIssuesEnabled","withMergeRequestsEnabled","withShared","includeProjectsInSubgroups","allowClear","minimumInputLength","finalCallback","projectsCallback","projects","results","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","Project","$cloneOptions","$projectCloneField","$cloneBtnLabel","mobileCloneField","selectedCloneOption","trim","$this","cloneType","activeText","$label","closest","clipboardText","initRefSwitcher","parents","Cookies","cookieKey","projectSelectDropdown","changeProject","refListItem","refLink","ref","flash","filterRemote","filterByText","inputFieldName","fieldName","renderRow","li","cloneNode","className","textContent","link","appendChild","obj","$form","$visit","shouldVisit","action","divider","jquery__WEBPACK_IMPORTED_MODULE_0__","jquery__WEBPACK_IMPORTED_MODULE_0___default","n","LineHighlighter","highlightLineClass","fileHolderSelector","scrollFileHolder","_hash","setHash","highlightLine","clickHandler","highlightHash","prototype","newHash","range","clearHighlight","hashToRange","highlightRange","lineSelector","scrollOptions","offset","scrollTo","current","lineNumber","shiftKey","matches","match","reverse","firstLineNumber","lastLineNumber","__setLocationHash__","value","history","pushState","title","defaults","openButtons","forkButtons","cancelButtons","suggestionSections","actionTextPieces","BlobForkSuggestion","elementMap","Object","assign","onOpenButtonClick","onCancelButtonClick","forkPath","showSuggestionSection","hideSuggestionSection","CommitPipelineService","components_commit_pipeline_status_componentvue_type_script_lang_js_","directives","ciIcon","ci_icon","GlLoadingIcon","dist","String","required","ciStatus","isLoading","computed","statusTitle","locale","commitText","mounted","service","commit_pipeline_service_CommitPipelineService","initPolling","methods","res","pipelines","details","icon","group","poll","visibilityjs_default","a","fetchPipelineCommitData","restart","fetchData","destroy","component","componentNormalizer","_h","$createElement","_c","_self","staticClass","attrs","size","label","details_path","rawName","aria-label","data-container","__file","componentUpdated","tooltipInstance","tip","getTipElement","setElementContent","getTitle","_projects_gke_cluster_dropdowns__WEBPACK_IMPORTED_MODULE_0__","_persistent_user_callout__WEBPACK_IMPORTED_MODULE_1__","_project__WEBPACK_IMPORTED_MODULE_2__","_behaviors_shortcuts_shortcuts_navigation__WEBPACK_IMPORTED_MODULE_3__","page","body","callout","PersistentUserCallout","factory","initGkeDropdowns","BYTES_IN_KIB","lineNumberRe","updateLineNumbersOnBlobPermalinks","linksToUpdate","getLocationHash","hashUrlString","permalinkButton","baseHref","BlobLinePermalinkUpdater","blobContentHolder","lineNumberSelector","elementsToUpdate","updateBlameAndBlobPermalinkCb","skipResetBindings","fileBlobPermalinkUrl","ShortcutsBlob","moveToFilePermalink","_assertThisInitialized","fileBlobPermalinkUrlElement","initBlobBundle","OK","CREATED","ACCEPTED","NON_AUTHORITATIVE_INFORMATION","NO_CONTENT","RESET_CONTENT","PARTIAL_CONTENT","MULTI_STATUS","ALREADY_REPORTED","IM_USED","MULTIPLE_CHOICES","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","UNPROCESSABLE_ENTITY","validSizes","components_ci_iconvue_type_script_lang_js_","Icon","Number","validator","includes","borderless","Boolean","cssClasses","cssClass","class","css-classes"],"mappings":"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","file":"pages.projects.blob.show.4658b76c.chunk.js","sourcesContent":["import httpStatusCodes, { successCodes } from './http_status';\nimport { normalizeHeaders } from './common_utils';\n\n/**\n * Polling utility for handling realtime updates.\n * Requirements: Promise based HTTP client\n *\n * Service for promise based http client and method need to be provided as props\n *\n * @example\n * new Poll({\n * resource: resource,\n * method: 'name',\n * data: {page: 1, scope: 'all'}, // optional\n * successCallback: () => {},\n * errorCallback: () => {},\n * notificationCallback: () => {}, // optional\n * }).makeRequest();\n *\n * Usage in pipelines table with visibility lib:\n *\n * const poll = new Poll({\n * resource: this.service,\n * method: 'getPipelines',\n * data: { page: pageNumber, scope },\n * successCallback: this.successCallback,\n * errorCallback: this.errorCallback,\n * notificationCallback: this.updateLoading,\n * });\n *\n * if (!Visibility.hidden()) {\n * poll.makeRequest();\n * }\n *\n * Visibility.change(() => {\n * if (!Visibility.hidden()) {\n * poll.restart();\n * } else {\n * poll.stop();\n * }\n * });\n *\n * 1. Checks for response and headers before start polling\n * 2. Interval is provided by `Poll-Interval` header.\n * 3. If `Poll-Interval` is -1, we stop polling\n * 4. If HTTP response is 200, we poll.\n * 5. If HTTP response is different from 200, we stop polling.\n *\n */\nexport default class Poll {\n constructor(options = {}) {\n this.options = options;\n this.options.data = options.data || {};\n this.options.notificationCallback =\n options.notificationCallback || function notificationCallback() {};\n\n this.intervalHeader = 'POLL-INTERVAL';\n this.timeoutID = null;\n this.canPoll = true;\n }\n\n checkConditions(response) {\n const headers = normalizeHeaders(response.headers);\n const pollInterval = parseInt(headers[this.intervalHeader], 10);\n if (pollInterval > 0 && successCodes.indexOf(response.status) !== -1 && this.canPoll) {\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n }\n\n this.timeoutID = setTimeout(() => {\n this.makeRequest();\n }, pollInterval);\n }\n this.options.successCallback(response);\n }\n\n makeRequest() {\n const { resource, method, data, errorCallback, notificationCallback } = this.options;\n\n // It's called everytime a new request is made. Useful to update the status.\n notificationCallback(true);\n\n return resource[method](data)\n .then(response => {\n this.checkConditions(response);\n notificationCallback(false);\n })\n .catch(error => {\n notificationCallback(false);\n if (error.status === httpStatusCodes.ABORTED) {\n return;\n }\n errorCallback(error);\n });\n }\n\n /**\n * Stops the polling recursive chain\n * and guarantees if the timeout is already running it won't make another request by\n * cancelling the previously established timeout.\n */\n stop() {\n this.canPoll = false;\n clearTimeout(this.timeoutID);\n }\n\n /**\n * Enables polling after it has been stopped\n */\n enable(options) {\n if (options && options.data) {\n this.options.data = options.data;\n }\n\n this.canPoll = true;\n\n if (options && options.response) {\n this.checkConditions(options.response);\n }\n }\n\n /**\n * Restarts polling after it has been stopped and makes a request\n */\n restart(options) {\n this.enable(options);\n this.makeRequest();\n }\n}\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","import Vue from 'vue';\nimport commitPipelineStatus from '~/projects/tree/components/commit_pipeline_status_component.vue';\nimport BlobViewer from '~/blob/viewer/index';\nimport initBlob from '~/pages/projects/init_blob';\nimport GpgBadges from '~/gpg_badges';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n new BlobViewer(); // eslint-disable-line no-new\n initBlob();\n\n const CommitPipelineStatusEl = document.querySelector('.js-commit-pipeline-status');\n const statusLink = document.querySelector('.commit-actions .ci-status-link');\n if (statusLink) {\n statusLink.remove();\n // eslint-disable-next-line no-new\n new Vue({\n el: CommitPipelineStatusEl,\n components: {\n commitPipelineStatus,\n },\n render(createElement) {\n return createElement('commit-pipeline-status', {\n props: {\n endpoint: CommitPipelineStatusEl.dataset.endpoint,\n },\n });\n },\n });\n }\n\n GpgBadges.fetch();\n});\n",";(function (window) {\n \"use strict\";\n\n var lastTimer = -1;\n\n var install = function (Visibility) {\n\n // Run callback every `interval` milliseconds if page is visible and\n // every `hiddenInterval` milliseconds if page is hidden.\n //\n // Visibility.every(60 * 1000, 5 * 60 * 1000, function () {\n // checkNewMails();\n // });\n //\n // You can skip `hiddenInterval` and callback will be called only if\n // page is visible.\n //\n // Visibility.every(1000, function () {\n // updateCountdown();\n // });\n //\n // It is analog of `setInterval(callback, interval)` but use visibility\n // state.\n //\n // It return timer ID, that you can use in `Visibility.stop(id)` to stop\n // timer (`clearInterval` analog).\n // Warning: timer ID is different from interval ID from `setInterval`,\n // so don’t use it in `clearInterval`.\n //\n // On change state from hidden to visible timers will be execute.\n Visibility.every = function (interval, hiddenInterval, callback) {\n Visibility._time();\n\n if ( !callback ) {\n callback = hiddenInterval;\n hiddenInterval = null;\n }\n\n lastTimer += 1;\n var number = lastTimer;\n\n Visibility._timers[number] = {\n visible: interval,\n hidden: hiddenInterval,\n callback: callback\n };\n Visibility._run(number, false);\n\n if ( Visibility.isSupported() ) {\n Visibility._listen();\n }\n return number;\n };\n\n // Stop timer from `every` method by it ID (`every` method return it).\n //\n // slideshow = Visibility.every(5 * 1000, function () {\n // changeSlide();\n // });\n // $('.stopSlideshow').click(function () {\n // Visibility.stop(slideshow);\n // });\n Visibility.stop = function(id) {\n if ( !Visibility._timers[id] ) {\n return false;\n }\n Visibility._stop(id);\n delete Visibility._timers[id];\n return true;\n };\n\n // Callbacks and intervals added by `every` method.\n Visibility._timers = { };\n\n // Initialize variables on page loading.\n Visibility._time = function () {\n if ( Visibility._timed ) {\n return;\n }\n Visibility._timed = true;\n Visibility._wasHidden = Visibility.hidden();\n\n Visibility.change(function () {\n Visibility._stopRun();\n Visibility._wasHidden = Visibility.hidden();\n });\n };\n\n // Try to run timer from every method by it’s ID. It will be use\n // `interval` or `hiddenInterval` depending on visibility state.\n // If page is hidden and `hiddenInterval` is null,\n // it will not run timer.\n //\n // Argument `runNow` say, that timers must be execute now too.\n Visibility._run = function (id, runNow) {\n var interval,\n timer = Visibility._timers[id];\n\n if ( Visibility.hidden() ) {\n if ( null === timer.hidden ) {\n return;\n }\n interval = timer.hidden;\n } else {\n interval = timer.visible;\n }\n\n var runner = function () {\n timer.last = new Date();\n timer.callback.call(window);\n }\n\n if ( runNow ) {\n var now = new Date();\n var last = now - timer.last ;\n\n if ( interval > last ) {\n timer.delay = setTimeout(function () {\n timer.id = setInterval(runner, interval);\n runner();\n }, interval - last);\n } else {\n timer.id = setInterval(runner, interval);\n runner();\n }\n\n } else {\n timer.id = setInterval(runner, interval);\n }\n };\n\n // Stop timer from `every` method by it’s ID.\n Visibility._stop = function (id) {\n var timer = Visibility._timers[id];\n clearInterval(timer.id);\n clearTimeout(timer.delay);\n delete timer.id;\n delete timer.delay;\n };\n\n // Listener for `visibilitychange` event.\n Visibility._stopRun = function (event) {\n var isHidden = Visibility.hidden(),\n wasHidden = Visibility._wasHidden;\n\n if ( (isHidden && !wasHidden) || (!isHidden && wasHidden) ) {\n for ( var i in Visibility._timers ) {\n Visibility._stop(i);\n Visibility._run(i, !isHidden);\n }\n }\n };\n\n return Visibility;\n }\n\n if ( typeof(module) != 'undefined' && module.exports ) {\n module.exports = install(require('./visibility.core'));\n } else {\n install(window.Visibility)\n }\n\n})(window);\n",";(function (global) {\n \"use strict\";\n\n var lastId = -1;\n\n // Visibility.js allow you to know, that your web page is in the background\n // tab and thus not visible to the user. This library is wrap under\n // Page Visibility API. It fix problems with different vendor prefixes and\n // add high-level useful functions.\n var self = {\n\n // Call callback only when page become to visible for user or\n // call it now if page is visible now or Page Visibility API\n // doesn’t supported.\n //\n // Return false if API isn’t supported, true if page is already visible\n // or listener ID (you can use it in `unbind` method) if page isn’t\n // visible now.\n //\n // Visibility.onVisible(function () {\n // startIntroAnimation();\n // });\n onVisible: function (callback) {\n var support = self.isSupported();\n if ( !support || !self.hidden() ) {\n callback();\n return support;\n }\n\n var listener = self.change(function (e, state) {\n if ( !self.hidden() ) {\n self.unbind(listener);\n callback();\n }\n });\n return listener;\n },\n\n // Call callback when visibility will be changed. First argument for\n // callback will be original event object, second will be visibility\n // state name.\n //\n // Return listener ID to unbind listener by `unbind` method.\n //\n // If Page Visibility API doesn’t supported method will be return false\n // and callback never will be called.\n //\n // Visibility.change(function(e, state) {\n // Statistics.visibilityChange(state);\n // });\n //\n // It is just proxy to `visibilitychange` event, but use vendor prefix.\n change: function (callback) {\n if ( !self.isSupported() ) {\n return false;\n }\n lastId += 1;\n var number = lastId;\n self._callbacks[number] = callback;\n self._listen();\n return number;\n },\n\n // Remove `change` listener by it ID.\n //\n // var id = Visibility.change(function(e, state) {\n // firstChangeCallback();\n // Visibility.unbind(id);\n // });\n unbind: function (id) {\n delete self._callbacks[id];\n },\n\n // Call `callback` in any state, expect “prerender”. If current state\n // is “prerender” it will wait until state will be changed.\n // If Page Visibility API doesn’t supported, it will call `callback`\n // immediately.\n //\n // Return false if API isn’t supported, true if page is already after\n // prerendering or listener ID (you can use it in `unbind` method)\n // if page is prerended now.\n //\n // Visibility.afterPrerendering(function () {\n // Statistics.countVisitor();\n // });\n afterPrerendering: function (callback) {\n var support = self.isSupported();\n var prerender = 'prerender';\n\n if ( !support || prerender != self.state() ) {\n callback();\n return support;\n }\n\n var listener = self.change(function (e, state) {\n if ( prerender != state ) {\n self.unbind(listener);\n callback();\n }\n });\n return listener;\n },\n\n // Return true if page now isn’t visible to user.\n //\n // if ( !Visibility.hidden() ) {\n // VideoPlayer.play();\n // }\n //\n // It is just proxy to `document.hidden`, but use vendor prefix.\n hidden: function () {\n return !!(self._doc.hidden || self._doc.webkitHidden);\n },\n\n // Return visibility state: 'visible', 'hidden' or 'prerender'.\n //\n // if ( 'prerender' == Visibility.state() ) {\n // Statistics.pageIsPrerendering();\n // }\n //\n // Don’t use `Visibility.state()` to detect, is page visible, because\n // visibility states can extend in next API versions.\n // Use more simpler and general `Visibility.hidden()` for this cases.\n //\n // It is just proxy to `document.visibilityState`, but use\n // vendor prefix.\n state: function () {\n return self._doc.visibilityState ||\n self._doc.webkitVisibilityState ||\n 'visible';\n },\n\n // Return true if browser support Page Visibility API.\n //\n // if ( Visibility.isSupported() ) {\n // Statistics.startTrackingVisibility();\n // Visibility.change(function(e, state)) {\n // Statistics.trackVisibility(state);\n // });\n // }\n isSupported: function () {\n return !!(self._doc.visibilityState ||\n self._doc.webkitVisibilityState);\n },\n\n // Link to document object to change it in tests.\n _doc: document || {},\n\n // Callbacks from `change` method, that wait visibility changes.\n _callbacks: { },\n\n // Listener for `visibilitychange` event.\n _change: function(event) {\n var state = self.state();\n\n for ( var i in self._callbacks ) {\n self._callbacks[i].call(self._doc, event, state);\n }\n },\n\n // Set listener for `visibilitychange` event.\n _listen: function () {\n if ( self._init ) {\n return;\n }\n\n var event = 'visibilitychange';\n if ( self._doc.webkitVisibilityState ) {\n event = 'webkit' + event;\n }\n\n var listener = function () {\n self._change.apply(self, arguments);\n };\n if ( self._doc.addEventListener ) {\n self._doc.addEventListener(event, listener);\n } else {\n self._doc.attachEvent(event, listener);\n }\n self._init = true;\n }\n\n };\n\n if ( typeof(module) != 'undefined' && module.exports ) {\n module.exports = self;\n } else {\n global.Visibility = self;\n }\n\n})(this);\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';\nimport Flash from '../../flash';\nimport { handleLocationHash } from '../../lib/utils/common_utils';\nimport axios from '../../lib/utils/axios_utils';\n\nexport default class BlobViewer {\n constructor() {\n BlobViewer.initAuxiliaryViewer();\n BlobViewer.initRichViewer();\n\n this.initMainViewers();\n }\n\n static initAuxiliaryViewer() {\n const auxiliaryViewer = document.querySelector('.blob-viewer[data-type=\"auxiliary\"]');\n if (!auxiliaryViewer) return;\n\n BlobViewer.loadViewer(auxiliaryViewer);\n }\n\n static initRichViewer() {\n const viewer = document.querySelector('.blob-viewer[data-type=\"rich\"]');\n if (!viewer || !viewer.dataset.richType) return;\n\n const initViewer = promise =>\n promise\n .then(module => module.default(viewer))\n .catch(error => {\n Flash('Error loading file viewer.');\n throw error;\n });\n\n switch (viewer.dataset.richType) {\n case 'balsamiq':\n initViewer(import(/* webpackChunkName: 'balsamiq_viewer' */ '../balsamiq_viewer'));\n break;\n case 'notebook':\n initViewer(import(/* webpackChunkName: 'notebook_viewer' */ '../notebook_viewer'));\n break;\n case 'pdf':\n initViewer(import(/* webpackChunkName: 'pdf_viewer' */ '../pdf_viewer'));\n break;\n case 'sketch':\n initViewer(import(/* webpackChunkName: 'sketch_viewer' */ '../sketch_viewer'));\n break;\n case 'stl':\n initViewer(import(/* webpackChunkName: 'stl_viewer' */ '../stl_viewer'));\n break;\n default:\n break;\n }\n }\n\n initMainViewers() {\n this.$fileHolder = $('.file-holder');\n if (!this.$fileHolder.length) return;\n\n this.switcher = document.querySelector('.js-blob-viewer-switcher');\n this.switcherBtns = document.querySelectorAll('.js-blob-viewer-switch-btn');\n this.copySourceBtn = document.querySelector('.js-copy-blob-source-btn');\n\n this.simpleViewer = this.$fileHolder[0].querySelector('.blob-viewer[data-type=\"simple\"]');\n this.richViewer = this.$fileHolder[0].querySelector('.blob-viewer[data-type=\"rich\"]');\n\n this.initBindings();\n\n this.switchToInitialViewer();\n }\n\n switchToInitialViewer() {\n const initialViewer = this.$fileHolder[0].querySelector('.blob-viewer:not(.hidden)');\n let initialViewerName = initialViewer.getAttribute('data-type');\n\n if (this.switcher && window.location.hash.indexOf('#L') === 0) {\n initialViewerName = 'simple';\n }\n\n this.switchToViewer(initialViewerName);\n }\n\n initBindings() {\n if (this.switcherBtns.length) {\n Array.from(this.switcherBtns).forEach(el => {\n el.addEventListener('click', this.switchViewHandler.bind(this));\n });\n }\n\n if (this.copySourceBtn) {\n this.copySourceBtn.addEventListener('click', () => {\n if (this.copySourceBtn.classList.contains('disabled')) return this.copySourceBtn.blur();\n\n return this.switchToViewer('simple');\n });\n }\n }\n\n switchViewHandler(e) {\n const target = e.currentTarget;\n\n e.preventDefault();\n\n this.switchToViewer(target.getAttribute('data-viewer'));\n }\n\n toggleCopyButtonState() {\n if (!this.copySourceBtn) return;\n\n if (this.simpleViewer.getAttribute('data-loaded')) {\n this.copySourceBtn.setAttribute('title', 'Copy source to clipboard');\n this.copySourceBtn.classList.remove('disabled');\n } else if (this.activeViewer === this.simpleViewer) {\n this.copySourceBtn.setAttribute(\n 'title',\n 'Wait for the source to load to copy it to the clipboard',\n );\n this.copySourceBtn.classList.add('disabled');\n } else {\n this.copySourceBtn.setAttribute('title', 'Switch to the source to copy it to the clipboard');\n this.copySourceBtn.classList.add('disabled');\n }\n\n $(this.copySourceBtn).tooltip('_fixTitle');\n }\n\n switchToViewer(name) {\n const newViewer = this.$fileHolder[0].querySelector(`.blob-viewer[data-type='${name}']`);\n if (this.activeViewer === newViewer) return;\n\n const oldButton = document.querySelector('.js-blob-viewer-switch-btn.active');\n const newButton = document.querySelector(`.js-blob-viewer-switch-btn[data-viewer='${name}']`);\n const oldViewer = this.$fileHolder[0].querySelector(`.blob-viewer:not([data-type='${name}'])`);\n\n if (oldButton) {\n oldButton.classList.remove('active');\n }\n\n if (newButton) {\n newButton.classList.add('active');\n newButton.blur();\n }\n\n if (oldViewer) {\n oldViewer.classList.add('hidden');\n }\n\n newViewer.classList.remove('hidden');\n\n this.activeViewer = newViewer;\n\n this.toggleCopyButtonState();\n\n BlobViewer.loadViewer(newViewer)\n .then(viewer => {\n $(viewer).renderGFM();\n\n this.$fileHolder.trigger('highlight:line');\n handleLocationHash();\n\n this.toggleCopyButtonState();\n })\n .catch(() => new Flash('Error loading viewer'));\n }\n\n static loadViewer(viewerParam) {\n const viewer = viewerParam;\n const url = viewer.getAttribute('data-url');\n\n if (!url || viewer.getAttribute('data-loaded') || viewer.getAttribute('data-loading')) {\n return Promise.resolve(viewer);\n }\n\n viewer.setAttribute('data-loading', 'true');\n\n return axios.get(url).then(({ data }) => {\n viewer.innerHTML = data.html;\n viewer.setAttribute('data-loaded', 'true');\n\n return viewer;\n });\n }\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';\nimport { addEditorMarkdownListeners } from '~/lib/utils/text_markdown';\n\nexport default class EditBlob {\n // The options object has:\n // assetsPath, filePath, currentAction, projectId, isMarkdown\n constructor(options) {\n this.options = options;\n this.configureAceEditor();\n this.initModePanesAndLinks();\n this.initSoftWrap();\n this.initFileSelectors();\n }\n\n configureAceEditor() {\n const { filePath, assetsPath, isMarkdown } = this.options;\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 if (isMarkdown) {\n addEditorMarkdownListeners(this.editor);\n }\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() {\n const { currentAction, projectId } = this.options;\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 isMarkdown = editBlobForm.data('is-markdown');\n const commitButton = $('.js-commit-button');\n const cancelLink = $('.btn.btn-cancel');\n\n cancelLink.on('click', () => {\n window.onbeforeunload = null;\n });\n\n commitButton.on('click', () => {\n window.onbeforeunload = null;\n });\n\n new EditBlob({\n assetsPath: `${urlRoot}${assetsPath}`,\n filePath,\n currentAction,\n projectId,\n isMarkdown,\n });\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 $ from 'jquery';\nimport { parseQueryStringIntoObject } from '~/lib/utils/common_utils';\nimport axios from '~/lib/utils/axios_utils';\nimport createFlash from '~/flash';\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-gpg-badge');\n\n badges.html('');\n\n const displayError = () => createFlash(__('An error occurred while loading commit signatures'));\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 = parseQueryStringIntoObject(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 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 r', () => findAndFollowLink('.shortcuts-project-releases'));\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 import(/* webpackChunkName: 'select2' */ 'select2/select2')\n .then(() => {\n $(event.currentTarget)\n .siblings('.project-item-select')\n .select2('open');\n })\n .catch(() => {});\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 import(/* webpackChunkName: 'select2' */ 'select2/select2')\n .then(() => {\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 .catch(() => {});\n}\n","/* eslint-disable func-names, no-var, no-return-assign, one-var, object-shorthand, vars-on-top */\n\nimport $ from 'jquery';\nimport Cookies from 'js-cookie';\nimport { __ } from '~/locale';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport axios from '~/lib/utils/axios_utils';\nimport flash from '~/flash';\nimport projectSelect from '../../project_select';\n\nexport default class Project {\n constructor() {\n const $cloneOptions = $('ul.clone-options-dropdown');\n const $projectCloneField = $('#project_clone');\n const $cloneBtnLabel = $('.js-git-clone-holder .js-clone-dropdown-label');\n const mobileCloneField = document.querySelector(\n '.js-mobile-git-clone .js-clone-dropdown-label',\n );\n\n const selectedCloneOption = $cloneBtnLabel.text().trim();\n if (selectedCloneOption.length > 0) {\n $(`a:contains('${selectedCloneOption}')`, $cloneOptions).addClass('is-active');\n }\n\n $('a', $cloneOptions).on('click', e => {\n e.preventDefault();\n const $this = $(e.currentTarget);\n const url = $this.attr('href');\n const cloneType = $this.data('cloneType');\n\n $('.is-active', $cloneOptions).removeClass('is-active');\n $(`a[data-clone-type=\"${cloneType}\"]`).each(function() {\n const $el = $(this);\n const activeText = $el.find('.dropdown-menu-inner-title').text();\n const $container = $el.closest('.project-clone-holder');\n const $label = $container.find('.js-clone-dropdown-label');\n\n $el.toggleClass('is-active');\n $label.text(activeText);\n });\n\n if (mobileCloneField) {\n mobileCloneField.dataset.clipboardText = url;\n } else {\n $projectCloneField.val(url);\n }\n $('.js-git-empty .js-clone').text(url);\n });\n // Ref switcher\n Project.initRefSwitcher();\n $('.project-refs-select').on('change', function() {\n return $(this)\n .parents('form')\n .submit();\n });\n $('.hide-no-ssh-message').on('click', function(e) {\n Cookies.set('hide_no_ssh_message', 'false');\n $(this)\n .parents('.no-ssh-key-message')\n .remove();\n return e.preventDefault();\n });\n $('.hide-no-password-message').on('click', function(e) {\n Cookies.set('hide_no_password_message', 'false');\n $(this)\n .parents('.no-password-message')\n .remove();\n return e.preventDefault();\n });\n $('.hide-auto-devops-implicitly-enabled-banner').on('click', function(e) {\n const projectId = $(this).data('project-id');\n const cookieKey = `hide_auto_devops_implicitly_enabled_banner_${projectId}`;\n Cookies.set(cookieKey, 'false');\n $(this)\n .parents('.auto-devops-implicitly-enabled-banner')\n .remove();\n return e.preventDefault();\n });\n Project.projectSelectDropdown();\n }\n\n static projectSelectDropdown() {\n projectSelect();\n $('.project-item-select').on('click', e => Project.changeProject($(e.currentTarget).val()));\n }\n\n static changeProject(url) {\n return (window.location = url);\n }\n\n static initRefSwitcher() {\n var refListItem = document.createElement('li');\n var refLink = document.createElement('a');\n\n refLink.href = '#';\n\n return $('.js-project-refs-dropdown').each(function() {\n var $dropdown, selected;\n $dropdown = $(this);\n selected = $dropdown.data('selected');\n return $dropdown.glDropdown({\n data(term, callback) {\n axios\n .get($dropdown.data('refsUrl'), {\n params: {\n ref: $dropdown.data('ref'),\n search: term,\n },\n })\n .then(({ data }) => callback(data))\n .catch(() => flash(__('An error occurred while getting projects')));\n },\n selectable: true,\n filterable: true,\n filterRemote: true,\n filterByText: true,\n inputFieldName: $dropdown.data('inputFieldName'),\n fieldName: $dropdown.data('fieldName'),\n renderRow: function(ref) {\n var li = refListItem.cloneNode(false);\n\n if (ref.header != null) {\n li.className = 'dropdown-header';\n li.textContent = ref.header;\n } else {\n var link = refLink.cloneNode(false);\n\n if (ref === selected) {\n link.className = 'is-active';\n }\n\n link.textContent = ref;\n link.dataset.ref = ref;\n\n li.appendChild(link);\n }\n\n return li;\n },\n id: function(obj, $el) {\n return $el.attr('data-ref');\n },\n toggleLabel: function(obj, $el) {\n return $el.text().trim();\n },\n clicked: function(options) {\n const { e } = options;\n e.preventDefault();\n if ($('input[name=\"ref\"]').length) {\n var $form = $dropdown.closest('form');\n\n var $visit = $dropdown.data('visit');\n var shouldVisit = $visit ? true : $visit;\n var action = $form.attr('action');\n var divider = action.indexOf('?') === -1 ? '?' : '&';\n if (shouldVisit) {\n visitUrl(`${action}${divider}${$form.serialize()}`);\n }\n }\n },\n });\n });\n }\n}\n","/* 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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"ci-status-link\"},[(_vm.isLoading)?_c('gl-loading-icon',{attrs:{\"size\":3,\"label\":\"Loading pipeline status\"}}):_c('a',{attrs:{\"href\":_vm.ciStatus.details_path}},[_c('ci-icon',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\"}],attrs:{\"title\":_vm.statusTitle,\"aria-label\":_vm.statusTitle,\"status\":_vm.ciStatus,\"size\":24,\"data-container\":\"body\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from '~/lib/utils/axios_utils';\n\nexport default class CommitPipelineService {\n constructor(endpoint) {\n this.endpoint = endpoint;\n }\n\n fetchData() {\n return axios.get(this.endpoint);\n }\n}\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??ref--1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./commit_pipeline_status_component.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??ref--1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./commit_pipeline_status_component.vue?vue&type=script&lang=js&\"","\n\n","import { render, staticRenderFns } from \"./commit_pipeline_status_component.vue?vue&type=template&id=5df4d4d5&\"\nimport script from \"./commit_pipeline_status_component.vue?vue&type=script&lang=js&\"\nexport * from \"./commit_pipeline_status_component.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"commit_pipeline_status_component.vue\"\nexport default component.exports","import $ from 'jquery';\n\nexport default {\n bind(el) {\n $(el).tooltip({\n trigger: 'hover',\n });\n },\n\n componentUpdated(el) {\n $(el).tooltip('_fixTitle');\n\n // update visible tooltips\n const tooltipInstance = $(el).data('bs.tooltip');\n const tip = tooltipInstance.getTipElement();\n tooltipInstance.setElementContent(\n $(tip.querySelectorAll('.tooltip-inner')),\n tooltipInstance.getTitle(),\n );\n },\n\n unbind(el) {\n $(el).tooltip('dispose');\n },\n};\n","import initGkeDropdowns from '~/projects/gke_cluster_dropdowns';\nimport PersistentUserCallout from '../../persistent_user_callout';\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 const callout = document.querySelector('.gcp-signup-offer');\n PersistentUserCallout.factory(callout);\n\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","module.exports = require('./lib/visibility.timers.js')\n","/**\n * exports HTTP status codes\n */\n\nconst httpStatusCodes = {\n ABORTED: 0,\n OK: 200,\n CREATED: 201,\n ACCEPTED: 202,\n NON_AUTHORITATIVE_INFORMATION: 203,\n NO_CONTENT: 204,\n RESET_CONTENT: 205,\n PARTIAL_CONTENT: 206,\n MULTI_STATUS: 207,\n ALREADY_REPORTED: 208,\n IM_USED: 226,\n MULTIPLE_CHOICES: 300,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n UNPROCESSABLE_ENTITY: 422,\n};\n\nexport const successCodes = [\n httpStatusCodes.OK,\n httpStatusCodes.CREATED,\n httpStatusCodes.ACCEPTED,\n httpStatusCodes.NON_AUTHORITATIVE_INFORMATION,\n httpStatusCodes.NO_CONTENT,\n httpStatusCodes.RESET_CONTENT,\n httpStatusCodes.PARTIAL_CONTENT,\n httpStatusCodes.MULTI_STATUS,\n httpStatusCodes.ALREADY_REPORTED,\n httpStatusCodes.IM_USED,\n];\n\nexport default httpStatusCodes;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{class:_vm.cssClass},[_c('icon',{attrs:{\"name\":_vm.icon,\"size\":_vm.size,\"css-classes\":_vm.cssClasses}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ci_icon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ci_icon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ci_icon.vue?vue&type=template&id=0a2f2b13&\"\nimport script from \"./ci_icon.vue?vue&type=script&lang=js&\"\nexport * from \"./ci_icon.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"ci_icon.vue\"\nexport default component.exports"],"sourceRoot":""}