← back to Lifestyle Asset Intel

views/index_detail.ejs

36 lines

<%- include('partials/head') %>
<main class="container">
  <p class="crumbs"><a href="/">← Console</a></p>
  <h1><%= out.index.name %></h1>
  <p class="muted mono">slug: <%= out.index.slug %> · methodology: <%= out.index.methodology_version %></p>

  <section>
    <h2>Definition</h2>
    <pre class="json"><%= JSON.stringify(out.index.definition, null, 2) %></pre>
  </section>

  <section>
    <h2>Time series (<%= out.points.length %> points)</h2>
    <div class="trend">
      <%- include('partials/sparkline', { points: out.points, width: 480, height: 80 }) %>
    </div>
    <table>
      <thead><tr><th>As of</th><th>Value</th><th>Δ%</th></tr></thead>
      <tbody>
        <% out.points.forEach(p => { %>
          <tr>
            <td><%= fmtDate(p.as_of) %></td>
            <td class="num">$<%= money(p.value) %></td>
            <td class="num"><%= p.change_pct == null ? '—' : (p.change_pct * 100).toFixed(2) + '%' %></td>
          </tr>
        <% }) %>
      </tbody>
    </table>
  </section>
</main>
<%
function money(v){ if(v==null||v==='') return '—'; var n=parseFloat(v); return isFinite(n)?n.toLocaleString('en-US',{maximumFractionDigits:0}):'—'; }
function fmtDate(v){ if(!v) return '—'; try { return new Date(v).toISOString().slice(0,10); } catch(e){ return String(v); } }
%>
<%- include('partials/foot') %>