mobility-toolbox-js 2.0.0-beta.3 → 2.0.0-beta.9

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.
Files changed (248) hide show
  1. package/.babelrc +6 -0
  2. package/.esdoc.json +17 -0
  3. package/.eslintignore +1 -0
  4. package/.github/workflows/conventional-pr-title.yml +21 -0
  5. package/.github/workflows/cypress.yml +29 -0
  6. package/.github/workflows/nodejs.yml +28 -0
  7. package/.husky/commit-msg +4 -0
  8. package/.husky/post-checkout +4 -0
  9. package/.husky/post-merge +4 -0
  10. package/.husky/post-rebase +4 -0
  11. package/.husky/pre-commit +4 -0
  12. package/.neutrinorc.js +176 -0
  13. package/.nvmrc +1 -0
  14. package/CHANGELOG.md +10 -0
  15. package/LICENSE +21 -0
  16. package/README.md +4 -1
  17. package/__mocks__/mapbox-gl.js +81 -0
  18. package/__mocks__/maplibre-gl.js +81 -0
  19. package/commitlint.config.js +1 -0
  20. package/cypress/fixtures/example.json +5 -0
  21. package/cypress/integration/examples/api.spec.js +7 -0
  22. package/cypress/integration/examples/examples.spec.js +7 -0
  23. package/cypress/integration/examples/navigation.spec.js +29 -0
  24. package/cypress/plugins/index.js +21 -0
  25. package/cypress/support/commands.js +25 -0
  26. package/cypress/support/index.js +20 -0
  27. package/cypress.json +4 -0
  28. package/data/fetchRoute.json +292 -0
  29. package/data/fetchTrajectories.json +18 -0
  30. package/data/fetchTrajectoryById.json +3 -0
  31. package/data/fetchTrajectoryStations.json +18 -0
  32. package/data/stopsSearch.json +15 -0
  33. package/documentation.yml +4 -0
  34. package/esdoc/README.md +27 -0
  35. package/esdoc/plugins/MyPlugin.js +69 -0
  36. package/esdoc/plugins/dynamic-property-plugin/Plugin.js +50 -0
  37. package/esdoc/plugins/externals-plugin/Plugin.js +45 -0
  38. package/esdoc/plugins/externals-plugin/externals.js +96 -0
  39. package/global-setup.js +3 -0
  40. package/{ol/README.md → index.html} +0 -0
  41. package/indexweb.html +49 -0
  42. package/jest.config.js +5 -0
  43. package/package.json +29 -9
  44. package/pull_request_template.md +17 -0
  45. package/renovate.json +4 -0
  46. package/scripts/read-pkg-json.js +22 -0
  47. package/{api → src/api}/index.js +0 -0
  48. package/{api → src/api}/routing/RoutingAPI.js +0 -0
  49. package/{api → src/api}/routing/RoutingAPI.test.js +0 -0
  50. package/{api → src/api}/stops/StopsAPI.js +0 -0
  51. package/{api → src/api}/stops/StopsAPI.test.js +0 -0
  52. package/{api → src/api}/tralis/TralisAPI.js +0 -0
  53. package/{api → src/api}/tralis/TralisAPI.test.js +0 -0
  54. package/{api → src/api}/tralis/TralisAPIUtils.js +0 -0
  55. package/{api → src/api}/tralis/WebSocketConnector.js +0 -0
  56. package/{api → src/api}/tralis/WebSocketConnector.test.js +0 -0
  57. package/{api → src/api}/tralis/typedefs.js +0 -0
  58. package/src/assets/Lato-Black.ttf +0 -0
  59. package/src/assets/Lato-BlackItalic.ttf +0 -0
  60. package/src/assets/Lato-Bold.ttf +0 -0
  61. package/src/assets/Lato-BoldItalic.ttf +0 -0
  62. package/src/assets/Lato-Italic.ttf +0 -0
  63. package/src/assets/Lato-Light.ttf +0 -0
  64. package/src/assets/Lato-LightItalic.ttf +0 -0
  65. package/src/assets/Lato-Regular.ttf +0 -0
  66. package/src/assets/Lato-Thin.ttf +0 -0
  67. package/src/assets/Lato-ThinItalic.ttf +0 -0
  68. package/src/assets/OFL.txt +93 -0
  69. package/{common → src/common}/Tracker.js +0 -0
  70. package/{common → src/common}/api/api.js +0 -0
  71. package/{common → src/common}/api/api.test.js +0 -0
  72. package/{common → src/common}/controls/Control.js +0 -0
  73. package/{common → src/common}/controls/Control.test.js +0 -0
  74. package/src/common/index.js +5 -0
  75. package/{common → src/common}/layers/Layer.js +0 -0
  76. package/{common → src/common}/layers/Layer.test.js +0 -0
  77. package/{common → src/common}/mixins/CopyrightMixin.js +0 -0
  78. package/{common → src/common}/mixins/SearchMixin.js +0 -0
  79. package/{common → src/common}/mixins/TralisLayerMixin.js +0 -0
  80. package/{common → src/common}/styles/index.js +1 -1
  81. package/{common → src/common}/styles/trackerDefaultStyle.js +8 -8
  82. package/{common → src/common}/styles/trackerDelayStyle.js +0 -0
  83. package/{common → src/common}/styles/trackerSimpleStyle.js +0 -0
  84. package/{common → src/common}/trackerConfig.js +0 -0
  85. package/{common → src/common}/trackerConfig.test.js +0 -0
  86. package/{common → src/common}/typedefs.js +0 -0
  87. package/{common → src/common}/utils/createTrackerFilters.js +0 -0
  88. package/{common → src/common}/utils/createTrackerFilters.test.js +0 -0
  89. package/{common → src/common}/utils/getMapboxMapCopyrights.js +0 -0
  90. package/{common → src/common}/utils/getMapboxMapCopyrights.test.js +0 -0
  91. package/{common → src/common}/utils/getMapboxStyleUrl.js +0 -0
  92. package/{common → src/common}/utils/getVehiclePosition.js +0 -0
  93. package/{common → src/common}/utils/index.js +0 -1
  94. package/{common → src/common}/utils/removeDuplicate.js +0 -0
  95. package/{common → src/common}/utils/removeDuplicate.test.js +0 -0
  96. package/{common → src/common}/utils/sortByDelay.js +0 -0
  97. package/{common → src/common}/utils/timeUtils.js +0 -0
  98. package/{common → src/common}/utils/timeUtils.test.js +0 -0
  99. package/src/doc/App.js +116 -0
  100. package/src/doc/App.scss +51 -0
  101. package/src/doc/_redirects +2 -0
  102. package/src/doc/components/CodeSandboxButton.js +103 -0
  103. package/src/doc/components/Documentation.js +40 -0
  104. package/src/doc/components/Esdoc/Anchor.js +57 -0
  105. package/src/doc/components/Esdoc/ClassDoc.js +272 -0
  106. package/src/doc/components/Esdoc/DeprecatedHTML.js +16 -0
  107. package/src/doc/components/Esdoc/DetailDocs.js +281 -0
  108. package/src/doc/components/Esdoc/DetailHTML.js +33 -0
  109. package/src/doc/components/Esdoc/DirectSubclassHTML.js +30 -0
  110. package/src/doc/components/Esdoc/DocBuilderUtils.js +694 -0
  111. package/src/doc/components/Esdoc/DocLinkHTML.js +62 -0
  112. package/src/doc/components/Esdoc/DocsLinkHTML.js +38 -0
  113. package/src/doc/components/Esdoc/Esdoc.js +63 -0
  114. package/src/doc/components/Esdoc/EsdocContent.js +51 -0
  115. package/src/doc/components/Esdoc/EsdocNavigation.js +13 -0
  116. package/src/doc/components/Esdoc/EsdocSearch.js +81 -0
  117. package/src/doc/components/Esdoc/ExperimentalHTML.js +17 -0
  118. package/src/doc/components/Esdoc/ExtendsChainHTML.js +32 -0
  119. package/src/doc/components/Esdoc/FileDocLinkHTML.js +60 -0
  120. package/src/doc/components/Esdoc/IdentifiersDoc.js +113 -0
  121. package/src/doc/components/Esdoc/IndirectSubclassHTML.js +30 -0
  122. package/src/doc/components/Esdoc/InheritedSummaryDoc.js +70 -0
  123. package/src/doc/components/Esdoc/InheritedSummaryHTML.js +38 -0
  124. package/src/doc/components/Esdoc/MixinClassesHTML.js +29 -0
  125. package/src/doc/components/Esdoc/NavDoc.js +112 -0
  126. package/src/doc/components/Esdoc/OverrideMethod.js +44 -0
  127. package/src/doc/components/Esdoc/OverrideMethodDescription.js +35 -0
  128. package/src/doc/components/Esdoc/Properties.js +89 -0
  129. package/src/doc/components/Esdoc/README.md +45 -0
  130. package/src/doc/components/Esdoc/SignatureHTML.js +123 -0
  131. package/src/doc/components/Esdoc/SingleDoc.js +31 -0
  132. package/src/doc/components/Esdoc/SummaryDoc.js +160 -0
  133. package/src/doc/components/Esdoc/SummaryHTML.js +96 -0
  134. package/src/doc/components/Esdoc/TypeDocLinkHTML.js +249 -0
  135. package/src/doc/components/Esdoc/css/identifiers.css +38 -0
  136. package/src/doc/components/Esdoc/css/search.css +76 -0
  137. package/src/doc/components/Esdoc/css/style.css +603 -0
  138. package/src/doc/components/Esdoc/index.js +7 -0
  139. package/src/doc/components/Example.js +153 -0
  140. package/src/doc/components/Examples.js +183 -0
  141. package/src/doc/components/Home.js +106 -0
  142. package/src/doc/components/TrackerExample.js +38 -0
  143. package/src/doc/examples/assets/tralis-live-map/index.js +11 -0
  144. package/src/doc/examples/assets/tralis-live-map/s1kreis.svg +105 -0
  145. package/src/doc/examples/assets/tralis-live-map/s20kreis.svg +101 -0
  146. package/src/doc/examples/assets/tralis-live-map/s2kreis.svg +95 -0
  147. package/src/doc/examples/assets/tralis-live-map/s3kreis.svg +95 -0
  148. package/src/doc/examples/assets/tralis-live-map/s4kreis.svg +95 -0
  149. package/src/doc/examples/assets/tralis-live-map/s6kreis.svg +95 -0
  150. package/src/doc/examples/assets/tralis-live-map/s7kreis.svg +95 -0
  151. package/src/doc/examples/assets/tralis-live-map/s8kreis.svg +93 -0
  152. package/src/doc/examples/assets/tralis-live-map/unknown.svg +107 -0
  153. package/src/doc/examples/mb-copyright.html +26 -0
  154. package/src/doc/examples/mb-copyright.js +37 -0
  155. package/src/doc/examples/mb-tracker.html +1 -0
  156. package/src/doc/examples/mb-tracker.js +39 -0
  157. package/src/doc/examples/mb-tracker.md +1 -0
  158. package/src/doc/examples/mb-tralis.html +1 -0
  159. package/src/doc/examples/mb-tralis.js +34 -0
  160. package/src/doc/examples/ol-copyright.html +26 -0
  161. package/src/doc/examples/ol-copyright.js +43 -0
  162. package/src/doc/examples/ol-mapbox-layer.html +1 -0
  163. package/src/doc/examples/ol-mapbox-layer.js +28 -0
  164. package/src/doc/examples/ol-mapbox-layer.md +0 -0
  165. package/src/doc/examples/ol-mapbox-style-layer.html +12 -0
  166. package/src/doc/examples/ol-mapbox-style-layer.js +44 -0
  167. package/src/doc/examples/ol-query.html +32 -0
  168. package/src/doc/examples/ol-query.js +83 -0
  169. package/src/doc/examples/ol-routing.html +26 -0
  170. package/src/doc/examples/ol-routing.js +59 -0
  171. package/src/doc/examples/ol-routing.md +1 -0
  172. package/src/doc/examples/ol-stop-finder.html +15 -0
  173. package/src/doc/examples/ol-stop-finder.js +31 -0
  174. package/src/doc/examples/ol-stop-finder.md +1 -0
  175. package/src/doc/examples/ol-tracker.html +1 -0
  176. package/src/doc/examples/ol-tracker.js +44 -0
  177. package/src/doc/examples/ol-tracker.md +1 -0
  178. package/src/doc/examples/ol-tralis.html +5 -0
  179. package/src/doc/examples/ol-tralis.js +57 -0
  180. package/src/doc/examples/tralis-live-map.html +1 -0
  181. package/src/doc/examples/tralis-live-map.js +51 -0
  182. package/src/doc/examples/tralis-live-map.md +3 -0
  183. package/src/doc/examples.js +107 -0
  184. package/src/doc/img/examples/live_tracker_mb.jpg +0 -0
  185. package/src/doc/img/examples/live_tracker_munich.jpg +0 -0
  186. package/src/doc/img/examples/live_tracker_ol.jpg +0 -0
  187. package/src/doc/img/examples/mapbox.jpg +0 -0
  188. package/src/doc/img/examples/mapbox_style.jpg +0 -0
  189. package/src/doc/img/examples/ol-copyright.png +0 -0
  190. package/src/doc/img/examples/query_objects.jpg +0 -0
  191. package/src/doc/img/examples/routing.jpg +0 -0
  192. package/src/doc/img/examples/simple_map.jpg +0 -0
  193. package/src/doc/img/examples/stops.jpg +0 -0
  194. package/src/doc/img/favico.ico +0 -0
  195. package/src/doc/index.js +21 -0
  196. package/src/iife.js +7 -0
  197. package/src/index.js +10 -0
  198. package/{mapbox → src/mapbox}/controls/CopyrightControl.js +0 -0
  199. package/src/mapbox/controls/index.js +2 -0
  200. package/src/mapbox/index.js +4 -0
  201. package/{mapbox → src/mapbox}/layers/Layer.js +0 -0
  202. package/{mapbox → src/mapbox}/layers/Layer.test.js +0 -0
  203. package/{mapbox → src/mapbox}/layers/TralisLayer.js +0 -0
  204. package/{mapbox → src/mapbox}/layers/TralisLayer.test.js +0 -0
  205. package/src/mapbox/layers/index.js +2 -0
  206. package/{mapbox → src/mapbox}/utils.js +0 -0
  207. package/src/ol/README.md +0 -0
  208. package/{ol → src/ol}/controls/CopyrightControl.js +0 -0
  209. package/{ol → src/ol}/controls/CopyrightControl.test.js +0 -0
  210. package/{ol → src/ol}/controls/RoutingControl.js +0 -0
  211. package/{ol → src/ol}/controls/RoutingControl.test.js +0 -0
  212. package/{ol → src/ol}/controls/StopFinderControl.js +0 -0
  213. package/{ol → src/ol}/controls/StopFinderControl.test.js +0 -0
  214. package/src/ol/controls/index.js +3 -0
  215. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen10.json +0 -0
  216. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen100.json +0 -0
  217. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen30.json +0 -0
  218. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen5.json +0 -0
  219. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteOSM.json +0 -0
  220. package/{ol → src/ol}/controls/snapshots/RoutingControlStation1.json +0 -0
  221. package/{ol → src/ol}/controls/snapshots/RoutingControlStation2.json +0 -0
  222. package/src/ol/index.js +5 -0
  223. package/{ol → src/ol}/layers/Layer.js +0 -0
  224. package/{ol → src/ol}/layers/Layer.test.js +0 -0
  225. package/{ol → src/ol}/layers/MapboxLayer.js +0 -0
  226. package/{ol → src/ol}/layers/MapboxLayer.test.js +0 -0
  227. package/{ol → src/ol}/layers/MapboxStyleLayer.js +0 -0
  228. package/{ol → src/ol}/layers/MapboxStyleLayer.test.js +0 -0
  229. package/{ol → src/ol}/layers/MaplibreLayer.js +0 -0
  230. package/{ol → src/ol}/layers/RoutingLayer.js +0 -0
  231. package/{ol → src/ol}/layers/RoutingLayer.test.js +0 -0
  232. package/{ol → src/ol}/layers/TralisLayer.js +0 -0
  233. package/{ol → src/ol}/layers/TralisLayer.test.js +0 -0
  234. package/{ol → src/ol}/layers/VectorLayer.js +0 -0
  235. package/{ol → src/ol}/layers/VectorLayer.test.js +0 -0
  236. package/{ol → src/ol}/layers/WMSLayer.js +0 -0
  237. package/{ol → src/ol}/layers/WMSLayer.test.js +0 -0
  238. package/src/ol/layers/index.js +8 -0
  239. package/{ol → src/ol}/styles/fullTrajectoryDelayStyle.js +0 -0
  240. package/{ol → src/ol}/styles/fullTrajectoryStyle.js +0 -0
  241. package/{ol → src/ol}/styles/index.js +0 -0
  242. package/src/setupTests.js +15 -0
  243. package/webpack.config.js +6 -0
  244. package/index.js +0 -2
  245. package/index.js.map +0 -1
  246. package/mapbox/index.js +0 -3
  247. package/module.js +0 -23
  248. package/ol/index.js +0 -13
@@ -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);