diff --git a/.last-branch b/.last-branch
index be781d7..f874db3 100644
--- a/.last-branch
+++ b/.last-branch
@@ -1 +1 @@
-v20260113-01-changelog-markdown-render
+v20260113-02-edge-mail-lightmode
diff --git a/containers/backupchecks/src/templates/main/admin_all_mail.html b/containers/backupchecks/src/templates/main/admin_all_mail.html
index 57e7b71..c871b97 100644
--- a/containers/backupchecks/src/templates/main/admin_all_mail.html
+++ b/containers/backupchecks/src/templates/main/admin_all_mail.html
@@ -290,10 +290,33 @@
container.innerHTML = tableHtml;
}
- function setIframeHtml(html) {
+ function wrapMailHtml(html) {
+ html = html || "";
+ var trimmed = (typeof html === "string") ? html.trim() : "";
+ var injection = '';
+
+ function injectIntoFullDoc(doc) {
+ var d = doc || "";
+ if (/
]*>/i.test(d)) {
+ return d.replace(/]*>/i, function (m) { return m + injection; });
+ }
+ if (/]*>/i.test(d)) {
+ return d.replace(/]*>/i, function (m) { return m + "" + injection + ""; });
+ }
+ return "" + injection + "" + d + "";
+ }
+
+ if (trimmed.toLowerCase().indexOf("" + injection + "" + html + "";
+ }
+
+function setIframeHtml(html) {
var iframe = document.getElementById('msg_body_container_iframe');
if (!iframe) return;
- iframe.srcdoc = html || 'No message content stored.
';
+ iframe.srcdoc = wrapMailHtml(html || 'No message content stored.
');
}
async function openMessage(messageId) {
@@ -314,7 +337,7 @@
setText('msg_parsed', meta.parsed_at);
setText('msg_overall_message', meta.overall_message);
- setIframeHtml(data.body_html);
+ setIframeHtml(data.body_html || "");
renderObjects(data.objects);
modal.show();
diff --git a/containers/backupchecks/src/templates/main/daily_jobs.html b/containers/backupchecks/src/templates/main/daily_jobs.html
index feab33c..91c79e3 100644
--- a/containers/backupchecks/src/templates/main/daily_jobs.html
+++ b/containers/backupchecks/src/templates/main/daily_jobs.html
@@ -321,22 +321,30 @@
- function wrapMailHtml(html) {
+ function wrapMailHtml(html) {
html = html || "";
- // Ensure we render the mail HTML with its own CSS, isolated from the site styling.
- return (
- "" +
- "" +
- "" +
- html +
- ""
- );
+ var trimmed = (typeof html === "string") ? html.trim() : "";
+ var injection = '';
+
+ function injectIntoFullDoc(doc) {
+ var d = doc || "";
+ if (/]*>/i.test(d)) {
+ return d.replace(/]*>/i, function (m) { return m + injection; });
+ }
+ if (/]*>/i.test(d)) {
+ return d.replace(/]*>/i, function (m) { return m + "" + injection + ""; });
+ }
+ return "" + injection + "" + d + "";
+ }
+
+ if (trimmed.toLowerCase().indexOf("" + injection + "" + html + "";
}
- var currentJobId = null;
- var currentRunId = null;
-
- function escapeHtml(s) {
+function escapeHtml(s) {
return (s || "").toString()
.replace(/&/g, "&")
.replace(/';
- // If the content already looks like a full HTML document (common for report attachments),
- // do not wrap it again.
- if (trimmed.toLowerCase().indexOf("]*>/i.test(d)) {
+ return d.replace(/]*>/i, function (m) { return m + injection; });
+ }
+ if (/]*>/i.test(d)) {
+ return d.replace(/]*>/i, function (m) { return m + "" + injection + ""; });
+ }
+ return "" + injection + "" + d + "";
}
- // Ensure we render the mail HTML with its own CSS, isolated from the site styling.
- return (
- "" +
- "" +
- "" +
- html +
- ""
- );
+ if (trimmed.toLowerCase().indexOf("" + injection + "" + html + "";
}
+
function findCustomerIdByName(name) {
if (!name) return null;
for (var i = 0; i < customers.length; i++) {
diff --git a/containers/backupchecks/src/templates/main/inbox_deleted.html b/containers/backupchecks/src/templates/main/inbox_deleted.html
index d8440d2..80c59c9 100644
--- a/containers/backupchecks/src/templates/main/inbox_deleted.html
+++ b/containers/backupchecks/src/templates/main/inbox_deleted.html
@@ -130,18 +130,30 @@