Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/text.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax <max@nextcloud.com>2022-02-07 14:57:33 +0300
committerMax <max@nextcloud.com>2022-02-09 11:42:47 +0300
commit95c706d16bc64cbc612fc9fd3d134e28f0269333 (patch)
treee4297d909fbb009b8d50ea6452b2586fe4351d43 /js/editor-rich.js.map
parentc1af1a31584ffe9dac327c1e6eff037c77fa267c (diff)
fix: use tiptap.commands to focus
Either handle network errors or the response. There are three ways to handle errors and responses with axios: ``` axios.post(...).then(...).catch(...) axios.post(...).catch(...).then(...) axios.post(...).then(onResponse, onErr) ``` Use the last one. First one will catch errors triggered by the emits in the happy path with the network error handling. Second one will handle the response, even if errors have been caught. Signed-off-by: Max <max@nextcloud.com>
Diffstat (limited to 'js/editor-rich.js.map')
-rw-r--r--js/editor-rich.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/js/editor-rich.js.map b/js/editor-rich.js.map
index 8f40e2a3a..83a47210b 100644
--- a/js/editor-rich.js.map
+++ b/js/editor-rich.js.map
@@ -1 +1 @@
-{"version":3,"file":"editor-rich.js?v=c2152dbe458c7cf39a83","mappings":"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CA,YACA,YACA,YAGA,gBACA,OACA,cACA,eACA,iBACA,qBACA,mBACA,uBACA,kBACA,aACA,aAGA,UACA,eADA,WACA,WACA,6CAEA,eAJA,WAIA,WACA,mBACA,SAGA,OAFA,cACA,6BACA,IAGA,SAZA,WAYA,WACA,sCACA,MACA,SAEA,6BACA,4CAGA,UArBA,WAsBA,8BACA,qEAEA,SAzBA,WAyBA,WACA,mBACA,6CAGA,mBA9BA,WA8BA,WACA,mBACA,0GAGA,SAnCA,WAmCA,WACA,gCACA,+BACA,oBACA,CACA,kCACA,kBACA,iBACA,0BAIA,iBA/CA,WA+CA,WACA,qBACA,0BACA,OAEA,aACA,aACA,qBACA,kBACA,eACA,0BAMA,iBA/DA,WA+DA,WACA,mBACA,qBACA,6BAGA,UArEA,WAqEA,WACA,8EAEA,UAxEA,WAyEA,oBACA,iBACA,gGACA,iCACA,YAEA,UA/EA,WAgFA,2BACA,iDAGA,QAlJA,WAkJA,WACA,sDACA,2CACA,qDACA,mBACA,kBAEA,oBACA,iCAEA,MAEA,cA9JA,WA+JA,0DAEA,SACA,cADA,WACA,WACA,2BACA,mBACA,uBAGA,QAPA,WAQA,mCAEA,UAVA,SAUA,GACA,WACA,iBAIA,4CACA,YAEA,eAnBA,SAmBA,GACA,uDAEA,gBAtBA,SAsBA,GACA,yDAEA,cAzBA,YAyBA,cACA,wCAEA,gBA5BA,YA4BA,cACA,8FACA,uCACA,GACA,gBAGA,mBAnCA,WAoCA,6BAEA,cAtCA,WAuCA,mCAEA,wBAzCA,SAyCA,cACA,uBACA,IACA,EADA,eACA,GACA,uBAGA,OAFA,qDACA,wBAMA,kBAEA,0DACA,kHACA,2BACA,YACA,qGACA,iBACA,wBAGA,uBAhEA,SAgEA,GAEA,kBAEA,kBApEA,WAoEA,WACA,iBAGA,uBACA,4BACA,uCAEA,2EACA,kHACA,2BACA,YACA,qGACA,iBACA,oBACA,oBAGA,kBAtFA,SAsFA,cACA,uBACA,uCAEA,8DACA,kHACA,2BACA,YACA,qGACA,iBACA,wBAGA,gBAnGA,WAmGA,YACA,uBAIA,+DACA,0BACA,gCAEA,sBA5G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","sources":["webpack:///text/src/views/RichWorkspace.vue","webpack:///text/src/views/RichWorkspace.vue?vue&type=script&lang=js&","webpack://text/./src/views/RichWorkspace.vue?71be","webpack://text/./src/views/RichWorkspace.vue?c027","webpack:///text/src/views/RichWorkspace.vue?vue&type=template&id=42d14835&scoped=true&","webpack:///text/src/helpers/files.js","webpack:///text/src/helpers/mime.js","webpack:///text/src/components/MenuBar.vue?vue&type=style&index=0&id=aa1bf3a8&scoped=true&lang=scss&","webpack:///text/src/components/MenuBubble.vue?vue&type=style&index=0&id=1df378e6&scoped=true&lang=scss&","webpack:///text/src/views/RichWorkspace.vue?vue&type=style&index=0&id=42d14835&lang=scss&scoped=true&","webpack:///text/src/components/MenuBar.vue?vue&type=template&id=aa1bf3a8&scoped=true&","webpack:///text/src/mixins/menubar.js","webpack:///text/src/components/MenuBar.vue","webpack:///text/src/components/MenuBar.vue?vue&type=script&lang=js&","webpack://text/./src/components/MenuBar.vue?5607","webpack://text/./src/components/MenuBar.vue?ce1f","webpack:///text/src/components/MenuBubble.vue?vue&type=template&id=1df378e6&scoped=true&","webpack:///text/src/components/MenuBubble.vue","webpack:///text/src/components/MenuBubble.vue?vue&type=script&lang=js&","webpack://text/./src/components/MenuBubble.vue?d2a5","webpack://text/./src/components/MenuBubble.vue?8445"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-if=\"enabled\" id=\"rich-workspace\" :class=\"{'icon-loading': !loaded || !ready, 'focus': focus, 'dark': darkTheme, 'creatable': canCreate}\">\n\t\t<div v-if=\"showEmptyWorkspace\" class=\"empty-workspace\" @click=\"createNew\">\n\t\t\t<p class=\"placeholder\">\n\t\t\t\t{{ t('text', 'Add notes, lists or links …') }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<EditorWrapper v-if=\"file\"\n\t\t\tv-show=\"ready\"\n\t\t\t:key=\"file.path\"\n\t\t\t:file-id=\"file.id\"\n\t\t\t:relative-path=\"file.path\"\n\t\t\t:share-token=\"shareToken\"\n\t\t\t:active=\"true\"\n\t\t\t:autohide=\"true\"\n\t\t\t:mime=\"file.mimetype\"\n\t\t\t:autofocus=\"autofocus\"\n\t\t\t@ready=\"ready=true\"\n\t\t\t@focus=\"focus=true\"\n\t\t\t@blur=\"unfocus\"\n\t\t\t@error=\"reset\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { subscribe } from '@nextcloud/event-bus'\n\nconst IS_PUBLIC = !!(document.getElementById('isPublic'))\nconst WORKSPACE_URL = generateOcsUrl('apps/text' + (IS_PUBLIC ? '/public' : '') + '/workspace', 2)\n\nexport default {\n\tname: 'RichWorkspace',\n\tcomponents: {\n\t\tEditorWrapper: () => import(/* webpackChunkName: \"editor\" */'./../components/EditorWrapper'),\n\t},\n\tprops: {\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfocus: false,\n\t\t\tfolder: null,\n\t\t\tfile: null,\n\t\t\tloaded: false,\n\t\t\tready: false,\n\t\t\tautofocus: false,\n\t\t\tdarkTheme: OCA.Accessibility && OCA.Accessibility.theme === 'dark',\n\t\t\tenabled: OCA.Text.RichWorkspaceEnabled,\n\t\t}\n\t},\n\tcomputed: {\n\t\tshareToken() {\n\t\t\treturn document.getElementById('sharingToken') ? document.getElementById('sharingToken').value : null\n\t\t},\n\t\tcanCreate() {\n\t\t\treturn !!(this.folder && (this.folder.permissions & OC.PERMISSION_CREATE))\n\t\t},\n\t\tshowEmptyWorkspace() {\n\t\t\treturn (!this.file || (this.autofocus && !this.ready)) && this.canCreate\n\t\t},\n\t},\n\twatch: {\n\t\tpath() {\n\t\t\tthis.getFileInfo()\n\t\t},\n\t\tfocus(newValue) {\n\t\t\tif (!newValue) {\n\t\t\t\tdocument.querySelector('#editor').scrollTo(0, 0)\n\t\t\t}\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.enabled) {\n\t\t\tthis.getFileInfo()\n\t\t}\n\t\tsubscribe('Text::showRichWorkspace', () => {\n\t\t\tthis.enabled = true\n\t\t\tthis.getFileInfo()\n\t\t})\n\t\tsubscribe('Text::hideRichWorkspace', () => {\n\t\t\tthis.enabled = false\n\t\t})\n\t},\n\tmethods: {\n\t\tunfocus() {\n\t\t\t// setTimeout(() => this.focus = false, 2000)\n\t\t},\n\t\treset() {\n\t\t\tthis.file = null\n\t\t\tthis.focus = false\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.creating = false\n\t\t\t\tthis.getFileInfo()\n\t\t\t})\n\t\t},\n\t\tgetFileInfo() {\n\t\t\tthis.loaded = false\n\t\t\tthis.autofocus = false\n\t\t\tthis.ready = false\n\t\t\tconst params = { path: this.path }\n\t\t\tif (IS_PUBLIC) {\n\t\t\t\tparams.shareToken = this.shareToken\n\t\t\t}\n\t\t\treturn axios.get(WORKSPACE_URL, { params }).then((response) => {\n\t\t\t\tconst data = response.data.ocs.data\n\t\t\t\tthis.folder = data.folder || null\n\t\t\t\tthis.file = data.file\n\t\t\t\tthis.editing = true\n\t\t\t\tthis.loaded = true\n\t\t\t\treturn true\n\t\t\t}).catch((error) => {\n\t\t\t\tif (error.response.data.ocs && error.response.data.ocs.data.folder) {\n\t\t\t\t\tthis.folder = error.response.data.ocs.data.folder\n\t\t\t\t} else {\n\t\t\t\t\tthis.folder = null\n\t\t\t\t}\n\t\t\t\tthis.file = null\n\t\t\t\tthis.loaded = true\n\t\t\t\tthis.ready = true\n\t\t\t\tthis.creating = false\n\t\t\t\treturn false\n\t\t\t})\n\t\t},\n\t\tcreateNew() {\n\t\t\tif (this.creating) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.creating = true\n\t\t\tthis.getFileInfo().then((workspaceFileExists) => {\n\t\t\t\tthis.autofocus = true\n\t\t\t\tif (!workspaceFileExists) {\n\t\t\t\t\twindow.FileList.createFile('Readme.md', { scrollTo: false, animate: false }).then((status, data) => {\n\t\t\t\t\t\tthis.getFileInfo()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t#rich-workspace {\n\t\tpadding: 0 50px;\n\t\t/* Slightly reduce vertical space */\n\t\tmargin-bottom: -24px;\n\t\ttext-align: left;\n\t\tmax-height: 0;\n\t\ttransition: max-height 0.5s cubic-bezier(0, 1, 0, 1);\n\t\tz-index: 61;\n\t\tposition: relative;\n\t\t&.creatable {\n\t\t\tmin-height: 90px;\n\t\t}\n\t}\n\n\t/* For subfolders, where there are no Recommendations */\n\t#rich-workspace:only-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.empty-workspace {\n\t\tpadding-top: 43px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\theight: 0;\n\t}\n\n\t#rich-workspace::v-deep div[contenteditable=false] {\n\t\twidth: 100%;\n\t\tpadding: 0px;\n\t\tbackground-color: var(--color-main-background);\n\t\topacity: 1;\n\t\tborder: none;\n\t}\n\n\t#rich-workspace::v-deep #editor-container {\n\t\theight: 100%;\n\t\tposition: unset !important;\n\t\ttop: auto !important;\n\t}\n\n\t#rich-workspace::v-deep #editor-wrapper {\n\t\tposition: unset !important;\n\t\toverflow: visible;\n\t}\n\n\t#rich-workspace::v-deep #editor {\n\t\toverflow: visible !important;\n\t}\n\n\t#rich-workspace::v-deep .content-wrapper {\n\t\toverflow: scroll !important;\n\t\tmax-height: calc(40vh - 50px);\n\t\tpadding-left: 10px;\n\t\tpadding-bottom: 60px; /* ensure menububble fits below */\n\t}\n\n\t#rich-workspace::v-deep #editor-wrapper .ProseMirror {\n\t\tpadding: 0px;\n\t\tmargin: 0;\n\t}\n\n\t#rich-workspace::v-deep .menubar {\n\t\tz-index: 61;\n\t\t/* Slightly reduce vertical space */\n\t\tmargin-bottom: -10px;\n\t}\n\n\t#rich-workspace::v-deep .menubar .menubar-icons {\n\t\tmargin-left: 0;\n\t}\n\n\t#rich-workspace::v-deep .editor__content {\n\t\tmargin: 0;\n\t}\n\n\t#rich-workspace.focus {\n\t\tmax-height: 50vh;\n\t}\n\n\t#rich-workspace:not(.focus) {\n\t\tmax-height: 30vh;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t}\n\n\t#rich-workspace:not(.focus):not(.icon-loading):after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tz-index: 1;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tpointer-events: none;\n\t\tbackground-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));\n\t\twidth: 100%;\n\t\theight: 4em;\n\t}\n\n\t#rich-workspace.dark:not(.focus):not(.icon-loading):after {\n\t\tbackground-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background));\n\t}\n\n\t@media only screen and (max-width: 1024px) {\n\t\t#rich-workspace:not(.focus) {\n\t\t\tmax-height: 30vh;\n\t\t}\n\t}\n\n\thtml.ie {\n\t\t#rich-workspace::v-deep {\n\t\t\t#editor-container {\n\t\t\t\tposition: initial;\n\t\t\t}\n\n\t\t\t#editor-wrapper {\n\t\t\t\tposition: relative !important;\n\t\t\t\ttop: auto !important;\n\t\t\t}\n\n\t\t\t#editor {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\toverflow: hidden !important;\n\t\t\t}\n\n\t\t\t.menubar {\n\t\t\t\tposition: relative;\n\t\t\t\toverflow: hidden;\n\t\t\t\tflex-shrink: 0;\n\t\t\t\theight: 44px;\n\t\t\t\ttop: auto;\n\t\t\t}\n\n\t\t\t#editor > div:nth-child(2) {\n\t\t\t\tmin-height: 44px;\n\t\t\t\toverflow-x: hidden;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tflex-shrink: 1;\n\t\t\t}\n\t\t}\n\t}\n\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=style&index=0&id=42d14835&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=style&index=0&id=42d14835&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RichWorkspace.vue?vue&type=template&id=42d14835&scoped=true&\"\nimport script from \"./RichWorkspace.vue?vue&type=script&lang=js&\"\nexport * from \"./RichWorkspace.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RichWorkspace.vue?vue&type=style&index=0&id=42d14835&lang=scss&scoped=true&\"\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 \"42d14835\",\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 (_vm.enabled)?_c('div',{class:{'icon-loading': !_vm.loaded || !_vm.ready, 'focus': _vm.focus, 'dark': _vm.darkTheme, 'creatable': _vm.canCreate},attrs:{\"id\":\"rich-workspace\"}},[(_vm.showEmptyWorkspace)?_c('div',{staticClass:\"empty-workspace\",on:{\"click\":_vm.createNew}},[_c('p',{staticClass:\"placeholder\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('text', 'Add notes, lists or links …'))+\"\\n\\t\\t\")])]):_vm._e(),_vm._v(\" \"),(_vm.file)?_c('EditorWrapper',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.ready),expression:\"ready\"}],key:_vm.file.path,attrs:{\"file-id\":_vm.file.id,\"relative-path\":_vm.file.path,\"share-token\":_vm.shareToken,\"active\":true,\"autohide\":true,\"mime\":_vm.file.mimetype,\"autofocus\":_vm.autofocus},on:{\"ready\":function($event){_vm.ready=true},\"focus\":function($event){_vm.focus=true},\"blur\":_vm.unfocus,\"error\":_vm.reset}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { openMimetypes } from './mime'\nimport RichWorkspace from '../views/RichWorkspace'\nimport { imagePath } from '@nextcloud/router'\nimport store from '../store'\n\nconst FILE_ACTION_IDENTIFIER = 'Edit with text app'\n\nconst optimalPath = function(from, to) {\n\tconst current = from.split('/')\n\tconst target = to.split('/')\n\tcurrent.pop() // ignore filename\n\twhile (current[0] === target[0]) {\n\t\tcurrent.shift()\n\t\ttarget.shift()\n\t}\n\tconst relativePath = current.fill('..').concat(target)\n\tconst absolutePath = to.split('/')\n\treturn relativePath.length < absolutePath.length\n\t\t? relativePath.join('/')\n\t\t: to\n}\n\nconst registerFileCreate = () => {\n\tconst newFileMenuPlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: 'file',\n\t\t\t\tdisplayName: t('text', 'New text document'),\n\t\t\t\ttemplateName: t('text', 'New text document') + '.md',\n\t\t\t\ticonClass: 'icon-filetype-text',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tfileList.createFile(name).then(function(status, data) {\n\t\t\t\t\t\tconst fileInfoModel = new OCA.Files.FileInfoModel(data)\n\t\t\t\t\t\tif (typeof OCA.Viewer !== 'undefined') {\n\t\t\t\t\t\t\tOCA.Files.fileActions.triggerAction('view', fileInfoModel, fileList)\n\t\t\t\t\t\t} else if (typeof OCA.Viewer === 'undefined') {\n\t\t\t\t\t\t\tOCA.Files.fileActions.triggerAction(FILE_ACTION_IDENTIFIER, fileInfoModel, fileList)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newFileMenuPlugin)\n}\n\nconst registerFileActionFallback = () => {\n\tconst sharingToken = document.getElementById('sharingToken') ? document.getElementById('sharingToken').value : null\n\tconst dir = document.getElementById('dir').value\n\n\tif (!sharingToken || dir !== '') {\n\t\tconst ViewerRoot = document.createElement('div')\n\t\tViewerRoot.id = 'text-viewer-fallback'\n\t\tdocument.body.appendChild(ViewerRoot)\n\t\tconst registerAction = (mime) => OCA.Files.fileActions.register(\n\t\t\tmime,\n\t\t\tFILE_ACTION_IDENTIFIER,\n\t\t\tOC.PERMISSION_UPDATE | OC.PERMISSION_READ,\n\t\t\timagePath('core', 'actions/rename'),\n\t\t\t(filename) => {\n\t\t\t\tconst file = window.FileList.findFile(filename)\n\t\t\t\tPromise.all([\n\t\t\t\t\timport('vue'),\n\t\t\t\t\timport(/* webpackChunkName: \"files-modal\" */'./../components/PublicFilesEditor'),\n\t\t\t\t]).then((imports) => {\n\t\t\t\t\tconst path = window.FileList.getCurrentDirectory() + '/' + filename\n\t\t\t\t\tconst Vue = imports[0].default\n\t\t\t\t\tVue.prototype.t = window.t\n\t\t\t\t\tVue.prototype.n = window.n\n\t\t\t\t\tVue.prototype.OCA = window.OCA\n\t\t\t\t\tconst Editor = imports[1].default\n\t\t\t\t\tconst vm = new Vue({\n\t\t\t\t\t\trender: function(h) { // eslint-disable-line\n\t\t\t\t\t\t\tconst self = this\n\t\t\t\t\t\t\treturn h(Editor, {\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\tfileId: file ? file.id : null,\n\t\t\t\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\t\t\t\tshareToken: sharingToken,\n\t\t\t\t\t\t\t\t\trelativePath: path,\n\t\t\t\t\t\t\t\t\tmimeType: file.mimetype,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\t\t\tclose: function() { // eslint-disable-line\n\t\t\t\t\t\t\t\t\t\tself.$destroy()\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tvm.$mount(ViewerRoot)\n\t\t\t\t})\n\t\t\t},\n\t\t\tt('text', 'Edit')\n\t\t)\n\n\t\tfor (let i = 0; i < openMimetypes.length; i++) {\n\t\t\tregisterAction(openMimetypes[i])\n\t\t\tOCA.Files.fileActions.setDefault(openMimetypes[i], FILE_ACTION_IDENTIFIER)\n\t\t}\n\t}\n\n}\n\nconst FilesWorkspacePlugin = {\n\n\tel: null,\n\n\tattach(fileList) {\n\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\treturn\n\t\t}\n\n\t\tthis.el = document.createElement('div')\n\t\tfileList.registerHeader({\n\t\t\tid: 'workspace',\n\t\t\tel: this.el,\n\t\t\trender: this.render.bind(this),\n\t\t\tpriority: 10,\n\t\t})\n\t},\n\n\trender(fileList) {\n\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\treturn\n\t\t}\n\n\t\timport('vue').then((module) => {\n\t\t\tconst Vue = module.default\n\t\t\tthis.el.id = 'files-workspace-wrapper'\n\t\t\tVue.prototype.t = window.t\n\t\t\tVue.prototype.n = window.n\n\t\t\tVue.prototype.OCA = window.OCA\n\t\t\tconst View = Vue.extend(RichWorkspace)\n\t\t\tconst vm = new View({\n\t\t\t\tpropsData: {\n\t\t\t\t\tpath: fileList.getCurrentDirectory(),\n\t\t\t\t},\n\t\t\t\tstore,\n\t\t\t}).$mount(this.el)\n\n\t\t\tfileList.$el.on('urlChanged', data => {\n\t\t\t\tvm.path = data.dir.toString()\n\t\t\t})\n\t\t\tfileList.$el.on('changeDirectory', data => {\n\t\t\t\tvm.path = data.dir.toString()\n\t\t\t})\n\t\t})\n\t},\n}\n\nexport {\n\toptimalPath,\n\tregisterFileActionFallback,\n\tregisterFileCreate,\n\tFilesWorkspacePlugin,\n\tFILE_ACTION_IDENTIFIER,\n}\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst openMimetypesMarkdown = [\n\t'text/markdown',\n]\n\nconst openMimetypesPlainText = [\n\t'text/plain',\n\t'application/cmd',\n\t'application/x-empty',\n\t'application/x-msdos-program',\n\t'application/javascript',\n\t'application/json',\n\t'application/x-perl',\n\t'application/x-php',\n\t'application/x-tex',\n\t'application/xml',\n\t'application/yaml',\n\t'text/css',\n\t'text/csv',\n\t'text/html',\n\t'text/org',\n\t'text/x-c',\n\t'text/x-c++src',\n\t'text/x-h',\n\t'text/x-java-source',\n\t'text/x-ldif',\n\t'text/x-python',\n\t'text/x-shellscript',\n]\n\nconst openMimetypes = [...openMimetypesMarkdown, ...openMimetypesPlainText]\n\nexport {\n\topenMimetypes,\n\topenMimetypesMarkdown,\n\topenMimetypesPlainText,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".menubar[data-v-aa1bf3a8]{--background-blur: blur(10px);position:fixed;position:-webkit-sticky;position:sticky;top:0;display:flex;justify-content:flex-end;z-index:10021;background-color:var(--color-main-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur);max-height:44px;padding-top:3px;padding-bottom:3px}.menubar.autohide[data-v-aa1bf3a8]{visibility:hidden;opacity:0;transition:visibility .2s .4s,opacity .2s .4s}.menubar.autohide.show[data-v-aa1bf3a8]{visibility:visible;opacity:1}.menubar .menubar-icons[data-v-aa1bf3a8]{flex-grow:1;margin-left:calc((100% - 660px)/2)}@media(max-width: 660px){.menubar .menubar-icons[data-v-aa1bf3a8]{margin-left:0}}.menubar[data-v-aa1bf3a8] .action-item__menu ul{max-height:calc(100vh - 88px);overflow:scroll}.menubar button[data-v-aa1bf3a8]{position:relative;width:44px;height:44px;margin:0;background-size:16px;border:0;background-color:transparent;opacity:.5;color:var(--color-main-text);background-position:center center;vertical-align:top}.menubar button[data-v-aa1bf3a8]:hover,.menubar button[data-v-aa1bf3a8]:focus,.menubar button[data-v-aa1bf3a8]:active{background-color:var(--color-background-dark)}.menubar button.is-active[data-v-aa1bf3a8]::before{transform:translateX(-50%);border-radius:100%;position:absolute;background:var(--color-primary-element);bottom:3px;height:6px;width:6px;content:\\\"\\\";left:50%}.menubar button.is-active[data-v-aa1bf3a8],.menubar button[data-v-aa1bf3a8]:hover,.menubar button[data-v-aa1bf3a8]:focus{opacity:1}.menubar button.icon-undo[data-v-aa1bf3a8],.menubar button.icon-redo[data-v-aa1bf3a8]{opacity:.8}.menubar button.icon-undo[data-v-aa1bf3a8]:disabled,.menubar button.icon-redo[data-v-aa1bf3a8]:disabled{opacity:.4}.menubar .submenu[data-v-aa1bf3a8],.menubar .menuitem-emoji[data-v-aa1bf3a8]{display:inline-block;width:44px;height:44px;position:relative;vertical-align:top}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/MenuBar.vue\"],\"names\":[],\"mappings\":\"AAoeA,0BACC,6BAAA,CACA,cAAA,CACA,uBAAA,CACA,eAAA,CACA,KAAA,CACA,YAAA,CACA,wBAAA,CACA,aAAA,CACA,yDAAA,CACA,8CAAA,CACA,sCAAA,CACA,eAAA,CACA,eAAA,CACA,kBAAA,CAEA,mCACC,iBAAA,CACA,SAAA,CACA,6CAAA,CACA,wCACC,kBAAA,CACA,SAAA,CAGF,yCACC,WAAA,CACA,kCAAA,CAED,yBACC,yCACC,aAAA,CAAA,CAGF,gDACC,6BAAA,CACA,eAAA,CAIF,iCACC,iBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,oBAAA,CACA,QAAA,CACA,4BAAA,CACA,UAAA,CACA,4BAAA,CACA,iCAAA,CACA,kBAAA,CACA,sHACC,6CAAA,CAGD,mDACC,0BAAA,CACA,kBAAA,CACA,iBAAA,CACA,uCAAA,CACA,UAAA,CACA,UAAA,CACA,SAAA,CACA,UAAA,CACA,QAAA,CAGD,yHAGC,SAAA,CAGD,sFAEC,UAAA,CAEA,wGACC,UAAA,CAKH,6EACC,oBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.menubar {\\n\\t--background-blur: blur(10px);\\n\\tposition: fixed;\\n\\tposition: -webkit-sticky;\\n\\tposition: sticky;\\n\\ttop: 0;\\n\\tdisplay: flex;\\n\\tjustify-content: flex-end;\\n\\tz-index: 10021; // above modal-header and menububble so menubar is always on top\\n\\tbackground-color: var(--color-main-background-translucent);\\n\\t-webkit-backdrop-filter: var(--background-blur);\\n\\tbackdrop-filter: var(--background-blur);\\n\\tmax-height: 44px; // important for mobile so that the buttons are always inside the container\\n\\tpadding-top:3px;\\n\\tpadding-bottom: 3px;\\n\\n\\t&.autohide {\\n\\t\\tvisibility: hidden;\\n\\t\\topacity: 0;\\n\\t\\ttransition: visibility 0.2s 0.4s, opacity 0.2s 0.4s;\\n\\t\\t&.show {\\n\\t\\t\\tvisibility: visible;\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n\\t.menubar-icons {\\n\\t\\tflex-grow: 1;\\n\\t\\tmargin-left: calc((100% - 660px) / 2);\\n\\t}\\n\\t@media (max-width: 660px) {\\n\\t\\t.menubar-icons {\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t}\\n\\t}\\n\\t&::v-deep .action-item__menu ul {\\n\\t\\tmax-height: calc(100vh - 88px);\\n\\t\\toverflow: scroll;\\n\\t}\\n}\\n\\n.menubar button {\\n\\tposition: relative;\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\tmargin: 0;\\n\\tbackground-size: 16px;\\n\\tborder: 0;\\n\\tbackground-color: transparent;\\n\\topacity: .5;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-position: center center;\\n\\tvertical-align: top;\\n\\t&:hover, &:focus, &:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n\\n\\t&.is-active::before {\\n\\t\\ttransform: translateX(-50%);\\n\\t\\tborder-radius: 100%;\\n\\t\\tposition: absolute;\\n\\t\\tbackground: var(--color-primary-element);\\n\\t\\tbottom: 3px;\\n\\t\\theight: 6px;\\n\\t\\twidth: 6px;\\n\\t\\tcontent: '';\\n\\t\\tleft: 50%;\\n\\n\\t}\\n\\t&.is-active,\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\topacity: 1;\\n\\t}\\n\\n\\t&.icon-undo,\\n\\t&.icon-redo {\\n\\t\\topacity: .8;\\n\\n\\t\\t&:disabled {\\n\\t\\t\\topacity: .4;\\n\\t\\t}\\n\\t}\\n}\\n\\n.menubar .submenu, .menubar .menuitem-emoji {\\n\\tdisplay: inline-block;\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\tposition: relative;\\n\\tvertical-align: top;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".menububble[data-v-1df378e6]{display:flex;z-index:10020;background:var(--color-main-background-translucent);box-shadow:0 1px 5px var(--color-box-shadow);border-radius:var(--border-radius-large);overflow:hidden;padding:0;margin-left:10px;height:44px}.menububble__button[data-v-1df378e6]{display:block;flex-grow:1;border:0;padding:.9rem .7rem;margin:0;border-radius:0;cursor:pointer;background-color:var(--color-main-background);border-right:1px solid var(--color-border)}.menububble__button[data-v-1df378e6]:focus,.menububble__button[data-v-1df378e6]:hover{background-color:var(--color-background-hover);border:0;border-right:1px solid var(--color-border) !important}.menububble__button[data-v-1df378e6]:last-child{border:0 !important}.menububble__buttontext[data-v-1df378e6]{padding:.4rem;padding-right:0}.menububble__form[data-v-1df378e6]{display:flex;align-items:center}.menububble__input[data-v-1df378e6]{font:inherit;border:none;background:transparent;min-width:250px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/MenuBubble.vue\"],\"names\":[],\"mappings\":\"AA4KA,6BACC,YAAA,CACA,aAAA,CACA,mDAAA,CACA,4CAAA,CACA,wCAAA,CACA,eAAA,CACA,SAAA,CACA,gBAAA,CACA,WAAA,CAEA,qCACC,aAAA,CACA,WAAA,CACA,QAAA,CACA,mBAAA,CACA,QAAA,CACA,eAAA,CACA,cAAA,CACA,6CAAA,CACA,0CAAA,CAEA,sFAEC,8CAAA,CACA,QAAA,CACA,qDAAA,CAGD,gDACC,mBAAA,CAIF,yCACC,aAAA,CACA,eAAA,CAGD,mCACC,YAAA,CACA,kBAAA,CAGD,oCACC,YAAA,CACA,WAAA,CACA,sBAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.menububble {\\n\\tdisplay: flex;\\n\\tz-index: 10020;\\n\\tbackground: var(--color-main-background-translucent);\\n\\tbox-shadow: 0 1px 5px var(--color-box-shadow);\\n\\tborder-radius: var(--border-radius-large);\\n\\toverflow: hidden;\\n\\tpadding: 0;\\n\\tmargin-left: 10px;\\n\\theight: 44px;\\n\\n\\t&__button {\\n\\t\\tdisplay: block;\\n\\t\\tflex-grow: 1;\\n\\t\\tborder: 0;\\n\\t\\tpadding: 0.9rem 0.7rem;\\n\\t\\tmargin: 0;\\n\\t\\tborder-radius: 0;\\n\\t\\tcursor: pointer;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tborder-right: 1px solid var(--color-border);\\n\\n\\t\\t&:focus,\\n\\t\\t&:hover {\\n\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-right: 1px solid var(--color-border) !important;\\n\\t\\t}\\n\\n\\t\\t&:last-child {\\n\\t\\t\\tborder: 0 !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__buttontext {\\n\\t\\tpadding: 0.4rem;\\n\\t\\tpadding-right: 0;\\n\\t}\\n\\n\\t&__form {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t}\\n\\n\\t&__input {\\n\\t\\tfont: inherit;\\n\\t\\tborder: none;\\n\\t\\tbackground: transparent;\\n\\t\\tmin-width: 250px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#rich-workspace[data-v-42d14835]{padding:0 50px;margin-bottom:-24px;text-align:left;max-height:0;transition:max-height .5s cubic-bezier(0, 1, 0, 1);z-index:61;position:relative}#rich-workspace.creatable[data-v-42d14835]{min-height:90px}#rich-workspace[data-v-42d14835]:only-child{margin-bottom:0}.empty-workspace[data-v-42d14835]{padding-top:43px;color:var(--color-text-maxcontrast);height:0}#rich-workspace[data-v-42d14835] div[contenteditable=false]{width:100%;padding:0px;background-color:var(--color-main-background);opacity:1;border:none}#rich-workspace[data-v-42d14835] #editor-container{height:100%;position:unset !important;top:auto !important}#rich-workspace[data-v-42d14835] #editor-wrapper{position:unset !important;overflow:visible}#rich-workspace[data-v-42d14835] #editor{overflow:visible !important}#rich-workspace[data-v-42d14835] .content-wrapper{overflow:scroll !important;max-height:calc(40vh - 50px);padding-left:10px;padding-bottom:60px}#rich-workspace[data-v-42d14835] #editor-wrapper .ProseMirror{padding:0px;margin:0}#rich-workspace[data-v-42d14835] .menubar{z-index:61;margin-bottom:-10px}#rich-workspace[data-v-42d14835] .menubar .menubar-icons{margin-left:0}#rich-workspace[data-v-42d14835] .editor__content{margin:0}#rich-workspace.focus[data-v-42d14835]{max-height:50vh}#rich-workspace[data-v-42d14835]:not(.focus){max-height:30vh;position:relative;overflow:hidden}#rich-workspace[data-v-42d14835]:not(.focus):not(.icon-loading):after{content:\\\"\\\";position:absolute;z-index:1;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));width:100%;height:4em}#rich-workspace.dark[data-v-42d14835]:not(.focus):not(.icon-loading):after{background-image:linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background))}@media only screen and (max-width: 1024px){#rich-workspace[data-v-42d14835]:not(.focus){max-height:30vh}}html.ie #rich-workspace[data-v-42d14835] #editor-container{position:initial}html.ie #rich-workspace[data-v-42d14835] #editor-wrapper{position:relative !important;top:auto !important}html.ie #rich-workspace[data-v-42d14835] #editor{display:flex;flex-direction:column;overflow:hidden !important}html.ie #rich-workspace[data-v-42d14835] .menubar{position:relative;overflow:hidden;flex-shrink:0;height:44px;top:auto}html.ie #rich-workspace[data-v-42d14835] #editor>div:nth-child(2){min-height:44px;overflow-x:hidden;overflow-y:auto;flex-shrink:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/RichWorkspace.vue\"],\"names\":[],\"mappings\":\"AA0KA,iCACC,cAAA,CAEA,mBAAA,CACA,eAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,iBAAA,CACA,2CACC,eAAA,CAKF,4CACC,eAAA,CAGD,kCACC,gBAAA,CACA,mCAAA,CACA,QAAA,CAGD,4DACC,UAAA,CACA,WAAA,CACA,6CAAA,CACA,SAAA,CACA,WAAA,CAGD,mDACC,WAAA,CACA,yBAAA,CACA,mBAAA,CAGD,iDACC,yBAAA,CACA,gBAAA,CAGD,yCACC,2BAAA,CAGD,kDACC,0BAAA,CACA,4BAAA,CACA,iBAAA,CACA,mBAAA,CAGD,8DACC,WAAA,CACA,QAAA,CAGD,0CACC,UAAA,CAEA,mBAAA,CAGD,yDACC,aAAA,CAGD,kDACC,QAAA,CAGD,uCACC,eAAA,CAGD,6CACC,eAAA,CACA,iBAAA,CACA,eAAA,CAGD,sEACC,UAAA,CACA,iBAAA,CACA,SAAA,CACA,QAAA,CACA,MAAA,CACA,mBAAA,CACA,iGAAA,CACA,UAAA,CACA,UAAA,CAGD,2EACC,2FAAA,CAGD,2CACC,6CACC,eAAA,CAAA,CAMA,2DACC,gBAAA,CAGD,yDACC,4BAAA,CACA,mBAAA,CAGD,iDACC,YAAA,CACA,qBAAA,CACA,0BAAA,CAGD,kDACC,iBAAA,CACA,eAAA,CACA,aAAA,CACA,WAAA,CACA,QAAA,CAGD,kEACC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#rich-workspace {\\n\\tpadding: 0 50px;\\n\\t/* Slightly reduce vertical space */\\n\\tmargin-bottom: -24px;\\n\\ttext-align: left;\\n\\tmax-height: 0;\\n\\ttransition: max-height 0.5s cubic-bezier(0, 1, 0, 1);\\n\\tz-index: 61;\\n\\tposition: relative;\\n\\t&.creatable {\\n\\t\\tmin-height: 90px;\\n\\t}\\n}\\n\\n/* For subfolders, where there are no Recommendations */\\n#rich-workspace:only-child {\\n\\tmargin-bottom: 0;\\n}\\n\\n.empty-workspace {\\n\\tpadding-top: 43px;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\theight: 0;\\n}\\n\\n#rich-workspace::v-deep div[contenteditable=false] {\\n\\twidth: 100%;\\n\\tpadding: 0px;\\n\\tbackground-color: var(--color-main-background);\\n\\topacity: 1;\\n\\tborder: none;\\n}\\n\\n#rich-workspace::v-deep #editor-container {\\n\\theight: 100%;\\n\\tposition: unset !important;\\n\\ttop: auto !important;\\n}\\n\\n#rich-workspace::v-deep #editor-wrapper {\\n\\tposition: unset !important;\\n\\toverflow: visible;\\n}\\n\\n#rich-workspace::v-deep #editor {\\n\\toverflow: visible !important;\\n}\\n\\n#rich-workspace::v-deep .content-wrapper {\\n\\toverflow: scroll !important;\\n\\tmax-height: calc(40vh - 50px);\\n\\tpadding-left: 10px;\\n\\tpadding-bottom: 60px; /* ensure menububble fits below */\\n}\\n\\n#rich-workspace::v-deep #editor-wrapper .ProseMirror {\\n\\tpadding: 0px;\\n\\tmargin: 0;\\n}\\n\\n#rich-workspace::v-deep .menubar {\\n\\tz-index: 61;\\n\\t/* Slightly reduce vertical space */\\n\\tmargin-bottom: -10px;\\n}\\n\\n#rich-workspace::v-deep .menubar .menubar-icons {\\n\\tmargin-left: 0;\\n}\\n\\n#rich-workspace::v-deep .editor__content {\\n\\tmargin: 0;\\n}\\n\\n#rich-workspace.focus {\\n\\tmax-height: 50vh;\\n}\\n\\n#rich-workspace:not(.focus) {\\n\\tmax-height: 30vh;\\n\\tposition: relative;\\n\\toverflow: hidden;\\n}\\n\\n#rich-workspace:not(.focus):not(.icon-loading):after {\\n\\tcontent: '';\\n\\tposition: absolute;\\n\\tz-index: 1;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tpointer-events: none;\\n\\tbackground-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));\\n\\twidth: 100%;\\n\\theight: 4em;\\n}\\n\\n#rich-workspace.dark:not(.focus):not(.icon-loading):after {\\n\\tbackground-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background));\\n}\\n\\n@media only screen and (max-width: 1024px) {\\n\\t#rich-workspace:not(.focus) {\\n\\t\\tmax-height: 30vh;\\n\\t}\\n}\\n\\nhtml.ie {\\n\\t#rich-workspace::v-deep {\\n\\t\\t#editor-container {\\n\\t\\t\\tposition: initial;\\n\\t\\t}\\n\\n\\t\\t#editor-wrapper {\\n\\t\\t\\tposition: relative !important;\\n\\t\\t\\ttop: auto !important;\\n\\t\\t}\\n\\n\\t\\t#editor {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\toverflow: hidden !important;\\n\\t\\t}\\n\\n\\t\\t.menubar {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\tflex-shrink: 0;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\ttop: auto;\\n\\t\\t}\\n\\n\\t\\t#editor > div:nth-child(2) {\\n\\t\\t\\tmin-height: 44px;\\n\\t\\t\\toverflow-x: hidden;\\n\\t\\t\\toverflow-y: auto;\\n\\t\\t\\tflex-shrink: 1;\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"menubar\",class:{ 'show': _vm.isVisible, 'autohide': _vm.autohide }},[_c('input',{ref:\"imageFileInput\",staticClass:\"hidden-visually\",attrs:{\"type\":\"file\",\"accept\":\"image/*\",\"aria-hidden\":\"true\"},on:{\"change\":_vm.onImageUploadFilePicked}}),_vm._v(\" \"),(_vm.isRichEditor)?_c('div',{ref:\"menubar\",staticClass:\"menubar-icons\"},[_vm._l((_vm.allIcons),function(icon,$index){return [(icon.class === 'icon-emoji')?_c('EmojiPicker',{key:icon.label,staticClass:\"menuitem-emoji\",on:{\"select\":function (emojiObject) { return _vm.addEmoji(icon, emojiObject); }}},[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.t('text', 'Insert emoji')),expression:\"t('text', 'Insert emoji')\"}],staticClass:\"icon-emoji\",attrs:{\"aria-label\":_vm.t('text', 'Insert emoji'),\"aria-haspopup\":true},on:{\"click\":function($event){return _vm.toggleChildMenu(icon)}}})]):(icon.class === 'icon-image')?_c('Actions',{key:icon.label,ref:\"imageActions\",refInFor:true,staticClass:\"submenu\",attrs:{\"default-icon\":'icon-image'},on:{\"open\":function($event){return _vm.toggleChildMenu(icon)},\"close\":function($event){_vm.onImageActionClose; _vm.toggleChildMenu(icon)}}},[_c('button',{class:{ 'icon-image': true, 'loading-small': _vm.uploadingImage },attrs:{\"slot\":\"icon\",\"title\":icon.label,\"aria-label\":icon.label,\"aria-haspopup\":true},slot:\"icon\"}),_vm._v(\" \"),_c('ActionButton',{attrs:{\"icon\":\"icon-upload\",\"close-after-click\":true,\"disabled\":_vm.uploadingImage},on:{\"click\":function($event){return _vm.onUploadImage()}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Upload from computer'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(!_vm.isPublic)?_c('ActionButton',{attrs:{\"icon\":\"icon-folder\",\"close-after-click\":true,\"disabled\":_vm.uploadingImage},on:{\"click\":function($event){return _vm.showImagePrompt()}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Insert from Files'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.showImageLinkPrompt)?_c('ActionButton',{attrs:{\"icon\":\"icon-link\",\"close-after-click\":false,\"disabled\":_vm.uploadingImage},on:{\"click\":function($event){_vm.showImageLinkPrompt = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Insert from link'))+\"\\n\\t\\t\\t\\t\")]):_c('ActionInput',{attrs:{\"icon\":\"icon-link\",\"value\":_vm.imageLink},on:{\"update:value\":_vm.onImageLinkUpdateValue,\"submit\":function($event){return _vm.onImageLinkSubmit()}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Image link to insert'))+\"\\n\\t\\t\\t\\t\")])],1):(icon.class)?_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:($index < _vm.iconCount),expression:\"$index < iconCount\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.getLabelAndKeys(icon)),expression:\"getLabelAndKeys(icon)\"}],key:icon.label,class:_vm.getIconClasses(icon),attrs:{\"disabled\":_vm.disabled(icon)},on:{\"click\":function($event){return _vm.clickIcon(icon)}}}):[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:($index < _vm.iconCount || !icon.class),expression:\"$index < iconCount || !icon.class\"},{name:\"click-outside\",rawName:\"v-click-outside\",value:(function () { return _vm.hideChildMenu(icon); }),expression:\"() => hideChildMenu(icon)\"}],key:icon.label,staticClass:\"submenu\"},[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.getLabelAndKeys(icon)),expression:\"getLabelAndKeys(icon)\"}],class:_vm.childIconClasses(icon.children ),on:{\"click\":function($event){$event.preventDefault();return _vm.toggleChildMenu(icon)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu menu-center\",class:{open: _vm.isChildMenuVisible(icon)}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.childPopoverMenu(icon.children, icon)}})],1)])]]}),_vm._v(\" \"),_c('Actions',{on:{\"open\":function($event){return _vm.toggleChildMenu({ label: 'Remaining Actions' })},\"close\":function($event){return _vm.toggleChildMenu({ label: 'Remaining Actions' })}}},[_vm._l((_vm.allIcons),function(icon,$index){return [(icon.class && _vm.isHiddenInMenu($index) && !(icon.class === 'icon-emoji'))?_c('ActionButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.getKeys(icon)),expression:\"getKeys(icon)\"}],key:icon.class,attrs:{\"icon\":icon.class,\"close-after-click\":true},on:{\"click\":function($event){return _vm.clickIcon(icon)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(icon.label)+\"\\n\\t\\t\\t\\t\")]):_vm._e()]})],2)],2):_vm._e(),_vm._v(\" \"),_vm._t(\"default\",function(){return [_vm._v(\"\\n\\t\\tLeft side\\n\\t\")]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default [\n\t{\n\t\tlabel: t('text', 'Undo'),\n\t\tkeyChar: 'z',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-undo',\n\t\taction: (command) => command.undo(),\n\t},\n\t{\n\t\tlabel: t('text', 'Redo'),\n\t\tkeyChar: 'y',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-redo',\n\t\taction: (command) => command.redo(),\n\t},\n\t{\n\t\tlabel: t('text', 'Bold'),\n\t\tkeyChar: 'b',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-bold',\n\t\tisActive: 'strong',\n\t\taction: (command) => {\n\t\t\treturn command.toggleBold()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Italic'),\n\t\tkeyChar: 'i',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-italic',\n\t\tisActive: 'em',\n\t\taction: (command) => {\n\t\t\treturn command.toggleItalic()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Underline'),\n\t\tkeyChar: 'u',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-underline',\n\t\tisActive: 'underline',\n\t\taction: (command) => {\n\t\t\treturn command.toggleUnderline()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Strikethrough'),\n\t\tkeyChar: 'd',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-strike',\n\t\tisActive: 'strike',\n\t\taction: (command) => {\n\t\t\treturn command.toggleStrike()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Headings'),\n\t\tkeyChar: '1…6',\n\t\tkeyModifiers: ['ctrl', 'shift'],\n\t\tvisible: false,\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 1'),\n\t\t\t\tclass: 'icon-h1',\n\t\t\t\tisActive: ['heading', { level: 1 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 1 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 2'),\n\t\t\t\tclass: 'icon-h2',\n\t\t\t\tisActive: ['heading', { level: 2 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 2 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 3'),\n\t\t\t\tclass: 'icon-h3',\n\t\t\t\tisActive: ['heading', { level: 3 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 3 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 4'),\n\t\t\t\tclass: 'icon-h4',\n\t\t\t\tisActive: ['heading', { level: 4 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 4 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 5'),\n\t\t\t\tclass: 'icon-h5',\n\t\t\t\tisActive: ['heading', { level: 5 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 5 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 6'),\n\t\t\t\tclass: 'icon-h6',\n\t\t\t\tisActive: ['heading', { level: 6 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 6 })\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tlabel: t('text', 'Unordered list'),\n\t\tkeyChar: '8',\n\t\tkeyModifiers: ['ctrl', 'shift'],\n\t\tclass: 'icon-ul',\n\t\tisActive: 'bulletList',\n\t\taction: (command) => {\n\t\t\treturn command.bulletListItem()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Ordered list'),\n\t\tkeyChar: '9',\n\t\tkeyModifiers: ['ctrl', 'shift'],\n\t\tclass: 'icon-ol',\n\t\tisActive: 'orderedList',\n\t\taction: (command) => {\n\t\t\treturn command.toggleOrderedList()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'ToDo list'),\n\t\tclass: 'icon-checkmark',\n\t\t// Do we want to indicate that the current item is a todo item?\n\t\t// isActive: ['listItem', { type: 1 }],\n\t\taction: (command) => command.todo_item(),\n\t},\n\t{\n\t\tlabel: t('text', 'Blockquote'),\n\t\tkeyChar: '>',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-quote',\n\t\tisActive: 'blockquote',\n\t\taction: (command) => {\n\t\t\treturn command.toggleBlockquote()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Code block'),\n\t\tclass: 'icon-code',\n\t\tisActive: 'codeBlock',\n\t\taction: (command) => {\n\t\t\treturn command.toggleCodeBlock()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Emoji picker'),\n\t\tclass: 'icon-emoji',\n\t\taction: (command, emojiObject) => {\n\t\t\treturn command.emoji(emojiObject)\n\t\t},\n\t},\n]\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"menubar\" :class=\"{ 'show': isVisible, 'autohide': autohide }\">\n\t\t<input\n\t\t\tref=\"imageFileInput\"\n\t\t\ttype=\"file\"\n\t\t\taccept=\"image/*\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclass=\"hidden-visually\"\n\t\t\t@change=\"onImageUploadFilePicked\">\n\t\t<div v-if=\"isRichEditor\" ref=\"menubar\" class=\"menubar-icons\">\n\t\t\t<template v-for=\"(icon, $index) in allIcons\">\n\t\t\t\t<EmojiPicker v-if=\"icon.class === 'icon-emoji'\"\n\t\t\t\t\t:key=\"icon.label\"\n\t\t\t\t\tclass=\"menuitem-emoji\"\n\t\t\t\t\t@select=\"emojiObject => addEmoji(icon, emojiObject)\">\n\t\t\t\t\t<button v-tooltip=\"t('text', 'Insert emoji')\"\n\t\t\t\t\t\tclass=\"icon-emoji\"\n\t\t\t\t\t\t:aria-label=\"t('text', 'Insert emoji')\"\n\t\t\t\t\t\t:aria-haspopup=\"true\"\n\t\t\t\t\t\t@click=\"toggleChildMenu(icon)\" />\n\t\t\t\t</EmojiPicker>\n\t\t\t\t<Actions v-else-if=\"icon.class === 'icon-image'\"\n\t\t\t\t\t:key=\"icon.label\"\n\t\t\t\t\tref=\"imageActions\"\n\t\t\t\t\tclass=\"submenu\"\n\t\t\t\t\t:default-icon=\"'icon-image'\"\n\t\t\t\t\t@open=\"toggleChildMenu(icon)\"\n\t\t\t\t\t@close=\"onImageActionClose; toggleChildMenu(icon)\">\n\t\t\t\t\t<button slot=\"icon\"\n\t\t\t\t\t\t:class=\"{ 'icon-image': true, 'loading-small': uploadingImage }\"\n\t\t\t\t\t\t:title=\"icon.label\"\n\t\t\t\t\t\t:aria-label=\"icon.label\"\n\t\t\t\t\t\t:aria-haspopup=\"true\" />\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\ticon=\"icon-upload\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:disabled=\"uploadingImage\"\n\t\t\t\t\t\t@click=\"onUploadImage()\">\n\t\t\t\t\t\t{{ t('text', 'Upload from computer') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton v-if=\"!isPublic\"\n\t\t\t\t\t\ticon=\"icon-folder\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:disabled=\"uploadingImage\"\n\t\t\t\t\t\t@click=\"showImagePrompt()\">\n\t\t\t\t\t\t{{ t('text', 'Insert from Files') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton v-if=\"!showImageLinkPrompt\"\n\t\t\t\t\t\ticon=\"icon-link\"\n\t\t\t\t\t\t:close-after-click=\"false\"\n\t\t\t\t\t\t:disabled=\"uploadingImage\"\n\t\t\t\t\t\t@click=\"showImageLinkPrompt = true\">\n\t\t\t\t\t\t{{ t('text', 'Insert from link') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionInput v-else\n\t\t\t\t\t\ticon=\"icon-link\"\n\t\t\t\t\t\t:value=\"imageLink\"\n\t\t\t\t\t\t@update:value=\"onImageLinkUpdateValue\"\n\t\t\t\t\t\t@submit=\"onImageLinkSubmit()\">\n\t\t\t\t\t\t{{ t('text', 'Image link to insert') }}\n\t\t\t\t\t</ActionInput>\n\t\t\t\t</Actions>\n\t\t\t\t<button v-else-if=\"icon.class\"\n\t\t\t\t\tv-show=\"$index < iconCount\"\n\t\t\t\t\t:key=\"icon.label\"\n\t\t\t\t\tv-tooltip=\"getLabelAndKeys(icon)\"\n\t\t\t\t\t:class=\"getIconClasses(icon)\"\n\t\t\t\t\t:disabled=\"disabled(icon)\"\n\t\t\t\t\t@click=\"clickIcon(icon)\" />\n\t\t\t\t<template v-else>\n\t\t\t\t\t<div v-show=\"$index < iconCount || !icon.class\"\n\t\t\t\t\t\t:key=\"icon.label\"\n\t\t\t\t\t\tv-click-outside=\"() => hideChildMenu(icon)\"\n\t\t\t\t\t\tclass=\"submenu\">\n\t\t\t\t\t\t<button v-tooltip=\"getLabelAndKeys(icon)\"\n\t\t\t\t\t\t\t:class=\"childIconClasses(icon.children, )\"\n\t\t\t\t\t\t\t@click.prevent=\"toggleChildMenu(icon)\" />\n\t\t\t\t\t\t<div :class=\"{open: isChildMenuVisible(icon)}\" class=\"popovermenu menu-center\">\n\t\t\t\t\t\t\t<PopoverMenu :menu=\"childPopoverMenu(icon.children, icon)\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</template>\n\t\t\t<Actions\n\t\t\t\t@open=\"toggleChildMenu({ label: 'Remaining Actions' })\"\n\t\t\t\t@close=\"toggleChildMenu({ label: 'Remaining Actions' })\">\n\t\t\t\t<template v-for=\"(icon, $index) in allIcons\">\n\t\t\t\t\t<ActionButton v-if=\"icon.class && isHiddenInMenu($index) && !(icon.class === 'icon-emoji')\"\n\t\t\t\t\t\t:key=\"icon.class\"\n\t\t\t\t\t\tv-tooltip=\"getKeys(icon)\"\n\t\t\t\t\t\t:icon=\"icon.class\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t@click=\"clickIcon(icon)\">\n\t\t\t\t\t\t{{ icon.label }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<!--<template v-else-if=\"!icon.class && isHiddenInMenu($index)\">\n\t\t\t\t\t\t<ActionButton v-for=\"childIcon in icon.children\"\n\t\t\t\t\t\t\t:key=\"childIcon.class\"\n\t\t\t\t\t\t\t:icon=\"childIcon.class\"\n\t\t\t\t\t\t\t@click=\"clickIcon(childIcon)\">\n\t\t\t\t\t\t\tv-tooltip=\"getKeys(childIcon)\"\n\t\t\t\t\t\t\t{{ childIcon.label }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t</template>-->\n\t\t\t\t</template>\n\t\t\t</Actions>\n\t\t</div>\n\t\t<slot>\n\t\t\tLeft side\n\t\t</slot>\n\t</div>\n</template>\n\n<script>\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport menuBarIcons from './../mixins/menubar'\nimport isMobile from './../mixins/isMobile'\n\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ActionInput from '@nextcloud/vue/dist/Components/ActionInput'\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport EmojiPicker from '@nextcloud/vue/dist/Components/EmojiPicker'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showError } from '@nextcloud/dialogs'\n\nconst imageMimes = [\n\t'image/png',\n\t'image/jpeg',\n\t'image/jpg',\n\t'image/gif',\n\t'image/x-xbitmap',\n\t'image/x-ms-bmp',\n\t'image/bmp',\n\t'image/svg+xml',\n\t'image/webp',\n]\n\nexport default {\n\tname: 'MenuBar',\n\tcomponents: {\n\t\tActionButton,\n\t\tActionInput,\n\t\tPopoverMenu,\n\t\tActions,\n\t\tEmojiPicker,\n\t},\n\tdirectives: {\n\t\tTooltip,\n\t\tClickOutside,\n\t},\n\tmixins: [\n\t\tisMobile,\n\t],\n\tprops: {\n\t\teditor: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsyncService: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tisRichEditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tautohide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisPublic: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfilePath: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tfileId: {\n\t\t\ttype: Number,\n\t\t\trequired: false,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\twindowWidth: 0,\n\t\t\twindowHeight: 0,\n\t\t\tforceRecompute: 0,\n\t\t\tsubmenuVisibility: {},\n\t\t\tlastImagePath: null,\n\t\t\tshowImageLinkPrompt: false,\n\t\t\tuploadingImage: false,\n\t\t\timageLink: '',\n\t\t\ticons: [...menuBarIcons],\n\t\t}\n\t},\n\tcomputed: {\n\t\tisHiddenInMenu() {\n\t\t\treturn ($index) => $index - this.iconCount >= 0\n\t\t},\n\t\tgetIconClasses() {\n\t\t\treturn (icon) => {\n\t\t\t\tconst classes = {}\n\t\t\t\tclasses[icon.class] = true\n\t\t\t\tclasses['is-active'] = this.isActive(icon)\n\t\t\t\treturn classes\n\t\t\t}\n\t\t},\n\t\tisActive() {\n\t\t\treturn ({ isActive }) => {\n\t\t\t\tif (!isActive) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tconst args = Array.isArray(isActive) ? isActive : [isActive]\n\t\t\t\treturn this.editor.isActive(...args)\n\t\t\t}\n\t\t},\n\t\tisVisible() {\n\t\t\treturn this.editor.isFocused\n\t\t\t\t|| Object.values(this.submenuVisibility).find((v) => v)\n\t\t},\n\t\tdisabled() {\n\t\t\treturn (menuItem) => {\n\t\t\t\treturn menuItem.action && !menuItem.action(this.editor.can())\n\t\t\t}\n\t\t},\n\t\tisChildMenuVisible() {\n\t\t\treturn (icon) => {\n\t\t\t\treturn Object.prototype.hasOwnProperty.call(this.submenuVisibility, icon.label) ? this.submenuVisibility[icon.label] : false\n\t\t\t}\n\t\t},\n\t\tallIcons() {\n\t\t\treturn [...this.icons, {\n\t\t\t\tlabel: t('text', 'Insert image'),\n\t\t\t\tclass: 'icon-image',\n\t\t\t}, {\n\t\t\t\tlabel: t('text', 'Formatting help'),\n\t\t\t\tclass: 'icon-info',\n\t\t\t\tclick: () => {\n\t\t\t\t\tthis.$emit('show-help')\n\t\t\t\t},\n\t\t\t}]\n\t\t},\n\t\tchildPopoverMenu() {\n\t\t\treturn (icons, parent) => {\n\t\t\t\treturn icons.map(icon => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t// text: this.getLabelAndKeys(icons[index]),\n\t\t\t\t\t\ttext: icon.label,\n\t\t\t\t\t\ticon: icon.class,\n\t\t\t\t\t\tactive: this.isActive(icon),\n\t\t\t\t\t\taction: () => {\n\t\t\t\t\t\t\tthis.clickIcon(icon)\n\t\t\t\t\t\t\tthis.hideChildMenu(parent)\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tchildIconClasses() {\n\t\t\treturn (icons) => {\n\t\t\t\tconst icon = this.childIcon(icons)\n\t\t\t\treturn this.getIconClasses(icon)\n\t\t\t}\n\t\t},\n\t\tchildIcon() {\n\t\t\treturn (icons) => icons.find(icon => this.isActive(icon)) || icons[0]\n\t\t},\n\t\ticonCount() {\n\t\t\tthis.forceRecompute // eslint-disable-line\n\t\t\tthis.windowWidth // eslint-disable-line\n\t\t\tconst menuBarWidth = this.$refs.menubar && this.$refs.menubar.clientWidth > 200 ? this.$refs.menubar.clientWidth : 200\n\t\t\tconst iconCount = Math.max((Math.floor(menuBarWidth / 44) - 2), 0)\n\t\t\treturn iconCount - 1\n\t\t},\n\t\timagePath() {\n\t\t\treturn this.lastImagePath\n\t\t\t\t|| this.filePath.split('/').slice(0, -1).join('/')\n\t\t},\n\t},\n\tmounted() {\n\t\twindow.addEventListener('resize', this.getWindowWidth)\n\t\tthis.checkInterval = setInterval(() => {\n\t\t\tconst isWidthAvailable = (this.$refs.menubar && this.$refs.menubar.clientWidth > 0)\n\t\t\tif (this.isRichEditor && isWidthAvailable) {\n\t\t\t\tthis.redrawMenuBar()\n\t\t\t}\n\t\t\tif (!this.isRichEditor || isWidthAvailable) {\n\t\t\t\tclearInterval(this.checkInterval)\n\t\t\t}\n\t\t}, 100)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this.getWindowWidth)\n\t},\n\tmethods: {\n\t\tredrawMenuBar() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.getWindowWidth()\n\t\t\t\tthis.forceRecompute++\n\t\t\t})\n\t\t},\n\t\trefocus() {\n\t\t\tthis.editor.chain().focus().run()\n\t\t},\n\t\tclickIcon(icon) {\n\t\t\tif (icon.click) {\n\t\t\t\treturn icon.click()\n\t\t\t}\n\t\t\t// Some actions run themselves.\n\t\t\t// others still need to have .run() called upon them.\n\t\t\tconst action = icon.action(this.editor.chain().focus())\n\t\t\taction && action.run()\n\t\t},\n\t\tgetWindowWidth(event) {\n\t\t\tthis.windowWidth = document.documentElement.clientWidth\n\t\t},\n\t\tgetWindowHeight(event) {\n\t\t\tthis.windowHeight = document.documentElement.clientHeight\n\t\t},\n\t\thideChildMenu({ label }) {\n\t\t\tthis.$set(this.submenuVisibility, label, false)\n\t\t},\n\t\ttoggleChildMenu({ label }) {\n\t\t\tconst lastValue = Object.prototype.hasOwnProperty.call(this.submenuVisibility, label) ? this.submenuVisibility[label] : false\n\t\t\tthis.$set(this.submenuVisibility, label, !lastValue)\n\t\t\tif (lastValue) {\n\t\t\t\tthis.refocus()\n\t\t\t}\n\t\t},\n\t\tonImageActionClose() {\n\t\t\tthis.showImageLinkPrompt = false\n\t\t},\n\t\tonUploadImage() {\n\t\t\tthis.$refs.imageFileInput.click()\n\t\t},\n\t\tonImageUploadFilePicked(event) {\n\t\t\tthis.uploadingImage = true\n\t\t\tconst files = event.target.files\n\t\t\tconst image = files[0]\n\t\t\tif (!imageMimes.includes(image.type)) {\n\t\t\t\tshowError(t('text', 'Image format not supported'))\n\t\t\t\tthis.uploadingImage = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Clear input to ensure that the change event will be emitted if\n\t\t\t// the same file is picked again.\n\t\t\tevent.target.value = ''\n\n\t\t\tthis.syncService.uploadImage(image).then((response) => {\n\t\t\t\tthis.insertAttachmentImage(response.data?.name, response.data?.id)\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(error?.response?.data?.error)\n\t\t\t}).then(() => {\n\t\t\t\tthis.uploadingImage = false\n\t\t\t})\n\t\t},\n\t\tonImageLinkUpdateValue(newImageLink) {\n\t\t\t// this avoids the input being reset on each file polling\n\t\t\tthis.imageLink = newImageLink\n\t\t},\n\t\tonImageLinkSubmit() {\n\t\t\tif (!this.imageLink) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.uploadingImage = true\n\t\t\tthis.showImageLinkPrompt = false\n\t\t\tthis.$refs.imageActions[0].closeMenu()\n\n\t\t\tthis.syncService.insertImageLink(this.imageLink).then((response) => {\n\t\t\t\tthis.insertAttachmentImage(response.data?.name, response.data?.id)\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(error?.response?.data?.error)\n\t\t\t}).then(() => {\n\t\t\t\tthis.uploadingImage = false\n\t\t\t\tthis.imageLink = ''\n\t\t\t})\n\t\t},\n\t\tonImagePathSubmit(imagePath) {\n\t\t\tthis.uploadingImage = true\n\t\t\tthis.$refs.imageActions[0].closeMenu()\n\n\t\t\tthis.syncService.insertImageFile(imagePath).then((response) => {\n\t\t\t\tthis.insertAttachmentImage(response.data?.name, response.data?.id)\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(error?.response?.data?.error)\n\t\t\t}).then(() => {\n\t\t\t\tthis.uploadingImage = false\n\t\t\t})\n\t\t},\n\t\tshowImagePrompt() {\n\t\t\tconst currentUser = getCurrentUser()\n\t\t\tif (!currentUser) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tOC.dialogs.filepicker(t('text', 'Insert an image'), (file) => {\n\t\t\t\tthis.onImagePathSubmit(file)\n\t\t\t}, false, [], true, undefined, this.imagePath)\n\t\t},\n\t\tinsertAttachmentImage(name, fileId) {\n\t\t\tconst src = 'text://image?imageFileName=' + encodeURIComponent(name)\n\t\t\t// simply get rid of brackets to make sure link text is valid\n\t\t\t// as it does not need to be unique and matching the real file name\n\t\t\tconst alt = name.replaceAll(/[[\\]]/g, '')\n\t\t\tthis.editor.chain().setImage({ src, alt }).focus().run()\n\t\t},\n\t\toptimalPathTo(targetFile) {\n\t\t\tconst absolutePath = targetFile.split('/')\n\t\t\tconst relativePath = this.relativePathTo(targetFile).split('/')\n\t\t\treturn relativePath.length < absolutePath.length\n\t\t\t\t? relativePath.join('/')\n\t\t\t\t: targetFile\n\t\t},\n\t\trelativePathTo(targetFile) {\n\t\t\tconst current = this.filePath.split('/')\n\t\t\tconst target = targetFile.split('/')\n\t\t\tcurrent.pop() // ignore filename\n\t\t\twhile (current[0] === target[0]) {\n\t\t\t\tcurrent.shift()\n\t\t\t\ttarget.shift()\n\t\t\t}\n\t\t\treturn current.fill('..').concat(target).join('/')\n\t\t},\n\t\taddEmoji(icon, emojiObject) {\n\t\t\treturn icon.action(this.editor.chain(), emojiObject)\n\t\t\t\t.focus()\n\t\t\t\t.run()\n\t\t},\n\t\tkeysString(keyChar, modifiers = []) {\n\t\t\tconst translations = {\n\t\t\t\tctrl: t('text', 'Ctrl'),\n\t\t\t\talt: t('text', 'Alt'),\n\t\t\t\tshift: t('text', 'Shift'),\n\t\t\t}\n\t\t\treturn Object.entries(translations)\n\t\t\t\t.filter(([k, v]) => modifiers.includes(k))\n\t\t\t\t.map(([k, v]) => v)\n\t\t\t\t.concat(keyChar.toUpperCase())\n\t\t\t\t.join('+')\n\t\t},\n\t\tgetKeys(icon) {\n\t\t\treturn (icon.keyChar && !this.isMobile)\n\t\t\t\t? `(${this.keysString(icon.keyChar, icon.keyModifiers)})`\n\t\t\t\t: ''\n\t\t},\n\t\tgetLabelAndKeys(icon) {\n\t\t\treturn [icon.label, this.getKeys(icon)].join(' ')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.menubar {\n\t\t--background-blur: blur(10px);\n\t\tposition: fixed;\n\t\tposition: -webkit-sticky;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tdisplay: flex;\n\t\tjustify-content: flex-end;\n\t\tz-index: 10021; // above modal-header and menububble so menubar is always on top\n\t\tbackground-color: var(--color-main-background-translucent);\n\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\tbackdrop-filter: var(--background-blur);\n\t\tmax-height: 44px; // important for mobile so that the buttons are always inside the container\n\t\tpadding-top:3px;\n\t\tpadding-bottom: 3px;\n\n\t\t&.autohide {\n\t\t\tvisibility: hidden;\n\t\t\topacity: 0;\n\t\t\ttransition: visibility 0.2s 0.4s, opacity 0.2s 0.4s;\n\t\t\t&.show {\n\t\t\t\tvisibility: visible;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t\t.menubar-icons {\n\t\t\tflex-grow: 1;\n\t\t\tmargin-left: calc((100% - 660px) / 2);\n\t\t}\n\t\t@media (max-width: 660px) {\n\t\t\t.menubar-icons {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t}\n\t\t&::v-deep .action-item__menu ul {\n\t\t\tmax-height: calc(100vh - 88px);\n\t\t\toverflow: scroll;\n\t\t}\n\t}\n\n\t.menubar button {\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tmargin: 0;\n\t\tbackground-size: 16px;\n\t\tborder: 0;\n\t\tbackground-color: transparent;\n\t\topacity: .5;\n\t\tcolor: var(--color-main-text);\n\t\tbackground-position: center center;\n\t\tvertical-align: top;\n\t\t&:hover, &:focus, &:active {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t&.is-active::before {\n\t\t\ttransform: translateX(-50%);\n\t\t\tborder-radius: 100%;\n\t\t\tposition: absolute;\n\t\t\tbackground: var(--color-primary-element);\n\t\t\tbottom: 3px;\n\t\t\theight: 6px;\n\t\t\twidth: 6px;\n\t\t\tcontent: '';\n\t\t\tleft: 50%;\n\n\t\t}\n\t\t&.is-active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t&.icon-undo,\n\t\t&.icon-redo {\n\t\t\topacity: .8;\n\n\t\t\t&:disabled {\n\t\t\t\topacity: .4;\n\t\t\t}\n\t\t}\n\t}\n\n\t.menubar .submenu, .menubar .menuitem-emoji {\n\t\tdisplay: inline-block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tposition: relative;\n\t\tvertical-align: top;\n\t}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBar.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBar.vue?vue&type=style&index=0&id=aa1bf3a8&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBar.vue?vue&type=style&index=0&id=aa1bf3a8&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MenuBar.vue?vue&type=template&id=aa1bf3a8&scoped=true&\"\nimport script from \"./MenuBar.vue?vue&type=script&lang=js&\"\nexport * from \"./MenuBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MenuBar.vue?vue&type=style&index=0&id=aa1bf3a8&scoped=true&lang=scss&\"\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 \"aa1bf3a8\",\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('BubbleMenu',{staticClass:\"menububble\",attrs:{\"editor\":_vm.editor,\"tippy-options\":{ onHide: _vm.hideLinkMenu, duration: 200, placement: 'bottom' }}},[(_vm.linkMenuIsActive)?_c('form',{staticClass:\"menububble__form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.setLinkUrl()}}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.linkUrl),expression:\"linkUrl\"}],ref:\"linkInput\",staticClass:\"menububble__input\",attrs:{\"type\":\"text\",\"placeholder\":\"https://\"},domProps:{\"value\":(_vm.linkUrl)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.hideLinkMenu.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.linkUrl=$event.target.value}}}),_vm._v(\" \"),_c('button',{staticClass:\"menububble__button icon-confirm\",attrs:{\"type\":\"button\",\"tabindex\":\"0\"},on:{\"click\":function($event){return _vm.setLinkUrl()}}})]):[_c('button',{staticClass:\"menububble__button\",class:{ 'is-active': _vm.isActive('link') },on:{\"click\":function($event){return _vm.showLinkMenu()}}},[_c('span',{staticClass:\"icon-link\"}),_vm._v(\" \"),_c('span',{staticClass:\"menububble__buttontext\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.isActive('link') ? _vm.t('text', 'Update Link') : _vm.t('text', 'Add Link'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),(!_vm.isUsingDirectEditing)?_c('button',{staticClass:\"menububble__button\",class:{ 'is-active': _vm.isActive('link') },on:{\"click\":function($event){return _vm.selectFile()}}},[_c('span',{staticClass:\"icon-file\"}),_vm._v(\" \"),_c('span',{staticClass:\"menububble__buttontext\"},[_vm._v(_vm._s(_vm.t('text', 'Link file')))])]):_vm._e(),_vm._v(\" \"),(_vm.isActive('link'))?_c('button',{staticClass:\"menububble__button\",class:{ 'is-active': _vm.isActive('link') },on:{\"click\":function($event){return _vm.removeLinkUrl()}}},[_c('span',{staticClass:\"icon-delete\"}),_vm._v(\" \"),_c('span',{staticClass:\"menububble__buttontext\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Remove Link'))+\"\\n\\t\\t\\t\")])]):_vm._e()]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<BubbleMenu\n\t\t:editor=\"editor\"\n\t\t:tippy-options=\"{ onHide: hideLinkMenu, duration: 200, placement: 'bottom' }\"\n\t\tclass=\"menububble\">\n\t\t<form v-if=\"linkMenuIsActive\" class=\"menububble__form\" @submit.prevent=\"setLinkUrl()\">\n\t\t\t<input ref=\"linkInput\"\n\t\t\t\tv-model=\"linkUrl\"\n\t\t\t\tclass=\"menububble__input\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tplaceholder=\"https://\"\n\t\t\t\t@keydown.esc=\"hideLinkMenu\">\n\t\t\t<button class=\"menububble__button icon-confirm\"\n\t\t\t\ttype=\"button\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@click=\"setLinkUrl()\" />\n\t\t</form>\n\n\t\t<template v-else>\n\t\t\t<button\n\t\t\t\tclass=\"menububble__button\"\n\t\t\t\t:class=\"{ 'is-active': isActive('link') }\"\n\t\t\t\t@click=\"showLinkMenu()\">\n\t\t\t\t<span class=\"icon-link\" />\n\t\t\t\t<span class=\"menububble__buttontext\">\n\t\t\t\t\t{{ isActive('link') ? t('text', 'Update Link') : t('text', 'Add Link') }}\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t\t<button v-if=\"!isUsingDirectEditing\"\n\t\t\t\tclass=\"menububble__button\"\n\t\t\t\t:class=\"{ 'is-active': isActive('link') }\"\n\t\t\t\t@click=\"selectFile()\">\n\t\t\t\t<span class=\"icon-file\" />\n\t\t\t\t<span class=\"menububble__buttontext\">{{ t('text', 'Link file') }}</span>\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tv-if=\"isActive('link')\"\n\t\t\t\tclass=\"menububble__button\"\n\t\t\t\t:class=\"{ 'is-active': isActive('link') }\"\n\t\t\t\t@click=\"removeLinkUrl()\">\n\t\t\t\t<span class=\"icon-delete\" />\n\t\t\t\t<span class=\"menububble__buttontext\">\n\t\t\t\t\t{{ t('text', 'Remove Link') }}\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t</template>\n\t</BubbleMenu>\n</template>\n\n<script>\nimport { BubbleMenu } from '@tiptap/vue-2'\nimport { getMarkAttributes } from '@tiptap/core'\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { optimalPath } from './../helpers/files'\nimport { loadState } from '@nextcloud/initial-state'\n\nexport default {\n\tname: 'MenuBubble',\n\tcomponents: {\n\t\tBubbleMenu,\n\t},\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\tprops: {\n\t\teditor: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\t// used to calculate the position based on the scrollOffset\n\t\tcontentWrapper: {\n\t\t\ttype: HTMLDivElement,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tfilePath: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\tlinkUrl: null,\n\t\t\tlinkMenuIsActive: false,\n\t\t\tisUsingDirectEditing: loadState('text', 'directEditingToken', null) !== null,\n\t\t}\n\t},\n\tmethods: {\n\t\tshowLinkMenu() {\n\t\t\tconst attrs = getMarkAttributes(this.editor.state, 'link')\n\t\t\tthis.linkUrl = attrs.href\n\t\t\tthis.linkMenuIsActive = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.linkInput.focus()\n\t\t\t})\n\t\t},\n\t\thideLinkMenu() {\n\t\t\tthis.linkUrl = null\n\t\t\tthis.linkMenuIsActive = false\n\t\t},\n\t\tselectFile() {\n\t\t\tconst currentUser = getCurrentUser()\n\t\t\tif (!currentUser) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst startPath = this.filePath.split('/').slice(0, -1).join('/')\n\t\t\tOC.dialogs.filepicker(t('text', 'Select file to link to'), (file) => {\n\t\t\t\tconst client = OC.Files.getClient()\n\t\t\t\tclient.getFileInfo(file).then((_status, fileInfo) => {\n\t\t\t\t\tconst path = optimalPath(this.filePath, `${fileInfo.path}/${fileInfo.name}`)\n\t\t\t\t\tconst encodedPath = path.split('/').map(encodeURIComponent).join('/')\n\t\t\t\t\tconst href = `${encodedPath}?fileId=${fileInfo.id}`\n\t\t\t\t\tthis.editor.chain().setLink({ href }).focus().run()\n\t\t\t\t\tthis.hideLinkMenu()\n\t\t\t\t})\n\t\t\t}, false, [], true, undefined, startPath)\n\t\t},\n\t\tsetLinkUrl() {\n\t\t\tlet url = this.linkUrl\n\t\t\t// Heuristics for determining if we need a https:// prefix.\n\t\t\tconst noPrefixes = [\n\t\t\t\t/^[a-zA-Z]+:/, // url with protocol (\"mailTo:email@domain.tld\")\n\t\t\t\t/^\\//, // absolute path\n\t\t\t\t/\\?fileId=/, // relative link with fileId\n\t\t\t\t/^\\.\\.?\\//, // relative link starting with ./ or ../\n\t\t\t\t/^[^.]*[/$]/, // no dots before first '/' - not a domain name\n\t\t\t\t/^#/, // url fragment\n\t\t\t]\n\t\t\tif (url && !noPrefixes.find(regex => url.match(regex))) {\n\t\t\t\turl = 'https://' + url\n\t\t\t}\n\n\t\t\t// Avoid issues when parsing urls later on in markdown that might be entered in an invalid format (e.g. \"mailto: example@example.com\")\n\t\t\tconst href = url.replaceAll(' ', '%20')\n\t\t\tthis.editor.chain().setLink({ href }).focus().run()\n\t\t\tthis.hideLinkMenu()\n\t\t},\n\t\tremoveLinkUrl() {\n\t\t\tthis.editor.chain().unsetLink().focus().run()\n\t\t},\n\t\tisActive(selector, args = {}) {\n\t\t\treturn this.editor.isActive(selector, args)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.menububble {\n\t\tdisplay: flex;\n\t\tz-index: 10020;\n\t\tbackground: var(--color-main-background-translucent);\n\t\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n\t\tborder-radius: var(--border-radius-large);\n\t\toverflow: hidden;\n\t\tpadding: 0;\n\t\tmargin-left: 10px;\n\t\theight: 44px;\n\n\t\t&__button {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tborder: 0;\n\t\t\tpadding: 0.9rem 0.7rem;\n\t\t\tmargin: 0;\n\t\t\tborder-radius: 0;\n\t\t\tcursor: pointer;\n\t\t\tbackground-color: var(--color-main-background);\n\t\t\tborder-right: 1px solid var(--color-border);\n\n\t\t\t&:focus,\n\t\t\t&:hover {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\tborder: 0;\n\t\t\t\tborder-right: 1px solid var(--color-border) !important;\n\t\t\t}\n\n\t\t\t&:last-child {\n\t\t\t\tborder: 0 !important;\n\t\t\t}\n\t\t}\n\n\t\t&__buttontext {\n\t\t\tpadding: 0.4rem;\n\t\t\tpadding-right: 0;\n\t\t}\n\n\t\t&__form {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t&__input {\n\t\t\tfont: inherit;\n\t\t\tborder: none;\n\t\t\tbackground: transparent;\n\t\t\tmin-width: 250px;\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBubble.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBubble.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBubble.vue?vue&type=style&index=0&id=1df378e6&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBubble.vue?vue&type=style&index=0&id=1df378e6&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MenuBubble.vue?vue&type=template&id=1df378e6&scoped=true&\"\nimport script from \"./MenuBubble.vue?vue&type=script&lang=js&\"\nexport * from \"./MenuBubble.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MenuBubble.vue?vue&type=style&index=0&id=1df378e6&scoped=true&lang=scss&\"\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 \"1df378e6\",\n null\n \n)\n\nexport default component.exports"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","class","loaded","ready","focus","darkTheme","canCreate","attrs","staticClass","on","createNew","_v","_s","t","_e","directives","name","rawName","value","expression","key","file","path","id","shareToken","mimetype","autofocus","$event","unfocus","reset","FILE_ACTION_IDENTIFIER","optimalPath","from","to","current","split","target","pop","shift","relativePath","fill","concat","absolutePath","length","join","registerFileCreate","newFileMenuPlugin","attach","menu","fileList","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","createFile","then","status","data","fileInfoModel","OCA","Files","FileInfoModel","Viewer","fileActions","triggerAction","OC","Plugins","register","registerFileActionFallback","sharingToken","document","getElementById","dir","ViewerRoot","createElement","body","appendChild","registerAction","mime","PERMISSION_UPDATE","PERMISSION_READ","imagePath","filename","window","FileList","findFile","Promise","all","imports","getCurrentDirectory","Vue","default","prototype","n","Editor","render","h","self","props","fileId","active","mimeType","close","$destroy","$mount","i","openMimetypes","setDefault","FilesWorkspacePlugin","el","registerHeader","bind","priority","module","vm","extend","RichWorkspace","propsData","store","$el","toString","openMimetypesMarkdown","openMimetypesPlainText","___CSS_LOADER_EXPORT___","push","label","keyChar","keyModifiers","action","command","undo","redo","isActive","toggleBold","toggleItalic","toggleUnderline","toggleStrike","visible","children","level","toggleHeading","bulletListItem","toggleOrderedList","todo_item","toggleBlockquote","toggleCodeBlock","emojiObject","emoji","isVisible","autohide","ref","onImageUploadFilePicked","_l","icon","$index","addEmoji","toggleChildMenu","refInFor","onImageActionClose","uploadingImage","slot","onUploadImage","isPublic","showImagePrompt","showImageLinkPrompt","imageLink","onImageLinkUpdateValue","onImageLinkSubmit","iconCount","getLabelAndKeys","getIconClasses","disabled","clickIcon","hideChildMenu","childIconClasses","preventDefault","open","isChildMenuVisible","childPopoverMenu","isHiddenInMenu","getKeys","_t","editor","onHide","hideLinkMenu","duration","placement","setLinkUrl","domProps","type","indexOf","_k","keyCode","apply","arguments","composing","linkUrl","showLinkMenu","isUsingDirectEditing","selectFile","removeLinkUrl"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"editor-rich.js?v=b8f5f4a6a8e3decc91c1","mappings":"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CA,YACA,YACA,YAGA,gBACA,OACA,cACA,eACA,iBACA,qBACA,mBACA,uBACA,kBACA,aACA,aAGA,UACA,eADA,WACA,WACA,6CAEA,eAJA,WAIA,WACA,mBACA,SAGA,OAFA,cACA,6BACA,IAGA,SAZA,WAYA,WACA,sCACA,MACA,SAEA,6BACA,4CAGA,UArBA,WAsBA,8BACA,qEAEA,SAzBA,WAyBA,WACA,mBACA,6CAGA,mBA9BA,WA8BA,WACA,mBACA,0GAGA,SAnCA,WAmCA,WACA,gCACA,+BACA,oBACA,CACA,kCACA,kBACA,iBACA,0BAIA,iBA/CA,WA+CA,WACA,qBACA,0BACA,OAEA,aACA,aACA,qBACA,kBACA,eACA,0BAMA,iBA/DA,WA+DA,WACA,mBACA,qBACA,6BAGA,UArEA,WAqEA,WACA,8EAEA,UAxEA,WAyEA,oBACA,iBACA,gGACA,iCACA,YAEA,UA/EA,WAgFA,2BACA,iDAGA,QAlJA,WAkJA,WACA,sDACA,2CACA,qDACA,mBACA,kBAEA,oBACA,iCAEA,MAEA,cA9JA,WA+JA,0DAEA,SACA,cADA,WACA,WACA,2BACA,mBACA,uBAGA,QAPA,WAQA,mCAEA,UAVA,SAUA,GACA,WACA,iBAIA,4CACA,YAEA,eAnBA,SAmBA,GACA,uDAEA,gBAtBA,SAsBA,GACA,yDAEA,cAzBA,YAyBA,cACA,wCAEA,gBA5BA,YA4BA,cACA,8FACA,uCACA,GACA,gBAGA,mBAnCA,WAoCA,6BAEA,cAtCA,WAuCA,mCAEA,wBAzCA,SAyCA,cACA,uBACA,IACA,EADA,eACA,GACA,uBAGA,OAFA,qDACA,wBAMA,kBAEA,0DACA,kHACA,2BACA,YACA,qGACA,iBACA,wBAGA,uBAhEA,SAgEA,GAEA,kBAEA,kBApEA,WAoEA,WACA,iBAGA,uBACA,4BACA,uCAEA,2EACA,kHACA,2BACA,YACA,qGACA,iBACA,oBACA,oBAGA,kBAtFA,SAsFA,cACA,uBACA,uCAEA,8DACA,kHACA,2BACA,YACA,qGACA,iBACA,wBAGA,gBAnGA,WAmGA,YACA,uBAIA,+DACA,0BACA,gCAEA,sBA5G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","sources":["webpack:///text/src/views/RichWorkspace.vue","webpack:///text/src/views/RichWorkspace.vue?vue&type=script&lang=js&","webpack://text/./src/views/RichWorkspace.vue?71be","webpack://text/./src/views/RichWorkspace.vue?c027","webpack:///text/src/views/RichWorkspace.vue?vue&type=template&id=42d14835&scoped=true&","webpack:///text/src/helpers/files.js","webpack:///text/src/helpers/mime.js","webpack:///text/src/components/MenuBar.vue?vue&type=style&index=0&id=aa1bf3a8&scoped=true&lang=scss&","webpack:///text/src/components/MenuBubble.vue?vue&type=style&index=0&id=1df378e6&scoped=true&lang=scss&","webpack:///text/src/views/RichWorkspace.vue?vue&type=style&index=0&id=42d14835&lang=scss&scoped=true&","webpack:///text/src/components/MenuBar.vue?vue&type=template&id=aa1bf3a8&scoped=true&","webpack:///text/src/mixins/menubar.js","webpack:///text/src/components/MenuBar.vue","webpack:///text/src/components/MenuBar.vue?vue&type=script&lang=js&","webpack://text/./src/components/MenuBar.vue?5607","webpack://text/./src/components/MenuBar.vue?ce1f","webpack:///text/src/components/MenuBubble.vue?vue&type=template&id=1df378e6&scoped=true&","webpack:///text/src/components/MenuBubble.vue","webpack:///text/src/components/MenuBubble.vue?vue&type=script&lang=js&","webpack://text/./src/components/MenuBubble.vue?d2a5","webpack://text/./src/components/MenuBubble.vue?8445"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-if=\"enabled\" id=\"rich-workspace\" :class=\"{'icon-loading': !loaded || !ready, 'focus': focus, 'dark': darkTheme, 'creatable': canCreate}\">\n\t\t<div v-if=\"showEmptyWorkspace\" class=\"empty-workspace\" @click=\"createNew\">\n\t\t\t<p class=\"placeholder\">\n\t\t\t\t{{ t('text', 'Add notes, lists or links …') }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<EditorWrapper v-if=\"file\"\n\t\t\tv-show=\"ready\"\n\t\t\t:key=\"file.path\"\n\t\t\t:file-id=\"file.id\"\n\t\t\t:relative-path=\"file.path\"\n\t\t\t:share-token=\"shareToken\"\n\t\t\t:active=\"true\"\n\t\t\t:autohide=\"true\"\n\t\t\t:mime=\"file.mimetype\"\n\t\t\t:autofocus=\"autofocus\"\n\t\t\t@ready=\"ready=true\"\n\t\t\t@focus=\"focus=true\"\n\t\t\t@blur=\"unfocus\"\n\t\t\t@error=\"reset\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { subscribe } from '@nextcloud/event-bus'\n\nconst IS_PUBLIC = !!(document.getElementById('isPublic'))\nconst WORKSPACE_URL = generateOcsUrl('apps/text' + (IS_PUBLIC ? '/public' : '') + '/workspace', 2)\n\nexport default {\n\tname: 'RichWorkspace',\n\tcomponents: {\n\t\tEditorWrapper: () => import(/* webpackChunkName: \"editor\" */'./../components/EditorWrapper'),\n\t},\n\tprops: {\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfocus: false,\n\t\t\tfolder: null,\n\t\t\tfile: null,\n\t\t\tloaded: false,\n\t\t\tready: false,\n\t\t\tautofocus: false,\n\t\t\tdarkTheme: OCA.Accessibility && OCA.Accessibility.theme === 'dark',\n\t\t\tenabled: OCA.Text.RichWorkspaceEnabled,\n\t\t}\n\t},\n\tcomputed: {\n\t\tshareToken() {\n\t\t\treturn document.getElementById('sharingToken') ? document.getElementById('sharingToken').value : null\n\t\t},\n\t\tcanCreate() {\n\t\t\treturn !!(this.folder && (this.folder.permissions & OC.PERMISSION_CREATE))\n\t\t},\n\t\tshowEmptyWorkspace() {\n\t\t\treturn (!this.file || (this.autofocus && !this.ready)) && this.canCreate\n\t\t},\n\t},\n\twatch: {\n\t\tpath() {\n\t\t\tthis.getFileInfo()\n\t\t},\n\t\tfocus(newValue) {\n\t\t\tif (!newValue) {\n\t\t\t\tdocument.querySelector('#editor').scrollTo(0, 0)\n\t\t\t}\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.enabled) {\n\t\t\tthis.getFileInfo()\n\t\t}\n\t\tsubscribe('Text::showRichWorkspace', () => {\n\t\t\tthis.enabled = true\n\t\t\tthis.getFileInfo()\n\t\t})\n\t\tsubscribe('Text::hideRichWorkspace', () => {\n\t\t\tthis.enabled = false\n\t\t})\n\t},\n\tmethods: {\n\t\tunfocus() {\n\t\t\t// setTimeout(() => this.focus = false, 2000)\n\t\t},\n\t\treset() {\n\t\t\tthis.file = null\n\t\t\tthis.focus = false\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.creating = false\n\t\t\t\tthis.getFileInfo()\n\t\t\t})\n\t\t},\n\t\tgetFileInfo() {\n\t\t\tthis.loaded = false\n\t\t\tthis.autofocus = false\n\t\t\tthis.ready = false\n\t\t\tconst params = { path: this.path }\n\t\t\tif (IS_PUBLIC) {\n\t\t\t\tparams.shareToken = this.shareToken\n\t\t\t}\n\t\t\treturn axios.get(WORKSPACE_URL, { params }).then((response) => {\n\t\t\t\tconst data = response.data.ocs.data\n\t\t\t\tthis.folder = data.folder || null\n\t\t\t\tthis.file = data.file\n\t\t\t\tthis.editing = true\n\t\t\t\tthis.loaded = true\n\t\t\t\treturn true\n\t\t\t}).catch((error) => {\n\t\t\t\tif (error.response.data.ocs && error.response.data.ocs.data.folder) {\n\t\t\t\t\tthis.folder = error.response.data.ocs.data.folder\n\t\t\t\t} else {\n\t\t\t\t\tthis.folder = null\n\t\t\t\t}\n\t\t\t\tthis.file = null\n\t\t\t\tthis.loaded = true\n\t\t\t\tthis.ready = true\n\t\t\t\tthis.creating = false\n\t\t\t\treturn false\n\t\t\t})\n\t\t},\n\t\tcreateNew() {\n\t\t\tif (this.creating) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.creating = true\n\t\t\tthis.getFileInfo().then((workspaceFileExists) => {\n\t\t\t\tthis.autofocus = true\n\t\t\t\tif (!workspaceFileExists) {\n\t\t\t\t\twindow.FileList.createFile('Readme.md', { scrollTo: false, animate: false }).then((status, data) => {\n\t\t\t\t\t\tthis.getFileInfo()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t#rich-workspace {\n\t\tpadding: 0 50px;\n\t\t/* Slightly reduce vertical space */\n\t\tmargin-bottom: -24px;\n\t\ttext-align: left;\n\t\tmax-height: 0;\n\t\ttransition: max-height 0.5s cubic-bezier(0, 1, 0, 1);\n\t\tz-index: 61;\n\t\tposition: relative;\n\t\t&.creatable {\n\t\t\tmin-height: 90px;\n\t\t}\n\t}\n\n\t/* For subfolders, where there are no Recommendations */\n\t#rich-workspace:only-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.empty-workspace {\n\t\tpadding-top: 43px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\theight: 0;\n\t}\n\n\t#rich-workspace::v-deep div[contenteditable=false] {\n\t\twidth: 100%;\n\t\tpadding: 0px;\n\t\tbackground-color: var(--color-main-background);\n\t\topacity: 1;\n\t\tborder: none;\n\t}\n\n\t#rich-workspace::v-deep #editor-container {\n\t\theight: 100%;\n\t\tposition: unset !important;\n\t\ttop: auto !important;\n\t}\n\n\t#rich-workspace::v-deep #editor-wrapper {\n\t\tposition: unset !important;\n\t\toverflow: visible;\n\t}\n\n\t#rich-workspace::v-deep #editor {\n\t\toverflow: visible !important;\n\t}\n\n\t#rich-workspace::v-deep .content-wrapper {\n\t\toverflow: scroll !important;\n\t\tmax-height: calc(40vh - 50px);\n\t\tpadding-left: 10px;\n\t\tpadding-bottom: 60px; /* ensure menububble fits below */\n\t}\n\n\t#rich-workspace::v-deep #editor-wrapper .ProseMirror {\n\t\tpadding: 0px;\n\t\tmargin: 0;\n\t}\n\n\t#rich-workspace::v-deep .menubar {\n\t\tz-index: 61;\n\t\t/* Slightly reduce vertical space */\n\t\tmargin-bottom: -10px;\n\t}\n\n\t#rich-workspace::v-deep .menubar .menubar-icons {\n\t\tmargin-left: 0;\n\t}\n\n\t#rich-workspace::v-deep .editor__content {\n\t\tmargin: 0;\n\t}\n\n\t#rich-workspace.focus {\n\t\tmax-height: 50vh;\n\t}\n\n\t#rich-workspace:not(.focus) {\n\t\tmax-height: 30vh;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t}\n\n\t#rich-workspace:not(.focus):not(.icon-loading):after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tz-index: 1;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tpointer-events: none;\n\t\tbackground-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));\n\t\twidth: 100%;\n\t\theight: 4em;\n\t}\n\n\t#rich-workspace.dark:not(.focus):not(.icon-loading):after {\n\t\tbackground-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background));\n\t}\n\n\t@media only screen and (max-width: 1024px) {\n\t\t#rich-workspace:not(.focus) {\n\t\t\tmax-height: 30vh;\n\t\t}\n\t}\n\n\thtml.ie {\n\t\t#rich-workspace::v-deep {\n\t\t\t#editor-container {\n\t\t\t\tposition: initial;\n\t\t\t}\n\n\t\t\t#editor-wrapper {\n\t\t\t\tposition: relative !important;\n\t\t\t\ttop: auto !important;\n\t\t\t}\n\n\t\t\t#editor {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\toverflow: hidden !important;\n\t\t\t}\n\n\t\t\t.menubar {\n\t\t\t\tposition: relative;\n\t\t\t\toverflow: hidden;\n\t\t\t\tflex-shrink: 0;\n\t\t\t\theight: 44px;\n\t\t\t\ttop: auto;\n\t\t\t}\n\n\t\t\t#editor > div:nth-child(2) {\n\t\t\t\tmin-height: 44px;\n\t\t\t\toverflow-x: hidden;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tflex-shrink: 1;\n\t\t\t}\n\t\t}\n\t}\n\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=style&index=0&id=42d14835&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=style&index=0&id=42d14835&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RichWorkspace.vue?vue&type=template&id=42d14835&scoped=true&\"\nimport script from \"./RichWorkspace.vue?vue&type=script&lang=js&\"\nexport * from \"./RichWorkspace.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RichWorkspace.vue?vue&type=style&index=0&id=42d14835&lang=scss&scoped=true&\"\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 \"42d14835\",\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 (_vm.enabled)?_c('div',{class:{'icon-loading': !_vm.loaded || !_vm.ready, 'focus': _vm.focus, 'dark': _vm.darkTheme, 'creatable': _vm.canCreate},attrs:{\"id\":\"rich-workspace\"}},[(_vm.showEmptyWorkspace)?_c('div',{staticClass:\"empty-workspace\",on:{\"click\":_vm.createNew}},[_c('p',{staticClass:\"placeholder\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('text', 'Add notes, lists or links …'))+\"\\n\\t\\t\")])]):_vm._e(),_vm._v(\" \"),(_vm.file)?_c('EditorWrapper',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.ready),expression:\"ready\"}],key:_vm.file.path,attrs:{\"file-id\":_vm.file.id,\"relative-path\":_vm.file.path,\"share-token\":_vm.shareToken,\"active\":true,\"autohide\":true,\"mime\":_vm.file.mimetype,\"autofocus\":_vm.autofocus},on:{\"ready\":function($event){_vm.ready=true},\"focus\":function($event){_vm.focus=true},\"blur\":_vm.unfocus,\"error\":_vm.reset}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { openMimetypes } from './mime'\nimport RichWorkspace from '../views/RichWorkspace'\nimport { imagePath } from '@nextcloud/router'\nimport store from '../store'\n\nconst FILE_ACTION_IDENTIFIER = 'Edit with text app'\n\nconst optimalPath = function(from, to) {\n\tconst current = from.split('/')\n\tconst target = to.split('/')\n\tcurrent.pop() // ignore filename\n\twhile (current[0] === target[0]) {\n\t\tcurrent.shift()\n\t\ttarget.shift()\n\t}\n\tconst relativePath = current.fill('..').concat(target)\n\tconst absolutePath = to.split('/')\n\treturn relativePath.length < absolutePath.length\n\t\t? relativePath.join('/')\n\t\t: to\n}\n\nconst registerFileCreate = () => {\n\tconst newFileMenuPlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: 'file',\n\t\t\t\tdisplayName: t('text', 'New text document'),\n\t\t\t\ttemplateName: t('text', 'New text document') + '.md',\n\t\t\t\ticonClass: 'icon-filetype-text',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tfileList.createFile(name).then(function(status, data) {\n\t\t\t\t\t\tconst fileInfoModel = new OCA.Files.FileInfoModel(data)\n\t\t\t\t\t\tif (typeof OCA.Viewer !== 'undefined') {\n\t\t\t\t\t\t\tOCA.Files.fileActions.triggerAction('view', fileInfoModel, fileList)\n\t\t\t\t\t\t} else if (typeof OCA.Viewer === 'undefined') {\n\t\t\t\t\t\t\tOCA.Files.fileActions.triggerAction(FILE_ACTION_IDENTIFIER, fileInfoModel, fileList)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newFileMenuPlugin)\n}\n\nconst registerFileActionFallback = () => {\n\tconst sharingToken = document.getElementById('sharingToken') ? document.getElementById('sharingToken').value : null\n\tconst dir = document.getElementById('dir').value\n\n\tif (!sharingToken || dir !== '') {\n\t\tconst ViewerRoot = document.createElement('div')\n\t\tViewerRoot.id = 'text-viewer-fallback'\n\t\tdocument.body.appendChild(ViewerRoot)\n\t\tconst registerAction = (mime) => OCA.Files.fileActions.register(\n\t\t\tmime,\n\t\t\tFILE_ACTION_IDENTIFIER,\n\t\t\tOC.PERMISSION_UPDATE | OC.PERMISSION_READ,\n\t\t\timagePath('core', 'actions/rename'),\n\t\t\t(filename) => {\n\t\t\t\tconst file = window.FileList.findFile(filename)\n\t\t\t\tPromise.all([\n\t\t\t\t\timport('vue'),\n\t\t\t\t\timport(/* webpackChunkName: \"files-modal\" */'./../components/PublicFilesEditor'),\n\t\t\t\t]).then((imports) => {\n\t\t\t\t\tconst path = window.FileList.getCurrentDirectory() + '/' + filename\n\t\t\t\t\tconst Vue = imports[0].default\n\t\t\t\t\tVue.prototype.t = window.t\n\t\t\t\t\tVue.prototype.n = window.n\n\t\t\t\t\tVue.prototype.OCA = window.OCA\n\t\t\t\t\tconst Editor = imports[1].default\n\t\t\t\t\tconst vm = new Vue({\n\t\t\t\t\t\trender: function(h) { // eslint-disable-line\n\t\t\t\t\t\t\tconst self = this\n\t\t\t\t\t\t\treturn h(Editor, {\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\tfileId: file ? file.id : null,\n\t\t\t\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\t\t\t\tshareToken: sharingToken,\n\t\t\t\t\t\t\t\t\trelativePath: path,\n\t\t\t\t\t\t\t\t\tmimeType: file.mimetype,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\t\t\tclose: function() { // eslint-disable-line\n\t\t\t\t\t\t\t\t\t\tself.$destroy()\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tvm.$mount(ViewerRoot)\n\t\t\t\t})\n\t\t\t},\n\t\t\tt('text', 'Edit')\n\t\t)\n\n\t\tfor (let i = 0; i < openMimetypes.length; i++) {\n\t\t\tregisterAction(openMimetypes[i])\n\t\t\tOCA.Files.fileActions.setDefault(openMimetypes[i], FILE_ACTION_IDENTIFIER)\n\t\t}\n\t}\n\n}\n\nconst FilesWorkspacePlugin = {\n\n\tel: null,\n\n\tattach(fileList) {\n\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\treturn\n\t\t}\n\n\t\tthis.el = document.createElement('div')\n\t\tfileList.registerHeader({\n\t\t\tid: 'workspace',\n\t\t\tel: this.el,\n\t\t\trender: this.render.bind(this),\n\t\t\tpriority: 10,\n\t\t})\n\t},\n\n\trender(fileList) {\n\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\treturn\n\t\t}\n\n\t\timport('vue').then((module) => {\n\t\t\tconst Vue = module.default\n\t\t\tthis.el.id = 'files-workspace-wrapper'\n\t\t\tVue.prototype.t = window.t\n\t\t\tVue.prototype.n = window.n\n\t\t\tVue.prototype.OCA = window.OCA\n\t\t\tconst View = Vue.extend(RichWorkspace)\n\t\t\tconst vm = new View({\n\t\t\t\tpropsData: {\n\t\t\t\t\tpath: fileList.getCurrentDirectory(),\n\t\t\t\t},\n\t\t\t\tstore,\n\t\t\t}).$mount(this.el)\n\n\t\t\tfileList.$el.on('urlChanged', data => {\n\t\t\t\tvm.path = data.dir.toString()\n\t\t\t})\n\t\t\tfileList.$el.on('changeDirectory', data => {\n\t\t\t\tvm.path = data.dir.toString()\n\t\t\t})\n\t\t})\n\t},\n}\n\nexport {\n\toptimalPath,\n\tregisterFileActionFallback,\n\tregisterFileCreate,\n\tFilesWorkspacePlugin,\n\tFILE_ACTION_IDENTIFIER,\n}\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst openMimetypesMarkdown = [\n\t'text/markdown',\n]\n\nconst openMimetypesPlainText = [\n\t'text/plain',\n\t'application/cmd',\n\t'application/x-empty',\n\t'application/x-msdos-program',\n\t'application/javascript',\n\t'application/json',\n\t'application/x-perl',\n\t'application/x-php',\n\t'application/x-tex',\n\t'application/xml',\n\t'application/yaml',\n\t'text/css',\n\t'text/csv',\n\t'text/html',\n\t'text/org',\n\t'text/x-c',\n\t'text/x-c++src',\n\t'text/x-h',\n\t'text/x-java-source',\n\t'text/x-ldif',\n\t'text/x-python',\n\t'text/x-shellscript',\n]\n\nconst openMimetypes = [...openMimetypesMarkdown, ...openMimetypesPlainText]\n\nexport {\n\topenMimetypes,\n\topenMimetypesMarkdown,\n\topenMimetypesPlainText,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".menubar[data-v-aa1bf3a8]{--background-blur: blur(10px);position:fixed;position:-webkit-sticky;position:sticky;top:0;display:flex;justify-content:flex-end;z-index:10021;background-color:var(--color-main-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur);max-height:44px;padding-top:3px;padding-bottom:3px}.menubar.autohide[data-v-aa1bf3a8]{visibility:hidden;opacity:0;transition:visibility .2s .4s,opacity .2s .4s}.menubar.autohide.show[data-v-aa1bf3a8]{visibility:visible;opacity:1}.menubar .menubar-icons[data-v-aa1bf3a8]{flex-grow:1;margin-left:calc((100% - 660px)/2)}@media(max-width: 660px){.menubar .menubar-icons[data-v-aa1bf3a8]{margin-left:0}}.menubar[data-v-aa1bf3a8] .action-item__menu ul{max-height:calc(100vh - 88px);overflow:scroll}.menubar button[data-v-aa1bf3a8]{position:relative;width:44px;height:44px;margin:0;background-size:16px;border:0;background-color:transparent;opacity:.5;color:var(--color-main-text);background-position:center center;vertical-align:top}.menubar button[data-v-aa1bf3a8]:hover,.menubar button[data-v-aa1bf3a8]:focus,.menubar button[data-v-aa1bf3a8]:active{background-color:var(--color-background-dark)}.menubar button.is-active[data-v-aa1bf3a8]::before{transform:translateX(-50%);border-radius:100%;position:absolute;background:var(--color-primary-element);bottom:3px;height:6px;width:6px;content:\\\"\\\";left:50%}.menubar button.is-active[data-v-aa1bf3a8],.menubar button[data-v-aa1bf3a8]:hover,.menubar button[data-v-aa1bf3a8]:focus{opacity:1}.menubar button.icon-undo[data-v-aa1bf3a8],.menubar button.icon-redo[data-v-aa1bf3a8]{opacity:.8}.menubar button.icon-undo[data-v-aa1bf3a8]:disabled,.menubar button.icon-redo[data-v-aa1bf3a8]:disabled{opacity:.4}.menubar .submenu[data-v-aa1bf3a8],.menubar .menuitem-emoji[data-v-aa1bf3a8]{display:inline-block;width:44px;height:44px;position:relative;vertical-align:top}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/MenuBar.vue\"],\"names\":[],\"mappings\":\"AAoeA,0BACC,6BAAA,CACA,cAAA,CACA,uBAAA,CACA,eAAA,CACA,KAAA,CACA,YAAA,CACA,wBAAA,CACA,aAAA,CACA,yDAAA,CACA,8CAAA,CACA,sCAAA,CACA,eAAA,CACA,eAAA,CACA,kBAAA,CAEA,mCACC,iBAAA,CACA,SAAA,CACA,6CAAA,CACA,wCACC,kBAAA,CACA,SAAA,CAGF,yCACC,WAAA,CACA,kCAAA,CAED,yBACC,yCACC,aAAA,CAAA,CAGF,gDACC,6BAAA,CACA,eAAA,CAIF,iCACC,iBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,oBAAA,CACA,QAAA,CACA,4BAAA,CACA,UAAA,CACA,4BAAA,CACA,iCAAA,CACA,kBAAA,CACA,sHACC,6CAAA,CAGD,mDACC,0BAAA,CACA,kBAAA,CACA,iBAAA,CACA,uCAAA,CACA,UAAA,CACA,UAAA,CACA,SAAA,CACA,UAAA,CACA,QAAA,CAGD,yHAGC,SAAA,CAGD,sFAEC,UAAA,CAEA,wGACC,UAAA,CAKH,6EACC,oBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.menubar {\\n\\t--background-blur: blur(10px);\\n\\tposition: fixed;\\n\\tposition: -webkit-sticky;\\n\\tposition: sticky;\\n\\ttop: 0;\\n\\tdisplay: flex;\\n\\tjustify-content: flex-end;\\n\\tz-index: 10021; // above modal-header and menububble so menubar is always on top\\n\\tbackground-color: var(--color-main-background-translucent);\\n\\t-webkit-backdrop-filter: var(--background-blur);\\n\\tbackdrop-filter: var(--background-blur);\\n\\tmax-height: 44px; // important for mobile so that the buttons are always inside the container\\n\\tpadding-top:3px;\\n\\tpadding-bottom: 3px;\\n\\n\\t&.autohide {\\n\\t\\tvisibility: hidden;\\n\\t\\topacity: 0;\\n\\t\\ttransition: visibility 0.2s 0.4s, opacity 0.2s 0.4s;\\n\\t\\t&.show {\\n\\t\\t\\tvisibility: visible;\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n\\t.menubar-icons {\\n\\t\\tflex-grow: 1;\\n\\t\\tmargin-left: calc((100% - 660px) / 2);\\n\\t}\\n\\t@media (max-width: 660px) {\\n\\t\\t.menubar-icons {\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t}\\n\\t}\\n\\t&::v-deep .action-item__menu ul {\\n\\t\\tmax-height: calc(100vh - 88px);\\n\\t\\toverflow: scroll;\\n\\t}\\n}\\n\\n.menubar button {\\n\\tposition: relative;\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\tmargin: 0;\\n\\tbackground-size: 16px;\\n\\tborder: 0;\\n\\tbackground-color: transparent;\\n\\topacity: .5;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-position: center center;\\n\\tvertical-align: top;\\n\\t&:hover, &:focus, &:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n\\n\\t&.is-active::before {\\n\\t\\ttransform: translateX(-50%);\\n\\t\\tborder-radius: 100%;\\n\\t\\tposition: absolute;\\n\\t\\tbackground: var(--color-primary-element);\\n\\t\\tbottom: 3px;\\n\\t\\theight: 6px;\\n\\t\\twidth: 6px;\\n\\t\\tcontent: '';\\n\\t\\tleft: 50%;\\n\\n\\t}\\n\\t&.is-active,\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\topacity: 1;\\n\\t}\\n\\n\\t&.icon-undo,\\n\\t&.icon-redo {\\n\\t\\topacity: .8;\\n\\n\\t\\t&:disabled {\\n\\t\\t\\topacity: .4;\\n\\t\\t}\\n\\t}\\n}\\n\\n.menubar .submenu, .menubar .menuitem-emoji {\\n\\tdisplay: inline-block;\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\tposition: relative;\\n\\tvertical-align: top;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".menububble[data-v-1df378e6]{display:flex;z-index:10020;background:var(--color-main-background-translucent);box-shadow:0 1px 5px var(--color-box-shadow);border-radius:var(--border-radius-large);overflow:hidden;padding:0;margin-left:10px;height:44px}.menububble__button[data-v-1df378e6]{display:block;flex-grow:1;border:0;padding:.9rem .7rem;margin:0;border-radius:0;cursor:pointer;background-color:var(--color-main-background);border-right:1px solid var(--color-border)}.menububble__button[data-v-1df378e6]:focus,.menububble__button[data-v-1df378e6]:hover{background-color:var(--color-background-hover);border:0;border-right:1px solid var(--color-border) !important}.menububble__button[data-v-1df378e6]:last-child{border:0 !important}.menububble__buttontext[data-v-1df378e6]{padding:.4rem;padding-right:0}.menububble__form[data-v-1df378e6]{display:flex;align-items:center}.menububble__input[data-v-1df378e6]{font:inherit;border:none;background:transparent;min-width:250px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/MenuBubble.vue\"],\"names\":[],\"mappings\":\"AA4KA,6BACC,YAAA,CACA,aAAA,CACA,mDAAA,CACA,4CAAA,CACA,wCAAA,CACA,eAAA,CACA,SAAA,CACA,gBAAA,CACA,WAAA,CAEA,qCACC,aAAA,CACA,WAAA,CACA,QAAA,CACA,mBAAA,CACA,QAAA,CACA,eAAA,CACA,cAAA,CACA,6CAAA,CACA,0CAAA,CAEA,sFAEC,8CAAA,CACA,QAAA,CACA,qDAAA,CAGD,gDACC,mBAAA,CAIF,yCACC,aAAA,CACA,eAAA,CAGD,mCACC,YAAA,CACA,kBAAA,CAGD,oCACC,YAAA,CACA,WAAA,CACA,sBAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.menububble {\\n\\tdisplay: flex;\\n\\tz-index: 10020;\\n\\tbackground: var(--color-main-background-translucent);\\n\\tbox-shadow: 0 1px 5px var(--color-box-shadow);\\n\\tborder-radius: var(--border-radius-large);\\n\\toverflow: hidden;\\n\\tpadding: 0;\\n\\tmargin-left: 10px;\\n\\theight: 44px;\\n\\n\\t&__button {\\n\\t\\tdisplay: block;\\n\\t\\tflex-grow: 1;\\n\\t\\tborder: 0;\\n\\t\\tpadding: 0.9rem 0.7rem;\\n\\t\\tmargin: 0;\\n\\t\\tborder-radius: 0;\\n\\t\\tcursor: pointer;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tborder-right: 1px solid var(--color-border);\\n\\n\\t\\t&:focus,\\n\\t\\t&:hover {\\n\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-right: 1px solid var(--color-border) !important;\\n\\t\\t}\\n\\n\\t\\t&:last-child {\\n\\t\\t\\tborder: 0 !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__buttontext {\\n\\t\\tpadding: 0.4rem;\\n\\t\\tpadding-right: 0;\\n\\t}\\n\\n\\t&__form {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t}\\n\\n\\t&__input {\\n\\t\\tfont: inherit;\\n\\t\\tborder: none;\\n\\t\\tbackground: transparent;\\n\\t\\tmin-width: 250px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#rich-workspace[data-v-42d14835]{padding:0 50px;margin-bottom:-24px;text-align:left;max-height:0;transition:max-height .5s cubic-bezier(0, 1, 0, 1);z-index:61;position:relative}#rich-workspace.creatable[data-v-42d14835]{min-height:90px}#rich-workspace[data-v-42d14835]:only-child{margin-bottom:0}.empty-workspace[data-v-42d14835]{padding-top:43px;color:var(--color-text-maxcontrast);height:0}#rich-workspace[data-v-42d14835] div[contenteditable=false]{width:100%;padding:0px;background-color:var(--color-main-background);opacity:1;border:none}#rich-workspace[data-v-42d14835] #editor-container{height:100%;position:unset !important;top:auto !important}#rich-workspace[data-v-42d14835] #editor-wrapper{position:unset !important;overflow:visible}#rich-workspace[data-v-42d14835] #editor{overflow:visible !important}#rich-workspace[data-v-42d14835] .content-wrapper{overflow:scroll !important;max-height:calc(40vh - 50px);padding-left:10px;padding-bottom:60px}#rich-workspace[data-v-42d14835] #editor-wrapper .ProseMirror{padding:0px;margin:0}#rich-workspace[data-v-42d14835] .menubar{z-index:61;margin-bottom:-10px}#rich-workspace[data-v-42d14835] .menubar .menubar-icons{margin-left:0}#rich-workspace[data-v-42d14835] .editor__content{margin:0}#rich-workspace.focus[data-v-42d14835]{max-height:50vh}#rich-workspace[data-v-42d14835]:not(.focus){max-height:30vh;position:relative;overflow:hidden}#rich-workspace[data-v-42d14835]:not(.focus):not(.icon-loading):after{content:\\\"\\\";position:absolute;z-index:1;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));width:100%;height:4em}#rich-workspace.dark[data-v-42d14835]:not(.focus):not(.icon-loading):after{background-image:linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background))}@media only screen and (max-width: 1024px){#rich-workspace[data-v-42d14835]:not(.focus){max-height:30vh}}html.ie #rich-workspace[data-v-42d14835] #editor-container{position:initial}html.ie #rich-workspace[data-v-42d14835] #editor-wrapper{position:relative !important;top:auto !important}html.ie #rich-workspace[data-v-42d14835] #editor{display:flex;flex-direction:column;overflow:hidden !important}html.ie #rich-workspace[data-v-42d14835] .menubar{position:relative;overflow:hidden;flex-shrink:0;height:44px;top:auto}html.ie #rich-workspace[data-v-42d14835] #editor>div:nth-child(2){min-height:44px;overflow-x:hidden;overflow-y:auto;flex-shrink:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/RichWorkspace.vue\"],\"names\":[],\"mappings\":\"AA0KA,iCACC,cAAA,CAEA,mBAAA,CACA,eAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,iBAAA,CACA,2CACC,eAAA,CAKF,4CACC,eAAA,CAGD,kCACC,gBAAA,CACA,mCAAA,CACA,QAAA,CAGD,4DACC,UAAA,CACA,WAAA,CACA,6CAAA,CACA,SAAA,CACA,WAAA,CAGD,mDACC,WAAA,CACA,yBAAA,CACA,mBAAA,CAGD,iDACC,yBAAA,CACA,gBAAA,CAGD,yCACC,2BAAA,CAGD,kDACC,0BAAA,CACA,4BAAA,CACA,iBAAA,CACA,mBAAA,CAGD,8DACC,WAAA,CACA,QAAA,CAGD,0CACC,UAAA,CAEA,mBAAA,CAGD,yDACC,aAAA,CAGD,kDACC,QAAA,CAGD,uCACC,eAAA,CAGD,6CACC,eAAA,CACA,iBAAA,CACA,eAAA,CAGD,sEACC,UAAA,CACA,iBAAA,CACA,SAAA,CACA,QAAA,CACA,MAAA,CACA,mBAAA,CACA,iGAAA,CACA,UAAA,CACA,UAAA,CAGD,2EACC,2FAAA,CAGD,2CACC,6CACC,eAAA,CAAA,CAMA,2DACC,gBAAA,CAGD,yDACC,4BAAA,CACA,mBAAA,CAGD,iDACC,YAAA,CACA,qBAAA,CACA,0BAAA,CAGD,kDACC,iBAAA,CACA,eAAA,CACA,aAAA,CACA,WAAA,CACA,QAAA,CAGD,kEACC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#rich-workspace {\\n\\tpadding: 0 50px;\\n\\t/* Slightly reduce vertical space */\\n\\tmargin-bottom: -24px;\\n\\ttext-align: left;\\n\\tmax-height: 0;\\n\\ttransition: max-height 0.5s cubic-bezier(0, 1, 0, 1);\\n\\tz-index: 61;\\n\\tposition: relative;\\n\\t&.creatable {\\n\\t\\tmin-height: 90px;\\n\\t}\\n}\\n\\n/* For subfolders, where there are no Recommendations */\\n#rich-workspace:only-child {\\n\\tmargin-bottom: 0;\\n}\\n\\n.empty-workspace {\\n\\tpadding-top: 43px;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\theight: 0;\\n}\\n\\n#rich-workspace::v-deep div[contenteditable=false] {\\n\\twidth: 100%;\\n\\tpadding: 0px;\\n\\tbackground-color: var(--color-main-background);\\n\\topacity: 1;\\n\\tborder: none;\\n}\\n\\n#rich-workspace::v-deep #editor-container {\\n\\theight: 100%;\\n\\tposition: unset !important;\\n\\ttop: auto !important;\\n}\\n\\n#rich-workspace::v-deep #editor-wrapper {\\n\\tposition: unset !important;\\n\\toverflow: visible;\\n}\\n\\n#rich-workspace::v-deep #editor {\\n\\toverflow: visible !important;\\n}\\n\\n#rich-workspace::v-deep .content-wrapper {\\n\\toverflow: scroll !important;\\n\\tmax-height: calc(40vh - 50px);\\n\\tpadding-left: 10px;\\n\\tpadding-bottom: 60px; /* ensure menububble fits below */\\n}\\n\\n#rich-workspace::v-deep #editor-wrapper .ProseMirror {\\n\\tpadding: 0px;\\n\\tmargin: 0;\\n}\\n\\n#rich-workspace::v-deep .menubar {\\n\\tz-index: 61;\\n\\t/* Slightly reduce vertical space */\\n\\tmargin-bottom: -10px;\\n}\\n\\n#rich-workspace::v-deep .menubar .menubar-icons {\\n\\tmargin-left: 0;\\n}\\n\\n#rich-workspace::v-deep .editor__content {\\n\\tmargin: 0;\\n}\\n\\n#rich-workspace.focus {\\n\\tmax-height: 50vh;\\n}\\n\\n#rich-workspace:not(.focus) {\\n\\tmax-height: 30vh;\\n\\tposition: relative;\\n\\toverflow: hidden;\\n}\\n\\n#rich-workspace:not(.focus):not(.icon-loading):after {\\n\\tcontent: '';\\n\\tposition: absolute;\\n\\tz-index: 1;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tpointer-events: none;\\n\\tbackground-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));\\n\\twidth: 100%;\\n\\theight: 4em;\\n}\\n\\n#rich-workspace.dark:not(.focus):not(.icon-loading):after {\\n\\tbackground-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background));\\n}\\n\\n@media only screen and (max-width: 1024px) {\\n\\t#rich-workspace:not(.focus) {\\n\\t\\tmax-height: 30vh;\\n\\t}\\n}\\n\\nhtml.ie {\\n\\t#rich-workspace::v-deep {\\n\\t\\t#editor-container {\\n\\t\\t\\tposition: initial;\\n\\t\\t}\\n\\n\\t\\t#editor-wrapper {\\n\\t\\t\\tposition: relative !important;\\n\\t\\t\\ttop: auto !important;\\n\\t\\t}\\n\\n\\t\\t#editor {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\toverflow: hidden !important;\\n\\t\\t}\\n\\n\\t\\t.menubar {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\tflex-shrink: 0;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\ttop: auto;\\n\\t\\t}\\n\\n\\t\\t#editor > div:nth-child(2) {\\n\\t\\t\\tmin-height: 44px;\\n\\t\\t\\toverflow-x: hidden;\\n\\t\\t\\toverflow-y: auto;\\n\\t\\t\\tflex-shrink: 1;\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"menubar\",class:{ 'show': _vm.isVisible, 'autohide': _vm.autohide }},[_c('input',{ref:\"imageFileInput\",staticClass:\"hidden-visually\",attrs:{\"type\":\"file\",\"accept\":\"image/*\",\"aria-hidden\":\"true\"},on:{\"change\":_vm.onImageUploadFilePicked}}),_vm._v(\" \"),(_vm.isRichEditor)?_c('div',{ref:\"menubar\",staticClass:\"menubar-icons\"},[_vm._l((_vm.allIcons),function(icon,$index){return [(icon.class === 'icon-emoji')?_c('EmojiPicker',{key:icon.label,staticClass:\"menuitem-emoji\",on:{\"select\":function (emojiObject) { return _vm.addEmoji(icon, emojiObject); }}},[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.t('text', 'Insert emoji')),expression:\"t('text', 'Insert emoji')\"}],staticClass:\"icon-emoji\",attrs:{\"aria-label\":_vm.t('text', 'Insert emoji'),\"aria-haspopup\":true},on:{\"click\":function($event){return _vm.toggleChildMenu(icon)}}})]):(icon.class === 'icon-image')?_c('Actions',{key:icon.label,ref:\"imageActions\",refInFor:true,staticClass:\"submenu\",attrs:{\"default-icon\":'icon-image'},on:{\"open\":function($event){return _vm.toggleChildMenu(icon)},\"close\":function($event){_vm.onImageActionClose; _vm.toggleChildMenu(icon)}}},[_c('button',{class:{ 'icon-image': true, 'loading-small': _vm.uploadingImage },attrs:{\"slot\":\"icon\",\"title\":icon.label,\"aria-label\":icon.label,\"aria-haspopup\":true},slot:\"icon\"}),_vm._v(\" \"),_c('ActionButton',{attrs:{\"icon\":\"icon-upload\",\"close-after-click\":true,\"disabled\":_vm.uploadingImage},on:{\"click\":function($event){return _vm.onUploadImage()}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Upload from computer'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(!_vm.isPublic)?_c('ActionButton',{attrs:{\"icon\":\"icon-folder\",\"close-after-click\":true,\"disabled\":_vm.uploadingImage},on:{\"click\":function($event){return _vm.showImagePrompt()}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Insert from Files'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.showImageLinkPrompt)?_c('ActionButton',{attrs:{\"icon\":\"icon-link\",\"close-after-click\":false,\"disabled\":_vm.uploadingImage},on:{\"click\":function($event){_vm.showImageLinkPrompt = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Insert from link'))+\"\\n\\t\\t\\t\\t\")]):_c('ActionInput',{attrs:{\"icon\":\"icon-link\",\"value\":_vm.imageLink},on:{\"update:value\":_vm.onImageLinkUpdateValue,\"submit\":function($event){return _vm.onImageLinkSubmit()}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Image link to insert'))+\"\\n\\t\\t\\t\\t\")])],1):(icon.class)?_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:($index < _vm.iconCount),expression:\"$index < iconCount\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.getLabelAndKeys(icon)),expression:\"getLabelAndKeys(icon)\"}],key:icon.label,class:_vm.getIconClasses(icon),attrs:{\"disabled\":_vm.disabled(icon)},on:{\"click\":function($event){return _vm.clickIcon(icon)}}}):[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:($index < _vm.iconCount || !icon.class),expression:\"$index < iconCount || !icon.class\"},{name:\"click-outside\",rawName:\"v-click-outside\",value:(function () { return _vm.hideChildMenu(icon); }),expression:\"() => hideChildMenu(icon)\"}],key:icon.label,staticClass:\"submenu\"},[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.getLabelAndKeys(icon)),expression:\"getLabelAndKeys(icon)\"}],class:_vm.childIconClasses(icon.children ),on:{\"click\":function($event){$event.preventDefault();return _vm.toggleChildMenu(icon)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu menu-center\",class:{open: _vm.isChildMenuVisible(icon)}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.childPopoverMenu(icon.children, icon)}})],1)])]]}),_vm._v(\" \"),_c('Actions',{on:{\"open\":function($event){return _vm.toggleChildMenu({ label: 'Remaining Actions' })},\"close\":function($event){return _vm.toggleChildMenu({ label: 'Remaining Actions' })}}},[_vm._l((_vm.allIcons),function(icon,$index){return [(icon.class && _vm.isHiddenInMenu($index) && !(icon.class === 'icon-emoji'))?_c('ActionButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.getKeys(icon)),expression:\"getKeys(icon)\"}],key:icon.class,attrs:{\"icon\":icon.class,\"close-after-click\":true},on:{\"click\":function($event){return _vm.clickIcon(icon)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(icon.label)+\"\\n\\t\\t\\t\\t\")]):_vm._e()]})],2)],2):_vm._e(),_vm._v(\" \"),_vm._t(\"default\",function(){return [_vm._v(\"\\n\\t\\tLeft side\\n\\t\")]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default [\n\t{\n\t\tlabel: t('text', 'Undo'),\n\t\tkeyChar: 'z',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-undo',\n\t\taction: (command) => command.undo(),\n\t},\n\t{\n\t\tlabel: t('text', 'Redo'),\n\t\tkeyChar: 'y',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-redo',\n\t\taction: (command) => command.redo(),\n\t},\n\t{\n\t\tlabel: t('text', 'Bold'),\n\t\tkeyChar: 'b',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-bold',\n\t\tisActive: 'strong',\n\t\taction: (command) => {\n\t\t\treturn command.toggleBold()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Italic'),\n\t\tkeyChar: 'i',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-italic',\n\t\tisActive: 'em',\n\t\taction: (command) => {\n\t\t\treturn command.toggleItalic()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Underline'),\n\t\tkeyChar: 'u',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-underline',\n\t\tisActive: 'underline',\n\t\taction: (command) => {\n\t\t\treturn command.toggleUnderline()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Strikethrough'),\n\t\tkeyChar: 'd',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-strike',\n\t\tisActive: 'strike',\n\t\taction: (command) => {\n\t\t\treturn command.toggleStrike()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Headings'),\n\t\tkeyChar: '1…6',\n\t\tkeyModifiers: ['ctrl', 'shift'],\n\t\tvisible: false,\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 1'),\n\t\t\t\tclass: 'icon-h1',\n\t\t\t\tisActive: ['heading', { level: 1 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 1 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 2'),\n\t\t\t\tclass: 'icon-h2',\n\t\t\t\tisActive: ['heading', { level: 2 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 2 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 3'),\n\t\t\t\tclass: 'icon-h3',\n\t\t\t\tisActive: ['heading', { level: 3 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 3 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 4'),\n\t\t\t\tclass: 'icon-h4',\n\t\t\t\tisActive: ['heading', { level: 4 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 4 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 5'),\n\t\t\t\tclass: 'icon-h5',\n\t\t\t\tisActive: ['heading', { level: 5 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 5 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t('text', 'Heading 6'),\n\t\t\t\tclass: 'icon-h6',\n\t\t\t\tisActive: ['heading', { level: 6 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 6 })\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tlabel: t('text', 'Unordered list'),\n\t\tkeyChar: '8',\n\t\tkeyModifiers: ['ctrl', 'shift'],\n\t\tclass: 'icon-ul',\n\t\tisActive: 'bulletList',\n\t\taction: (command) => {\n\t\t\treturn command.bulletListItem()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Ordered list'),\n\t\tkeyChar: '9',\n\t\tkeyModifiers: ['ctrl', 'shift'],\n\t\tclass: 'icon-ol',\n\t\tisActive: 'orderedList',\n\t\taction: (command) => {\n\t\t\treturn command.toggleOrderedList()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'ToDo list'),\n\t\tclass: 'icon-checkmark',\n\t\t// Do we want to indicate that the current item is a todo item?\n\t\t// isActive: ['listItem', { type: 1 }],\n\t\taction: (command) => command.todo_item(),\n\t},\n\t{\n\t\tlabel: t('text', 'Blockquote'),\n\t\tkeyChar: '>',\n\t\tkeyModifiers: ['ctrl'],\n\t\tclass: 'icon-quote',\n\t\tisActive: 'blockquote',\n\t\taction: (command) => {\n\t\t\treturn command.toggleBlockquote()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Code block'),\n\t\tclass: 'icon-code',\n\t\tisActive: 'codeBlock',\n\t\taction: (command) => {\n\t\t\treturn command.toggleCodeBlock()\n\t\t},\n\t},\n\t{\n\t\tlabel: t('text', 'Emoji picker'),\n\t\tclass: 'icon-emoji',\n\t\taction: (command, emojiObject) => {\n\t\t\treturn command.emoji(emojiObject)\n\t\t},\n\t},\n]\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"menubar\" :class=\"{ 'show': isVisible, 'autohide': autohide }\">\n\t\t<input\n\t\t\tref=\"imageFileInput\"\n\t\t\ttype=\"file\"\n\t\t\taccept=\"image/*\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclass=\"hidden-visually\"\n\t\t\t@change=\"onImageUploadFilePicked\">\n\t\t<div v-if=\"isRichEditor\" ref=\"menubar\" class=\"menubar-icons\">\n\t\t\t<template v-for=\"(icon, $index) in allIcons\">\n\t\t\t\t<EmojiPicker v-if=\"icon.class === 'icon-emoji'\"\n\t\t\t\t\t:key=\"icon.label\"\n\t\t\t\t\tclass=\"menuitem-emoji\"\n\t\t\t\t\t@select=\"emojiObject => addEmoji(icon, emojiObject)\">\n\t\t\t\t\t<button v-tooltip=\"t('text', 'Insert emoji')\"\n\t\t\t\t\t\tclass=\"icon-emoji\"\n\t\t\t\t\t\t:aria-label=\"t('text', 'Insert emoji')\"\n\t\t\t\t\t\t:aria-haspopup=\"true\"\n\t\t\t\t\t\t@click=\"toggleChildMenu(icon)\" />\n\t\t\t\t</EmojiPicker>\n\t\t\t\t<Actions v-else-if=\"icon.class === 'icon-image'\"\n\t\t\t\t\t:key=\"icon.label\"\n\t\t\t\t\tref=\"imageActions\"\n\t\t\t\t\tclass=\"submenu\"\n\t\t\t\t\t:default-icon=\"'icon-image'\"\n\t\t\t\t\t@open=\"toggleChildMenu(icon)\"\n\t\t\t\t\t@close=\"onImageActionClose; toggleChildMenu(icon)\">\n\t\t\t\t\t<button slot=\"icon\"\n\t\t\t\t\t\t:class=\"{ 'icon-image': true, 'loading-small': uploadingImage }\"\n\t\t\t\t\t\t:title=\"icon.label\"\n\t\t\t\t\t\t:aria-label=\"icon.label\"\n\t\t\t\t\t\t:aria-haspopup=\"true\" />\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\ticon=\"icon-upload\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:disabled=\"uploadingImage\"\n\t\t\t\t\t\t@click=\"onUploadImage()\">\n\t\t\t\t\t\t{{ t('text', 'Upload from computer') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton v-if=\"!isPublic\"\n\t\t\t\t\t\ticon=\"icon-folder\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:disabled=\"uploadingImage\"\n\t\t\t\t\t\t@click=\"showImagePrompt()\">\n\t\t\t\t\t\t{{ t('text', 'Insert from Files') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton v-if=\"!showImageLinkPrompt\"\n\t\t\t\t\t\ticon=\"icon-link\"\n\t\t\t\t\t\t:close-after-click=\"false\"\n\t\t\t\t\t\t:disabled=\"uploadingImage\"\n\t\t\t\t\t\t@click=\"showImageLinkPrompt = true\">\n\t\t\t\t\t\t{{ t('text', 'Insert from link') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionInput v-else\n\t\t\t\t\t\ticon=\"icon-link\"\n\t\t\t\t\t\t:value=\"imageLink\"\n\t\t\t\t\t\t@update:value=\"onImageLinkUpdateValue\"\n\t\t\t\t\t\t@submit=\"onImageLinkSubmit()\">\n\t\t\t\t\t\t{{ t('text', 'Image link to insert') }}\n\t\t\t\t\t</ActionInput>\n\t\t\t\t</Actions>\n\t\t\t\t<button v-else-if=\"icon.class\"\n\t\t\t\t\tv-show=\"$index < iconCount\"\n\t\t\t\t\t:key=\"icon.label\"\n\t\t\t\t\tv-tooltip=\"getLabelAndKeys(icon)\"\n\t\t\t\t\t:class=\"getIconClasses(icon)\"\n\t\t\t\t\t:disabled=\"disabled(icon)\"\n\t\t\t\t\t@click=\"clickIcon(icon)\" />\n\t\t\t\t<template v-else>\n\t\t\t\t\t<div v-show=\"$index < iconCount || !icon.class\"\n\t\t\t\t\t\t:key=\"icon.label\"\n\t\t\t\t\t\tv-click-outside=\"() => hideChildMenu(icon)\"\n\t\t\t\t\t\tclass=\"submenu\">\n\t\t\t\t\t\t<button v-tooltip=\"getLabelAndKeys(icon)\"\n\t\t\t\t\t\t\t:class=\"childIconClasses(icon.children, )\"\n\t\t\t\t\t\t\t@click.prevent=\"toggleChildMenu(icon)\" />\n\t\t\t\t\t\t<div :class=\"{open: isChildMenuVisible(icon)}\" class=\"popovermenu menu-center\">\n\t\t\t\t\t\t\t<PopoverMenu :menu=\"childPopoverMenu(icon.children, icon)\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</template>\n\t\t\t<Actions\n\t\t\t\t@open=\"toggleChildMenu({ label: 'Remaining Actions' })\"\n\t\t\t\t@close=\"toggleChildMenu({ label: 'Remaining Actions' })\">\n\t\t\t\t<template v-for=\"(icon, $index) in allIcons\">\n\t\t\t\t\t<ActionButton v-if=\"icon.class && isHiddenInMenu($index) && !(icon.class === 'icon-emoji')\"\n\t\t\t\t\t\t:key=\"icon.class\"\n\t\t\t\t\t\tv-tooltip=\"getKeys(icon)\"\n\t\t\t\t\t\t:icon=\"icon.class\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t@click=\"clickIcon(icon)\">\n\t\t\t\t\t\t{{ icon.label }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<!--<template v-else-if=\"!icon.class && isHiddenInMenu($index)\">\n\t\t\t\t\t\t<ActionButton v-for=\"childIcon in icon.children\"\n\t\t\t\t\t\t\t:key=\"childIcon.class\"\n\t\t\t\t\t\t\t:icon=\"childIcon.class\"\n\t\t\t\t\t\t\t@click=\"clickIcon(childIcon)\">\n\t\t\t\t\t\t\tv-tooltip=\"getKeys(childIcon)\"\n\t\t\t\t\t\t\t{{ childIcon.label }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t</template>-->\n\t\t\t\t</template>\n\t\t\t</Actions>\n\t\t</div>\n\t\t<slot>\n\t\t\tLeft side\n\t\t</slot>\n\t</div>\n</template>\n\n<script>\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport menuBarIcons from './../mixins/menubar'\nimport isMobile from './../mixins/isMobile'\n\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ActionInput from '@nextcloud/vue/dist/Components/ActionInput'\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport EmojiPicker from '@nextcloud/vue/dist/Components/EmojiPicker'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showError } from '@nextcloud/dialogs'\n\nconst imageMimes = [\n\t'image/png',\n\t'image/jpeg',\n\t'image/jpg',\n\t'image/gif',\n\t'image/x-xbitmap',\n\t'image/x-ms-bmp',\n\t'image/bmp',\n\t'image/svg+xml',\n\t'image/webp',\n]\n\nexport default {\n\tname: 'MenuBar',\n\tcomponents: {\n\t\tActionButton,\n\t\tActionInput,\n\t\tPopoverMenu,\n\t\tActions,\n\t\tEmojiPicker,\n\t},\n\tdirectives: {\n\t\tTooltip,\n\t\tClickOutside,\n\t},\n\tmixins: [\n\t\tisMobile,\n\t],\n\tprops: {\n\t\teditor: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsyncService: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tisRichEditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tautohide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisPublic: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfilePath: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tfileId: {\n\t\t\ttype: Number,\n\t\t\trequired: false,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\twindowWidth: 0,\n\t\t\twindowHeight: 0,\n\t\t\tforceRecompute: 0,\n\t\t\tsubmenuVisibility: {},\n\t\t\tlastImagePath: null,\n\t\t\tshowImageLinkPrompt: false,\n\t\t\tuploadingImage: false,\n\t\t\timageLink: '',\n\t\t\ticons: [...menuBarIcons],\n\t\t}\n\t},\n\tcomputed: {\n\t\tisHiddenInMenu() {\n\t\t\treturn ($index) => $index - this.iconCount >= 0\n\t\t},\n\t\tgetIconClasses() {\n\t\t\treturn (icon) => {\n\t\t\t\tconst classes = {}\n\t\t\t\tclasses[icon.class] = true\n\t\t\t\tclasses['is-active'] = this.isActive(icon)\n\t\t\t\treturn classes\n\t\t\t}\n\t\t},\n\t\tisActive() {\n\t\t\treturn ({ isActive }) => {\n\t\t\t\tif (!isActive) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tconst args = Array.isArray(isActive) ? isActive : [isActive]\n\t\t\t\treturn this.editor.isActive(...args)\n\t\t\t}\n\t\t},\n\t\tisVisible() {\n\t\t\treturn this.editor.isFocused\n\t\t\t\t|| Object.values(this.submenuVisibility).find((v) => v)\n\t\t},\n\t\tdisabled() {\n\t\t\treturn (menuItem) => {\n\t\t\t\treturn menuItem.action && !menuItem.action(this.editor.can())\n\t\t\t}\n\t\t},\n\t\tisChildMenuVisible() {\n\t\t\treturn (icon) => {\n\t\t\t\treturn Object.prototype.hasOwnProperty.call(this.submenuVisibility, icon.label) ? this.submenuVisibility[icon.label] : false\n\t\t\t}\n\t\t},\n\t\tallIcons() {\n\t\t\treturn [...this.icons, {\n\t\t\t\tlabel: t('text', 'Insert image'),\n\t\t\t\tclass: 'icon-image',\n\t\t\t}, {\n\t\t\t\tlabel: t('text', 'Formatting help'),\n\t\t\t\tclass: 'icon-info',\n\t\t\t\tclick: () => {\n\t\t\t\t\tthis.$emit('show-help')\n\t\t\t\t},\n\t\t\t}]\n\t\t},\n\t\tchildPopoverMenu() {\n\t\t\treturn (icons, parent) => {\n\t\t\t\treturn icons.map(icon => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t// text: this.getLabelAndKeys(icons[index]),\n\t\t\t\t\t\ttext: icon.label,\n\t\t\t\t\t\ticon: icon.class,\n\t\t\t\t\t\tactive: this.isActive(icon),\n\t\t\t\t\t\taction: () => {\n\t\t\t\t\t\t\tthis.clickIcon(icon)\n\t\t\t\t\t\t\tthis.hideChildMenu(parent)\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tchildIconClasses() {\n\t\t\treturn (icons) => {\n\t\t\t\tconst icon = this.childIcon(icons)\n\t\t\t\treturn this.getIconClasses(icon)\n\t\t\t}\n\t\t},\n\t\tchildIcon() {\n\t\t\treturn (icons) => icons.find(icon => this.isActive(icon)) || icons[0]\n\t\t},\n\t\ticonCount() {\n\t\t\tthis.forceRecompute // eslint-disable-line\n\t\t\tthis.windowWidth // eslint-disable-line\n\t\t\tconst menuBarWidth = this.$refs.menubar && this.$refs.menubar.clientWidth > 200 ? this.$refs.menubar.clientWidth : 200\n\t\t\tconst iconCount = Math.max((Math.floor(menuBarWidth / 44) - 2), 0)\n\t\t\treturn iconCount - 1\n\t\t},\n\t\timagePath() {\n\t\t\treturn this.lastImagePath\n\t\t\t\t|| this.filePath.split('/').slice(0, -1).join('/')\n\t\t},\n\t},\n\tmounted() {\n\t\twindow.addEventListener('resize', this.getWindowWidth)\n\t\tthis.checkInterval = setInterval(() => {\n\t\t\tconst isWidthAvailable = (this.$refs.menubar && this.$refs.menubar.clientWidth > 0)\n\t\t\tif (this.isRichEditor && isWidthAvailable) {\n\t\t\t\tthis.redrawMenuBar()\n\t\t\t}\n\t\t\tif (!this.isRichEditor || isWidthAvailable) {\n\t\t\t\tclearInterval(this.checkInterval)\n\t\t\t}\n\t\t}, 100)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this.getWindowWidth)\n\t},\n\tmethods: {\n\t\tredrawMenuBar() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.getWindowWidth()\n\t\t\t\tthis.forceRecompute++\n\t\t\t})\n\t\t},\n\t\trefocus() {\n\t\t\tthis.editor.chain().focus().run()\n\t\t},\n\t\tclickIcon(icon) {\n\t\t\tif (icon.click) {\n\t\t\t\treturn icon.click()\n\t\t\t}\n\t\t\t// Some actions run themselves.\n\t\t\t// others still need to have .run() called upon them.\n\t\t\tconst action = icon.action(this.editor.chain().focus())\n\t\t\taction && action.run()\n\t\t},\n\t\tgetWindowWidth(event) {\n\t\t\tthis.windowWidth = document.documentElement.clientWidth\n\t\t},\n\t\tgetWindowHeight(event) {\n\t\t\tthis.windowHeight = document.documentElement.clientHeight\n\t\t},\n\t\thideChildMenu({ label }) {\n\t\t\tthis.$set(this.submenuVisibility, label, false)\n\t\t},\n\t\ttoggleChildMenu({ label }) {\n\t\t\tconst lastValue = Object.prototype.hasOwnProperty.call(this.submenuVisibility, label) ? this.submenuVisibility[label] : false\n\t\t\tthis.$set(this.submenuVisibility, label, !lastValue)\n\t\t\tif (lastValue) {\n\t\t\t\tthis.refocus()\n\t\t\t}\n\t\t},\n\t\tonImageActionClose() {\n\t\t\tthis.showImageLinkPrompt = false\n\t\t},\n\t\tonUploadImage() {\n\t\t\tthis.$refs.imageFileInput.click()\n\t\t},\n\t\tonImageUploadFilePicked(event) {\n\t\t\tthis.uploadingImage = true\n\t\t\tconst files = event.target.files\n\t\t\tconst image = files[0]\n\t\t\tif (!imageMimes.includes(image.type)) {\n\t\t\t\tshowError(t('text', 'Image format not supported'))\n\t\t\t\tthis.uploadingImage = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Clear input to ensure that the change event will be emitted if\n\t\t\t// the same file is picked again.\n\t\t\tevent.target.value = ''\n\n\t\t\tthis.syncService.uploadImage(image).then((response) => {\n\t\t\t\tthis.insertAttachmentImage(response.data?.name, response.data?.id)\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(error?.response?.data?.error)\n\t\t\t}).then(() => {\n\t\t\t\tthis.uploadingImage = false\n\t\t\t})\n\t\t},\n\t\tonImageLinkUpdateValue(newImageLink) {\n\t\t\t// this avoids the input being reset on each file polling\n\t\t\tthis.imageLink = newImageLink\n\t\t},\n\t\tonImageLinkSubmit() {\n\t\t\tif (!this.imageLink) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.uploadingImage = true\n\t\t\tthis.showImageLinkPrompt = false\n\t\t\tthis.$refs.imageActions[0].closeMenu()\n\n\t\t\tthis.syncService.insertImageLink(this.imageLink).then((response) => {\n\t\t\t\tthis.insertAttachmentImage(response.data?.name, response.data?.id)\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(error?.response?.data?.error)\n\t\t\t}).then(() => {\n\t\t\t\tthis.uploadingImage = false\n\t\t\t\tthis.imageLink = ''\n\t\t\t})\n\t\t},\n\t\tonImagePathSubmit(imagePath) {\n\t\t\tthis.uploadingImage = true\n\t\t\tthis.$refs.imageActions[0].closeMenu()\n\n\t\t\tthis.syncService.insertImageFile(imagePath).then((response) => {\n\t\t\t\tthis.insertAttachmentImage(response.data?.name, response.data?.id)\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(error?.response?.data?.error)\n\t\t\t}).then(() => {\n\t\t\t\tthis.uploadingImage = false\n\t\t\t})\n\t\t},\n\t\tshowImagePrompt() {\n\t\t\tconst currentUser = getCurrentUser()\n\t\t\tif (!currentUser) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tOC.dialogs.filepicker(t('text', 'Insert an image'), (file) => {\n\t\t\t\tthis.onImagePathSubmit(file)\n\t\t\t}, false, [], true, undefined, this.imagePath)\n\t\t},\n\t\tinsertAttachmentImage(name, fileId) {\n\t\t\tconst src = 'text://image?imageFileName=' + encodeURIComponent(name)\n\t\t\t// simply get rid of brackets to make sure link text is valid\n\t\t\t// as it does not need to be unique and matching the real file name\n\t\t\tconst alt = name.replaceAll(/[[\\]]/g, '')\n\t\t\tthis.editor.chain().setImage({ src, alt }).focus().run()\n\t\t},\n\t\toptimalPathTo(targetFile) {\n\t\t\tconst absolutePath = targetFile.split('/')\n\t\t\tconst relativePath = this.relativePathTo(targetFile).split('/')\n\t\t\treturn relativePath.length < absolutePath.length\n\t\t\t\t? relativePath.join('/')\n\t\t\t\t: targetFile\n\t\t},\n\t\trelativePathTo(targetFile) {\n\t\t\tconst current = this.filePath.split('/')\n\t\t\tconst target = targetFile.split('/')\n\t\t\tcurrent.pop() // ignore filename\n\t\t\twhile (current[0] === target[0]) {\n\t\t\t\tcurrent.shift()\n\t\t\t\ttarget.shift()\n\t\t\t}\n\t\t\treturn current.fill('..').concat(target).join('/')\n\t\t},\n\t\taddEmoji(icon, emojiObject) {\n\t\t\treturn icon.action(this.editor.chain(), emojiObject)\n\t\t\t\t.focus()\n\t\t\t\t.run()\n\t\t},\n\t\tkeysString(keyChar, modifiers = []) {\n\t\t\tconst translations = {\n\t\t\t\tctrl: t('text', 'Ctrl'),\n\t\t\t\talt: t('text', 'Alt'),\n\t\t\t\tshift: t('text', 'Shift'),\n\t\t\t}\n\t\t\treturn Object.entries(translations)\n\t\t\t\t.filter(([k, v]) => modifiers.includes(k))\n\t\t\t\t.map(([k, v]) => v)\n\t\t\t\t.concat(keyChar.toUpperCase())\n\t\t\t\t.join('+')\n\t\t},\n\t\tgetKeys(icon) {\n\t\t\treturn (icon.keyChar && !this.isMobile)\n\t\t\t\t? `(${this.keysString(icon.keyChar, icon.keyModifiers)})`\n\t\t\t\t: ''\n\t\t},\n\t\tgetLabelAndKeys(icon) {\n\t\t\treturn [icon.label, this.getKeys(icon)].join(' ')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.menubar {\n\t\t--background-blur: blur(10px);\n\t\tposition: fixed;\n\t\tposition: -webkit-sticky;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tdisplay: flex;\n\t\tjustify-content: flex-end;\n\t\tz-index: 10021; // above modal-header and menububble so menubar is always on top\n\t\tbackground-color: var(--color-main-background-translucent);\n\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\tbackdrop-filter: var(--background-blur);\n\t\tmax-height: 44px; // important for mobile so that the buttons are always inside the container\n\t\tpadding-top:3px;\n\t\tpadding-bottom: 3px;\n\n\t\t&.autohide {\n\t\t\tvisibility: hidden;\n\t\t\topacity: 0;\n\t\t\ttransition: visibility 0.2s 0.4s, opacity 0.2s 0.4s;\n\t\t\t&.show {\n\t\t\t\tvisibility: visible;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t\t.menubar-icons {\n\t\t\tflex-grow: 1;\n\t\t\tmargin-left: calc((100% - 660px) / 2);\n\t\t}\n\t\t@media (max-width: 660px) {\n\t\t\t.menubar-icons {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t}\n\t\t&::v-deep .action-item__menu ul {\n\t\t\tmax-height: calc(100vh - 88px);\n\t\t\toverflow: scroll;\n\t\t}\n\t}\n\n\t.menubar button {\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tmargin: 0;\n\t\tbackground-size: 16px;\n\t\tborder: 0;\n\t\tbackground-color: transparent;\n\t\topacity: .5;\n\t\tcolor: var(--color-main-text);\n\t\tbackground-position: center center;\n\t\tvertical-align: top;\n\t\t&:hover, &:focus, &:active {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t&.is-active::before {\n\t\t\ttransform: translateX(-50%);\n\t\t\tborder-radius: 100%;\n\t\t\tposition: absolute;\n\t\t\tbackground: var(--color-primary-element);\n\t\t\tbottom: 3px;\n\t\t\theight: 6px;\n\t\t\twidth: 6px;\n\t\t\tcontent: '';\n\t\t\tleft: 50%;\n\n\t\t}\n\t\t&.is-active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t&.icon-undo,\n\t\t&.icon-redo {\n\t\t\topacity: .8;\n\n\t\t\t&:disabled {\n\t\t\t\topacity: .4;\n\t\t\t}\n\t\t}\n\t}\n\n\t.menubar .submenu, .menubar .menuitem-emoji {\n\t\tdisplay: inline-block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tposition: relative;\n\t\tvertical-align: top;\n\t}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBar.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBar.vue?vue&type=style&index=0&id=aa1bf3a8&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBar.vue?vue&type=style&index=0&id=aa1bf3a8&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MenuBar.vue?vue&type=template&id=aa1bf3a8&scoped=true&\"\nimport script from \"./MenuBar.vue?vue&type=script&lang=js&\"\nexport * from \"./MenuBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MenuBar.vue?vue&type=style&index=0&id=aa1bf3a8&scoped=true&lang=scss&\"\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 \"aa1bf3a8\",\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('BubbleMenu',{staticClass:\"menububble\",attrs:{\"editor\":_vm.editor,\"tippy-options\":{ onHide: _vm.hideLinkMenu, duration: 200, placement: 'bottom' }}},[(_vm.linkMenuIsActive)?_c('form',{staticClass:\"menububble__form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.setLinkUrl()}}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.linkUrl),expression:\"linkUrl\"}],ref:\"linkInput\",staticClass:\"menububble__input\",attrs:{\"type\":\"text\",\"placeholder\":\"https://\"},domProps:{\"value\":(_vm.linkUrl)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.hideLinkMenu.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.linkUrl=$event.target.value}}}),_vm._v(\" \"),_c('button',{staticClass:\"menububble__button icon-confirm\",attrs:{\"type\":\"button\",\"tabindex\":\"0\"},on:{\"click\":function($event){return _vm.setLinkUrl()}}})]):[_c('button',{staticClass:\"menububble__button\",class:{ 'is-active': _vm.isActive('link') },on:{\"click\":function($event){return _vm.showLinkMenu()}}},[_c('span',{staticClass:\"icon-link\"}),_vm._v(\" \"),_c('span',{staticClass:\"menububble__buttontext\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.isActive('link') ? _vm.t('text', 'Update Link') : _vm.t('text', 'Add Link'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),(!_vm.isUsingDirectEditing)?_c('button',{staticClass:\"menububble__button\",class:{ 'is-active': _vm.isActive('link') },on:{\"click\":function($event){return _vm.selectFile()}}},[_c('span',{staticClass:\"icon-file\"}),_vm._v(\" \"),_c('span',{staticClass:\"menububble__buttontext\"},[_vm._v(_vm._s(_vm.t('text', 'Link file')))])]):_vm._e(),_vm._v(\" \"),(_vm.isActive('link'))?_c('button',{staticClass:\"menububble__button\",class:{ 'is-active': _vm.isActive('link') },on:{\"click\":function($event){return _vm.removeLinkUrl()}}},[_c('span',{staticClass:\"icon-delete\"}),_vm._v(\" \"),_c('span',{staticClass:\"menububble__buttontext\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Remove Link'))+\"\\n\\t\\t\\t\")])]):_vm._e()]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<BubbleMenu\n\t\t:editor=\"editor\"\n\t\t:tippy-options=\"{ onHide: hideLinkMenu, duration: 200, placement: 'bottom' }\"\n\t\tclass=\"menububble\">\n\t\t<form v-if=\"linkMenuIsActive\" class=\"menububble__form\" @submit.prevent=\"setLinkUrl()\">\n\t\t\t<input ref=\"linkInput\"\n\t\t\t\tv-model=\"linkUrl\"\n\t\t\t\tclass=\"menububble__input\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tplaceholder=\"https://\"\n\t\t\t\t@keydown.esc=\"hideLinkMenu\">\n\t\t\t<button class=\"menububble__button icon-confirm\"\n\t\t\t\ttype=\"button\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@click=\"setLinkUrl()\" />\n\t\t</form>\n\n\t\t<template v-else>\n\t\t\t<button\n\t\t\t\tclass=\"menububble__button\"\n\t\t\t\t:class=\"{ 'is-active': isActive('link') }\"\n\t\t\t\t@click=\"showLinkMenu()\">\n\t\t\t\t<span class=\"icon-link\" />\n\t\t\t\t<span class=\"menububble__buttontext\">\n\t\t\t\t\t{{ isActive('link') ? t('text', 'Update Link') : t('text', 'Add Link') }}\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t\t<button v-if=\"!isUsingDirectEditing\"\n\t\t\t\tclass=\"menububble__button\"\n\t\t\t\t:class=\"{ 'is-active': isActive('link') }\"\n\t\t\t\t@click=\"selectFile()\">\n\t\t\t\t<span class=\"icon-file\" />\n\t\t\t\t<span class=\"menububble__buttontext\">{{ t('text', 'Link file') }}</span>\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tv-if=\"isActive('link')\"\n\t\t\t\tclass=\"menububble__button\"\n\t\t\t\t:class=\"{ 'is-active': isActive('link') }\"\n\t\t\t\t@click=\"removeLinkUrl()\">\n\t\t\t\t<span class=\"icon-delete\" />\n\t\t\t\t<span class=\"menububble__buttontext\">\n\t\t\t\t\t{{ t('text', 'Remove Link') }}\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t</template>\n\t</BubbleMenu>\n</template>\n\n<script>\nimport { BubbleMenu } from '@tiptap/vue-2'\nimport { getMarkAttributes } from '@tiptap/core'\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { optimalPath } from './../helpers/files'\nimport { loadState } from '@nextcloud/initial-state'\n\nexport default {\n\tname: 'MenuBubble',\n\tcomponents: {\n\t\tBubbleMenu,\n\t},\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\tprops: {\n\t\teditor: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\t// used to calculate the position based on the scrollOffset\n\t\tcontentWrapper: {\n\t\t\ttype: HTMLDivElement,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tfilePath: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\tlinkUrl: null,\n\t\t\tlinkMenuIsActive: false,\n\t\t\tisUsingDirectEditing: loadState('text', 'directEditingToken', null) !== null,\n\t\t}\n\t},\n\tmethods: {\n\t\tshowLinkMenu() {\n\t\t\tconst attrs = getMarkAttributes(this.editor.state, 'link')\n\t\t\tthis.linkUrl = attrs.href\n\t\t\tthis.linkMenuIsActive = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.linkInput.focus()\n\t\t\t})\n\t\t},\n\t\thideLinkMenu() {\n\t\t\tthis.linkUrl = null\n\t\t\tthis.linkMenuIsActive = false\n\t\t},\n\t\tselectFile() {\n\t\t\tconst currentUser = getCurrentUser()\n\t\t\tif (!currentUser) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst startPath = this.filePath.split('/').slice(0, -1).join('/')\n\t\t\tOC.dialogs.filepicker(t('text', 'Select file to link to'), (file) => {\n\t\t\t\tconst client = OC.Files.getClient()\n\t\t\t\tclient.getFileInfo(file).then((_status, fileInfo) => {\n\t\t\t\t\tconst path = optimalPath(this.filePath, `${fileInfo.path}/${fileInfo.name}`)\n\t\t\t\t\tconst encodedPath = path.split('/').map(encodeURIComponent).join('/')\n\t\t\t\t\tconst href = `${encodedPath}?fileId=${fileInfo.id}`\n\t\t\t\t\tthis.editor.chain().setLink({ href }).focus().run()\n\t\t\t\t\tthis.hideLinkMenu()\n\t\t\t\t})\n\t\t\t}, false, [], true, undefined, startPath)\n\t\t},\n\t\tsetLinkUrl() {\n\t\t\tlet url = this.linkUrl\n\t\t\t// Heuristics for determining if we need a https:// prefix.\n\t\t\tconst noPrefixes = [\n\t\t\t\t/^[a-zA-Z]+:/, // url with protocol (\"mailTo:email@domain.tld\")\n\t\t\t\t/^\\//, // absolute path\n\t\t\t\t/\\?fileId=/, // relative link with fileId\n\t\t\t\t/^\\.\\.?\\//, // relative link starting with ./ or ../\n\t\t\t\t/^[^.]*[/$]/, // no dots before first '/' - not a domain name\n\t\t\t\t/^#/, // url fragment\n\t\t\t]\n\t\t\tif (url && !noPrefixes.find(regex => url.match(regex))) {\n\t\t\t\turl = 'https://' + url\n\t\t\t}\n\n\t\t\t// Avoid issues when parsing urls later on in markdown that might be entered in an invalid format (e.g. \"mailto: example@example.com\")\n\t\t\tconst href = url.replaceAll(' ', '%20')\n\t\t\tthis.editor.chain().setLink({ href }).focus().run()\n\t\t\tthis.hideLinkMenu()\n\t\t},\n\t\tremoveLinkUrl() {\n\t\t\tthis.editor.chain().unsetLink().focus().run()\n\t\t},\n\t\tisActive(selector, args = {}) {\n\t\t\treturn this.editor.isActive(selector, args)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.menububble {\n\t\tdisplay: flex;\n\t\tz-index: 10020;\n\t\tbackground: var(--color-main-background-translucent);\n\t\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n\t\tborder-radius: var(--border-radius-large);\n\t\toverflow: hidden;\n\t\tpadding: 0;\n\t\tmargin-left: 10px;\n\t\theight: 44px;\n\n\t\t&__button {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tborder: 0;\n\t\t\tpadding: 0.9rem 0.7rem;\n\t\t\tmargin: 0;\n\t\t\tborder-radius: 0;\n\t\t\tcursor: pointer;\n\t\t\tbackground-color: var(--color-main-background);\n\t\t\tborder-right: 1px solid var(--color-border);\n\n\t\t\t&:focus,\n\t\t\t&:hover {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\tborder: 0;\n\t\t\t\tborder-right: 1px solid var(--color-border) !important;\n\t\t\t}\n\n\t\t\t&:last-child {\n\t\t\t\tborder: 0 !important;\n\t\t\t}\n\t\t}\n\n\t\t&__buttontext {\n\t\t\tpadding: 0.4rem;\n\t\t\tpadding-right: 0;\n\t\t}\n\n\t\t&__form {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t&__input {\n\t\t\tfont: inherit;\n\t\t\tborder: none;\n\t\t\tbackground: transparent;\n\t\t\tmin-width: 250px;\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBubble.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBubble.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBubble.vue?vue&type=style&index=0&id=1df378e6&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuBubble.vue?vue&type=style&index=0&id=1df378e6&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MenuBubble.vue?vue&type=template&id=1df378e6&scoped=true&\"\nimport script from \"./MenuBubble.vue?vue&type=script&lang=js&\"\nexport * from \"./MenuBubble.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MenuBubble.vue?vue&type=style&index=0&id=1df378e6&scoped=true&lang=scss&\"\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 \"1df378e6\",\n null\n \n)\n\nexport default component.exports"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","class","loaded","ready","focus","darkTheme","canCreate","attrs","staticClass","on","createNew","_v","_s","t","_e","directives","name","rawName","value","expression","key","file","path","id","shareToken","mimetype","autofocus","$event","unfocus","reset","FILE_ACTION_IDENTIFIER","optimalPath","from","to","current","split","target","pop","shift","relativePath","fill","concat","absolutePath","length","join","registerFileCreate","newFileMenuPlugin","attach","menu","fileList","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","createFile","then","status","data","fileInfoModel","OCA","Files","FileInfoModel","Viewer","fileActions","triggerAction","OC","Plugins","register","registerFileActionFallback","sharingToken","document","getElementById","dir","ViewerRoot","createElement","body","appendChild","registerAction","mime","PERMISSION_UPDATE","PERMISSION_READ","imagePath","filename","window","FileList","findFile","Promise","all","imports","getCurrentDirectory","Vue","default","prototype","n","Editor","render","h","self","props","fileId","active","mimeType","close","$destroy","$mount","i","openMimetypes","setDefault","FilesWorkspacePlugin","el","registerHeader","bind","priority","module","vm","extend","RichWorkspace","propsData","store","$el","toString","openMimetypesMarkdown","openMimetypesPlainText","___CSS_LOADER_EXPORT___","push","label","keyChar","keyModifiers","action","command","undo","redo","isActive","toggleBold","toggleItalic","toggleUnderline","toggleStrike","visible","children","level","toggleHeading","bulletListItem","toggleOrderedList","todo_item","toggleBlockquote","toggleCodeBlock","emojiObject","emoji","isVisible","autohide","ref","onImageUploadFilePicked","_l","icon","$index","addEmoji","toggleChildMenu","refInFor","onImageActionClose","uploadingImage","slot","onUploadImage","isPublic","showImagePrompt","showImageLinkPrompt","imageLink","onImageLinkUpdateValue","onImageLinkSubmit","iconCount","getLabelAndKeys","getIconClasses","disabled","clickIcon","hideChildMenu","childIconClasses","preventDefault","open","isChildMenuVisible","childPopoverMenu","isHiddenInMenu","getKeys","_t","editor","onHide","hideLinkMenu","duration","placement","setLinkUrl","domProps","type","indexOf","_k","keyCode","apply","arguments","composing","linkUrl","showLinkMenu","isUsingDirectEditing","selectFile","removeLinkUrl"],"sourceRoot":""} \ No newline at end of file