diff --git a/projects/ledge-render/src/lib/ledge-render.component.ts b/projects/ledge-render/src/lib/ledge-render.component.ts
index 8249b7a6..0c61bd06 100644
--- a/projects/ledge-render/src/lib/ledge-render.component.ts
+++ b/projects/ledge-render/src/lib/ledge-render.component.ts
@@ -5,16 +5,16 @@ import {
Input,
OnChanges,
OnInit,
- SimpleChanges
-} from '@angular/core';
-import { Token, Tokens, TokensList } from 'marked';
-import marked, { Slugger } from 'marked/lib/marked';
-import LedgeMarkdownConverter from './components/model/ledge-markdown-converter';
+ SimpleChanges,
+} from "@angular/core";
+import { Token, Tokens, TokensList } from "marked";
+import marked, { Slugger } from "marked/lib/marked";
+import LedgeMarkdownConverter from "./components/model/ledge-markdown-converter";
@Component({
- selector: 'ledge-render',
- templateUrl: './ledge-render.component.html',
- styleUrls: ['./ledge-render.component.scss'],
+ selector: "ledge-render",
+ templateUrl: "./ledge-render.component.html",
+ styleUrls: ["./ledge-render.component.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class LedgeRenderComponent implements OnInit, AfterViewInit, OnChanges {
@@ -64,8 +64,8 @@ export class LedgeRenderComponent implements OnInit, AfterViewInit, OnChanges {
private parseText() {
let body = this.token.text;
- while (this.peek().type === 'text') {
- body += '\n' + (this.next() as any).text;
+ while (this.peek().type === "text") {
+ body += "\n" + (this.next() as any).text;
}
return body;
@@ -75,71 +75,71 @@ export class LedgeRenderComponent implements OnInit, AfterViewInit, OnChanges {
const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;
return html.replace(unescapeTest, (_, n) => {
n = n.toLowerCase();
- if (n === 'colon') {
- return ':';
+ if (n === "colon") {
+ return ":";
}
- if (n.charAt(0) === '#') {
- return n.charAt(1) === 'x'
+ if (n.charAt(0) === "#") {
+ return n.charAt(1) === "x"
? String.fromCharCode(parseInt(n.substring(2), 16))
: String.fromCharCode(+n.substring(1));
}
- return '';
+ return "";
});
}
private tok() {
const token: Token = this.token;
switch (token.type) {
- case 'table':
+ case "table":
this.markdownData.push(token);
break;
- case 'code':
+ case "code":
this.handleCode(token);
break;
- case 'space':
- return '';
- case 'blockquote_start':
- let body = '';
+ case "space":
+ return "";
+ case "blockquote_start":
+ let body = "";
this.isPureParagraph = false;
- while (this.next().type !== 'blockquote_end') {
+ while (this.next().type !== "blockquote_end") {
body += this.tok();
}
this.isPureParagraph = true;
- this.markdownData.push({ type: 'blockquote', text: body });
+ this.markdownData.push({ type: "blockquote", text: body });
break;
- case 'paragraph':
+ case "paragraph":
return this.handleParaGraph(token);
- case 'text':
+ case "text":
return token.text;
- case 'heading':
+ case "heading":
const inline = marked.inlineLexer(token.text, this.tokens.links);
this.markdownData.push({
- type: 'heading',
+ type: "heading",
depth: token.depth,
text: inline,
anchor: this.sluger.slug(this.unescape(inline)),
});
break;
- case 'list_start': {
+ case "list_start": {
const listBody = [];
const ordered = this.token.ordered;
const start = this.token.start;
this.listQueue.push(1);
- while (this.next().type !== 'list_end') {
+ while (this.next().type !== "list_end") {
listBody.push(this.tok());
}
this.listQueue.pop();
if (this.listQueue.length === 0) {
- this.markdownData.push({ type: 'list', data: listBody, ordered });
+ this.markdownData.push({ type: "list", data: listBody, ordered });
}
return { children: listBody, ordered, start };
}
- case 'list_item_start': {
+ case "list_item_start": {
const itemBody = {
- name: '',
+ name: "",
children: [],
};
const loose = this.token.loose;
@@ -162,8 +162,8 @@ export class LedgeRenderComponent implements OnInit, AfterViewInit, OnChanges {
// }
// }
- while (this.next().type !== 'list_item_end') {
- if (!loose && this.token.type === 'text') {
+ while (this.next().type !== "list_item_end") {
+ if (!loose && this.token.type === "text") {
itemBody.name += marked.inlineLexer(
this.parseText(),
this.tokens.links
@@ -175,10 +175,10 @@ export class LedgeRenderComponent implements OnInit, AfterViewInit, OnChanges {
return { body: itemBody, task, checked };
}
- case 'hr':
+ case "hr":
this.markdownData.push(token);
break;
- case 'html':
+ case "html":
return token.text;
default:
this.markdownData.push(token);
@@ -190,7 +190,7 @@ export class LedgeRenderComponent implements OnInit, AfterViewInit, OnChanges {
const inline = marked.inlineLexer(token.text, this.tokens.links);
if (this.isPureParagraph) {
this.markdownData.push({
- type: 'paragraph',
+ type: "paragraph",
data: inline,
});
}
@@ -201,65 +201,74 @@ export class LedgeRenderComponent implements OnInit, AfterViewInit, OnChanges {
private handleCode(token: marked.Tokens.Code) {
const codeBlock = token as Tokens.Code;
switch (codeBlock.lang) {
- case 'chart':
+ case "chart":
const chartData = LedgeMarkdownConverter.toJson(codeBlock.text);
- this.markdownData.push({ type: 'chart', data: chartData.tables[0] });
+ this.markdownData.push({ type: "chart", data: chartData.tables[0] });
break;
- case 'process-step':
+ case "process-step":
const stepData = LedgeMarkdownConverter.toJson(codeBlock.text);
this.markdownData.push({
- type: 'process-step',
+ type: "process-step",
data: stepData.lists[0],
});
break;
- case 'process-table':
+ case "process-table":
const tableData = LedgeMarkdownConverter.toJson(codeBlock.text);
this.markdownData.push({
- type: 'process-table',
+ type: "process-table",
data: tableData.tables[0],
});
break;
- case 'mindmap':
+ case "process-card":
+ const cardData = LedgeMarkdownConverter.toJson(codeBlock.text);
+ this.markdownData.push({
+ type: "process-card",
+ data: cardData.tables[0],
+ colors: cardData.config.colors || [],
+ });
+ console.log(this.markdownData);
+ break;
+ case "mindmap":
const mindmapData = LedgeMarkdownConverter.toJson(codeBlock.text);
- this.markdownData.push({ type: 'mindmap', data: mindmapData.lists[0] });
+ this.markdownData.push({ type: "mindmap", data: mindmapData.lists[0] });
break;
- case 'pyramid':
+ case "pyramid":
const pyramidData = LedgeMarkdownConverter.toJson(codeBlock.text);
- this.markdownData.push({ type: 'pyramid', data: pyramidData.lists[0] });
+ this.markdownData.push({ type: "pyramid", data: pyramidData.lists[0] });
break;
- case 'radar':
+ case "radar":
const radarData = LedgeMarkdownConverter.toJson(codeBlock.text);
this.markdownData.push({
- type: 'radar',
+ type: "radar",
data: radarData.lists[0],
config: radarData.config,
});
break;
- case 'quadrant':
+ case "quadrant":
const quadrantData = LedgeMarkdownConverter.toJson(codeBlock.text);
this.markdownData.push({
- type: 'quadrant',
+ type: "quadrant",
data: quadrantData.lists[0],
});
break;
- case 'toolset':
+ case "toolset":
const json = LedgeMarkdownConverter.toJson(codeBlock.text);
const toolType = json.config.type;
this.markdownData.push({
- type: 'toolset',
+ type: "toolset",
data: { type: toolType, data: this.getDataByType(json, toolType) },
});
break;
- case 'graphviz':
- this.markdownData.push({ type: 'graphviz', data: codeBlock.text });
+ case "graphviz":
+ this.markdownData.push({ type: "graphviz", data: codeBlock.text });
break;
- case 'echarts':
- this.markdownData.push({ type: 'echarts', data: codeBlock.text });
+ case "echarts":
+ this.markdownData.push({ type: "echarts", data: codeBlock.text });
break;
- case 'list-style':
+ case "list-style":
const listData = LedgeMarkdownConverter.toJson(codeBlock.text);
this.markdownData.push({
- type: 'list-style',
+ type: "list-style",
data: listData.lists[0].children,
config: listData.config,
});
@@ -275,9 +284,9 @@ export class LedgeRenderComponent implements OnInit, AfterViewInit, OnChanges {
type: any
) {
switch (type) {
- case 'slider':
+ case "slider":
return json.lists[0].children;
- case 'line-chart':
+ case "line-chart":
return json.tables[0];
default:
return json;
diff --git a/projects/ledge-render/src/lib/ledge-render.module.ts b/projects/ledge-render/src/lib/ledge-render.module.ts
index 5e4137b9..7bb1fb82 100644
--- a/projects/ledge-render/src/lib/ledge-render.module.ts
+++ b/projects/ledge-render/src/lib/ledge-render.module.ts
@@ -11,6 +11,7 @@ import { LedgeRadarComponent } from './chart/ledge-radar/ledge-radar.component';
import { CustomMaterialModule } from './custom-material.module';
import { LedgeRenderComponent } from './ledge-render.component';
import { ToolsetComponent } from './toolset/toolset.component';
+import { SkillCardComponent } from './components/ledge-card/ledge-card.component';
const LedgeComponents = [
LedgeRenderComponent,
@@ -21,8 +22,8 @@ const LedgeComponents = [
LedgeQuadrantComponent,
LedgeGraphvizComponent,
LedgePureEchartsComponent,
-
ToolsetComponent,
+ SkillCardComponent,
];
diff --git a/src/app/presentation/home/home.component.html b/src/app/presentation/home/home.component.html
index 8398eaaa..50e2ae33 100644
--- a/src/app/presentation/home/home.component.html
+++ b/src/app/presentation/home/home.component.html
@@ -25,9 +25,13 @@
从而根据不同的企业情况,搭建出专属的 DevOps 流水线
-