{"version":3,"sources":["webpack:///./new_commit_form.js","webpack:///./pager.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:///./blob/viewer/index.js","webpack:///./activities.js","webpack:///./gpg_badges.js","webpack:///./notifications_form.js","webpack:///./notifications_dropdown.js","webpack:///./user_callout.js","webpack:///./lib/utils/constants.js","webpack:///./tree.js","webpack:///./star.js","webpack:///./pages/projects/show/index.js","webpack:///./read_more.js"],"names":["NewCommitForm","form","_classCallCheck","this","renderDestination","bind","branchName","find","originalBranch","createMergeRequest","createMergeRequestContainer","keyup","different","val","show","wasDifferent","prop","hide","__webpack_exports__","init","limit","arguments","length","undefined","preload","disable","prepareData","jquery__WEBPACK_IMPORTED_MODULE_0___default","a","noop","callback","url","data","Object","_lib_utils_url_utility__WEBPACK_IMPORTED_MODULE_3__","offset","parseInt","_lib_utils_common_utils__WEBPACK_IMPORTED_MODULE_1__","loading","first","getOld","initLoadMore","_this","_lib_utils_axios_utils__WEBPACK_IMPORTED_MODULE_2__","get","params","then","_ref","append","count","html","isScrollable","catch","$w","window","document","height","scrollTop","_this2","off","endlessScroll","bottomPixels","fireDelay","fireOnce","ceaseFire","is","FileTemplateSelector","mediator","$dropdown","$wrapper","cfg","config","jquery_default","dropdown","wrapper","$loadingIcon","$dropdownToggleText","initDropdown","removeClass","addClass","hasClass","text","options","query","e","preventDefault","selectTemplateFile","opts","selectedObj","name","reportSelection","FileTemplateTypeSelector","dropdownData","type_selector_classCallCheck","_possibleConstructorReturn","__proto__","getPrototypeOf","call","file_template_selector","glDropdown","filterable","selectable","toggleLabel","item","clicked","selectTemplateTypeOptions","BlobCiYamlSelector","ci_yaml_selector_classCallCheck","ci_yaml_selector_possibleConstructorReturn","key","pattern","endpoint","api","gitlabCiYml","search","fields","reportSelectionName","DockerfileSelector","dockerfile_selector_classCallCheck","dockerfile_selector_possibleConstructorReturn","dockerfileYml","BlobGitignoreSelector","gitignore_selector_classCallCheck","gitignore_selector_possibleConstructorReturn","gitignoreText","BlobLicenseSelector","license_selector_classCallCheck","license_selector_possibleConstructorReturn","licenseText","el","$el","project","fullname","id","FileTemplateMediator","editor","currentAction","file_template_mediator_classCallCheck","initTemplateSelectors","initTemplateTypeSelector","initDomElements","initDropdowns","initPageEvents","templateSelectors","gitignore_selector","ci_yaml_selector","dockerfile_selector","license_selector","map","TemplateSelectorClass","typeSelector","type_selector","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","file","showUndoMenu","setEditorContent","setFilename","renderLoaded","err","flash","_this6","currentInput","getFilename","test","apiCall","Promise","resolve","resolveFile","newValue","content","setValue","focus","navigateFileStart","_this7","restoreFromCache","cacheFileContents","cachedToggleText","getTemplateSelectorToggleText","cachedContent","cachedFilename","setTemplateSelectorToggleText","getToggleText","trigger","selected","EditBlob","assetsPath","aceMode","edit_blob_classCallCheck","configureAceEditor","initModePanesAndLinks","initSoftWrap","initFileSelectors","ace","set","loadModule","edit","$blockScrolling","Infinity","getSession","setMode","fileTemplateMediator","file_template_mediator","$editModePanes","$editModeLinks","editModeLinkClickHandler","currentLink","paneId","attr","currentPane","filter","parent","fadeIn","$toggleButton","axios_utils","post","empty","renderGFM","locale","isSoftWrapped","toggleSoftWrap","toggleClass","setUseWrapMode","toggleLoading","$icon","constants","enable","dropzone_default","autoDiscover","BlobFileDropzone","method","blob_file_dropzone_classCallCheck","formDropzone","submitButton","submitButtonLoadingIcon","dropzoneMessage","dropzone","autoProcessQueue","clickable","uploadMultiple","paramName","maxFilesize","gon","max_file_size","parallelUploads","maxFiles","addRemoveLinks","previewsContainer","headers","csrf","header","response","modal","url_utility","filePath","removeFile","xhr","formData","error","errorMessage","stripped","stopPropagation","getQueuedFiles","alert","processQueue","editBlobForm","uploadBlobForm","deleteBlobForm","urlRoot","blobLanguage","edit_blob","new_commit_form","blob_file_dropzone","gl","utils","disableButtonIfEmptyField","BlobViewer","initAuxiliaryViewer","initRichViewer","initMainViewers","$fileHolder","switcher","querySelector","switcherBtns","querySelectorAll","copySourceBtn","simpleViewer","richViewer","initBindings","switchToInitialViewer","initialViewerName","getAttribute","location","indexOf","switchToViewer","Array","from","addEventListener","switchViewHandler","classList","contains","blur","currentTarget","setAttribute","remove","activeViewer","add","tooltip","newViewer","oldButton","newButton","oldViewer","toggleCopyButtonState","loadViewer","viewer","_lib_utils_common_utils__WEBPACK_IMPORTED_MODULE_2__","_flash__WEBPACK_IMPORTED_MODULE_1__","auxiliaryViewer","dataset","richType","initViewer","promise","module","default","all","__webpack_require__","viewerParam","_lib_utils_axios_utils__WEBPACK_IMPORTED_MODULE_3__","innerHTML","Activities","_pager__WEBPACK_IMPORTED_MODULE_2__","updateTooltips","toggleFilter","reloadActivities","_lib_utils_datetime_utility__WEBPACK_IMPORTED_MODULE_3__","sender","$sender","js_cookie__WEBPACK_IMPORTED_MODULE_1___default","closest","GpgBadges","tag","badges","displayError","_flash__WEBPACK_IMPORTED_MODULE_3__","_locale__WEBPACK_IMPORTED_MODULE_4__","reject","Error","serialize","signatures","signature","commit_sha","replaceWith","NotificationsForm","toggleCheckbox","initEventListeners","$checkbox","$parent","saveEvent","parents","showCheckboxLoadingSpinner","saved","setTimeout","_locale__WEBPACK_IMPORTED_MODULE_1__","notificationsDropdown","notificationLevel","UserCallout","className","userCalloutBody","$","cookieName","isCalloutDismissed","dismissCallout","$currentTarget","setCalloutPerProject","expires","path","BYTES_IN_KIB","HIDDEN_CLASS","TreeView","initKeyNav","$clickedEl","metaKey","which","open","_lib_utils_url_utility__WEBPACK_IMPORTED_MODULE_1__","li","liSelected","keydown","next","eq","prev","last","Star","$this","$starSpan","$startIcon","isStarred","star_count","prepend","common_utils","triggerSelector","triggerEls","triggerEl","targetEl","previousElementSibling","once","initReadMore","star","notifications_dropdown","shortcuts_navigation","notifications_form","user_callout","treeSlider","tree","blob_bundle","activities","waitForImages","logsPath","gpg_badges","fetch"],"mappings":"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","file":"pages.projects.show.17b27c77.chunk.js","sourcesContent":["/* 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(\n '.js-create-merge-request-container',\n );\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 $ from 'jquery';\nimport { getParameterByName } from '~/lib/utils/common_utils';\nimport axios from './lib/utils/axios_utils';\nimport { removeParams } from './lib/utils/url_utility';\n\nconst ENDLESS_SCROLL_BOTTOM_PX = 400;\nconst ENDLESS_SCROLL_FIRE_DELAY_MS = 1000;\n\nexport default {\n init(limit = 0, preload = false, disable = false, prepareData = $.noop, callback = $.noop) {\n this.url = $('.content_list').data('href') || removeParams(['limit', 'offset']);\n this.limit = limit;\n this.offset = parseInt(getParameterByName('offset'), 10) || this.limit;\n this.disable = disable;\n this.prepareData = prepareData;\n this.callback = callback;\n this.loading = $('.loading').first();\n if (preload) {\n this.offset = 0;\n this.getOld();\n }\n this.initLoadMore();\n },\n\n getOld() {\n this.loading.show();\n axios.get(this.url, {\n params: {\n limit: this.limit,\n offset: this.offset,\n },\n }).then(({ data }) => {\n this.append(data.count, this.prepareData(data.html));\n this.callback();\n\n // keep loading until we've filled the viewport height\n if (!this.disable && !this.isScrollable()) {\n this.getOld();\n } else {\n this.loading.hide();\n }\n }).catch(() => this.loading.hide());\n },\n\n append(count, html) {\n $('.content_list').append(html);\n if (count > 0) {\n this.offset += count;\n } else {\n this.disable = true;\n }\n },\n\n isScrollable() {\n const $w = $(window);\n return $(document).height() > $w.height() + $w.scrollTop() + ENDLESS_SCROLL_BOTTOM_PX;\n },\n\n initLoadMore() {\n $(document).off('scroll');\n $(document).endlessScroll({\n bottomPixels: ENDLESS_SCROLL_BOTTOM_PX,\n fireDelay: ENDLESS_SCROLL_FIRE_DELAY_MS,\n fireOnce: true,\n ceaseFire: () => this.disable === true,\n callback: () => {\n if (!this.loading.is(':visible')) {\n this.loading.show();\n this.getOld();\n }\n },\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\n .addClass('fa-spinner fa-spin')\n .removeClass('fa-chevron-down');\n }\n\n renderLoaded() {\n this.$loadingIcon\n .addClass('fa-chevron-down')\n .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}\n","import Api from '../../api';\n\nimport 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 endpoint: Api.gitlabCiYml,\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 Api from '../../api';\n\nimport 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 endpoint: Api.dockerfileYml,\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 Api from '../../api';\n\nimport 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 endpoint: Api.gitignoreText,\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 Api from '../../api';\n\nimport 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 endpoint: Api.licenseText,\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","/* eslint-disable class-methods-use-this */\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 }) {\n this.editor = editor;\n this.currentAction = currentAction;\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\n .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 already there\n this.destroyUndoMenu();\n this.fetchFileTemplate(selector.config.endpoint, 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(apiCall, query, data) {\n return new Promise((resolve) => {\n const resolveFile = file => resolve(file);\n\n if (!data) {\n apiCall(query, resolveFile);\n } else {\n apiCall(query, data, resolveFile);\n }\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';\n\nexport default class EditBlob {\n constructor(assetsPath, aceMode, currentAction) {\n this.configureAceEditor(aceMode, assetsPath);\n this.initModePanesAndLinks();\n this.initSoftWrap();\n this.initFileSelectors(currentAction);\n }\n\n configureAceEditor(aceMode, assetsPath) {\n ace.config.set('modePath', `${assetsPath}/ace`);\n ace.config.loadModule('ace/ext/searchbox');\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 (aceMode) {\n this.editor.getSession().setMode(`ace/mode/${aceMode}`);\n }\n }\n\n initFileSelectors(currentAction) {\n this.fileTemplateMediator = new TemplateSelectorMediator({\n currentAction,\n editor: this.editor,\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.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').html('').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 = $('
').html(errorMessage).text();\n $('.dropzone-alerts').html(`Error uploading file: \"${stripped}\"`).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 blobLanguage = editBlobForm.data('blobLanguage');\n const currentAction = $('.js-file-title').data('currentAction');\n\n new EditBlob(`${urlRoot}${assetsPath}`, blobLanguage, currentAction);\n new NewCommitForm(editBlobForm);\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 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 => 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)\n .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', '复制源码到剪贴板');\n this.copySourceBtn.classList.remove('disabled');\n } else if (this.activeViewer === this.simpleViewer) {\n this.copySourceBtn.setAttribute('title', '等待源码加载以将其复制到剪贴板');\n this.copySourceBtn.classList.add('disabled');\n } else {\n this.copySourceBtn.setAttribute('title', '切换到源码以将其复制到剪贴板');\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)\n .then(({ data }) => {\n viewer.innerHTML = data.html;\n viewer.setAttribute('data-loaded', 'true');\n\n return viewer;\n });\n }\n}\n","/* eslint-disable class-methods-use-this */\n\nimport $ from 'jquery';\nimport Cookies from 'js-cookie';\nimport Pager from './pager';\nimport { localTimeAgo } from './lib/utils/datetime_utility';\n\nexport default class Activities {\n constructor() {\n Pager.init(20, true, false, data => data, this.updateTooltips);\n\n $('.event-filter-link').on('click', (e) => {\n e.preventDefault();\n this.toggleFilter(e.currentTarget);\n this.reloadActivities();\n });\n }\n\n updateTooltips() {\n localTimeAgo($('.js-timeago', '.content_list'));\n }\n\n reloadActivities() {\n $('.content_list').html('');\n Pager.init(20, true, false, data => data, this.updateTooltips);\n }\n\n toggleFilter(sender) {\n const $sender = $(sender);\n const filter = $sender.attr('id').split('_')[0];\n\n $('.event-filter .active').removeClass('active');\n Cookies.set('event_filter', filter);\n\n $sender.closest('li').toggleClass('active');\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 $ from 'jquery';\nimport { __ } from './locale';\nimport axios from './lib/utils/axios_utils';\nimport flash from './flash';\n\nexport default class NotificationsForm {\n constructor() {\n this.toggleCheckbox = this.toggleCheckbox.bind(this);\n this.initEventListeners();\n }\n\n initEventListeners() {\n $(document).on('change', '.js-custom-notification-event', this.toggleCheckbox);\n }\n\n toggleCheckbox(e) {\n const $checkbox = $(e.currentTarget);\n const $parent = $checkbox.closest('.form-check');\n\n this.saveEvent($checkbox, $parent);\n }\n\n // eslint-disable-next-line class-methods-use-this\n showCheckboxLoadingSpinner($parent) {\n $parent.addClass('is-loading')\n .find('.custom-notification-event-loading')\n .removeClass('fa-check')\n .addClass('fa-spin fa-spinner')\n .removeClass('is-done');\n }\n\n saveEvent($checkbox, $parent) {\n const form = $parent.parents('form:first');\n\n this.showCheckboxLoadingSpinner($parent);\n\n axios[form.attr('method')](form.attr('action'), form.serialize())\n .then(({ data }) => {\n $checkbox.enable();\n if (data.saved) {\n $parent.find('.custom-notification-event-loading').toggleClass('fa-spin fa-spinner fa-check is-done');\n setTimeout(() => {\n $parent.removeClass('is-loading')\n .find('.custom-notification-event-loading')\n .toggleClass('fa-spin fa-spinner fa-check is-done');\n }, 2000);\n }\n })\n .catch(() => flash(__('There was an error saving your notification settings.')));\n }\n}\n","import $ from 'jquery';\nimport Flash from './flash';\n\nexport default function notificationsDropdown() {\n $(document).on('click', '.update-notification', function updateNotificationCallback(e) {\n e.preventDefault();\n if ($(this).is('.is-active') && $(this).data('notificationLevel') === 'custom') {\n return;\n }\n\n const notificationLevel = $(this).data('notificationLevel');\n const form = $(this).parents('.notification-form:first');\n\n form.find('.js-notification-loading').toggleClass('fa-bell fa-spin fa-spinner');\n form.find('#notification_setting_level').val(notificationLevel);\n form.submit();\n });\n\n $(document).on('ajax:success', '.notification-form', (e, data) => {\n if (data.saved) {\n $(e.currentTarget).closest('.js-notification-dropdown').replaceWith(data.html);\n } else {\n Flash('Failed to save new settings', 'alert');\n }\n });\n}\n","import $ from 'jquery';\nimport Cookies from 'js-cookie';\n\nexport default class UserCallout {\n constructor(options = {}) {\n this.options = options;\n\n const className = this.options.className || 'user-callout';\n\n this.userCalloutBody = $(`.${className}`);\n this.cookieName = this.userCalloutBody.data('uid');\n this.isCalloutDismissed = Cookies.get(this.cookieName);\n this.init();\n }\n\n init() {\n if (!this.isCalloutDismissed || this.isCalloutDismissed === 'false') {\n this.userCalloutBody.find('.js-close-callout').on('click', e => this.dismissCallout(e));\n }\n }\n\n dismissCallout(e) {\n const $currentTarget = $(e.currentTarget);\n\n if (this.options.setCalloutPerProject) {\n Cookies.set(this.cookieName, 'true', {\n expires: 365,\n path: this.userCalloutBody.data('projectPath'),\n });\n } else {\n Cookies.set(this.cookieName, 'true', { expires: 365 });\n }\n\n if ($currentTarget.hasClass('close') || $currentTarget.hasClass('js-close')) {\n this.userCalloutBody.remove();\n }\n }\n}\n","export const BYTES_IN_KIB = 1024;\nexport const HIDDEN_CLASS = 'hidden';\n","/* eslint-disable func-names, max-len, quotes, consistent-return, no-var, one-var, one-var-declaration-per-line, no-else-return, prefer-arrow-callback, class-methods-use-this */\n\nimport $ from 'jquery';\nimport { visitUrl } from './lib/utils/url_utility';\n\nexport default class TreeView {\n constructor() {\n this.initKeyNav();\n // Code browser tree slider\n // Make the entire tree-item row clickable, but not if clicking another link (like a commit message)\n $(\".tree-content-holder .tree-item\").on('click', function(e) {\n var $clickedEl, path;\n $clickedEl = $(e.target);\n path = $('.tree-item-file-name a', this).attr('href');\n if (!$clickedEl.is('a') && !$clickedEl.is('.str-truncated')) {\n if (e.metaKey || e.which === 2) {\n e.preventDefault();\n return window.open(path, '_blank');\n } else {\n return visitUrl(path);\n }\n }\n });\n // Show the \"Loading commit data\" for only the first element\n $('span.log_loading:first').removeClass('hide');\n }\n\n initKeyNav() {\n var li, liSelected;\n li = $(\"tr.tree-item\");\n liSelected = null;\n return $('body').keydown(function(e) {\n var next, path;\n if ($(\"input:focus\").length > 0 && (e.which === 38 || e.which === 40)) {\n return false;\n }\n if (e.which === 40) {\n if (liSelected) {\n next = liSelected.next();\n if (next.length > 0) {\n liSelected.removeClass(\"selected\");\n liSelected = next.addClass(\"selected\");\n }\n } else {\n liSelected = li.eq(0).addClass(\"selected\");\n }\n return $(liSelected).focus();\n } else if (e.which === 38) {\n if (liSelected) {\n next = liSelected.prev();\n if (next.length > 0) {\n liSelected.removeClass(\"selected\");\n liSelected = next.addClass(\"selected\");\n }\n } else {\n liSelected = li.last().addClass(\"selected\");\n }\n return $(liSelected).focus();\n } else if (e.which === 13) {\n path = $('.tree-item.selected .tree-item-file-name a').attr('href');\n if (path) {\n return visitUrl(path);\n }\n }\n });\n }\n}\n","import $ from 'jquery';\nimport Flash from './flash';\nimport { __, s__ } from './locale';\nimport { spriteIcon } from './lib/utils/common_utils';\nimport axios from './lib/utils/axios_utils';\n\nexport default class Star {\n constructor() {\n $('.project-home-panel .toggle-star').on('click', function toggleStarClickCallback() {\n const $this = $(this);\n const $starSpan = $this.find('span');\n const $startIcon = $this.find('svg');\n\n axios.post($this.data('endpoint'))\n .then(({ data }) => {\n const isStarred = $starSpan.hasClass('starred');\n $this.parent().find('.star-count').text(data.star_count);\n\n if (isStarred) {\n $starSpan.removeClass('starred').text(s__('StarProject|Star'));\n $startIcon.remove();\n $this.prepend(spriteIcon('star-o'));\n } else {\n $starSpan.addClass('starred').text(__('Unstar'));\n $startIcon.remove();\n $this.prepend(spriteIcon('star'));\n }\n })\n .catch(() => Flash('Star toggle failed. Try again later.'));\n });\n }\n}\n","import $ from 'jquery';\nimport initBlob from '~/blob_edit/blob_bundle';\nimport ShortcutsNavigation from '~/shortcuts_navigation';\nimport NotificationsForm from '~/notifications_form';\nimport UserCallout from '~/user_callout';\nimport TreeView from '~/tree';\nimport BlobViewer from '~/blob/viewer/index';\nimport Activities from '~/activities';\nimport { ajaxGet } from '~/lib/utils/common_utils';\nimport GpgBadges from '~/gpg_badges';\nimport initReadMore from '~/read_more';\nimport Star from '../../../star';\nimport notificationsDropdown from '../../../notifications_dropdown';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n initReadMore();\n new Star(); // eslint-disable-line no-new\n notificationsDropdown();\n new ShortcutsNavigation(); // eslint-disable-line no-new\n new NotificationsForm(); // eslint-disable-line no-new\n // eslint-disable-next-line no-new\n new UserCallout({\n setCalloutPerProject: false,\n className: 'js-autodevops-banner',\n });\n\n // Project show page loads different overview content based on user preferences\n const treeSlider = document.querySelector('#tree-slider');\n if (treeSlider) {\n new TreeView(); // eslint-disable-line no-new\n initBlob();\n }\n\n if (document.querySelector('.blob-viewer')) {\n new BlobViewer(); // eslint-disable-line no-new\n }\n\n if (document.querySelector('.project-show-activity')) {\n new Activities(); // eslint-disable-line no-new\n }\n\n $(treeSlider).waitForImages(() => {\n ajaxGet(document.querySelector('.js-tree-content').dataset.logsPath);\n });\n\n GpgBadges.fetch();\n});\n","/**\n * ReadMore\n *\n * Adds \"read more\" functionality to elements.\n *\n * Specifically, it looks for a trigger, by default \".js-read-more-trigger\", and adds the class\n * \"is-expanded\" to the previous element in order to provide a click to expand functionality.\n *\n * This is useful for long text elements that you would like to truncate, especially for mobile.\n *\n * Example Markup\n *Some text that should be long enough to have to truncate within a specified container.
\n *This text will not appear in the container, as only the first line can be truncated.
\n *This should also not appear, if everything is working correctly!
\n *