178 lines
4.7 KiB
TypeScript
178 lines
4.7 KiB
TypeScript
import MiaoDirectory from '@/views/miaoDirectory.vue'
|
|
import usePluginCenter from './usePluginCenter'
|
|
import {
|
|
DocumentText,
|
|
FileTray,
|
|
Image,
|
|
LogoChrome,
|
|
CodeOutline,
|
|
PlayCircle,
|
|
} from '@vicons/ionicons5'
|
|
|
|
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')
|
|
}
|
|
})
|
|
}
|