rustio-admin 0.30.0

Django Admin, but for Rust. A small, focused admin framework.
Documentation
{% extends "admin/_base.html" %}
{% block content %}

<nav class="rio-crumbs"><a href="/admin">Home</a><span class="rio-crumb-sep">·</span><span class="rio-crumb-current">{{ index_title }}</span></nav>

<div class="rio-masthead-top">
  <div>
    <h1>{{ index_title }}</h1>
    <p class="rio-masthead-desc">Everything rustio generated for {{ app_name }} — your models, rows, and recent activity, in one console.</p>
  </div>
  <div class="rio-masthead-cta">
    {% if identity.is_admin %}
    <a class="rio-btn rio-btn--secondary rio-btn--md" href="/admin/history">{{ icon("clock") }} Audit log</a>
    {% endif %}
    <a class="rio-btn rio-btn--primary rio-btn--md" href="/admin/docs">Docs</a>
  </div>
</div>

{# ---- Editorial ledger ---- #}
<div class="rio-ledger rio-dash-ledger" aria-label="At a glance">
  <div class="rio-ledger-item"><span class="rio-ledger-num">{{ total_models }}</span><span class="rio-ledger-label">Models</span></div>
  <div class="rio-ledger-item"><span class="rio-ledger-num">{{ total_rows }}</span><span class="rio-ledger-label">Total rows</span></div>
  <div class="rio-ledger-item"><span class="rio-ledger-num">{{ recent_actions_count }}</span><span class="rio-ledger-label">Recent events</span></div>
  <div class="rio-ledger-item rio-ledger-item--accent"><span class="rio-ledger-num rio-ledger-num--ver">v{{ framework_version }}</span><span class="rio-ledger-label">{{ environment_label }}</span></div>
</div>

{# ---- Browse data board ---- #}
{% if apps %}
<div class="rio-board">
  <table class="rio-dtable">
    <thead><tr><th>Model</th><th class="col-fields">Fields</th><th class="col-rows">Rows</th><th class="col-browse">&nbsp;</th></tr></thead>
    <tbody>
      {% for app in apps %}{% for model in app.models %}
      <tr>
        <td>
          <div class="rio-prod">
            <span class="rio-mono-tile">{{ model.display_name | first | upper }}</span>
            <span class="rio-prod-text">
              <a class="rio-prod-name" href="/admin/{{ model.admin_name }}">{{ model.display_name }}</a>
              <span class="rio-prod-cat">{{ app.label }}</span>
            </span>
          </div>
        </td>
        <td class="col-fields">{{ model.field_count }} field{% if model.field_count != 1 %}s{% endif %}</td>
        <td class="col-rows"><span class="rio-rownum">{{ model.row_estimate }}</span></td>
        <td class="col-browse">
          <a class="rio-action-link" href="/admin/{{ model.admin_name }}">{{ icon("table") }} Browse</a>
          {% if not read_only %}<a class="rio-action-link rio-action-link--muted" href="/admin/{{ model.admin_name }}/new">{{ icon("plus") }} Add</a>{% endif %}
        </td>
      </tr>
      {% endfor %}{% endfor %}
    </tbody>
  </table>
  <div class="rio-board-foot">
    <span style="font-size:var(--rio-text-13);color:var(--rio-text-mute)">Showing <strong style="color:var(--rio-text-hi);font-weight:600">{{ total_models }}</strong> model{% if total_models != 1 %}s{% endif %} · <strong style="color:var(--rio-text-hi);font-weight:600">{{ total_rows }}</strong> row{% if total_rows != 1 %}s{% endif %} total</span>
  </div>
</div>
{% else %}
<div class="rio-board" style="padding:48px 24px;text-align:center">
  <div class="rio-empty">
    {{ icon("database") }}
    <div class="rio-empty-title">No models registered yet</div>
    <div>Run <code>rustio-admin startapp &lt;name&gt;</code> to scaffold a model, then register it on <code>Admin::new()</code>. It appears here on the next boot.</div>
  </div>
</div>
{% endif %}

{% endblock %}