@jsenv/plugin-toolbar 0.0.1 → 0.1.1

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 (165) hide show
  1. package/dist/css/{toolbar_main.css → toolbar.css} +285 -319
  2. package/dist/html/toolbar.html +91 -80
  3. package/dist/js/toolbar_core.js +1792 -0
  4. package/dist/js/toolbar_injector.js +60 -121
  5. package/dist/jsenv_plugin_toolbar.js +18 -12
  6. package/package.json +10 -3
  7. package/src/client/core/animation_actions.js +8 -0
  8. package/src/client/core/animation_effects.js +12 -0
  9. package/src/client/core/animation_signals.js +12 -0
  10. package/src/client/core/changes_actions.js +9 -0
  11. package/src/client/core/changes_signals.js +3 -0
  12. package/src/client/core/execution_actions.js +50 -0
  13. package/src/client/core/execution_effects.js +22 -0
  14. package/src/client/core/execution_signals.js +19 -0
  15. package/src/client/core/notification_actions.js +71 -0
  16. package/src/client/core/notification_context.js +1 -0
  17. package/src/client/core/notification_effects.js +11 -0
  18. package/src/client/core/notification_signals.js +13 -0
  19. package/src/client/{communication/parent_window_communication.js → core/parent_window_actions.js} +10 -0
  20. package/src/client/core/parent_window_context.js +7 -0
  21. package/src/client/core/parent_window_effects.js +20 -0
  22. package/src/client/core/parent_window_signals.js +34 -0
  23. package/src/client/core/server_actions.js +9 -0
  24. package/src/client/core/server_effects.js +11 -0
  25. package/src/client/core/server_signals.js +12 -0
  26. package/src/client/core/settings_actions.js +9 -0
  27. package/src/client/core/settings_signals.js +3 -0
  28. package/src/client/core/theme_actions.js +9 -0
  29. package/src/client/core/theme_effects.js +8 -0
  30. package/src/client/core/theme_signals.js +12 -0
  31. package/src/client/core/toolbar_logger.js +29 -0
  32. package/src/client/core/toolbar_open_actions.js +9 -0
  33. package/src/client/core/toolbar_open_effects.js +5 -0
  34. package/src/client/core/toolbar_open_signals.js +12 -0
  35. package/src/client/core/toolbar_state_context.js +5 -0
  36. package/src/client/core/toolbar_state_effects.js +10 -0
  37. package/src/client/core/toolbar_state_signals.js +20 -0
  38. package/src/client/core/tooltip_actions.js +7 -0
  39. package/src/client/toolbar.html +116 -89
  40. package/src/client/toolbar_core.js +8 -0
  41. package/src/client/toolbar_injector.js +64 -39
  42. package/src/client/ui/changes_indicator/changes_indicator.js +66 -0
  43. package/src/client/{execution/execution.css → ui/document_execution_indicator/document_execution_indicator.css} +10 -14
  44. package/src/client/ui/document_execution_indicator/document_execution_indicator.js +66 -0
  45. package/src/client/ui/document_index_link/document_index_link.js +8 -0
  46. package/src/client/ui/globals.css +103 -0
  47. package/src/client/{jsenv_logo.svg → ui/jsenv_logo.svg} +0 -0
  48. package/src/client/{eventsource/eventsource.css → ui/server_indicator/server_indicator.css} +14 -24
  49. package/src/client/ui/server_indicator/server_indicator.js +62 -0
  50. package/src/client/ui/toolbar.css +76 -0
  51. package/src/client/ui/toolbar_close_button/toolbar_close_button.js +15 -0
  52. package/src/client/{responsive/overflow_menu.css → ui/toolbar_menu_overflow/toolbar_menu_overflow.css} +10 -11
  53. package/src/client/{responsive/toolbar_responsive.js → ui/toolbar_menu_overflow/toolbar_menu_overflow.js} +25 -31
  54. package/src/client/ui/toolbar_opening/toolbar_opening.js +73 -0
  55. package/src/client/ui/toolbar_overlay/toolbar_overlay.js +76 -0
  56. package/src/client/{theme → ui/toolbar_settings}/jsenv_theme.css +6 -6
  57. package/src/client/{theme/light_theme.css → ui/toolbar_settings/theme_light.css} +9 -10
  58. package/src/client/ui/toolbar_settings/toolbar_animation_setting.js +27 -0
  59. package/src/client/ui/toolbar_settings/toolbar_autoreload_setting.js +79 -0
  60. package/src/client/ui/toolbar_settings/toolbar_notification_setting.js +88 -0
  61. package/src/client/{settings/settings.css → ui/toolbar_settings/toolbar_settings.css} +24 -23
  62. package/src/client/ui/toolbar_settings/toolbar_settings.js +54 -0
  63. package/src/client/ui/toolbar_settings/toolbar_theme_setting.js +17 -0
  64. package/src/client/ui/toolbar_ui.js +21 -0
  65. package/src/client/{tooltip/tooltip.css → ui/tooltips/tooltips.css} +13 -7
  66. package/src/client/{util → ui/util}/animation.js +0 -0
  67. package/src/client/ui/util/dom.js +57 -0
  68. package/src/client/{util → ui/util}/fetch_using_xhr.js +0 -0
  69. package/src/client/{util → ui/util}/fetching.js +0 -0
  70. package/src/client/{util → ui/util}/iframe_to_parent_href.js +0 -0
  71. package/src/client/{util → ui/util}/responsive.js +0 -0
  72. package/src/client/{util → ui/util}/util.js +0 -0
  73. package/src/client/{variant → ui}/variant.js +0 -0
  74. package/src/jsenv_plugin_toolbar.js +19 -7
  75. package/dist/js/toolbar_main.js +0 -900
  76. package/scripts/build.mjs +0 -20
  77. package/src/client/animation/toolbar_animation_core.js +0 -30
  78. package/src/client/animation/toolbar_animation_ui.js +0 -21
  79. package/src/client/eventsource/toolbar_eventsource.js +0 -57
  80. package/src/client/execution/toolbar_execution.js +0 -88
  81. package/src/client/focus/focus.css +0 -61
  82. package/src/client/focus/toolbar_focus.js +0 -19
  83. package/src/client/notification/toolbar_notification.js +0 -181
  84. package/src/client/settings/toolbar_settings.js +0 -47
  85. package/src/client/theme/toolbar_theme.js +0 -34
  86. package/src/client/toolbar_main.css +0 -173
  87. package/src/client/toolbar_main.js +0 -174
  88. package/src/client/toolbar_state.js +0 -16
  89. package/src/client/tooltip/tooltip.js +0 -39
  90. package/src/client/util/dom.js +0 -108
  91. package/src/client/util/jsenv_logger.js +0 -28
  92. package/src/client/util/preferences.js +0 -10
  93. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/ast/src/html/html_src_set.js +0 -18
  94. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation.js +0 -45
  95. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation.js.map +0 -12
  96. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation_core.js +0 -32
  97. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation_core.js.map +0 -12
  98. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation_ui.js +0 -23
  99. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation_ui.js.map +0 -12
  100. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/communication/parent_window_communication.js +0 -33
  101. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/eventsource/eventsource.css +0 -87
  102. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/eventsource/toolbar_eventsource.js +0 -59
  103. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/eventsource/toolbar_eventsource.js.map +0 -12
  104. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/execution/execution.css +0 -88
  105. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/execution/toolbar_execution.js +0 -90
  106. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/execution/toolbar_execution.js.map +0 -12
  107. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/focus/focus.css +0 -28
  108. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/focus/toolbar_focus.js +0 -19
  109. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/jsenv_logo.svg +0 -140
  110. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/notification/toolbar_notification.js +0 -183
  111. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/notification/toolbar_notification.js.map +0 -12
  112. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/responsive/overflow_menu.css +0 -60
  113. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/responsive/toolbar_responsive.js +0 -105
  114. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/responsive/toolbar_responsive.js.map +0 -12
  115. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/settings/settings.css +0 -200
  116. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/settings/toolbar_settings.js +0 -49
  117. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/settings/toolbar_settings.js.map +0 -12
  118. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/theme/light_theme.css +0 -110
  119. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/theme/toolbar_theme.js +0 -36
  120. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/theme/toolbar_theme.js.map +0 -12
  121. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar.html +0 -319
  122. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_injector.js +0 -232
  123. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_injector.js.map +0 -12
  124. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_main.css +0 -161
  125. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_main.css.map +0 -12
  126. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_main.js +0 -176
  127. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_main.js.map +0 -12
  128. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_state.js +0 -18
  129. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_state.js.map +0 -12
  130. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/tooltip/tooltip.css +0 -60
  131. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/tooltip/tooltip.js +0 -41
  132. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/tooltip/tooltip.js.map +0 -12
  133. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/animation.js +0 -307
  134. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/animation.js.map +0 -12
  135. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/dom.js +0 -108
  136. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/iframe_to_parent_href.js +0 -10
  137. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/preferences.js +0 -10
  138. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/responsive.js +0 -112
  139. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/variant/variant.js +0 -74
  140. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/autoreload.js +0 -201
  141. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/autoreload.js.map +0 -12
  142. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/autoreload_preference.js +0 -11
  143. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/reload.js +0 -138
  144. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/reload.js.map +0 -12
  145. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/url_helpers.js +0 -20
  146. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html +0 -590
  147. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L15C5-L20C12.js +0 -7
  148. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L15C5-L20C12.js.map +0 -12
  149. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L368C5-L481C14.js +0 -114
  150. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L482C5-L605C14.js +0 -124
  151. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L69C5-L299C13.css +0 -227
  152. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L8C5-L68C13.css +0 -28
  153. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/import_meta_hot/client/import_meta_hot.js +0 -82
  154. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/ribbon/client/ribbon.js +0 -51
  155. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/connection_manager.js +0 -165
  156. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/events_manager.js +0 -75
  157. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/server_events_client.js +0 -20
  158. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/server_events_client.js.map +0 -12
  159. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/web_socket_connection.js +0 -83
  160. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/web_socket_connection.js.map +0 -12
  161. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/supervisor/client/script_type_module_supervisor.js +0 -98
  162. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/supervisor/client/supervisor.js +0 -966
  163. package/tests/toolbar_basic/main.html +0 -18
  164. package/tests/toolbar_basic/start_dev_server.mjs +0 -7
  165. package/todo.txt +0 -0
@@ -1,8 +1,14 @@
1
- import { setAttributes, setStyles } from "./util/dom.js"
2
-
3
- const jsenvLogoSvgUrl = new URL("./jsenv_logo.svg", import.meta.url)
4
-
5
- export const injectToolbar = async ({ toolbarUrl, logs = false }) => {
1
+ const jsenvLogoSvgUrl = new URL("./ui/jsenv_logo.svg", import.meta.url)
2
+
3
+ export const injectToolbar = async ({
4
+ toolbarUrl,
5
+ logLevel,
6
+ theme,
7
+ opened,
8
+ autoreload,
9
+ animationsEnabled,
10
+ notificationsEnabled,
11
+ }) => {
6
12
  if (document.readyState !== "complete") {
7
13
  await new Promise((resolve) => {
8
14
  window.addEventListener("load", resolve)
@@ -18,13 +24,11 @@ export const injectToolbar = async ({ toolbarUrl, logs = false }) => {
18
24
  const placeholder = getToolbarPlaceholder()
19
25
 
20
26
  const iframe = document.createElement("iframe")
21
- setAttributes(iframe, {
22
- tabindex: -1,
23
- // sandbox: "allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation",
24
- // allow: "accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; microphone; midi; payment; vr",
25
- allowtransparency: true,
26
- })
27
- setStyles(iframe, {
27
+ iframe.setAttribute("tabindex", -1)
28
+ iframe.setAttribute("allowtransparency", true)
29
+ // sandbox: "allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation",
30
+ // allow: "accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; microphone; midi; payment; vr",
31
+ Object.assign(iframe.style, {
28
32
  "position": "fixed",
29
33
  "zIndex": 1000,
30
34
  "bottom": 0,
@@ -33,42 +37,61 @@ export const injectToolbar = async ({ toolbarUrl, logs = false }) => {
33
37
  "height": 0,
34
38
  /* ensure toolbar children are not focusable when hidden */
35
39
  "visibility": "hidden",
36
- "transition-duration": "300ms",
40
+ "transition-duration": "0",
37
41
  "transition-property": "height, visibility",
38
42
  "border": "none",
39
43
  })
40
44
  const iframeLoadedPromise = iframeToLoadedPromise(iframe)
45
+ const toolbarUrlObject = new URL(toolbarUrl, window.location.href)
46
+ toolbarUrlObject.searchParams.set("logLevel", logLevel)
47
+ toolbarUrlObject.searchParams.set("theme", theme)
48
+ if (opened) {
49
+ toolbarUrlObject.searchParams.set("opened", "")
50
+ }
51
+ if (autoreload) {
52
+ toolbarUrlObject.searchParams.set("autoreload", "")
53
+ }
54
+ if (animationsEnabled) {
55
+ toolbarUrlObject.searchParams.set("animationsEnabled", "")
56
+ }
57
+ if (notificationsEnabled) {
58
+ toolbarUrlObject.searchParams.set("notificationsEnabled", "")
59
+ }
41
60
  // set iframe src BEFORE putting it into the DOM (prevent firefox adding an history entry)
42
- iframe.setAttribute("src", toolbarUrl)
61
+ iframe.setAttribute("src", toolbarUrlObject.href)
62
+ iframe.name = "jsenv toolbar"
43
63
  placeholder.parentNode.replaceChild(iframe, placeholder)
44
64
 
45
65
  const listenToolbarStateChange = (callback) => {
46
66
  return addToolbarEventCallback(iframe, "toolbar_state_change", callback)
47
67
  }
48
68
 
49
- listenToolbarStateChange(({ animationsEnabled }) => {
50
- if (animationsEnabled) {
51
- iframe.style.transitionDuration = "300ms"
52
- } else {
53
- iframe.style.transitionDuration = "0s"
54
- }
55
- })
56
- const cleanupRenderOnFirstStateChange = listenToolbarStateChange(() => {
57
- cleanupRenderOnFirstStateChange()
58
- sendCommandToToolbar(iframe, "renderToolbar", { logs })
59
- })
60
-
61
- await iframeLoadedPromise
62
- iframe.removeAttribute("tabindex")
69
+ const cleanupInitOnReady = addToolbarEventCallback(
70
+ iframe,
71
+ "toolbar_ready",
72
+ () => {
73
+ cleanupInitOnReady()
74
+ sendCommandToToolbar(iframe, "initToolbar")
75
+ setTimeout(() => {
76
+ listenToolbarStateChange(({ animationsEnabled }) => {
77
+ if (animationsEnabled) {
78
+ iframe.style.transitionDuration = "300ms"
79
+ } else {
80
+ iframe.style.transitionDuration = "0s"
81
+ }
82
+ })
83
+ })
84
+ },
85
+ )
63
86
 
64
87
  const div = document.createElement("div")
65
88
  div.innerHTML = `
66
- <div id="jsenv-toolbar-trigger">
67
- <svg id="jsenv-toolbar-trigger-icon">
89
+ <div id="jsenv_toolbar_trigger" style="display:none">
90
+ <svg id="jsenv_toolbar_trigger_icon">
68
91
  <use xlink:href="${jsenvLogoSvgUrl}#jsenv_logo"></use>
69
92
  </svg>
70
93
  <style>
71
- #jsenv-toolbar-trigger {
94
+ #jsenv_toolbar_trigger {
72
95
  display: block;
73
96
  overflow: hidden;
74
97
  position: fixed;
@@ -88,22 +111,22 @@ export const injectToolbar = async ({ toolbarUrl, logs = false }) => {
88
111
  transition: 600ms;
89
112
  }
90
113
 
91
- #jsenv-toolbar-trigger:hover {
114
+ #jsenv_toolbar_trigger:hover {
92
115
  cursor: pointer;
93
116
  }
94
117
 
95
- #jsenv-toolbar-trigger[data-expanded] {
118
+ #jsenv_toolbar_trigger[data-expanded] {
96
119
  bottom: 0;
97
120
  }
98
121
 
99
- #jsenv-toolbar-trigger-icon {
122
+ #jsenv_toolbar_trigger_icon {
100
123
  width: 35px;
101
124
  height: 35px;
102
125
  opacity: 0;
103
126
  transition: 600ms;
104
127
  }
105
128
 
106
- #jsenv-toolbar-trigger[data-expanded] #jsenv-toolbar-trigger-icon {
129
+ #jsenv_toolbar_trigger[data-expanded] #jsenv_toolbar_trigger_icon {
107
130
  opacity: 1;
108
131
  }
109
132
  </style>
@@ -130,7 +153,7 @@ export const injectToolbar = async ({ toolbarUrl, logs = false }) => {
130
153
  collapseToolbarTrigger()
131
154
  }
132
155
  toolbarTrigger.onclick = () => {
133
- sendCommandToToolbar(iframe, "showToolbar")
156
+ sendCommandToToolbar(iframe, "openToolbar")
134
157
  }
135
158
 
136
159
  const showToolbarTrigger = () => {
@@ -149,15 +172,17 @@ export const injectToolbar = async ({ toolbarUrl, logs = false }) => {
149
172
  toolbarTrigger.removeAttribute("data-expanded", "")
150
173
  }
151
174
 
152
- hideToolbarTrigger()
153
- listenToolbarStateChange(({ visible }) => {
154
- if (visible) {
175
+ listenToolbarStateChange(({ opened }) => {
176
+ if (opened) {
155
177
  hideToolbarTrigger()
156
178
  } else {
157
179
  showToolbarTrigger()
158
180
  }
159
181
  })
160
182
 
183
+ await iframeLoadedPromise
184
+ iframe.removeAttribute("tabindex")
185
+
161
186
  return iframe
162
187
  }
163
188
 
@@ -0,0 +1,66 @@
1
+ import { effect } from "@preact/signals"
2
+
3
+ import { parentWindowReloader } from "../../core/parent_window_context.js"
4
+ import {
5
+ autoreloadEnabledSignal,
6
+ changesSignal,
7
+ } from "../../core/parent_window_signals.js"
8
+ import { changesTooltipOpenedSignal } from "../../core/changes_signals.js"
9
+ import {
10
+ openChangesToolip,
11
+ closeChangesToolip,
12
+ } from "../../core/changes_actions.js"
13
+ import { enableVariant } from "../variant.js"
14
+
15
+ const changesIndicator = document.querySelector("#changes_indicator")
16
+
17
+ export const renderChangesIndicator = () => {
18
+ effect(() => {
19
+ const autoreloadEnabled = autoreloadEnabledSignal.value
20
+ const changes = changesSignal.value
21
+ const changeCount = changes.length
22
+ enableVariant(changesIndicator, {
23
+ changes: !autoreloadEnabled && changeCount ? "yes" : "no",
24
+ })
25
+ if (changeCount) {
26
+ changesIndicator.querySelector(".tooltip_text").innerHTML =
27
+ computeTooltipText({ changes })
28
+ changesIndicator.querySelector(".tooltip_text a").onclick = () => {
29
+ // eslint-disable-next-line no-alert
30
+ window.alert(JSON.stringify(changes, null, " "))
31
+ console.log(changes)
32
+ }
33
+ changesIndicator.querySelector(".changes_text").innerHTML = changeCount
34
+ }
35
+ })
36
+
37
+ changesIndicator.querySelector(".tooltip_action").onclick = () => {
38
+ parentWindowReloader.reload()
39
+ }
40
+
41
+ effect(() => {
42
+ const changesTooltipOpened = changesTooltipOpenedSignal.value
43
+ if (changesTooltipOpened) {
44
+ changesIndicator.setAttribute("data-tooltip-visible", "")
45
+ } else {
46
+ changesIndicator.removeAttribute("data-tooltip-visible")
47
+ }
48
+ })
49
+ const button = changesIndicator.querySelector("button")
50
+ button.onclick = () => {
51
+ const changesTooltipOpened = changesTooltipOpenedSignal.value
52
+ if (changesTooltipOpened) {
53
+ closeChangesToolip()
54
+ } else {
55
+ openChangesToolip()
56
+ }
57
+ }
58
+ }
59
+
60
+ const computeTooltipText = ({ changes }) => {
61
+ const changesCount = changes.length
62
+ if (changesCount === 1) {
63
+ return `There is <a href="javascript:void(0)">1</a> change to apply`
64
+ }
65
+ return `There is <a href="javascript:void(0)">${changesCount}<a> changes to apply`
66
+ }
@@ -1,12 +1,11 @@
1
- /* Loader icon */
2
- #loader-icon {
1
+ #execution_pending_icon {
3
2
  width: 20px;
4
3
  height: 20px;
5
4
  margin: 10px;
6
5
  transform: scaleX(-1);
7
6
  color: #cecece;
8
7
  }
9
- #loader-icon[data-animate] {
8
+ #execution_pending_icon[data-animate] {
10
9
  opacity: 0;
11
10
  transform-origin: center;
12
11
  animation: rotateLoader 1s linear infinite !important;
@@ -25,18 +24,16 @@
25
24
  }
26
25
  }
27
26
 
28
- /* Check icon */
29
- #check-icon {
27
+ #execution_completed_icon {
30
28
  width: 25px;
31
29
  height: 25px;
32
- margin: 7px;
33
30
  opacity: 0;
34
31
  stroke-width: 5;
35
32
  }
36
- #check-icon[data-animate] {
33
+ #execution_completed_icon[data-animate] {
37
34
  opacity: 1;
38
35
  }
39
- #check-icon[data-animate] path {
36
+ #execution_completed_icon[data-animate] path {
40
37
  transform-origin: 50% 50%;
41
38
  stroke-dasharray: 48;
42
39
  stroke-dashoffset: 48;
@@ -49,26 +46,25 @@
49
46
  }
50
47
  }
51
48
 
52
- /* Cross icon */
53
- #cross-icon {
49
+ #execution_failed_icon {
54
50
  width: 20px;
55
51
  height: 20px;
56
52
  margin: 10px;
57
53
  opacity: 0;
58
54
  stroke-width: 5;
59
55
  }
60
- #cross-icon rect {
56
+ #execution_failed_icon rect {
61
57
  width: 33px;
62
58
  height: 0;
63
59
  fill: #d74640;
64
60
  }
65
- #cross-icon[data-animate] {
61
+ #execution_failed_icon[data-animate] {
66
62
  opacity: 1;
67
63
  }
68
- #cross-icon[data-animate] #cross_p1 {
64
+ #execution_failed_icon[data-animate] #cross_p1 {
69
65
  animation: draw 0.5s cubic-bezier(0.65, 0, 0.45, 1) forwards;
70
66
  }
71
- #cross-icon[data-animate] #cross_p2 {
67
+ #execution_failed_icon[data-animate] #cross_p2 {
72
68
  animation: draw 0.5s cubic-bezier(0.65, 0, 0.45, 1) forwards 0.2s;
73
69
  }
74
70
  @keyframes draw {
@@ -0,0 +1,66 @@
1
+ import { effect } from "@preact/signals"
2
+
3
+ import {
4
+ executionSignal,
5
+ executionTooltipOpenedSignal,
6
+ } from "../../core/execution_signals.js"
7
+ import {
8
+ closeExecutionTooltip,
9
+ openExecutionTooltip,
10
+ } from "../../core/execution_actions.js"
11
+ import { removeForceHideElement } from "../util/dom.js"
12
+ import { enableVariant } from "../variant.js"
13
+
14
+ const executionIndicator = document.querySelector(
15
+ "#document_execution_indicator",
16
+ )
17
+
18
+ export const renderDocumentExecutionIndicator = async () => {
19
+ removeForceHideElement(
20
+ document.querySelector("#document_execution_indicator"),
21
+ )
22
+ effect(() => {
23
+ const execution = executionSignal.value
24
+ updateExecutionIndicator(execution)
25
+ })
26
+ effect(() => {
27
+ const executionTooltipOpened = executionTooltipOpenedSignal.value
28
+ if (executionTooltipOpened) {
29
+ executionIndicator.setAttribute("data-tooltip-visible", "")
30
+ } else {
31
+ executionIndicator.removeAttribute("data-tooltip-visible")
32
+ }
33
+ })
34
+ }
35
+
36
+ const updateExecutionIndicator = ({ status, startTime, endTime } = {}) => {
37
+ enableVariant(executionIndicator, { execution: status })
38
+ const variantNode = executionIndicator.querySelector("[data-when-active]")
39
+ variantNode.querySelector("button").onclick = () => {
40
+ const executionTooltipOpened = executionTooltipOpenedSignal.value
41
+ if (executionTooltipOpened) {
42
+ closeExecutionTooltip()
43
+ } else {
44
+ openExecutionTooltip()
45
+ }
46
+ }
47
+ variantNode.querySelector(".tooltip").textContent = computeText({
48
+ status,
49
+ startTime,
50
+ endTime,
51
+ })
52
+ }
53
+
54
+ // relative time: https://github.com/tc39/proposal-intl-relative-time/issues/118
55
+ const computeText = ({ status, startTime, endTime }) => {
56
+ if (status === "completed") {
57
+ return `Execution completed in ${endTime - startTime}ms`
58
+ }
59
+ if (status === "errored") {
60
+ return `Execution failed in ${endTime - startTime}ms`
61
+ }
62
+ if (status === "running") {
63
+ return "Executing..."
64
+ }
65
+ return ""
66
+ }
@@ -0,0 +1,8 @@
1
+ import { setLinkHrefForParentWindow } from "../util/iframe_to_parent_href.js"
2
+
3
+ export const renderDocumentIndexLink = () => {
4
+ setLinkHrefForParentWindow(
5
+ document.querySelector("#document_index_link"),
6
+ "/",
7
+ )
8
+ }
@@ -0,0 +1,103 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+ html,
5
+ body {
6
+ margin: 0;
7
+ padding: 0;
8
+ height: 100%;
9
+ }
10
+ html {
11
+ font-family: arial, sans;
12
+ }
13
+
14
+ /* global utils */
15
+ html[data-animation-disabled] * {
16
+ transition: none !important;
17
+ animation-duration: 0s !important;
18
+ animation-delay: 0s !important;
19
+ }
20
+ [data-when] {
21
+ display: none !important;
22
+ }
23
+ [data-force-hide] {
24
+ display: none !important;
25
+ }
26
+
27
+ /* focus rules */
28
+ button:focus,
29
+ a:focus,
30
+ input:focus,
31
+ *[data-contains-hidden-input] input:focus + * {
32
+ outline-style: none;
33
+ outline-offset: -2px;
34
+ }
35
+
36
+ *[data-contains-hidden-input] input:focus + * {
37
+ outline-width: 4px;
38
+ outline-offset: -2px;
39
+ }
40
+
41
+ button:focus-visible,
42
+ a:focus-visible,
43
+ input:focus-visible,
44
+ *[data-contains-hidden-input] input:focus-visible + * {
45
+ outline-style: auto;
46
+ }
47
+
48
+ *[data-contains-hidden-input] input:focus-visible + * {
49
+ outline-color: rgb(0, 150, 255);
50
+ }
51
+
52
+ /*
53
+ Don't try to replace @-moz-document url-prefix() this by
54
+
55
+ -moz-outline or -moz-outline-color
56
+ Because firefox would take into account outline instead of -moz-outline
57
+
58
+ :moz-focus-ring
59
+ Because for some element we set the focus outline on a div which would not match :focusring
60
+ */
61
+ @-moz-document url-prefix() {
62
+ button:focus-visible,
63
+ a:focus-visible,
64
+ input:focus-visible,
65
+ *[data-input-customized] input:focus-visible + * {
66
+ outline-width: 2px;
67
+ outline-offset: 0;
68
+ outline-style: solid;
69
+ /*
70
+ force a blue color for firefox otherwise
71
+ it uses outline-color: inherit
72
+ making it unpredictible and sometimes hard to see
73
+ */
74
+ outline-color: rgb(0, 150, 255);
75
+ }
76
+ }
77
+ ::-moz-focus-inner {
78
+ border: 0;
79
+ }
80
+
81
+ /* Layout */
82
+ #toolbar_wrapper {
83
+ display: flex;
84
+ justify-content: center;
85
+ }
86
+
87
+ #toolbar_overlay {
88
+ position: fixed;
89
+ left: 0;
90
+ top: 0;
91
+ width: 100%;
92
+ height: 100%;
93
+ filter: url(#better-blur);
94
+ background-color: rgba(0, 0, 0, 0.2);
95
+ }
96
+
97
+ #toolbar {
98
+ position: fixed;
99
+ bottom: 0;
100
+ height: 40px;
101
+ width: 100%;
102
+ background: #404040;
103
+ }
File without changes
@@ -1,13 +1,13 @@
1
- #eventsource-indicator button {
1
+ #server_indicator button {
2
2
  position: relative;
3
3
  }
4
4
 
5
- #eventsource-indicator button svg {
5
+ #server_indicator button svg {
6
6
  width: 40px;
7
7
  height: 40px;
8
8
  }
9
9
 
10
- #eventsource-indicator .event-source-autoreload {
10
+ #server_indicator .autoreload {
11
11
  position: absolute;
12
12
  width: 32px;
13
13
  height: 32px;
@@ -15,31 +15,24 @@
15
15
  left: 0;
16
16
  top: 0;
17
17
  }
18
-
19
- .event-source-autoreload[data-variant="enabled"] {
18
+ .autoreload[data-variant="enabled"] {
20
19
  color: green;
21
20
  }
22
21
 
23
- #eventsource-indicator .event-source-icon {
22
+ #server_indicator .icon {
24
23
  width: 40px;
25
24
  height: 40px;
26
25
  }
27
26
 
28
- .eventsource-circle {
27
+ .server_indicator_circle {
29
28
  stroke: black;
30
29
  stroke-width: 0;
31
30
  }
32
-
33
- .eventsource-circle[data-variant="off"] {
34
- fill: #cecece;
35
- }
36
-
37
- .eventsource-circle[data-variant="connecting"] {
31
+ .server_indicator_circle[data-variant="connecting"] {
38
32
  fill: #cecece;
39
33
  animation: wink 1.2s ease-out infinite;
40
34
  transform-origin: center;
41
35
  }
42
-
43
36
  @keyframes wink {
44
37
  0% {
45
38
  opacity: 0;
@@ -51,15 +44,20 @@
51
44
  opacity: 0;
52
45
  }
53
46
  }
47
+ .server_indicator_circle[data-variant="connected"] {
48
+ fill: green;
49
+ }
50
+ .server_indicator_circle[data-variant="closed"] {
51
+ fill: #cc0000;
52
+ }
54
53
 
55
- .eventsource-ring {
54
+ .server_indicator_ring {
56
55
  stroke: rgba(206, 206, 206, 0.46);
57
56
  stroke-width: 4;
58
57
  fill: transparent;
59
58
  animation: pulse 1.2s ease-out infinite;
60
59
  transform-origin: center;
61
60
  }
62
-
63
61
  @keyframes pulse {
64
62
  0% {
65
63
  transform: scale(0);
@@ -73,11 +71,3 @@
73
71
  opacity: 0;
74
72
  }
75
73
  }
76
-
77
- .eventsource-circle[data-variant="connected"] {
78
- fill: green;
79
- }
80
-
81
- .eventsource-circle[data-variant="failed"] {
82
- fill: #cc0000;
83
- }
@@ -0,0 +1,62 @@
1
+ import { effect } from "@preact/signals"
2
+
3
+ import {
4
+ serverConnectionSignal,
5
+ serverTooltipOpenedSignal,
6
+ } from "../../core/server_signals.js"
7
+ import {
8
+ openServerTooltip,
9
+ closeServerTooltip,
10
+ } from "../../core/server_actions.js"
11
+ import { removeForceHideElement } from "../util/dom.js"
12
+ import { enableVariant } from "../variant.js"
13
+
14
+ const parentServerEvents = window.parent.__server_events__
15
+ const serverEvents = window.__server_events__
16
+ const serverIndicator = document.querySelector("#server_indicator")
17
+
18
+ export const renderServerIndicator = () => {
19
+ removeForceHideElement(document.querySelector("#server_indicator"))
20
+ effect(() => {
21
+ const serverConnection = serverConnectionSignal.value
22
+ updateServerIndicator(serverConnection)
23
+ })
24
+ effect(() => {
25
+ const serverTooltipOpened = serverTooltipOpenedSignal.value
26
+ if (serverTooltipOpened) {
27
+ serverIndicator.setAttribute("data-tooltip-visible", "")
28
+ } else {
29
+ serverIndicator.removeAttribute("data-tooltip-visible")
30
+ }
31
+ })
32
+ }
33
+
34
+ const updateServerIndicator = (connectionState) => {
35
+ enableVariant(serverIndicator, { connectionState })
36
+ const variantNode = document.querySelector(
37
+ "#server_indicator > [data-when-active]",
38
+ )
39
+ variantNode.querySelector("button").onclick = () => {
40
+ const serverTooltipOpened = serverTooltipOpenedSignal.value
41
+ if (serverTooltipOpened) {
42
+ closeServerTooltip()
43
+ } else {
44
+ openServerTooltip()
45
+ }
46
+ }
47
+ if (connectionState === "connecting") {
48
+ variantNode.querySelector("a").onclick = () => {
49
+ if (parentServerEvents) {
50
+ parentServerEvents.disconnect()
51
+ }
52
+ serverEvents.disconnect()
53
+ }
54
+ } else if (connectionState === "closed") {
55
+ variantNode.querySelector("a").onclick = () => {
56
+ if (parentServerEvents) {
57
+ parentServerEvents.connect()
58
+ }
59
+ serverEvents.connect()
60
+ }
61
+ }
62
+ }