✨ Use provider to process content
This commit is contained in:
parent
8dbb28ad88
commit
849f012b84
20
src/index.ts
20
src/index.ts
|
@ -1,20 +1,12 @@
|
||||||
import "./less/tips.less"
|
|
||||||
import "./less/render.less"
|
import "./less/render.less"
|
||||||
import {RENDER_CLASS} from "./constant";
|
import {RENDER_CLASS} from "./constant";
|
||||||
|
import {ProviderFactory} from "./provider/provider";
|
||||||
|
|
||||||
export const haloRender = (src: string): string => {
|
export const haloRender = (src: string): string => {
|
||||||
src = src.trim()
|
src = src.trim()
|
||||||
const lines = src.split("\n");
|
const line = src.split("\n");
|
||||||
let html: string = ""
|
const type = line[0]
|
||||||
const type = lines[0]
|
line.splice(0, 1)
|
||||||
if (type.startsWith("tips")) {
|
const content = line.join("\n")
|
||||||
html = `<div class="${RENDER_CLASS} tips ${type.replace(":", "-")}">`
|
return ProviderFactory.getFactory().process(type, content)
|
||||||
lines.forEach((line: string, index: number) => {
|
|
||||||
if (index === 0) return
|
|
||||||
if (line) html += `<div>${line}</div>`
|
|
||||||
})
|
|
||||||
html += "</div>"
|
|
||||||
return html
|
|
||||||
}
|
|
||||||
return "<p>Working</p>"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
.halo-render {
|
.halo-render {
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.invalid-type {
|
||||||
|
color: red;
|
||||||
|
margin: 5px;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px;
|
||||||
|
background-color: lightpink;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
import {TipsProvider} from "./tips-provider";
|
||||||
|
import {Provider} from "./provider";
|
||||||
|
import {GitProvider} from "./git-provider";
|
||||||
|
|
||||||
|
export const ProviderList:Array<Provider> = [
|
||||||
|
new TipsProvider()
|
||||||
|
]
|
|
@ -0,0 +1,34 @@
|
||||||
|
import {TipsProvider} from "./tips-provider";
|
||||||
|
import {ProviderList} from "./provider-list";
|
||||||
|
|
||||||
|
export declare interface Provider {
|
||||||
|
check: (type: string) => boolean
|
||||||
|
process: (type:string,content: string) => string
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ProviderFactory {
|
||||||
|
static manager: ProviderFactory | null = null
|
||||||
|
private providers: Array<Provider>
|
||||||
|
|
||||||
|
constructor(providers: Array<Provider>) {
|
||||||
|
this.providers = providers;
|
||||||
|
}
|
||||||
|
|
||||||
|
process(type: string, content: string) {
|
||||||
|
let html = "<h2 class='invalid-type'>Invalid Type!</h2>"
|
||||||
|
this.providers.forEach(provider => {
|
||||||
|
if (provider.check(type)) {
|
||||||
|
html = provider.process(type, content)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return html
|
||||||
|
}
|
||||||
|
|
||||||
|
static getFactory() {
|
||||||
|
if (!this.manager) {
|
||||||
|
this.manager = new ProviderFactory(ProviderList)
|
||||||
|
}
|
||||||
|
return this.manager
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
import {Provider} from "./provider";
|
||||||
|
import "../less/tips.less"
|
||||||
|
import {RENDER_CLASS} from "../constant";
|
||||||
|
|
||||||
|
export class TipsProvider implements Provider {
|
||||||
|
check(type: string): boolean {
|
||||||
|
return type.startsWith("tips")
|
||||||
|
}
|
||||||
|
|
||||||
|
process(type: string, content: string): string {
|
||||||
|
const lines = content.split("\n")
|
||||||
|
let html = ""
|
||||||
|
html = `<div class="${RENDER_CLASS} tips ${type.replace(":", "-")}">`
|
||||||
|
lines.forEach((line: string) => {
|
||||||
|
if (line) html += `<div>${line}</div>`
|
||||||
|
})
|
||||||
|
html += "</div>"
|
||||||
|
return html
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue