Errors
@@ -1710,7 +1787,9 @@ export default function App() {
{showResultPane && (
<>
{duration !== null && (
-
Success in {duration} ms
+
+ Success in {duration} ms
+
)}
{canRenderHtml && (
@@ -1742,9 +1821,10 @@ export default function App() {
) : (
@@ -1800,7 +1881,7 @@ export default function App() {
)}
-
-
+ {widgetsReady && (
+
+
+
+
+ )}
);
}
diff --git a/frontend/src/components/BuyMeACoffee.jsx b/frontend/src/components/BuyMeACoffee.jsx
index c7fc1228..3fcf999f 100644
--- a/frontend/src/components/BuyMeACoffee.jsx
+++ b/frontend/src/components/BuyMeACoffee.jsx
@@ -9,32 +9,51 @@ export default function BuyMeACoffee() {
if (!containerRef.current) return;
if (document.getElementById(SCRIPT_ID)) return;
- const script = document.createElement("script");
- script.id = SCRIPT_ID;
- script.setAttribute("data-name", "BMC-Widget");
- script.src = "https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js";
- script.setAttribute("data-id", "alexandrev");
- script.setAttribute("data-description", "Support me on Buy me a coffee!");
- script.setAttribute(
- "data-message",
- "Thanks for using XSLT Playground. If it helped you, feel free to buy me a coffee ☕",
- );
- script.setAttribute("data-color", "#FFDD00");
- script.setAttribute("data-position", "Right");
- script.setAttribute("data-x_margin", "24");
- script.setAttribute("data-y_margin", "24");
- script.async = true;
- containerRef.current.appendChild(script);
+ let cancelled = false;
+ let script = null;
+ let cancelIdle = null;
+ let handleLoad = null;
+ const loadWidget = () => {
+ if (cancelled || !containerRef.current) return;
+ script = document.createElement("script");
+ script.id = SCRIPT_ID;
+ script.setAttribute("data-name", "BMC-Widget");
+ script.src = "https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js";
+ script.setAttribute("data-id", "alexandrev");
+ script.setAttribute("data-description", "Support me on Buy me a coffee!");
+ script.setAttribute(
+ "data-message",
+ "Thanks for using XSLT Playground. If it helped you, feel free to buy me a coffee ☕",
+ );
+ script.setAttribute("data-color", "#FFDD00");
+ script.setAttribute("data-position", "Right");
+ script.setAttribute("data-x_margin", "24");
+ script.setAttribute("data-y_margin", "24");
+ script.async = true;
+ containerRef.current.appendChild(script);
- const handleLoad = () => {
- const evt = document.createEvent("Event");
- evt.initEvent("DOMContentLoaded", false, false);
- window.dispatchEvent(evt);
+ handleLoad = () => {
+ const evt = document.createEvent("Event");
+ evt.initEvent("DOMContentLoaded", false, false);
+ window.dispatchEvent(evt);
+ };
+ script.addEventListener("load", handleLoad);
};
- script.addEventListener("load", handleLoad);
+ if ("requestIdleCallback" in window) {
+ const idleId = window.requestIdleCallback(loadWidget, { timeout: 2500 });
+ cancelIdle = () => window.cancelIdleCallback?.(idleId);
+ } else {
+ const timerId = window.setTimeout(loadWidget, 1800);
+ cancelIdle = () => window.clearTimeout(timerId);
+ }
+
return () => {
- script.removeEventListener("load", handleLoad);
+ cancelled = true;
+ cancelIdle?.();
+ if (script && handleLoad) {
+ script.removeEventListener("load", handleLoad);
+ }
};
}, []);
diff --git a/frontend/src/components/FeedbackWidget.jsx b/frontend/src/components/FeedbackWidget.jsx
index 449bf832..c13c10ad 100644
--- a/frontend/src/components/FeedbackWidget.jsx
+++ b/frontend/src/components/FeedbackWidget.jsx
@@ -225,8 +225,6 @@ export default function FeedbackWidget() {
Feedback