← back to Dw Domain Launcher
add rel=noopener noreferrer to external target=_blank links
b9ce236eab389a9998bff9da4ddb142b67a9d125 · 2026-05-18 20:27:44 -0700 · SteveStudio2
Files touched
Diff
commit b9ce236eab389a9998bff9da4ddb142b67a9d125
Author: SteveStudio2 <steve@designerwallcoverings.com>
Date: Mon May 18 20:27:44 2026 -0700
add rel=noopener noreferrer to external target=_blank links
---
public/index.html | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/public/index.html b/public/index.html
index 18ef701..47830c4 100644
--- a/public/index.html
+++ b/public/index.html
@@ -121,8 +121,8 @@
<div class="right">
<button id="refreshGD" style="background:var(--accent);border:0;color:#0f0f10;font-weight:600">Refresh GoDaddy</button>
<a class="dl" href="/api/export.csv" download>Download CSV</a>
- <a class="dl" href="/api/delete-manifest" target="_blank">Delete manifest</a>
- <a class="dl" href="/api/launch-manifest" target="_blank">Launch manifest</a>
+ <a class="dl" href="/api/delete-manifest" target="_blank" rel="noopener noreferrer">Delete manifest</a>
+ <a class="dl" href="/api/launch-manifest" target="_blank" rel="noopener noreferrer">Launch manifest</a>
</div>
</div>
@@ -229,9 +229,15 @@ function toast(msg) {
}
async function fetchCategories() {
- const r = await fetch('/api/categories');
- const j = await r.json();
- CATEGORIES = j.categories;
+ try {
+ const r = await fetch('/api/categories');
+ if (!r.ok) throw new Error(`HTTP ${r.status}`);
+ const j = await r.json();
+ CATEGORIES = Array.isArray(j.categories) ? j.categories : [];
+ } catch (e) {
+ CATEGORIES = [];
+ toast('error loading categories');
+ }
const opts = '<option value="">(no category)</option>' + CATEGORIES.map(c => `<option value="${c}">${c}</option>`).join('');
$('#filterCategory').innerHTML = '<option value="">all categories</option><option value="(none)">(no category)</option>' +
CATEGORIES.map(c => `<option value="${c}">${c}</option>`).join('');
@@ -239,8 +245,15 @@ async function fetchCategories() {
}
async function fetchAll() {
- const r = await fetch('/api/domains');
- DATA = await r.json();
+ try {
+ const r = await fetch('/api/domains');
+ if (!r.ok) throw new Error(`HTTP ${r.status}`);
+ DATA = await r.json();
+ } catch (e) {
+ $('#counts').textContent = 'error loading domains';
+ toast('error loading domains');
+ return;
+ }
render();
}
@@ -275,7 +288,7 @@ function render() {
<tr data-domain="${r.domain}">
<td><input type="checkbox" class="sel" data-domain="${r.domain}" ${SELECTED.has(r.domain)?'checked':''}></td>
<td class="domain">
- <a href="http://${r.domain}" target="_blank" rel="noopener">${r.domain}</a>
+ <a href="http://${r.domain}" target="_blank" rel="noopener noreferrer">${r.domain}</a>
</td>
<td>
<select class="cat" data-domain="${r.domain}">
← 9e16b67 remove dead domains brazilliancewallpaper.com + dohngia.com
·
back to Dw Domain Launcher
·
Add per-site favicon (kills /favicon.ico 404) 6c28699 →