Files
nextcloud-server-mirror/dist/files-reference-files.mjs.map
2026-10-07 08:58:40 +00:00

1 line
19 KiB
Plaintext

{"version":3,"file":"files-reference-files.mjs","sources":["../build/frontend/apps/files/src/utils/generateUrl.ts","../build/frontend/apps/files/src/views/FileReferencePickerElement.vue","../build/frontend/apps/files/src/views/ReferenceFileWidget.vue","../build/frontend/apps/files/src/reference-files.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { generateUrl, getBaseUrl } from '@nextcloud/router'\n\ninterface IGlobalScaleCapabilities {\n\ttoken?: string\n}\n\n/**\n * @param fileid - The file ID to generate the direct file link for\n */\nexport function generateFileUrl(fileid: number): string {\n\tconst baseURL = getBaseUrl()\n\n\tconst { globalscale } = getCapabilities() as { globalscale?: IGlobalScaleCapabilities }\n\tif (globalscale?.token) {\n\t\treturn generateUrl('/gf/{token}/{fileid}', {\n\t\t\ttoken: globalscale.token,\n\t\t\tfileid,\n\t\t}, { baseURL })\n\t}\n\n\treturn generateUrl('/f/{fileid}', {\n\t\tfileid,\n\t}, {\n\t\tbaseURL,\n\t})\n}\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div :id=\"containerId\" />\n</template>\n\n<script setup lang=\"ts\">\nimport type { IFilePickerButton } from '@nextcloud/dialogs'\nimport type { INode } from '@nextcloud/files'\n\nimport { FilePickerBuilder } from '@nextcloud/dialogs'\nimport { t } from '@nextcloud/l10n'\nimport { onMounted } from 'vue'\nimport { generateFileUrl } from '../utils/generateUrl.ts'\nimport { logger } from '../utils/logger.ts'\n\ndefineProps<{\n\t// eslint-disable-next-line vue/no-unused-properties -- Provided as per API but not used\n\tproviderId: string\n\t// eslint-disable-next-line vue/no-unused-properties -- Provided as per API but not used\n\taccessible: boolean\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'submit', url: string): void\n\t(e: 'cancel'): void\n}>()\n\nconst containerId = `filepicker-${Math.random().toString(36).slice(7)}`\n\nconst filePicker = new FilePickerBuilder(t('files', 'Select file or folder to link to'))\n\t.allowDirectories(true)\n\t.setButtonFactory(buttonFactory)\n\t.setContainer(`#${containerId}`)\n\t.setMultiSelect(false)\n\t.build()\n\nonMounted(async () => {\n\ttry {\n\t\tconst [node] = await filePicker.pickNodes()\n\t\tonSubmit(node)\n\t} catch (error) {\n\t\tlogger.debug('Aborted picking nodes:', { error })\n\t\temit('cancel')\n\t}\n})\n\n/**\n * Get buttons for the file picker dialog\n *\n * @param selected - currently selected nodes\n */\nfunction buttonFactory(selected: INode[]): IFilePickerButton[] {\n\tconst buttons = [] as IFilePickerButton[]\n\tconst node = selected[0]\n\tif (node === undefined) {\n\t\treturn []\n\t}\n\n\tif (node.path === '/') {\n\t\treturn [] // Do not allow selecting the users root folder\n\t}\n\n\tbuttons.push({\n\t\tlabel: t('files', 'Choose {file}', { file: node.displayname }),\n\t\tvariant: 'primary',\n\t\tcallback: () => {}, // handled by the pickNodes method\n\t})\n\treturn buttons\n}\n\n/**\n * @param node - selected node\n */\nfunction onSubmit(node: INode) {\n\temit('submit', generateFileUrl(node.fileid!))\n}\n</script>\n","<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div v-if=\"!accessible\" class=\"widget-file widget-file--no-access\">\n\t\t<span class=\"widget-file__image widget-file__image--icon\">\n\t\t\t<FolderIcon v-if=\"isFolder\" :size=\"88\" />\n\t\t\t<FileIcon v-else :size=\"88\" />\n\t\t</span>\n\t\t<span class=\"widget-file__details\">\n\t\t\t<p class=\"widget-file__title\">\n\t\t\t\t{{ t('files', 'File cannot be accessed') }}\n\t\t\t</p>\n\t\t\t<p class=\"widget-file__description\">\n\t\t\t\t{{ t('files', 'The file could not be found or you do not have permissions to view it. Ask the sender to share it.') }}\n\t\t\t</p>\n\t\t</span>\n\t</div>\n\n\t<!-- Live preview if a handler is available -->\n\t<component\n\t\t:is=\"viewerHandler.component\"\n\t\tv-else-if=\"interactive && viewerHandler && !failedViewer\"\n\t\t:active=\"false /* prevent video from autoplaying */\"\n\t\t:canSwipe=\"false\"\n\t\t:canZoom=\"false\"\n\t\t:isEmbedded=\"true\"\n\t\tv-bind=\"viewerFile\"\n\t\t:fileList=\"[viewerFile]\"\n\t\t:isFullScreen=\"false\"\n\t\t:isSidebarShown=\"false\"\n\t\tclass=\"widget-file widget-file--interactive\"\n\t\t@error=\"failedViewer = true\" />\n\n\t<!-- The file is accessible -->\n\t<a\n\t\tv-else\n\t\tclass=\"widget-file widget-file--link\"\n\t\t:href=\"richObject.link\"\n\t\ttarget=\"_blank\"\n\t\t@click=\"navigate\">\n\t\t<span class=\"widget-file__image\" :class=\"filePreviewClass\" :style=\"filePreviewStyle\">\n\t\t\t<template v-if=\"!previewUrl\">\n\t\t\t\t<FolderIcon v-if=\"isFolder\" :size=\"88\" fillColor=\"var(--color-primary-element)\" />\n\t\t\t\t<FileIcon v-else :size=\"88\" />\n\t\t\t</template>\n\t\t</span>\n\t\t<span class=\"widget-file__details\">\n\t\t\t<p class=\"widget-file__title\">{{ richObject.name }}</p>\n\t\t\t<p class=\"widget-file__description\">{{ fileSize }}<br>{{ fileMtime }}</p>\n\t\t\t<p class=\"widget-file__link\">{{ filePath }}</p>\n\t\t</span>\n\t</a>\n</template>\n\n<script lang=\"ts\">\nimport type { Node } from '@nextcloud/files'\nimport type { Component, PropType } from 'vue'\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getFilePickerBuilder } from '@nextcloud/dialogs'\nimport { t } from '@nextcloud/l10n'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport path from 'path'\nimport { defineComponent } from 'vue'\nimport FileIcon from 'vue-material-design-icons/File.vue'\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\nimport { generateFileUrl } from '../utils/generateUrl.ts'\nimport { logger } from '../utils/logger.ts'\n\n// see lib/private/Collaboration/Reference/File/FileReferenceProvider.php\ntype Ressource = {\n\tid: number\n\tname: string\n\tsize: number\n\tpath: string\n\tlink: string\n\tmimetype: string\n\tmtime: number // as unix timestamp\n\t'preview-available': boolean\n}\n\ntype ViewerHandler = {\n\tid: string\n\tgroup: string\n\tmimes: string[]\n\tcomponent: Component\n}\n\n/**\n * Minimal mock of the legacy Viewer FileInfo\n * TODO: replace by Node object\n */\ntype ViewerFile = {\n\tfilename: string // the path to the root folder\n\tbasename: string // the file name\n\tlastmod: Date // the last modification date\n\tsize: number // the file size in bytes\n\ttype: string\n\tmime: string\n\tfileid: number\n\tfailed: boolean\n\tloaded: boolean\n\tdavPath: string\n\tsource: string\n}\n\nexport default defineComponent({\n\tname: 'ReferenceFileWidget',\n\tcomponents: {\n\t\tFolderIcon,\n\t\tFileIcon,\n\t},\n\n\tprops: {\n\t\trichObject: {\n\t\t\ttype: Object as PropType<Ressource>,\n\t\t\trequired: true,\n\t\t},\n\n\t\taccessible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\tinteractive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpreviewUrl: null as string | null,\n\t\t\tfailedViewer: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tavailableViewerHandlers(): ViewerHandler[] {\n\t\t\treturn (window?.OCA?.Viewer?.availableHandlers || []) as ViewerHandler[]\n\t\t},\n\n\t\tviewerHandler(): ViewerHandler | undefined {\n\t\t\treturn this.availableViewerHandlers\n\t\t\t\t.find((handler) => handler.mimes.includes(this.richObject.mimetype))\n\t\t},\n\n\t\tviewerFile(): ViewerFile {\n\t\t\tconst davSource = generateRemoteUrl(`dav/files/${getCurrentUser()?.uid}/${this.richObject.path}`)\n\t\t\t\t.replace(/\\/\\/$/, '/')\n\t\t\treturn {\n\t\t\t\tfilename: this.richObject.path,\n\t\t\t\tbasename: this.richObject.name,\n\t\t\t\tlastmod: new Date(this.richObject.mtime * 1000),\n\t\t\t\tsize: this.richObject.size,\n\t\t\t\ttype: 'file',\n\t\t\t\tmime: this.richObject.mimetype,\n\t\t\t\tfileid: this.richObject.id,\n\t\t\t\tfailed: false,\n\t\t\t\tloaded: true,\n\t\t\t\tdavPath: davSource,\n\t\t\t\tsource: davSource,\n\t\t\t}\n\t\t},\n\n\t\tfileSize() {\n\t\t\treturn window.OC.Util.humanFileSize(this.richObject.size)\n\t\t},\n\n\t\tfileMtime() {\n\t\t\treturn window.OC.Util.relativeModifiedDate(this.richObject.mtime * 1000)\n\t\t},\n\n\t\tfilePath() {\n\t\t\treturn path.dirname(this.richObject.path)\n\t\t},\n\n\t\tfilePreviewStyle() {\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn {\n\t\t\t\t\tbackgroundImage: 'url(' + this.previewUrl + ')',\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {}\n\t\t},\n\n\t\tfilePreviewClass() {\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn 'widget-file__image--preview'\n\t\t\t}\n\t\t\treturn 'widget-file__image--icon'\n\t\t},\n\n\t\tisFolder() {\n\t\t\treturn this.richObject.mimetype === 'httpd/unix-directory'\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (this.richObject['preview-available']) {\n\t\t\tconst previewUrl = generateUrl('/core/preview?fileId={fileId}&x=250&y=250', {\n\t\t\t\tfileId: this.richObject.id,\n\t\t\t})\n\t\t\tconst img = new Image()\n\t\t\timg.onload = () => {\n\t\t\t\tthis.previewUrl = previewUrl\n\t\t\t}\n\t\t\timg.onerror = (error) => {\n\t\t\t\tlogger.error('could not load recommendation preview', { error })\n\t\t\t}\n\t\t\timg.src = previewUrl\n\t\t}\n\t},\n\n\tmethods: {\n\t\tnavigate(event) {\n\t\t\tif (this.isFolder) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.openFilePicker()\n\t\t\t} else if (window?.OCA?.Viewer?.mimetypes.indexOf(this.richObject.mimetype) !== -1 && !window?.OCA?.Viewer?.file) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\twindow?.OCA?.Viewer?.open({ path: this.richObject.path })\n\t\t\t}\n\t\t},\n\n\t\topenFilePicker() {\n\t\t\tconst picker = getFilePickerBuilder(t('settings', 'Your files'))\n\t\t\t\t.allowDirectories(true)\n\t\t\t\t.setMultiSelect(false)\n\t\t\t\t.addButton({\n\t\t\t\t\tid: 'open',\n\t\t\t\t\tlabel: this.t('settings', 'Open in files'),\n\t\t\t\t\tcallback([node]: Node[]) {\n\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\twindow.open(generateFileUrl(node.fileid!))\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tvariant: 'primary',\n\t\t\t\t})\n\t\t\t\t.disableNavigation()\n\t\t\t\t.startAt(this.richObject.path)\n\t\t\t\t.build()\n\t\t\tpicker.pick()\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.widget-file {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tcolor: var(--color-main-text) !important;\n\ttext-decoration: none !important;\n\tpadding: 0 !important;\n\n\t&__image {\n\t\twidth: 30%;\n\t\tmin-width: 160px;\n\t\tmax-width: 320px;\n\t\tbackground-position: center;\n\t\tbackground-size: cover;\n\t\tbackground-repeat: no-repeat;\n\n\t\t&--icon {\n\t\t\tmin-width: 88px;\n\t\t\tmax-width: 88px;\n\t\t\tpadding: 12px;\n\t\t\tpadding-inline-end: 0;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: bold;\n\t}\n\n\t&__details {\n\t\tpadding: 12px;\n\t\tflex-grow: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\tp {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&__description {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-line-clamp: 3;\n\t\tline-clamp: 3;\n\t\t-webkit-box-orient: vertical;\n\t}\n\n\t// No preview, standard link to ressource\n\t&--link {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&--interactive {\n\t\tposition: relative;\n\t\theight: 400px;\n\t\tmax-height: 50vh;\n\t\tmargin: 0;\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { App } from 'vue'\n\nimport { t } from '@nextcloud/l10n'\nimport { createApp } from 'vue'\nimport { NcCustomPickerRenderResult, registerCustomPickerElement, registerWidget } from '@nextcloud/vue/components/NcRichText'\nimport FileReferencePickerElement from './views/FileReferencePickerElement.vue'\nimport FileWidget from './views/ReferenceFileWidget.vue'\n\nregisterWidget('file', (el, { richObjectType, richObject, accessible, interactive }) => {\n\tconst app = createApp(FileWidget, {\n\t\trichObjectType,\n\t\trichObject,\n\t\taccessible,\n\t\tinteractive,\n\t})\n\tapp.mixin({ methods: { t } })\n\tapp.mount(el)\n}, () => {}, { hasInteractiveView: true, isResizable: true })\n\nregisterCustomPickerElement('files', (el, { providerId, accessible }) => {\n\tconst app = createApp(FileReferencePickerElement, {\n\t\tproviderId,\n\t\taccessible,\n\t})\n\tapp.mixin({ methods: { t } })\n\tapp.mount(el)\n\treturn new NcCustomPickerRenderResult(el, app)\n}, (el, renderResult) => {\n\t(renderResult.object as App).unmount()\n})\n"],"names":["generateFileUrl","fileid","baseURL","getBaseUrl","globalscale","getCapabilities","generateUrl","emit","__emit","containerId","filePicker","FilePickerBuilder","t","buttonFactory","onMounted","node","onSubmit","error","logger","selected","buttons","_createElementBlock","_sfc_main","defineComponent","FolderIcon","FileIcon","handler","davSource","generateRemoteUrl","getCurrentUser","path","previewUrl","img","event","getFilePickerBuilder","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_ctx","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_cache","args","_createElementVNode","_normalizeClass","_normalizeStyle","_Fragment","_component_FolderIcon","_component_FileIcon","_toDisplayString","_createTextVNode","_hoisted_1","registerWidget","el","richObjectType","richObject","accessible","interactive","app","createApp","FileWidget","registerCustomPickerElement","providerId","FileReferencePickerElement","NcCustomPickerRenderResult","renderResult"],"mappings":"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"}