umberto 9.4.0 → 10.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/CHANGELOG.md +8 -9
- package/LICENSE.md +0 -44
- package/README.md +0 -1
- package/hexo-shim.js +2 -2
- package/package.json +2 -9
- package/scripts/filter/after-post-render/{gloria.js → gloria.cjs} +3 -3
- package/scripts/filter/after-post-render/{insert-error-codes.js → insert-error-codes.cjs} +1 -1
- package/scripts/filter/after-post-render/{linker.js → linker.cjs} +1 -1
- package/scripts/filter/after-post-render/{parseicontag.js → parseicontag.cjs} +1 -1
- package/scripts/filter/after-post-render/{snippets.js → snippets.cjs} +2 -2
- package/scripts/filter/after-render/{process-svg.js → process-svg.cjs} +3 -3
- package/scripts/filter/before-post-render/{add-project-info-to-page.js → add-project-info-to-page.cjs} +2 -2
- package/scripts/filter/before-post-render/{add-repo-url.js → add-repo-url.cjs} +4 -4
- package/scripts/filter/before-post-render/{code-switcher.js → code-switcher.cjs} +1 -1
- package/scripts/filter/before-post-render/{execute-and-insert-function-results.js → execute-and-insert-function-results.cjs} +1 -1
- package/scripts/filter/before-post-render/gloria/{add-breadcrumbs-data-to-page.js → add-breadcrumbs-data-to-page.cjs} +4 -4
- package/scripts/filter/before-post-render/gloria/{prerender-admonitions.js → prerender-admonitions.cjs} +1 -1
- package/scripts/filter/before-post-render/gloria/{prerender-xml-pug-components.js → prerender-xml-pug-components.cjs} +5 -5
- package/scripts/filter/before-post-render/gloria/{render-post-render-pug-components.js → render-post-render-pug-components.cjs} +1 -1
- package/scripts/filter/before-post-render/{has-own-favicons.js → has-own-favicons.cjs} +1 -1
- package/scripts/filter/before-post-render/{infobox.js → infobox.cjs} +1 -1
- package/scripts/filter/before-post-render/{insertchangelog.js → insertchangelog.cjs} +1 -1
- package/scripts/filter/before-post-render/{replace-macros.js → replace-macros.cjs} +1 -1
- package/scripts/helper/{find-main-category-page.js → find-main-category-page.cjs} +1 -1
- package/scripts/helper/{normalize-badges.js → normalize-badges.cjs} +1 -1
- package/scripts/helper/{parse-href.js → parse-href.cjs} +1 -1
- package/scripts/helper/{u-capitalize.js → u-capitalize.cjs} +1 -1
- package/scripts/helper/{u-random-id.js → u-random-id.cjs} +1 -1
- package/scripts/helper/{u-remove-indentation.js → u-remove-indentation.cjs} +1 -1
- package/scripts/helper/{u-toc.js → u-toc.cjs} +1 -1
- package/scripts/utils/{concat-url-parts.js → concat-url-parts.cjs} +3 -3
- package/scripts/utils/{execute-and-insert-function-results.js → execute-and-insert-function-results.cjs} +7 -0
- package/scripts/utils/gloria-after-post-render/{append-copy-heading-buttons.js → append-copy-heading-buttons.cjs} +33 -16
- package/scripts/utils/{has-own-favicons.js → has-own-favicons.cjs} +6 -0
- package/scripts/utils/{inline-svg.js → inline-svg.cjs} +2 -2
- package/scripts/utils/{logcrossprojectreference.js → logcrossprojectreference.cjs} +6 -0
- package/scripts/utils/{parse-href.js → parse-href.cjs} +1 -1
- package/scripts/utils/{parseicontag.js → parseicontag.cjs} +7 -1
- package/scripts/utils/{parselinks.js → parselinks.cjs} +14 -6
- package/scripts/utils/pug-renderer/{create-prerender-pug-template.js → create-prerender-pug-template.cjs} +3 -3
- package/scripts/utils/pug-renderer/{render-pug-component.js → render-pug-component.cjs} +4 -4
- package/scripts/utils/pug-to-xml-binding/parser/{xml-components-parser.js → xml-components-parser.cjs} +2 -2
- package/scripts/utils/pug-to-xml-binding/{render-xml-pug-components-in-markdown.js → render-xml-pug-components-in-markdown.cjs} +3 -3
- package/scripts/utils/pug-to-xml-binding/{transform-xml-tree-to-pug.js → transform-xml-tree-to-pug.cjs} +1 -1
- package/scripts/utils/{spritesheet-svg.js → spritesheet-svg.cjs} +2 -2
- package/scripts/utils/{transform-markdown-admonitions.js → transform-markdown-admonitions.cjs} +1 -1
- package/src/api-builder/api-builder.js +28 -30
- package/src/api-builder/build-page-worker.js +9 -9
- package/src/api-builder/classes/description-parser.js +12 -14
- package/src/api-builder/classes/doc-data-factory.js +3 -5
- package/src/api-builder/classes/file-name-manager.js +2 -4
- package/src/api-builder/classes/html-file.js +2 -4
- package/src/api-builder/classes/navigation-tree.js +6 -8
- package/src/api-builder/classes/tree-node.js +1 -3
- package/src/api-builder/utils/findtargetdoclet.js +1 -3
- package/src/api-builder/utils/utils.js +19 -26
- package/src/data-converter/converters/jsdoc2umberto.js +2 -4
- package/src/data-converter/converters/jsduck2umberto.js +5 -7
- package/src/data-converter/converters/typedoc/abstractparser.js +3 -5
- package/src/data-converter/converters/typedoc/accessorparser.js +3 -5
- package/src/data-converter/converters/typedoc/classparser.js +3 -5
- package/src/data-converter/converters/typedoc/computedpropertyparser.js +3 -5
- package/src/data-converter/converters/typedoc/constantparser.js +3 -5
- package/src/data-converter/converters/typedoc/constructorparser.js +3 -5
- package/src/data-converter/converters/typedoc/errorparser.js +2 -4
- package/src/data-converter/converters/typedoc/eventparser.js +2 -4
- package/src/data-converter/converters/typedoc/functionparser.js +3 -5
- package/src/data-converter/converters/typedoc/interfaceparser.js +3 -5
- package/src/data-converter/converters/typedoc/methodparser.js +3 -5
- package/src/data-converter/converters/typedoc/moduleparser.js +3 -5
- package/src/data-converter/converters/typedoc/propertyparser.js +3 -5
- package/src/data-converter/converters/typedoc/referenceparser.js +3 -5
- package/src/data-converter/converters/typedoc/reflectionkind.js +24 -26
- package/src/data-converter/converters/typedoc/typedocconverter.js +3 -7
- package/src/data-converter/converters/typedoc/typeparser.js +3 -5
- package/src/data-converter/converters/typedoc2umberto.js +17 -19
- package/src/data-converter/data-collection.js +2 -5
- package/src/data-converter/data-provider.js +6 -8
- package/src/data-converter/doclet-collection.js +1 -4
- package/src/data-converter/middlewares/relation-fixer.js +3 -5
- package/src/helpers/capitalize.js +1 -3
- package/src/helpers/create-filtering-data-attribs.js +1 -3
- package/src/helpers/doc-formats.js +1 -3
- package/src/helpers/escape-longname.js +1 -3
- package/src/helpers/extract-longname.js +1 -3
- package/src/helpers/get-api-infobox-tooltip.js +3 -5
- package/src/helpers/get-docsearch-config.js +8 -6
- package/src/helpers/get-file-patterns-to-process.js +1 -3
- package/src/helpers/get-short-module-path.js +2 -4
- package/src/helpers/github-url.js +96 -103
- package/src/helpers/glob-to-regexp.js +3 -5
- package/src/helpers/html-safe.js +1 -3
- package/src/helpers/import-module.js +3 -5
- package/src/helpers/is-non-empty-array.js +1 -3
- package/src/helpers/log-with-time.js +2 -4
- package/src/helpers/resolve-path.js +5 -3
- package/src/helpers/snippets.js +50 -56
- package/src/helpers/split-longname.js +2 -4
- package/src/helpers/umberto-version.js +10 -0
- package/src/hexo/filter/extend-config.js +1 -3
- package/src/hexo/filter/project-locals.js +5 -7
- package/src/hexo/get-repo-urls.js +5 -6
- package/src/hexo/helper/get-page-group.js +1 -3
- package/src/hexo/project-globals.js +4 -6
- package/src/hexo-manager.js +12 -13
- package/src/index.js +28 -32
- package/src/sdk-builder/get-sdk-sources.js +11 -13
- package/src/sdk-builder/sdk-builder.js +11 -11
- package/src/tasks/build-api-docs.js +7 -9
- package/src/tasks/build-documentation.js +30 -31
- package/src/tasks/build-sdk.js +5 -5
- package/src/tasks/build-snippets.js +3 -5
- package/src/tasks/cache-files.js +4 -6
- package/src/tasks/compile-sass.js +8 -9
- package/src/tasks/copy-assets.js +3 -5
- package/src/tasks/copy-files.js +5 -7
- package/src/tasks/copy-project-docs.js +5 -7
- package/src/tasks/copy-project-icons.js +5 -7
- package/src/tasks/create-redirect-page.js +3 -5
- package/src/tasks/create-sitemap-index.js +3 -3
- package/src/tasks/create-sitemap-step.js +4 -4
- package/src/tasks/create-sitemap.js +6 -8
- package/src/tasks/create-sym-links.js +5 -7
- package/src/tasks/execute-hooks.js +3 -5
- package/src/tasks/get-extra-files.js +3 -5
- package/src/tasks/get-hexo-config.js +4 -4
- package/src/tasks/get-main-config.js +3 -5
- package/src/tasks/get-project-config.js +6 -8
- package/src/tasks/macro-replacer.js +1 -3
- package/src/tasks/minify-html-worker.js +5 -5
- package/src/tasks/minify-html.js +8 -10
- package/src/tasks/overwrite-api-guides.js +4 -6
- package/src/tasks/read-doc-sources.js +5 -7
- package/src/tasks/run-webpack.js +8 -6
- package/src/tasks/validate-links-collect-worker.js +6 -6
- package/src/tasks/validate-links-worker.js +6 -6
- package/src/tasks/validate-links.js +9 -11
- package/src/tasks/watcher.js +5 -7
- package/src/tasks/write-html-files.js +3 -5
- package/src/template/template-collection.js +13 -15
- package/themes/umberto/src/gloria/js/app.js +32 -32
- package/themes/umberto/src/gloria/js/components/api-nav-tree.js +4 -4
- package/themes/umberto/src/gloria/js/components/api-toggle.js +2 -2
- package/themes/umberto/src/gloria/js/components/breadcrumbs.js +1 -1
- package/themes/umberto/src/gloria/js/components/code-block.js +5 -5
- package/themes/umberto/src/gloria/js/components/code-switcher.js +2 -2
- package/themes/umberto/src/gloria/js/components/dropdown.js +5 -5
- package/themes/umberto/src/gloria/js/components/expandable.js +1 -1
- package/themes/umberto/src/gloria/js/components/fake-devtools.js +4 -4
- package/themes/umberto/src/gloria/js/components/hash-link.js +2 -2
- package/themes/umberto/src/gloria/js/components/heading-link.js +2 -2
- package/themes/umberto/src/gloria/js/components/iframe.js +2 -2
- package/themes/umberto/src/gloria/js/components/mobile-overlay.js +5 -5
- package/themes/umberto/src/gloria/js/components/nav-tree.js +3 -3
- package/themes/umberto/src/gloria/js/components/tabs.js +2 -2
- package/themes/umberto/src/gloria/js/components/tooltip-popover.js +13 -13
- package/themes/umberto/src/gloria/js/helpers/animate-element.js +2 -2
- package/themes/umberto/src/gloria/js/helpers/create-anchor-positioning-watcher.js +1 -1
- package/themes/umberto/src/gloria/js/helpers/create-keyboard-focus-cycler.js +3 -3
- package/themes/umberto/src/gloria/js/helpers/focus-first-interactive.js +2 -2
- package/themes/umberto/src/gloria/js/helpers/highlight-code.js +1 -1
- package/themes/umberto/src/gloria/js/helpers/scroll-to-hash.js +1 -1
- package/themes/umberto/src/gloria/js/helpers/tween.js +2 -2
- package/themes/umberto/src/gloria/js/modules/algolia-search.js +4 -4
- package/themes/umberto/src/gloria/js/modules/api-filter.js +1 -1
- package/themes/umberto/src/gloria/js/modules/header-bar.js +4 -4
- package/themes/umberto/src/gloria/js/modules/header.js +2 -2
- package/themes/umberto/src/gloria/js/modules/links-prefetch.js +1 -1
- package/themes/umberto/src/gloria/js/modules/mobile-nav.js +7 -7
- package/themes/umberto/src/gloria/js/modules/sidebar.js +3 -3
- package/themes/umberto/src/gloria/js/modules/table-of-contents-api.js +9 -9
- package/themes/umberto/src/gloria/js/modules/table-of-contents.js +10 -10
- package/themes/umberto/src/gloria/js/public-api.js +15 -15
- package/themes/umberto/src/gloria/js/web-components/svg-icon.js +3 -3
- package/themes/umberto/src/umberto/js/_apitree.js +1 -1
- package/themes/umberto/src/umberto/js/_attachpermalinklistener.js +1 -1
- package/themes/umberto/src/umberto/js/_copymobileapinavigation.js +1 -1
- package/themes/umberto/src/umberto/js/_imageModal.js +1 -1
- package/themes/umberto/src/umberto/js/_pagenavigation.js +1 -1
- package/themes/umberto/src/umberto/js/_prism.js +1 -1
- package/themes/umberto/src/umberto/js/_samplecode.js +1 -1
- package/themes/umberto/src/umberto/js/_sidenavigation.js +1 -1
- package/themes/umberto/src/umberto/js/_toc.js +1 -1
- package/themes/umberto/src/umberto/js/_warningbanner.js +1 -1
- package/themes/umberto/src/umberto/js/app.js +19 -19
- package/src/tasks/validate-html-w3c.js +0 -35
- /package/scripts/filter/after-post-render/{basepath-replacer.js → basepath-replacer.cjs} +0 -0
- /package/scripts/filter/after-post-render/{fix-code-samples.js → fix-code-samples.cjs} +0 -0
- /package/scripts/filter/after-post-render/{gather-guides.js → gather-guides.cjs} +0 -0
- /package/scripts/filter/after-post-render/{img-linker.js → img-linker.cjs} +0 -0
- /package/scripts/filter/after-post-render/{import-guide.js → import-guide.cjs} +0 -0
- /package/scripts/filter/after-post-render/{process-variables.js → process-variables.cjs} +0 -0
- /package/scripts/filter/after-post-render/{time-end.js → time-end.cjs} +0 -0
- /package/scripts/filter/after-post-render/{time-start.js → time-start.cjs} +0 -0
- /package/scripts/filter/after-post-render/{validate-after-render.js → validate-after-render.cjs} +0 -0
- /package/scripts/filter/before-post-render/{change-output-path.js → change-output-path.cjs} +0 -0
- /package/scripts/filter/before-post-render/{set-layout.js → set-layout.cjs} +0 -0
- /package/scripts/filter/before-post-render/{validate-page-data.js → validate-page-data.cjs} +0 -0
- /package/scripts/helper/{get-pages-for-nav-tree.js → get-pages-for-nav-tree.cjs} +0 -0
- /package/scripts/helper/{mark-empty-categories.js → mark-empty-categories.cjs} +0 -0
- /package/scripts/helper/{u-extract-and-cache-title.js → u-extract-and-cache-title.cjs} +0 -0
- /package/scripts/helper/{u-split-to-title-and-content.js → u-split-to-title-and-content.cjs} +0 -0
- /package/scripts/utils/{add-indention.js → add-indention.cjs} +0 -0
- /package/scripts/utils/{capitalize.js → capitalize.cjs} +0 -0
- /package/scripts/utils/{compose.js → compose.cjs} +0 -0
- /package/scripts/utils/{decode-html-entities.js → decode-html-entities.cjs} +0 -0
- /package/scripts/utils/{drop-init-slash.js → drop-init-slash.cjs} +0 -0
- /package/scripts/utils/{drop-trailing-slash.js → drop-trailing-slash.cjs} +0 -0
- /package/scripts/utils/{drop-url-protocol.js → drop-url-protocol.cjs} +0 -0
- /package/scripts/utils/{findmaincategorypage.js → findmaincategorypage.cjs} +0 -0
- /package/scripts/utils/{getreportissuewidgeturl.js → getreportissuewidgeturl.cjs} +0 -0
- /package/scripts/utils/gloria-after-post-render/{apply-design-doc-classes.js → apply-design-doc-classes.cjs} +0 -0
- /package/scripts/utils/gloria-after-post-render/{wrap-table-into-wrappers.js → wrap-table-into-wrappers.cjs} +0 -0
- /package/scripts/utils/{insertchangelog.js → insertchangelog.cjs} +0 -0
- /package/scripts/utils/{measure-call.js → measure-call.cjs} +0 -0
- /package/scripts/utils/{normalizebadges.js → normalizebadges.cjs} +0 -0
- /package/scripts/utils/{parser-cursor.js → parser-cursor.cjs} +0 -0
- /package/scripts/utils/pug-to-xml-binding/parser/{walk-xml-tree.js → walk-xml-tree.cjs} +0 -0
- /package/scripts/utils/{random-id.js → random-id.cjs} +0 -0
- /package/scripts/utils/{remove-indentation.js → remove-indentation.cjs} +0 -0
- /package/scripts/utils/{shoulddisplaynewindicator.js → shoulddisplaynewindicator.cjs} +0 -0
- /package/scripts/utils/{toc.js → toc.cjs} +0 -0
- /package/scripts/utils/{transformcodeswitcher.js → transformcodeswitcher.cjs} +0 -0
- /package/scripts/utils/{transforminfobox.js → transforminfobox.cjs} +0 -0
- /package/scripts/utils/{uniq-by-last.js → uniq-by-last.cjs} +0 -0
|
@@ -3,115 +3,108 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const { spawnSync } = require( 'node:child_process' );
|
|
9
|
-
const upath = require( 'upath' );
|
|
6
|
+
import { spawnSync } from 'node:child_process';
|
|
7
|
+
import upath from 'upath';
|
|
10
8
|
|
|
11
9
|
const cachedGitPaths = new Set();
|
|
12
10
|
const gitHashCache = new Map();
|
|
13
11
|
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
projectName = repoUrl.replace( /\/*$/, '' ).match( /[^/]*$/ )[ 0 ];
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const pathSuffix = _getPathSuffix( filePath );
|
|
98
|
-
|
|
99
|
-
if ( !pathSuffix ) {
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const gitHash = _getGitHashFromPath( filePath.replace( pathSuffix, '' ) );
|
|
104
|
-
|
|
105
|
-
if ( !gitHash ) {
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// eslint-disable-next-line @stylistic/max-len
|
|
110
|
-
return `https://github.com/ckeditor/${ projectName }/blob/${ gitHash }${ pathSuffix }#L${ file.lineNr }-L${ file.lineNr + file.len }`;
|
|
12
|
+
/**
|
|
13
|
+
* Returns a URL where a user will be redirect after clicking a "Report new issue" button.
|
|
14
|
+
*
|
|
15
|
+
* @param {Object} projectConfig
|
|
16
|
+
* @param {String} [projectConfig.issueUrl] An absolute URL for reporting an issue. If specified, it will be used.
|
|
17
|
+
* @param {String} [projectConfig.repoUrlDocs] An absolute URL where the repository is located.
|
|
18
|
+
* @returns {String}
|
|
19
|
+
*/
|
|
20
|
+
export function getIssueUrl( projectConfig ) {
|
|
21
|
+
const reportIssueRepository = projectConfig.issueUrl || projectConfig.repoUrlDocs;
|
|
22
|
+
|
|
23
|
+
if ( !reportIssueRepository ) {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return `${ reportIssueRepository }/issues/new`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Returns a URL where a user will be redirect after clicking a "Contribute to this guide" button.
|
|
32
|
+
*
|
|
33
|
+
* @param {Object} projectConfig
|
|
34
|
+
* @param {String} [projectConfig.contributeUrl] An absolute URL for contributing to the guide.
|
|
35
|
+
* @param {String} [projectConfig.repoUrlDocs] An absolute URL where the repository is located.
|
|
36
|
+
* @param {Boolean} [projectConfig.doNotAddDocsInPath=false] If set to true, `docs/` part won't be added to the URL.
|
|
37
|
+
* @param {String} sourceDirOrPathKey If `pathKey` was passed, `itemName` is not required. The `pathKey` part contains
|
|
38
|
+
* the rest of path to the page (including an extension). `sourceDir` is a directory where the entire SDK group is located.
|
|
39
|
+
* @param {String|null} [itemName=null] Name of the guide where the URL should be generated. Required if `sourceDirOrPathKey`
|
|
40
|
+
* contains the `sourceDir` for specified SDK group. In such case, `itemName` is a name from SDK item that belongs to given group.
|
|
41
|
+
* @returns {String}
|
|
42
|
+
*/
|
|
43
|
+
export function getContributeUrl( projectConfig, sourceDirOrPathKey, itemName = null ) {
|
|
44
|
+
const contributeRepository = projectConfig.contributeUrl || projectConfig.repoUrlDocs;
|
|
45
|
+
|
|
46
|
+
if ( !contributeRepository ) {
|
|
47
|
+
return '';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const urlParts = [
|
|
51
|
+
contributeRepository,
|
|
52
|
+
'blob',
|
|
53
|
+
'master'
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
if ( !projectConfig.doNotAddDocsInPath ) {
|
|
57
|
+
urlParts.push( 'docs' );
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
urlParts.push( sourceDirOrPathKey.replace( /^\//, '' ) );
|
|
61
|
+
|
|
62
|
+
if ( itemName ) {
|
|
63
|
+
urlParts.push( itemName + '.html' );
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return urlParts.join( '/' );
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Method obtain URL string with repository address including hash of github repository which was used to build given docs files.
|
|
71
|
+
*
|
|
72
|
+
* @param {String} repoUrl Repository url for which we need to obtain full url to github
|
|
73
|
+
* @param {Object} file Object storing details about given documentation entry
|
|
74
|
+
* @param {String} file.filePath Path to file where documentation was read
|
|
75
|
+
* @param {Number} file.lineNr Line number where documentation starts
|
|
76
|
+
* @param {Number} file.len Length of comment
|
|
77
|
+
*
|
|
78
|
+
* @returns {String/null} String URL to github with specific hash and line numbers to highlight
|
|
79
|
+
*/
|
|
80
|
+
export function getFullGithubLink( repoUrl, file ) {
|
|
81
|
+
const filePath = file.filePath;
|
|
82
|
+
|
|
83
|
+
let projectName;
|
|
84
|
+
|
|
85
|
+
// TODO: Couldn't be the repository/github link obtained based on the file path?
|
|
86
|
+
// We know where the file is saved. Based on that, we could find the repository URL
|
|
87
|
+
// and adjust values.
|
|
88
|
+
if ( repoUrl.startsWith( '@ckeditor' ) ) {
|
|
89
|
+
projectName = filePath.match( /([^(?:/|\\)]+)(?:\/|\\)packages/ )[ 1 ];
|
|
90
|
+
} else {
|
|
91
|
+
projectName = repoUrl.replace( /\/*$/, '' ).match( /[^/]*$/ )[ 0 ];
|
|
111
92
|
}
|
|
112
|
-
};
|
|
113
93
|
|
|
114
|
-
|
|
94
|
+
const pathSuffix = _getPathSuffix( filePath );
|
|
95
|
+
|
|
96
|
+
if ( !pathSuffix ) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const gitHash = _getGitHashFromPath( filePath.replace( pathSuffix, '' ) );
|
|
101
|
+
|
|
102
|
+
if ( !gitHash ) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return `https://github.com/ckeditor/${ projectName }/blob/${ gitHash }${ pathSuffix }#L${ file.lineNr }-L${ file.lineNr + file.len }`;
|
|
107
|
+
}
|
|
115
108
|
|
|
116
109
|
function _getPathSuffix( fileInGitRepositoryPath ) {
|
|
117
110
|
const searchedGitPath = [ ...cachedGitPaths ].find( gitPath => fileInGitRepositoryPath.startsWith( gitPath ) );
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const escapeStringRegexp = require( 'escape-string-regexp' );
|
|
6
|
+
import escapeStringRegexp from 'escape-string-regexp';
|
|
9
7
|
|
|
10
8
|
/**
|
|
11
9
|
* Converts the specified `pattern` to an instance of RegExp.
|
|
@@ -13,8 +11,8 @@ const escapeStringRegexp = require( 'escape-string-regexp' );
|
|
|
13
11
|
* @param {String} pattern
|
|
14
12
|
* @return {RegExp}
|
|
15
13
|
*/
|
|
16
|
-
|
|
14
|
+
export function globToRegexp( pattern ) {
|
|
17
15
|
return new RegExp(
|
|
18
16
|
escapeStringRegexp( pattern ).replace( /\\\*/g, '[\\s\\S]*' ).replace( /\//g, '[\\\\/]' )
|
|
19
17
|
);
|
|
20
|
-
}
|
|
18
|
+
}
|
package/src/helpers/html-safe.js
CHANGED
|
@@ -3,14 +3,12 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
'use strict';
|
|
7
|
-
|
|
8
6
|
/**
|
|
9
7
|
* Escapes string
|
|
10
8
|
* @param str
|
|
11
9
|
* @returns {String}
|
|
12
10
|
*/
|
|
13
|
-
|
|
11
|
+
export const htmlSafe = str => {
|
|
14
12
|
if ( typeof str !== 'string' ) {
|
|
15
13
|
str = String( str );
|
|
16
14
|
}
|
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const upath = require( 'upath' );
|
|
9
|
-
const { pathToFileURL } = require( 'node:url' );
|
|
6
|
+
import upath from 'upath';
|
|
7
|
+
import { pathToFileURL } from 'node:url';
|
|
10
8
|
|
|
11
9
|
/**
|
|
12
10
|
* Loads the specified module using `import()` call.
|
|
@@ -14,7 +12,7 @@ const { pathToFileURL } = require( 'node:url' );
|
|
|
14
12
|
* @param {String} modulePath
|
|
15
13
|
* @returns {Promise.<Function>}
|
|
16
14
|
*/
|
|
17
|
-
|
|
15
|
+
export async function importModule( modulePath ) {
|
|
18
16
|
const modulePathAsFileURL = getPathAsFileURL( modulePath );
|
|
19
17
|
|
|
20
18
|
return ( await import( modulePathAsFileURL ) ).default;
|
|
@@ -3,13 +3,11 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
'use strict';
|
|
7
|
-
|
|
8
6
|
/**
|
|
9
7
|
* Checks if value is a non-empty Array.
|
|
10
8
|
* @param arr
|
|
11
9
|
* @returns {boolean}
|
|
12
10
|
*/
|
|
13
|
-
|
|
11
|
+
export const isNonEmptyArray = arr => {
|
|
14
12
|
return Array.isArray( arr ) && arr.length > 0;
|
|
15
13
|
};
|
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import { styleText } from 'node:util';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
module.exports = function logWithTime( message ) {
|
|
8
|
+
export function logWithTime( message ) {
|
|
11
9
|
const lowercase = message.charAt( 0 ).toLowerCase() + message.slice( 1 );
|
|
12
10
|
const getTime = measureSeconds();
|
|
13
11
|
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import { createRequire } from 'node:module';
|
|
7
|
+
|
|
8
|
+
const require = createRequire( import.meta.url );
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* Wrapper around `require.resolve()` to allow mocking it in tests.
|
|
10
12
|
*/
|
|
11
|
-
|
|
13
|
+
export function resolvePath( path, options ) {
|
|
12
14
|
return require.resolve( path, options );
|
|
13
|
-
}
|
|
15
|
+
}
|
package/src/helpers/snippets.js
CHANGED
|
@@ -3,61 +3,55 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
shouldBuildSnippets( projectName, hexo ) {
|
|
20
|
-
if ( !hexo.projectGlobals || !hexo.projectGlobals[ projectName ] ) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if ( hexo.projectGlobals.common && hexo.projectGlobals.common.skipLiveSnippets ) {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return true;
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Returns all files that are required for building the snippet.
|
|
33
|
-
*
|
|
34
|
-
* @param {String} basePath An absolute path where the snippets are saved.
|
|
35
|
-
* @param {String} snippetName A name of the snippet which files are being looked for.
|
|
36
|
-
* @returns {SnippetSource}
|
|
37
|
-
*/
|
|
38
|
-
getSnippetSourcePaths( basePath, snippetName ) {
|
|
39
|
-
const files = {};
|
|
40
|
-
|
|
41
|
-
globSync( upath.join( basePath, snippetName + '.*' ) )
|
|
42
|
-
.map( path => upath.normalize( path ) )
|
|
43
|
-
.forEach( singlePath => {
|
|
44
|
-
const fileExtension = upath.extname( singlePath ).slice( 1 );
|
|
45
|
-
|
|
46
|
-
files[ fileExtension ] = singlePath;
|
|
47
|
-
} );
|
|
48
|
-
|
|
49
|
-
return files;
|
|
50
|
-
},
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Returns a HTML Comment Node that will be replaced with the proper snippet later.
|
|
54
|
-
*
|
|
55
|
-
* @param {String} snippetName
|
|
56
|
-
* @returns {String}
|
|
57
|
-
*/
|
|
58
|
-
getSnippetPlaceholder( snippetName ) {
|
|
59
|
-
return `<!--UMBERTO: SNIPPET: "${ snippetName }"-->`;
|
|
6
|
+
import upath from 'upath';
|
|
7
|
+
import { globSync } from 'glob';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Checks whether snippets should be built for specified `projectName`.
|
|
11
|
+
*
|
|
12
|
+
* @param {String} projectName Current parsed project name.
|
|
13
|
+
* @param {Object} hexo Options come from Hexo.
|
|
14
|
+
* @returns {Boolean}
|
|
15
|
+
*/
|
|
16
|
+
export function shouldBuildSnippets( projectName, hexo ) {
|
|
17
|
+
if ( !hexo.projectGlobals || !hexo.projectGlobals[ projectName ] ) {
|
|
18
|
+
return false;
|
|
60
19
|
}
|
|
61
|
-
};
|
|
62
20
|
|
|
63
|
-
|
|
21
|
+
if ( hexo.projectGlobals.common && hexo.projectGlobals.common.skipLiveSnippets ) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Returns all files that are required for building the snippet.
|
|
30
|
+
*
|
|
31
|
+
* @param {String} basePath An absolute path where the snippets are saved.
|
|
32
|
+
* @param {String} snippetName A name of the snippet which files are being looked for.
|
|
33
|
+
* @returns {SnippetSource}
|
|
34
|
+
*/
|
|
35
|
+
export function getSnippetSourcePaths( basePath, snippetName ) {
|
|
36
|
+
const files = {};
|
|
37
|
+
|
|
38
|
+
globSync( upath.join( basePath, snippetName + '.*' ) )
|
|
39
|
+
.map( path => upath.normalize( path ) )
|
|
40
|
+
.forEach( singlePath => {
|
|
41
|
+
const fileExtension = upath.extname( singlePath ).slice( 1 );
|
|
42
|
+
|
|
43
|
+
files[ fileExtension ] = singlePath;
|
|
44
|
+
} );
|
|
45
|
+
|
|
46
|
+
return files;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Returns a HTML Comment Node that will be replaced with the proper snippet later.
|
|
51
|
+
*
|
|
52
|
+
* @param {String} snippetName
|
|
53
|
+
* @returns {String}
|
|
54
|
+
*/
|
|
55
|
+
export function getSnippetPlaceholder( snippetName ) {
|
|
56
|
+
return `<!--UMBERTO: SNIPPET: "${ snippetName }"-->`;
|
|
57
|
+
}
|
|
@@ -3,15 +3,13 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const { MEMBER_NAME_REGEXP, LONG_NAME_LABEL_REGEXP } = require( '../api-builder/utils/utils' );
|
|
6
|
+
import { MEMBER_NAME_REGEXP, LONG_NAME_LABEL_REGEXP } from '../api-builder/utils/utils.js';
|
|
9
7
|
|
|
10
8
|
/**
|
|
11
9
|
* @param {String} longname
|
|
12
10
|
* @returns {LongNameParts}
|
|
13
11
|
*/
|
|
14
|
-
|
|
12
|
+
export const splitLongname = longname => {
|
|
15
13
|
if ( !longname || typeof longname !== 'string' ) {
|
|
16
14
|
return {};
|
|
17
15
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
|
|
8
|
+
const umbertoPackage = JSON.parse( fs.readFileSync( new URL( '../../package.json', import.meta.url ), 'utf8' ) );
|
|
9
|
+
|
|
10
|
+
export const umbertoVersion = umbertoPackage.version;
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
module.exports = ( ctx, customConfig ) => {
|
|
6
|
+
export const extendConfig = ( ctx, customConfig ) => {
|
|
9
7
|
ctx.extend.filter.register( 'after_init', () => {
|
|
10
8
|
ctx.config = Object.assign( ctx.config, customConfig );
|
|
11
9
|
// jscs:disable
|
|
@@ -3,12 +3,10 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const getDocSearchConfig = require( '../../helpers/get-docsearch-config' );
|
|
11
|
-
const umbertoVersion = require( '../../../package.json' ).version;
|
|
6
|
+
import upath from 'upath';
|
|
7
|
+
import { getPageGroup as getPageGroupHelper } from '../helper/get-page-group.js';
|
|
8
|
+
import { getDocsearchConfig as getDocSearchConfig } from '../../helpers/get-docsearch-config.js';
|
|
9
|
+
import { umbertoVersion } from '../../helpers/umberto-version.js';
|
|
12
10
|
|
|
13
11
|
/**
|
|
14
12
|
* Resolves the API package name from a docs path.
|
|
@@ -92,7 +90,7 @@ function getApiTreeHtml( { path, basePath, apiSlug, navTree, navTreeByPackage }
|
|
|
92
90
|
* @param {Boolean} navigationShowEmptyCategories If set on true, empty categories will be displayed.
|
|
93
91
|
* @param {Object} og Open Graph config.
|
|
94
92
|
*/
|
|
95
|
-
|
|
93
|
+
export const projectLocals = ( ctx, {
|
|
96
94
|
basePath,
|
|
97
95
|
docSearch = {},
|
|
98
96
|
config,
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import upath from 'upath';
|
|
8
|
+
import { globSync } from 'glob';
|
|
7
9
|
|
|
8
|
-
const
|
|
9
|
-
const { globSync } = require( 'glob' );
|
|
10
|
-
|
|
11
|
-
module.exports = ( {
|
|
10
|
+
export const getRepoUrls = ( {
|
|
12
11
|
rootPath,
|
|
13
12
|
defaultRepoUrl,
|
|
14
13
|
packages = []
|
|
@@ -54,7 +53,7 @@ function getPackageJson( srcDir ) {
|
|
|
54
53
|
let packageJson = null;
|
|
55
54
|
|
|
56
55
|
try {
|
|
57
|
-
packageJson =
|
|
56
|
+
packageJson = JSON.parse( fs.readFileSync( upath.join( srcDir, 'package.json' ), 'utf8' ) );
|
|
58
57
|
} catch {
|
|
59
58
|
console.warn( `Warning: Cannot read package.json from ${ srcDir }.` );
|
|
60
59
|
}
|
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const upath = require( 'upath' );
|
|
9
|
-
const getRepoUrls = require( './get-repo-urls' );
|
|
6
|
+
import upath from 'upath';
|
|
7
|
+
import { getRepoUrls } from './get-repo-urls.js';
|
|
10
8
|
|
|
11
9
|
/**
|
|
12
10
|
* Adds various project data to hexo so that it can be accessed in filters.
|
|
@@ -17,7 +15,7 @@ const getRepoUrls = require( './get-repo-urls' );
|
|
|
17
15
|
* @param {Object} config Project's umberto.json config.
|
|
18
16
|
* @param {String} errorsHtml API errors HTML created by ApiBuilder.
|
|
19
17
|
*/
|
|
20
|
-
|
|
18
|
+
export const projectGlobals = ( ctx, {
|
|
21
19
|
rootPath,
|
|
22
20
|
basePath,
|
|
23
21
|
config,
|
|
@@ -42,7 +40,7 @@ module.exports = ( ctx, {
|
|
|
42
40
|
errorsHtml,
|
|
43
41
|
|
|
44
42
|
// The `_icons` collection contains files that should be copied to the project's assets.
|
|
45
|
-
// They are parsed in the `parseIconTag()` function. See `scripts/filter/after-post-render/parseicontag.
|
|
43
|
+
// They are parsed in the `parseIconTag()` function. See `scripts/filter/after-post-render/parseicontag.cjs`.
|
|
46
44
|
_icons: new Map()
|
|
47
45
|
};
|
|
48
46
|
|
package/src/hexo-manager.js
CHANGED
|
@@ -3,16 +3,15 @@
|
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import { styleText } from 'node:util';
|
|
7
|
+
import upath from 'upath';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import { globSync } from 'glob';
|
|
10
|
+
import Hexo from '../hexo-shim.js';
|
|
11
|
+
import { getHexoConfig } from './tasks/get-hexo-config.js';
|
|
12
|
+
import { extendConfig } from './hexo/filter/extend-config.js';
|
|
7
13
|
|
|
8
|
-
const
|
|
9
|
-
const upath = require( 'upath' );
|
|
10
|
-
const fs = require( 'fs-extra' );
|
|
11
|
-
const { globSync } = require( 'glob' );
|
|
12
|
-
const Hexo = require( '../hexo-shim' );
|
|
13
|
-
|
|
14
|
-
const getHexoConfig = require( './tasks/get-hexo-config' );
|
|
15
|
-
const extendConfig = require( './hexo/filter/extend-config' );
|
|
14
|
+
const __dirname = import.meta.dirname;
|
|
16
15
|
|
|
17
16
|
/**
|
|
18
17
|
* Class used to initialize and control hexo.
|
|
@@ -198,18 +197,18 @@ class HexoManager {
|
|
|
198
197
|
|
|
199
198
|
Object.assign( this.hexo.projectGlobals.common, options, {
|
|
200
199
|
// The `_snippetsData` collection is used in `src/tasks/build-snippets.js` in order to build snippets.
|
|
201
|
-
// Required data are being added in hexo `after_post_render` filter: `scripts/filter/after-post-render/snippets.
|
|
200
|
+
// Required data are being added in hexo `after_post_render` filter: `scripts/filter/after-post-render/snippets.cjs`.
|
|
202
201
|
/** @type {Map.<String, Set.<Snippet>>} */
|
|
203
202
|
_snippetsData: new Map(),
|
|
204
203
|
|
|
205
204
|
// The `_copiedFiles` collection is being built in `src/tasks/copy-project-docs.js` in order to find the source
|
|
206
|
-
// paths of copied files while processing snippets (see: `scripts/filter/after-post-render/snippets.
|
|
205
|
+
// paths of copied files while processing snippets (see: `scripts/filter/after-post-render/snippets.cjs`).
|
|
207
206
|
/** @type {Map.<String, Map.<String, String>>} */
|
|
208
207
|
_copiedFiles: new Map(),
|
|
209
208
|
|
|
210
209
|
// The `_disabledFilters` collection contains names of filters that won't be executed.
|
|
211
210
|
// Unfortunately, the mechanism is not merged into Hexo core, so when writing a filter, you need to verify
|
|
212
|
-
// manually whether it should be executed. An example usage you can find in the `scripts/utils/parselinks.
|
|
211
|
+
// manually whether it should be executed. An example usage you can find in the `scripts/utils/parselinks.cjs` file.
|
|
213
212
|
/** @type {Set.<String>} */
|
|
214
213
|
_disabledFilters: new Set()
|
|
215
214
|
} );
|
|
@@ -237,4 +236,4 @@ class HexoManager {
|
|
|
237
236
|
}
|
|
238
237
|
}
|
|
239
238
|
|
|
240
|
-
|
|
239
|
+
export const hexoManager = new HexoManager();
|