mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
126 lines
3.8 KiB
HTML
126 lines
3.8 KiB
HTML
{% extends 'base/layout.html' %}
|
|
{% load buttons %}
|
|
{% load custom_links %}
|
|
{% load helpers %}
|
|
{% load perms %}
|
|
{% load plugins %}
|
|
|
|
{% comment %}
|
|
Blocks:
|
|
breadcrumbs: Breadcrumb list items (HTML <li> elements)
|
|
object_identifier: Unique identifier for the object
|
|
extra_controls: Additional action buttons to display
|
|
extra_tabs: Additional tabs to include
|
|
content: Page content
|
|
|
|
Context:
|
|
object: The object instance being viewed
|
|
{% endcomment %}
|
|
|
|
{% block header %}
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
{# Breadcrumbs #}
|
|
<nav class="breadcrumb-container px-3" aria-label="breadcrumb">
|
|
<ol class="breadcrumb">
|
|
{% block breadcrumbs %}
|
|
<li class="breadcrumb-item"><a href="{% url object|viewname:'list' %}">{{ object|meta:'verbose_name_plural'|bettertitle }}</a></li>
|
|
{% endblock breadcrumbs %}
|
|
</ol>
|
|
</nav>
|
|
{# Object identifier #}
|
|
<div class="float-end px-3">
|
|
<code class="text-muted">
|
|
{% block object_identifier %}
|
|
{{ object|meta:"app_label" }}.{{ object|meta:"model_name" }}:{{ object.pk }}
|
|
{% if object.slug %}({{ object.slug }}){% endif %}
|
|
{% endblock object_identifier %}
|
|
</code>
|
|
</div>
|
|
</div>
|
|
{{ block.super }}
|
|
{% endblock %}
|
|
|
|
{% block title %}{{ object }}{% endblock %}
|
|
|
|
{% block subtitle %}
|
|
<div class="object-subtitle">
|
|
<span>Created {{ object.created|annotated_date }}</span>
|
|
<span class="separator">·</span>
|
|
<span>Updated <span title="{{ object.last_updated }}">{{ object.last_updated|timesince }}</span> ago</span>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block controls %}
|
|
{# Clone/Edit/Delete Buttons #}
|
|
<div class="controls">
|
|
<div class="control-group">
|
|
{% plugin_buttons object %}
|
|
|
|
{# Extra buttons #}
|
|
{% block extra_controls %}{% endblock %}
|
|
|
|
{% if object.clone_fields and request.user|can_add:object %}
|
|
{% clone_button object %}
|
|
{% endif %}
|
|
{% if request.user|can_change:object %}
|
|
{% edit_button object %}
|
|
{% endif %}
|
|
{% if request.user|can_delete:object %}
|
|
{% delete_button object %}
|
|
{% endif %}
|
|
|
|
</div>
|
|
<div class="control-group">
|
|
{% custom_links object %}
|
|
</div>
|
|
</div>
|
|
{% endblock controls %}
|
|
|
|
{% block tabs %}
|
|
<ul class="nav nav-tabs px-3">
|
|
{# Primary tab #}
|
|
<li class="nav-item" role="presentation">
|
|
<a class="nav-link{% if not active_tab %} active{% endif %}" href="{{ object.get_absolute_url }}">{{ object|meta:"verbose_name"|bettertitle }}</a>
|
|
</li>
|
|
|
|
{# Include any additional tabs #}
|
|
{% block extra_tabs %}{% endblock %}
|
|
|
|
{# Object journal #}
|
|
{% if perms.extras.view_journalentry %}
|
|
{% with journal_viewname=object|viewname:'journal' %}
|
|
{% url journal_viewname pk=object.pk as journal_url %}
|
|
{% if journal_url %}
|
|
<li role="presentation" class="nav-item">
|
|
<a href="{{ journal_url }}" class="nav-link{% if active_tab == 'journal'%} active{% endif %}">
|
|
Journal {% badge object.journal_entries.count %}
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
{% endwith %}
|
|
{% endif %}
|
|
|
|
{# Object changelog #}
|
|
{% if perms.extras.view_objectchange %}
|
|
{% with changelog_viewname=object|viewname:'changelog' %}
|
|
{% url changelog_viewname pk=object.pk as changelog_url %}
|
|
{% if changelog_url %}
|
|
<li role="presentation" class="nav-item">
|
|
<a href="{{ changelog_url }}" class="nav-link{% if active_tab == 'changelog'%} active{% endif %}">Change Log</a>
|
|
</li>
|
|
{% endif %}
|
|
{% endwith %}
|
|
{% endif %}
|
|
</ul>
|
|
{% endblock tabs %}
|
|
|
|
{% block content-wrapper %}
|
|
<div class="tab-content">
|
|
{% block content %}{% endblock %}
|
|
</div>
|
|
{% endblock content-wrapper %}
|
|
|
|
{% block modals %}
|
|
{% include 'inc/htmx_modal.html' %}
|
|
{% endblock modals %}
|