97 lines
6.1 KiB
HTML
97 lines
6.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>{{ subnet.name }} - Subnet Details</title>
|
|
<link rel="icon" type="image/png" href="{{ LOGO_PNG }}">
|
|
<link href="/static/css/output.css" rel="stylesheet">
|
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" rel="stylesheet">
|
|
</head>
|
|
<body class="bg-gray-300 text-gray-900 dark:bg-zinc-900 dark:text-gray-100 min-h-screen flex flex-col">
|
|
{% include 'header.html' %}
|
|
<div class="flex-1 flex items-center justify-center mx-4">
|
|
<div class="container py-8 w-full sm:max-w-3/4 pt-20">
|
|
<div class="flex items-center mb-6 relative">
|
|
<a href="/" class="hidden sm:flex absolute left-0 bg-gray-200 hover:bg-gray-400 dark:bg-zinc-700 dark:hover:bg-zinc-600 items-center justify-center rounded-full w-11 h-11"><i class="fas fa-arrow-left"></i></a>
|
|
<h1 class="text-3xl font-bold text-center w-full">{{ subnet.name }} ({{ subnet.cidr }})</h1>
|
|
<button type="button" id="export-csv" class="hidden sm:flex absolute right-0 bg-gray-200 hover:bg-gray-400 dark:bg-zinc-700 dark:hover:bg-zinc-600 hover:cursor-pointer items-center justify-center rounded-full w-11 h-11 export-csv-btn" title="Export as CSV" data-subnet-id="{{ subnet.id }}">
|
|
<i class="fas fa-file-csv fa-lg"></i>
|
|
</button>
|
|
</div>
|
|
{% if utilization %}
|
|
<div class="hidden sm:flex justify-center mb-4">
|
|
<div class="bg-gray-200 dark:bg-zinc-800 px-4 py-2 rounded-lg text-sm">
|
|
<span class="font-medium">{{ utilization.percent }}% used</span>
|
|
<span class="text-gray-600 dark:text-gray-400 mx-2">•</span>
|
|
<span class="text-gray-600 dark:text-gray-400">{{ utilization.assigned }} assigned</span>
|
|
<span class="text-gray-600 dark:text-gray-400 mx-2">•</span>
|
|
<span class="text-gray-600 dark:text-gray-400">{{ utilization.dhcp }} DHCP</span>
|
|
<span class="text-gray-600 dark:text-gray-400 mx-2">•</span>
|
|
<span class="text-gray-600 dark:text-gray-400">{{ utilization.available }} available</span>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
<div class="flex justify-center mb-4">
|
|
<a href="/subnet/{{ subnet.id }}/dhcp" class="hidden sm:flex bg-gray-200 hover:bg-gray-400 dark:bg-zinc-700 dark:hover:bg-zinc-600 px-4 py-2 rounded-lg shadow items-center gap-2">
|
|
<i class="fas fa-network-wired"></i> Define DHCP Pool
|
|
</a>
|
|
</div>
|
|
<button id="toggle-desc" class="sm:hidden bg-gray-300 hover:bg-gray-400 dark:bg-zinc-700 dark:hover:bg-zinc-600 hover:cursor-pointer px-4 py-2 rounded-lg mb-4 w-full">Show Descriptions</button>
|
|
<form action="" method="POST">
|
|
<table class="table-auto w-full mb-6">
|
|
<thead>
|
|
<tr>
|
|
<th class="text-center text-gray-700 dark:text-gray-400">IP Address</th>
|
|
<th class="text-center text-gray-700 dark:text-gray-400">Hostname</th>
|
|
<th class="text-center text-gray-700 dark:text-gray-400 hidden sm:table-cell" id="desc-col-header">Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="divide-y divide-gray-700">
|
|
{% for ip in ip_addresses %}
|
|
<tr id="ip-{{ ip[0] }}">
|
|
<td class="font-bold text-center">
|
|
<button type="button" class="ip-history-btn hover:text-blue-400 cursor-pointer" data-ip="{{ ip[1] }}" title="View IP history">
|
|
{{ ip[1] }}
|
|
</button>
|
|
</td>
|
|
<td class="text-center">
|
|
{% if ip[2] == 'DHCP' %}
|
|
<span class="font-semibold">DHCP</span>
|
|
{% elif ip[2] and ip[3] %}
|
|
<a href="/device/{{ ip[3] }}" class="hover:text-blue-300">{{ ip[2] }}</a>
|
|
{% elif ip[2] %}
|
|
{{ ip[2] }}
|
|
{% else %}
|
|
{{ '' }}
|
|
{% endif %}
|
|
</td>
|
|
<td class="text-left align-top hidden sm:table-cell desc-col">
|
|
<textarea readonly rows="1" class="border border-gray-600 rounded w-full resize-y cursor-pointer p-2">{{ ip[4].split('\n')[0] if ip[4] else '' }}</textarea>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- IP History Modal -->
|
|
<div id="ip-history-modal" class="hidden fixed inset-0 bg-black/30 backdrop-blur-md flex items-center justify-center z-50">
|
|
<div class="bg-gray-200 dark:bg-zinc-800 rounded-lg p-6 max-w-2xl w-full mx-4 max-h-[90vh] overflow-y-auto shadow-2xl border border-gray-300 dark:border-zinc-700">
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h2 class="text-2xl font-bold">IP History: <span id="modal-ip-address" class="font-mono"></span></h2>
|
|
<button type="button" id="close-ip-history-modal" class="text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:cursor-pointer text-2xl">×</button>
|
|
</div>
|
|
<div id="ip-history-content" class="space-y-3">
|
|
<div class="text-center text-gray-600 dark:text-gray-400">Loading...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="/static/js/export_csv.min.js"></script>
|
|
<script src="/static/js/subnet.min.js"></script>
|
|
<script src="/static/js/ip_history.min.js"></script>
|
|
</body>
|
|
</html> |