{"version":3,"sources":["webpack:////builds/gitlab/gitlabhq/node_modules/mousetrap/plugins/pause/mousetrap-pause.js","webpack:///./behaviors/shortcuts/shortcuts_wiki.js","webpack:///./pages/projects/wikis/wikis.js","webpack:///./pages/projects/wikis/components/delete_wiki_modal.vue?2e21","webpack:///pages/projects/wikis/components/delete_wiki_modal.vue","webpack:///./pages/projects/wikis/components/delete_wiki_modal.vue","webpack:///./pages/projects/wikis/components/delete_wiki_modal.vue?6e53","webpack:///./pages/projects/wikis/index.js","webpack:///./behaviors/shortcuts/shortcuts_navigation.js","webpack:///./project_select_combo_button.js","webpack:///./project_select.js","webpack:///./pages/projects/project.js","webpack:///./pages/projects/index.js","webpack:///./dropzone_input.js","webpack:///./lib/utils/text_markdown.js","webpack:///./gl_form.js","webpack:///./zen_mode.js"],"names":["Mousetrap","self","_originalStopCallback","stopCallback","enabled","e","element","combo","pause","unpause","ShortcutsWiki","_this","_classCallCheck","this","_possibleConstructorReturn","_getPrototypeOf","call","bind","editWiki","ShortcutsNavigation","findAndFollowLink","Wikis","wikis_classCallCheck","sidebarEl","document","querySelector","sidebarExpanded","sidebarToggles","querySelectorAll","i","length","addEventListener","handleToggleSidebar","newWikiForm","handleNewWikiSubmit","window","renderSidebar","bp","getBreakpointSize","slugInput","slug","value","wikisPath","getAttribute","params","parseQueryStringIntoObject","location","search","substr","url","mergeUrlParams","concat","redirectTo","preventDefault","classList","sidebarCanCollapse","contains","remove","add","components_delete_wiki_modalvue_type_script_lang_js_","components","GlModal","dist","directives","gl-modal","props","deleteWikiUrl","type","String","required","default","pageTitle","csrfToken","computed","modalId","message","Object","locale","title","underscore_default","a","escape","methods","onSubmit","$refs","form","submit","component","componentNormalizer","_vm","_h","$createElement","_c","_self","staticClass","name","rawName","expression","attrs","_v","_s","__","ok-title","s__","modal-id","title-tag","ok-variant","on","ok","ref","action","method","domProps","options","__file","delete_wiki_modal","ZenMode","GLForm","$","deleteWikiModalWrapperEl","getElementById","Vue","use","Translate","_deleteWikiModalWrapp","dataset","el","data","render","createElement","deleteWikiModal","csrf","token","enabledHelp","push","Shortcuts","ProjectSelectComboButton","select","projectSelectInput","newItemBtn","resourceType","resourceLabel","formattedText","deriveTextVariants","groupId","bindEvents","initLocalStorage","siblings","openDropdown","getProjectFromLocalStorage","selectProject","AccessorUtilities","isLocalStorageAccessSafe","localStorageKey","localStorageItemType","join","setBtnTextFromLocalStorage","event","currentTarget","select2","selectedProjectData","JSON","parse","val","projectMeta","setNewItemBtnAttributes","setProjectInLocalStorage","cachedProjectData","project","attr","text","defaultTextPrefix","presetTextSuffix","projectString","localStorage","getItem","stringify","setItem","split","slice","projectSelect","each","placeholder","simpleFilter","includeGroups","allProjects","orderBy","withIssuesEnabled","withMergeRequestsEnabled","withShared","undefined","includeProjectsInSubgroups","allowClear","minimumInputLength","query","finalCallback","projectsCallback","projects","results","callback","groupsCallback","groups","Api","term","groupProjects","with_issues_enabled","with_merge_requests_enabled","with_shared","include_subgroups","order_by","membership","id","web_url","name_with_namespace","initSelection","then","_ref","dropdownCssClass","__webpack_require__","d","__webpack_exports__","Project","$cloneOptions","$projectCloneField","$cloneBtnLabel","mobileCloneField","selectedCloneOption","trim","addClass","$this","cloneType","removeClass","$el","activeText","find","$label","closest","toggleClass","clipboardText","initRefSwitcher","parents","Cookies","set","projectId","cookieKey","projectSelectDropdown","changeProject","refListItem","refLink","href","$dropdown","selected","glDropdown","axios","get","catch","flash","selectable","filterable","filterRemote","filterByText","inputFieldName","fieldName","renderRow","li","cloneNode","header","className","textContent","link","appendChild","obj","toggleLabel","clicked","$form","$visit","shouldVisit","divider","indexOf","visitUrl","serialize","r","_dismissable_callout__WEBPACK_IMPORTED_MODULE_0__","_projects_gke_cluster_dropdowns__WEBPACK_IMPORTED_MODULE_1__","_project__WEBPACK_IMPORTED_MODULE_2__","_behaviors_shortcuts_shortcuts_navigation__WEBPACK_IMPORTED_MODULE_3__","page","body","initDismissableCallout","initGkeDropdowns","dropzoneInput","handlePaste","pasteText","addFileToForm","updateAttachingMessage","isImage","getFilename","uploadFile","$attachButton","$attachingFileMessage","$cancelButton","$retryLink","$uploadProgress","$uploadingErrorContainer","$uploadingErrorMessage","$uploadingProgressContainer","uploadsPath","uploads_path","maxFileSize","gon","max_file_size","formTextarea","wrap","$mdArea","setupMarkdownPreview","$formDropzone","parent","append","dropzone","dictDefaultMessage","clickable","paramName","maxFilesize","uploadMultiple","headers","previewContainer","processing","alert","dragover","css","dragleave","drop","focus","success","response","processingFileCount","getQueuedFiles","getUploadingFiles","shouldPad","markdown","error","file","res","errorMessage","arguments","xhr","responseText","_","isString","html","totaluploadprogress","totalUploadProgress","files","Math","round","sending","removedfile","queuecomplete","trigger","child","children","stopPropagation","Dropzone","forElement","removeAllFiles","dropzoneInstance","target","failedFiles","map","failedFile","status","ERROR","accepted","addFile","pasteEvent","originalEvent","clipboardData","items","image","filename","getAsFile","item","textarea","caretStart","selectionStart","caretEnd","selectionEnd","textEnd","beforeSelection","substring","afterSelection","setSelectionRange","style","height","scrollHeight","dispatchEvent","Event","path","getData","closeSpinner","formData","FormData","post","md","$child","index","replace","insertToTextArea","messageContainer","attachingMessage","filesCount","filter","click","autoDiscover","LINK_TAG_PATTERN","updateText","_ref3","$textArea","textArea","tag","cursorOffset","blockTag","tagContent","selectedText","_ref2","textToInsert","selectedSplit","startChar","removedLastNewLine","removedFirstNewLine","currentLineEmpty","lastNewLine","_ref2$selected","URL","lastIndexOf","test","before","lineBefore","after","lineAfter","blockTagText","insertText","pos","positionBetweenTags","startPosition","endPosition","moveCursor","insertMarkdownText","enableGFM","assign","GFMConfig","dataSources","gl","GfmAutoComplete","keys","forEach","destroy","setupForm","clearEventListeners","autoComplete","isNewForm","is","utils","disableButtonIfEmptyField","setup","autosize","addEventListeners","off","hide","show","isAutosizeable","setupAutosize","_this2","setHeightData","destroyAutosize","setTimeout","outerHeight","active_backdrop","active_textarea","enter","exit","keyCode","backdrop","removeAttr","scrollTo","$dropzone","hasClass","enable","zen_area","offset"],"mappings":"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","file":"pages.projects.wikis.f94ec19a.chunk.js","sourcesContent":["/**\n * adds a pause and unpause method to Mousetrap\n * this allows you to enable or disable keyboard shortcuts\n * without having to reset Mousetrap and rebind everything\n */\n/* global Mousetrap:true */\nMousetrap = (function(Mousetrap) {\n var self = Mousetrap,\n _originalStopCallback = self.stopCallback,\n enabled = true;\n\n self.stopCallback = function(e, element, combo) {\n if (!enabled) {\n return true;\n }\n\n return _originalStopCallback(e, element, combo);\n };\n\n self.pause = function() {\n enabled = false;\n };\n\n self.unpause = function() {\n enabled = true;\n };\n\n return self;\n}) (Mousetrap);\n","import Mousetrap from 'mousetrap';\nimport ShortcutsNavigation from './shortcuts_navigation';\nimport findAndFollowLink from '../../lib/utils/navigation_utility';\n\nexport default class ShortcutsWiki extends ShortcutsNavigation {\n constructor() {\n super();\n Mousetrap.bind('e', ShortcutsWiki.editWiki);\n }\n\n static editWiki() {\n findAndFollowLink('.js-wiki-edit');\n }\n}\n","import bp from '../../../breakpoints';\nimport { parseQueryStringIntoObject } from '../../../lib/utils/common_utils';\nimport { mergeUrlParams, redirectTo } from '../../../lib/utils/url_utility';\n\nexport default class Wikis {\n constructor() {\n this.sidebarEl = document.querySelector('.js-wiki-sidebar');\n this.sidebarExpanded = false;\n\n const sidebarToggles = document.querySelectorAll('.js-sidebar-wiki-toggle');\n for (let i = 0; i < sidebarToggles.length; i += 1) {\n sidebarToggles[i].addEventListener('click', e => this.handleToggleSidebar(e));\n }\n\n this.newWikiForm = document.querySelector('form.new-wiki-page');\n if (this.newWikiForm) {\n this.newWikiForm.addEventListener('submit', e => this.handleNewWikiSubmit(e));\n }\n\n window.addEventListener('resize', () => this.renderSidebar());\n this.renderSidebar();\n }\n\n handleNewWikiSubmit(e) {\n if (!this.newWikiForm) return;\n\n const slugInput = this.newWikiForm.querySelector('#new_wiki_path');\n\n const slug = slugInput.value;\n\n if (slug.length > 0) {\n const wikisPath = slugInput.getAttribute('data-wikis-path');\n\n // If the wiki is empty, we need to merge the current URL params to keep the \"create\" view.\n const params = parseQueryStringIntoObject(window.location.search.substr(1));\n const url = mergeUrlParams(params, `${wikisPath}/${slug}`);\n redirectTo(url);\n\n e.preventDefault();\n }\n }\n\n handleToggleSidebar(e) {\n e.preventDefault();\n this.sidebarExpanded = !this.sidebarExpanded;\n this.renderSidebar();\n }\n\n static sidebarCanCollapse() {\n const bootstrapBreakpoint = bp.getBreakpointSize();\n return bootstrapBreakpoint === 'xs';\n }\n\n renderSidebar() {\n if (!this.sidebarEl) return;\n const { classList } = this.sidebarEl;\n if (this.sidebarExpanded || !Wikis.sidebarCanCollapse()) {\n if (!classList.contains('right-sidebar-expanded')) {\n classList.remove('right-sidebar-collapsed');\n classList.add('right-sidebar-expanded');\n }\n } else if (classList.contains('right-sidebar-expanded')) {\n classList.add('right-sidebar-collapsed');\n classList.remove('right-sidebar-expanded');\n }\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!./delete_wiki_modal.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!./delete_wiki_modal.vue?vue&type=script&lang=js&\"","\n\n\n","import { render, staticRenderFns } from \"./delete_wiki_modal.vue?vue&type=template&id=600605c2&\"\nimport script from \"./delete_wiki_modal.vue?vue&type=script&lang=js&\"\nexport * from \"./delete_wiki_modal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"delete_wiki_modal.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-inline-block\"},[_c('button',{directives:[{name:\"gl-modal\",rawName:\"v-gl-modal\",value:(_vm.modalId),expression:\"modalId\"}],staticClass:\"btn btn-danger\",attrs:{\"type\":\"button\"}},[_vm._v(_vm._s(_vm.__('Delete')))]),_vm._v(\" \"),_c('gl-modal',{attrs:{\"title\":_vm.title,\"ok-title\":_vm.s__('WikiPageConfirmDelete|Delete page'),\"modal-id\":_vm.modalId,\"title-tag\":\"h4\",\"ok-variant\":\"danger\"},on:{\"ok\":_vm.onSubmit}},[_vm._v(\"\\n \"+_vm._s(_vm.message)+\"\\n \"),_c('form',{ref:\"form\",staticClass:\"js-requires-input\",attrs:{\"action\":_vm.deleteWikiUrl,\"method\":\"post\"}},[_c('input',{ref:\"method\",attrs:{\"type\":\"hidden\",\"name\":\"_method\",\"value\":\"delete\"}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"authenticity_token\"},domProps:{\"value\":_vm.csrfToken}})])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import $ from 'jquery';\nimport Vue from 'vue';\nimport Translate from '~/vue_shared/translate';\nimport csrf from '~/lib/utils/csrf';\nimport ShortcutsWiki from '~/behaviors/shortcuts/shortcuts_wiki';\nimport Wikis from './wikis';\nimport ZenMode from '../../../zen_mode';\nimport GLForm from '../../../gl_form';\nimport deleteWikiModal from './components/delete_wiki_modal.vue';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n new Wikis(); // eslint-disable-line no-new\n new ShortcutsWiki(); // eslint-disable-line no-new\n new ZenMode(); // eslint-disable-line no-new\n new GLForm($('.wiki-form')); // eslint-disable-line no-new\n\n const deleteWikiModalWrapperEl = document.getElementById('delete-wiki-modal-wrapper');\n\n if (deleteWikiModalWrapperEl) {\n Vue.use(Translate);\n\n const { deleteWikiUrl, pageTitle } = deleteWikiModalWrapperEl.dataset;\n\n // eslint-disable-next-line no-new\n new Vue({\n el: deleteWikiModalWrapperEl,\n data: {\n deleteWikiUrl: '',\n },\n render(createElement) {\n return createElement(deleteWikiModal, {\n props: {\n pageTitle,\n deleteWikiUrl,\n csrfToken: csrf.token,\n },\n });\n },\n });\n }\n});\n","import Mousetrap from 'mousetrap';\nimport findAndFollowLink from '../../lib/utils/navigation_utility';\nimport Shortcuts from './shortcuts';\n\nexport default class ShortcutsNavigation extends Shortcuts {\n constructor() {\n super();\n\n Mousetrap.bind('g p', () => findAndFollowLink('.shortcuts-project'));\n Mousetrap.bind('g v', () => findAndFollowLink('.shortcuts-project-activity'));\n Mousetrap.bind('g f', () => findAndFollowLink('.shortcuts-tree'));\n Mousetrap.bind('g c', () => findAndFollowLink('.shortcuts-commits'));\n Mousetrap.bind('g j', () => findAndFollowLink('.shortcuts-builds'));\n Mousetrap.bind('g n', () => findAndFollowLink('.shortcuts-network'));\n Mousetrap.bind('g d', () => findAndFollowLink('.shortcuts-repository-charts'));\n Mousetrap.bind('g i', () => findAndFollowLink('.shortcuts-issues'));\n Mousetrap.bind('g b', () => findAndFollowLink('.shortcuts-issue-boards'));\n Mousetrap.bind('g m', () => findAndFollowLink('.shortcuts-merge_requests'));\n Mousetrap.bind('g w', () => findAndFollowLink('.shortcuts-wiki'));\n Mousetrap.bind('g s', () => findAndFollowLink('.shortcuts-snippets'));\n Mousetrap.bind('g k', () => findAndFollowLink('.shortcuts-kubernetes'));\n Mousetrap.bind('g e', () => findAndFollowLink('.shortcuts-environments'));\n Mousetrap.bind('g l', () => findAndFollowLink('.shortcuts-metrics'));\n Mousetrap.bind('i', () => findAndFollowLink('.shortcuts-new-issue'));\n\n this.enabledHelp.push('.hidden-shortcut.project');\n }\n}\n","import $ from 'jquery';\nimport AccessorUtilities from './lib/utils/accessor';\n\nexport default class ProjectSelectComboButton {\n constructor(select) {\n this.projectSelectInput = $(select);\n this.newItemBtn = $('.new-project-item-link');\n this.resourceType = this.newItemBtn.data('type');\n this.resourceLabel = this.newItemBtn.data('label');\n this.formattedText = this.deriveTextVariants();\n this.groupId = this.projectSelectInput.data('groupId');\n this.bindEvents();\n this.initLocalStorage();\n }\n\n bindEvents() {\n this.projectSelectInput\n .siblings('.new-project-item-select-button')\n .on('click', e => this.openDropdown(e));\n\n this.newItemBtn.on('click', e => {\n if (!this.getProjectFromLocalStorage()) {\n e.preventDefault();\n this.openDropdown(e);\n }\n });\n\n this.projectSelectInput.on('change', () => this.selectProject());\n }\n\n initLocalStorage() {\n const localStorageIsSafe = AccessorUtilities.isLocalStorageAccessSafe();\n\n if (localStorageIsSafe) {\n this.localStorageKey = [\n 'group',\n this.groupId,\n this.formattedText.localStorageItemType,\n 'recent-project',\n ].join('-');\n this.setBtnTextFromLocalStorage();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n openDropdown(event) {\n $(event.currentTarget)\n .siblings('.project-item-select')\n .select2('open');\n }\n\n selectProject() {\n const selectedProjectData = JSON.parse(this.projectSelectInput.val());\n const projectUrl = `${selectedProjectData.url}/${this.projectSelectInput.data('relativePath')}`;\n const projectName = selectedProjectData.name;\n\n const projectMeta = {\n url: projectUrl,\n name: projectName,\n };\n\n this.setNewItemBtnAttributes(projectMeta);\n this.setProjectInLocalStorage(projectMeta);\n }\n\n setBtnTextFromLocalStorage() {\n const cachedProjectData = this.getProjectFromLocalStorage();\n\n this.setNewItemBtnAttributes(cachedProjectData);\n }\n\n setNewItemBtnAttributes(project) {\n if (project) {\n this.newItemBtn.attr('href', project.url);\n this.newItemBtn.text(`${this.formattedText.defaultTextPrefix} in ${project.name}`);\n } else {\n this.newItemBtn.text(`Select project to create ${this.formattedText.presetTextSuffix}`);\n }\n }\n\n getProjectFromLocalStorage() {\n const projectString = localStorage.getItem(this.localStorageKey);\n\n return JSON.parse(projectString);\n }\n\n setProjectInLocalStorage(projectMeta) {\n const projectString = JSON.stringify(projectMeta);\n\n localStorage.setItem(this.localStorageKey, projectString);\n }\n\n deriveTextVariants() {\n const defaultTextPrefix = this.resourceLabel;\n\n // the trailing slice call depluralizes each of these strings (e.g. new-issues -> new-issue)\n const localStorageItemType = `new-${this.resourceType\n .split('_')\n .join('-')\n .slice(0, -1)}`;\n const presetTextSuffix = this.resourceType\n .split('_')\n .join(' ')\n .slice(0, -1);\n\n return {\n localStorageItemType, // new-issue / new-merge-request\n defaultTextPrefix, // New issue / New merge request\n presetTextSuffix, // issue / merge request\n };\n }\n}\n","/* eslint-disable func-names, no-var, object-shorthand, one-var, no-else-return */\n\nimport $ from 'jquery';\nimport Api from './api';\nimport ProjectSelectComboButton from './project_select_combo_button';\n\nexport default function projectSelect() {\n $('.ajax-project-select').each(function(i, select) {\n var placeholder;\n const simpleFilter = $(select).data('simpleFilter') || false;\n this.groupId = $(select).data('groupId');\n this.includeGroups = $(select).data('includeGroups');\n this.allProjects = $(select).data('allProjects') || false;\n this.orderBy = $(select).data('orderBy') || 'id';\n this.withIssuesEnabled = $(select).data('withIssuesEnabled');\n this.withMergeRequestsEnabled = $(select).data('withMergeRequestsEnabled');\n this.withShared =\n $(select).data('withShared') === undefined ? true : $(select).data('withShared');\n this.includeProjectsInSubgroups = $(select).data('includeProjectsInSubgroups') || false;\n this.allowClear = $(select).data('allowClear') || false;\n\n placeholder = 'Search for project';\n if (this.includeGroups) {\n placeholder += ' or group';\n }\n\n $(select).select2({\n placeholder: placeholder,\n minimumInputLength: 0,\n query: (function(_this) {\n return function(query) {\n var finalCallback, projectsCallback;\n finalCallback = function(projects) {\n var data;\n data = {\n results: projects,\n };\n return query.callback(data);\n };\n if (_this.includeGroups) {\n projectsCallback = function(projects) {\n var groupsCallback;\n groupsCallback = function(groups) {\n var data;\n data = groups.concat(projects);\n return finalCallback(data);\n };\n return Api.groups(query.term, {}, groupsCallback);\n };\n } else {\n projectsCallback = finalCallback;\n }\n if (_this.groupId) {\n return Api.groupProjects(\n _this.groupId,\n query.term,\n {\n with_issues_enabled: _this.withIssuesEnabled,\n with_merge_requests_enabled: _this.withMergeRequestsEnabled,\n with_shared: _this.withShared,\n include_subgroups: _this.includeProjectsInSubgroups,\n },\n projectsCallback,\n );\n } else {\n return Api.projects(\n query.term,\n {\n order_by: _this.orderBy,\n with_issues_enabled: _this.withIssuesEnabled,\n with_merge_requests_enabled: _this.withMergeRequestsEnabled,\n membership: !_this.allProjects,\n },\n projectsCallback,\n );\n }\n };\n })(this),\n id: function(project) {\n if (simpleFilter) return project.id;\n return JSON.stringify({\n name: project.name,\n url: project.web_url,\n });\n },\n text: function(project) {\n return project.name_with_namespace || project.name;\n },\n\n initSelection: function(el, callback) {\n return Api.project(el.val()).then(({ data }) => callback(data));\n },\n\n allowClear: this.allowClear,\n\n dropdownCssClass: 'ajax-project-dropdown',\n });\n if (simpleFilter) return select;\n return new ProjectSelectComboButton(select);\n });\n}\n","/* eslint-disable func-names, no-var, no-return-assign, one-var, object-shorthand, vars-on-top */\n\nimport $ from 'jquery';\nimport Cookies from 'js-cookie';\nimport { __ } from '~/locale';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport axios from '~/lib/utils/axios_utils';\nimport flash from '~/flash';\nimport projectSelect from '../../project_select';\n\nexport default class Project {\n constructor() {\n const $cloneOptions = $('ul.clone-options-dropdown');\n const $projectCloneField = $('#project_clone');\n const $cloneBtnLabel = $('.js-git-clone-holder .js-clone-dropdown-label');\n const mobileCloneField = document.querySelector(\n '.js-mobile-git-clone .js-clone-dropdown-label',\n );\n\n const selectedCloneOption = $cloneBtnLabel.text().trim();\n if (selectedCloneOption.length > 0) {\n $(`a:contains('${selectedCloneOption}')`, $cloneOptions).addClass('is-active');\n }\n\n $('a', $cloneOptions).on('click', e => {\n e.preventDefault();\n const $this = $(e.currentTarget);\n const url = $this.attr('href');\n const cloneType = $this.data('cloneType');\n\n $('.is-active', $cloneOptions).removeClass('is-active');\n $(`a[data-clone-type=\"${cloneType}\"]`).each(function() {\n const $el = $(this);\n const activeText = $el.find('.dropdown-menu-inner-title').text();\n const $container = $el.closest('.project-clone-holder');\n const $label = $container.find('.js-clone-dropdown-label');\n\n $el.toggleClass('is-active');\n $label.text(activeText);\n });\n\n if (mobileCloneField) {\n mobileCloneField.dataset.clipboardText = url;\n } else {\n $projectCloneField.val(url);\n }\n $('.js-git-empty .js-clone').text(url);\n });\n // Ref switcher\n Project.initRefSwitcher();\n $('.project-refs-select').on('change', function() {\n return $(this)\n .parents('form')\n .submit();\n });\n $('.hide-no-ssh-message').on('click', function(e) {\n Cookies.set('hide_no_ssh_message', 'false');\n $(this)\n .parents('.no-ssh-key-message')\n .remove();\n return e.preventDefault();\n });\n $('.hide-no-password-message').on('click', function(e) {\n Cookies.set('hide_no_password_message', 'false');\n $(this)\n .parents('.no-password-message')\n .remove();\n return e.preventDefault();\n });\n $('.hide-auto-devops-implicitly-enabled-banner').on('click', function(e) {\n const projectId = $(this).data('project-id');\n const cookieKey = `hide_auto_devops_implicitly_enabled_banner_${projectId}`;\n Cookies.set(cookieKey, 'false');\n $(this)\n .parents('.auto-devops-implicitly-enabled-banner')\n .remove();\n return e.preventDefault();\n });\n Project.projectSelectDropdown();\n }\n\n static projectSelectDropdown() {\n projectSelect();\n $('.project-item-select').on('click', e => Project.changeProject($(e.currentTarget).val()));\n }\n\n static changeProject(url) {\n return (window.location = url);\n }\n\n static initRefSwitcher() {\n var refListItem = document.createElement('li');\n var refLink = document.createElement('a');\n\n refLink.href = '#';\n\n return $('.js-project-refs-dropdown').each(function() {\n var $dropdown, selected;\n $dropdown = $(this);\n selected = $dropdown.data('selected');\n return $dropdown.glDropdown({\n data(term, callback) {\n axios\n .get($dropdown.data('refsUrl'), {\n params: {\n ref: $dropdown.data('ref'),\n search: term,\n },\n })\n .then(({ data }) => callback(data))\n .catch(() => flash(__('An error occurred while getting projects')));\n },\n selectable: true,\n filterable: true,\n filterRemote: true,\n filterByText: true,\n inputFieldName: $dropdown.data('inputFieldName'),\n fieldName: $dropdown.data('fieldName'),\n renderRow: function(ref) {\n var li = refListItem.cloneNode(false);\n\n if (ref.header != null) {\n li.className = 'dropdown-header';\n li.textContent = ref.header;\n } else {\n var link = refLink.cloneNode(false);\n\n if (ref === selected) {\n link.className = 'is-active';\n }\n\n link.textContent = ref;\n link.dataset.ref = ref;\n\n li.appendChild(link);\n }\n\n return li;\n },\n id: function(obj, $el) {\n return $el.attr('data-ref');\n },\n toggleLabel: function(obj, $el) {\n return $el.text().trim();\n },\n clicked: function(options) {\n const { e } = options;\n e.preventDefault();\n if ($('input[name=\"ref\"]').length) {\n var $form = $dropdown.closest('form');\n\n var $visit = $dropdown.data('visit');\n var shouldVisit = $visit ? true : $visit;\n var action = $form.attr('action');\n var divider = action.indexOf('?') === -1 ? '?' : '&';\n if (shouldVisit) {\n visitUrl(`${action}${divider}${$form.serialize()}`);\n }\n }\n },\n });\n });\n }\n}\n","import initDismissableCallout from '~/dismissable_callout';\nimport initGkeDropdowns from '~/projects/gke_cluster_dropdowns';\nimport Project from './project';\nimport ShortcutsNavigation from '../../behaviors/shortcuts/shortcuts_navigation';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const { page } = document.body.dataset;\n const newClusterViews = [\n 'projects:clusters:new',\n 'projects:clusters:create_gcp',\n 'projects:clusters:create_user',\n ];\n\n if (newClusterViews.indexOf(page) > -1) {\n initDismissableCallout('.gcp-signup-offer');\n initGkeDropdowns();\n }\n\n new Project(); // eslint-disable-line no-new\n new ShortcutsNavigation(); // eslint-disable-line no-new\n});\n","import $ from 'jquery';\nimport Dropzone from 'dropzone';\nimport _ from 'underscore';\nimport './behaviors/preview_markdown';\nimport csrf from './lib/utils/csrf';\nimport axios from './lib/utils/axios_utils';\n\nDropzone.autoDiscover = false;\n\n/**\n * Return the error message string from the given response.\n *\n * @param {String|Object} res\n */\nfunction getErrorMessage(res) {\n if (!res || _.isString(res)) {\n return res;\n }\n\n return res.message;\n}\n\nexport default function dropzoneInput(form) {\n const divHover = '
';\n const iconPaperclip = '';\n const $attachButton = form.find('.button-attach-file');\n const $attachingFileMessage = form.find('.attaching-file-message');\n const $cancelButton = form.find('.button-cancel-uploading-files');\n const $retryLink = form.find('.retry-uploading-link');\n const $uploadProgress = form.find('.uploading-progress');\n const $uploadingErrorContainer = form.find('.uploading-error-container');\n const $uploadingErrorMessage = form.find('.uploading-error-message');\n const $uploadingProgressContainer = form.find('.uploading-progress-container');\n const uploadsPath = form.data('uploads-path') || window.uploads_path || null;\n const maxFileSize = gon.max_file_size || 10;\n const formTextarea = form.find('.js-gfm-input');\n let handlePaste;\n let pasteText;\n let addFileToForm;\n let updateAttachingMessage;\n let isImage;\n let getFilename;\n let uploadFile;\n\n formTextarea.wrap('
');\n formTextarea.on('paste', event => handlePaste(event));\n\n // Add dropzone area to the form.\n const $mdArea = formTextarea.closest('.md-area');\n form.setupMarkdownPreview();\n const $formDropzone = form.find('.div-dropzone');\n $formDropzone.parent().addClass('div-dropzone-wrapper');\n $formDropzone.append(divHover);\n $formDropzone.find('.div-dropzone-hover').append(iconPaperclip);\n\n if (!uploadsPath) {\n $formDropzone.addClass('js-invalid-dropzone');\n return null;\n }\n\n const dropzone = $formDropzone.dropzone({\n url: uploadsPath,\n dictDefaultMessage: '',\n clickable: true,\n paramName: 'file',\n maxFilesize: maxFileSize,\n uploadMultiple: false,\n headers: csrf.headers,\n previewContainer: false,\n processing: () => $('.div-dropzone-alert').alert('close'),\n dragover: () => {\n $mdArea.addClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0.7);\n },\n dragleave: () => {\n $mdArea.removeClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0);\n },\n drop: () => {\n $mdArea.removeClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0);\n formTextarea.focus();\n },\n success(header, response) {\n const processingFileCount = this.getQueuedFiles().length + this.getUploadingFiles().length;\n const shouldPad = processingFileCount >= 1;\n\n pasteText(response.link.markdown, shouldPad);\n // Show 'Attach a file' link only when all files have been uploaded.\n if (!processingFileCount) $attachButton.removeClass('hide');\n addFileToForm(response.link.url);\n },\n error: (file, errorMessage = 'Attaching the file failed.', xhr) => {\n // If 'error' event is fired by dropzone, the second parameter is error message.\n // If the 'errorMessage' parameter is empty, the default error message is set.\n // If the 'error' event is fired by backend (xhr) error response, the third parameter is\n // xhr object (xhr.responseText is error message).\n // On error we hide the 'Attach' and 'Cancel' buttons\n // and show an error.\n const message = getErrorMessage(errorMessage || xhr.responseText);\n\n $uploadingErrorContainer.removeClass('hide');\n $uploadingErrorMessage.html(message);\n $attachButton.addClass('hide');\n $cancelButton.addClass('hide');\n },\n totaluploadprogress(totalUploadProgress) {\n updateAttachingMessage(this.files, $attachingFileMessage);\n $uploadProgress.text(`${Math.round(totalUploadProgress)}%`);\n },\n sending: () => {\n // DOM elements already exist.\n // Instead of dynamically generating them,\n // we just either hide or show them.\n $attachButton.addClass('hide');\n $uploadingErrorContainer.addClass('hide');\n $uploadingProgressContainer.removeClass('hide');\n $cancelButton.removeClass('hide');\n },\n removedfile: () => {\n $attachButton.removeClass('hide');\n $cancelButton.addClass('hide');\n $uploadingProgressContainer.addClass('hide');\n $uploadingErrorContainer.addClass('hide');\n },\n queuecomplete: () => {\n $('.dz-preview').remove();\n $('.markdown-area').trigger('input');\n\n $uploadingProgressContainer.addClass('hide');\n $cancelButton.addClass('hide');\n },\n });\n\n const child = $(dropzone[0]).children('textarea');\n\n // removeAllFiles(true) stops uploading files (if any)\n // and remove them from dropzone files queue.\n $cancelButton.on('click', e => {\n e.preventDefault();\n e.stopPropagation();\n Dropzone.forElement($formDropzone.get(0)).removeAllFiles(true);\n });\n\n // If 'error' event is fired, we store a failed files,\n // clear dropzone files queue, change status of failed files to undefined,\n // and add that files to the dropzone files queue again.\n // addFile() adds file to dropzone files queue and upload it.\n $retryLink.on('click', e => {\n const dropzoneInstance = Dropzone.forElement(\n e.target.closest('.js-main-target-form').querySelector('.div-dropzone'),\n );\n const failedFiles = dropzoneInstance.files;\n\n e.preventDefault();\n\n // 'true' parameter of removeAllFiles() cancels\n // uploading of files that are being uploaded at the moment.\n dropzoneInstance.removeAllFiles(true);\n\n failedFiles.map(failedFile => {\n const file = failedFile;\n\n if (file.status === Dropzone.ERROR) {\n file.status = undefined;\n file.accepted = undefined;\n }\n\n return dropzoneInstance.addFile(file);\n });\n });\n // eslint-disable-next-line consistent-return\n handlePaste = event => {\n const pasteEvent = event.originalEvent;\n if (pasteEvent.clipboardData && pasteEvent.clipboardData.items) {\n const image = isImage(pasteEvent);\n if (image) {\n event.preventDefault();\n const filename = getFilename(pasteEvent) || 'image.png';\n const text = `{{${filename}}}`;\n pasteText(text);\n return uploadFile(image.getAsFile(), filename);\n }\n }\n };\n\n isImage = data => {\n let i = 0;\n while (i < data.clipboardData.items.length) {\n const item = data.clipboardData.items[i];\n if (item.type.indexOf('image') !== -1) {\n return item;\n }\n i += 1;\n }\n return false;\n };\n\n pasteText = (text, shouldPad) => {\n let formattedText = text;\n if (shouldPad) {\n formattedText += '\\n\\n';\n }\n const textarea = child.get(0);\n const caretStart = textarea.selectionStart;\n const caretEnd = textarea.selectionEnd;\n const textEnd = $(child).val().length;\n const beforeSelection = $(child)\n .val()\n .substring(0, caretStart);\n const afterSelection = $(child)\n .val()\n .substring(caretEnd, textEnd);\n $(child).val(beforeSelection + formattedText + afterSelection);\n textarea.setSelectionRange(caretStart + formattedText.length, caretEnd + formattedText.length);\n textarea.style.height = `${textarea.scrollHeight}px`;\n formTextarea.get(0).dispatchEvent(new Event('input'));\n return formTextarea.trigger('input');\n };\n\n addFileToForm = path => {\n $(form).append(``);\n };\n\n getFilename = e => {\n let value;\n if (window.clipboardData && window.clipboardData.getData) {\n value = window.clipboardData.getData('Text');\n } else if (e.clipboardData && e.clipboardData.getData) {\n value = e.clipboardData.getData('text/plain');\n }\n value = value.split('\\r');\n return value[0];\n };\n\n const showSpinner = () => $uploadingProgressContainer.removeClass('hide');\n\n const closeSpinner = () => $uploadingProgressContainer.addClass('hide');\n\n const showError = message => {\n $uploadingErrorContainer.removeClass('hide');\n $uploadingErrorMessage.html(message);\n };\n\n const closeAlertMessage = () => form.find('.div-dropzone-alert').alert('close');\n\n const insertToTextArea = (filename, url) => {\n const $child = $(child);\n $child.val((index, val) => val.replace(`{{${filename}}}`, url));\n\n $child.trigger('change');\n };\n\n uploadFile = (item, filename) => {\n const formData = new FormData();\n formData.append('file', item, filename);\n\n showSpinner();\n closeAlertMessage();\n\n axios\n .post(uploadsPath, formData)\n .then(({ data }) => {\n const md = data.link.markdown;\n\n insertToTextArea(filename, md);\n closeSpinner();\n })\n .catch(e => {\n showError(e.response.data.message);\n closeSpinner();\n });\n };\n\n updateAttachingMessage = (files, messageContainer) => {\n let attachingMessage;\n const filesCount = files.filter(file => file.status === 'uploading' || file.status === 'queued')\n .length;\n\n // Dinamycally change uploading files text depending on files number in\n // dropzone files queue.\n if (filesCount > 1) {\n attachingMessage = `Attaching ${filesCount} files -`;\n } else {\n attachingMessage = 'Attaching a file -';\n }\n\n messageContainer.text(attachingMessage);\n };\n\n form.find('.markdown-selector').click(function onMarkdownClick(e) {\n e.preventDefault();\n $(this)\n .closest('.gfm-form')\n .find('.div-dropzone')\n .click();\n formTextarea.focus();\n });\n\n return Dropzone.forElement($formDropzone.get(0));\n}\n","/* eslint-disable func-names, no-var, no-param-reassign, one-var, operator-assignment, no-else-return, prefer-template, prefer-arrow-callback, consistent-return, no-unused-vars */\nimport $ from 'jquery';\nimport { insertText } from '~/lib/utils/common_utils';\n\nconst LINK_TAG_PATTERN = '[{text}](url)';\n\nfunction selectedText(text, textarea) {\n return text.substring(textarea.selectionStart, textarea.selectionEnd);\n}\n\nfunction lineBefore(text, textarea) {\n var split;\n split = text\n .substring(0, textarea.selectionStart)\n .trim()\n .split('\\n');\n return split[split.length - 1];\n}\n\nfunction lineAfter(text, textarea) {\n return text\n .substring(textarea.selectionEnd)\n .trim()\n .split('\\n')[0];\n}\n\nfunction blockTagText(text, textArea, blockTag, selected) {\n const before = lineBefore(text, textArea);\n const after = lineAfter(text, textArea);\n if (before === blockTag && after === blockTag) {\n // To remove the block tag we have to select the line before & after\n if (blockTag != null) {\n textArea.selectionStart = textArea.selectionStart - (blockTag.length + 1);\n textArea.selectionEnd = textArea.selectionEnd + (blockTag.length + 1);\n }\n return selected;\n } else {\n return blockTag + '\\n' + selected + '\\n' + blockTag;\n }\n}\n\nfunction moveCursor({\n textArea,\n tag,\n cursorOffset,\n positionBetweenTags,\n removedLastNewLine,\n select,\n}) {\n var pos;\n if (!textArea.setSelectionRange) {\n return;\n }\n if (select && select.length > 0) {\n // calculate the part of the text to be selected\n const startPosition = textArea.selectionStart - (tag.length - tag.indexOf(select));\n const endPosition = startPosition + select.length;\n return textArea.setSelectionRange(startPosition, endPosition);\n }\n if (textArea.selectionStart === textArea.selectionEnd) {\n if (positionBetweenTags) {\n pos = textArea.selectionStart - tag.length;\n } else {\n pos = textArea.selectionStart;\n }\n\n if (removedLastNewLine) {\n pos -= 1;\n }\n\n if (cursorOffset) {\n pos -= cursorOffset;\n }\n\n return textArea.setSelectionRange(pos, pos);\n }\n}\n\nexport function insertMarkdownText({\n textArea,\n text,\n tag,\n cursorOffset,\n blockTag,\n selected = '',\n wrap,\n select,\n}) {\n var textToInsert,\n selectedSplit,\n startChar,\n removedLastNewLine,\n removedFirstNewLine,\n currentLineEmpty,\n lastNewLine;\n removedLastNewLine = false;\n removedFirstNewLine = false;\n currentLineEmpty = false;\n\n // check for link pattern and selected text is an URL\n // if so fill in the url part instead of the text part of the pattern.\n if (tag === LINK_TAG_PATTERN) {\n if (URL) {\n try {\n const ignoredUrl = new URL(selected);\n // valid url\n tag = '[text]({text})';\n select = 'text';\n } catch (e) {\n // ignore - no valid url\n }\n }\n }\n\n // Remove the first newline\n if (selected.indexOf('\\n') === 0) {\n removedFirstNewLine = true;\n selected = selected.replace(/\\n+/, '');\n }\n\n // Remove the last newline\n if (textArea.selectionEnd - textArea.selectionStart > selected.replace(/\\n$/, '').length) {\n removedLastNewLine = true;\n selected = selected.replace(/\\n$/, '');\n }\n\n selectedSplit = selected.split('\\n');\n\n if (!wrap) {\n lastNewLine = textArea.value.substr(0, textArea.selectionStart).lastIndexOf('\\n');\n\n // Check whether the current line is empty or consists only of spaces(=handle as empty)\n if (/^\\s*$/.test(textArea.value.substring(lastNewLine, textArea.selectionStart))) {\n currentLineEmpty = true;\n }\n }\n\n startChar = !wrap && !currentLineEmpty && textArea.selectionStart > 0 ? '\\n' : '';\n\n const textPlaceholder = '{text}';\n\n if (selectedSplit.length > 1 && (!wrap || (blockTag != null && blockTag !== ''))) {\n if (blockTag != null && blockTag !== '') {\n textToInsert = blockTagText(text, textArea, blockTag, selected);\n } else {\n textToInsert = selectedSplit\n .map(function(val) {\n if (tag.indexOf(textPlaceholder) > -1) {\n return tag.replace(textPlaceholder, val);\n }\n if (val.indexOf(tag) === 0) {\n return '' + val.replace(tag, '');\n } else {\n return '' + tag + val;\n }\n })\n .join('\\n');\n }\n } else if (tag.indexOf(textPlaceholder) > -1) {\n textToInsert = tag.replace(textPlaceholder, selected);\n } else {\n textToInsert = '' + startChar + tag + selected + (wrap ? tag : ' ');\n }\n\n if (removedFirstNewLine) {\n textToInsert = '\\n' + textToInsert;\n }\n\n if (removedLastNewLine) {\n textToInsert += '\\n';\n }\n\n insertText(textArea, textToInsert);\n return moveCursor({\n textArea,\n tag: tag.replace(textPlaceholder, selected),\n cursorOffset,\n positionBetweenTags: wrap && selected.length === 0,\n removedLastNewLine,\n select,\n });\n}\n\nfunction updateText({ textArea, tag, cursorOffset, blockTag, wrap, select, tagContent }) {\n var $textArea, selected, text;\n $textArea = $(textArea);\n textArea = $textArea.get(0);\n text = $textArea.val();\n selected = selectedText(text, textArea) || tagContent;\n $textArea.focus();\n return insertMarkdownText({\n textArea,\n text,\n tag,\n cursorOffset,\n blockTag,\n selected,\n wrap,\n select,\n });\n}\n\nexport function addMarkdownListeners(form) {\n return $('.js-md', form)\n .off('click')\n .on('click', function() {\n const $this = $(this);\n return updateText({\n textArea: $this.closest('.md-area').find('textarea'),\n tag: $this.data('mdTag'),\n cursorOffset: $this.data('mdCursorOffset'),\n blockTag: $this.data('mdBlock'),\n wrap: !$this.data('mdPrepend'),\n select: $this.data('mdSelect'),\n tagContent: $this.data('mdTagContent'),\n });\n });\n}\n\nexport function removeMarkdownListeners(form) {\n return $('.js-md', form).off('click');\n}\n","import $ from 'jquery';\nimport autosize from 'autosize';\nimport GfmAutoComplete, * as GFMConfig from './gfm_auto_complete';\nimport dropzoneInput from './dropzone_input';\nimport { addMarkdownListeners, removeMarkdownListeners } from './lib/utils/text_markdown';\n\nexport default class GLForm {\n constructor(form, enableGFM = {}) {\n this.form = form;\n this.textarea = this.form.find('textarea.js-gfm-input');\n this.enableGFM = Object.assign({}, GFMConfig.defaultAutocompleteConfig, enableGFM);\n // Disable autocomplete for keywords which do not have dataSources available\n const dataSources = (gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources) || {};\n Object.keys(this.enableGFM).forEach(item => {\n if (item !== 'emojis') {\n this.enableGFM[item] = !!dataSources[item];\n }\n });\n // Before we start, we should clean up any previous data for this form\n this.destroy();\n // Set up the form\n this.setupForm();\n this.form.data('glForm', this);\n }\n\n destroy() {\n // Clean form listeners\n this.clearEventListeners();\n if (this.autoComplete) {\n this.autoComplete.destroy();\n }\n this.form.data('glForm', null);\n }\n\n setupForm() {\n const isNewForm = this.form.is(':not(.gfm-form)');\n this.form.removeClass('js-new-note-form');\n if (isNewForm) {\n this.form.find('.div-dropzone').remove();\n this.form.addClass('gfm-form');\n // remove notify commit author checkbox for non-commit notes\n gl.utils.disableButtonIfEmptyField(\n this.form.find('.js-note-text'),\n this.form.find('.js-comment-button, .js-note-new-discussion'),\n );\n this.autoComplete = new GfmAutoComplete(gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);\n this.autoComplete.setup(this.form.find('.js-gfm-input'), this.enableGFM);\n dropzoneInput(this.form);\n autosize(this.textarea);\n }\n // form and textarea event listeners\n this.addEventListeners();\n addMarkdownListeners(this.form);\n // hide discard button\n this.form.find('.js-note-discard').hide();\n this.form.show();\n if (this.isAutosizeable) this.setupAutosize();\n }\n\n setupAutosize() {\n this.textarea.off('autosize:resized').on('autosize:resized', this.setHeightData.bind(this));\n\n this.textarea.off('mouseup.autosize').on('mouseup.autosize', this.destroyAutosize.bind(this));\n\n setTimeout(() => {\n autosize(this.textarea);\n this.textarea.css('resize', 'vertical');\n }, 0);\n }\n\n setHeightData() {\n this.textarea.data('height', this.textarea.outerHeight());\n }\n\n destroyAutosize() {\n const outerHeight = this.textarea.outerHeight();\n\n if (this.textarea.data('height') === outerHeight) return;\n\n autosize.destroy(this.textarea);\n\n this.textarea.data('height', outerHeight);\n this.textarea.outerHeight(outerHeight);\n this.textarea.css('max-height', window.outerHeight);\n }\n\n clearEventListeners() {\n this.textarea.off('focus');\n this.textarea.off('blur');\n removeMarkdownListeners(this.form);\n }\n\n addEventListeners() {\n this.textarea.on('focus', function focusTextArea() {\n $(this)\n .closest('.md-area')\n .addClass('is-focused');\n });\n this.textarea.on('blur', function blurTextArea() {\n $(this)\n .closest('.md-area')\n .removeClass('is-focused');\n });\n }\n}\n","/* eslint-disable func-names, prefer-arrow-callback, no-unused-vars, consistent-return, camelcase, class-methods-use-this */\n\n// Zen Mode (full screen) textarea\n//\n/*= provides zen_mode:enter */\n/*= provides zen_mode:leave */\n\nimport $ from 'jquery';\nimport 'vendor/jquery.scrollTo';\nimport Dropzone from 'dropzone';\nimport Mousetrap from 'mousetrap';\nimport 'mousetrap/plugins/pause/mousetrap-pause';\n\nDropzone.autoDiscover = false;\n\n//\n// ### Events\n//\n// `zen_mode:enter`\n//\n// Fired when the \"Edit in fullscreen\" link is clicked.\n//\n// **Synchronicity** Sync\n// **Bubbles** Yes\n// **Cancelable** No\n// **Target** a.js-zen-enter\n//\n// `zen_mode:leave`\n//\n// Fired when the \"Leave Fullscreen\" link is clicked.\n//\n// **Synchronicity** Sync\n// **Bubbles** Yes\n// **Cancelable** No\n// **Target** a.js-zen-leave\n//\n\nexport default class ZenMode {\n constructor() {\n this.active_backdrop = null;\n this.active_textarea = null;\n $(document).on('click', '.js-zen-enter', function(e) {\n e.preventDefault();\n return $(e.currentTarget).trigger('zen_mode:enter');\n });\n $(document).on('click', '.js-zen-leave', function(e) {\n e.preventDefault();\n return $(e.currentTarget).trigger('zen_mode:leave');\n });\n $(document).on(\n 'zen_mode:enter',\n (function(_this) {\n return function(e) {\n return _this.enter(\n $(e.target)\n .closest('.md-area')\n .find('.zen-backdrop'),\n );\n };\n })(this),\n );\n $(document).on(\n 'zen_mode:leave',\n (function(_this) {\n return function(e) {\n return _this.exit();\n };\n })(this),\n );\n $(document).on('keydown', function(e) {\n // Esc\n if (e.keyCode === 27) {\n e.preventDefault();\n return $(document).trigger('zen_mode:leave');\n }\n });\n }\n\n enter(backdrop) {\n Mousetrap.pause();\n this.active_backdrop = $(backdrop);\n this.active_backdrop.addClass('fullscreen');\n this.active_textarea = this.active_backdrop.find('textarea');\n // Prevent a user-resized textarea from persisting to fullscreen\n this.active_textarea.removeAttr('style');\n this.active_textarea.focus();\n }\n\n exit() {\n if (this.active_textarea) {\n Mousetrap.unpause();\n this.active_textarea.closest('.zen-backdrop').removeClass('fullscreen');\n this.scrollTo(this.active_textarea);\n this.active_textarea = null;\n this.active_backdrop = null;\n\n const $dropzone = $('.div-dropzone');\n if ($dropzone && !$dropzone.hasClass('js-invalid-dropzone')) {\n Dropzone.forElement('.div-dropzone').enable();\n }\n }\n }\n\n scrollTo(zen_area) {\n return $.scrollTo(zen_area, 0, {\n offset: -150,\n });\n }\n}\n"],"sourceRoot":""}