rx-player 4.0.0-beta.0 → 4.0.0-beta.2

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 (297) hide show
  1. package/.eslintrc.js +8 -0
  2. package/CHANGELOG.md +93 -0
  3. package/CONTRIBUTING.md +48 -168
  4. package/FILES.md +40 -92
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/browser_detection.d.ts +25 -12
  7. package/dist/_esm5.processed/compat/browser_detection.js +85 -38
  8. package/dist/_esm5.processed/compat/can_reuse_media_keys.js +2 -2
  9. package/dist/_esm5.processed/compat/eme/close_session.js +2 -2
  10. package/dist/_esm5.processed/compat/eme/load_session.js +1 -1
  11. package/dist/_esm5.processed/compat/event_listeners.js +1 -1
  12. package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.d.ts +21 -0
  13. package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.js +26 -0
  14. package/dist/_esm5.processed/config.d.ts +4 -0
  15. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +9 -6
  16. package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.d.ts +18 -1
  17. package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.js +106 -25
  18. package/dist/_esm5.processed/core/adaptive/guess_based_chooser.js +6 -6
  19. package/dist/_esm5.processed/core/adaptive/network_analyzer.js +8 -5
  20. package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.d.ts +19 -1
  21. package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.js +1 -1
  22. package/dist/_esm5.processed/core/api/debug/buffer_graph.d.ts +28 -0
  23. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +175 -0
  24. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.d.ts +10 -0
  25. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +104 -0
  26. package/dist/_esm5.processed/core/api/debug/constants.d.ts +2 -0
  27. package/dist/_esm5.processed/core/api/debug/constants.js +2 -0
  28. package/dist/_esm5.processed/core/api/debug/index.d.ts +2 -0
  29. package/dist/_esm5.processed/core/api/debug/index.js +2 -0
  30. package/dist/_esm5.processed/core/api/debug/modules/general_info.d.ts +3 -0
  31. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +180 -0
  32. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.d.ts +4 -0
  33. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +121 -0
  34. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.d.ts +3 -0
  35. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +35 -0
  36. package/dist/_esm5.processed/core/api/debug/render.d.ts +3 -0
  37. package/dist/_esm5.processed/core/api/debug/render.js +32 -0
  38. package/dist/_esm5.processed/core/api/debug/utils.d.ts +39 -0
  39. package/dist/_esm5.processed/core/api/debug/utils.js +57 -0
  40. package/dist/_esm5.processed/core/api/playback_observer.js +4 -2
  41. package/dist/_esm5.processed/core/api/public_api.d.ts +60 -3
  42. package/dist/_esm5.processed/core/api/public_api.js +280 -60
  43. package/dist/_esm5.processed/core/api/track_management/media_element_tracks_store.js +10 -1
  44. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +13 -1
  45. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +30 -15
  46. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +3 -1
  47. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +67 -152
  48. package/dist/_esm5.processed/core/api/utils.d.ts +10 -0
  49. package/dist/_esm5.processed/core/api/utils.js +23 -3
  50. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +27 -8
  51. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +28 -7
  52. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
  53. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +1 -1
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +29 -6
  55. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +42 -32
  56. package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +4 -0
  57. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +2 -0
  58. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +5 -1
  59. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +17 -8
  60. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +10 -6
  61. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +5 -4
  62. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +22 -5
  63. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +37 -21
  64. package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +21 -23
  65. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +17 -7
  66. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +2 -2
  67. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +74 -41
  68. package/dist/_esm5.processed/core/init/types.d.ts +9 -1
  69. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.d.ts +28 -1
  70. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +24 -11
  71. package/dist/_esm5.processed/core/init/utils/create_media_source.js +3 -12
  72. package/dist/_esm5.processed/core/init/utils/end_of_stream.js +6 -3
  73. package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +2 -1
  74. package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +9 -5
  75. package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +2 -1
  76. package/dist/_esm5.processed/core/init/utils/media_source_duration_updater.d.ts +58 -0
  77. package/dist/_esm5.processed/core/init/utils/{media_duration_updater.js → media_source_duration_updater.js} +87 -86
  78. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +36 -2
  79. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +83 -3
  80. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +6 -4
  81. package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +1 -1
  82. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.d.ts +18 -7
  83. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +38 -50
  84. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +8 -0
  85. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +16 -2
  86. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +8 -0
  87. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +12 -0
  88. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +11 -4
  89. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  90. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +13 -9
  91. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +30 -16
  92. package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.d.ts +47 -0
  93. package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.js +70 -0
  94. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +41 -20
  95. package/dist/_esm5.processed/core/stream/period/period_stream.js +12 -11
  96. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +37 -28
  97. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.d.ts +4 -2
  98. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +3 -3
  99. package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +16 -6
  100. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.d.ts +3 -2
  101. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +8 -8
  102. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.d.ts +2 -2
  103. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +2 -3
  104. package/dist/_esm5.processed/core/stream/utils/create_reload_request.js +1 -1
  105. package/dist/_esm5.processed/default_config.d.ts +41 -0
  106. package/dist/_esm5.processed/default_config.js +46 -2
  107. package/dist/_esm5.processed/errors/index.d.ts +2 -2
  108. package/dist/_esm5.processed/errors/media_error.d.ts +23 -1
  109. package/dist/_esm5.processed/errors/media_error.js +18 -5
  110. package/dist/_esm5.processed/experimental/features/debug_element.d.ts +8 -0
  111. package/dist/_esm5.processed/experimental/features/debug_element.js +10 -0
  112. package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
  113. package/dist/_esm5.processed/experimental/features/index.js +1 -0
  114. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.d.ts +1 -1
  115. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.js +8 -7
  116. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +7 -4
  117. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +24 -12
  118. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/index.js +0 -2
  119. package/dist/_esm5.processed/features/features_object.js +1 -0
  120. package/dist/_esm5.processed/features/initialize_features.js +13 -10
  121. package/dist/_esm5.processed/features/types.d.ts +3 -0
  122. package/dist/_esm5.processed/manifest/adaptation.d.ts +21 -2
  123. package/dist/_esm5.processed/manifest/adaptation.js +80 -1
  124. package/dist/_esm5.processed/manifest/manifest.js +2 -0
  125. package/dist/_esm5.processed/manifest/period.js +2 -2
  126. package/dist/_esm5.processed/manifest/representation.d.ts +33 -2
  127. package/dist/_esm5.processed/manifest/representation.js +32 -4
  128. package/dist/_esm5.processed/manifest/utils.js +1 -3
  129. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +105 -137
  130. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +25 -5
  131. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.d.ts +1 -1
  132. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +1 -1
  133. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -0
  134. package/dist/_esm5.processed/public_types.d.ts +13 -3
  135. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +1 -1
  136. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +15 -11
  137. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +2 -2
  138. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  139. package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -4
  140. package/dist/_esm5.processed/transports/local/segment_loader.js +13 -26
  141. package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.d.ts +4 -6
  142. package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.js +4 -6
  143. package/dist/_esm5.processed/transports/smooth/segment_loader.js +4 -4
  144. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  145. package/dist/_esm5.processed/utils/cancellable_sleep.js +4 -10
  146. package/dist/_esm5.processed/utils/create_cancellable_promise.d.ts +26 -0
  147. package/dist/_esm5.processed/utils/create_cancellable_promise.js +52 -0
  148. package/dist/_esm5.processed/utils/is_null_or_undefined.d.ts +1 -1
  149. package/dist/_esm5.processed/utils/is_null_or_undefined.js +1 -1
  150. package/dist/_esm5.processed/utils/reference.js +6 -0
  151. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  152. package/dist/_esm5.processed/utils/task_canceller.d.ts +34 -15
  153. package/dist/_esm5.processed/utils/task_canceller.js +55 -22
  154. package/dist/mpd-parser.wasm +0 -0
  155. package/dist/rx-player.js +5424 -4712
  156. package/dist/rx-player.min.js +1 -1
  157. package/jest.config.js +1 -5
  158. package/package.json +44 -40
  159. package/scripts/build/constants.d.ts +1 -0
  160. package/scripts/build/generate_build.js +1 -1
  161. package/scripts/fast_demo_build.js +40 -40
  162. package/scripts/generate_full_demo.js +1 -1
  163. package/sonar-project.properties +1 -1
  164. package/src/compat/browser_detection.ts +105 -52
  165. package/src/compat/can_reuse_media_keys.ts +5 -2
  166. package/src/compat/eme/close_session.ts +2 -2
  167. package/src/compat/eme/load_session.ts +1 -1
  168. package/src/compat/event_listeners.ts +1 -1
  169. package/src/compat/has_issues_with_high_media_source_duration.ts +27 -0
  170. package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +147 -48
  171. package/src/core/adaptive/adaptive_representation_selector.ts +11 -6
  172. package/src/core/adaptive/buffer_based_chooser.ts +144 -26
  173. package/src/core/adaptive/guess_based_chooser.ts +9 -8
  174. package/src/core/adaptive/network_analyzer.ts +9 -4
  175. package/src/core/adaptive/utils/representation_score_calculator.ts +22 -2
  176. package/src/core/api/debug/buffer_graph.ts +247 -0
  177. package/src/core/api/debug/buffer_size_graph.ts +130 -0
  178. package/src/core/api/debug/constants.ts +2 -0
  179. package/src/core/api/debug/index.ts +3 -0
  180. package/src/core/api/debug/modules/general_info.ts +184 -0
  181. package/src/core/api/debug/modules/segment_buffer_content.ts +155 -0
  182. package/src/core/api/debug/modules/segment_buffer_size.ts +48 -0
  183. package/src/core/api/debug/render.ts +40 -0
  184. package/src/core/api/debug/utils.ts +103 -0
  185. package/src/core/api/playback_observer.ts +5 -2
  186. package/src/core/api/public_api.ts +334 -73
  187. package/src/core/api/track_management/media_element_tracks_store.ts +17 -8
  188. package/src/core/api/track_management/track_dispatcher.ts +37 -14
  189. package/src/core/api/track_management/tracks_store.ts +77 -167
  190. package/src/core/api/utils.ts +29 -3
  191. package/src/core/decrypt/__tests__/__global__/utils.ts +61 -40
  192. package/src/core/decrypt/attach_media_keys.ts +1 -1
  193. package/src/core/decrypt/content_decryptor.ts +1 -1
  194. package/src/core/decrypt/find_key_system.ts +25 -11
  195. package/src/core/decrypt/session_events_listener.ts +45 -39
  196. package/src/core/decrypt/utils/check_key_statuses.ts +6 -0
  197. package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +2 -1
  198. package/src/core/decrypt/utils/loaded_sessions_store.ts +8 -1
  199. package/src/core/fetchers/cdn_prioritizer.ts +18 -9
  200. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -4
  201. package/src/core/fetchers/segment/segment_fetcher.ts +36 -14
  202. package/src/core/fetchers/segment/task_prioritizer.ts +25 -30
  203. package/src/core/fetchers/utils/schedule_request.ts +18 -7
  204. package/src/core/init/directfile_content_initializer.ts +2 -1
  205. package/src/core/init/media_source_content_initializer.ts +89 -50
  206. package/src/core/init/types.ts +9 -1
  207. package/src/core/init/utils/content_time_boundaries_observer.ts +48 -12
  208. package/src/core/init/utils/create_media_source.ts +4 -16
  209. package/src/core/init/utils/end_of_stream.ts +6 -3
  210. package/src/core/init/utils/get_loaded_reference.ts +2 -1
  211. package/src/core/init/utils/initial_seek_and_play.ts +9 -5
  212. package/src/core/init/utils/initialize_content_decryption.ts +2 -1
  213. package/src/core/init/utils/{media_duration_updater.ts → media_source_duration_updater.ts} +103 -110
  214. package/src/core/init/utils/rebuffering_controller.ts +115 -4
  215. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +6 -4
  216. package/src/core/init/utils/throw_on_media_error.ts +1 -1
  217. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +63 -66
  218. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +20 -2
  219. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +16 -0
  220. package/src/core/segment_buffers/implementations/types.ts +16 -4
  221. package/src/core/segment_buffers/index.ts +2 -0
  222. package/src/core/segment_buffers/segment_buffers_store.ts +16 -13
  223. package/src/core/stream/adaptation/adaptation_stream.ts +33 -19
  224. package/src/core/stream/adaptation/utils/create_representation_estimator.ts +114 -0
  225. package/src/core/stream/orchestrator/stream_orchestrator.ts +42 -20
  226. package/src/core/stream/period/period_stream.ts +13 -11
  227. package/src/core/stream/representation/representation_stream.ts +49 -37
  228. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +9 -4
  229. package/src/core/stream/representation/utils/downloading_queue.ts +16 -4
  230. package/src/core/stream/representation/utils/push_init_segment.ts +11 -6
  231. package/src/core/stream/representation/utils/push_media_segment.ts +3 -3
  232. package/src/core/stream/utils/create_reload_request.ts +1 -1
  233. package/src/default_config.ts +59 -11
  234. package/src/errors/__tests__/media_error.test.ts +6 -6
  235. package/src/errors/index.ts +4 -1
  236. package/src/errors/media_error.ts +67 -1
  237. package/src/experimental/features/__tests__/debug_element.test.ts +26 -0
  238. package/src/experimental/features/debug_element.ts +13 -0
  239. package/src/experimental/features/index.ts +1 -0
  240. package/src/experimental/tools/VideoThumbnailLoader/load_and_push_segment.ts +10 -7
  241. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -4
  242. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +25 -10
  243. package/src/experimental/tools/mediaCapabilitiesProber/index.ts +0 -4
  244. package/src/features/__tests__/initialize_features.test.ts +11 -0
  245. package/src/features/features_object.ts +1 -0
  246. package/src/features/initialize_features.ts +15 -10
  247. package/src/features/types.ts +9 -0
  248. package/src/manifest/__tests__/manifest.test.ts +7 -7
  249. package/src/manifest/__tests__/period.test.ts +90 -45
  250. package/src/manifest/adaptation.ts +96 -1
  251. package/src/manifest/manifest.ts +4 -0
  252. package/src/manifest/period.ts +4 -2
  253. package/src/manifest/representation.ts +77 -5
  254. package/src/manifest/utils.ts +1 -3
  255. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +116 -151
  256. package/src/parsers/manifest/dash/common/parse_representations.ts +21 -4
  257. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +1 -1
  258. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -0
  259. package/src/parsers/texttracks/ttml/parse_ttml.ts +1 -1
  260. package/src/public_types.ts +16 -1
  261. package/src/tools/TextTrackRenderer/text_track_renderer.ts +1 -1
  262. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +31 -22
  263. package/src/transports/dash/low_latency_segment_loader.ts +2 -2
  264. package/src/transports/dash/manifest_parser.ts +1 -1
  265. package/src/transports/dash/segment_loader.ts +4 -4
  266. package/src/transports/local/segment_loader.ts +14 -30
  267. package/src/transports/smooth/isobmff/create_boxes.ts +4 -6
  268. package/src/transports/smooth/segment_loader.ts +4 -4
  269. package/src/transports/utils/call_custom_manifest_loader.ts +3 -3
  270. package/src/typings/globals.d.ts +21 -19
  271. package/src/utils/cancellable_sleep.ts +5 -14
  272. package/src/utils/create_cancellable_promise.ts +69 -0
  273. package/src/utils/is_null_or_undefined.ts +1 -1
  274. package/src/utils/reference.ts +6 -0
  275. package/src/utils/request/xhr.ts +1 -1
  276. package/src/utils/task_canceller.ts +63 -34
  277. package/tsconfig.json +1 -1
  278. package/tsconfig.modules.json +1 -1
  279. package/dist/_esm5.processed/core/init/utils/media_duration_updater.d.ts +0 -56
  280. package/locked_reps.js +0 -46
  281. package/scripts/doc-generator/construct_table_of_contents.js +0 -76
  282. package/scripts/doc-generator/convert_MD_to_HMTL.js +0 -26
  283. package/scripts/doc-generator/create_documentation.js +0 -331
  284. package/scripts/doc-generator/create_documentation_page.js +0 -209
  285. package/scripts/doc-generator/create_page.js +0 -210
  286. package/scripts/doc-generator/generate_header_html.js +0 -147
  287. package/scripts/doc-generator/generate_page_html.js +0 -115
  288. package/scripts/doc-generator/generate_page_list_html.js +0 -92
  289. package/scripts/doc-generator/generate_sidebar_html.js +0 -85
  290. package/scripts/doc-generator/get_search_data_for_content.js +0 -137
  291. package/scripts/doc-generator/index.js +0 -34
  292. package/scripts/doc-generator/parse_doc_configs.js +0 -327
  293. package/scripts/doc-generator/scripts/lunr.js +0 -10
  294. package/scripts/doc-generator/scripts/script.js +0 -451
  295. package/scripts/doc-generator/styles/code.css +0 -99
  296. package/scripts/doc-generator/styles/style.css +0 -835
  297. package/scripts/doc-generator/utils.js +0 -74
@@ -1,451 +0,0 @@
1
- const rootUrl = window.rootUrl;
2
-
3
- const searchParams = new URLSearchParams(window.location.search);
4
-
5
- // =========== Initialize search ===========
6
-
7
- /**
8
- * Last searched text.
9
- * `null` if nothing was yet searched in the current searching session.
10
- * @type {string|null}
11
- */
12
- let lastSearch = null;
13
-
14
- /**
15
- * Status of the search initialization (loading + building of the index).
16
- * Can be:
17
- * 1. "not-loaded": when... not loaded.
18
- * 2. "loading": when in the process of being loaded (e.g. the index request
19
- * is pending).
20
- * 3. "loaded": Search is initialized with success. This is the only state
21
- * under which search operations can be performed.
22
- * 4. "failed": Search initialization failed.
23
- * @type {string}
24
- */
25
- let searchInitStatus = "not-loaded";
26
-
27
- /**
28
- * Contains the links to search results.
29
- * The elements of this array are in this same order than `elasticlunr`'s index.
30
- * @type {Array.<Object>}
31
- */
32
- let searchIndexLinks = [];
33
-
34
- /** Parent element to search-related dynamic elements (input + results ...) */
35
- const searchWrapperElt = document.getElementById("search-wrapper");
36
-
37
- /** All search icon elements in the page (hopefully, there's only one). */
38
- const searchIconElts = document.getElementsByClassName("search-icon");
39
-
40
- /** The Element corresponding to the search input. */
41
- const searchBarElt = document.getElementById("searchbar");
42
-
43
- /** The Element containing the search results. */
44
- const searchResultsElt = document.getElementById("search-results");
45
-
46
- const searchEngine = elasticlunr(function () {
47
- this.addField("h1");
48
- this.addField("h2");
49
- this.addField("h3");
50
- this.addField("body");
51
- this.setRef("id");
52
- });
53
-
54
- if (searchIconElts.length > 0) {
55
- for (let i = 0; i < searchIconElts.length; i++) {
56
- const searchIconElt = searchIconElts[i];
57
- searchIconElt.onclick = function() {
58
- lastSearch = null;
59
- searchResultsElt.innerHTML = "";
60
- searchBarElt.value = "";
61
- if (searchWrapperElt.classList.contains("active")) {
62
- searchParams.delete("search");
63
- history.replaceState(null, null, window.location.href.split("?")[0])
64
- searchWrapperElt.classList.remove("active");
65
- searchIconElt.classList.remove("active");
66
- } else {
67
- if (searchInitStatus === "not-loaded") {
68
- initializeSearchEngine().then(() => {
69
- updateSearchResults();
70
- });
71
- }
72
- window.scrollTo(0, 0);
73
- searchWrapperElt.classList.add("active");
74
- searchIconElt.classList.add("active");
75
- searchBarElt.focus();
76
- updateSearchResults();
77
- }
78
- }
79
- }
80
- }
81
-
82
- {
83
- const initialSearch = searchParams.get("search");
84
- if (initialSearch !== null) {
85
- searchWrapperElt.classList.add("active");
86
- for (let i = 0; i < searchIconElts.length; i++) {
87
- searchIconElts[i].classList.add("active");
88
- }
89
- searchBarElt.value = initialSearch;
90
- searchBarElt.focus();
91
- searchBarElt.selectionStart = searchBarElt.selectionEnd = searchBarElt.value.length;
92
- updateSearchResults();
93
- initializeSearchEngine().then(() => {
94
- updateSearchResults();
95
- });
96
- }
97
- }
98
-
99
- function initializeSearchEngine() {
100
- searchInitStatus = "loading";
101
- return fetch(rootUrl + "/searchIndex.json")
102
- .then(res => res.json())
103
- .then(res => {
104
- if (!Array.isArray(res)) {
105
- console.error("Failed to initialize search: index has an invalid format.");
106
- return;
107
- }
108
- searchIndexLinks = [];
109
- let id = 0;
110
- for (let i = 0; i < res.length; i++) {
111
- for (let j = 0; j < res[i].index.length; j++) {
112
- const elt = res[i].index[j];
113
- searchIndexLinks.push({
114
- file: res[i].file,
115
- anchorH1: elt.anchorH1,
116
- anchorH2: elt.anchorH2,
117
- anchorH3: elt.anchorH3,
118
- });
119
- searchEngine.addDoc({
120
- h1: elt.h1,
121
- h2: elt.h2,
122
- h3: elt.h3,
123
- body: elt.body,
124
- id: id,
125
- });
126
- id++;
127
- }
128
- }
129
- searchInitStatus = "loaded";
130
- })
131
- .catch(err => {
132
- searchInitStatus = "failed";
133
- console.error("Could not initialize search:", err);
134
- });
135
- }
136
-
137
- if (searchBarElt !== null) {
138
- searchBarElt.oninput = function() {
139
- searchParams.set("search", searchBarElt.value);
140
- history.replaceState(null, null, "?" + searchParams.toString());
141
- updateSearchResults();
142
- }
143
- }
144
-
145
- function updateSearchResults() {
146
- const value = searchBarElt.value;
147
- if (value === lastSearch) {
148
- return;
149
- }
150
-
151
- if (value === "") {
152
- lastSearch = "";
153
- searchResultsElt.innerHTML = "<div class=\"message\">" +
154
- "Enter text to search in all documentation pages." +
155
- "</div>";
156
- return;
157
- }
158
- if (searchInitStatus === "not-loaded") {
159
- lastSearch = null;
160
- searchResultsElt.innerHTML = "<div class=\"message\">" +
161
- "Loading the search index..." +
162
- "</div>";
163
- return;
164
- }
165
- if (searchInitStatus === "failed") {
166
- lastSearch = null;
167
- searchResultsElt.innerHTML = "<div class=\"message\">" +
168
- "Error: an error happened while initializing the search index" +
169
- "</div>";
170
- return;
171
- }
172
- lastSearch = value;
173
-
174
- const searchResults = searchEngine.search(value, {
175
- fields: {
176
- h1: { boost: 5, bool: "AND" },
177
- h2: { boost: 4, bool: "AND" },
178
- h3: { boost: 3, bool: "AND" },
179
- body: { boost: 1 }
180
- },
181
- expand: true,
182
- });
183
- if (searchResults.length === 0) {
184
- searchResultsElt.innerHTML = "<div class=\"message\">" +
185
- "No result for that search." +
186
- "</div>";
187
- return;
188
- }
189
- searchResultsElt.innerHTML = "";
190
- for (let resIdx = 0; resIdx < searchResults.length && resIdx < 30; resIdx++) {
191
- const res = searchResults[resIdx];
192
- const links = searchIndexLinks[+res.ref];
193
- const contentDiv = document.createElement("div");
194
- contentDiv.className = "search-result-item";
195
-
196
- const locationDiv = document.createElement("div");
197
- locationDiv.className = "search-result-location";
198
- if (res.doc.h1 !== undefined && res.doc.h1 !== "") {
199
- let linkH1;
200
- if (links.anchorH1 !== undefined) {
201
- const href = rootUrl + "/" + links.file + "#" + links.anchorH1;
202
- linkH1 = document.createElement("a");
203
- linkH1.href = href;
204
- } else {
205
- linkH1 = document.createElement("span");
206
- }
207
- linkH1.className = "h1";
208
- linkH1.textContent = res.doc.h1;
209
- locationDiv.appendChild(linkH1);
210
- if (res.doc.h2 !== undefined && res.doc.h2 !== "") {
211
- const separatorSpan = document.createElement("span");
212
- separatorSpan.textContent = " > ";
213
- locationDiv.appendChild(separatorSpan);
214
- let linkH2;
215
- if (links.anchorH2 !== undefined) {
216
- const href = rootUrl + "/" + links.file + "#" + links.anchorH2;
217
- linkH2 = document.createElement("a");
218
- linkH2.href = href;
219
- } else {
220
- linkH2 = document.createElement("span");
221
- }
222
- linkH2.className = "h2";
223
- linkH2.textContent = res.doc.h2;
224
- locationDiv.appendChild(linkH2);
225
- if (res.doc.h3 !== undefined && res.doc.h3 !== "") {
226
- const separatorSpan = document.createElement("span");
227
- separatorSpan.textContent = " > ";
228
- locationDiv.appendChild(separatorSpan);
229
- let linkH3;
230
- if (links.anchorH3 !== undefined) {
231
- const href = rootUrl + "/" + links.file + "#" + links.anchorH3;
232
- linkH3 = document.createElement("a");
233
- linkH3.href = href;
234
- } else {
235
- linkH3 = document.createElement("span");
236
- }
237
- linkH3.className = "h3";
238
- linkH3.textContent = res.doc.h3;
239
- locationDiv.appendChild(linkH3);
240
- }
241
- }
242
- }
243
- const bodyDiv = document.createElement("div");
244
- bodyDiv.className = "search-result-body";
245
- let body = res.doc.body ?? "";
246
- if (body.length > 300) {
247
- body = body.substring(0, 300) + "...";
248
- }
249
- bodyDiv.textContent = body;
250
-
251
- contentDiv.appendChild(locationDiv);
252
- contentDiv.appendChild(bodyDiv);
253
- searchResultsElt.appendChild(contentDiv);
254
- }
255
- return;
256
- }
257
-
258
- // ========= Sidebar + PageList opening / closing ===========
259
-
260
- const sidebarGroupElts = document.getElementsByClassName("sidebar-item-group");
261
- const pageListGroupElts = document.getElementsByClassName("page-list-group");
262
- const groupElts = [];
263
- for (let i = 0; i < sidebarGroupElts.length; i++) {
264
- groupElts.push(sidebarGroupElts[i]);
265
- }
266
- for (let i = 0; i < pageListGroupElts.length; i++) {
267
- groupElts.push(pageListGroupElts[i]);
268
- }
269
-
270
- for (let groupElt of groupElts) {
271
- const wrapper = groupElt.parentElement;
272
- const ulElt = wrapper.getElementsByTagName("ul")[0];
273
- const pageGroupElt = ulElt.previousSibling;
274
- let status = "closed";
275
- let openingTimeout;
276
- let closingTimeout;
277
-
278
- if (ulElt !== undefined) {
279
- if (pageGroupElt.classList.contains("opened")) {
280
- // already opened sidebar group
281
- status = "opened";
282
- ulElt.style.display = "block";
283
- ulElt.style.height = `auto`;
284
- }
285
- ulElt.addEventListener("transitionend", onTransitionEnd);
286
- }
287
-
288
- groupElt.onclick = function () {
289
- if (pageGroupElt.classList.contains("opened")) {
290
- progressivelyHideElt();
291
- } else {
292
- progressivelyDisplayElt();
293
- }
294
- }
295
-
296
- function progressivelyDisplayElt() {
297
- clearTimeout(openingTimeout);
298
- clearTimeout(closingTimeout);
299
- pageGroupElt.classList.add("opened");
300
- if (ulElt === undefined) {
301
- return;
302
- }
303
- ulElt.style.display = "block";
304
- ulElt.style.height = "auto";
305
- const height = ulElt.offsetHeight;
306
- ulElt.style.height = "0px";
307
- const transitionDuration = getTransitionDuration(height);
308
- ulElt.style.transition = `height ${transitionDuration}ms ease-in-out 0s`;
309
- openingTimeout = setTimeout(() => {
310
- status = "opening";
311
- ulElt.style.height = `${height}px`;
312
- });
313
- }
314
-
315
- function progressivelyHideElt() {
316
- clearTimeout(openingTimeout);
317
- clearTimeout(closingTimeout);
318
- pageGroupElt.classList.remove("opened");
319
- if (ulElt === undefined) {
320
- return;
321
- }
322
- const height = ulElt.offsetHeight;
323
- ulElt.style.height = `${height}px`;
324
- closingTimeout = setTimeout(() => {
325
- status = "closing";
326
- const transitionDuration = getTransitionDuration(ulElt.offsetHeight);
327
- ulElt.style.transition = `height ${transitionDuration}ms ease-in-out 0s`;
328
- ulElt.style.height = "0px";
329
- });
330
- }
331
-
332
- function onTransitionEnd() {
333
- if (status === "closing") {
334
- ulElt.style.transition = "";
335
- ulElt.style.display = "none";
336
- ulElt.style.height = "auto";
337
- status = "closed";
338
- } else if (status === "opening") {
339
- status = "opened";
340
- ulElt.style.height = "auto";
341
- }
342
- }
343
-
344
- function getTransitionDuration(height) {
345
- return Math.max(300, height / 2);
346
- }
347
- }
348
-
349
- // ======= Scroll to right sidebar element =======
350
-
351
- const active = document.querySelector(".sidebar-link.active");
352
-
353
- if (active !== null) {
354
- const activeRect = active.getBoundingClientRect();
355
- if (activeRect.y + activeRect.height + 20 > window.innerHeight) {
356
- const sidebarWrapperElt = document.getElementsByClassName("sidebar-wrapper")[0];
357
- const scrollYBy = activeRect.y + activeRect.height - window.innerHeight + 50;
358
- sidebarWrapperElt.scrollTo(0, scrollYBy);
359
- }
360
- }
361
-
362
- // ======= Hide / show header on scroll =======
363
-
364
- let prevScroll = window.scrollY;
365
- let isHeaderShown = true;
366
- const headerElt = document.getElementsByClassName("navbar-parent")[0];
367
-
368
- window.addEventListener("scroll", onScroll);
369
-
370
- function onScroll() {
371
- const curScroll = window.scrollY;
372
- if (curScroll === 0) {
373
- showHeader();
374
- return;
375
- }
376
-
377
- if (Math.abs(curScroll - prevScroll) < 5) {
378
- return;
379
- }
380
- if (curScroll > prevScroll) {
381
- hideHeader();
382
- } else if (curScroll < prevScroll) {
383
- showHeader();
384
- }
385
- prevScroll = curScroll;
386
- };
387
-
388
- function hideHeader() {
389
- if (isHeaderShown) {
390
- headerElt.classList.add("hidden");
391
- isHeaderShown = false;
392
- }
393
- }
394
-
395
- function showHeader() {
396
- if (!isHeaderShown) {
397
- headerElt.classList.remove("hidden");
398
- isHeaderShown = true;
399
- }
400
- }
401
-
402
- // Work-arounds to make sure the header doesn't go on top
403
- // of a link
404
- if (window.location.hash !== "") {
405
- hideHeader();
406
- }
407
-
408
- window.onhashchange = function() {
409
- hideHeader();
410
- prevScroll = window.scrollY;
411
- };
412
-
413
- // ======= Hamburger menu ========
414
-
415
- let opacityTimeout;
416
- const overlay = document.createElement("div");
417
- overlay.className = "overlay";
418
-
419
- const hamburgerOpenerElt = document.getElementsByClassName("hamburger-opener")[0];
420
- const hamburgerBarElt = document.getElementsByClassName("hamburger-bar")[0];
421
- const hamburgerCloserElt = document.getElementsByClassName("hamburger-bar-closer")[0];
422
-
423
- hamburgerOpenerElt.onclick = openMenu;
424
- hamburgerCloserElt.onclick = closeMenu;
425
-
426
- let isOverlayVisible = false;
427
- overlay.onclick = function() {
428
- if (isOverlayVisible) {
429
- closeMenu();
430
- }
431
- }
432
-
433
- function openMenu() {
434
- clearTimeout(opacityTimeout);
435
- document.body.style.overflowY = "hidden";
436
- document.body.appendChild(overlay);
437
- opacityTimeout = setTimeout(() => {
438
- overlay.style.opacity = "1";
439
- isOverlayVisible = true;
440
- });
441
- hamburgerBarElt.classList.add("opened");
442
- }
443
-
444
- function closeMenu() {
445
- clearTimeout(opacityTimeout);
446
- document.body.style.overflowY = "auto";
447
- overlay.style.opacity = "0";
448
- isOverlayVisible = false;
449
- document.body.removeChild(overlay);
450
- hamburgerBarElt.classList.remove("opened");
451
- }
@@ -1,99 +0,0 @@
1
- /*
2
-
3
- github.com style (c) Vasily Polovnyov <vast@whiteants.net>
4
-
5
- */
6
-
7
- .hljs {
8
- display: block;
9
- overflow-x: auto;
10
- padding: 0.5em;
11
- color: #333;
12
- background: #f8f8f8;
13
- }
14
-
15
- .hljs-comment,
16
- .hljs-quote {
17
- color: #998;
18
- font-style: italic;
19
- }
20
-
21
- .hljs-keyword,
22
- .hljs-selector-tag,
23
- .hljs-subst {
24
- color: #333;
25
- font-weight: bold;
26
- }
27
-
28
- .hljs-number,
29
- .hljs-literal,
30
- .hljs-variable,
31
- .hljs-template-variable,
32
- .hljs-tag .hljs-attr {
33
- color: #008080;
34
- }
35
-
36
- .hljs-string,
37
- .hljs-doctag {
38
- color: #d14;
39
- }
40
-
41
- .hljs-title,
42
- .hljs-section,
43
- .hljs-selector-id {
44
- color: #900;
45
- font-weight: bold;
46
- }
47
-
48
- .hljs-subst {
49
- font-weight: normal;
50
- }
51
-
52
- .hljs-type,
53
- .hljs-class .hljs-title {
54
- color: #458;
55
- font-weight: bold;
56
- }
57
-
58
- .hljs-tag,
59
- .hljs-name,
60
- .hljs-attribute {
61
- color: #000080;
62
- font-weight: normal;
63
- }
64
-
65
- .hljs-regexp,
66
- .hljs-link {
67
- color: #009926;
68
- }
69
-
70
- .hljs-symbol,
71
- .hljs-bullet {
72
- color: #990073;
73
- }
74
-
75
- .hljs-built_in,
76
- .hljs-builtin-name {
77
- color: #0086b3;
78
- }
79
-
80
- .hljs-meta {
81
- color: #999;
82
- font-weight: bold;
83
- }
84
-
85
- .hljs-deletion {
86
- background: #fdd;
87
- }
88
-
89
- .hljs-addition {
90
- background: #dfd;
91
- }
92
-
93
- .hljs-emphasis {
94
- font-style: italic;
95
- }
96
-
97
- .hljs-strong {
98
- font-weight: bold;
99
- }