diff options
author | Max <max@nextcloud.com> | 2022-03-08 12:22:20 +0300 |
---|---|---|
committer | Max <max@nextcloud.com> | 2022-03-08 12:29:13 +0300 |
commit | 3ca1038af5b2aa57d22a5aca8b40140ef35f25a3 (patch) | |
tree | 5cf7cb05f72c2fc528b047c47c5c1d3818d4946a /js/editor-rich.js.map | |
parent | a875a72ceeaeae34edd7411ac9d86f96d62e7937 (diff) |
refactor: extract logic into computedperformance/postpone/rendering-menubar
Also rename `initialLoading` in `EditorWrapper` to `contentLoaded`.
This flag is set during the `initialLoading` state change.
It does indicates that the loading happened
Use the past tense to indicate that.
The editor wrapper is now loading in different steps.
The menus will load after the content.
So `content` seems more fitting then `initial`.
Signed-off-by: Max <max@nextcloud.com>
Diffstat (limited to 'js/editor-rich.js.map')
-rw-r--r-- | js/editor-rich.js.map | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/js/editor-rich.js.map b/js/editor-rich.js.map index 376329ad0..bf41b7e8c 100644 --- a/js/editor-rich.js.map +++ b/js/editor-rich.js.map @@ -1 +1 @@ -{"version":3,"file":"editor-rich.js?v=da1fe7ce754860b82118","mappings":"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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?9518","webpack://text/./src/views/RichWorkspace.vue?c027","webpack:///text/src/views/RichWorkspace.vue?vue&type=template&id=6af3308d&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=9fa709d4&scoped=true&lang=scss&","webpack:///text/src/components/MenuBubble.vue?vue&type=style&index=0&id=23aa9303&scoped=true&lang=scss&","webpack:///text/src/views/RichWorkspace.vue?vue&type=style&index=0&id=6af3308d&lang=scss&scoped=true&","webpack:///text/src/components/MenuBar.vue?vue&type=template&id=9fa709d4&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?98a4","webpack://text/./src/components/MenuBar.vue?ce1f","webpack:///text/src/components/MenuBubble.vue?vue&type=template&id=23aa9303&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?a094","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=\"filepath\"\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; loaded=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 { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'RichWorkspace',\n\tcomponents: {\n\t\tEditorWrapper: () => import(/* webpackChunkName: \"editor\" */'./../components/EditorWrapper'),\n\t},\n\tprops: {\n\t\tfile: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t\tfolder: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfocus: false,\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')?.value\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\tfilepath() {\n\t\t\tconst { path, name } = this.file\n\t\t\treturn path + (path.endsWith('/') ? '' : '/') + name\n\t\t},\n\t},\n\twatch: {\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\tsubscribe('Text::showRichWorkspace', () => {\n\t\t\tthis.enabled = true\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.focus = false\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.creating = 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.autofocus = true\n\t\t\tif (!this.file) {\n\t\t\t\twindow.FileList.createFile('Readme.md', { scrollTo: false, animate: false })\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=6af3308d&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=6af3308d&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RichWorkspace.vue?vue&type=template&id=6af3308d&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=6af3308d&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 \"6af3308d\",\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.filepath,\"share-token\":_vm.shareToken,\"active\":true,\"autohide\":true,\"mime\":_vm.file.mimetype,\"autofocus\":_vm.autofocus},on:{\"ready\":function($event){_vm.ready=true; _vm.loaded=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\tvm: 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\n\t\tconst PROPERTY_WORKSPACE_FILE = `{${OC.Files.Client.NS_NEXTCLOUD}}rich-workspace-file`\n\n\t\tconst oldGetWebdavProperties = fileList._getWebdavProperties\n\t\tfileList._getWebdavProperties = function() {\n\t\t\treturn [\n\t\t\t\t...oldGetWebdavProperties.apply(this, arguments),\n\t\t\t\tPROPERTY_WORKSPACE_FILE,\n\t\t\t]\n\t\t}\n\n\t\tlet readmeId = null\n\n\t\tfileList.filesClient.addFileInfoParser((response, data) => {\n\t\t\tif (data.mimetype === 'httpd/unix-directory') {\n\t\t\t\tconst props = response.propStat[0].properties\n\t\t\t\tconst dir = data.path + (data.path.endsWith('/') ? '' : '/') + data.name\n\t\t\t\tif (dir === fileList.getCurrentDirectory()) {\n\t\t\t\t\treadmeId = props[PROPERTY_WORKSPACE_FILE]\n\t\t\t\t\tthis.vm.folder = {\n\t\t\t\t\t\tpermissions: data.permissions,\n\t\t\t\t\t}\n\t\t\t\t\tthis.vm.loaded = true\n\t\t\t\t\t// in case no file is found we are done\n\t\t\t\t\tthis.vm.ready = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (readmeId && data.id === readmeId) {\n\t\t\t\tif (data.mimetype !== 'text/markdown') {\n\t\t\t\t\tconsole.warn('Expected workspace file to be markdown:', data)\n\t\t\t\t}\n\t\t\t\tthis.open(data)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/*\n\t\t\t * Handle the creation of 'Readme.md'.\n\t\t\t * The PROPFIND after the creation does not include the parent dir.\n\t\t\t */\n\t\t\tif (data.name === 'Readme.md'\n\t\t\t\t&& data.mimetype === 'text/markdown'\n\t\t\t\t&& data.path === fileList.getCurrentDirectory()) {\n\t\t\t\tthis.open(data)\n\t\t\t}\n\t\t})\n\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\tthis.vm = new View({\n\t\t\t\tpropsData: {\n\t\t\t\t\tfile: null,\n\t\t\t\t\tfolder: null,\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\tthis.vm.file = null\n\t\t\t\tthis.vm.folder = null\n\t\t\t})\n\t\t\tfileList.$el.on('changeDirectory', data => {\n\t\t\t\tthis.vm.file = null\n\t\t\t\tthis.vm.folder = null\n\t\t\t})\n\t\t})\n\t},\n\n\topen(data) {\n\t\tconst previous = this.vm.file\n\t\tconst id = parseInt(data.id)\n\t\tthis.vm.file = {\n\t\t\t...data,\n\t\t\tid,\n\t\t}\n\t\tif (previous?.id !== id) {\n\t\t\t// Editor loads new file. Wait for it to be ready.\n\t\t\tthis.vm.ready = false\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-9fa709d4]{--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-9fa709d4]{visibility:hidden;opacity:0;transition:visibility .2s .4s,opacity .2s .4s}.menubar.autohide.show[data-v-9fa709d4]{visibility:visible;opacity:1}.menubar .menubar-icons[data-v-9fa709d4]{flex-grow:1;margin-left:calc((100% - 660px)/2)}@media(max-width: 660px){.menubar .menubar-icons[data-v-9fa709d4]{margin-left:0}}.menubar[data-v-9fa709d4] .action-item__menu ul{max-height:calc(100vh - 88px);overflow:scroll}.menubar button[data-v-9fa709d4]{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-9fa709d4]:hover,.menubar button[data-v-9fa709d4]:focus,.menubar button[data-v-9fa709d4]:active{background-color:var(--color-background-dark)}.menubar button.is-active[data-v-9fa709d4]::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-9fa709d4],.menubar button[data-v-9fa709d4]:hover,.menubar button[data-v-9fa709d4]:focus{opacity:1}.menubar button.icon-undo[data-v-9fa709d4],.menubar button.icon-redo[data-v-9fa709d4]{opacity:.8}.menubar button.icon-undo[data-v-9fa709d4]:disabled,.menubar button.icon-redo[data-v-9fa709d4]:disabled{opacity:.4}.menubar .submenu[data-v-9fa709d4],.menubar .menuitem-emoji[data-v-9fa709d4]{display:inline-block;width:44px;height:44px;position:relative;vertical-align:top}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/MenuBar.vue\"],\"names\":[],\"mappings\":\"AAkeA,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.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-23aa9303]{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-23aa9303]{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-23aa9303]:focus,.menububble__button[data-v-23aa9303]:hover{background-color:var(--color-background-hover);border:0;border-right:1px solid var(--color-border) !important}.menububble__button[data-v-23aa9303]:last-child{border:0 !important}.menububble__buttontext[data-v-23aa9303]{padding:.4rem;padding-right:0}.menububble__form[data-v-23aa9303]{display:flex;align-items:center}.menububble__input[data-v-23aa9303]{font:inherit;border:none;background:transparent;min-width:250px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/MenuBubble.vue\"],\"names\":[],\"mappings\":\"AAyKA,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.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-6af3308d]{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-6af3308d]{min-height:90px}#rich-workspace[data-v-6af3308d]:only-child{margin-bottom:0}.empty-workspace[data-v-6af3308d]{padding-top:43px;color:var(--color-text-maxcontrast);height:0}#rich-workspace[data-v-6af3308d] div[contenteditable=false]{width:100%;padding:0px;background-color:var(--color-main-background);opacity:1;border:none}#rich-workspace[data-v-6af3308d] #editor-container{height:100%;position:unset !important;top:auto !important}#rich-workspace[data-v-6af3308d] #editor-wrapper{position:unset !important;overflow:visible}#rich-workspace[data-v-6af3308d] #editor{overflow:visible !important}#rich-workspace[data-v-6af3308d] .content-wrapper{overflow:scroll !important;max-height:calc(40vh - 50px);padding-left:10px;padding-bottom:60px}#rich-workspace[data-v-6af3308d] #editor-wrapper .ProseMirror{padding:0px;margin:0}#rich-workspace[data-v-6af3308d] .menubar{z-index:61;margin-bottom:-10px}#rich-workspace[data-v-6af3308d] .menubar .menubar-icons{margin-left:0}#rich-workspace[data-v-6af3308d] .editor__content{margin:0}#rich-workspace.focus[data-v-6af3308d]{max-height:50vh}#rich-workspace[data-v-6af3308d]:not(.focus){max-height:30vh;position:relative;overflow:hidden}#rich-workspace[data-v-6af3308d]: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-6af3308d]: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-6af3308d]:not(.focus){max-height:30vh}}html.ie #rich-workspace[data-v-6af3308d] #editor-container{position:initial}html.ie #rich-workspace[data-v-6af3308d] #editor-wrapper{position:relative !important;top:auto !important}html.ie #rich-workspace[data-v-6af3308d] #editor{display:flex;flex-direction:column;overflow:hidden !important}html.ie #rich-workspace[data-v-6af3308d] .menubar{position:relative;overflow:hidden;flex-shrink:0;height:44px;top:auto}html.ie #rich-workspace[data-v-6af3308d] #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\":\"AAkIA,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#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:{\"selectData\":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.toggleBulletList()\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-tasklist',\n\t\tisActive: 'taskList',\n\t\taction: (command) => command.toggleTaskList(),\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 ref=\"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@selectData=\"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 icon=\"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 @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\tthis.$emit('update:loaded', true)\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(), { id: emojiObject.id, native: emojiObject.native })\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=9fa709d4&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=9fa709d4&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MenuBar.vue?vue&type=template&id=9fa709d4&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=9fa709d4&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 \"9fa709d4\",\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 :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 class=\"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 v-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=23aa9303&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=23aa9303&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MenuBubble.vue?vue&type=template&id=23aa9303&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=23aa9303&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 \"23aa9303\",\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","filepath","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","vm","registerHeader","bind","priority","PROPERTY_WORKSPACE_FILE","Client","NS_NEXTCLOUD","oldGetWebdavProperties","_getWebdavProperties","apply","arguments","readmeId","filesClient","addFileInfoParser","response","propStat","properties","endsWith","folder","permissions","console","warn","open","module","View","extend","RichWorkspace","propsData","store","$el","previous","parseInt","openMimetypesMarkdown","openMimetypesPlainText","___CSS_LOADER_EXPORT___","push","label","keyChar","keyModifiers","action","command","undo","redo","isActive","toggleBold","toggleItalic","toggleUnderline","toggleStrike","visible","children","level","toggleHeading","toggleBulletList","toggleOrderedList","toggleTaskList","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","isChildMenuVisible","childPopoverMenu","isHiddenInMenu","getKeys","_t","editor","onHide","hideLinkMenu","duration","placement","setLinkUrl","domProps","type","indexOf","_k","keyCode","composing","linkUrl","showLinkMenu","isUsingDirectEditing","selectFile","removeLinkUrl"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"editor-rich.js?v=03f99e81ec09c629f936","mappings":"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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?9518","webpack://text/./src/views/RichWorkspace.vue?c027","webpack:///text/src/views/RichWorkspace.vue?vue&type=template&id=6af3308d&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=9fa709d4&scoped=true&lang=scss&","webpack:///text/src/components/MenuBubble.vue?vue&type=style&index=0&id=23aa9303&scoped=true&lang=scss&","webpack:///text/src/views/RichWorkspace.vue?vue&type=style&index=0&id=6af3308d&lang=scss&scoped=true&","webpack:///text/src/components/MenuBar.vue?vue&type=template&id=9fa709d4&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?98a4","webpack://text/./src/components/MenuBar.vue?ce1f","webpack:///text/src/components/MenuBubble.vue?vue&type=template&id=23aa9303&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?a094","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=\"filepath\"\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; loaded=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 { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'RichWorkspace',\n\tcomponents: {\n\t\tEditorWrapper: () => import(/* webpackChunkName: \"editor\" */'./../components/EditorWrapper'),\n\t},\n\tprops: {\n\t\tfile: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t\tfolder: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfocus: false,\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')?.value\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\tfilepath() {\n\t\t\tconst { path, name } = this.file\n\t\t\treturn path + (path.endsWith('/') ? '' : '/') + name\n\t\t},\n\t},\n\twatch: {\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\tsubscribe('Text::showRichWorkspace', () => {\n\t\t\tthis.enabled = true\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.focus = false\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.creating = 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.autofocus = true\n\t\t\tif (!this.file) {\n\t\t\t\twindow.FileList.createFile('Readme.md', { scrollTo: false, animate: false })\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=6af3308d&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=6af3308d&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RichWorkspace.vue?vue&type=template&id=6af3308d&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=6af3308d&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 \"6af3308d\",\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.filepath,\"share-token\":_vm.shareToken,\"active\":true,\"autohide\":true,\"mime\":_vm.file.mimetype,\"autofocus\":_vm.autofocus},on:{\"ready\":function($event){_vm.ready=true; _vm.loaded=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\tvm: 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\n\t\tconst PROPERTY_WORKSPACE_FILE = `{${OC.Files.Client.NS_NEXTCLOUD}}rich-workspace-file`\n\n\t\tconst oldGetWebdavProperties = fileList._getWebdavProperties\n\t\tfileList._getWebdavProperties = function() {\n\t\t\treturn [\n\t\t\t\t...oldGetWebdavProperties.apply(this, arguments),\n\t\t\t\tPROPERTY_WORKSPACE_FILE,\n\t\t\t]\n\t\t}\n\n\t\tlet readmeId = null\n\n\t\tfileList.filesClient.addFileInfoParser((response, data) => {\n\t\t\tif (data.mimetype === 'httpd/unix-directory') {\n\t\t\t\tconst props = response.propStat[0].properties\n\t\t\t\tconst dir = data.path + (data.path.endsWith('/') ? '' : '/') + data.name\n\t\t\t\tif (dir === fileList.getCurrentDirectory()) {\n\t\t\t\t\treadmeId = props[PROPERTY_WORKSPACE_FILE]\n\t\t\t\t\tthis.vm.folder = {\n\t\t\t\t\t\tpermissions: data.permissions,\n\t\t\t\t\t}\n\t\t\t\t\tthis.vm.loaded = true\n\t\t\t\t\t// in case no file is found we are done\n\t\t\t\t\tthis.vm.ready = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (readmeId && data.id === readmeId) {\n\t\t\t\tif (data.mimetype !== 'text/markdown') {\n\t\t\t\t\tconsole.warn('Expected workspace file to be markdown:', data)\n\t\t\t\t}\n\t\t\t\tthis.open(data)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/*\n\t\t\t * Handle the creation of 'Readme.md'.\n\t\t\t * The PROPFIND after the creation does not include the parent dir.\n\t\t\t */\n\t\t\tif (data.name === 'Readme.md'\n\t\t\t\t&& data.mimetype === 'text/markdown'\n\t\t\t\t&& data.path === fileList.getCurrentDirectory()) {\n\t\t\t\tthis.open(data)\n\t\t\t}\n\t\t})\n\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\tthis.vm = new View({\n\t\t\t\tpropsData: {\n\t\t\t\t\tfile: null,\n\t\t\t\t\tfolder: null,\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\tthis.vm.file = null\n\t\t\t\tthis.vm.folder = null\n\t\t\t})\n\t\t\tfileList.$el.on('changeDirectory', data => {\n\t\t\t\tthis.vm.file = null\n\t\t\t\tthis.vm.folder = null\n\t\t\t})\n\t\t})\n\t},\n\n\topen(data) {\n\t\tconst previous = this.vm.file\n\t\tconst id = parseInt(data.id)\n\t\tthis.vm.file = {\n\t\t\t...data,\n\t\t\tid,\n\t\t}\n\t\tif (previous?.id !== id) {\n\t\t\t// Editor loads new file. Wait for it to be ready.\n\t\t\tthis.vm.ready = false\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-9fa709d4]{--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-9fa709d4]{visibility:hidden;opacity:0;transition:visibility .2s .4s,opacity .2s .4s}.menubar.autohide.show[data-v-9fa709d4]{visibility:visible;opacity:1}.menubar .menubar-icons[data-v-9fa709d4]{flex-grow:1;margin-left:calc((100% - 660px)/2)}@media(max-width: 660px){.menubar .menubar-icons[data-v-9fa709d4]{margin-left:0}}.menubar[data-v-9fa709d4] .action-item__menu ul{max-height:calc(100vh - 88px);overflow:scroll}.menubar button[data-v-9fa709d4]{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-9fa709d4]:hover,.menubar button[data-v-9fa709d4]:focus,.menubar button[data-v-9fa709d4]:active{background-color:var(--color-background-dark)}.menubar button.is-active[data-v-9fa709d4]::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-9fa709d4],.menubar button[data-v-9fa709d4]:hover,.menubar button[data-v-9fa709d4]:focus{opacity:1}.menubar button.icon-undo[data-v-9fa709d4],.menubar button.icon-redo[data-v-9fa709d4]{opacity:.8}.menubar button.icon-undo[data-v-9fa709d4]:disabled,.menubar button.icon-redo[data-v-9fa709d4]:disabled{opacity:.4}.menubar .submenu[data-v-9fa709d4],.menubar .menuitem-emoji[data-v-9fa709d4]{display:inline-block;width:44px;height:44px;position:relative;vertical-align:top}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/MenuBar.vue\"],\"names\":[],\"mappings\":\"AAkeA,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.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-23aa9303]{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-23aa9303]{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-23aa9303]:focus,.menububble__button[data-v-23aa9303]:hover{background-color:var(--color-background-hover);border:0;border-right:1px solid var(--color-border) !important}.menububble__button[data-v-23aa9303]:last-child{border:0 !important}.menububble__buttontext[data-v-23aa9303]{padding:.4rem;padding-right:0}.menububble__form[data-v-23aa9303]{display:flex;align-items:center}.menububble__input[data-v-23aa9303]{font:inherit;border:none;background:transparent;min-width:250px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/MenuBubble.vue\"],\"names\":[],\"mappings\":\"AAyKA,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.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-6af3308d]{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-6af3308d]{min-height:90px}#rich-workspace[data-v-6af3308d]:only-child{margin-bottom:0}.empty-workspace[data-v-6af3308d]{padding-top:43px;color:var(--color-text-maxcontrast);height:0}#rich-workspace[data-v-6af3308d] div[contenteditable=false]{width:100%;padding:0px;background-color:var(--color-main-background);opacity:1;border:none}#rich-workspace[data-v-6af3308d] #editor-container{height:100%;position:unset !important;top:auto !important}#rich-workspace[data-v-6af3308d] #editor-wrapper{position:unset !important;overflow:visible}#rich-workspace[data-v-6af3308d] #editor{overflow:visible !important}#rich-workspace[data-v-6af3308d] .content-wrapper{overflow:scroll !important;max-height:calc(40vh - 50px);padding-left:10px;padding-bottom:60px}#rich-workspace[data-v-6af3308d] #editor-wrapper .ProseMirror{padding:0px;margin:0}#rich-workspace[data-v-6af3308d] .menubar{z-index:61;margin-bottom:-10px}#rich-workspace[data-v-6af3308d] .menubar .menubar-icons{margin-left:0}#rich-workspace[data-v-6af3308d] .editor__content{margin:0}#rich-workspace.focus[data-v-6af3308d]{max-height:50vh}#rich-workspace[data-v-6af3308d]:not(.focus){max-height:30vh;position:relative;overflow:hidden}#rich-workspace[data-v-6af3308d]: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-6af3308d]: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-6af3308d]:not(.focus){max-height:30vh}}html.ie #rich-workspace[data-v-6af3308d] #editor-container{position:initial}html.ie #rich-workspace[data-v-6af3308d] #editor-wrapper{position:relative !important;top:auto !important}html.ie #rich-workspace[data-v-6af3308d] #editor{display:flex;flex-direction:column;overflow:hidden !important}html.ie #rich-workspace[data-v-6af3308d] .menubar{position:relative;overflow:hidden;flex-shrink:0;height:44px;top:auto}html.ie #rich-workspace[data-v-6af3308d] #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\":\"AAkIA,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#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:{\"selectData\":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.toggleBulletList()\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-tasklist',\n\t\tisActive: 'taskList',\n\t\taction: (command) => command.toggleTaskList(),\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 ref=\"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@selectData=\"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 icon=\"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 @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\tthis.$emit('update:loaded', true)\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(), { id: emojiObject.id, native: emojiObject.native })\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=9fa709d4&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=9fa709d4&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MenuBar.vue?vue&type=template&id=9fa709d4&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=9fa709d4&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 \"9fa709d4\",\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 :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 class=\"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 v-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=23aa9303&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=23aa9303&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MenuBubble.vue?vue&type=template&id=23aa9303&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=23aa9303&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 \"23aa9303\",\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","filepath","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","vm","registerHeader","bind","priority","PROPERTY_WORKSPACE_FILE","Client","NS_NEXTCLOUD","oldGetWebdavProperties","_getWebdavProperties","apply","arguments","readmeId","filesClient","addFileInfoParser","response","propStat","properties","endsWith","folder","permissions","console","warn","open","module","View","extend","RichWorkspace","propsData","store","$el","previous","parseInt","openMimetypesMarkdown","openMimetypesPlainText","___CSS_LOADER_EXPORT___","push","label","keyChar","keyModifiers","action","command","undo","redo","isActive","toggleBold","toggleItalic","toggleUnderline","toggleStrike","visible","children","level","toggleHeading","toggleBulletList","toggleOrderedList","toggleTaskList","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","isChildMenuVisible","childPopoverMenu","isHiddenInMenu","getKeys","_t","editor","onHide","hideLinkMenu","duration","placement","setLinkUrl","domProps","type","indexOf","_k","keyCode","composing","linkUrl","showLinkMenu","isUsingDirectEditing","selectFile","removeLinkUrl"],"sourceRoot":""}
\ No newline at end of file |