{"version":3,"sources":["webpack:///./dropzone_input.js","webpack:///./lib/utils/text_markdown.js","webpack:///./gl_form.js","webpack:///./pages/projects/wikis/wikis.js","webpack:///./shortcuts_wiki.js","webpack:///./pages/projects/wikis/components/delete_wiki_modal.vue?0ec6","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?c4b5","webpack:///./pages/projects/wikis/index.js","webpack:///./zen_mode.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/mousetrap/plugins/pause/mousetrap-pause.js"],"names":["dropzoneInput","form","$attachButton","find","$attachingFileMessage","$cancelButton","$retryLink","$uploadProgress","$uploadingErrorContainer","$uploadingErrorMessage","$uploadingProgressContainer","uploadsPath","window","uploads_path","maxFileSize","gon","max_file_size","formTextarea","handlePaste","pasteText","addFileToForm","updateAttachingMessage","isImage","getFilename","uploadFile","wrap","on","event","$mdArea","closest","setupMarkdownPreview","$formDropzone","parent","addClass","append","dropzone","url","dictDefaultMessage","clickable","paramName","maxFilesize","uploadMultiple","headers","csrf","previewContainer","processing","jquery_default","alert","dragover","css","dragleave","removeClass","drop","focus","success","header","response","processingFileCount","this","getQueuedFiles","length","getUploadingFiles","shouldPad","link","markdown","error","file","errorMessage","arguments","undefined","xhr","message","responseText","html","totaluploadprogress","totalUploadProgress","files","text","Math","round","sending","removedfile","queuecomplete","remove","trigger","child","children","e","preventDefault","stopPropagation","dropzone_default","a","forElement","get","removeAllFiles","dropzoneInstance","target","querySelector","failedFiles","map","failedFile","status","ERROR","accepted","addFile","pasteEvent","originalEvent","clipboardData","items","image","filename","getAsFile","data","i","item","type","indexOf","formattedText","textarea","caretStart","selectionStart","caretEnd","selectionEnd","textEnd","val","beforeSelection","substring","afterSelection","setSelectionRange","style","height","scrollHeight","dispatchEvent","Event","path","underscore_default","escape","value","getData","split","closeSpinner","formData","FormData","axios_utils","post","then","_ref","md","$child","index","replace","insertToTextArea","catch","messageContainer","attachingMessage","filesCount","filter","click","autoDiscover","updateText","textArea","tag","blockTag","$textArea","selected","selectedText","textToInsert","selectedSplit","startChar","removedLastNewLine","removedFirstNewLine","currentLineEmpty","lastNewLine","substr","lastIndexOf","test","before","trim","lineBefore","after","lineAfter","blockTagText","join","Object","common_utils","wrapped","pos","moveCursor","insertMarkdownText","gl_form_GLForm","GLForm","_this","enableGFM","_classCallCheck","assign","gfm_auto_complete","dataSources","gl","GfmAutoComplete","keys","forEach","destroy","setupForm","clearEventListeners","autoComplete","isNewForm","is","utils","disableButtonIfEmptyField","setup","autosize_default","addEventListeners","off","$this","hide","show","isAutosizeable","setupAutosize","_this2","setHeightData","bind","destroyAutosize","setTimeout","outerHeight","Wikis","sidebarEl","document","sidebarExpanded","sidebarToggles","querySelectorAll","addEventListener","handleToggleSidebar","newWikiForm","handleNewWikiSubmit","renderSidebar","slugInput","slug","text_utility","wikisPath","getAttribute","params","location","search","url_utility","classList","sidebarCanCollapse","contains","add","breakpoints","getBreakpointSize","ShortcutsWiki","shortcuts_wiki_classCallCheck","_possibleConstructorReturn","__proto__","getPrototypeOf","call","mousetrap_default","editWiki","shortcuts_navigation","shortcuts_dashboard_navigation","components_delete_wiki_modalvue_type_script_lang_js","components","GlModal","gl_modal","props","deleteWikiUrl","String","required","default","pageTitle","csrfToken","computed","locale","title","methods","onSubmit","$refs","submit","delete_wiki_modal","componentNormalizer","_vm","_h","$createElement","_c","_self","attrs","id","header-title-text","footer-primary-button-text","s__","footer-primary-button-variant","_v","_s","ref","staticClass","action","method","name","domProps","wikis","shortcuts_wiki","zen_mode","gl_form","deleteWikiButton","getElementById","vue_esm","use","translate","_deleteWikiButton$dat","dataset","deleteWikiModalEl","el","render","createElement","token","dropzone__WEBPACK_IMPORTED_MODULE_2___default","ZenMode","active_backdrop","active_textarea","jquery__WEBPACK_IMPORTED_MODULE_0___default","currentTarget","enter","exit","keyCode","backdrop","mousetrap__WEBPACK_IMPORTED_MODULE_3___default","pause","removeAttr","unpause","scrollTo","$dropzone","hasClass","enable","zen_area","offset","Mousetrap","self","_originalStopCallback","stopCallback","enabled","element","combo"],"mappings":"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","file":"pages.projects.wikis.beacc059.chunk.js","sourcesContent":["import $ from 'jquery';\nimport Dropzone from 'dropzone';\nimport _ from 'underscore';\nimport './preview_markdown';\nimport csrf from './lib/utils/csrf';\nimport axios from './lib/utils/axios_utils';\n\nDropzone.autoDiscover = false;\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 = 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;\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\n // If there's xhr error message, let's show it instead of dropzone's one.\n const message = xhr ? xhr.responseText : errorMessage;\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(e.target.closest('.js-main-target-form').querySelector('.div-dropzone'));\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).val().substring(0, caretStart);\n const afterSelection = $(child).val().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.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').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).closest('.gfm-form').find('.div-dropzone').click();\n formTextarea.focus();\n });\n}\n","/* eslint-disable func-names, no-var, no-param-reassign, quotes, one-var, one-var-declaration-per-line, operator-assignment, no-else-return, prefer-template, prefer-arrow-callback, max-len, consistent-return, no-unused-vars, max-len */\nimport $ from 'jquery';\nimport { insertText } from '~/lib/utils/common_utils';\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.substring(0, textarea.selectionStart).trim().split('\\n');\n return split[split.length - 1];\n}\n\nfunction lineAfter(text, textarea) {\n return text.substring(textarea.selectionEnd).trim().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(textArea, tag, wrapped, removedLastNewLine) {\n var pos;\n if (!textArea.setSelectionRange) {\n return;\n }\n if (textArea.selectionStart === textArea.selectionEnd) {\n if (wrapped) {\n pos = textArea.selectionStart - tag.length;\n } else {\n pos = textArea.selectionStart;\n }\n\n if (removedLastNewLine) {\n pos -= 1;\n }\n\n return textArea.setSelectionRange(pos, pos);\n }\n}\n\nexport function insertMarkdownText(textArea, text, tag, blockTag, selected, wrap) {\n var textToInsert, inserted, selectedSplit, startChar, removedLastNewLine, removedFirstNewLine, currentLineEmpty, lastNewLine;\n removedLastNewLine = false;\n removedFirstNewLine = false;\n currentLineEmpty = false;\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 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.map(function(val) {\n if (val.indexOf(tag) === 0) {\n return \"\" + (val.replace(tag, ''));\n } else {\n return \"\" + tag + val;\n }\n }).join('\\n');\n }\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(textArea, tag, wrap, removedLastNewLine);\n}\n\nfunction updateText(textArea, tag, blockTag, wrap) {\n var $textArea, selected, text;\n $textArea = $(textArea);\n textArea = $textArea.get(0);\n text = $textArea.val();\n selected = selectedText(text, textArea);\n $textArea.focus();\n return insertMarkdownText(textArea, text, tag, blockTag, selected, wrap);\n}\n\nfunction replaceRange(s, start, end, substitute) {\n return s.substring(0, start) + substitute + s.substring(end);\n}\n\nexport function addMarkdownListeners(form) {\n return $('.js-md', form).off('click').on('click', function() {\n const $this = $(this);\n return updateText($this.closest('.md-area').find('textarea'), $this.data('mdTag'), $this.data('mdBlock'), !$this.data('mdPrepend'));\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 // Setup 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(this.form.find('.js-note-text'), this.form.find('.js-comment-button, .js-note-new-discussion'));\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')\n .on('autosize:resized', this.setHeightData.bind(this));\n\n this.textarea.off('mouseup.autosize')\n .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).closest('.md-area').addClass('is-focused');\n });\n this.textarea.on('blur', function blurTextArea() {\n $(this).closest('.md-area').removeClass('is-focused');\n });\n }\n}\n","import bp from '../../../breakpoints';\nimport { slugify } from '../../../lib/utils/text_utility';\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 const slug = slugify(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 Mousetrap from 'mousetrap';\nimport ShortcutsNavigation from './shortcuts_navigation';\nimport findAndFollowLink from './shortcuts_dashboard_navigation';\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 mod from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../../../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--0!../../../../../../../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=93b72a28\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-modal',{attrs:{\"id\":\"delete-wiki-modal\",\"header-title-text\":_vm.title,\"footer-primary-button-text\":_vm.s__('WikiPageConfirmDelete|Delete page'),\"footer-primary-button-variant\":\"danger\"},on:{\"submit\":_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}})])])}\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 Wikis from './wikis';\nimport ShortcutsWiki from '../../../shortcuts_wiki';\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 deleteWikiButton = document.getElementById('delete-wiki-button');\n\n if (deleteWikiButton) {\n Vue.use(Translate);\n\n const { deleteWikiUrl, pageTitle } = deleteWikiButton.dataset;\n const deleteWikiModalEl = document.getElementById('delete-wiki-modal');\n const deleteModal = new Vue({ // eslint-disable-line\n el: deleteWikiModalEl,\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","/* eslint-disable func-names, wrap-iife, prefer-arrow-callback, no-unused-vars, consistent-return, camelcase, comma-dangle, max-len, 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('zen_mode:enter', (function(_this) {\n return function(e) {\n return _this.enter($(e.target).closest('.md-area').find('.zen-backdrop'));\n };\n })(this));\n $(document).on('zen_mode:leave', (function(_this) {\n return function(e) {\n return _this.exit();\n };\n })(this));\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","/**\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"],"sourceRoot":""}