← back to Commercialrealestate
condos detail modal: broker/firm fields drill to crcp (TK-10091 cycle 2)
653c5c99cd17156624fe55b80da416e1ec854bed · 2026-07-31 11:18:15 -0700 · Steve
Broker → /crcp.html?brokerName=<name> (new name-only openContact path),
Firm → /crcp.html?firm=<name>. Chains the drillability rule one level deeper:
640/2190 condos carry an attributed agent/firm; those were dead-end text.
Verified in-browser: links render (apostrophes encoded) + crcp opens the modal, 0 errors.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Files touched
M public/condos.htmlM public/crcp.html
Diff
commit 653c5c99cd17156624fe55b80da416e1ec854bed
Author: Steve <steve@designerwallcoverings.com>
Date: Fri Jul 31 11:18:15 2026 -0700
condos detail modal: broker/firm fields drill to crcp (TK-10091 cycle 2)
Broker → /crcp.html?brokerName=<name> (new name-only openContact path),
Firm → /crcp.html?firm=<name>. Chains the drillability rule one level deeper:
640/2190 condos carry an attributed agent/firm; those were dead-end text.
Verified in-browser: links render (apostrophes encoded) + crcp opens the modal, 0 errors.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
public/condos.html | 5 +++--
public/crcp.html | 3 ++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/public/condos.html b/public/condos.html
index 0878b26..51eca50 100644
--- a/public/condos.html
+++ b/public/condos.html
@@ -95,6 +95,7 @@
#modal .maddr{color:var(--mut);font-size:13px;margin-bottom:10px;}
#modal .litem{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px solid #20262f;font-size:13px;}
#modal .litem .m{color:var(--mut);}
+ #modal .litem a.dl{color:var(--blue);text-decoration:none;} #modal .litem a.dl:hover{text-decoration:underline;}
#modal .src{font-size:12px;color:var(--mut);margin-top:12px;border-top:1px solid var(--line);padding-top:10px;}
</style>
</head>
@@ -428,8 +429,8 @@ function openDetail(id){
+line('$ / Sq Ft',ppsf!=null?money(ppsf):'')
+line('Year built',c.year_built)
+line('Age (yrs)',c.year_built?(NOW_YEAR-c.year_built):'')
- +line('Broker',c.broker_name)
- +line('Firm',c.firm_name)
+ +line('Broker',c.broker_name?`<a class="dl" href="/crcp.html?brokerName=${encodeURIComponent(c.broker_name)}">${esc(c.broker_name)}</a>`:c.broker_name)
+ +line('Firm',c.firm_name?`<a class="dl" href="/crcp.html?firm=${encodeURIComponent(c.firm_name)}">${esc(c.firm_name)}</a>`:c.firm_name)
+line('Added',c.created_at?(function(){try{return new Date(c.created_at).toLocaleDateString(undefined,{year:'numeric',month:'short',day:'numeric'});}catch(e){return '';}})():'')
+'</div>'
+(c.warrant_source?'<div class="src">'+esc(c.warrant_source)+'</div>':'');
diff --git a/public/crcp.html b/public/crcp.html
index 844c40a..8f12088 100644
--- a/public/crcp.html
+++ b/public/crcp.html
@@ -462,8 +462,9 @@ loadSegments(); setInterval(loadSegments, 20000);
// deep-link from the graphics dashboard: ?broker=<id>[&name=…] · ?firm=<name>
(function(){ try{
const P=new URLSearchParams(location.search);
- const bid=P.get('broker'), fm=P.get('firm');
+ const bid=P.get('broker'), fm=P.get('firm'), bn=P.get('brokerName');
if(bid){ openContact(P.get('name')||'', bid); }
+ else if(bn){ openContact(bn, null); } // name-only path (e.g. from a condo detail modal)
else if(fm){ openFirm(fm); }
}catch(e){} })();
</script>
← 6aeef28 CRCP: harden auth surface (yolo iter 1) — login rate-limit +
·
back to Commercialrealestate
·
harden esc(): escape > as well as & < " (condos + crcp) df8a26f →