1 line
7.4 KiB
Plaintext
1 line
7.4 KiB
Plaintext
{"version":3,"file":"ViewerComponent-D29CPv23.chunk.mjs","sources":["../src/components/ViewerComponent.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<Editor\n\t\tv-if=\"!useSourceView\"\n\t\t:file-id=\"fileid\"\n\t\t:relative-path=\"filename\"\n\t\t:active=\"active || isEmbedded\"\n\t\t:autofocus=\"autofocus\"\n\t\t:share-token=\"shareToken\"\n\t\t:class=\"{ 'text-editor--embedding': isEmbedded }\"\n\t\t:mime=\"mime\"\n\t\t:show-outline-outside=\"showOutlineOutside\" />\n\t<div\n\t\tv-else\n\t\tid=\"editor-container\"\n\t\tdata-text-el=\"editor-container\"\n\t\tclass=\"text-editor source-viewer\">\n\t\t<Component\n\t\t\t:is=\"readerComponent\"\n\t\t\t:content=\"content\"\n\t\t\t:file-id=\"fileid\"\n\t\t\t:read-only=\"true\"\n\t\t\t:show-menu-bar=\"false\" />\n\t\t<NcButton v-if=\"isEmbedded\" class=\"toggle-interactive\" @click=\"toggleEdit\">\n\t\t\t{{ t('text', 'Edit') }}\n\t\t\t<template #icon>\n\t\t\t\t<PencilOutlineIcon />\n\t\t\t</template>\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { getClient, getRootPath } from '@nextcloud/files/dav'\nimport { t } from '@nextcloud/l10n'\nimport { getSharingToken } from '@nextcloud/sharing/public'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport Vue from 'vue'\nimport PencilOutlineIcon from 'vue-material-design-icons/PencilOutline.vue'\nimport MarkdownContentEditor from './Editor/MarkdownContentEditor.vue'\nimport PlainTextReader from './PlainTextReader.vue'\n\nimport getEditorInstance from './Editor.singleton.js'\n\nexport default {\n\tname: 'ViewerComponent',\n\tcomponents: {\n\t\tNcButton: Vue.extend(NcButton),\n\t\tPencilOutlineIcon: Vue.extend(PencilOutlineIcon),\n\t\tPlainTextReader: Vue.extend(PlainTextReader),\n\t\tMarkdownContentEditor: Vue.extend(MarkdownContentEditor),\n\t\tEditor: getEditorInstance,\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tisEmbedded: this.isEmbedded,\n\t\t}\n\t},\n\tprops: {\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tautofocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tshareToken: {\n\t\t\ttype: String,\n\t\t\tdefault: () => getSharingToken(),\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tshowOutlineOutside: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tpermissions: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tsource: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\t\tisEmbedded: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcontent: '',\n\t\t\thasToggledInteractiveEmbedding: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\t/** @return {boolean} */\n\t\tuseSourceView() {\n\t\t\treturn (\n\t\t\t\tthis.source\n\t\t\t\t&& (this.fileVersion\n\t\t\t\t\t|| !this.fileid\n\t\t\t\t\t|| this.isEmbedded\n\t\t\t\t\t|| this.isEncrypted)\n\t\t\t\t&& !this.hasToggledInteractiveEmbedding\n\t\t\t)\n\t\t},\n\n\t\tisEncrypted() {\n\t\t\treturn this.$attrs.e2EeIsEncrypted || false\n\t\t},\n\n\t\tisMarkdown() {\n\t\t\treturn (\n\t\t\t\tthis.mime === 'text/markdown' || this.mime === 'text/x-web-markdown'\n\t\t\t)\n\t\t},\n\n\t\t/** @return {boolean} */\n\t\treaderComponent() {\n\t\t\treturn this.isMarkdown ? MarkdownContentEditor : PlainTextReader\n\t\t},\n\t},\n\n\twatch: {\n\t\tsource() {\n\t\t\tthis.loadFileContent()\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.loadFileContent()\n\t},\n\n\tmethods: {\n\t\tasync loadFileContent() {\n\t\t\tif (this.useSourceView) {\n\t\t\t\tif (this.isEncrypted) {\n\t\t\t\t\tthis.content = await this.fetchDecryptedContent()\n\t\t\t\t\tthis.contentLoaded = true\n\t\t\t\t} else {\n\t\t\t\t\tconst response = await axios.get(this.source)\n\t\t\t\t\tthis.content = response.data\n\t\t\t\t\tthis.contentLoaded = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('update:loaded', true)\n\t\t},\n\t\ttoggleEdit() {\n\t\t\tthis.hasToggledInteractiveEmbedding = true\n\t\t},\n\t\tasync fetchDecryptedContent() {\n\t\t\tconst client = getClient()\n\t\t\tconst response = await client.getFileContents(\n\t\t\t\t`${getRootPath()}${this.filename}`,\n\t\t\t\t{ details: true },\n\t\t\t)\n\t\t\tconst blob = new Blob([response.data], {\n\t\t\t\ttype: response.headers['content-type'],\n\t\t\t})\n\t\t\tconst reader = new FileReader()\n\t\t\treader.readAsText(blob)\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\treader.onload = () => {\n\t\t\t\t\tresolve(reader.result)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tt,\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.text-editor:not(.viewer__file--hidden) {\n\ttop: 0;\n\twidth: 100%;\n\tmax-width: 100%;\n\theight: 100%;\n\tleft: 0;\n\tmargin: 0 auto;\n\tposition: relative;\n\tbackground-color: var(--color-main-background);\n\n\t&.source-viewer {\n\t\tdisplay: block;\n\n\t\t.text-editor__content-wrapper {\n\t\t\tmargin-top: var(--header-height);\n\t\t}\n\n\t\t.toggle-interactive {\n\t\t\tposition: sticky;\n\t\t\tbottom: 0;\n\t\t\tright: 0;\n\t\t\tz-index: 1;\n\t\t\tmargin-left: auto;\n\t\t\tmargin-right: 0;\n\t\t}\n\t}\n\n\t&.text-editor--embedding {\n\t\tmin-height: 400px;\n\t}\n}\n</style>\n<style lang=\"scss\">\n@media only screen and (max-width: 512px) {\n\t// on mobile, modal-container has top: 50px\n\t.text-editor {\n\t\ttop: auto;\n\t}\n}\n\nbody .toastify.dialogs {\n\t// Move the dialogs below the toolbar / status\n\tmargin-top: calc(45px + var(--default-clickable-area));\n}\n\n.viewer[data-handler='text'] .modal-wrapper .modal-container {\n\tbottom: 0;\n}\n</style>\n"],"names":["_sfc_main","Vue","NcButton","PencilOutlineIcon","PlainTextReader","MarkdownContentEditor","getEditorInstance","getSharingToken","response","axios","getClient","getRootPath","blob","reader","resolve","t"],"mappings":"w9BAiDA,MAAAA,EAAA,CACA,KAAA,kBACA,WAAA,CACA,SAAAC,EAAA,OAAAC,CAAA,EACA,kBAAAD,EAAA,OAAAE,CAAA,EACA,gBAAAF,EAAA,OAAAG,CAAA,EACA,sBAAAH,EAAA,OAAAI,CAAA,EACA,OAAAC,CACA,EACA,SAAA,CACA,MAAA,CACA,WAAA,KAAA,UACA,CACA,EACA,MAAA,CACA,SAAA,CACA,KAAA,OACA,QAAA,IACA,EACA,OAAA,CACA,KAAA,OACA,QAAA,IACA,EACA,OAAA,CACA,KAAA,QACA,QAAA,EACA,EACA,UAAA,CACA,KAAA,QACA,QAAA,EACA,EACA,WAAA,CACA,KAAA,OACA,QAAA,IAAAC,EAAA,CACA,EACA,KAAA,CACA,KAAA,OACA,QAAA,IACA,EACA,mBAAA,CACA,KAAA,QACA,QAAA,EACA,EACA,YAAA,CACA,KAAA,OACA,QAAA,EACA,EACA,OAAA,CACA,KAAA,OACA,QAAA,MACA,EACA,WAAA,CACA,KAAA,QACA,QAAA,EACA,CACA,EACA,MAAA,CACA,MAAA,CACA,QAAA,GACA,+BAAA,EACA,CACA,EACA,SAAA,CAEA,eAAA,CACA,OACA,KAAA,SACA,KAAA,aACA,CAAA,KAAA,QACA,KAAA,YACA,KAAA,cACA,CAAA,KAAA,8BAEA,EAEA,aAAA,CACA,OAAA,KAAA,OAAA,iBAAA,EACA,EAEA,YAAA,CACA,OACA,KAAA,OAAA,iBAAA,KAAA,OAAA,qBAEA,EAGA,iBAAA,CACA,OAAA,KAAA,WAAAF,EAAAD,CACA,CACA,EAEA,MAAA,CACA,QAAA,CACA,KAAA,gBAAA,CACA,CACA,EAEA,SAAA,CACA,KAAA,gBAAA,CACA,EAEA,QAAA,CACA,MAAA,iBAAA,CACA,GAAA,KAAA,cACA,GAAA,KAAA,YACA,KAAA,QAAA,MAAA,KAAA,sBAAA,EACA,KAAA,cAAA,OACA,CACA,MAAAI,EAAA,MAAAC,EAAA,IAAA,KAAA,MAAA,EACA,KAAA,QAAAD,EAAA,KACA,KAAA,cAAA,EACA,CAEA,KAAA,MAAA,gBAAA,EAAA,CACA,EACA,YAAA,CACA,KAAA,+BAAA,EACA,EACA,MAAA,uBAAA,CAEA,MAAAA,EAAA,MADAE,EAAA,EACA,gBACA,GAAAC,EAAA,CAAA,GAAA,KAAA,QAAA,GACA,CAAA,QAAA,EAAA,CACA,EACAC,EAAA,IAAA,KAAA,CAAAJ,EAAA,IAAA,EAAA,CACA,KAAAA,EAAA,QAAA,cAAA,CACA,CAAA,EACAK,EAAA,IAAA,WACA,OAAAA,EAAA,WAAAD,CAAA,EACA,IAAA,QAAAE,GAAA,CACAD,EAAA,OAAA,IAAA,CACAC,EAAAD,EAAA,MAAA,CACA,CACA,CAAA,CACA,EACA,EAAAE,CACA,CACA"} |