Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 1x 1x 1x 11x 1x 19x 19x 49x 8x 49x 2x 2x 2x 1x 2x 2x 2x 2x 7x 7x 1x 1x 1x 1x | import { MarkdownIt } from "markdown-it"; import { Token, Tokens } from "./index"; export interface State { tokens: Token[]; Token: (type: string, tag?: string, idx?: number) => void; } export default class CreateRule { constructor(md: MarkdownIt) { return this.replace as any; } public replace = (state: State): void => { this.renderComponents(state); }; /** * Renders custom JSX components in place of HTML * generated from the markdown-it package */ private renderComponents = (state: State): void => { for ( let i: number = 0, tokenLength: number = state.tokens.length; i < tokenLength; i++ ) { if (state.tokens[i].children) { this.renderComponents({ Token: state.Token, tokens: state.tokens[i].children, }); } switch (state.tokens[i].type) { case "link_open": /* eslint-disable-next-line no-case-declarations */ const linkToken: Token = new state.Token( state.tokens[i].type, "Hypertext", 1 ); linkToken.attrPush(["href", state.tokens[i].attrs[0][1]]); if (state.tokens[i].attrs[0][1].substr(0, 4) === "http") { linkToken.attrPush(["target", "_blank"]); } state.tokens[i] = linkToken; break; case "link_close": state.tokens[i] = new state.Token( state.tokens[i].type, "Hypertext", -1 ); break; case "paragraph_close": state.tokens[i] = new state.Token( state.tokens[i].type, "Typography", -1 ); break; case "heading_close": state.tokens[i] = new state.Token( state.tokens[i].type, "Heading", -1 ); break; case "hr": state.tokens[i] = new state.Token(state.tokens[i].type, "Divider", 0); break; } } }; } |