[object Object]

← 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

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 →