import MiaoDirectory from "@/views/miaoDirectory.vue"; import usePluginCenter from "./usePluginCenter"; import { DocumentText, FileTray, Image, LogoChrome, CodeOutline, PlayCircle } from "@vicons/ionicons5"; import { PluginGroup } from "@/class/PluginCenter"; export default function init() { const pluginCenter = usePluginCenter(); pluginCenter.registerComponent({ key: "miaoDirectory", name: "文件夹", icon: FileTray, getComponent: async () => MiaoDirectory, filter: (vDirs, vFiles) => { if (vFiles.length) { return false; } return vDirs.length === 1; } }); pluginCenter.registerComponent({ key: "miaoVideoPlayer", name: "视频", icon: PlayCircle, getComponent: async () => (await import("@/views/miaoVideoPlayer.vue")).default, filter: (vDirs, vFiles) => { if (vDirs.length !== 0) { return false; } if (vFiles.length === 0) { return false; } for (let i of vFiles) { for (let s of ["mp4", "m3u8", "hls"]) { if (i.name.endsWith(s)) { return true; } } } return false; } }); pluginCenter.registerComponent({ key: "miaoIframe", name: "框架", icon: LogoChrome, getComponent: async () => (await import("@/views/miaoIframe.vue")).default, filter: (vDirs, vFiles) => { if (vDirs.length !== 0) { return false; } if (vFiles.length !== 1) { return false; } return vFiles[0].name.endsWith("html"); } }); pluginCenter.registerComponent({ key: "miaoPDF", name: "PDF浏览", icon: DocumentText, getComponent: async () => (await import("@/views/miaoPDF.vue")).default, filter: (vDirs, vFiles) => { if (vDirs.length !== 0) { return false; } if (vFiles.length !== 1) { return false; } return vFiles[0].name.endsWith("pdf"); } }); pluginCenter.registerComponent({ key: "miaoCodeMirror", name: "代码编辑", icon: CodeOutline, getComponent: async () => (await import("@/views/miaoCodeMirror.vue")).default, filter: (vDirs, vFiles) => { if (vDirs.length !== 0) { return false; } if (vFiles.length !== 1) { return false; } for (let end of ["js", "ts", "jsx", "tsx", "py", "html", "css", "scss", "go", "json", "md", "yaml", "txt", "xml", "vue"]) { if (vFiles[0].name.endsWith(end)) { return true; } } return false; } }); pluginCenter.registerComponent({ key: "miaoImages", name: "图片浏览", icon: Image, getComponent: async () => (await import("@/views/miaoImages.vue")).default, filter: (vDirs, vFiles) => { if (vDirs.length === 0 && vFiles.length === 0) { return false; } if (vDirs.length) { return true; } for (let vf of vFiles) for (let end of ["xbm", "tif", "pjp", "svgz", "jpg", "jpeg", "ico", "tiff", "gif", "svg", "jfif", "webp", "png", ".bmp", "pjpeg", "avif"]) { if (vf.name.endsWith(end)) { return true; } } return false; } }); pluginCenter.registerComponent({ key: "miaoMarkdown", name: "markdown浏览", icon: DocumentText, getComponent: async () => (await import("@/views/miaoMarkdown.vue")).default, filter: (vDirs, vFiles) => { if (vDirs.length !== 0) { return false; } if (vFiles.length !== 1) { return false; } return vFiles[0].name.endsWith("md"); } }); pluginCenter.register("test", { name: "测试导入", filter: (vDirs, vFiles) => { if (vDirs.length !== 0) { return false; } if (vFiles.length !== 1) { return false; } return vFiles[0].name.endsWith("js"); }, disable: true, group: [PluginGroup.default], func: async (__, vfs) => { const c = (await import(/* @vite-ignore */ vfs[0].url)).default; console.log(c); pluginCenter.registerComponent({ key: `test-${Math.random()}`, name: `test-${Math.random()}`, icon: DocumentText, getComponent: async () => (await import(/* @vite-ignore */ vfs[0].url)).default, filter: (vDirs, vFiles) => { if (vDirs.length !== 0) { return false; } if (vFiles.length !== 1) { return false; } return vFiles[0].name.endsWith("html"); } }); } }); }