[object Object]

← back to Rentv

Drafts UI: escape data-id + plain-text drawer title + String() id compare (Cody hardening)

6be18486b6a85c7ca1f0218f7c0a8b061c11caf1 · 2026-08-05 07:18:13 -0700 · steve

Files touched

Diff

commit 6be18486b6a85c7ca1f0218f7c0a8b061c11caf1
Author: steve <steve@designerwallcoverings.com>
Date:   Wed Aug 5 07:18:13 2026 -0700

    Drafts UI: escape data-id + plain-text drawer title + String() id compare (Cody hardening)
---
 public/admin/pr-intelligence/content-drafts.html | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/public/admin/pr-intelligence/content-drafts.html b/public/admin/pr-intelligence/content-drafts.html
index 356ad55e..23a7d394 100644
--- a/public/admin/pr-intelligence/content-drafts.html
+++ b/public/admin/pr-intelligence/content-drafts.html
@@ -40,12 +40,12 @@
     { key: 'cat', label: 'Category', render: (r) => PR.badge(r.cat || 'RENTV', 'gray') },
     { key: 'created_at', label: 'Created', render: (r) => `<span class="dr-when" title="${PR.esc(r.created_at || '')}">🕓 ${fmtWhen(r.created_at)}</span>` },
     { key: '_a', label: '', render: (r) => `<div class="dr-actions">
-        <a data-act="edit" data-id="${r.id}">Edit</a>
-        <a data-act="preview" data-id="${r.id}" href="/post/${r.id}" target="_blank" rel="noopener noreferrer">Preview</a>
+        <a data-act="edit" data-id="${PR.esc(r.id)}">Edit</a>
+        <a data-act="preview" data-id="${PR.esc(r.id)}" href="/post/${encodeURIComponent(r.id)}" target="_blank" rel="noopener noreferrer">Preview</a>
         ${status === 'draft'
-          ? `<a class="pub" data-act="publish" data-id="${r.id}">🚀 Publish</a>`
-          : `<a data-act="unpublish" data-id="${r.id}">Unpublish</a>`}
-        <a class="del" data-act="delete" data-id="${r.id}">Delete</a>
+          ? `<a class="pub" data-act="publish" data-id="${PR.esc(r.id)}">🚀 Publish</a>`
+          : `<a data-act="unpublish" data-id="${PR.esc(r.id)}">Unpublish</a>`}
+        <a class="del" data-act="delete" data-id="${PR.esc(r.id)}">Delete</a>
       </div>` },
   ]);
   wrap.appendChild(tbl.el);
@@ -68,7 +68,7 @@
   wrap.addEventListener('click', (e) => {
     const a = e.target.closest('[data-act]'); if (!a) return;
     const act = a.getAttribute('data-act'), id = a.getAttribute('data-id');
-    const row = rows.find((r) => r.id === id);
+    const row = rows.find((r) => String(r.id) === id);
     if (act === 'preview') return; // native link
     e.preventDefault();
     if (act === 'edit') return openEditor(row);
@@ -85,7 +85,7 @@
 
   function openEditor(r) {
     const d = PR.drawer();
-    const body = d.open(`Edit draft ${isWire(r.source) ? '· <span class="dr-src wire">' + PR.esc(r.source) + '</span>' : ''}`, `
+    const body = d.open('Edit draft' + (isWire(r.source) ? ' — ' + PR.esc(r.source) : ''), `
       <div class="dr-field"><label>Headline</label><input id="e_title" value="${PR.esc(r.title || '')}"></div>
       <div class="dr-field"><label>Category</label>
         <select id="e_cat">${['Sales','Leases','Financing','Development','Multifamily','Office','Retail','Industrial','People','Markets','RENTV'].map((x) => `<option ${x === (r.cat || 'RENTV') ? 'selected' : ''}>${x}</option>`).join('')}</select></div>

← f7026ca8 auto-save: 2026-08-05T07:09:54 (3 files) — data/markets.json  ·  back to Rentv  ·  auto-save: 2026-08-05T07:40:04 (8 files) — data/markets.json 88f6724f →