From cd1c7b3f554ac23d4b0b386980762671b68c029e Mon Sep 17 00:00:00 2001 From: zhengyi Date: Thu, 28 Dec 2023 11:13:30 +0800 Subject: [PATCH] :sparkles: Add module of drive resources --- demo/index.js | 7 ++++ src/icons/drive/ali.png | Bin 0 -> 8287 bytes src/icons/drive/baidu.svg | 1 + src/less/constant.less | 14 +++++++ src/less/drive.less | 44 ++++++++++++++++++++ src/less/render.less | 15 +++++++ src/less/tips.less | 12 ------ src/provider/drive-provider.ts | 74 +++++++++++++++++++++++++++++++++ src/provider/provider-list.ts | 4 +- webpack.config.js | 1 + webpack.dev.js | 1 + 11 files changed, 160 insertions(+), 13 deletions(-) create mode 100644 src/icons/drive/ali.png create mode 100644 src/icons/drive/baidu.svg create mode 100644 src/less/drive.less create mode 100644 src/provider/drive-provider.ts diff --git a/demo/index.js b/demo/index.js index 7f701a8..616ede5 100644 --- a/demo/index.js +++ b/demo/index.js @@ -47,6 +47,13 @@ This is a info tips --- git:[@github/justice2001/halo-plugin-vditor] + +--- + +drive:baidu +name: 网站资源集合 +link: https://www.baidu.com/ +password: abcde ` render() }) diff --git a/src/icons/drive/ali.png b/src/icons/drive/ali.png new file mode 100644 index 0000000000000000000000000000000000000000..347b648f7a918f52374aeccded54b99aa3775eab GIT binary patch literal 8287 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 YoS!~Y!fISk{#@5o)l(@~x_bTp0o4XpZvX%Q literal 0 HcmV?d00001 diff --git a/src/icons/drive/baidu.svg b/src/icons/drive/baidu.svg new file mode 100644 index 0000000..cc97f5b --- /dev/null +++ b/src/icons/drive/baidu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/less/constant.less b/src/less/constant.less index 392a2e1..896d63e 100644 --- a/src/less/constant.less +++ b/src/less/constant.less @@ -1 +1,15 @@ @border-radius: 3px; +@secondary: #818181; +@secondary-light: #F4F4F4; +// Warning +@warn-color: #FF8C00; +@warn-bg-color: #FFFAED; +// DANGER +@danger-color: #C31919; +@danger-bg-color: #FFEDED; +// Success +@success-color: #05B800; +@success-bg: #F2FFED; +// Info +@info-color: #3478CD; +@info-bg: #F1F7FF; diff --git a/src/less/drive.less b/src/less/drive.less new file mode 100644 index 0000000..98753da --- /dev/null +++ b/src/less/drive.less @@ -0,0 +1,44 @@ +@import "constant"; + +.drive { + border: 1px solid @secondary-light; + border-radius: @border-radius; + padding: 10px; + display: flex; + align-items: center; + justify-content: space-between; + user-select: none; + + .drive-info { + display: flex; + flex-direction: column; + gap: 5px; + + .platform { + display: flex; + align-items: center; + + .drive-icon { + width: 30px; + } + + span { + font-size: 16px; + margin-left: 5px; + color: @info-color; + } + } + } + + .download-info { + display: flex; + flex-direction: column; + align-items: center; + + .drive-password { + color: @secondary; + font-size: 12px; + margin-top: 5px; + } + } +} diff --git a/src/less/render.less b/src/less/render.less index 99fc3d9..2bc17bf 100644 --- a/src/less/render.less +++ b/src/less/render.less @@ -17,3 +17,18 @@ margin: 20px 15px; } +.btn { + background-color: @info-color; + color: #ffffff; + padding: 5px 8px; + text-align: center; + border-radius: @border-radius; + font-size: 14px; + min-width: 80px; + text-decoration: none; +} + +.error { + text-align: center; + color: @danger-color; +} diff --git a/src/less/tips.less b/src/less/tips.less index f8daa64..403c4c5 100644 --- a/src/less/tips.less +++ b/src/less/tips.less @@ -1,18 +1,6 @@ @import "constant"; @border-width: 6px; @border-type: solid; -// Warning -@warn-color: #FF8C00; -@warn-bg-color: #FFFAED; -// DANGER -@danger-color: #C31919; -@danger-bg-color: #FFEDED; -// Success -@success-color: #05B800; -@success-bg: #F2FFED; -// Info -@info-color: #3478CD; -@info-bg: #F1F7FF; .tips { position: relative; diff --git a/src/provider/drive-provider.ts b/src/provider/drive-provider.ts new file mode 100644 index 0000000..b8597a5 --- /dev/null +++ b/src/provider/drive-provider.ts @@ -0,0 +1,74 @@ +import {IOptions, Provider} from "./provider"; +import "../less/drive.less" +import {RENDER_CLASS} from "../constant"; + +const PLATFORM_LIST: {[key: string]: Platform } = { + "baidu": { + icon: "/icons/drive/baidu.svg", + name: "百度网盘" + }, + "ali": { + icon: "/icons/drive/ali.png", + name: "阿里云盘" + } +} + +export class DriveProvider implements Provider { + check(type: string): boolean { + return type.startsWith("drive") + } + + process(type: string, content: string, options: IOptions): string { + // Parse Content + const driveInfo = this.parseContent(type, content); + if (driveInfo instanceof Object) { + let html = `
`; + // Platform info + const platform = `
` + + `${driveInfo.platform}` + + `${PLATFORM_LIST[driveInfo.platform].name}` + + `
` + html += `
${platform}
${driveInfo.name}
` + html += `
下载资源` + if (driveInfo.password) { + html += `
提取码: ${driveInfo.password}
` + } + html += "
" + return html + "
"; + } + return `
语法错误(${driveInfo})
`; + } + + parseContent(type:string, content: string): DriveOptions | string { + const [_, platform] = type.split(":"); + if (!PLATFORM_LIST[platform]) return `不支持的平台: ${platform}` + const info: DriveOptions = { + link: "", + name: "", + password: "", + platform: platform + } + content.split("\n").forEach(line => { + console.log(line.indexOf(":")) + const value = line.slice(line.indexOf(":") + 1).trim() + const key = line.slice(0, line.indexOf(":")) || "" + if (Object.keys(info).includes(key)) { + // @ts-ignore + info[key] = value + } + }) + return info + } +} + +interface DriveOptions { + link: string; + name: string; + password?: string; + platform: string; +} + +interface Platform { + icon: string; + name: string; +} diff --git a/src/provider/provider-list.ts b/src/provider/provider-list.ts index 107b6eb..0787756 100644 --- a/src/provider/provider-list.ts +++ b/src/provider/provider-list.ts @@ -1,8 +1,10 @@ import {TipsProvider} from "./tips-provider"; import {Provider} from "./provider"; import {GitProvider} from "./git-provider"; +import {DriveProvider} from "./drive-provider"; export const ProviderList:Array = [ new TipsProvider(), - new GitProvider() + new GitProvider(), + new DriveProvider() ] diff --git a/webpack.config.js b/webpack.config.js index afdb130..96c30d8 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -77,6 +77,7 @@ module.exports = { new CopyPlugin({ patterns: [ {from: "src/fonts", to: "fonts"}, + {from: "src/icons", to: "icons"}, {from: "types", to: "types"} ] }) diff --git a/webpack.dev.js b/webpack.dev.js index 24e9624..5ec1425 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -55,6 +55,7 @@ module.exports = { new CopyPlugin({ patterns: [ {from: "src/fonts", to: "fonts"}, + {from: "src/icons", to: "icons"}, {from: "types", to: ""} ] })