1/* E11EVEN Club Collection: live MLS listings for both towers. 2 * Source: WIRE Miami hub IDX proxy (same Trestle feed as wiremiami.com/search), building=e11even. 3 * 2026-09-23 (E11EVEN Rebuild). No second feed, no client credentials. */ 4(function () { 5 var FEED = 'https://wiremiami.com/.netlify/functions/idx-proxy'; 6 var cache = null, waiters = []; 7 function money(n) { if (!n && n !== 0) return ''; return '$' + Math.round(n).toLocaleString('en-US'); } 8 function short(n) { if (!n) return ''; return n >= 1e6 ? '$' + (n / 1e6).toFixed(n >= 1e7 ? 1 : 2).replace(/\.?0+$/, '') + 'M' : '$' + Math.round(n / 1e3) + 'K'; } 9 function esc(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]; }); } 10 function load(cb) { 11 if (cache) return cb(cache); 12 waiters.push(cb); 13 if (waiters.length > 1) return; 14 fetch(FEED + '?building=e11even', { mode: 'cors' }).then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); }) 15 .then(function (d) { cache = d; }, function () { cache = { error: true, listings: [], count: 0 }; }) 16 .then(function () { var w = waiters; waiters = []; w.forEach(function (f) { f(cache); }); }); 17 } 18 function isUC(l) { return l.status === 'ActiveUnderContract' || l.status === 'Pending'; } 19 function beds(l) { return l.beds === 0 ? 'Studio' : (l.beds != null ? l.beds + ' bd' : '- bd'); } 20 function card(l, href) { 21 var el = document.createElement(href ? 'a' : 'button'); 22 el.className = 'rs-card'; 23 if (href) { el.href = href; } else { el.type = 'button'; } 24 el.setAttribute('data-id', l.id); 25 var badge = isUC(l) ? '<span class="rs-badge alt">Under Contract</span>' : (l.dom != null && l.dom <= 14 ? '<span class="rs-badge">New</span>' : ''); 26 var was = (l.originalPrice && l.price && l.originalPrice > l.price) ? '<span class="rs-was">' + short(l.originalPrice) + '</span>' : ''; 27 el.innerHTML = '<div class="rs-img">' + (l.photo ? '<img src="' + esc(l.photo) + '" alt="' + esc(l.towerName + ' residence ' + l.unit) + '" loading="lazy" onerror="this.outerHTML=\'<span class=rs-noimg>Residence ' + esc(l.unit) + '</span>\'">' : '<span class="rs-noimg">Residence ' + esc(l.unit) + '</span>') + badge + '</div>' + 28 '<div class="rs-body"><span class="rs-tower">' + esc(l.towerName) + '</span>' + 29 '<span class="rs-price">' + money(l.price) + was + '</span>' + 30 '<span class="rs-unit">Residence ' + esc(l.unit) + '</span>' + 31 '<span class="rs-specs"><span>' + beds(l) + '</span><span>' + (l.baths != null ? l.baths : '-') + ' ba</span>' + (l.sqft ? '<span>' + l.sqft.toLocaleString('en-US') + ' sf</span>' : '') + (l.hoa ? '<span>HOA ' + money(l.hoa) + (l.hoaFreq ? ' ' + esc(l.hoaFreq.toLowerCase()) : '') + '</span>' : '') + '</span>' + 32 '<span class="rs-attr">Listed by ' + esc(l.listOffice) + '</span></div>'; 33 return el; 34 } 35 function stats(list) { 36 var act = list.filter(function (l) { return !isUC(l) && l.price; }); 37 var p = act.map(function (l) { return l.price; }); 38 return { n: list.length, active: act.length, min: p.length ? Math.min.apply(null, p) : 0, max: p.length ? Math.max.apply(null, p) : 0 }; 39 } 40 window.E11 = { load: load, card: card, money: money, short: short, esc: esc, isUC: isUC, stats: stats, FEED: FEED, beds: beds }; 41})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.