@jupyterlab/toc 6.5.0-alpha.1 → 6.5.0-alpha.2
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/lib/factory.js +1 -1
- package/lib/factory.js.map +1 -1
- package/lib/utils/markdown.d.ts +15 -0
- package/lib/utils/markdown.js +42 -1
- package/lib/utils/markdown.js.map +1 -1
- package/package.json +10 -10
- package/src/factory.ts +1 -1
- package/src/utils/markdown.ts +52 -3
package/lib/factory.js
CHANGED
package/lib/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAG3D,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMjE;;;;GAIG;AACH,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAG3D,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMjE;;;;GAIG;AACH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;GAEG;AACH,MAAM,OAAgB,sBAAsB;IAK1C;;;;OAIG;IACH,YAAsB,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAEpD;;;;;OAKG;IACH,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CACP,MAAS,EACT,aAAuC;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC7B,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,MAAM,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;YAClC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,cAAc;SACxB,CAAC,CAAC;QACH,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEhD,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC;QACF,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEzC,OAAO,CAAC,KAAK;aACV,IAAI,CAAC,GAAG,EAAE;YACT,WAAW,EAAE,CAAC;YACd,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC;aACD,KAAK,CAAC,MAAM,CAAC,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEL,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3B,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YACnD,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;CAeF"}
|
package/lib/utils/markdown.d.ts
CHANGED
|
@@ -23,10 +23,25 @@ export interface IMarkdownHeading extends TableOfContents.IHeading {
|
|
|
23
23
|
*/
|
|
24
24
|
export declare function getHeadingId(markdownParser: IMarkdownParser, raw: string, level: number, sanitizer?: IRenderMime.ISanitizer): Promise<string | null>;
|
|
25
25
|
/**
|
|
26
|
+
* Parses the provided string and returns a list of headings.
|
|
27
|
+
*
|
|
28
|
+
* @param text - Markdown text
|
|
29
|
+
* @param parser - A Markdown parser instance used to render the content to HTML.
|
|
30
|
+
* @returns List of headings
|
|
31
|
+
*
|
|
32
|
+
* @remarks
|
|
33
|
+
* Renders Markdown to HTML and extracts `<h1>`–`<h6>` elements.
|
|
34
|
+
* Returns an empty list if the parser is `null`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseHeadings(markdownText: string, parser: IMarkdownParser | null): Promise<IMarkdownHeading[]>;
|
|
37
|
+
/**
|
|
38
|
+
* @deprecated in favour of async parseHeadings()
|
|
39
|
+
*
|
|
26
40
|
* Parses the provided string and returns a list of headings.
|
|
27
41
|
*
|
|
28
42
|
* @param text - Input text
|
|
29
43
|
* @returns List of headings
|
|
44
|
+
*
|
|
30
45
|
*/
|
|
31
46
|
export declare function getHeadings(text: string): IMarkdownHeading[];
|
|
32
47
|
/**
|
package/lib/utils/markdown.js
CHANGED
|
@@ -27,7 +27,9 @@ export async function getHeadingId(markdownParser, raw, level, sanitizer) {
|
|
|
27
27
|
if (!header) {
|
|
28
28
|
return null;
|
|
29
29
|
}
|
|
30
|
-
return
|
|
30
|
+
return (sanitizer === null || sanitizer === void 0 ? void 0 : sanitizer.allowNamedProperties)
|
|
31
|
+
? header.id
|
|
32
|
+
: header.getAttribute('data-jupyter-id');
|
|
31
33
|
}
|
|
32
34
|
catch (reason) {
|
|
33
35
|
console.error('Failed to parse a heading.', reason);
|
|
@@ -35,10 +37,49 @@ export async function getHeadingId(markdownParser, raw, level, sanitizer) {
|
|
|
35
37
|
return null;
|
|
36
38
|
}
|
|
37
39
|
/**
|
|
40
|
+
* Parses the provided string and returns a list of headings.
|
|
41
|
+
*
|
|
42
|
+
* @param text - Markdown text
|
|
43
|
+
* @param parser - A Markdown parser instance used to render the content to HTML.
|
|
44
|
+
* @returns List of headings
|
|
45
|
+
*
|
|
46
|
+
* @remarks
|
|
47
|
+
* Renders Markdown to HTML and extracts `<h1>`–`<h6>` elements.
|
|
48
|
+
* Returns an empty list if the parser is `null`.
|
|
49
|
+
*/
|
|
50
|
+
export async function parseHeadings(markdownText, parser) {
|
|
51
|
+
if (!parser) {
|
|
52
|
+
console.warn("Couldn't parse headings; Markdown parser is null");
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
const renderedHtml = await parser.render(markdownText);
|
|
56
|
+
const headings = new Array();
|
|
57
|
+
const domParser = new DOMParser();
|
|
58
|
+
const htmlDocument = domParser.parseFromString(renderedHtml, 'text/html');
|
|
59
|
+
// Query all heading elements (h1-h6)
|
|
60
|
+
const headingElements = htmlDocument.querySelectorAll('h1, h2, h3, h4, h5, h6');
|
|
61
|
+
headingElements.forEach((headingElement, lineIdx) => {
|
|
62
|
+
var _a;
|
|
63
|
+
const level = parseInt(headingElement.tagName.substring(1), 10);
|
|
64
|
+
const headingText = ((_a = headingElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
65
|
+
headings.push({
|
|
66
|
+
text: headingText,
|
|
67
|
+
line: lineIdx, // Line index within the parsed HTML, not the original Markdown source line
|
|
68
|
+
level: level,
|
|
69
|
+
raw: headingElement.outerHTML, // Parsed HTML string, not raw Markdown
|
|
70
|
+
skip: skipHeading.test(headingElement.outerHTML)
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
return headings;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @deprecated in favour of async parseHeadings()
|
|
77
|
+
*
|
|
38
78
|
* Parses the provided string and returns a list of headings.
|
|
39
79
|
*
|
|
40
80
|
* @param text - Input text
|
|
41
81
|
* @returns List of headings
|
|
82
|
+
*
|
|
42
83
|
*/
|
|
43
84
|
export function getHeadings(text) {
|
|
44
85
|
// Split the text into lines:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAmB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAmBzE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,cAA+B,EAC/B,GAAW,EACX,KAAa,EACb,SAAkC;IAElC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,cAAc,CAAC;YACnB,cAAc;YACd,IAAI;YACJ,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,SAAS,EAAE;YACvC,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlab/toc",
|
|
3
|
-
"version": "6.5.0-alpha.
|
|
3
|
+
"version": "6.5.0-alpha.2",
|
|
4
4
|
"description": "JupyterLab - Table of Contents widget",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyterlab"
|
|
@@ -41,14 +41,14 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@jupyter/react-components": "^0.16.6",
|
|
44
|
-
"@jupyterlab/apputils": "^4.6.0-alpha.
|
|
45
|
-
"@jupyterlab/coreutils": "^6.5.0-alpha.
|
|
46
|
-
"@jupyterlab/docregistry": "^4.5.0-alpha.
|
|
47
|
-
"@jupyterlab/observables": "^5.5.0-alpha.
|
|
48
|
-
"@jupyterlab/rendermime": "^4.5.0-alpha.
|
|
49
|
-
"@jupyterlab/rendermime-interfaces": "^3.13.0-alpha.
|
|
50
|
-
"@jupyterlab/translation": "^4.5.0-alpha.
|
|
51
|
-
"@jupyterlab/ui-components": "^4.5.0-alpha.
|
|
44
|
+
"@jupyterlab/apputils": "^4.6.0-alpha.2",
|
|
45
|
+
"@jupyterlab/coreutils": "^6.5.0-alpha.2",
|
|
46
|
+
"@jupyterlab/docregistry": "^4.5.0-alpha.2",
|
|
47
|
+
"@jupyterlab/observables": "^5.5.0-alpha.2",
|
|
48
|
+
"@jupyterlab/rendermime": "^4.5.0-alpha.2",
|
|
49
|
+
"@jupyterlab/rendermime-interfaces": "^3.13.0-alpha.2",
|
|
50
|
+
"@jupyterlab/translation": "^4.5.0-alpha.2",
|
|
51
|
+
"@jupyterlab/ui-components": "^4.5.0-alpha.2",
|
|
52
52
|
"@lumino/coreutils": "^2.2.1",
|
|
53
53
|
"@lumino/disposable": "^2.1.4",
|
|
54
54
|
"@lumino/messaging": "^2.0.3",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"react": "^18.2.0"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@jupyterlab/testing": "^4.5.0-alpha.
|
|
60
|
+
"@jupyterlab/testing": "^4.5.0-alpha.2",
|
|
61
61
|
"@types/jest": "^29.2.0",
|
|
62
62
|
"@types/react": "^18.0.26",
|
|
63
63
|
"jest": "^29.2.0",
|
package/src/factory.ts
CHANGED
package/src/utils/markdown.ts
CHANGED
|
@@ -53,8 +53,9 @@ export async function getHeadingId(
|
|
|
53
53
|
if (!header) {
|
|
54
54
|
return null;
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
return sanitizer?.allowNamedProperties
|
|
57
|
+
? header.id
|
|
58
|
+
: header.getAttribute('data-jupyter-id');
|
|
58
59
|
} catch (reason) {
|
|
59
60
|
console.error('Failed to parse a heading.', reason);
|
|
60
61
|
}
|
|
@@ -63,10 +64,59 @@ export async function getHeadingId(
|
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
/**
|
|
67
|
+
* Parses the provided string and returns a list of headings.
|
|
68
|
+
*
|
|
69
|
+
* @param text - Markdown text
|
|
70
|
+
* @param parser - A Markdown parser instance used to render the content to HTML.
|
|
71
|
+
* @returns List of headings
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* Renders Markdown to HTML and extracts `<h1>`–`<h6>` elements.
|
|
75
|
+
* Returns an empty list if the parser is `null`.
|
|
76
|
+
*/
|
|
77
|
+
export async function parseHeadings(
|
|
78
|
+
markdownText: string,
|
|
79
|
+
parser: IMarkdownParser | null
|
|
80
|
+
): Promise<IMarkdownHeading[]> {
|
|
81
|
+
if (!parser) {
|
|
82
|
+
console.warn("Couldn't parse headings; Markdown parser is null");
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
const renderedHtml = await parser.render(markdownText);
|
|
86
|
+
|
|
87
|
+
const headings = new Array<IMarkdownHeading>();
|
|
88
|
+
const domParser = new DOMParser();
|
|
89
|
+
const htmlDocument = domParser.parseFromString(renderedHtml, 'text/html');
|
|
90
|
+
|
|
91
|
+
// Query all heading elements (h1-h6)
|
|
92
|
+
const headingElements = htmlDocument.querySelectorAll(
|
|
93
|
+
'h1, h2, h3, h4, h5, h6'
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
headingElements.forEach((headingElement, lineIdx) => {
|
|
97
|
+
const level = parseInt(headingElement.tagName.substring(1), 10);
|
|
98
|
+
const headingText = headingElement.textContent?.trim() || '';
|
|
99
|
+
|
|
100
|
+
headings.push({
|
|
101
|
+
text: headingText,
|
|
102
|
+
line: lineIdx, // Line index within the parsed HTML, not the original Markdown source line
|
|
103
|
+
level: level,
|
|
104
|
+
raw: headingElement.outerHTML, // Parsed HTML string, not raw Markdown
|
|
105
|
+
skip: skipHeading.test(headingElement.outerHTML)
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
return headings;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated in favour of async parseHeadings()
|
|
114
|
+
*
|
|
66
115
|
* Parses the provided string and returns a list of headings.
|
|
67
116
|
*
|
|
68
117
|
* @param text - Input text
|
|
69
118
|
* @returns List of headings
|
|
119
|
+
*
|
|
70
120
|
*/
|
|
71
121
|
export function getHeadings(text: string): IMarkdownHeading[] {
|
|
72
122
|
// Split the text into lines:
|
|
@@ -171,7 +221,6 @@ export function isMarkdown(mime: string): boolean {
|
|
|
171
221
|
|
|
172
222
|
/**
|
|
173
223
|
* Interface describing a parsed heading result.
|
|
174
|
-
*
|
|
175
224
|
* @private
|
|
176
225
|
*/
|
|
177
226
|
interface IHeader {
|