-
- Available Images
-
+
Rotation Order
+
+
@@ -251,6 +513,15 @@ const INDEX_HTML: &str = r##"
return (n / 1024 / 1024).toFixed(1) + " MB";
}
+ function escapeHtml(value) {
+ return String(value)
+ .replaceAll("&", "&")
+ .replaceAll("<", "<")
+ .replaceAll(">", ">")
+ .replaceAll('"', """)
+ .replaceAll("'", "'");
+ }
+
function move(index, delta) {
const target = index + delta;
if (target < 0 || target >= state.activeImages.length) return;
@@ -406,14 +677,17 @@ const INDEX_HTML: &str = r##"
for (const image of state.images) {
const selected = state.activeImages.includes(image.name);
const tile = document.createElement("article");
+ const safeLabel = escapeHtml(image.label);
+ const safeName = escapeHtml(image.name);
+ const safeUrl = escapeHtml(image.url);
tile.className = "tile" + (selected ? " selected" : "");
tile.innerHTML = `
-
+
Rotation Order
+ Live queue +
-
@@ -427,14 +701,14 @@ const INDEX_HTML: &str = r##"
el.order.innerHTML = "";
if (state.setup.specs_enabled && !state.activeImages.length) {
const row = document.createElement("div");
- row.className = "order-item";
+ row.className = "order-item" + (state.display.current_image === "System Specs" ? " current" : "");
row.innerHTML = `
${image.label}
- ${bytes(image.size)}${image.animated ? ` • GIF • ${image.frame_count} Frames` : ""}
+ ${safeLabel}
+
-
+
S
- Toggle above
+ Specs
`;
el.order.appendChild(row);
}
@@ -446,9 +720,9 @@ const INDEX_HTML: &str = r##"
S
- Toggle above
+ Specs
`;
el.order.appendChild(row);
}
@@ -460,19 +734,20 @@ const INDEX_HTML: &str = r##"
state.activeImages.forEach((name, index) => {
const image = imageMap.get(name);
const label = image ? image.label : name;
+ const safeLabel = escapeHtml(label);
const row = document.createElement("div");
- row.className = "order-item";
const isCurrent = state.display.current_image === name || state.display.current_image === label;
+ row.className = "order-item" + (isCurrent ? " current" : "");
row.innerHTML = `
${index + 1}
-
-
-
+
+
+
`;
const [up, down, remove] = row.querySelectorAll("button");