{% extends "administration/base.html" %} {% load i18n %} {% load humanize %} {% load passbook_utils %} {% load admin_reflection %} {% block content %} <section class="pf-c-page__main-section pf-m-light"> <div class="pf-c-content"> <h1> <i class="fas fa-map-marker"></i> {% trans 'Outposts' %} </h1> <p>{% trans "Outposts are deployments of passbook components to support different environments and protocols, like reverse proxies." %}</p> </div> </section> <section class="pf-c-page__main-section pf-m-no-padding-mobile"> <div class="pf-c-card"> {% if object_list %} <div class="pf-c-toolbar"> <div class="pf-c-toolbar__content"> {% include 'partials/toolbar_search.html' %} <div class="pf-c-toolbar__bulk-select"> <a href="{% url 'passbook_admin:outpost-create' %}?back={{ request.get_full_path }}" class="pf-c-button pf-m-primary" type="button">{% trans 'Create' %}</a> </div> {% include 'partials/pagination.html' %} </div> </div> <table class="pf-c-table pf-m-compact pf-m-grid-xl" role="grid"> <thead> <tr role="row"> <th role="columnheader" scope="col">{% trans 'Name' %}</th> <th role="columnheader" scope="col">{% trans 'Providers' %}</th> <th role="columnheader" scope="col">{% trans 'Health' %}</th> <th role="columnheader" scope="col">{% trans 'Version' %}</th> <th role="cell"></th> </tr> </thead> <tbody role="rowgroup"> {% for outpost in object_list %} <tr role="row"> <th role="columnheader"> <span>{{ outpost.name }}</span> </th> <td role="cell"> <span> {{ outpost.providers.all.select_subclasses|join:", " }} </span> </td> {% with states=outpost.state %} {% if states|length > 1 %} <td role="cell"> {% for state in states %} <div> {% if state.last_seen %} <i class="fas fa-check pf-m-success"></i> {{ state.last_seen|naturaltime }} {% else %} <i class="fas fa-times pf-m-danger"></i> {% trans 'Unhealthy' %} {% endif %} </div> {% endfor %} </td> <td role="cell"> {% for state in states %} <div> {% if not state.version %} <i class="fas fa-question-circle"></i> {% elif state.version_outdated %} <i class="fas fa-times pf-m-danger"></i> {% blocktrans with is=state.version should=state.version_should %}{{ is }}, should be {{ should }}{% endblocktrans %} {% else %} <i class="fas fa-check pf-m-success"></i> {{ state.version }} {% endif %} </div> {% endfor %} </td> {% else %} <td role="cell"> <i class="fas fa-question-circle"></i> </td> <td role="cell"> <i class="fas fa-question-circle"></i> </td> {% endif %} {% endwith %} <td> <a class="pf-c-button pf-m-secondary" href="{% url 'passbook_admin:outpost-update' pk=outpost.pk %}?back={{ request.get_full_path }}">{% trans 'Edit' %}</a> <a class="pf-c-button pf-m-danger" href="{% url 'passbook_admin:outpost-delete' pk=outpost.pk %}?back={{ request.get_full_path }}">{% trans 'Delete' %}</a> {% get_htmls outpost as htmls %} {% for html in htmls %} {{ html|safe }} {% endfor %} </td> </tr> {% endfor %} </tbody> </table> <div class="pf-c-pagination pf-m-bottom"> {% include 'partials/pagination.html' %} </div> {% else %} <div class="pf-c-toolbar"> <div class="pf-c-toolbar__content"> {% include 'partials/toolbar_search.html' %} </div> </div> <div class="pf-c-empty-state"> <div class="pf-c-empty-state__content"> <i class="fas fa-map-marker pf-c-empty-state__icon" aria-hidden="true"></i> <h1 class="pf-c-title pf-m-lg"> {% trans 'No Outposts.' %} </h1> <div class="pf-c-empty-state__body"> {% if request.GET.search != "" %} {% trans "Your search query doesn't match any outposts." %} {% else %} {% trans 'Currently no outposts exist. Click the button below to create one.' %} {% endif %} </div> <a href="{% url 'passbook_admin:outpost-create' %}?back={{ request.get_full_path }}" class="pf-c-button pf-m-primary" type="button">{% trans 'Create' %}</a> </div> </div> {% endif %} </div> </section> {% endblock %}