@jsenv/core 23.1.3 → 23.2.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 (82) hide show
  1. package/dist/jsenv_browser_system.js +36 -99
  2. package/dist/jsenv_browser_system.js.map +12 -21
  3. package/dist/jsenv_compile_proxy.js +18 -82
  4. package/dist/jsenv_compile_proxy.js.map +11 -21
  5. package/dist/jsenv_exploring_index.js +127 -274
  6. package/dist/jsenv_exploring_index.js.map +76 -90
  7. package/dist/jsenv_exploring_redirector.js +21 -89
  8. package/dist/jsenv_exploring_redirector.js.map +13 -25
  9. package/dist/jsenv_toolbar.js +81 -149
  10. package/dist/jsenv_toolbar.js.map +50 -61
  11. package/dist/jsenv_toolbar_injector.js +185 -231
  12. package/dist/jsenv_toolbar_injector.js.map +30 -42
  13. package/package.json +8 -9
  14. package/src/abort/abortable.js +172 -0
  15. package/src/abort/callback_list.js +64 -0
  16. package/src/abort/callback_race.js +34 -0
  17. package/src/abort/cleaner.js +22 -0
  18. package/src/abort/main.js +32 -0
  19. package/src/abort/process_teardown_events.js +59 -0
  20. package/src/buildProject.js +132 -123
  21. package/src/execute.js +108 -107
  22. package/src/executeTestPlan.js +107 -125
  23. package/src/importUsingChildProcess.js +2 -1
  24. package/src/internal/browser-launcher/executeHtmlFile.js +33 -12
  25. package/src/internal/browser-utils/fetch-browser.js +4 -29
  26. package/src/internal/browser-utils/fetchUsingXHR.js +5 -7
  27. package/src/internal/building/buildUsingRollup.js +60 -24
  28. package/src/internal/building/createJsenvRollupPlugin.js +13 -31
  29. package/src/internal/building/ressource_builder.js +3 -6
  30. package/src/internal/building/sourcemap_loader.js +4 -5
  31. package/src/internal/building/url_fetcher.js +2 -5
  32. package/src/internal/building/url_loader.js +3 -6
  33. package/src/internal/compiling/compileFile.js +1 -2
  34. package/src/internal/compiling/createCompiledFileService.js +8 -9
  35. package/src/internal/compiling/startCompileServer.js +74 -135
  36. package/src/internal/executing/coverage/generateCoverageJsonFile.js +20 -3
  37. package/src/internal/executing/coverage/relativeUrlToEmptyCoverage.js +19 -30
  38. package/src/internal/executing/coverage/reportToCoverage.js +44 -24
  39. package/src/internal/executing/coverage/v8CoverageFromNodeV8Directory.js +2 -15
  40. package/src/internal/executing/createSummaryLog.js +50 -37
  41. package/src/internal/executing/executeConcurrently.js +89 -47
  42. package/src/internal/executing/executePlan.js +33 -7
  43. package/src/internal/executing/executionLogs.js +25 -28
  44. package/src/internal/executing/execution_colors.js +15 -0
  45. package/src/internal/executing/generateExecutionSteps.js +3 -2
  46. package/src/internal/executing/launchAndExecute.js +217 -261
  47. package/src/internal/exploring/fetchExploringJson.js +3 -4
  48. package/src/internal/fetchUrl.js +6 -2
  49. package/src/internal/logs/log_style.js +16 -28
  50. package/src/internal/logs/msAsDuration.js +1 -1
  51. package/src/internal/node-launcher/createChildProcessOptions.js +4 -5
  52. package/src/internal/node-launcher/createControllableNodeProcess.js +117 -229
  53. package/src/internal/node-launcher/kill_process_tree.js +76 -0
  54. package/src/internal/node-launcher/nodeControllableFile.mjs +16 -10
  55. package/src/internal/{promise_track_race.js → promise_race.js} +2 -2
  56. package/src/internal/runtime/s.js +25 -24
  57. package/src/internal/toolbar/toolbar.html +157 -61
  58. package/src/internal/toolbar/toolbar.injector.js +8 -0
  59. package/src/internal/toolbar/util/animation.js +3 -7
  60. package/src/internal/toolbar/util/fetching.js +1 -30
  61. package/src/jsenvServiceWorkerFinalizer.js +1 -2
  62. package/src/launchBrowser.js +131 -127
  63. package/src/launchNode.js +29 -17
  64. package/src/playwright_browser_versions.js +3 -3
  65. package/src/requireUsingChildProcess.js +2 -1
  66. package/src/signal/signal.js +65 -0
  67. package/src/startExploring.js +70 -72
  68. package/src/internal/executeJsenvAsyncFunction.js +0 -34
  69. package/src/internal/toolbar/animation/toolbar-movie-icon.svg +0 -15
  70. package/src/internal/toolbar/compilation/flask.svg +0 -7
  71. package/src/internal/toolbar/compilation/info.svg +0 -9
  72. package/src/internal/toolbar/compilation/loupe.svg +0 -11
  73. package/src/internal/toolbar/compilation/toolbar_compilation.svg +0 -11
  74. package/src/internal/toolbar/eventsource/toolbar-power-icon.svg +0 -10
  75. package/src/internal/toolbar/eventsource/toolbar-power-off-icon.svg +0 -10
  76. package/src/internal/toolbar/responsive/toolbar-dots-icon.svg +0 -10
  77. package/src/internal/toolbar/settings/toolbar-settings-icon.svg +0 -9
  78. package/src/internal/toolbar/theme/toolbar-palette-icon.svg +0 -10
  79. package/src/internal/toolbar/toolbar-cross-icon.svg +0 -10
  80. package/src/internal/toolbar/toolbar-loading-icon.svg +0 -102
  81. package/src/internal/toolbar/toolbar-notif-icon.svg +0 -9
  82. package/src/internal/trackRessources.js +0 -23
@@ -41,69 +41,6 @@
41
41
  return string;
42
42
  };
43
43
 
44
- var objectWithoutPropertiesLoose = (function (source, excluded) {
45
- if (source === null) return {};
46
- var target = {};
47
- var sourceKeys = Object.keys(source);
48
- var key;
49
- var i;
50
-
51
- for (i = 0; i < sourceKeys.length; i++) {
52
- key = sourceKeys[i];
53
- if (excluded.indexOf(key) >= 0) continue;
54
- target[key] = source[key];
55
- }
56
-
57
- return target;
58
- });
59
-
60
- var _objectWithoutProperties = (function (source, excluded) {
61
- if (source === null) return {};
62
- var target = objectWithoutPropertiesLoose(source, excluded);
63
- var key;
64
- var i;
65
-
66
- if (Object.getOwnPropertySymbols) {
67
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
68
-
69
- for (i = 0; i < sourceSymbolKeys.length; i++) {
70
- key = sourceSymbolKeys[i];
71
- if (excluded.indexOf(key) >= 0) continue;
72
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
73
- target[key] = source[key];
74
- }
75
- }
76
-
77
- return target;
78
- });
79
-
80
- var createCancellationToken = function createCancellationToken() {
81
- var register = function register(callback) {
82
- if (typeof callback !== "function") {
83
- throw new Error("callback must be a function, got ".concat(callback));
84
- }
85
-
86
- return {
87
- callback: callback,
88
- unregister: function unregister() {}
89
- };
90
- };
91
-
92
- var throwIfRequested = function throwIfRequested() {
93
- return undefined;
94
- };
95
-
96
- return {
97
- register: register,
98
- cancellationRequested: false,
99
- throwIfRequested: throwIfRequested
100
- };
101
- };
102
-
103
- var isCancelError = function isCancelError(value) {
104
- return value && _typeof(value) === "object" && value.name === "CANCEL_ERROR";
105
- };
106
-
107
44
  function ownKeys(object, enumerableOnly) {
108
45
  var keys = Object.keys(object);
109
46
 
@@ -142,8 +79,41 @@
142
79
  return target;
143
80
  }
144
81
 
145
- // fallback to this polyfill (or even use an existing polyfill would be better)
146
- // https://github.com/github/fetch/blob/master/fetch.js
82
+ var objectWithoutPropertiesLoose = (function (source, excluded) {
83
+ if (source === null) return {};
84
+ var target = {};
85
+ var sourceKeys = Object.keys(source);
86
+ var key;
87
+ var i;
88
+
89
+ for (i = 0; i < sourceKeys.length; i++) {
90
+ key = sourceKeys[i];
91
+ if (excluded.indexOf(key) >= 0) continue;
92
+ target[key] = source[key];
93
+ }
94
+
95
+ return target;
96
+ });
97
+
98
+ var _objectWithoutProperties = (function (source, excluded) {
99
+ if (source === null) return {};
100
+ var target = objectWithoutPropertiesLoose(source, excluded);
101
+ var key;
102
+ var i;
103
+
104
+ if (Object.getOwnPropertySymbols) {
105
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
106
+
107
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
108
+ key = sourceSymbolKeys[i];
109
+ if (excluded.indexOf(key) >= 0) continue;
110
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
111
+ target[key] = source[key];
112
+ }
113
+ }
114
+
115
+ return target;
116
+ });
147
117
 
148
118
  function _await$4(value, then, direct) {
149
119
  if (direct) {
@@ -157,7 +127,7 @@
157
127
  return then ? value.then(then) : value;
158
128
  }
159
129
 
160
- function _async$3(f) {
130
+ function _async$4(f) {
161
131
  return function () {
162
132
  for (var args = [], i = 0; i < arguments.length; i++) {
163
133
  args[i] = arguments[i];
@@ -184,10 +154,9 @@
184
154
  }
185
155
  }
186
156
 
187
- var fetchUsingXHR = _async$3(function (url) {
157
+ var fetchUsingXHR = _async$4(function (url) {
188
158
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
189
- _ref$cancellationToke = _ref.cancellationToken,
190
- cancellationToken = _ref$cancellationToke === void 0 ? createCancellationToken() : _ref$cancellationToke,
159
+ signal = _ref.signal,
191
160
  _ref$method = _ref.method,
192
161
  method = _ref$method === void 0 ? "GET" : _ref$method,
193
162
  _ref$credentials = _ref.credentials,
@@ -236,9 +205,11 @@
236
205
  bodyPromise.resolve();
237
206
  };
238
207
 
239
- cancellationToken.register(function (cancelError) {
208
+ signal.addEventListener("abort", function () {
240
209
  xhr.abort();
241
- failure(cancelError);
210
+ var abortError = new Error("aborted");
211
+ abortError.name = "AbortError";
212
+ failure(abortError);
242
213
  });
243
214
 
244
215
  xhr.onreadystatechange = function () {
@@ -311,7 +282,7 @@
311
282
  return _call$1(text, JSON.parse);
312
283
  };
313
284
 
314
- var blob = _async$3(function () {
285
+ var blob = _async$4(function () {
315
286
  if (!hasBlob) {
316
287
  throw new Error("blob not supported");
317
288
  }
@@ -348,7 +319,7 @@
348
319
  });
349
320
  };
350
321
 
351
- var formData = _async$3(function () {
322
+ var formData = _async$4(function () {
352
323
  if (!hasFormData) {
353
324
  throw new Error("formData not supported");
354
325
  }
@@ -529,7 +500,7 @@
529
500
  return form;
530
501
  };
531
502
 
532
- var blobToArrayBuffer = _async$3(function (blob) {
503
+ var blobToArrayBuffer = _async$4(function (blob) {
533
504
  var reader = new FileReader();
534
505
  var promise = fileReaderReady(reader);
535
506
  reader.readAsArrayBuffer(blob);
@@ -578,7 +549,7 @@
578
549
  return view.buffer;
579
550
  };
580
551
 
581
- var _excluded = ["cancellationToken", "mode"];
552
+ var _excluded = ["mode"];
582
553
 
583
554
  function _await$3(value, then, direct) {
584
555
  if (direct) {
@@ -592,37 +563,16 @@
592
563
  return then ? value.then(then) : value;
593
564
  }
594
565
 
595
- var fetchNative = _async$2(function (url) {
596
-
566
+ var fetchNative = _async$3(function (url) {
597
567
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
598
568
 
599
- var _ref$cancellationToke = _ref.cancellationToken,
600
- cancellationToken = _ref$cancellationToke === void 0 ? createCancellationToken() : _ref$cancellationToke,
601
- _ref$mode = _ref.mode,
569
+ var _ref$mode = _ref.mode,
602
570
  mode = _ref$mode === void 0 ? "cors" : _ref$mode,
603
571
  options = _objectWithoutProperties(_ref, _excluded);
604
572
 
605
- var abortController = new AbortController();
606
- var cancelError;
607
- cancellationToken.register(function (reason) {
608
- cancelError = reason;
609
- abortController.abort(reason);
610
- });
611
- var response;
612
- return _continue(_catch$1(function () {
613
- return _await$3(window.fetch(url, _objectSpread2({
614
- signal: abortController.signal,
615
- mode: mode
616
- }, options)), function (_window$fetch) {
617
- response = _window$fetch;
618
- });
619
- }, function (e) {
620
- if (cancelError && e.name === "AbortError") {
621
- throw cancelError;
622
- }
623
-
624
- throw e;
625
- }), function (_result) {
573
+ return _await$3(window.fetch(url, _objectSpread2({
574
+ mode: mode
575
+ }, options)), function (response) {
626
576
  return {
627
577
  url: response.url,
628
578
  status: response.status,
@@ -647,33 +597,7 @@
647
597
  });
648
598
  });
649
599
 
650
- function _catch$1(body, recover) {
651
- try {
652
- var result = body();
653
- } catch (e) {
654
- return recover(e);
655
- }
656
-
657
- if (result && result.then) {
658
- return result.then(void 0, recover);
659
- }
660
-
661
- return result;
662
- }
663
-
664
- var responseToHeaders = function responseToHeaders(response) {
665
- var headers = {};
666
- response.headers.forEach(function (value, name) {
667
- headers[name] = value;
668
- });
669
- return headers;
670
- };
671
-
672
- function _continue(value, then) {
673
- return value && value.then ? value.then(then) : then(value);
674
- }
675
-
676
- function _async$2(f) {
600
+ function _async$3(f) {
677
601
  return function () {
678
602
  for (var args = [], i = 0; i < arguments.length; i++) {
679
603
  args[i] = arguments[i];
@@ -687,6 +611,14 @@
687
611
  };
688
612
  }
689
613
 
614
+ var responseToHeaders = function responseToHeaders(response) {
615
+ var headers = {};
616
+ response.headers.forEach(function (value, name) {
617
+ headers[name] = value;
618
+ });
619
+ return headers;
620
+ };
621
+
690
622
  var fetchUrl = typeof window.fetch === "function" && typeof window.AbortController === "function" ? fetchNative : fetchUsingXHR;
691
623
 
692
624
  function _await$2(value, then, direct) {
@@ -701,7 +633,7 @@
701
633
  return then ? value.then(then) : value;
702
634
  }
703
635
 
704
- function _async$1(f) {
636
+ function _async$2(f) {
705
637
  return function () {
706
638
  for (var args = [], i = 0; i < arguments.length; i++) {
707
639
  args[i] = arguments[i];
@@ -715,7 +647,7 @@
715
647
  };
716
648
  }
717
649
 
718
- var fetchJson = _async$1(function (url) {
650
+ var fetchJson = _async$2(function (url) {
719
651
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
720
652
  return _await$2(fetchUrl(url, options), function (response) {
721
653
  return _await$2(response.json());
@@ -748,7 +680,7 @@
748
680
  return result;
749
681
  }
750
682
 
751
- function _async(f) {
683
+ function _async$1(f) {
752
684
  return function () {
753
685
  for (var args = [], i = 0; i < arguments.length; i++) {
754
686
  args[i] = arguments[i];
@@ -762,16 +694,16 @@
762
694
  };
763
695
  }
764
696
 
765
- var fetchExploringJson = _async(function () {
697
+ var fetchExploringJson = _async$1(function () {
766
698
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
767
- cancellationToken = _ref.cancellationToken;
699
+ signal = _ref.signal;
768
700
 
769
701
  return _catch(function () {
770
702
  return _await$1(fetchJson("/.jsenv/exploring.json", {
771
- cancellationToken: cancellationToken
703
+ signal: signal
772
704
  }));
773
705
  }, function (e) {
774
- if (isCancelError(e)) {
706
+ if (signal && signal.aborted && e.name === "AbortError") {
775
707
  throw e;
776
708
  }
777
709
 
@@ -929,116 +861,138 @@
929
861
  }
930
862
  }
931
863
 
932
- window.__jsenv_eventsource__ = connectLivereload();
864
+ function _async(f) {
865
+ return function () {
866
+ for (var args = [], i = 0; i < arguments.length; i++) {
867
+ args[i] = arguments[i];
868
+ }
933
869
 
934
- var injectToolbar = function injectToolbar() {
935
- return _call(fetchExploringJson, function (_ref4) {
936
- var jsenvDirectoryRelativeUrl = _ref4.jsenvDirectoryRelativeUrl;
937
- var jsenvDirectoryServerUrl = resolveUrl(jsenvDirectoryRelativeUrl, document.location.origin);
938
- var placeholder = getToolbarPlaceholder();
939
- var iframe = document.createElement("iframe");
940
- setAttributes(iframe, {
941
- tabindex: -1,
942
- // sandbox: "allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation",
943
- // allow: "accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; microphone; midi; payment; vr",
944
- allowtransparency: true
945
- });
946
- setStyles(iframe, {
947
- "position": "fixed",
948
- "zIndex": 1000,
949
- "bottom": 0,
950
- "left": 0,
951
- "width": "100%",
952
- "height": 0,
953
-
954
- /* ensure toolbar children are not focusable when hidden */
955
- "visibility": "hidden",
956
- "transition-duration": "300ms",
957
- "transition-property": "height, visibility",
958
- "border": "none"
959
- });
960
- var iframeLoadedPromise = iframeToLoadedPromise(iframe);
961
- var jsenvToolbarHtmlServerUrl = resolveUrl("./src/internal/toolbar/toolbar.html", jsenvDirectoryServerUrl); // set iframe src BEFORE putting it into the DOM (prevent firefox adding an history entry)
962
-
963
- iframe.setAttribute("src", jsenvToolbarHtmlServerUrl);
964
- placeholder.parentNode.replaceChild(iframe, placeholder);
965
- return _await(iframeLoadedPromise, function () {
966
- iframe.removeAttribute("tabindex");
967
-
968
- var listenToolbarIframeEvent = function listenToolbarIframeEvent(event, fn) {
969
- window.addEventListener("message", function (messageEvent) {
970
- var data = messageEvent.data;
971
- if (_typeof(data) !== "object") return;
972
- var jsenv = data.jsenv;
973
- if (!jsenv) return;
974
- var type = data.type;
975
- if (type !== event) return;
976
- fn(data.value);
977
- }, false);
978
- };
870
+ try {
871
+ return Promise.resolve(f.apply(this, args));
872
+ } catch (e) {
873
+ return Promise.reject(e);
874
+ }
875
+ };
876
+ }
979
877
 
980
- listenToolbarIframeEvent("toolbar-visibility-change", function (visible) {
981
- if (visible) {
982
- hideToolbarTrigger();
983
- } else {
984
- showToolbarTrigger();
985
- }
878
+ window.__jsenv_eventsource__ = connectLivereload();
879
+
880
+ var injectToolbar = _async(function () {
881
+ return _await(new Promise(function (resolve) {
882
+ if (window.requestIdleCallback) {
883
+ window.requestIdleCallback(resolve);
884
+ } else {
885
+ window.requestAnimationFrame(resolve);
886
+ }
887
+ }), function () {
888
+ return _call(fetchExploringJson, function (_ref4) {
889
+ var jsenvDirectoryRelativeUrl = _ref4.jsenvDirectoryRelativeUrl;
890
+ var jsenvDirectoryServerUrl = resolveUrl(jsenvDirectoryRelativeUrl, document.location.origin);
891
+ var placeholder = getToolbarPlaceholder();
892
+ var iframe = document.createElement("iframe");
893
+ setAttributes(iframe, {
894
+ tabindex: -1,
895
+ // sandbox: "allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation",
896
+ // allow: "accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; microphone; midi; payment; vr",
897
+ allowtransparency: true
986
898
  });
987
- var div = document.createElement("div");
988
- var jsenvLogoUrl = resolveUrl("./src/internal/toolbar/jsenv-logo.svg", jsenvDirectoryServerUrl);
989
- var jsenvLogoSvgSrc = jsenvLogoUrl;
990
- div.innerHTML = "\n<div id=\"jsenv-toolbar-trigger\">\n <svg id=\"jsenv-toolbar-trigger-icon\">\n <use xlink:href=\"".concat(jsenvLogoSvgSrc, "#jsenv-logo\"></use>\n </svg>\n <style>\n #jsenv-toolbar-trigger {\n display: block;\n overflow: hidden;\n position: fixed;\n z-index: 1000;\n bottom: -32px;\n right: 20px;\n height: 40px;\n width: 40px;\n padding: 0;\n border-radius: 5px 5px 0 0;\n border: 1px solid rgba(0, 0, 0, 0.33);\n border-bottom: none;\n box-shadow: 0px 0px 6px 2px rgba(0, 0, 0, 0.46);\n background: transparent;\n text-align: center;\n transition: 600ms;\n }\n\n #jsenv-toolbar-trigger:hover {\n cursor: pointer;\n }\n\n #jsenv-toolbar-trigger[data-expanded] {\n bottom: 0;\n }\n\n #jsenv-toolbar-trigger-icon {\n width: 35px;\n height: 35px;\n opacity: 0;\n transition: 600ms;\n }\n\n #jsenv-toolbar-trigger[data-expanded] #jsenv-toolbar-trigger-icon {\n opacity: 1;\n }\n </style>\n</div>");
991
- var toolbarTrigger = div.firstElementChild;
992
- iframe.parentNode.appendChild(toolbarTrigger);
993
- var timer;
994
-
995
- toolbarTrigger.onmouseenter = function () {
996
- toolbarTrigger.setAttribute("data-animate", "");
997
- timer = setTimeout(expandToolbarTrigger, 500);
998
- };
899
+ setStyles(iframe, {
900
+ "position": "fixed",
901
+ "zIndex": 1000,
902
+ "bottom": 0,
903
+ "left": 0,
904
+ "width": "100%",
905
+ "height": 0,
906
+
907
+ /* ensure toolbar children are not focusable when hidden */
908
+ "visibility": "hidden",
909
+ "transition-duration": "300ms",
910
+ "transition-property": "height, visibility",
911
+ "border": "none"
912
+ });
913
+ var iframeLoadedPromise = iframeToLoadedPromise(iframe);
914
+ var jsenvToolbarHtmlServerUrl = resolveUrl("./src/internal/toolbar/toolbar.html", jsenvDirectoryServerUrl); // set iframe src BEFORE putting it into the DOM (prevent firefox adding an history entry)
915
+
916
+ iframe.setAttribute("src", jsenvToolbarHtmlServerUrl);
917
+ placeholder.parentNode.replaceChild(iframe, placeholder);
918
+ return _await(iframeLoadedPromise, function () {
919
+ iframe.removeAttribute("tabindex");
920
+
921
+ var listenToolbarIframeEvent = function listenToolbarIframeEvent(event, fn) {
922
+ window.addEventListener("message", function (messageEvent) {
923
+ var data = messageEvent.data;
924
+ if (_typeof(data) !== "object") return;
925
+ var jsenv = data.jsenv;
926
+ if (!jsenv) return;
927
+ var type = data.type;
928
+ if (type !== event) return;
929
+ fn(data.value);
930
+ }, false);
931
+ };
999
932
 
1000
- toolbarTrigger.onmouseleave = function () {
1001
- clearTimeout(timer);
1002
- collapseToolbarTrigger();
1003
- };
933
+ listenToolbarIframeEvent("toolbar-visibility-change", function (visible) {
934
+ if (visible) {
935
+ hideToolbarTrigger();
936
+ } else {
937
+ showToolbarTrigger();
938
+ }
939
+ });
940
+ var div = document.createElement("div");
941
+ var jsenvLogoUrl = resolveUrl("./src/internal/toolbar/jsenv-logo.svg", jsenvDirectoryServerUrl);
942
+ var jsenvLogoSvgSrc = jsenvLogoUrl;
943
+ div.innerHTML = "\n<div id=\"jsenv-toolbar-trigger\">\n <svg id=\"jsenv-toolbar-trigger-icon\">\n <use xlink:href=\"".concat(jsenvLogoSvgSrc, "#jsenv-logo\"></use>\n </svg>\n <style>\n #jsenv-toolbar-trigger {\n display: block;\n overflow: hidden;\n position: fixed;\n z-index: 1000;\n bottom: -32px;\n right: 20px;\n height: 40px;\n width: 40px;\n padding: 0;\n border-radius: 5px 5px 0 0;\n border: 1px solid rgba(0, 0, 0, 0.33);\n border-bottom: none;\n box-shadow: 0px 0px 6px 2px rgba(0, 0, 0, 0.46);\n background: transparent;\n text-align: center;\n transition: 600ms;\n }\n\n #jsenv-toolbar-trigger:hover {\n cursor: pointer;\n }\n\n #jsenv-toolbar-trigger[data-expanded] {\n bottom: 0;\n }\n\n #jsenv-toolbar-trigger-icon {\n width: 35px;\n height: 35px;\n opacity: 0;\n transition: 600ms;\n }\n\n #jsenv-toolbar-trigger[data-expanded] #jsenv-toolbar-trigger-icon {\n opacity: 1;\n }\n </style>\n</div>");
944
+ var toolbarTrigger = div.firstElementChild;
945
+ iframe.parentNode.appendChild(toolbarTrigger);
946
+ var timer;
947
+
948
+ toolbarTrigger.onmouseenter = function () {
949
+ toolbarTrigger.setAttribute("data-animate", "");
950
+ timer = setTimeout(expandToolbarTrigger, 500);
951
+ };
1004
952
 
1005
- toolbarTrigger.onfocus = function () {
1006
- toolbarTrigger.removeAttribute("data-animate");
1007
- expandToolbarTrigger();
1008
- };
953
+ toolbarTrigger.onmouseleave = function () {
954
+ clearTimeout(timer);
955
+ collapseToolbarTrigger();
956
+ };
1009
957
 
1010
- toolbarTrigger.onblur = function () {
1011
- toolbarTrigger.removeAttribute("data-animate");
1012
- clearTimeout(timer);
1013
- collapseToolbarTrigger();
1014
- };
958
+ toolbarTrigger.onfocus = function () {
959
+ toolbarTrigger.removeAttribute("data-animate");
960
+ expandToolbarTrigger();
961
+ };
1015
962
 
1016
- toolbarTrigger.onclick = function () {
1017
- window.__jsenv__.toolbar.show();
1018
- };
963
+ toolbarTrigger.onblur = function () {
964
+ toolbarTrigger.removeAttribute("data-animate");
965
+ clearTimeout(timer);
966
+ collapseToolbarTrigger();
967
+ };
1019
968
 
1020
- var showToolbarTrigger = function showToolbarTrigger() {
1021
- toolbarTrigger.style.display = "block";
1022
- };
969
+ toolbarTrigger.onclick = function () {
970
+ window.__jsenv__.toolbar.show();
971
+ };
1023
972
 
1024
- var hideToolbarTrigger = function hideToolbarTrigger() {
1025
- toolbarTrigger.style.display = "none";
1026
- };
973
+ var showToolbarTrigger = function showToolbarTrigger() {
974
+ toolbarTrigger.style.display = "block";
975
+ };
1027
976
 
1028
- var expandToolbarTrigger = function expandToolbarTrigger() {
1029
- toolbarTrigger.setAttribute("data-expanded", "");
1030
- };
977
+ var hideToolbarTrigger = function hideToolbarTrigger() {
978
+ toolbarTrigger.style.display = "none";
979
+ };
1031
980
 
1032
- var collapseToolbarTrigger = function collapseToolbarTrigger() {
1033
- toolbarTrigger.removeAttribute("data-expanded", "");
1034
- };
981
+ var expandToolbarTrigger = function expandToolbarTrigger() {
982
+ toolbarTrigger.setAttribute("data-expanded", "");
983
+ };
1035
984
 
1036
- hideToolbarTrigger();
1037
- iframe.contentWindow.renderToolbar();
1038
- return iframe;
985
+ var collapseToolbarTrigger = function collapseToolbarTrigger() {
986
+ toolbarTrigger.removeAttribute("data-expanded", "");
987
+ };
988
+
989
+ hideToolbarTrigger();
990
+ iframe.contentWindow.renderToolbar();
991
+ return iframe;
992
+ });
1039
993
  });
1040
994
  });
1041
- };
995
+ });
1042
996
 
1043
997
  var getToolbarPlaceholder = function getToolbarPlaceholder() {
1044
998
  var placeholder = queryPlaceholder();