1 line
12 KiB
Plaintext
1 line
12 KiB
Plaintext
{"version":3,"file":"RichWorkspace-DJbyRXWV.chunk.mjs","sources":["../src/views/RichWorkspace.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div\n\t\tv-if=\"shouldRender\"\n\t\tid=\"rich-workspace\"\n\t\t:class=\"{ focus: focus, dark: darkTheme }\">\n\t\t<RichTextReader\n\t\t\tv-if=\"!loaded || !ready\"\n\t\t\t:content=\"content\"\n\t\t\tclass=\"rich-workspace--preview\" />\n\t\t<Editor\n\t\t\tv-if=\"file\"\n\t\t\tv-show=\"ready\"\n\t\t\t:key=\"file.path\"\n\t\t\t:file-id=\"file.id\"\n\t\t\t:relative-path=\"file.path\"\n\t\t\t:share-token=\"shareToken\"\n\t\t\t:mime=\"file.mimetype\"\n\t\t\t:autofocus=\"autofocus\"\n\t\t\t:hide-menu=\"hideMenu\"\n\t\t\tactive\n\t\t\trich-workspace\n\t\t\t@ready=\"ready = true\"\n\t\t\t@focus=\"onFocus\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { t } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getSharingToken, isPublicShare } from '@nextcloud/sharing/public'\n\nimport getEditorInstance from '../components/Editor.singleton.js'\nimport RichTextReader from '../components/RichTextReader.vue'\n\nconst IS_PUBLIC = isPublicShare()\nconst WORKSPACE_URL = generateOcsUrl(\n\t'apps/text' + (IS_PUBLIC ? '/public' : '') + '/workspace',\n\t2,\n)\nconst descriptionFile =\n\tt('text', 'Readme') + '.' + loadState('text', 'default_file_extension')\nconst SUPPORTED_STATIC_FILENAMES = [\n\tdescriptionFile,\n\t'Readme.md',\n\t'README.md',\n\t'readme.md',\n]\n\nexport default {\n\tname: 'RichWorkspace',\n\tcomponents: {\n\t\tRichTextReader,\n\t\tEditor: getEditorInstance,\n\t},\n\tprops: {\n\t\tcontent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\thasRichWorkspace: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// Keep track of a local copy of the hasRichWorkspace state as it might change after initial rendering (e.g. when adding/removing the readme)\n\t\t\tlocalHasRichWorkspace: false,\n\t\t\tfocus: false,\n\t\t\tfolder: null,\n\t\t\tfile: null,\n\t\t\tloaded: false,\n\t\t\tready: false,\n\t\t\tautofocus: false,\n\t\t\tshouldAutofocus: false,\n\t\t\thideMenu: true,\n\t\t\tdarkTheme: window?.OCA?.Accessibility?.theme === 'dark',\n\t\t\tenabled: window?.OCA?.Text?.RichWorkspaceEnabled,\n\t\t}\n\t},\n\tcomputed: {\n\t\tshareToken() {\n\t\t\treturn getSharingToken()\n\t\t},\n\t\tshouldRender() {\n\t\t\treturn this.enabled && this.localHasRichWorkspace\n\t\t},\n\t},\n\twatch: {\n\t\tpath() {\n\t\t\tthis.reset()\n\t\t},\n\t\tready() {\n\t\t\tthis.shouldAutofocus = false\n\t\t},\n\t\tfocus(newValue) {\n\t\t\tif (!newValue) {\n\t\t\t\tdocument\n\t\t\t\t\t.querySelector('#rich-workspace .text-editor__main')\n\t\t\t\t\t.scrollTo(0, 0)\n\t\t\t}\n\t\t},\n\t\tshouldRender(value) {\n\t\t\tif (value) {\n\t\t\t\tthis.getFileInfo()\n\t\t\t}\n\t\t},\n\t\thasRichWorkspace(value) {\n\t\t\tthis.localHasRichWorkspace = value\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.localHasRichWorkspace = this.hasRichWorkspace\n\t\tsubscribe('Text::showRichWorkspace', this.showRichWorkspace)\n\t\tsubscribe('Text::hideRichWorkspace', this.hideRichWorkspace)\n\t\tsubscribe('files:node:created', this.onFileCreated)\n\t\tsubscribe('files:node:deleted', this.onFileDeleted)\n\t\tsubscribe('files:node:renamed', this.onFileRenamed)\n\n\t\tthis.listenKeydownEvents()\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe('Text::showRichWorkspace', this.showRichWorkspace)\n\t\tunsubscribe('Text::hideRichWorkspace', this.hideRichWorkspace)\n\t\tunsubscribe('files:node:created', this.onFileCreated)\n\t\tunsubscribe('files:node:deleted', this.onFileDeleted)\n\t\tunsubscribe('files:node:renamed', this.onFileRenamed)\n\n\t\tthis.unlistenKeydownEvents()\n\t},\n\tmethods: {\n\t\tonFocus() {\n\t\t\tthis.focus = true\n\t\t\tthis.hideMenu = false\n\t\t\tthis.unlistenKeydownEvents()\n\t\t},\n\t\treset() {\n\t\t\tthis.file = null\n\t\t\tthis.focus = false\n\t\t\tthis.shouldAutofocus = false\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tif (this.shouldRender) {\n\t\t\t\t\tthis.getFileInfo()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tgetFileInfo() {\n\t\t\tthis.file = null\n\t\t\tthis.ready = false\n\t\t\tthis.loaded = true\n\t\t\tconst params = { path: this.path }\n\t\t\tif (IS_PUBLIC) {\n\t\t\t\tparams.shareToken = this.shareToken\n\t\t\t}\n\t\t\treturn axios\n\t\t\t\t.get(WORKSPACE_URL, { params })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst data = response.data.ocs.data\n\t\t\t\t\tthis.folder = data.folder || null\n\t\t\t\t\tthis.file = data.file\n\t\t\t\t\tthis.editing = true\n\t\t\t\t\tthis.loaded = true\n\t\t\t\t\tthis.autofocus = this.shouldAutofocus\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\terror.response.data.ocs\n\t\t\t\t\t\t&& error.response.data.ocs.data.folder\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.folder = error.response.data.ocs.data.folder\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.folder = null\n\t\t\t\t\t}\n\t\t\t\t\tthis.file = null\n\t\t\t\t\tthis.loaded = true\n\t\t\t\t\tthis.ready = true\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t},\n\t\tshowRichWorkspace(event) {\n\t\t\tthis.enabled = true\n\t\t},\n\t\thideRichWorkspace() {\n\t\t\tthis.enabled = false\n\t\t},\n\t\tlistenKeydownEvents() {\n\t\t\twindow.addEventListener('keydown', this.onKeydown)\n\t\t},\n\t\tunlistenKeydownEvents() {\n\t\t\twindow.removeEventListener('keydown', this.onKeydown)\n\t\t},\n\t\tonKeydown(e) {\n\t\t\tif (e.key === 'Tab') {\n\t\t\t\tthis.hideMenu = false\n\t\t\t}\n\t\t},\n\t\tonFileCreated(node) {\n\t\t\tif (SUPPORTED_STATIC_FILENAMES.includes(node.basename)) {\n\t\t\t\tthis.shouldAutofocus = this.enabled\n\t\t\t\tthis.localHasRichWorkspace = true\n\t\t\t}\n\t\t},\n\t\tonFileDeleted(node) {\n\t\t\tif (node.path === this.file?.path) {\n\t\t\t\tthis.localHasRichWorkspace = false\n\t\t\t}\n\t\t},\n\t\tonFileRenamed(node) {\n\t\t\tif (SUPPORTED_STATIC_FILENAMES.includes(node.basename)) {\n\t\t\t\tthis.localHasRichWorkspace = true\n\t\t\t} else if (\n\t\t\t\tnode.fileid === this.file?.id\n\t\t\t\t&& node.path !== this.file?.path\n\t\t\t) {\n\t\t\t\tthis.localHasRichWorkspace = false\n\t\t\t}\n\t\t},\n\t\tt,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\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}\n\n.rich-workspace--preview {\n\tmargin-top: var(--default-clickable-area);\n\n\t&:deep(div[contenteditable='false']) {\n\t\tmargin: 0;\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\tcursor: pointer;\n\tdisplay: block;\n\tpadding-top: 43px;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n#rich-workspace: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:deep(.text-editor) {\n\theight: 100%;\n\tposition: unset !important;\n\ttop: auto !important;\n}\n\n#rich-workspace:deep(.text-editor__wrapper) {\n\tposition: unset !important;\n\toverflow: visible;\n}\n\n#rich-workspace:deep(.text-editor__main) {\n\toverflow: visible !important;\n}\n\n#rich-workspace:deep(.content-wrapper) {\n\toverflow: scroll !important;\n\tmax-height: calc(40vh - 50px);\n\tpadding-left: 10px;\n\tpadding-bottom: 10px;\n}\n\n#rich-workspace:deep(.text-editor__wrapper .ProseMirror) {\n\tpadding: 0px;\n\tmargin: 0;\n}\n\n#rich-workspace:deep(.table-wrapper .content) {\n\ttr {\n\t\tth,\n\t\ttd {\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\tth {\n\t\t\tdiv {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.action-item div {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: flex-end;\n\t\t\t}\n\t\t}\n\t}\n}\n\n#rich-workspace: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(.empty):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(\n\t\tto bottom,\n\t\trgba(255, 255, 255, 0),\n\t\tvar(--color-main-background)\n\t);\n\twidth: 100%;\n\theight: 4em;\n}\n\n#rich-workspace.dark:not(.focus):after {\n\tbackground-image: linear-gradient(\n\t\tto bottom,\n\t\trgba(0, 0, 0, 0),\n\t\tvar(--color-main-background)\n\t);\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</style>\n"],"names":["IS_PUBLIC","isPublicShare","WORKSPACE_URL","generateOcsUrl","descriptionFile","t","loadState","SUPPORTED_STATIC_FILENAMES","_sfc_main","RichTextReader","getEditorInstance","getSharingToken","newValue","value","subscribe","unsubscribe","params","axios","response","data","error","event","e","node"],"mappings":"swBA0CA,MAAAA,EAAAC,EAAA,EACAC,EAAAC,EACA,aAAAH,EAAA,UAAA,IAAA,aACA,CACA,EACAI,EACAC,EAAA,OAAA,QAAA,EAAA,IAAAC,EAAA,OAAA,wBAAA,EACAC,EAAA,CACAH,EACA,YACA,YACA,WACA,EAEAI,EAAA,CACA,KAAA,gBACA,WAAA,CACA,eAAAC,EACA,OAAAC,CACA,EACA,MAAA,CACA,QAAA,CACA,KAAA,OACA,QAAA,EACA,EACA,KAAA,CACA,KAAA,OACA,SAAA,EACA,EACA,OAAA,CACA,KAAA,QACA,QAAA,EACA,EACA,iBAAA,CACA,KAAA,QACA,QAAA,EACA,CACA,EACA,MAAA,CACA,MAAA,CAEA,sBAAA,GACA,MAAA,GACA,OAAA,KACA,KAAA,KACA,OAAA,GACA,MAAA,GACA,UAAA,GACA,gBAAA,GACA,SAAA,GACA,UAAA,QAAA,KAAA,eAAA,QAAA,OACA,QAAA,QAAA,KAAA,MAAA,oBACA,CACA,EACA,SAAA,CACA,YAAA,CACA,OAAAC,EAAA,CACA,EACA,cAAA,CACA,OAAA,KAAA,SAAA,KAAA,qBACA,CACA,EACA,MAAA,CACA,MAAA,CACA,KAAA,MAAA,CACA,EACA,OAAA,CACA,KAAA,gBAAA,EACA,EACA,MAAAC,EAAA,CACAA,GACA,SACA,cAAA,oCAAA,EACA,SAAA,EAAA,CAAA,CAEA,EACA,aAAAC,EAAA,CACAA,GACA,KAAA,YAAA,CAEA,EACA,iBAAAA,EAAA,CACA,KAAA,sBAAAA,CACA,CACA,EACA,SAAA,CACA,KAAA,sBAAA,KAAA,iBACAC,EAAA,0BAAA,KAAA,iBAAA,EACAA,EAAA,0BAAA,KAAA,iBAAA,EACAA,EAAA,qBAAA,KAAA,aAAA,EACAA,EAAA,qBAAA,KAAA,aAAA,EACAA,EAAA,qBAAA,KAAA,aAAA,EAEA,KAAA,oBAAA,CACA,EACA,eAAA,CACAC,EAAA,0BAAA,KAAA,iBAAA,EACAA,EAAA,0BAAA,KAAA,iBAAA,EACAA,EAAA,qBAAA,KAAA,aAAA,EACAA,EAAA,qBAAA,KAAA,aAAA,EACAA,EAAA,qBAAA,KAAA,aAAA,EAEA,KAAA,sBAAA,CACA,EACA,QAAA,CACA,SAAA,CACA,KAAA,MAAA,GACA,KAAA,SAAA,GACA,KAAA,sBAAA,CACA,EACA,OAAA,CACA,KAAA,KAAA,KACA,KAAA,MAAA,GACA,KAAA,gBAAA,GACA,KAAA,UAAA,IAAA,CACA,KAAA,cACA,KAAA,YAAA,CAEA,CAAA,CACA,EACA,aAAA,CACA,KAAA,KAAA,KACA,KAAA,MAAA,GACA,KAAA,OAAA,GACA,MAAAC,EAAA,CAAA,KAAA,KAAA,IAAA,EACA,OAAAhB,IACAgB,EAAA,WAAA,KAAA,YAEAC,EACA,IAAAf,EAAA,CAAA,OAAAc,CAAA,CAAA,EACA,KAAAE,GAAA,CACA,MAAAC,EAAAD,EAAA,KAAA,IAAA,KACA,OAAA,KAAA,OAAAC,EAAA,QAAA,KACA,KAAA,KAAAA,EAAA,KACA,KAAA,QAAA,GACA,KAAA,OAAA,GACA,KAAA,UAAA,KAAA,gBACA,EACA,CAAA,EACA,MAAAC,IAEAA,EAAA,SAAA,KAAA,KACAA,EAAA,SAAA,KAAA,IAAA,KAAA,OAEA,KAAA,OAAAA,EAAA,SAAA,KAAA,IAAA,KAAA,OAEA,KAAA,OAAA,KAEA,KAAA,KAAA,KACA,KAAA,OAAA,GACA,KAAA,MAAA,GACA,GACA,CACA,EACA,kBAAAC,EAAA,CACA,KAAA,QAAA,EACA,EACA,mBAAA,CACA,KAAA,QAAA,EACA,EACA,qBAAA,CACA,OAAA,iBAAA,UAAA,KAAA,SAAA,CACA,EACA,uBAAA,CACA,OAAA,oBAAA,UAAA,KAAA,SAAA,CACA,EACA,UAAAC,EAAA,CACAA,EAAA,MAAA,QACA,KAAA,SAAA,GAEA,EACA,cAAAC,EAAA,CACAhB,EAAA,SAAAgB,EAAA,QAAA,IACA,KAAA,gBAAA,KAAA,QACA,KAAA,sBAAA,GAEA,EACA,cAAAA,EAAA,CACAA,EAAA,OAAA,KAAA,MAAA,OACA,KAAA,sBAAA,GAEA,EACA,cAAAA,EAAA,CACAhB,EAAA,SAAAgB,EAAA,QAAA,EACA,KAAA,sBAAA,GAEAA,EAAA,SAAA,KAAA,MAAA,IACAA,EAAA,OAAA,KAAA,MAAA,OAEA,KAAA,sBAAA,GAEA,EACA,EAAAlB,CACA,CACA"} |