orz-markdown 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +132 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +159 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/attrs.d.ts +3 -0
- package/dist/plugins/attrs.d.ts.map +1 -0
- package/dist/plugins/attrs.js +60 -0
- package/dist/plugins/attrs.js.map +1 -0
- package/dist/plugins/emoji.d.ts +2 -0
- package/dist/plugins/emoji.d.ts.map +1 -0
- package/dist/plugins/emoji.js +51 -0
- package/dist/plugins/emoji.js.map +1 -0
- package/dist/plugins/markdown-include.d.ts +3 -0
- package/dist/plugins/markdown-include.d.ts.map +1 -0
- package/dist/plugins/markdown-include.js +44 -0
- package/dist/plugins/markdown-include.js.map +1 -0
- package/dist/plugins/mermaid.d.ts +2 -0
- package/dist/plugins/mermaid.d.ts.map +1 -0
- package/dist/plugins/mermaid.js +18 -0
- package/dist/plugins/mermaid.js.map +1 -0
- package/dist/plugins/nyml.d.ts +2 -0
- package/dist/plugins/nyml.d.ts.map +1 -0
- package/dist/plugins/nyml.js +21 -0
- package/dist/plugins/nyml.js.map +1 -0
- package/dist/plugins/nyml_parser.d.ts +32 -0
- package/dist/plugins/nyml_parser.d.ts.map +1 -0
- package/dist/plugins/nyml_parser.js +236 -0
- package/dist/plugins/nyml_parser.js.map +1 -0
- package/dist/plugins/qrcode.d.ts +2 -0
- package/dist/plugins/qrcode.d.ts.map +1 -0
- package/dist/plugins/qrcode.js +21 -0
- package/dist/plugins/qrcode.js.map +1 -0
- package/dist/plugins/smiles.d.ts +2 -0
- package/dist/plugins/smiles.d.ts.map +1 -0
- package/dist/plugins/smiles.js +19 -0
- package/dist/plugins/smiles.js.map +1 -0
- package/dist/plugins/space.d.ts +2 -0
- package/dist/plugins/space.d.ts.map +1 -0
- package/dist/plugins/space.js +15 -0
- package/dist/plugins/space.js.map +1 -0
- package/dist/plugins/span.d.ts +3 -0
- package/dist/plugins/span.d.ts.map +1 -0
- package/dist/plugins/span.js +18 -0
- package/dist/plugins/span.js.map +1 -0
- package/dist/plugins/test.d.ts +2 -0
- package/dist/plugins/test.d.ts.map +1 -0
- package/dist/plugins/test.js +14 -0
- package/dist/plugins/test.js.map +1 -0
- package/dist/plugins/toc.d.ts +3 -0
- package/dist/plugins/toc.d.ts.map +1 -0
- package/dist/plugins/toc.js +62 -0
- package/dist/plugins/toc.js.map +1 -0
- package/dist/plugins/yaml.d.ts +2 -0
- package/dist/plugins/yaml.d.ts.map +1 -0
- package/dist/plugins/yaml.js +12 -0
- package/dist/plugins/yaml.js.map +1 -0
- package/dist/plugins/youtube.d.ts +2 -0
- package/dist/plugins/youtube.d.ts.map +1 -0
- package/dist/plugins/youtube.js +19 -0
- package/dist/plugins/youtube.js.map +1 -0
- package/dist/prepare-sources.d.ts +10 -0
- package/dist/prepare-sources.d.ts.map +1 -0
- package/dist/prepare-sources.js +31 -0
- package/dist/prepare-sources.js.map +1 -0
- package/dist/registry.d.ts +10 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +24 -0
- package/dist/registry.js.map +1 -0
- package/dist/rules/block-dispatcher.d.ts +9 -0
- package/dist/rules/block-dispatcher.d.ts.map +1 -0
- package/dist/rules/block-dispatcher.js +108 -0
- package/dist/rules/block-dispatcher.js.map +1 -0
- package/dist/rules/inline-dispatcher.d.ts +9 -0
- package/dist/rules/inline-dispatcher.d.ts.map +1 -0
- package/dist/rules/inline-dispatcher.js +62 -0
- package/dist/rules/inline-dispatcher.js.map +1 -0
- package/dist/runtime.d.ts +3 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +128 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +70 -0
- package/themes/beige-decent-1.css +559 -0
- package/themes/beige-decent-2.css +578 -0
- package/themes/common.css +178 -0
- package/themes/dark-elegant-1.css +729 -0
- package/themes/dark-elegant-2.css +1376 -0
- package/themes/light-academic-1.css +541 -0
- package/themes/light-academic-2.css +462 -0
- package/themes/light-neat-1.css +1244 -0
- package/themes/light-neat-2.css +1185 -0
- package/themes/light-playful-1.css +493 -0
- package/themes/light-playful-2.css +494 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":";;AAQA,4BAIC;AAED,4BAGC;AAED,8BAGC;AAED,sCAEC;AApBD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;AAErD,SAAgB,QAAQ,CAAC,GAAqB;IAC5C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAY;IACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;AACnD,CAAC;AAED,SAAgB,SAAS,CAAC,IAAY;IACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;AACpD,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type MarkdownIt from 'markdown-it';
|
|
2
|
+
type StateBlock = MarkdownIt.StateBlock;
|
|
3
|
+
/**
|
|
4
|
+
* Block dispatcher rule for {{name[args] body}} constructs.
|
|
5
|
+
* Registered after 'blockquote' so it runs before 'paragraph' but after 'fence'/'code_block'.
|
|
6
|
+
*/
|
|
7
|
+
export declare function blockDispatcher(state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=block-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-dispatcher.d.ts","sourceRoot":"","sources":["../../src/rules/block-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAG1C,KAAK,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;AAExC;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,GACd,OAAO,CAyHT"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.blockDispatcher = blockDispatcher;
|
|
4
|
+
const registry_js_1 = require("../registry.js");
|
|
5
|
+
/**
|
|
6
|
+
* Block dispatcher rule for {{name[args] body}} constructs.
|
|
7
|
+
* Registered after 'blockquote' so it runs before 'paragraph' but after 'fence'/'code_block'.
|
|
8
|
+
*/
|
|
9
|
+
function blockDispatcher(state, startLine, endLine, silent) {
|
|
10
|
+
// Skip if this line is at indented-code-block level
|
|
11
|
+
if (state.sCount[startLine] - state.blkIndent >= 4) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const src = state.src;
|
|
15
|
+
const pos = state.bMarks[startLine] + state.tShift[startLine];
|
|
16
|
+
const lineMax = state.eMarks[startLine];
|
|
17
|
+
// Must start with {{
|
|
18
|
+
if (pos + 1 >= lineMax || src[pos] !== '{' || src[pos + 1] !== '{') {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
// Extract plugin name: alphanumeric + hyphens
|
|
22
|
+
let nameEnd = pos + 2;
|
|
23
|
+
while (nameEnd < lineMax) {
|
|
24
|
+
const ch = src[nameEnd];
|
|
25
|
+
if (!/[a-zA-Z0-9-]/.test(ch))
|
|
26
|
+
break;
|
|
27
|
+
nameEnd++;
|
|
28
|
+
}
|
|
29
|
+
const name = src.slice(pos + 2, nameEnd);
|
|
30
|
+
if (!name || !(0, registry_js_1.hasBlock)(name)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// Extract optional [args] — only if '[' immediately follows name (no space)
|
|
34
|
+
let args = null;
|
|
35
|
+
let cursor = nameEnd;
|
|
36
|
+
if (src[cursor] === '[') {
|
|
37
|
+
const argsStart = cursor + 1;
|
|
38
|
+
const bracketEnd = src.indexOf(']', argsStart);
|
|
39
|
+
if (bracketEnd === -1 || bracketEnd > lineMax) {
|
|
40
|
+
return false; // unclosed [
|
|
41
|
+
}
|
|
42
|
+
args = src.slice(argsStart, bracketEnd);
|
|
43
|
+
cursor = bracketEnd + 1;
|
|
44
|
+
}
|
|
45
|
+
// Skip horizontal whitespace before body
|
|
46
|
+
while (cursor < lineMax && (src[cursor] === ' ' || src[cursor] === '\t')) {
|
|
47
|
+
cursor++;
|
|
48
|
+
}
|
|
49
|
+
// Check for closing '}}' on the same line (compact / single-line form)
|
|
50
|
+
const firstLineRest = src.slice(cursor, lineMax);
|
|
51
|
+
const closingOnFirstLine = firstLineRest.indexOf('}}');
|
|
52
|
+
let bodyContent;
|
|
53
|
+
let nextLine;
|
|
54
|
+
if (closingOnFirstLine !== -1) {
|
|
55
|
+
// Single-line form: {{name[args] body}}
|
|
56
|
+
bodyContent = firstLineRest.slice(0, closingOnFirstLine).trim();
|
|
57
|
+
nextLine = startLine + 1;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Multiline form: scan forward across lines for closing '}}'
|
|
61
|
+
let found = false;
|
|
62
|
+
let lastLine = startLine;
|
|
63
|
+
let lastPos = -1;
|
|
64
|
+
for (let line = startLine + 1; line < endLine; line++) {
|
|
65
|
+
const lineStart = state.bMarks[line];
|
|
66
|
+
const lineEnd = state.eMarks[line];
|
|
67
|
+
// A non-empty line with negative indent breaks the block
|
|
68
|
+
if (lineStart < lineEnd &&
|
|
69
|
+
state.tShift[line] < state.blkIndent) {
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
const lineContent = src.slice(lineStart, lineEnd);
|
|
73
|
+
const closingIdx = lineContent.indexOf('}}');
|
|
74
|
+
if (closingIdx !== -1) {
|
|
75
|
+
lastLine = line;
|
|
76
|
+
lastPos = lineStart + closingIdx;
|
|
77
|
+
found = true;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!found) {
|
|
82
|
+
return false; // unclosed — leave as literal text
|
|
83
|
+
}
|
|
84
|
+
nextLine = lastLine + 1;
|
|
85
|
+
// Body is: everything from cursor (on first line) through closing line, trimmed
|
|
86
|
+
// First-line body part
|
|
87
|
+
const firstLinePart = src.slice(cursor, lineMax);
|
|
88
|
+
// Middle lines
|
|
89
|
+
const middlePart = lastLine > startLine + 1
|
|
90
|
+
? state.getLines(startLine + 1, lastLine, state.tShift[startLine], true)
|
|
91
|
+
: '';
|
|
92
|
+
// Last-line body part (before the closing }})
|
|
93
|
+
const lastLinePart = src.slice(state.bMarks[lastLine] + state.tShift[lastLine], lastPos);
|
|
94
|
+
bodyContent = (firstLinePart + '\n' + middlePart + lastLinePart).trim();
|
|
95
|
+
}
|
|
96
|
+
if (silent) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
const token = state.push('plugin_block', '', 0);
|
|
100
|
+
token.info = name;
|
|
101
|
+
token.meta = { args };
|
|
102
|
+
token.content = bodyContent;
|
|
103
|
+
token.map = [startLine, nextLine];
|
|
104
|
+
token.block = true;
|
|
105
|
+
state.line = nextLine;
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=block-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-dispatcher.js","sourceRoot":"","sources":["../../src/rules/block-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type MarkdownIt from 'markdown-it';
|
|
2
|
+
type StateInline = MarkdownIt.StateInline;
|
|
3
|
+
/**
|
|
4
|
+
* Inline dispatcher rule for {{name[args] body}} constructs.
|
|
5
|
+
* Registered after 'escape' so \{{ is handled by the built-in escape rule.
|
|
6
|
+
*/
|
|
7
|
+
export declare function inlineDispatcher(state: StateInline, silent: boolean): boolean;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=inline-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-dispatcher.d.ts","sourceRoot":"","sources":["../../src/rules/inline-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAG1C,KAAK,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;AAE1C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CA+D7E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inlineDispatcher = inlineDispatcher;
|
|
4
|
+
const registry_js_1 = require("../registry.js");
|
|
5
|
+
/**
|
|
6
|
+
* Inline dispatcher rule for {{name[args] body}} constructs.
|
|
7
|
+
* Registered after 'escape' so \{{ is handled by the built-in escape rule.
|
|
8
|
+
*/
|
|
9
|
+
function inlineDispatcher(state, silent) {
|
|
10
|
+
const src = state.src;
|
|
11
|
+
const pos = state.pos;
|
|
12
|
+
const max = state.posMax;
|
|
13
|
+
// Must start with {{
|
|
14
|
+
if (pos + 1 > max || src[pos] !== '{' || src[pos + 1] !== '{') {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
// Extract plugin name: alphanumeric + hyphens
|
|
18
|
+
let nameEnd = pos + 2;
|
|
19
|
+
while (nameEnd <= max) {
|
|
20
|
+
const ch = src[nameEnd];
|
|
21
|
+
if (!/[a-zA-Z0-9-]/.test(ch))
|
|
22
|
+
break;
|
|
23
|
+
nameEnd++;
|
|
24
|
+
}
|
|
25
|
+
const name = src.slice(pos + 2, nameEnd);
|
|
26
|
+
if (!name || !(0, registry_js_1.hasInline)(name)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
// Extract optional [args] — only if '[' immediately follows name (no space)
|
|
30
|
+
let args = null;
|
|
31
|
+
let cursor = nameEnd;
|
|
32
|
+
if (src[cursor] === '[') {
|
|
33
|
+
const argsStart = cursor + 1;
|
|
34
|
+
const bracketEnd = src.indexOf(']', argsStart);
|
|
35
|
+
if (bracketEnd === -1) {
|
|
36
|
+
return false; // unclosed [
|
|
37
|
+
}
|
|
38
|
+
args = src.slice(argsStart, bracketEnd);
|
|
39
|
+
cursor = bracketEnd + 1;
|
|
40
|
+
}
|
|
41
|
+
// Skip horizontal whitespace before body
|
|
42
|
+
while (cursor <= max && (src[cursor] === ' ' || src[cursor] === '\t')) {
|
|
43
|
+
cursor++;
|
|
44
|
+
}
|
|
45
|
+
// Find closing '}}' within the current inline buffer (no line crossing)
|
|
46
|
+
const closingIdx = src.indexOf('}}', cursor);
|
|
47
|
+
if (closingIdx === -1) {
|
|
48
|
+
return false; // no closing — leave as literal text
|
|
49
|
+
}
|
|
50
|
+
const bodyContent = src.slice(cursor, closingIdx).trim();
|
|
51
|
+
// Always advance state.pos (required even in silent mode for skipToken)
|
|
52
|
+
state.pos = closingIdx + 2;
|
|
53
|
+
if (silent) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
const token = state.push('plugin_inline', '', 0);
|
|
57
|
+
token.info = name;
|
|
58
|
+
token.meta = { args };
|
|
59
|
+
token.content = bodyContent;
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=inline-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-dispatcher.js","sourceRoot":"","sources":["../../src/rules/inline-dispatcher.ts"],"names":[],"mappings":";;AASA,4CA+DC;AAvED,gDAA2C;AAI3C;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAkB,EAAE,MAAe;IAClE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IAEzB,qBAAqB;IACrB,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC;IACtB,OAAO,OAAO,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,MAAM;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAA,uBAAS,EAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4EAA4E;IAC5E,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,CAAC,aAAa;QAC7B,CAAC;QACD,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACxC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,yCAAyC;IACzC,OAAO,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,EAAE,CAAC;IACX,CAAC;IAED,wEAAwE;IACxE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,CAAC,qCAAqC;IACrD,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzD,wEAAwE;IACxE,KAAK,CAAC,GAAG,GAAG,UAAU,GAAG,CAAC,CAAC;IAE3B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;IACtB,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC;IAE5B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,QAuHhC,CAAC;AAEF,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browserRuntimeScript = void 0;
|
|
4
|
+
exports.getBrowserRuntimeScript = getBrowserRuntimeScript;
|
|
5
|
+
exports.browserRuntimeScript = String.raw `
|
|
6
|
+
(function (global) {
|
|
7
|
+
var expandedQr = null;
|
|
8
|
+
var expandedSourceQr = null;
|
|
9
|
+
|
|
10
|
+
function collapseQr() {
|
|
11
|
+
if (!expandedQr) return;
|
|
12
|
+
|
|
13
|
+
if (expandedSourceQr) {
|
|
14
|
+
expandedSourceQr.classList.remove('is-expanded');
|
|
15
|
+
expandedSourceQr.setAttribute('aria-expanded', 'false');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (expandedQr.parentNode) {
|
|
19
|
+
expandedQr.parentNode.removeChild(expandedQr);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (global.document && global.document.body) {
|
|
23
|
+
global.document.body.style.overflow = '';
|
|
24
|
+
}
|
|
25
|
+
expandedQr = null;
|
|
26
|
+
expandedSourceQr = null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function toggleQr(node) {
|
|
30
|
+
if (expandedSourceQr === node) {
|
|
31
|
+
collapseQr();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
collapseQr();
|
|
36
|
+
if (!global.document || !global.document.body) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
expandedSourceQr = node;
|
|
41
|
+
expandedSourceQr.classList.add('is-expanded');
|
|
42
|
+
expandedSourceQr.setAttribute('aria-expanded', 'true');
|
|
43
|
+
|
|
44
|
+
expandedQr = node.cloneNode(true);
|
|
45
|
+
expandedQr.classList.add('qrcode-overlay', 'is-expanded');
|
|
46
|
+
expandedQr.setAttribute('aria-hidden', 'true');
|
|
47
|
+
expandedQr.removeAttribute('aria-expanded');
|
|
48
|
+
expandedQr.removeAttribute('tabindex');
|
|
49
|
+
expandedQr.removeAttribute('role');
|
|
50
|
+
expandedQr.addEventListener('click', function (event) {
|
|
51
|
+
event.stopPropagation();
|
|
52
|
+
collapseQr();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
global.document.body.appendChild(expandedQr);
|
|
56
|
+
|
|
57
|
+
if (global.document && global.document.body) {
|
|
58
|
+
global.document.body.style.overflow = 'hidden';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function initQrCodes(root) {
|
|
63
|
+
if (!root || typeof root.querySelectorAll !== 'function') return;
|
|
64
|
+
|
|
65
|
+
Array.prototype.slice.call(root.querySelectorAll('.qrcode')).forEach(function (node) {
|
|
66
|
+
if (node.getAttribute('data-qr-ready') === '1') return;
|
|
67
|
+
|
|
68
|
+
node.setAttribute('data-qr-ready', '1');
|
|
69
|
+
node.addEventListener('click', function (event) {
|
|
70
|
+
event.stopPropagation();
|
|
71
|
+
toggleQr(node);
|
|
72
|
+
});
|
|
73
|
+
node.addEventListener('keydown', function (event) {
|
|
74
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
toggleQr(node);
|
|
77
|
+
}
|
|
78
|
+
if (event.key === 'Escape') {
|
|
79
|
+
collapseQr();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function init(root) {
|
|
86
|
+
initQrCodes(root || global.document);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function bindGlobalHandlers() {
|
|
90
|
+
if (!global.document || global.__orzMarkdownRuntimeBound) return;
|
|
91
|
+
global.__orzMarkdownRuntimeBound = true;
|
|
92
|
+
|
|
93
|
+
global.document.addEventListener('click', function (event) {
|
|
94
|
+
if (expandedQr && !expandedQr.contains(event.target)) {
|
|
95
|
+
collapseQr();
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
global.document.addEventListener('keydown', function (event) {
|
|
100
|
+
if (event.key === 'Escape') {
|
|
101
|
+
collapseQr();
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
global.OrzMarkdownRuntime = Object.assign({}, global.OrzMarkdownRuntime, {
|
|
107
|
+
init: init,
|
|
108
|
+
initQrCodes: initQrCodes,
|
|
109
|
+
collapseQr: collapseQr,
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
bindGlobalHandlers();
|
|
113
|
+
|
|
114
|
+
if (global.document) {
|
|
115
|
+
if (global.document.readyState === 'loading') {
|
|
116
|
+
global.document.addEventListener('DOMContentLoaded', function () {
|
|
117
|
+
init(global.document);
|
|
118
|
+
}, { once: true });
|
|
119
|
+
} else {
|
|
120
|
+
init(global.document);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
})(typeof globalThis !== 'undefined' ? globalThis : window);
|
|
124
|
+
`;
|
|
125
|
+
function getBrowserRuntimeScript() {
|
|
126
|
+
return exports.browserRuntimeScript;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;AAyHA,0DAEC;AA3HY,QAAA,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuH7C,CAAC;AAEF,SAAgB,uBAAuB;IACrC,OAAO,4BAAoB,CAAC;AAC9B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "orz-markdown",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Customized markdown-it parser with official and custom plugins",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js",
|
|
9
|
+
"./runtime": "./dist/runtime.js",
|
|
10
|
+
"./themes/*": "./themes/*"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"themes"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"render": "tsx scripts/render.ts",
|
|
21
|
+
"prepublishOnly": "npm run build && npm run test"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"markdown",
|
|
25
|
+
"markdown-it",
|
|
26
|
+
"parser",
|
|
27
|
+
"plugin",
|
|
28
|
+
"katex",
|
|
29
|
+
"mermaid",
|
|
30
|
+
"smiles",
|
|
31
|
+
"qrcode",
|
|
32
|
+
"toc",
|
|
33
|
+
"footnote"
|
|
34
|
+
],
|
|
35
|
+
"author": "Yu Wang <yuwang@orz.how>",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/wangyu16/orz-markdown"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/wangyu16/orz-markdown#readme",
|
|
42
|
+
"bugs": "https://github.com/wangyu16/orz-markdown/issues",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@traptitech/markdown-it-katex": "^3.6.0",
|
|
45
|
+
"katex": "^0.16.35",
|
|
46
|
+
"markdown-it": "^14.1.1",
|
|
47
|
+
"markdown-it-anchor": "^9.2.0",
|
|
48
|
+
"markdown-it-container": "^4.0.0",
|
|
49
|
+
"markdown-it-footnote": "^4.0.0",
|
|
50
|
+
"markdown-it-imsize": "^2.0.1",
|
|
51
|
+
"markdown-it-ins": "^4.0.0",
|
|
52
|
+
"markdown-it-mark": "^4.0.0",
|
|
53
|
+
"markdown-it-sub": "^2.0.0",
|
|
54
|
+
"markdown-it-sup": "^2.0.0",
|
|
55
|
+
"markdown-it-task-lists": "^2.1.1",
|
|
56
|
+
"node-emoji": "^2.2.0",
|
|
57
|
+
"qrcode-svg": "^1.1.0"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/markdown-it": "^14.1.2",
|
|
61
|
+
"@types/markdown-it-anchor": "^7.0.0",
|
|
62
|
+
"@types/markdown-it-container": "^4.0.0",
|
|
63
|
+
"@types/markdown-it-footnote": "^3.0.4",
|
|
64
|
+
"@types/node": "^25.3.5",
|
|
65
|
+
"@types/qrcode-svg": "^1.1.5",
|
|
66
|
+
"tsx": "^4.21.0",
|
|
67
|
+
"typescript": "^5.9.3",
|
|
68
|
+
"vitest": "^4.0.18"
|
|
69
|
+
}
|
|
70
|
+
}
|