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 0000000..347b648 Binary files /dev/null and b/src/icons/drive/ali.png differ 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: ""} ] })