Release Hudra 0.10 beta 1
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
(() => {
|
||||
if (window.__hudraPageDetector) return;
|
||||
|
||||
const contentRootSelectors = [
|
||||
"#content .user_content",
|
||||
".show-content .user_content",
|
||||
".wiki-page-content .user_content",
|
||||
".user_content",
|
||||
"[role='main'] .page-content",
|
||||
"[role='main'] .content"
|
||||
];
|
||||
|
||||
const titleSelectors = [
|
||||
"h1.page-title",
|
||||
"h1.wiki-page-title",
|
||||
"#content h1"
|
||||
];
|
||||
|
||||
function hasMeaningfulContent(element) {
|
||||
return Boolean(
|
||||
element?.textContent?.trim() ||
|
||||
element?.querySelector("img, video, iframe, svg, canvas, picture, table")
|
||||
);
|
||||
}
|
||||
|
||||
function resolve() {
|
||||
let contentRoot = null;
|
||||
let contentRootSelector = null;
|
||||
|
||||
for (const selector of contentRootSelectors) {
|
||||
const candidate = document.querySelector(selector);
|
||||
if (candidate) {
|
||||
contentRoot = candidate;
|
||||
contentRootSelector = selector;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!contentRoot) {
|
||||
return { supported: false, reason: "NO_LESSON_CONTAINER" };
|
||||
}
|
||||
|
||||
const pageTitleElement =
|
||||
contentRoot.querySelector("h1") ||
|
||||
document.querySelector(titleSelectors.join(", "));
|
||||
|
||||
if (!pageTitleElement) {
|
||||
return { supported: false, reason: "NO_LESSON_TITLE" };
|
||||
}
|
||||
|
||||
if (!hasMeaningfulContent(contentRoot)) {
|
||||
return { supported: false, reason: "EMPTY_LESSON" };
|
||||
}
|
||||
|
||||
return {
|
||||
supported: true,
|
||||
reason: null,
|
||||
contentRoot,
|
||||
contentRootSelector,
|
||||
pageTitleElement
|
||||
};
|
||||
}
|
||||
|
||||
function inspect() {
|
||||
const result = resolve();
|
||||
return {
|
||||
supported: result.supported,
|
||||
reason: result.reason,
|
||||
contentRootSelector: result.contentRootSelector || null
|
||||
};
|
||||
}
|
||||
|
||||
function showNotice(message) {
|
||||
document.getElementById("hudra-page-notice")?.remove();
|
||||
|
||||
const notice = document.createElement("div");
|
||||
notice.id = "hudra-page-notice";
|
||||
notice.setAttribute("role", "status");
|
||||
notice.setAttribute("aria-live", "polite");
|
||||
notice.style.cssText = [
|
||||
"position:fixed",
|
||||
"z-index:2147483647",
|
||||
"right:20px",
|
||||
"bottom:20px",
|
||||
"max-width:420px",
|
||||
"box-sizing:border-box",
|
||||
"padding:16px 48px 16px 18px",
|
||||
"border:1px solid #bac4d2",
|
||||
"border-radius:10px",
|
||||
"background:#fff",
|
||||
"color:#1f2937",
|
||||
"box-shadow:0 8px 28px rgba(15,23,42,.2)",
|
||||
"font:16px/1.4 system-ui,sans-serif"
|
||||
].join(";");
|
||||
|
||||
const text = document.createElement("span");
|
||||
text.textContent = message;
|
||||
notice.appendChild(text);
|
||||
|
||||
const close = document.createElement("button");
|
||||
close.type = "button";
|
||||
close.setAttribute("aria-label", "Dismiss Hudra message");
|
||||
close.textContent = "×";
|
||||
close.style.cssText = [
|
||||
"position:absolute",
|
||||
"top:8px",
|
||||
"right:10px",
|
||||
"border:0",
|
||||
"background:transparent",
|
||||
"color:#374151",
|
||||
"font:24px/1 system-ui,sans-serif",
|
||||
"cursor:pointer"
|
||||
].join(";");
|
||||
close.addEventListener("click", () => notice.remove());
|
||||
notice.appendChild(close);
|
||||
|
||||
document.body.appendChild(notice);
|
||||
window.setTimeout(() => notice.remove(), 8000);
|
||||
}
|
||||
|
||||
window.__hudraPageDetector = { inspect, resolve, showNotice };
|
||||
})();
|
||||
Reference in New Issue
Block a user