mobility-toolbox-js 2.0.0-beta.2 → 2.0.0-beta.8
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/.babelrc +6 -0
- package/.esdoc.json +17 -0
- package/.eslintignore +1 -0
- package/.github/workflows/conventional-pr-title.yml +21 -0
- package/.github/workflows/cypress.yml +29 -0
- package/.github/workflows/nodejs.yml +28 -0
- package/.husky/commit-msg +4 -0
- package/.husky/post-checkout +4 -0
- package/.husky/post-merge +4 -0
- package/.husky/post-rebase +4 -0
- package/.husky/pre-commit +4 -0
- package/.neutrinorc.js +176 -0
- package/.nvmrc +1 -0
- package/CHANGELOG.md +10 -0
- package/LICENSE +21 -0
- package/README.md +4 -1
- package/__mocks__/mapbox-gl.js +81 -0
- package/__mocks__/maplibre-gl.js +81 -0
- package/commitlint.config.js +1 -0
- package/cypress/fixtures/example.json +5 -0
- package/cypress/integration/examples/api.spec.js +7 -0
- package/cypress/integration/examples/examples.spec.js +7 -0
- package/cypress/integration/examples/navigation.spec.js +29 -0
- package/cypress/plugins/index.js +21 -0
- package/cypress/support/commands.js +25 -0
- package/cypress/support/index.js +20 -0
- package/cypress.json +4 -0
- package/data/fetchRoute.json +292 -0
- package/data/fetchTrajectories.json +18 -0
- package/data/fetchTrajectoryById.json +3 -0
- package/data/fetchTrajectoryStations.json +18 -0
- package/data/stopsSearch.json +15 -0
- package/documentation.yml +4 -0
- package/esdoc/README.md +27 -0
- package/esdoc/plugins/MyPlugin.js +69 -0
- package/esdoc/plugins/dynamic-property-plugin/Plugin.js +50 -0
- package/esdoc/plugins/externals-plugin/Plugin.js +45 -0
- package/esdoc/plugins/externals-plugin/externals.js +96 -0
- package/global-setup.js +3 -0
- package/{ol/README.md → index.html} +0 -0
- package/indexweb.html +49 -0
- package/jest.config.js +5 -0
- package/package.json +29 -9
- package/pull_request_template.md +17 -0
- package/renovate.json +4 -0
- package/scripts/read-pkg-json.js +22 -0
- package/{api → src/api}/index.js +0 -0
- package/{api → src/api}/routing/RoutingAPI.js +0 -0
- package/{api → src/api}/routing/RoutingAPI.test.js +0 -0
- package/{api → src/api}/stops/StopsAPI.js +0 -0
- package/{api → src/api}/stops/StopsAPI.test.js +0 -0
- package/{api → src/api}/tralis/TralisAPI.js +0 -0
- package/{api → src/api}/tralis/TralisAPI.test.js +0 -0
- package/{api → src/api}/tralis/TralisAPIUtils.js +0 -0
- package/{api → src/api}/tralis/WebSocketConnector.js +0 -0
- package/{api → src/api}/tralis/WebSocketConnector.test.js +0 -0
- package/{api → src/api}/tralis/typedefs.js +0 -0
- package/src/assets/Lato-Black.ttf +0 -0
- package/src/assets/Lato-BlackItalic.ttf +0 -0
- package/src/assets/Lato-Bold.ttf +0 -0
- package/src/assets/Lato-BoldItalic.ttf +0 -0
- package/src/assets/Lato-Italic.ttf +0 -0
- package/src/assets/Lato-Light.ttf +0 -0
- package/src/assets/Lato-LightItalic.ttf +0 -0
- package/src/assets/Lato-Regular.ttf +0 -0
- package/src/assets/Lato-Thin.ttf +0 -0
- package/src/assets/Lato-ThinItalic.ttf +0 -0
- package/src/assets/OFL.txt +93 -0
- package/{common → src/common}/Tracker.js +0 -0
- package/{common → src/common}/api/api.js +0 -0
- package/{common → src/common}/api/api.test.js +0 -0
- package/{common → src/common}/controls/Control.js +0 -0
- package/{common → src/common}/controls/Control.test.js +0 -0
- package/src/common/index.js +5 -0
- package/{common → src/common}/layers/Layer.js +0 -0
- package/{common → src/common}/layers/Layer.test.js +0 -0
- package/{common → src/common}/mixins/CopyrightMixin.js +0 -0
- package/{common → src/common}/mixins/SearchMixin.js +0 -0
- package/{common → src/common}/mixins/TralisLayerMixin.js +0 -0
- package/{common → src/common}/styles/index.js +1 -1
- package/{common → src/common}/styles/trackerDefaultStyle.js +8 -8
- package/{common → src/common}/styles/trackerDelayStyle.js +0 -0
- package/{common → src/common}/styles/trackerSimpleStyle.js +0 -0
- package/{common → src/common}/trackerConfig.js +0 -0
- package/{common → src/common}/trackerConfig.test.js +0 -0
- package/{common → src/common}/typedefs.js +0 -0
- package/{common → src/common}/utils/createTrackerFilters.js +0 -0
- package/{common → src/common}/utils/createTrackerFilters.test.js +0 -0
- package/{common → src/common}/utils/getMapboxMapCopyrights.js +0 -0
- package/{common → src/common}/utils/getMapboxMapCopyrights.test.js +0 -0
- package/{common → src/common}/utils/getMapboxStyleUrl.js +0 -0
- package/{common → src/common}/utils/getVehiclePosition.js +0 -0
- package/{common → src/common}/utils/index.js +0 -1
- package/{common → src/common}/utils/removeDuplicate.js +0 -0
- package/{common → src/common}/utils/removeDuplicate.test.js +0 -0
- package/{common → src/common}/utils/sortByDelay.js +0 -0
- package/{common → src/common}/utils/timeUtils.js +0 -0
- package/{common → src/common}/utils/timeUtils.test.js +0 -0
- package/src/doc/App.js +116 -0
- package/src/doc/App.scss +51 -0
- package/src/doc/_redirects +2 -0
- package/src/doc/components/CodeSandboxButton.js +103 -0
- package/src/doc/components/Documentation.js +40 -0
- package/src/doc/components/Esdoc/Anchor.js +57 -0
- package/src/doc/components/Esdoc/ClassDoc.js +272 -0
- package/src/doc/components/Esdoc/DeprecatedHTML.js +16 -0
- package/src/doc/components/Esdoc/DetailDocs.js +281 -0
- package/src/doc/components/Esdoc/DetailHTML.js +33 -0
- package/src/doc/components/Esdoc/DirectSubclassHTML.js +30 -0
- package/src/doc/components/Esdoc/DocBuilderUtils.js +694 -0
- package/src/doc/components/Esdoc/DocLinkHTML.js +62 -0
- package/src/doc/components/Esdoc/DocsLinkHTML.js +38 -0
- package/src/doc/components/Esdoc/Esdoc.js +63 -0
- package/src/doc/components/Esdoc/EsdocContent.js +51 -0
- package/src/doc/components/Esdoc/EsdocNavigation.js +13 -0
- package/src/doc/components/Esdoc/EsdocSearch.js +81 -0
- package/src/doc/components/Esdoc/ExperimentalHTML.js +17 -0
- package/src/doc/components/Esdoc/ExtendsChainHTML.js +32 -0
- package/src/doc/components/Esdoc/FileDocLinkHTML.js +60 -0
- package/src/doc/components/Esdoc/IdentifiersDoc.js +113 -0
- package/src/doc/components/Esdoc/IndirectSubclassHTML.js +30 -0
- package/src/doc/components/Esdoc/InheritedSummaryDoc.js +70 -0
- package/src/doc/components/Esdoc/InheritedSummaryHTML.js +38 -0
- package/src/doc/components/Esdoc/MixinClassesHTML.js +29 -0
- package/src/doc/components/Esdoc/NavDoc.js +112 -0
- package/src/doc/components/Esdoc/OverrideMethod.js +44 -0
- package/src/doc/components/Esdoc/OverrideMethodDescription.js +35 -0
- package/src/doc/components/Esdoc/Properties.js +89 -0
- package/src/doc/components/Esdoc/README.md +45 -0
- package/src/doc/components/Esdoc/SignatureHTML.js +123 -0
- package/src/doc/components/Esdoc/SingleDoc.js +31 -0
- package/src/doc/components/Esdoc/SummaryDoc.js +160 -0
- package/src/doc/components/Esdoc/SummaryHTML.js +96 -0
- package/src/doc/components/Esdoc/TypeDocLinkHTML.js +249 -0
- package/src/doc/components/Esdoc/css/identifiers.css +38 -0
- package/src/doc/components/Esdoc/css/search.css +76 -0
- package/src/doc/components/Esdoc/css/style.css +603 -0
- package/src/doc/components/Esdoc/index.js +7 -0
- package/src/doc/components/Example.js +153 -0
- package/src/doc/components/Examples.js +183 -0
- package/src/doc/components/Home.js +106 -0
- package/src/doc/components/TrackerExample.js +38 -0
- package/src/doc/examples/assets/tralis-live-map/index.js +11 -0
- package/src/doc/examples/assets/tralis-live-map/s1kreis.svg +105 -0
- package/src/doc/examples/assets/tralis-live-map/s20kreis.svg +101 -0
- package/src/doc/examples/assets/tralis-live-map/s2kreis.svg +95 -0
- package/src/doc/examples/assets/tralis-live-map/s3kreis.svg +95 -0
- package/src/doc/examples/assets/tralis-live-map/s4kreis.svg +95 -0
- package/src/doc/examples/assets/tralis-live-map/s6kreis.svg +95 -0
- package/src/doc/examples/assets/tralis-live-map/s7kreis.svg +95 -0
- package/src/doc/examples/assets/tralis-live-map/s8kreis.svg +93 -0
- package/src/doc/examples/assets/tralis-live-map/unknown.svg +107 -0
- package/src/doc/examples/mb-copyright.html +26 -0
- package/src/doc/examples/mb-copyright.js +37 -0
- package/src/doc/examples/mb-tracker.html +1 -0
- package/src/doc/examples/mb-tracker.js +39 -0
- package/src/doc/examples/mb-tracker.md +1 -0
- package/src/doc/examples/mb-tralis.html +1 -0
- package/src/doc/examples/mb-tralis.js +34 -0
- package/src/doc/examples/ol-copyright.html +26 -0
- package/src/doc/examples/ol-copyright.js +43 -0
- package/src/doc/examples/ol-mapbox-layer.html +1 -0
- package/src/doc/examples/ol-mapbox-layer.js +28 -0
- package/src/doc/examples/ol-mapbox-layer.md +0 -0
- package/src/doc/examples/ol-mapbox-style-layer.html +12 -0
- package/src/doc/examples/ol-mapbox-style-layer.js +44 -0
- package/src/doc/examples/ol-query.html +32 -0
- package/src/doc/examples/ol-query.js +83 -0
- package/src/doc/examples/ol-routing.html +26 -0
- package/src/doc/examples/ol-routing.js +59 -0
- package/src/doc/examples/ol-routing.md +1 -0
- package/src/doc/examples/ol-stop-finder.html +15 -0
- package/src/doc/examples/ol-stop-finder.js +31 -0
- package/src/doc/examples/ol-stop-finder.md +1 -0
- package/src/doc/examples/ol-tracker.html +1 -0
- package/src/doc/examples/ol-tracker.js +44 -0
- package/src/doc/examples/ol-tracker.md +1 -0
- package/src/doc/examples/ol-tralis.html +5 -0
- package/src/doc/examples/ol-tralis.js +57 -0
- package/src/doc/examples/tralis-live-map.html +1 -0
- package/src/doc/examples/tralis-live-map.js +51 -0
- package/src/doc/examples/tralis-live-map.md +3 -0
- package/src/doc/examples.js +107 -0
- package/src/doc/img/examples/live_tracker_mb.jpg +0 -0
- package/src/doc/img/examples/live_tracker_munich.jpg +0 -0
- package/src/doc/img/examples/live_tracker_ol.jpg +0 -0
- package/src/doc/img/examples/mapbox.jpg +0 -0
- package/src/doc/img/examples/mapbox_style.jpg +0 -0
- package/src/doc/img/examples/ol-copyright.png +0 -0
- package/src/doc/img/examples/query_objects.jpg +0 -0
- package/src/doc/img/examples/routing.jpg +0 -0
- package/src/doc/img/examples/simple_map.jpg +0 -0
- package/src/doc/img/examples/stops.jpg +0 -0
- package/src/doc/img/favico.ico +0 -0
- package/src/doc/index.js +21 -0
- package/src/iife.js +7 -0
- package/src/index.js +10 -0
- package/{mapbox → src/mapbox}/controls/CopyrightControl.js +0 -0
- package/src/mapbox/controls/index.js +2 -0
- package/src/mapbox/index.js +4 -0
- package/{mapbox → src/mapbox}/layers/Layer.js +0 -0
- package/{mapbox → src/mapbox}/layers/Layer.test.js +0 -0
- package/{mapbox → src/mapbox}/layers/TralisLayer.js +0 -0
- package/{mapbox → src/mapbox}/layers/TralisLayer.test.js +0 -0
- package/src/mapbox/layers/index.js +2 -0
- package/{mapbox → src/mapbox}/utils.js +0 -0
- package/src/ol/README.md +0 -0
- package/{ol → src/ol}/controls/CopyrightControl.js +0 -0
- package/{ol → src/ol}/controls/CopyrightControl.test.js +0 -0
- package/{ol → src/ol}/controls/RoutingControl.js +0 -0
- package/{ol → src/ol}/controls/RoutingControl.test.js +0 -0
- package/{ol → src/ol}/controls/StopFinderControl.js +0 -0
- package/{ol → src/ol}/controls/StopFinderControl.test.js +0 -0
- package/src/ol/controls/index.js +3 -0
- package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen10.json +0 -0
- package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen100.json +0 -0
- package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen30.json +0 -0
- package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen5.json +0 -0
- package/{ol → src/ol}/controls/snapshots/RoutingControlRouteOSM.json +0 -0
- package/{ol → src/ol}/controls/snapshots/RoutingControlStation1.json +0 -0
- package/{ol → src/ol}/controls/snapshots/RoutingControlStation2.json +0 -0
- package/src/ol/index.js +5 -0
- package/{ol → src/ol}/layers/Layer.js +0 -0
- package/{ol → src/ol}/layers/Layer.test.js +0 -0
- package/{ol → src/ol}/layers/MapboxLayer.js +0 -0
- package/{ol → src/ol}/layers/MapboxLayer.test.js +0 -0
- package/{ol → src/ol}/layers/MapboxStyleLayer.js +0 -0
- package/{ol → src/ol}/layers/MapboxStyleLayer.test.js +0 -0
- package/{ol → src/ol}/layers/MaplibreLayer.js +0 -0
- package/{ol → src/ol}/layers/RoutingLayer.js +0 -0
- package/{ol → src/ol}/layers/RoutingLayer.test.js +0 -0
- package/{ol → src/ol}/layers/TralisLayer.js +0 -0
- package/{ol → src/ol}/layers/TralisLayer.test.js +0 -0
- package/{ol → src/ol}/layers/VectorLayer.js +0 -0
- package/{ol → src/ol}/layers/VectorLayer.test.js +0 -0
- package/{ol → src/ol}/layers/WMSLayer.js +0 -0
- package/{ol → src/ol}/layers/WMSLayer.test.js +0 -0
- package/src/ol/layers/index.js +8 -0
- package/{ol → src/ol}/styles/fullTrajectoryDelayStyle.js +0 -0
- package/{ol → src/ol}/styles/fullTrajectoryStyle.js +0 -0
- package/{ol → src/ol}/styles/index.js +0 -0
- package/src/setupTests.js +15 -0
- package/webpack.config.js +6 -0
- package/index.js +0 -2
- package/index.js.map +0 -1
- package/mapbox/index.js +0 -3
- package/module.js +0 -23
- package/ol/index.js +0 -13
|
@@ -0,0 +1,694 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-syntax */
|
|
2
|
+
/* eslint-disable no-underscore-dangle */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { taffy } from 'taffydb';
|
|
5
|
+
import docss from './index.json';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Load the config into a in memory db.
|
|
9
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Plugin.js#L33
|
|
10
|
+
*/
|
|
11
|
+
export const _data = taffy(docss);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Index used for the search.
|
|
15
|
+
*/
|
|
16
|
+
let searchIndex;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* find doc objects that is ordered.
|
|
20
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L117
|
|
21
|
+
* @param {string} order - doc objects order(``column asec`` or ``column desc``).
|
|
22
|
+
* @param {...Object} cond - condition objects
|
|
23
|
+
* @returns {DocObject[]} found doc objects.
|
|
24
|
+
* @private
|
|
25
|
+
*/
|
|
26
|
+
export const _orderedFind = (order, ...cond) => {
|
|
27
|
+
const data = _data(...cond);
|
|
28
|
+
|
|
29
|
+
if (order) {
|
|
30
|
+
return data.order(`${order}, name asec`).map((v) => v);
|
|
31
|
+
}
|
|
32
|
+
return data.order('name asec').map((v) => v);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* find doc object.
|
|
37
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L36
|
|
38
|
+
* @param {...Object} cond - find condition.
|
|
39
|
+
* @returns {DocObject[]} found doc objects.
|
|
40
|
+
* @private
|
|
41
|
+
*/
|
|
42
|
+
export const _find = (...cond) => {
|
|
43
|
+
return _orderedFind(null, ...cond);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* find all identifiers with kind grouping.
|
|
48
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L46
|
|
49
|
+
* @returns {{class: DocObject[], interface: DocObject[], function: DocObject[], variable: DocObject[], typedef: DocObject[], external: DocObject[]}} found doc objects.
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
export const _findAllIdentifiersKindGrouping = () => {
|
|
53
|
+
const result = {
|
|
54
|
+
class: _find([{ kind: 'class', interface: false }]),
|
|
55
|
+
interface: _find([{ kind: 'class', interface: true }]),
|
|
56
|
+
function: _find([{ kind: 'function' }]),
|
|
57
|
+
variable: _find([{ kind: 'variable' }]),
|
|
58
|
+
typedef: _find([{ kind: 'typedef' }]),
|
|
59
|
+
external: _find([{ kind: 'external' }]).filter((v) => !v.builtinExternal),
|
|
60
|
+
};
|
|
61
|
+
return result;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* fuzzy find doc object by name.
|
|
66
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L63
|
|
67
|
+
* - equal with longname
|
|
68
|
+
* - equal with name
|
|
69
|
+
* - include in longname
|
|
70
|
+
* - include in ancestor
|
|
71
|
+
*
|
|
72
|
+
* @param {string} name - target identifier name.
|
|
73
|
+
* @param {string} [kind] - target kind.
|
|
74
|
+
* @returns {DocObject[]} found doc objects.
|
|
75
|
+
* @private
|
|
76
|
+
*/
|
|
77
|
+
export const _findByName = (name, kind = null) => {
|
|
78
|
+
let docs;
|
|
79
|
+
|
|
80
|
+
if (kind) {
|
|
81
|
+
docs = _orderedFind(null, { longname: name, kind });
|
|
82
|
+
} else {
|
|
83
|
+
docs = _orderedFind(null, { longname: name });
|
|
84
|
+
}
|
|
85
|
+
if (docs.length) return docs;
|
|
86
|
+
|
|
87
|
+
if (kind) {
|
|
88
|
+
docs = _orderedFind(null, { name, kind });
|
|
89
|
+
} else {
|
|
90
|
+
docs = _orderedFind(null, { name });
|
|
91
|
+
}
|
|
92
|
+
if (docs.length) return docs;
|
|
93
|
+
|
|
94
|
+
const regexp = new RegExp(`[~]${name.replace('*', '\\*')}$`); // if name is `*`, need to escape.
|
|
95
|
+
if (kind) {
|
|
96
|
+
docs = _orderedFind(null, { longname: { regex: regexp }, kind });
|
|
97
|
+
} else {
|
|
98
|
+
docs = _orderedFind(null, { longname: { regex: regexp } });
|
|
99
|
+
}
|
|
100
|
+
if (docs.length) return docs;
|
|
101
|
+
|
|
102
|
+
// inherited method?
|
|
103
|
+
const matched = name.match(/(.*)[.#](.*)$/); // instance method(Foo#bar) or static method(Foo.baz)
|
|
104
|
+
if (matched) {
|
|
105
|
+
const parent = matched[1];
|
|
106
|
+
const childName = matched[2];
|
|
107
|
+
const parentDoc = _findByName(parent, 'class')[0];
|
|
108
|
+
if (parentDoc && parentDoc._custom_extends_chains) {
|
|
109
|
+
for (const superLongname of parentDoc._custom_extends_chains) {
|
|
110
|
+
docs = _find({ memberof: superLongname, name: childName });
|
|
111
|
+
if (docs.length) return docs;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return [];
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* get file name of output html page.
|
|
121
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L555
|
|
122
|
+
* @param {DocObject} doc - target doc object.
|
|
123
|
+
* @returns {string} file name.
|
|
124
|
+
* @private
|
|
125
|
+
*/
|
|
126
|
+
const _getOutputFileName = (doc) => {
|
|
127
|
+
switch (doc.kind) {
|
|
128
|
+
case 'variable':
|
|
129
|
+
return 'variable/index.html';
|
|
130
|
+
case 'function':
|
|
131
|
+
return 'function/index.html';
|
|
132
|
+
case 'member': // fall
|
|
133
|
+
case 'method': // fall
|
|
134
|
+
case 'constructor': // fall
|
|
135
|
+
case 'set': // fall
|
|
136
|
+
case 'get': {
|
|
137
|
+
// fal
|
|
138
|
+
const parentDoc = _find({ longname: doc.memberof })[0];
|
|
139
|
+
return _getOutputFileName(parentDoc);
|
|
140
|
+
}
|
|
141
|
+
case 'external':
|
|
142
|
+
return 'external/index.html';
|
|
143
|
+
case 'typedef':
|
|
144
|
+
return 'typedef/index.html';
|
|
145
|
+
case 'class':
|
|
146
|
+
return `class/${doc.longname}.html`;
|
|
147
|
+
case 'file':
|
|
148
|
+
return `file/${doc.name}.html`;
|
|
149
|
+
case 'testFile':
|
|
150
|
+
return `test-file/${doc.name}.html`;
|
|
151
|
+
case 'test':
|
|
152
|
+
return 'test.html';
|
|
153
|
+
default:
|
|
154
|
+
throw new Error('DocBuilder: can not resolve file name.');
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* gat url of output html page.
|
|
160
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L533
|
|
161
|
+
* @param {DocObject} doc - target doc object.
|
|
162
|
+
* @returns {string} url of output html. it is relative path from output root dir.
|
|
163
|
+
* @private
|
|
164
|
+
*/
|
|
165
|
+
export const _getURL = (doc) => {
|
|
166
|
+
let inner = false;
|
|
167
|
+
if (
|
|
168
|
+
[
|
|
169
|
+
'variable',
|
|
170
|
+
'function',
|
|
171
|
+
'member',
|
|
172
|
+
'typedef',
|
|
173
|
+
'method',
|
|
174
|
+
'constructor',
|
|
175
|
+
'get',
|
|
176
|
+
'set',
|
|
177
|
+
].includes(doc.kind)
|
|
178
|
+
) {
|
|
179
|
+
inner = true;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (inner) {
|
|
183
|
+
const scope = doc.static ? 'static' : 'instance';
|
|
184
|
+
const fileName = _getOutputFileName(doc);
|
|
185
|
+
return `${fileName}#${scope}-${doc.kind}-${doc.name}`;
|
|
186
|
+
}
|
|
187
|
+
const fileName = _getOutputFileName(doc);
|
|
188
|
+
return fileName;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* resolve class extends chain.
|
|
193
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocResolver.js#L146
|
|
194
|
+
* add following special property.
|
|
195
|
+
* - ``_custom_extends_chain``: ancestor class chain.
|
|
196
|
+
* - ``_custom_direct_subclasses``: class list that direct extends target doc.
|
|
197
|
+
* - ``_custom_indirect_subclasses``: class list that indirect extends target doc.
|
|
198
|
+
* - ``_custom_indirect_implements``: class list that target doc indirect implements.
|
|
199
|
+
* - ``_custom_direct_implemented``: class list that direct implements target doc.
|
|
200
|
+
* - ``_custom_indirect_implemented``: class list that indirect implements target doc.
|
|
201
|
+
*
|
|
202
|
+
* @private
|
|
203
|
+
*/
|
|
204
|
+
export const _resolveExtendsChain = (docs) => {
|
|
205
|
+
if (_data.__RESOLVED_EXTENDS_CHAIN__) return;
|
|
206
|
+
|
|
207
|
+
const extendsChain = (doc) => {
|
|
208
|
+
if (!doc.extends) return;
|
|
209
|
+
|
|
210
|
+
const selfDoc = doc;
|
|
211
|
+
|
|
212
|
+
// traverse super class.
|
|
213
|
+
const chains = [];
|
|
214
|
+
|
|
215
|
+
/* eslint-disable */
|
|
216
|
+
while (1) {
|
|
217
|
+
if (!doc.extends) break;
|
|
218
|
+
|
|
219
|
+
let superClassDoc = _findByName(doc.extends[0])[0];
|
|
220
|
+
|
|
221
|
+
if (superClassDoc) {
|
|
222
|
+
// this is circular extends
|
|
223
|
+
if (superClassDoc.longname === selfDoc.longname) {
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
chains.push(superClassDoc.longname);
|
|
228
|
+
doc = superClassDoc;
|
|
229
|
+
} else {
|
|
230
|
+
chains.push(doc.extends[0]);
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (chains.length) {
|
|
236
|
+
// direct subclass
|
|
237
|
+
let superClassDoc = _findByName(chains[0])[0];
|
|
238
|
+
if (superClassDoc) {
|
|
239
|
+
if (!superClassDoc._custom_direct_subclasses)
|
|
240
|
+
superClassDoc._custom_direct_subclasses = [];
|
|
241
|
+
superClassDoc._custom_direct_subclasses.push(selfDoc.longname);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// indirect subclass
|
|
245
|
+
for (let superClassLongname of chains.slice(1)) {
|
|
246
|
+
superClassDoc = _findByName(superClassLongname)[0];
|
|
247
|
+
if (superClassDoc) {
|
|
248
|
+
if (!superClassDoc._custom_indirect_subclasses)
|
|
249
|
+
superClassDoc._custom_indirect_subclasses = [];
|
|
250
|
+
superClassDoc._custom_indirect_subclasses.push(selfDoc.longname);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// indirect implements and mixes
|
|
255
|
+
for (let superClassLongname of chains) {
|
|
256
|
+
superClassDoc = _findByName(superClassLongname)[0];
|
|
257
|
+
if (!superClassDoc) continue;
|
|
258
|
+
|
|
259
|
+
// indirect implements
|
|
260
|
+
if (superClassDoc.implements) {
|
|
261
|
+
if (!selfDoc._custom_indirect_implements)
|
|
262
|
+
selfDoc._custom_indirect_implements = [];
|
|
263
|
+
selfDoc._custom_indirect_implements.push(...superClassDoc.implements);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// indirect mixes
|
|
267
|
+
//if (superClassDoc.mixes) {
|
|
268
|
+
// if (!selfDoc._custom_indirect_mixes) selfDoc._custom_indirect_mixes = [];
|
|
269
|
+
// selfDoc._custom_indirect_mixes.push(...superClassDoc.mixes);
|
|
270
|
+
//}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// extends chains
|
|
274
|
+
selfDoc._custom_extends_chains = chains.reverse();
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
let implemented = (doc) => {
|
|
279
|
+
let selfDoc = doc;
|
|
280
|
+
|
|
281
|
+
// direct implemented (like direct subclass)
|
|
282
|
+
for (let superClassLongname of selfDoc.implements || []) {
|
|
283
|
+
let superClassDoc = _findByName(superClassLongname)[0];
|
|
284
|
+
if (!superClassDoc) continue;
|
|
285
|
+
if (!superClassDoc._custom_direct_implemented)
|
|
286
|
+
superClassDoc._custom_direct_implemented = [];
|
|
287
|
+
superClassDoc._custom_direct_implemented.push(selfDoc.longname);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// indirect implemented (like indirect subclass)
|
|
291
|
+
for (let superClassLongname of selfDoc._custom_indirect_implements || []) {
|
|
292
|
+
let superClassDoc = _findByName(superClassLongname)[0];
|
|
293
|
+
if (!superClassDoc) continue;
|
|
294
|
+
if (!superClassDoc._custom_indirect_implemented)
|
|
295
|
+
superClassDoc._custom_indirect_implemented = [];
|
|
296
|
+
superClassDoc._custom_indirect_implemented.push(selfDoc.longname);
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
//var mixed = (doc) =>{
|
|
301
|
+
// var selfDoc = doc;
|
|
302
|
+
//
|
|
303
|
+
// // direct mixed (like direct subclass)
|
|
304
|
+
// for (var superClassLongname of selfDoc.mixes || []) {
|
|
305
|
+
// var superClassDoc = _find({longname: superClassLongname})[0];
|
|
306
|
+
// if (!superClassDoc) continue;
|
|
307
|
+
// if(!superClassDoc._custom_direct_mixed) superClassDoc._custom_direct_mixed = [];
|
|
308
|
+
// superClassDoc._custom_direct_mixed.push(selfDoc.longname);
|
|
309
|
+
// }
|
|
310
|
+
//
|
|
311
|
+
// // indirect mixed (like indirect subclass)
|
|
312
|
+
// for (var superClassLongname of selfDoc._custom_indirect_mixes || []) {
|
|
313
|
+
// var superClassDoc = _find({longname: superClassLongname})[0];
|
|
314
|
+
// if (!superClassDoc) continue;
|
|
315
|
+
// if(!superClassDoc._custom_indirect_mixed) superClassDoc._custom_indirect_mixed = [];
|
|
316
|
+
// superClassDoc._custom_indirect_mixed.push(selfDoc.longname);
|
|
317
|
+
// }
|
|
318
|
+
//};
|
|
319
|
+
|
|
320
|
+
let classDocs = _find({ kind: 'class' });
|
|
321
|
+
for (let doc of classDocs) {
|
|
322
|
+
extendsChain(doc);
|
|
323
|
+
implemented(doc);
|
|
324
|
+
//mixed(doc);
|
|
325
|
+
}
|
|
326
|
+
return docs;
|
|
327
|
+
|
|
328
|
+
_data.__RESOLVED_EXTENDS_CHAIN__ = true;
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* resolve ignore property.
|
|
333
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocResolver.js#L43
|
|
334
|
+
* remove docs that has ignore property.
|
|
335
|
+
* @private
|
|
336
|
+
*/
|
|
337
|
+
export const _resolveIgnore = (docs) => {
|
|
338
|
+
if (_data.__RESOLVED_IGNORE__) return;
|
|
339
|
+
|
|
340
|
+
const ignoreDocs = _find({ ignore: true });
|
|
341
|
+
for (const doc of ignoreDocs) {
|
|
342
|
+
const longname = doc.longname.replace(/[$]/g, '\\$');
|
|
343
|
+
const regex = new RegExp(`^${longname}[.~#]`);
|
|
344
|
+
_data({ longname: { regex: regex } }).remove();
|
|
345
|
+
}
|
|
346
|
+
_data({ ignore: true }).remove();
|
|
347
|
+
|
|
348
|
+
_data.__RESOLVED_IGNORE__ = true;
|
|
349
|
+
return docs;
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* resolve @link as html link.
|
|
354
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocResolver.js#L89
|
|
355
|
+
* @private
|
|
356
|
+
* @todo resolve all ``description`` property.
|
|
357
|
+
*/
|
|
358
|
+
export const _resolveLink = (docs) => {
|
|
359
|
+
if (_data.__RESOLVED_LINK__) return;
|
|
360
|
+
|
|
361
|
+
const link = (str) => {
|
|
362
|
+
if (!str) return str;
|
|
363
|
+
return str.replace(/\{@link ([\w#_\-.:~\/$]+)}/g, (str, longname) => {
|
|
364
|
+
// Code from DocLinkHTML.js
|
|
365
|
+
// transform {@link } in markdown.
|
|
366
|
+
const doc = _findByName(longname)[0];
|
|
367
|
+
if (!doc) {
|
|
368
|
+
return str;
|
|
369
|
+
}
|
|
370
|
+
const url = _getURL(doc, false);
|
|
371
|
+
if (url) {
|
|
372
|
+
return `[${longname}](/api/${url.replace(/\./g, '%20')})`;
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
_data().each((v) => {
|
|
378
|
+
v.description = link(v.description);
|
|
379
|
+
|
|
380
|
+
if (v.params) {
|
|
381
|
+
for (const param of v.params) {
|
|
382
|
+
param.description = link(param.description);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
if (v.properties) {
|
|
387
|
+
for (const property of v.properties) {
|
|
388
|
+
property.description = link(property.description);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (v.return) {
|
|
393
|
+
v.return.description = link(v.return.description);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
if (v.throws) {
|
|
397
|
+
for (const _throw of v.throws) {
|
|
398
|
+
_throw.description = link(_throw.description);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if (v.listens) {
|
|
403
|
+
for (const _listen of v.listens) {
|
|
404
|
+
_listen.description = link(_listen.description);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
if (v.emits) {
|
|
409
|
+
for (const _emit of v.emits) {
|
|
410
|
+
_emit.description = link(_emit.description);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
if (v.see) {
|
|
415
|
+
for (let i = 0; i < v.see.length; i++) {
|
|
416
|
+
if (v.see[i].indexOf('{@link') === 0) {
|
|
417
|
+
v.see[i] = link(v.see[i]);
|
|
418
|
+
} else if (v.see[i].indexOf('<a href') === 0) {
|
|
419
|
+
// ignore
|
|
420
|
+
} else {
|
|
421
|
+
v.see[i] = `<a href="${v.see[i]}">${v.see[i]}</a>`;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
_data.__RESOLVED_LINK__ = true;
|
|
428
|
+
return docs;
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* resolve necessary identifier.
|
|
433
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocResolver.js#L277
|
|
434
|
+
*
|
|
435
|
+
* ```javascript
|
|
436
|
+
* class Foo {}
|
|
437
|
+
*
|
|
438
|
+
* export default Bar extends Foo {}
|
|
439
|
+
* ```
|
|
440
|
+
*
|
|
441
|
+
* ``Foo`` is not exported, but ``Bar`` extends ``Foo``.
|
|
442
|
+
* ``Foo`` is necessary.
|
|
443
|
+
* So, ``Foo`` must be exported by force.
|
|
444
|
+
*
|
|
445
|
+
* @private
|
|
446
|
+
*/
|
|
447
|
+
export const _resolveNecessary = (docs) => {
|
|
448
|
+
_data({ export: false }).update(function () {
|
|
449
|
+
let doc = this;
|
|
450
|
+
let childNames = [];
|
|
451
|
+
if (doc._custom_direct_subclasses)
|
|
452
|
+
childNames.push(...doc._custom_direct_subclasses);
|
|
453
|
+
if (doc._custom_indirect_subclasses)
|
|
454
|
+
childNames.push(...doc._custom_indirect_subclasses);
|
|
455
|
+
if (doc._custom_direct_implemented)
|
|
456
|
+
childNames.push(...doc._custom_direct_implemented);
|
|
457
|
+
if (doc._custom_indirect_implemented)
|
|
458
|
+
childNames.push(...doc._custom_indirect_implemented);
|
|
459
|
+
|
|
460
|
+
for (let childName of childNames) {
|
|
461
|
+
let childDoc = _find({ longname: childName })[0];
|
|
462
|
+
if (!childDoc) continue;
|
|
463
|
+
if (!childDoc.ignore && childDoc.export) {
|
|
464
|
+
doc.ignore = false;
|
|
465
|
+
return doc;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
return docs;
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* find doc object for each access.
|
|
474
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L226
|
|
475
|
+
* @param {DocObject} doc - parent doc object.
|
|
476
|
+
* @param {string} kind - kind property condition.
|
|
477
|
+
* @param {boolean} isStatic - static property condition
|
|
478
|
+
* @returns {Array[]} found doc objects.
|
|
479
|
+
* @property {Array[]} 0 - ['Public', DocObject[]]
|
|
480
|
+
* @property {Array[]} 1 - ['Protected', DocObject[]]
|
|
481
|
+
* @property {Array[]} 2 - ['Private', DocObject[]]
|
|
482
|
+
* @private
|
|
483
|
+
*/
|
|
484
|
+
export const _findAccessDocs = (doc, kind, isStatic = true) => {
|
|
485
|
+
const cond = { kind: kind, static: isStatic };
|
|
486
|
+
|
|
487
|
+
if (doc) cond.memberof = doc.longname;
|
|
488
|
+
|
|
489
|
+
/* eslint-disable default-case */
|
|
490
|
+
switch (kind) {
|
|
491
|
+
case 'class':
|
|
492
|
+
cond.interface = false;
|
|
493
|
+
break;
|
|
494
|
+
case 'interface':
|
|
495
|
+
cond.kind = 'class';
|
|
496
|
+
cond.interface = true;
|
|
497
|
+
break;
|
|
498
|
+
case 'member':
|
|
499
|
+
cond.kind = ['member', 'get', 'set'];
|
|
500
|
+
break;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
const publicDocs = _find(cond, { access: 'public' }).filter(
|
|
504
|
+
(v) => !v.builtinExternal,
|
|
505
|
+
);
|
|
506
|
+
const protectedDocs = _find(cond, { access: 'protected' }).filter(
|
|
507
|
+
(v) => !v.builtinExternal,
|
|
508
|
+
);
|
|
509
|
+
const privateDocs = _find(cond, { access: 'private' }).filter(
|
|
510
|
+
(v) => !v.builtinExternal,
|
|
511
|
+
);
|
|
512
|
+
const accessDocs = [
|
|
513
|
+
['Public', publicDocs],
|
|
514
|
+
// We don't want to display private and protected functions
|
|
515
|
+
// to keep the doc simple as possible. Feel free to uncomment
|
|
516
|
+
// the following line if you want them.
|
|
517
|
+
// ['Protected', protectedDocs],
|
|
518
|
+
// ['Private', privateDocs],
|
|
519
|
+
];
|
|
520
|
+
|
|
521
|
+
return accessDocs;
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* shorten description.
|
|
526
|
+
* e.g. ``this is JavaScript. this is Java.`` => ``this is JavaScript.``.
|
|
527
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/util.js#L4
|
|
528
|
+
*
|
|
529
|
+
* @param {DocObject} doc - target doc object.
|
|
530
|
+
* @param {boolean} [asMarkdown=false] - is true, test as markdown and convert to html.
|
|
531
|
+
* @returns {string} shorten description.
|
|
532
|
+
* @todo shorten before process markdown.
|
|
533
|
+
*/
|
|
534
|
+
export function shorten(doc, asMarkdown = false) {
|
|
535
|
+
if (!doc) return '';
|
|
536
|
+
|
|
537
|
+
if (doc.summary) return doc.summary;
|
|
538
|
+
|
|
539
|
+
const desc = doc.descriptionRaw;
|
|
540
|
+
if (!desc) return '';
|
|
541
|
+
|
|
542
|
+
let len = desc.length;
|
|
543
|
+
let inSQuote = false;
|
|
544
|
+
let inWQuote = false;
|
|
545
|
+
let inCode = false;
|
|
546
|
+
for (let i = 0; i < desc.length; i++) {
|
|
547
|
+
const char1 = desc.charAt(i);
|
|
548
|
+
const char2 = desc.charAt(i + 1);
|
|
549
|
+
const char4 = desc.substr(i, 6);
|
|
550
|
+
const char5 = desc.substr(i, 7);
|
|
551
|
+
if (char1 === "'") inSQuote = !inSQuote;
|
|
552
|
+
else if (char1 === '"') inWQuote = !inWQuote;
|
|
553
|
+
else if (char4 === '<code>') inCode = true;
|
|
554
|
+
else if (char5 === '</code>') inCode = false;
|
|
555
|
+
|
|
556
|
+
if (inSQuote || inCode || inWQuote) continue;
|
|
557
|
+
|
|
558
|
+
if (char1 === '.') {
|
|
559
|
+
if (char2 === ' ' || char2 === '\n' || char2 === '<') {
|
|
560
|
+
len = i + 1;
|
|
561
|
+
break;
|
|
562
|
+
}
|
|
563
|
+
} else if (char1 === '\n' && char2 === '\n') {
|
|
564
|
+
len = i + 1;
|
|
565
|
+
break;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
let result = desc.substr(0, len);
|
|
570
|
+
// Use Markdown component instead
|
|
571
|
+
// if (asMarkdown) {
|
|
572
|
+
// result = markdown(result);
|
|
573
|
+
// }
|
|
574
|
+
|
|
575
|
+
return result;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* parse ``@example`` value.
|
|
580
|
+
* ``@example`` value can have ``<caption>`` tag.
|
|
581
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/util.js#L127
|
|
582
|
+
*
|
|
583
|
+
* @param {string} example - target example value.
|
|
584
|
+
* @returns {{body: string, caption: string}} parsed example value.
|
|
585
|
+
*/
|
|
586
|
+
export function parseExample(example) {
|
|
587
|
+
let body = example;
|
|
588
|
+
let caption = '';
|
|
589
|
+
|
|
590
|
+
/* eslint-disable no-control-regex */
|
|
591
|
+
const regexp = new RegExp('^<caption>(.*?)</caption>\n');
|
|
592
|
+
const matched = example.match(regexp);
|
|
593
|
+
if (matched) {
|
|
594
|
+
body = example.replace(regexp, '');
|
|
595
|
+
caption = matched[1].trim();
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
return { body, caption };
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* escape URL hash.
|
|
603
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/util.js#L149
|
|
604
|
+
* @param {string} hash - URL hash for HTML a tag and id tag
|
|
605
|
+
* @returns {string} escaped URL hash
|
|
606
|
+
*/
|
|
607
|
+
export const escapeURLHash = (hash) => {
|
|
608
|
+
return hash
|
|
609
|
+
.toLowerCase()
|
|
610
|
+
.replace(/[~!@#$%^&*()_+=\[\]\\{}|;':"<>?,.\/ ]/g, '-');
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Create search index of identifier builder class.
|
|
615
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/SearchIndexBuilder.js#L7
|
|
616
|
+
*/
|
|
617
|
+
export const _getSearchIndex = () => {
|
|
618
|
+
if (searchIndex) {
|
|
619
|
+
return searchIndex;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
searchIndex = [];
|
|
623
|
+
const docs = _find({});
|
|
624
|
+
|
|
625
|
+
for (const doc of docs) {
|
|
626
|
+
if (doc.kind === 'index') continue;
|
|
627
|
+
if (doc.kind.indexOf('manual') === 0) continue;
|
|
628
|
+
|
|
629
|
+
let indexText;
|
|
630
|
+
let url;
|
|
631
|
+
let displayText;
|
|
632
|
+
|
|
633
|
+
if (doc.importPath) {
|
|
634
|
+
displayText = (
|
|
635
|
+
<>
|
|
636
|
+
<span>{doc.name}</span>{' '}
|
|
637
|
+
<span class="search-result-import-path">{doc.importPath}</span>
|
|
638
|
+
</>
|
|
639
|
+
);
|
|
640
|
+
indexText = `${doc.importPath}~${doc.name}`.toLowerCase();
|
|
641
|
+
url = _getURL(doc);
|
|
642
|
+
} else if (doc.kind === 'test') {
|
|
643
|
+
displayText = doc.testFullDescription;
|
|
644
|
+
indexText = [
|
|
645
|
+
...(doc.testTargets || []),
|
|
646
|
+
...(doc._custom_test_targets || []),
|
|
647
|
+
]
|
|
648
|
+
.join(' ')
|
|
649
|
+
.toLowerCase();
|
|
650
|
+
const filePath = doc.longname.split('~')[0];
|
|
651
|
+
const fileDoc = _find({ kind: 'testFile', name: filePath })[0];
|
|
652
|
+
url = `${_getURL(fileDoc)}#lineNumber${doc.lineNumber}`;
|
|
653
|
+
} else if (doc.kind === 'external') {
|
|
654
|
+
displayText = doc.longname;
|
|
655
|
+
indexText = displayText.toLowerCase();
|
|
656
|
+
url = doc.externalLink;
|
|
657
|
+
} else if (doc.kind === 'file' || doc.kind === 'testFile') {
|
|
658
|
+
displayText = doc.name;
|
|
659
|
+
indexText = displayText.toLowerCase();
|
|
660
|
+
url = _getURL(doc);
|
|
661
|
+
} else if (doc.kind === 'packageJSON') {
|
|
662
|
+
continue;
|
|
663
|
+
} else {
|
|
664
|
+
displayText = doc.longname;
|
|
665
|
+
indexText = displayText.toLowerCase();
|
|
666
|
+
url = _getURL(doc);
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
let kind = doc.kind;
|
|
670
|
+
/* eslint-disable default-case */
|
|
671
|
+
switch (kind) {
|
|
672
|
+
case 'constructor':
|
|
673
|
+
kind = 'method';
|
|
674
|
+
break;
|
|
675
|
+
case 'get':
|
|
676
|
+
case 'set':
|
|
677
|
+
kind = 'member';
|
|
678
|
+
break;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
searchIndex.push([indexText, url, displayText, kind]);
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
searchIndex.sort((a, b) => {
|
|
685
|
+
if (a[2] === b[2]) {
|
|
686
|
+
return 0;
|
|
687
|
+
} else if (a[2] < b[2]) {
|
|
688
|
+
return -1;
|
|
689
|
+
} else {
|
|
690
|
+
return 1;
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
return searchIndex;
|
|
694
|
+
};
|