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.
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,29 @@
1
+ /* eslint-disable react/prop-types */
2
+ import React from 'react';
3
+ import DocLinkHTML from './DocLinkHTML';
4
+
5
+ /**
6
+ * build mixin extends html.
7
+ * https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/ClassDocBuilder.js#L134
8
+ * @param {DocObject} doc - target class doc.
9
+ * @return {string} mixin extends html.
10
+ */
11
+ function MixinClassesHTML({ doc }) {
12
+ if (!doc.extends) return '';
13
+ if (doc.extends.length <= 1) return '';
14
+
15
+ return (
16
+ <div className="flat-list" data-ice="mixinExtends">
17
+ <h4>Mixin Extends:</h4>
18
+ <div>
19
+ {doc.extends.map((extend, idx) => (
20
+ <React.Fragment key={extend}>
21
+ <DocLinkHTML longname={extend} />{' '}
22
+ {idx !== doc.extends.length - 1 ? ', ' : ''}
23
+ </React.Fragment>
24
+ ))}
25
+ </div>
26
+ </div>
27
+ );
28
+ }
29
+ export default React.memo(MixinClassesHTML);
@@ -0,0 +1,112 @@
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 Anchor from './Anchor';
8
+ import { _find, escapeURLHash } from './DocBuilderUtils';
9
+ import DocLinkHTML from './DocLinkHTML';
10
+
11
+ /**
12
+ * build common navigation output.
13
+ * https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L177
14
+ * @return {IceCap} navigation output.
15
+ * @private
16
+ */
17
+ function NavDoc() {
18
+ const kinds = ['class', 'function', 'variable']; // , 'typedef', 'external'];
19
+
20
+ // we display only public doc and not externals, feel free to reactivate them if you want.
21
+ const allDocs = _find({ kind: kinds }).filter((v) => v.access === 'public');
22
+
23
+ const kindOrder = {
24
+ class: 0,
25
+ interface: 1,
26
+ function: 2,
27
+ variable: 3,
28
+ typedef: 4,
29
+ external: 5,
30
+ };
31
+
32
+ // Add a typedef doc to have a link to main type def page
33
+ allDocs.push({
34
+ access: 'public',
35
+ description: null,
36
+ export: false,
37
+ importPath: 'mobility-toolbox-js/src/index.js',
38
+ importStyle: 'typedef',
39
+ kind: 'typedef',
40
+ lineNumber: 1,
41
+ longname: 'typedefs',
42
+ memberof: 'src/index.js',
43
+ name: 'typedefs',
44
+ static: true,
45
+ undocument: true,
46
+ });
47
+
48
+ // see: IdentifiersDocBuilder#_buildIdentifierDoc
49
+ allDocs.sort((a, b) => {
50
+ const filePathA = a.longname.split('~')[0];
51
+ const filePathB = b.longname.split('~')[0];
52
+ const dirPathA = path.dirname(filePathA);
53
+ const dirPathB = path.dirname(filePathB);
54
+ const kindA = a.interface ? 'interface' : a.kind;
55
+ const kindB = b.interface ? 'interface' : b.kind;
56
+ if (dirPathA === dirPathB) {
57
+ if (kindA === kindB) {
58
+ return a.longname > b.longname ? 1 : -1;
59
+ }
60
+ return kindOrder[kindA] > kindOrder[kindB] ? 1 : -1;
61
+ }
62
+ return dirPathA > dirPathB ? 1 : -1;
63
+ });
64
+ let lastDirPath = '.';
65
+
66
+ return (
67
+ <div>
68
+ <ul>
69
+ {allDocs.map((doc) => {
70
+ const filePath = doc.longname.split('~')[0].replace(/^.*?[/]/, '');
71
+ const dirPath = path.dirname(filePath);
72
+ const kind = doc.interface ? 'interface' : doc.kind;
73
+ const kindText = kind.charAt(0).toUpperCase();
74
+ const kindClass = `kind-${kind}`;
75
+ // ice.load('name', this._buildDocLinkHTML(doc.longname));
76
+ // ice.load('kind', kindText);
77
+ // ice.attr('kind', 'class', kindClass);
78
+ // ice.text('dirPath', dirPath);
79
+ // ice.attr(
80
+ // 'dirPath',
81
+ // 'href',
82
+ // `identifiers.html#${escapeURLHash(dirPath)}`,
83
+ // );
84
+ // ice.drop('dirPath', lastDirPath === dirPath);
85
+ const displayDir = lastDirPath !== dirPath;
86
+ lastDirPath = dirPath;
87
+ return (
88
+ <li data-ice="doc" key={doc.longname}>
89
+ {displayDir && (
90
+ <Anchor
91
+ data-ice="dirPath"
92
+ className="nav-dir-path"
93
+ path={`/api/identifiers%20html#${escapeURLHash(dirPath)}`}
94
+ >
95
+ {dirPath || 'api'}
96
+ </Anchor>
97
+ )}
98
+ <span data-ice="kind" className={kindClass}>
99
+ {kindText}
100
+ </span>
101
+ <span data-ice="name">
102
+ <DocLinkHTML longname={doc.longname} />
103
+ </span>
104
+ </li>
105
+ );
106
+ })}
107
+ </ul>
108
+ </div>
109
+ );
110
+ }
111
+
112
+ export default React.memo(NavDoc);
@@ -0,0 +1,44 @@
1
+ /* eslint-disable react/prop-types */
2
+ /* eslint-disable no-continue */
3
+ /* eslint-disable no-restricted-syntax */
4
+ /* eslint-disable no-underscore-dangle */
5
+ import React from 'react';
6
+ import { _findByName, _find } from './DocBuilderUtils';
7
+ import DocLinkHTML from './DocLinkHTML';
8
+
9
+ /**
10
+ * build method of ancestor class link html.
11
+ * https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L952
12
+ * @param {DocObject} doc - target doc object.
13
+ * @returns {string} html link. if doc does not override ancestor method, returns empty.
14
+ * @private
15
+ */
16
+ function OverrideMethod({ doc }) {
17
+ const parentDoc = _findByName(doc.memberof)[0];
18
+ if (!parentDoc) return '';
19
+ if (!parentDoc._custom_extends_chains) return '';
20
+
21
+ const chains = [...parentDoc._custom_extends_chains].reverse();
22
+ for (const longname of chains) {
23
+ const superClassDoc = _findByName(longname)[0];
24
+ if (!superClassDoc) continue;
25
+
26
+ const superMethodDoc = _find({
27
+ name: doc.name,
28
+ memberof: superClassDoc.longname,
29
+ })[0];
30
+ if (!superMethodDoc) continue;
31
+
32
+ return (
33
+ <DocLinkHTML
34
+ longname={superMethodDoc.longname}
35
+ text={`${superClassDoc.name}#${superMethodDoc.name}`}
36
+ inner
37
+ />
38
+ );
39
+ }
40
+
41
+ return null;
42
+ }
43
+
44
+ export default React.memo(OverrideMethod);
@@ -0,0 +1,35 @@
1
+ /* eslint-disable no-continue */
2
+ /* eslint-disable no-restricted-syntax */
3
+ /* eslint-disable no-underscore-dangle */
4
+ import React from 'react';
5
+ import { _findByName, _find } from './DocBuilderUtils';
6
+ /**
7
+ * build method of ancestor class description.
8
+ * https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L977
9
+ * @param {DocObject} doc - target doc object.
10
+ * @returns {string} description. if doc does not override ancestor method, returns empty.
11
+ * @private
12
+ */
13
+ const OverrideMethodDescription = ({ doc }) => {
14
+ const parentDoc = _findByName(doc.memberof)[0];
15
+ if (!parentDoc) return '';
16
+ if (!parentDoc._custom_extends_chains) return '';
17
+
18
+ const chains = [...parentDoc._custom_extends_chains].reverse();
19
+ for (const longname of chains) {
20
+ const superClassDoc = _findByName(longname)[0];
21
+ if (!superClassDoc) continue;
22
+
23
+ const superMethodDoc = _find({
24
+ name: doc.name,
25
+ memberof: superClassDoc.longname,
26
+ })[0];
27
+ if (!superMethodDoc) continue;
28
+
29
+ if (superMethodDoc.description) return superMethodDoc.description;
30
+ }
31
+
32
+ return '';
33
+ };
34
+
35
+ export default React.memo(OverrideMethodDescription);
@@ -0,0 +1,89 @@
1
+ /* eslint-disable react/no-array-index-key */
2
+ /* eslint-disable react/prop-types */
3
+ import React from 'react';
4
+ import Markdown from 'react-markdown';
5
+ import TypeDocLinkHTML from './TypeDocLinkHTML';
6
+
7
+ /**
8
+ * build properties output.
9
+ * https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L870
10
+ * @param {ParsedParam[]} [properties=[]] - properties in doc object.
11
+ * @param {string} title - output title.
12
+ * @return {IceCap} built properties output.
13
+ * @private
14
+ */
15
+ function Properties({ properties = [], title = 'Properties:' }) {
16
+ return (
17
+ <div data-ice="properties">
18
+ <h4 data-ice="title">{title}</h4>
19
+ <table className="params">
20
+ <thead>
21
+ <tr>
22
+ <td>Name</td>
23
+ <td>Type</td>
24
+ <td>Attribute</td>
25
+ <td>Description</td>
26
+ </tr>
27
+ </thead>
28
+ <tbody>
29
+ {properties.map((prop) => {
30
+ // appendix
31
+ const appendix = [];
32
+ if (prop.optional) {
33
+ appendix.push(<li>optional</li>);
34
+ }
35
+ if ('defaultValue' in prop) {
36
+ appendix.push(<li>default: {prop.defaultValue}</li>);
37
+ }
38
+ if (typeof prop.nullable === 'boolean') {
39
+ appendix.push(<li>nullable: {prop.nullable}</li>);
40
+ }
41
+ return (
42
+ <tr
43
+ key={prop.name}
44
+ data-ice="property"
45
+ data-depth={prop.name.split('.').length - 1}
46
+ >
47
+ <td
48
+ data-ice="name"
49
+ className="code"
50
+ data-depth={prop.name.split('.').length - 1}
51
+ >
52
+ {prop.name}
53
+ </td>
54
+ <td data-ice="type" className="code">
55
+ {prop.types.map((typeName, idx) => {
56
+ return (
57
+ <React.Fragment key={idx}>
58
+ <TypeDocLinkHTML typeName={typeName} />
59
+ {idx !== prop.types.length - 1 ? ' | ' : ''}
60
+ </React.Fragment>
61
+ );
62
+ })}
63
+ </td>
64
+ <td data-ice="appendix">
65
+ {!!appendix.length && (
66
+ <ul>
67
+ {appendix.map((comp, idx) => {
68
+ return (
69
+ <React.Fragment key={idx}>
70
+ {comp}
71
+ {idx !== appendix.length - 1 ? '\n' : ''}
72
+ </React.Fragment>
73
+ );
74
+ })}
75
+ </ul>
76
+ )}
77
+ </td>
78
+ <td data-ice="description">
79
+ <Markdown>{prop.description}</Markdown>
80
+ </td>
81
+ </tr>
82
+ );
83
+ })}
84
+ </tbody>
85
+ </table>
86
+ </div>
87
+ );
88
+ }
89
+ export default React.memo(Properties);
@@ -0,0 +1,45 @@
1
+ # react-esdoc
2
+
3
+ This folder contains an implementation of the rendering of [esdoc-publish-html-plugin](https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin).
4
+
5
+ Every components in this folder is an implementation of a `_buildXXX` function in [Builder folder of the plugin](https://github.com/esdoc/esdoc-plugins/tree/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder)
6
+ In the documentation of the component you can find the link to the function it implements.
7
+
8
+ The original css from [esdoc-publish-html-plugin](https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin) is used. See `./css` folder.
9
+
10
+ ## How does it work
11
+
12
+ The [esdoc-publish-html-plugin](https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin) creates an `index.json` in `apidoc/index.json` when we run `yarn apidoc`.
13
+
14
+ The `yarn apidoc` task copy automatically this `index.json` in this folder.
15
+
16
+ This json is loaded in `./DocBuilderUtils.js` then a in memory [taffy](http://taffydb.com/) database is loaded with its content.
17
+ This database is only used to facilitate the retrievment of data from the `ìndex.json` content.
18
+
19
+ ## Components
20
+
21
+ Only 4 components must be used directly:
22
+
23
+ - Esdoc : The documentation layout.
24
+ - EsdocContent : The class/type/function documentation display.
25
+ - EsdocNavigation: The documentation navigation tool.
26
+ - EsdocSearch: The documentation search box.
27
+
28
+ ## TODO
29
+
30
+ List of functionalities not implemented because we don't use it :
31
+
32
+ - Tests
33
+ - Decorators
34
+ - TODO
35
+
36
+ ## Improvments
37
+
38
+ - Pass the index.json content as a parameter.
39
+ - Configure the replacement of '.' by '%20' in url to make it work with react-router.
40
+ - Configure the base url, currently /api/ is append to all links except source links.
41
+ - Configure the github url, currently github.com/mobility-toolbox-js/... is append to all sources links.
42
+ - Create an esdoc plugin to generate only the index.json file, it should be easy using [esdoc-publish-html-plugin](https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin) code.
43
+ - Convert css to scss.
44
+ - Reactivate all eslint rules.
45
+ - Reactivate all stylelint rules.
@@ -0,0 +1,123 @@
1
+ /* eslint-disable react/no-array-index-key */
2
+ /* eslint-disable no-continue */
3
+ /* eslint-disable no-restricted-syntax */
4
+ import React from 'react';
5
+ import TypeDocLinkHTML from './TypeDocLinkHTML';
6
+
7
+ /**
8
+ * build identifier signature html.
9
+ * https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L813
10
+ * @param {DocObject} doc - target doc object.
11
+ * @returns {string} signature html.
12
+ * @private
13
+ */
14
+ const SignatureHTML = ({ doc }) => {
15
+ // call signature
16
+ const callSignatures = [];
17
+ if (doc.params) {
18
+ for (const param of doc.params) {
19
+ const paramName = param.name;
20
+ if (paramName.indexOf('.') !== -1) continue; // for object property
21
+ if (paramName.indexOf('[') !== -1) continue; // for array property
22
+
23
+ const types = [];
24
+ for (const typeName of param.types) {
25
+ types.push(<TypeDocLinkHTML typeName={typeName} />);
26
+ }
27
+
28
+ callSignatures.push(
29
+ <>
30
+ {`${paramName}: `}
31
+ {types.map((comp, idx) => {
32
+ return (
33
+ <React.Fragment key={idx}>
34
+ {comp}
35
+ {idx !== types.length - 1 ? ' | ' : ''}
36
+ </React.Fragment>
37
+ );
38
+ })}
39
+ </>,
40
+ );
41
+ }
42
+ }
43
+
44
+ // return signature
45
+ const returnSignatures = [];
46
+ if (doc.return) {
47
+ for (const typeName of doc.return.types) {
48
+ returnSignatures.push(<TypeDocLinkHTML typeName={typeName} />);
49
+ }
50
+ }
51
+
52
+ // type signature
53
+ let typeSignatures = [];
54
+ if (doc.type) {
55
+ for (const typeName of doc.type.types) {
56
+ typeSignatures.push(<TypeDocLinkHTML typeName={typeName} />);
57
+ }
58
+ }
59
+
60
+ // callback is not need type. because type is always function.
61
+ if (doc.kind === 'function') {
62
+ typeSignatures = [];
63
+ }
64
+
65
+ let html = '';
66
+ const hasMoreThan1Param = callSignatures.length > 1;
67
+ if (callSignatures.length) {
68
+ html = (
69
+ <>
70
+ (
71
+ {callSignatures.map((comp, idx) => {
72
+ return (
73
+ <React.Fragment key={idx}>
74
+ {hasMoreThan1Param && <br />}
75
+ <span style={{ paddingLeft: hasMoreThan1Param ? 20 : 0 }}>
76
+ {comp}
77
+ {idx !== callSignatures.length - 1 ? ', ' : ''}
78
+ </span>
79
+ {hasMoreThan1Param && idx === callSignatures.length - 1 && <br />}
80
+ </React.Fragment>
81
+ );
82
+ })}
83
+ )
84
+ </>
85
+ );
86
+ } else if (['function', 'method', 'constructor'].includes(doc.kind)) {
87
+ html = '()';
88
+ }
89
+ if (returnSignatures.length)
90
+ html = (
91
+ <>
92
+ {html}
93
+ {`: `}
94
+ {returnSignatures.map((comp, idx) => {
95
+ return (
96
+ <React.Fragment key={idx}>
97
+ {comp}
98
+ {idx !== returnSignatures.length - 1 ? ' | ' : ''}
99
+ </React.Fragment>
100
+ );
101
+ })}
102
+ </>
103
+ );
104
+ if (typeSignatures.length)
105
+ html = (
106
+ <>
107
+ {html}
108
+ {`: `}
109
+ {typeSignatures.map((comp, idx) => {
110
+ return (
111
+ <React.Fragment key={idx}>
112
+ {comp}
113
+ {idx !== typeSignatures.length - 1 ? ' | ' : ''}
114
+ </React.Fragment>
115
+ );
116
+ })}
117
+ </>
118
+ );
119
+
120
+ return html;
121
+ };
122
+
123
+ export default React.memo(SignatureHTML);
@@ -0,0 +1,31 @@
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 SummaryHTML from './SummaryHTML';
7
+ import DetailHTML from './DetailHTML';
8
+
9
+ /**
10
+ * build single output.
11
+ * https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/SingleDocBuilder.js#L29
12
+ * @param {string} kind - target kind property.
13
+ * @returns {string} html of single output
14
+ * @private
15
+ */
16
+ function SingleDoc({ kind }) {
17
+ const title = kind.replace(/^(\w)/, (c) => c.toUpperCase());
18
+ return (
19
+ <>
20
+ <h1 data-ice="title">{title}</h1>
21
+ <div data-ice="summaries">
22
+ <SummaryHTML doc={null} kind={kind} title="Summary" />
23
+ </div>
24
+ <div data-ice="details">
25
+ <DetailHTML doc={null} kind={kind} title="" />
26
+ </div>
27
+ </>
28
+ );
29
+ }
30
+
31
+ export default React.memo(SingleDoc);
@@ -0,0 +1,160 @@
1
+ /* eslint-disable react/prop-types */
2
+ /* eslint-disable react/no-array-index-key */
3
+ import React, { useMemo } from 'react';
4
+ import Markdown from 'react-markdown';
5
+ import DocLinkHTML from './DocLinkHTML';
6
+ import SignatureHTML from './SignatureHTML';
7
+ import ExperimentalHTML from './ExperimentalHTML';
8
+ import DeprecatedHTML from './DeprecatedHTML';
9
+
10
+ const showInheritedHref = (memberof, parentMemberOf) => {
11
+ const name = memberof.split('~');
12
+ if (name[0] === parentMemberOf) {
13
+ return null;
14
+ }
15
+ return (
16
+ <>
17
+ Inherited from:{' '}
18
+ <a href={`/api/class/${memberof.replace('.', '%20')}%20html`}>
19
+ {name.length && name[1]}
20
+ </a>
21
+ </>
22
+ );
23
+ };
24
+ /**
25
+ * build summary output html by docs.
26
+ * https://github.com/esdoc/esdoc-plugins/blob/2de5022baa569785a189056a99acd1d7ca8284b7/esdoc-publish-html-plugin/src/Builder/DocBuilder.js#L294
27
+ * @param {DocObject[]} docs - target docs.
28
+ * @param {string} title - summary title.
29
+ * @param {boolean} innerLink - if true, link in summary is inner link.
30
+ * @param {boolean} kindIcon - use kind icon.
31
+ * @param {string} memberof - memberof of the parent doc.
32
+ * @return {IceCap} summary output.
33
+ * @protected
34
+ */
35
+ function SummaryDoc({
36
+ docs,
37
+ // eslint-disable-next-line no-unused-vars
38
+ title,
39
+ innerLink = false,
40
+ kindIcon = false,
41
+ memberof,
42
+ style,
43
+ }) {
44
+ const showInherited = useMemo(() => {
45
+ if (docs.length === 0) return null;
46
+ return ['member', 'method'].includes(docs[0].kind);
47
+ }, [docs]);
48
+
49
+ if (docs.length === 0) return null;
50
+
51
+ return (
52
+ <table className="summary" data-ice="summary">
53
+ {/* <thead>
54
+ <tr>
55
+ <td data-ice="title" colSpan="2">
56
+ {title}
57
+ </td>
58
+ </tr>
59
+ </thead> */}
60
+ <tbody style={style}>
61
+ {docs
62
+ .filter((doc) => doc.access === 'public')
63
+ .map((doc, idx) => {
64
+ const kindKindIcon = doc.interface ? 'interface' : doc.kind;
65
+ return (
66
+ <tr data-ice="target" key={idx}>
67
+ {/* Hide the access (public) column */}
68
+ {/*
69
+ <td>
70
+ <span className="access" data-ice="access">
71
+ {doc.access}
72
+ </span>
73
+ {staticc && <span data-ice="static">{staticc}</span>}
74
+ {kind && (
75
+ <span className="kind" data-ice="kind">
76
+ {kind}
77
+ </span>
78
+ )}
79
+ <span className="abstract" data-ice="abstract">
80
+ {doc.abstract ? 'abstract' : ''}
81
+ </span>
82
+ <span className="override" data-ice="override" />
83
+ </td>
84
+ */}
85
+ <td>
86
+ <div>
87
+ <p>
88
+ {kindIcon && (
89
+ <span
90
+ data-ice="kind-icon"
91
+ className={`kind-${kindKindIcon}`}
92
+ >
93
+ {kindKindIcon.charAt(0).toUpperCase()}
94
+ </span>
95
+ )}
96
+ <span data-ice="async">{doc.async ? 'async' : ''}</span>
97
+ <span data-ice="generator">
98
+ {doc.generator ? '*' : ''}
99
+ </span>
100
+ <span className="code" data-ice="name">
101
+ <DocLinkHTML
102
+ longname={doc.longname}
103
+ text={
104
+ doc.kind === 'constructor'
105
+ ? `new ${
106
+ doc.longname.match(/~([^)]+)#constructor/)[1]
107
+ }`
108
+ : null
109
+ }
110
+ inner={innerLink}
111
+ kind={doc.kind}
112
+ />
113
+ </span>
114
+ <span className="code" data-ice="signature">
115
+ <SignatureHTML doc={doc} />
116
+ </span>
117
+ </p>
118
+ </div>
119
+ </td>
120
+ <td>
121
+ <div>
122
+ <div className="deprecated" data-ice="deprecated">
123
+ <DeprecatedHTML doc={doc} />
124
+ </div>
125
+ <div className="experimental" data-ice="experimental">
126
+ <ExperimentalHTML doc={doc} />
127
+ </div>
128
+
129
+ <div data-ice="description">
130
+ <Markdown>{doc.description}</Markdown>
131
+ </div>
132
+ <div data-ice="inherited">
133
+ {showInherited
134
+ ? showInheritedHref(doc.memberof, memberof)
135
+ : null}
136
+ </div>
137
+ </div>
138
+ </td>
139
+ {doc.version || doc.since ? (
140
+ <td>
141
+ {doc.version && (
142
+ <span className="version" data-ice="version">
143
+ {doc.version}{' '}
144
+ </span>
145
+ )}
146
+ {doc.since && (
147
+ <span className="since" data-ice="since">
148
+ {doc.since}{' '}
149
+ </span>
150
+ )}
151
+ </td>
152
+ ) : null}
153
+ </tr>
154
+ );
155
+ })}
156
+ </tbody>
157
+ </table>
158
+ );
159
+ }
160
+ export default React.memo(SummaryDoc);