mobility-toolbox-js 2.0.0-beta.3 → 2.0.0-beta.6
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/Layer.js +2 -0
- package/Layer.js.map +7 -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/{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 +0 -0
- 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 -0
- 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/components/esm.min.js +2 -0
- package/src/doc/components/examples/assets/tralis-live-map/index.js +11 -0
- package/src/doc/components/examples/assets/tralis-live-map/s1kreis.svg +105 -0
- package/src/doc/components/examples/assets/tralis-live-map/s20kreis.svg +101 -0
- package/src/doc/components/examples/assets/tralis-live-map/s2kreis.svg +95 -0
- package/src/doc/components/examples/assets/tralis-live-map/s3kreis.svg +95 -0
- package/src/doc/components/examples/assets/tralis-live-map/s4kreis.svg +95 -0
- package/src/doc/components/examples/assets/tralis-live-map/s6kreis.svg +95 -0
- package/src/doc/components/examples/assets/tralis-live-map/s7kreis.svg +95 -0
- package/src/doc/components/examples/assets/tralis-live-map/s8kreis.svg +93 -0
- package/src/doc/components/examples/assets/tralis-live-map/unknown.svg +107 -0
- package/src/doc/components/examples/mb-copyright.html +26 -0
- package/src/doc/components/examples/mb-copyright.js +37 -0
- package/src/doc/components/examples/mb-tracker.html +1 -0
- package/src/doc/components/examples/mb-tracker.js +39 -0
- package/src/doc/components/examples/mb-tracker.md +1 -0
- package/src/doc/components/examples/mb-tralis.html +1 -0
- package/src/doc/components/examples/mb-tralis.js +34 -0
- package/src/doc/components/examples/ol-copyright.html +26 -0
- package/src/doc/components/examples/ol-copyright.js +43 -0
- package/src/doc/components/examples/ol-mapbox-layer.html +1 -0
- package/src/doc/components/examples/ol-mapbox-layer.js +28 -0
- package/src/doc/components/examples/ol-mapbox-layer.md +0 -0
- package/src/doc/components/examples/ol-mapbox-style-layer.html +12 -0
- package/src/doc/components/examples/ol-mapbox-style-layer.js +44 -0
- package/src/doc/components/examples/ol-query.html +32 -0
- package/src/doc/components/examples/ol-query.js +83 -0
- package/src/doc/components/examples/ol-routing.html +26 -0
- package/src/doc/components/examples/ol-routing.js +59 -0
- package/src/doc/components/examples/ol-routing.md +1 -0
- package/src/doc/components/examples/ol-stop-finder.html +15 -0
- package/src/doc/components/examples/ol-stop-finder.js +31 -0
- package/src/doc/components/examples/ol-stop-finder.md +1 -0
- package/src/doc/components/examples/ol-tracker.html +1 -0
- package/src/doc/components/examples/ol-tracker.js +44 -0
- package/src/doc/components/examples/ol-tracker.md +1 -0
- package/src/doc/components/examples/ol-tralis.html +5 -0
- package/src/doc/components/examples/ol-tralis.js +57 -0
- package/src/doc/components/examples/tralis-live-map.html +1 -0
- package/src/doc/components/examples/tralis-live-map.js +51 -0
- package/src/doc/components/examples/tralis-live-map.md +3 -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/{module.js → src/index.js} +2 -0
- package/{mapbox → src/mapbox}/controls/CopyrightControl.js +0 -0
- package/{mapbox → src/mapbox}/index.js +0 -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/{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/{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/{ol → src/ol}/index.js +0 -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/{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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
|
2
|
+
/* eslint-disable react/prop-types */
|
|
3
|
+
/* eslint-disable react/no-danger */
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import Anchor from './Anchor';
|
|
6
|
+
import { _findByName, _getURL } from './DocBuilderUtils';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* build html link to file page.
|
|
10
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L592
|
|
11
|
+
* @param {DocObject} doc - target doc object.
|
|
12
|
+
* @param {string} text - link text.
|
|
13
|
+
* @returns {string} html of link.
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
function DocLinkHTML({ longname, text = null, inner = false, kind = null }) {
|
|
17
|
+
if (!longname) return '';
|
|
18
|
+
|
|
19
|
+
if (typeof longname !== 'string') throw new Error(JSON.stringify(longname));
|
|
20
|
+
|
|
21
|
+
const doc = _findByName(longname, kind)[0];
|
|
22
|
+
|
|
23
|
+
if (!doc) {
|
|
24
|
+
// Special links to typedefs main page
|
|
25
|
+
if (longname === 'typedefs') {
|
|
26
|
+
return (
|
|
27
|
+
<span>
|
|
28
|
+
<a href="/api/typedef/index%20html">{text || longname}</a>
|
|
29
|
+
</span>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
// if longname is HTML tag, not escape.
|
|
33
|
+
if (longname.indexOf('<') === 0) {
|
|
34
|
+
return <span dangerouslySetInnerHTML={{ __html: longname }} />;
|
|
35
|
+
}
|
|
36
|
+
return <span>{text || longname}</span>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (doc.kind === 'external') {
|
|
40
|
+
text = doc.name;
|
|
41
|
+
return (
|
|
42
|
+
<span>
|
|
43
|
+
<a target="_blank" rel="noreferrer" href={doc.externalLink}>
|
|
44
|
+
{text}
|
|
45
|
+
</a>
|
|
46
|
+
</span>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
text = text || doc.name;
|
|
50
|
+
const url = _getURL(doc, inner);
|
|
51
|
+
if (url) {
|
|
52
|
+
return (
|
|
53
|
+
<span>
|
|
54
|
+
<Anchor path={`/api/${url.replace(/\./g, '%20')}-offset-anchor`}>
|
|
55
|
+
{text}
|
|
56
|
+
</Anchor>
|
|
57
|
+
</span>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
return <span>{text}</span>;
|
|
61
|
+
}
|
|
62
|
+
export default React.memo(DocLinkHTML);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import DocLinkHTML from './DocLinkHTML';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* build html links to identifiers
|
|
7
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L788
|
|
8
|
+
* @param {string[]} longnames - link to these.
|
|
9
|
+
* @param {string} [text] - link text. default is name property of doc object.
|
|
10
|
+
* @param {boolean} [inner=false] - if true, use inner link.
|
|
11
|
+
* @param {string} [separator='\n'] - used link separator.
|
|
12
|
+
* @returns {string} html links.
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
function DocsLinkHTML({
|
|
16
|
+
longnames,
|
|
17
|
+
text = null,
|
|
18
|
+
inner = false,
|
|
19
|
+
separator = '\n',
|
|
20
|
+
}) {
|
|
21
|
+
if (!longnames) return '';
|
|
22
|
+
if (!longnames.length) return '';
|
|
23
|
+
|
|
24
|
+
const nonNullLongNames = longnames.filter((longname) => !!longname);
|
|
25
|
+
if (!nonNullLongNames.length) return '';
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<ul>
|
|
29
|
+
{nonNullLongNames.map((longname, idx) => (
|
|
30
|
+
<li key={longname}>
|
|
31
|
+
<DocLinkHTML longname={longname} text={text} inner={inner} />
|
|
32
|
+
{idx !== longnames.length - 1 ? `${separator}` : ''}
|
|
33
|
+
</li>
|
|
34
|
+
))}
|
|
35
|
+
</ul>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
export default React.memo(DocsLinkHTML);
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
4
|
+
import Grid from '@material-ui/core/Grid';
|
|
5
|
+
import Hidden from '@material-ui/core/Hidden';
|
|
6
|
+
import EsdocContent from './EsdocContent';
|
|
7
|
+
import EsdocNavigation from './EsdocNavigation';
|
|
8
|
+
import EsdocSearch from './EsdocSearch';
|
|
9
|
+
import { version } from '../../../../package.json';
|
|
10
|
+
import './css/style.css';
|
|
11
|
+
|
|
12
|
+
const useStyles = makeStyles((theme) => ({
|
|
13
|
+
root: {
|
|
14
|
+
width: '100%',
|
|
15
|
+
},
|
|
16
|
+
content: {
|
|
17
|
+
padding: theme.spacing(1),
|
|
18
|
+
paddingBottom: 115,
|
|
19
|
+
margin: '0 auto',
|
|
20
|
+
maxWidth: '740px',
|
|
21
|
+
},
|
|
22
|
+
navWrapper: {
|
|
23
|
+
height: 'calc(100% - 32px)',
|
|
24
|
+
padding: theme.spacing(2),
|
|
25
|
+
backgroundColor: 'rgb(239, 239, 239)',
|
|
26
|
+
},
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
function Esdoc({ path }) {
|
|
30
|
+
const classes = useStyles();
|
|
31
|
+
|
|
32
|
+
if (!path) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<div className={`esdoc ${classes.root}`}>
|
|
38
|
+
<Hidden smUp>
|
|
39
|
+
<Grid container>
|
|
40
|
+
<Grid item xs={12} className={classes.content}>
|
|
41
|
+
<EsdocContent path={path} />
|
|
42
|
+
</Grid>
|
|
43
|
+
</Grid>
|
|
44
|
+
</Hidden>
|
|
45
|
+
<Hidden only="xs">
|
|
46
|
+
<Grid container wrap="nowrap">
|
|
47
|
+
<Grid item style={{ minWidth: 260, maxWidth: 300 }}>
|
|
48
|
+
<div className={classes.navWrapper}>
|
|
49
|
+
{version}
|
|
50
|
+
<EsdocSearch />
|
|
51
|
+
<EsdocNavigation />
|
|
52
|
+
</div>
|
|
53
|
+
</Grid>
|
|
54
|
+
<Grid item xs={9} className={classes.content}>
|
|
55
|
+
<EsdocContent path={path} />
|
|
56
|
+
</Grid>
|
|
57
|
+
</Grid>
|
|
58
|
+
</Hidden>
|
|
59
|
+
</div>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export default React.memo(Esdoc);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import docss from './index.json';
|
|
4
|
+
import ClassDoc from './ClassDoc';
|
|
5
|
+
import IdentifiersDoc from './IdentifiersDoc';
|
|
6
|
+
import SingleDoc from './SingleDoc';
|
|
7
|
+
import {
|
|
8
|
+
_resolveExtendsChain,
|
|
9
|
+
_resolveNecessary,
|
|
10
|
+
_resolveIgnore,
|
|
11
|
+
_resolveLink,
|
|
12
|
+
} from './DocBuilderUtils';
|
|
13
|
+
|
|
14
|
+
// Preprocess the index.json content.
|
|
15
|
+
// https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocResolver.js
|
|
16
|
+
let docs = _resolveExtendsChain(docss);
|
|
17
|
+
docs = _resolveNecessary(docs);
|
|
18
|
+
docs = _resolveIgnore(docs);
|
|
19
|
+
docs = _resolveLink(docs);
|
|
20
|
+
|
|
21
|
+
function EsdocContent({ path }) {
|
|
22
|
+
let doc;
|
|
23
|
+
|
|
24
|
+
if (!path) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const [firstPath] = path.split('#')[0].split('/');
|
|
29
|
+
if (path) {
|
|
30
|
+
doc = docs.find((item) => {
|
|
31
|
+
const [docLongName] = item.longname.split('#');
|
|
32
|
+
const reg = new RegExp(docLongName);
|
|
33
|
+
if (reg.test(path) && item.kind === 'class') {
|
|
34
|
+
return item;
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<div className="content">
|
|
42
|
+
{/^identifiers/.test(path) && <IdentifiersDoc docs={docs} />}
|
|
43
|
+
{firstPath === 'class' && doc && <ClassDoc doc={doc} />}
|
|
44
|
+
{firstPath === 'variable' && <SingleDoc kind={firstPath} />}
|
|
45
|
+
{firstPath === 'typedef' && <SingleDoc kind={firstPath} />}
|
|
46
|
+
{firstPath === 'function' && <SingleDoc kind={firstPath} />}
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export default React.memo(EsdocContent);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import NavDoc from './NavDoc';
|
|
4
|
+
|
|
5
|
+
function EsdocNavigation() {
|
|
6
|
+
return (
|
|
7
|
+
<div className="navigation">
|
|
8
|
+
<NavDoc />
|
|
9
|
+
</div>
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default React.memo(EsdocNavigation);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import React, { useState, useMemo } from 'react';
|
|
2
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
3
|
+
import { TextField } from '@material-ui/core';
|
|
4
|
+
import { _getSearchIndex } from './DocBuilderUtils';
|
|
5
|
+
|
|
6
|
+
const useStyles = makeStyles(() => ({
|
|
7
|
+
filterField: {
|
|
8
|
+
width: '100%',
|
|
9
|
+
},
|
|
10
|
+
searchWrapper: {
|
|
11
|
+
backgroundColor: 'white',
|
|
12
|
+
},
|
|
13
|
+
}));
|
|
14
|
+
|
|
15
|
+
function EsdocSearch() {
|
|
16
|
+
const searchIndex = _getSearchIndex();
|
|
17
|
+
const classes = useStyles();
|
|
18
|
+
const [filter, setFilter] = useState('');
|
|
19
|
+
|
|
20
|
+
const resultsByKind = useMemo(() => {
|
|
21
|
+
const tmp = {
|
|
22
|
+
class: [],
|
|
23
|
+
method: [],
|
|
24
|
+
member: [],
|
|
25
|
+
function: [],
|
|
26
|
+
variable: [],
|
|
27
|
+
typedef: [],
|
|
28
|
+
external: [],
|
|
29
|
+
file: [],
|
|
30
|
+
test: [],
|
|
31
|
+
testFile: [],
|
|
32
|
+
};
|
|
33
|
+
for (let i = 0; i < searchIndex.length; i += 1) {
|
|
34
|
+
const pair = searchIndex[i];
|
|
35
|
+
if (filter && pair[0].indexOf(filter.toLowerCase()) > -1) {
|
|
36
|
+
const kind = pair[3];
|
|
37
|
+
tmp[kind].push(pair);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return tmp;
|
|
41
|
+
}, [filter, searchIndex]);
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<div className={`search-box active ${classes.searchWrapper}`}>
|
|
45
|
+
<TextField
|
|
46
|
+
inputProps={{
|
|
47
|
+
style: {
|
|
48
|
+
padding: 8,
|
|
49
|
+
fontSize: 16,
|
|
50
|
+
},
|
|
51
|
+
}}
|
|
52
|
+
variant="outlined"
|
|
53
|
+
className={classes.filterField}
|
|
54
|
+
placeholder="Search..."
|
|
55
|
+
value={filter}
|
|
56
|
+
onChange={(e) => setFilter(e.target.value)}
|
|
57
|
+
/>
|
|
58
|
+
<ul className="search-result">
|
|
59
|
+
{Object.entries(resultsByKind).map(([kind, result]) => {
|
|
60
|
+
return (
|
|
61
|
+
!!result.length && (
|
|
62
|
+
<React.Fragment key={kind}>
|
|
63
|
+
<li className="search-separator">{kind}</li>
|
|
64
|
+
{result.map((pair) => {
|
|
65
|
+
return (
|
|
66
|
+
<li>
|
|
67
|
+
<a href={`/api/${pair[1]}`.replace(/\./g, '%20')}>
|
|
68
|
+
{pair[2]}
|
|
69
|
+
</a>
|
|
70
|
+
</li>
|
|
71
|
+
);
|
|
72
|
+
})}
|
|
73
|
+
</React.Fragment>
|
|
74
|
+
)
|
|
75
|
+
);
|
|
76
|
+
})}
|
|
77
|
+
</ul>
|
|
78
|
+
</div>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
export default EsdocSearch;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* build experimental html.
|
|
3
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L936
|
|
4
|
+
* @param {DocObject} doc - target doc object.
|
|
5
|
+
* @returns {string} if doc is not experimental, returns empty.
|
|
6
|
+
* @private
|
|
7
|
+
*/
|
|
8
|
+
const ExperimentalHTML = (doc) => {
|
|
9
|
+
if (doc.experimental) {
|
|
10
|
+
const experimental = [`this ${doc.kind} is experimental.`];
|
|
11
|
+
if (typeof doc.experimental === 'string')
|
|
12
|
+
experimental.push(doc.experimental);
|
|
13
|
+
return experimental.join(' ');
|
|
14
|
+
}
|
|
15
|
+
return '';
|
|
16
|
+
};
|
|
17
|
+
export default ExperimentalHTML;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
/* eslint-disable no-underscore-dangle */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import DocLinkHTML from './DocLinkHTML';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* build class ancestor extends chain.
|
|
8
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/ClassDocBuilder.js#L172
|
|
9
|
+
* @param {DocObject} doc - target class doc.
|
|
10
|
+
* @returns {string} extends chain links html.
|
|
11
|
+
* @private
|
|
12
|
+
*/
|
|
13
|
+
function ExtendsChainHTML({ doc }) {
|
|
14
|
+
if (!doc._custom_extends_chains) return '';
|
|
15
|
+
if (doc.extends.length > 1) return '';
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<div className="flat-list" data-ice="extendsChain">
|
|
19
|
+
<h4>Extends:</h4>
|
|
20
|
+
<div>
|
|
21
|
+
{doc._custom_extends_chains.map((extend) => (
|
|
22
|
+
<React.Fragment key={extend}>
|
|
23
|
+
<DocLinkHTML longname={extend} />
|
|
24
|
+
{' → '}
|
|
25
|
+
</React.Fragment>
|
|
26
|
+
))}
|
|
27
|
+
{doc.name}
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
export default React.memo(ExtendsChainHTML);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
|
2
|
+
/* eslint-disable prefer-destructuring */
|
|
3
|
+
/* eslint-disable react/prop-types */
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
import { _find, _getURL } from './DocBuilderUtils';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* build html link to file page.
|
|
10
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L592
|
|
11
|
+
* @param {DocObject} doc - target doc object.
|
|
12
|
+
* @param {string} text - link text.
|
|
13
|
+
* @returns {string} html of link.
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
function FileDocLinkHTML({ doc, text }) {
|
|
17
|
+
if (!doc) return null;
|
|
18
|
+
|
|
19
|
+
if (text === 'source' && doc.memberof) {
|
|
20
|
+
return (
|
|
21
|
+
<span>
|
|
22
|
+
<a
|
|
23
|
+
target="_blank"
|
|
24
|
+
rel="noreferrer"
|
|
25
|
+
href={`https://github.com/geops/mobility-toolbox-js/blob/master/${
|
|
26
|
+
doc.memberof.split('~')[0]
|
|
27
|
+
}#L${doc.lineNumber}`}
|
|
28
|
+
>
|
|
29
|
+
{text}
|
|
30
|
+
</a>
|
|
31
|
+
</span>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let fileDoc;
|
|
36
|
+
if (doc.kind === 'file' || doc.kind === 'testFile') {
|
|
37
|
+
fileDoc = doc;
|
|
38
|
+
} else {
|
|
39
|
+
const filePath = doc.longname.split('~')[0];
|
|
40
|
+
fileDoc = _find({ kind: ['file', 'testFile'], name: filePath })[0];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (!fileDoc) return '';
|
|
44
|
+
|
|
45
|
+
if (!text) text = fileDoc.name;
|
|
46
|
+
|
|
47
|
+
if (doc.kind === 'file' || doc.kind === 'testFile') {
|
|
48
|
+
return (
|
|
49
|
+
<span>
|
|
50
|
+
<a href={`${_getURL(fileDoc)}`}>{text}</a>
|
|
51
|
+
</span>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
return (
|
|
55
|
+
<span>
|
|
56
|
+
<a href={`${_getURL(fileDoc)}#lineNumber${doc.lineNumber}`}>{text}</a>
|
|
57
|
+
</span>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
export default React.memo(FileDocLinkHTML);
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/* eslint-disable no-continue */
|
|
2
|
+
/* eslint-disable no-restricted-syntax */
|
|
3
|
+
/* eslint-disable no-underscore-dangle */
|
|
4
|
+
/* eslint-disable react/prop-types */
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import SummaryDoc from './SummaryDoc';
|
|
8
|
+
import { escapeURLHash } from './DocBuilderUtils';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* build identifier output.
|
|
12
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/IdentifiersDocBuilder.js#L18
|
|
13
|
+
* @return {IceCap} built output.
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
function IdentifiersDoc({ docs }) {
|
|
17
|
+
// traverse docs and create Map<dirPath, doc[]>
|
|
18
|
+
const dirDocs = new Map();
|
|
19
|
+
const kinds = ['class', 'interface', 'function', 'variable'];
|
|
20
|
+
// 'typedef',
|
|
21
|
+
// 'external',
|
|
22
|
+
// ];
|
|
23
|
+
const filteredDocs = docs.filter((doc) => {
|
|
24
|
+
return kinds.includes(doc.kind) && !doc.ignore && doc.access === 'public';
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Add a typedef doc to have a link to main type def page
|
|
28
|
+
filteredDocs.push({
|
|
29
|
+
access: 'public',
|
|
30
|
+
description: null,
|
|
31
|
+
export: false,
|
|
32
|
+
importPath: 'mobility-toolbox-js/src/index.js',
|
|
33
|
+
importStyle: 'typedef',
|
|
34
|
+
kind: 'typedef',
|
|
35
|
+
lineNumber: 1,
|
|
36
|
+
longname: 'typedefs',
|
|
37
|
+
memberof: 'src/index.js',
|
|
38
|
+
name: 'typedefs',
|
|
39
|
+
static: true,
|
|
40
|
+
undocument: true,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
for (const doc of filteredDocs) {
|
|
44
|
+
const filePath = doc.memberof.replace(/^.*?[/]/, '');
|
|
45
|
+
const dirPath = path.dirname(filePath);
|
|
46
|
+
if (!dirDocs.has(dirPath)) dirDocs.set(dirPath, []);
|
|
47
|
+
dirDocs.get(dirPath).push(doc);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// create a summary of dir
|
|
51
|
+
const dirPaths = Array.from(dirDocs.keys()).sort((a, b) => (a > b ? 1 : -1));
|
|
52
|
+
const kindOrder = {
|
|
53
|
+
class: 0,
|
|
54
|
+
interface: 1,
|
|
55
|
+
function: 2,
|
|
56
|
+
variable: 3,
|
|
57
|
+
typedef: 4,
|
|
58
|
+
external: 5,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<>
|
|
63
|
+
<h1>References</h1>
|
|
64
|
+
|
|
65
|
+
<div className="identifiers-wrap">
|
|
66
|
+
{dirPaths.map((dirPath) => {
|
|
67
|
+
const newDirDocs = dirDocs.get(dirPath);
|
|
68
|
+
|
|
69
|
+
// see: DocBuilder#_buildNavDoc
|
|
70
|
+
newDirDocs.sort((a, b) => {
|
|
71
|
+
const filePathA = a.longname.split('~')[0];
|
|
72
|
+
const filePathB = b.longname.split('~')[0];
|
|
73
|
+
const dirPathA = path.dirname(filePathA);
|
|
74
|
+
const dirPathB = path.dirname(filePathB);
|
|
75
|
+
const kindA = a.interface ? 'interface' : a.kind;
|
|
76
|
+
const kindB = b.interface ? 'interface' : b.kind;
|
|
77
|
+
if (dirPathA === dirPathB) {
|
|
78
|
+
if (kindA === kindB) {
|
|
79
|
+
return a.longname > b.longname ? 1 : -1;
|
|
80
|
+
}
|
|
81
|
+
return kindOrder[kindA] > kindOrder[kindB] ? 1 : -1;
|
|
82
|
+
}
|
|
83
|
+
return dirPathA > dirPathB ? 1 : -1;
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const dirPathLabel = dirPath === '.' ? '' : dirPath;
|
|
87
|
+
return (
|
|
88
|
+
<div key={dirPathLabel} data-ice="dirSummaryWrap">
|
|
89
|
+
<h2 data-ice="dirPath" id={escapeURLHash(dirPath)}>
|
|
90
|
+
{dirPathLabel || '/'}
|
|
91
|
+
</h2>
|
|
92
|
+
<div data-ice="dirSummary">
|
|
93
|
+
<SummaryDoc
|
|
94
|
+
docs={newDirDocs}
|
|
95
|
+
title="summary"
|
|
96
|
+
innerLink={false}
|
|
97
|
+
kindIcon
|
|
98
|
+
/>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
);
|
|
102
|
+
})}
|
|
103
|
+
{/* TODO
|
|
104
|
+
<div className="identifier-dir-tree" data-ice="dirTreeWrap">
|
|
105
|
+
<div className="identifier-dir-tree-header">Directories</div>
|
|
106
|
+
<div className="identifier-dir-tree-content" data-ice="dirTree" />
|
|
107
|
+
</div> */}
|
|
108
|
+
</div>
|
|
109
|
+
</>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export default React.memo(IdentifiersDoc);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
/* eslint-disable no-underscore-dangle */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import DocLinkHTML from './DocLinkHTML';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* build in-direct subclass list.
|
|
8
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/ClassDocBuilder.js#L186
|
|
9
|
+
* @param {DocObject} doc - target class doc.
|
|
10
|
+
* @returns {string} html of in-direct subclass links.
|
|
11
|
+
* @private
|
|
12
|
+
*/
|
|
13
|
+
function IndirectSubclassHTML({ doc }) {
|
|
14
|
+
if (!doc._custom_indirect_subclasses) return '';
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<div className="flat-list" data-ice="directSubclass">
|
|
18
|
+
<h4>Direct Subclass:</h4>
|
|
19
|
+
<div>
|
|
20
|
+
{doc._custom_indirect_subclasses.map((extend, idx) => (
|
|
21
|
+
<React.Fragment key={extend}>
|
|
22
|
+
<DocLinkHTML longname={extend} />
|
|
23
|
+
{idx !== doc._custom_indirect_subclasses.length - 1 ? ', ' : ''}
|
|
24
|
+
</React.Fragment>
|
|
25
|
+
))}
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
export default React.memo(IndirectSubclassHTML);
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
/* eslint-disable no-continue */
|
|
3
|
+
/* eslint-disable no-restricted-syntax */
|
|
4
|
+
/* eslint-disable react/no-array-index-key */
|
|
5
|
+
/* eslint-disable no-underscore-dangle */
|
|
6
|
+
import React, { useState } from 'react';
|
|
7
|
+
import { _find } from './DocBuilderUtils';
|
|
8
|
+
import SummaryDoc from './SummaryDoc';
|
|
9
|
+
import DocLinkHTML from './DocLinkHTML';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* See InhertiedSummaryHTML component.
|
|
13
|
+
*/
|
|
14
|
+
function InheritedSummaryDoc({ longname, kind }) {
|
|
15
|
+
const [open, setOpen] = useState('closed');
|
|
16
|
+
const superDoc = _find({ longname })[0];
|
|
17
|
+
|
|
18
|
+
if (!superDoc) return null;
|
|
19
|
+
|
|
20
|
+
const toggle = () => {
|
|
21
|
+
if (open === 'closed') setOpen('opened');
|
|
22
|
+
else setOpen('closed');
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const targetDocs = _find({
|
|
26
|
+
memberof: longname,
|
|
27
|
+
kind: kind ? [kind] : ['member', 'method', 'get', 'set'],
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
targetDocs.sort((a, b) => {
|
|
31
|
+
if (a.static !== b.static) return -(a.static - b.static);
|
|
32
|
+
|
|
33
|
+
let order = { get: 0, set: 0, member: 1, method: 2 };
|
|
34
|
+
if (order[a.kind] !== order[b.kind]) {
|
|
35
|
+
return order[a.kind] - order[b.kind];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
order = { public: 0, protected: 1, private: 2 };
|
|
39
|
+
if (a.access !== b.access) return order[a.access] - order[b.access];
|
|
40
|
+
|
|
41
|
+
if (a.name !== b.name) return a.name < b.name ? -1 : 1;
|
|
42
|
+
|
|
43
|
+
order = { get: 0, set: 1, member: 2 };
|
|
44
|
+
return order[a.kind] - order[b.kind];
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const title = (
|
|
48
|
+
<span
|
|
49
|
+
onClick={toggle}
|
|
50
|
+
onKeyPress={(evt) => {
|
|
51
|
+
if (evt.which === 13) {
|
|
52
|
+
toggle();
|
|
53
|
+
}
|
|
54
|
+
}}
|
|
55
|
+
role="button"
|
|
56
|
+
tabIndex="0"
|
|
57
|
+
>
|
|
58
|
+
<span className={`toggle ${open}`} /> From {superDoc.kind}{' '}
|
|
59
|
+
<DocLinkHTML longname={longname} text={superDoc.name} />
|
|
60
|
+
</span>
|
|
61
|
+
);
|
|
62
|
+
return (
|
|
63
|
+
<SummaryDoc
|
|
64
|
+
docs={targetDocs}
|
|
65
|
+
title={title}
|
|
66
|
+
style={{ display: open === 'opened' ? 'block' : 'none' }}
|
|
67
|
+
/>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
export default React.memo(InheritedSummaryDoc);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* eslint-disable no-continue */
|
|
2
|
+
/* eslint-disable no-restricted-syntax */
|
|
3
|
+
/* eslint-disable react/no-array-index-key */
|
|
4
|
+
/* eslint-disable no-underscore-dangle */
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import InheritedSummaryDoc from './InheritedSummaryDoc';
|
|
7
|
+
import { _find } from './DocBuilderUtils';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* build inherited method/member summary.
|
|
11
|
+
* https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/ClassDocBuilder.js#L220
|
|
12
|
+
* @param {DocObject} doc - target class doc.
|
|
13
|
+
* @returns {string} html of inherited method/member from ancestor classes.
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
const InheritedSummaryHTML = ({ doc, kind }) => {
|
|
17
|
+
if (['class', 'interface'].indexOf(doc.kind) === -1) return '';
|
|
18
|
+
|
|
19
|
+
const longnames = [
|
|
20
|
+
...(doc._custom_extends_chains || []),
|
|
21
|
+
// ...doc.implements || [],
|
|
22
|
+
// ...doc._custom_indirect_implements || [],
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
return longnames.map((longname, idx) => {
|
|
26
|
+
const superDoc = _find({ longname })[0];
|
|
27
|
+
|
|
28
|
+
if (!superDoc) return null;
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<React.Fragment key={idx}>
|
|
32
|
+
<InheritedSummaryDoc longname={longname} kind={kind} />
|
|
33
|
+
{idx !== longnames.length - 1 ? '\n' : ''}
|
|
34
|
+
</React.Fragment>
|
|
35
|
+
);
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
export default React.memo(InheritedSummaryHTML);
|