mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
update list overflow handling
This commit is contained in:
parent
92cc4b0d6a
commit
4da2693b1a
10 changed files with 265 additions and 255 deletions
File diff suppressed because one or more lines are too long
208
src/ui/templates/bans.html
vendored
208
src/ui/templates/bans.html
vendored
|
|
@ -162,110 +162,112 @@
|
|||
<h5 class="font-bold dark:text-white/90 mx-2 text-white">No bans match</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div data-bans-list-container
|
||||
class=" {% if bans|length == 0 %}hidden{% endif %} w-full overflow-hidden grid grid-cols-12 col-span-12 p-4 relative break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border">
|
||||
<div class="overflow-auto w-full col-span-12 p-4 relative break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border">
|
||||
<div class="col-span-12">
|
||||
<h5 class="mb-4 mt-2 font-bold dark:text-white/90 mx-2">BANS LIST</h5>
|
||||
<h5 class="mx-2 font-bold dark:text-white/90 mx-2">BANS LIST</h5>
|
||||
</div>
|
||||
<div class=" max-h-100 sm:max-h-125 col-span-12 overflow-y-auto overflow-x-auto">
|
||||
<div data-bans-bans-list>
|
||||
<!-- list container-->
|
||||
{% set bans_headers = [
|
||||
{
|
||||
"name": "Select",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "IP",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Reason",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Ban start",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Ban end",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Remain",
|
||||
"position": "col-span-3"
|
||||
},
|
||||
{
|
||||
"name": "Term",
|
||||
"position": "hidden"
|
||||
}
|
||||
] %}
|
||||
<div class="overflow-hidden min-w-[1150px] w-full grid grid-cols-12 rounded p-2">
|
||||
<!-- header-->
|
||||
{% for header in bans_headers %}
|
||||
<p class="dark:text-gray-100 h-8 text-sm font-bold {{ header['position'] }} m-0 pb-2 border-b border-gray-400">
|
||||
{{ header['name'] }}
|
||||
</p>
|
||||
{% endfor %}
|
||||
<!-- end header-->
|
||||
<!-- list -->
|
||||
<ul class="col-span-12 w-full" data-bans-list>
|
||||
{% for ban in bans %}
|
||||
<li data-bans-item
|
||||
data-bans-list-item="{{ ban }}"
|
||||
class="items-center grid grid-cols-12 border-b border-gray-300 py-2.5">
|
||||
<div data-bans-ban-select
|
||||
data-checkbox-handler="ban-item-{{ loop.index }}"
|
||||
class="relative mb-7 md:mb-0 z-10 ml-2">
|
||||
<label class="sr-only" for="ban-item-{{ loop.index }}">Ban ip {{ loop.index }}</label>
|
||||
<input id="ban-item-{{ loop.index }}"
|
||||
name="ban-item-{{ loop.index }}"
|
||||
data-default-method="ui"
|
||||
data-default-value="no"
|
||||
data-checked="false"
|
||||
id="checkbox-ban-item-{{ loop.index }}"
|
||||
class="checkbox"
|
||||
type="checkbox"
|
||||
value="no" />
|
||||
<svg data-checkbox-handler="ban-item-{{ loop.index }}"
|
||||
class="pointer-events-none absolute fill-white dark:fill-gray-300 left-0 top-0 translate-x-1 translate-y-2 h-3 w-3"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 512 512">
|
||||
<path class="pointer-events-none" d="M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z">
|
||||
</path>
|
||||
</svg>
|
||||
</div>
|
||||
<p class="dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-bans-ip="{{ ban['ip'] }}">{{ ban['ip'] }}</p>
|
||||
<p class="dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-bans-reason="{{ ban['reason'] }}">{{ ban['reason'] }}</p>
|
||||
<p class="dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-bans-ban_start="{{ ban['ban_start'] }}">{{ ban['ban_start'] }}</p>
|
||||
<p class="dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-bans-ban_end="{{ ban['ban_end'] }}">{{ ban['ban_end'] }}</p>
|
||||
<p class="dark:text-gray-400 text-sm col-span-3 m-0 my-1"
|
||||
data-bans-remain="{{ ban['remain'] }}">{{ ban['remain'] }}</p>
|
||||
<p class="hidden" data-bans-term="{{ ban['term'] }}">{{ ban['term'] }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<!-- end list-->
|
||||
</div>
|
||||
<!-- end list container-->
|
||||
</div>
|
||||
</div>
|
||||
<form id="unban-items"
|
||||
action="bans"
|
||||
method="post"
|
||||
class="w-full col-span-12 justify-center flex mt-6 mb-3">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||
<input type="hidden" name="operation" value="unban">
|
||||
<input data-unban-inp type="hidden" name="data" value="">
|
||||
<button data-unban-btn
|
||||
disabled
|
||||
type="submit"
|
||||
class="valid-btn mr-3 text-base">UNBAN</button>
|
||||
</form>
|
||||
</div>
|
||||
<div data-bans-list-container
|
||||
class=" {% if bans|length == 0 %}hidden{% endif %} w-full overflow-auto grid grid-cols-12 col-span-12 p-4 relative">
|
||||
<div class=" max-h-100 sm:max-h-125 col-span-12 overflow-y-auto overflow-x-auto">
|
||||
<div data-bans-bans-list>
|
||||
<!-- list container-->
|
||||
{% set bans_headers = [
|
||||
{
|
||||
"name": "Select",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "IP",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Reason",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Ban start",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Ban end",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Remain",
|
||||
"position": "col-span-3"
|
||||
},
|
||||
{
|
||||
"name": "Term",
|
||||
"position": "hidden"
|
||||
}
|
||||
] %}
|
||||
<div class="overflow-hidden min-w-[1150px] w-full grid grid-cols-12 rounded p-2">
|
||||
<!-- header-->
|
||||
{% for header in bans_headers %}
|
||||
<p class="dark:text-gray-100 h-8 text-sm font-bold {{ header['position'] }} m-0 pb-2 border-b border-gray-400">
|
||||
{{ header['name'] }}
|
||||
</p>
|
||||
{% endfor %}
|
||||
<!-- end header-->
|
||||
<!-- list -->
|
||||
<ul class="col-span-12 w-full" data-bans-list>
|
||||
{% for ban in bans %}
|
||||
<li data-bans-item
|
||||
data-bans-list-item="{{ ban }}"
|
||||
class="items-center grid grid-cols-12 border-b border-gray-300 py-2.5">
|
||||
<div data-bans-ban-select
|
||||
data-checkbox-handler="ban-item-{{ loop.index }}"
|
||||
class="relative mb-7 md:mb-0 z-10 ml-2">
|
||||
<label class="sr-only" for="ban-item-{{ loop.index }}">Ban ip {{ loop.index }}</label>
|
||||
<input id="ban-item-{{ loop.index }}"
|
||||
name="ban-item-{{ loop.index }}"
|
||||
data-default-method="ui"
|
||||
data-default-value="no"
|
||||
data-checked="false"
|
||||
id="checkbox-ban-item-{{ loop.index }}"
|
||||
class="checkbox"
|
||||
type="checkbox"
|
||||
value="no" />
|
||||
<svg data-checkbox-handler="ban-item-{{ loop.index }}"
|
||||
class="pointer-events-none absolute fill-white dark:fill-gray-300 left-0 top-0 translate-x-1 translate-y-2 h-3 w-3"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 512 512">
|
||||
<path class="pointer-events-none" d="M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z">
|
||||
</path>
|
||||
</svg>
|
||||
</div>
|
||||
<p class="dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-bans-ip="{{ ban['ip'] }}">{{ ban['ip'] }}</p>
|
||||
<p class="dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-bans-reason="{{ ban['reason'] }}">{{ ban['reason'] }}</p>
|
||||
<p class="dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-bans-ban_start="{{ ban['ban_start'] }}">{{ ban['ban_start'] }}</p>
|
||||
<p class="dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-bans-ban_end="{{ ban['ban_end'] }}">{{ ban['ban_end'] }}</p>
|
||||
<p class="dark:text-gray-400 text-sm col-span-3 m-0 my-1"
|
||||
data-bans-remain="{{ ban['remain'] }}">{{ ban['remain'] }}</p>
|
||||
<p class="hidden" data-bans-term="{{ ban['term'] }}">{{ ban['term'] }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<!-- end list-->
|
||||
</div>
|
||||
<!-- end list container-->
|
||||
</div>
|
||||
</div>
|
||||
<form id="unban-items"
|
||||
action="bans"
|
||||
method="post"
|
||||
class="w-full col-span-12 justify-center flex mt-6 mb-3">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||
<input type="hidden" name="operation" value="unban">
|
||||
<input data-unban-inp type="hidden" name="data" value="">
|
||||
<button data-unban-btn
|
||||
disabled
|
||||
type="submit"
|
||||
class="valid-btn mr-3 text-base">UNBAN</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% include "bans_modal.html" %}
|
||||
{% endblock content %}
|
||||
|
|
|
|||
2
src/ui/templates/head.html
vendored
2
src/ui/templates/head.html
vendored
|
|
@ -34,7 +34,7 @@
|
|||
<script defer src="js/utils/flatpickr.js" nonce="{{ script_nonce }}"></script>
|
||||
<script type="module" src="js/logs.js" nonce="{{ script_nonce }}"></script>
|
||||
<link rel="stylesheet"
|
||||
|
||||
|
||||
href="css/datepicker-foundation.css" />
|
||||
{% elif current_endpoint == "jobs" %}
|
||||
<script type="module" src="js/jobs.js" nonce="{{ script_nonce }}"></script>
|
||||
|
|
|
|||
4
src/ui/templates/jobs.html
vendored
4
src/ui/templates/jobs.html
vendored
|
|
@ -145,7 +145,7 @@
|
|||
</div>
|
||||
<div class="overflow-auto w-full col-span-12 p-4 relative break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border">
|
||||
<div class="col-span-12">
|
||||
<h5 class="mx-4 mt-2 font-bold dark:text-white/90 mx-2">JOBS LIST</h5>
|
||||
<h5 class="mx-2 font-bold dark:text-white/90 mx-2">JOBS LIST</h5>
|
||||
</div>
|
||||
<div data-jobs-list-container
|
||||
class="relative min-w-[900px] w-full overflow-auto grid grid-cols-12 max-h-100 sm:max-h-125">
|
||||
|
|
@ -281,5 +281,5 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock content %}
|
||||
|
|
|
|||
1
src/ui/templates/logs.html
vendored
1
src/ui/templates/logs.html
vendored
|
|
@ -256,6 +256,7 @@
|
|||
<h5 class="font-bold dark:text-white/90 mx-2 text-white">No logs to show</h5>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div data-logs-card
|
||||
class="hidden w-full overflow-hidden grid grid-cols-12 max-h-100 sm:max-h-125 col-span-12 p-4 relative break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border">
|
||||
<div class="col-span-12">
|
||||
|
|
|
|||
139
src/ui/templates/plugins.html
vendored
139
src/ui/templates/plugins.html
vendored
|
|
@ -146,73 +146,78 @@
|
|||
</div>
|
||||
</div>
|
||||
<!-- end filter -->
|
||||
<div data-plugins-list-container
|
||||
class="min-h-[55vh] max-h-80 overflow-auto p-4 col-span-12 relative min-w-0 break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border">
|
||||
<h5 class="mb-4 mt-2 font-bold dark:text-white/90 mx-2">LIST</h5>
|
||||
<div data-plugins-list class="grid grid-cols-12 gap-3">
|
||||
{% for plugin in plugins %}
|
||||
<div data-plugins-type="{{ plugin['type'] }}"
|
||||
class="py-3 min-h-12 relative col-span-12 sm:col-span-6 2xl:col-span-4 3xl:col-span-3 p-1 flex justify-between items-center transition rounded {% if plugin['type'] != 'pro' or plugin['type'] == 'pro' and is_pro_version %} bg-gray-100 hover:bg-gray-300 dark:bg-slate-700 dark:hover:bg-slate-800 {% else %} cursor-not-allowed bg-gray-300 dark:bg-gray-800 {% endif %}">
|
||||
<p data-plugins-content
|
||||
class="{% if plugin['type'] == 'pro' and not is_pro_version %} opacity-80 dark:opacity-60 {% endif %} ml-3 mr-2 break-words mb-0 transition duration-300 ease-in-out text-left text-sm md:text-base text-slate-700 dark:text-gray-200">
|
||||
{{ plugin['name'] }}
|
||||
</p>
|
||||
<div class="flex items-center">
|
||||
{% if plugin['page'] and plugin['type'] != "pro" or (plugin['page'] and plugin['type'] == "pro" and is_pro_version) %}
|
||||
<a aria-label="plugin page link"
|
||||
class="hover:-translate-y-px mx-1"
|
||||
href="{{ request.url_root }}plugins/{{ plugin['id'] }}">
|
||||
<svg class="h-6 w-6 fill-sky-500 dark dark:brightness-90"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 448 512">
|
||||
<path d="M288 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h50.7L169.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L384 141.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32H288zM80 64C35.8 64 0 99.8 0 144V400c0 44.2 35.8 80 80 80H336c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v80c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h80c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z">
|
||||
</path>
|
||||
</svg>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if plugin['type'] == "external" %}
|
||||
<button data-plugins-action="delete"
|
||||
name="{{ plugin['id'] }}"
|
||||
aria-label="delete plugin"
|
||||
class="z-20 mx-2 inline-block font-bold text-left text-white uppercase align-middle transition-all cursor-pointer text-xs ease-in tracking-tight-rem hover:-translate-y-px">
|
||||
<svg class="h-5 w-5 fill-red-500 dark:brightness-90"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 448 512">
|
||||
<path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z" />
|
||||
</svg>
|
||||
</button>
|
||||
{% endif %}
|
||||
{% if plugin['type'] == "pro" %}
|
||||
<a {% if not is_pro_version %}target="_blank" rel="noopener"{% endif %}
|
||||
aria-label="pro plugin"
|
||||
class="hover:-translate-y-px mx-1 -translate-y-0.5"
|
||||
href="{% if not is_pro_version %}https://panel.bunkerweb.io/?utm_campaign=self&utm_source=ui#pro{% else %}javascript:void(0){% endif %}">
|
||||
<svg class="h-6 w-6 dark:brightness-90"
|
||||
viewBox="0 0 48 46"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path class="fill-yellow-500" d="M43.218 28.2327L43.6765 23.971C43.921 21.6973 44.0825 20.1957 43.9557 19.2497L44 19.25C46.071 19.25 47.75 17.5711 47.75 15.5C47.75 13.4289 46.071 11.75 44 11.75C41.929 11.75 40.25 13.4289 40.25 15.5C40.25 16.4366 40.5935 17.2931 41.1613 17.9503C40.346 18.4535 39.2805 19.515 37.6763 21.1128C36.4405 22.3438 35.8225 22.9593 35.1333 23.0548C34.7513 23.1075 34.3622 23.0532 34.0095 22.898C33.373 22.6175 32.9485 21.8567 32.0997 20.335L27.6262 12.3135C27.1025 11.3747 26.6642 10.5889 26.2692 9.95662C27.89 9.12967 29 7.44445 29 5.5C29 2.73857 26.7615 0.5 24 0.5C21.2385 0.5 19 2.73857 19 5.5C19 7.44445 20.11 9.12967 21.7308 9.95662C21.3358 10.589 20.8975 11.3746 20.3738 12.3135L15.9002 20.335C15.0514 21.8567 14.627 22.6175 13.9905 22.898C13.6379 23.0532 13.2487 23.1075 12.8668 23.0548C12.1774 22.9593 11.5595 22.3438 10.3238 21.1128C8.71968 19.515 7.6539 18.4535 6.83882 17.9503C7.4066 17.2931 7.75 16.4366 7.75 15.5C7.75 13.4289 6.07107 11.75 4 11.75C1.92893 11.75 0.25 13.4289 0.25 15.5C0.25 17.5711 1.92893 19.25 4 19.25L4.04428 19.2497C3.91755 20.1957 4.07905 21.6973 4.32362 23.971L4.782 28.2327C5.03645 30.5982 5.24802 32.849 5.50717 34.875H42.4928C42.752 32.849 42.9635 30.5982 43.218 28.2327Z" fill="#1C274C" />
|
||||
<path class="fill-yellow-500" d="M21.2803 45.5H26.7198C33.8098 45.5 37.3545 45.5 39.7198 43.383C40.7523 42.4588 41.4057 40.793 41.8775 38.625H6.1224C6.59413 40.793 7.24783 42.4588 8.2802 43.383C10.6454 45.5 14.1903 45.5 21.2803 45.5Z" fill="#1C274C" />
|
||||
</svg>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div data-plugins-nomatch
|
||||
class="hidden w-full overflow-hidden grid grid-cols-12 max-h-100 sm:max-h-125 col-span-12 p-4 relative break-words">
|
||||
<div class="col-span-12 flex flex-col justify-center items-center h-fit">
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="mb-2 w-8 h-8 stroke-white">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6" />
|
||||
</svg>
|
||||
<h5 class="font-bold dark:text-white/90 mx-2 text-white">No plugins match</h5>
|
||||
<div class="overflow-auto w-full col-span-12 p-4 relative break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border">
|
||||
<div class="col-span-12">
|
||||
<h5 class="mx-2 font-bold dark:text-white/90 mx-2">PLUGINS LIST</h5>
|
||||
</div>
|
||||
<div data-plugins-list-container
|
||||
class="min-h-[55vh] max-h-80 overflow-auto p-2 col-span-12 relative">
|
||||
<div data-plugins-list class="grid grid-cols-12 gap-3">
|
||||
{% for plugin in plugins %}
|
||||
<div data-plugins-type="{{ plugin['type'] }}"
|
||||
class="py-3 min-h-12 relative col-span-12 sm:col-span-6 2xl:col-span-4 3xl:col-span-3 p-1 flex justify-between items-center transition rounded {% if plugin['type'] != 'pro' or plugin['type'] == 'pro' and is_pro_version %} bg-gray-100 hover:bg-gray-300 dark:bg-slate-700 dark:hover:bg-slate-800 {% else %} cursor-not-allowed bg-gray-300 dark:bg-gray-800 {% endif %}">
|
||||
<p data-plugins-content
|
||||
class="{% if plugin['type'] == 'pro' and not is_pro_version %} opacity-80 dark:opacity-60 {% endif %} ml-3 mr-2 break-words mb-0 transition duration-300 ease-in-out text-left text-sm md:text-base text-slate-700 dark:text-gray-200">
|
||||
{{ plugin['name'] }}
|
||||
</p>
|
||||
<div class="flex items-center">
|
||||
{% if plugin['page'] and plugin['type'] != "pro" or (plugin['page'] and plugin['type'] == "pro" and is_pro_version) %}
|
||||
<a aria-label="plugin page link"
|
||||
class="hover:-translate-y-px mx-1"
|
||||
href="{{ request.url_root }}plugins/{{ plugin['id'] }}">
|
||||
<svg class="h-6 w-6 fill-sky-500 dark dark:brightness-90"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 448 512">
|
||||
<path d="M288 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h50.7L169.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L384 141.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32H288zM80 64C35.8 64 0 99.8 0 144V400c0 44.2 35.8 80 80 80H336c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v80c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h80c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z">
|
||||
</path>
|
||||
</svg>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if plugin['type'] == "external" %}
|
||||
<button data-plugins-action="delete"
|
||||
name="{{ plugin['id'] }}"
|
||||
aria-label="delete plugin"
|
||||
class="z-20 mx-2 inline-block font-bold text-left text-white uppercase align-middle transition-all cursor-pointer text-xs ease-in tracking-tight-rem hover:-translate-y-px">
|
||||
<svg class="h-5 w-5 fill-red-500 dark:brightness-90"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 448 512">
|
||||
<path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z" />
|
||||
</svg>
|
||||
</button>
|
||||
{% endif %}
|
||||
{% if plugin['type'] == "pro" %}
|
||||
<a {% if not is_pro_version %}target="_blank" rel="noopener"{% endif %}
|
||||
aria-label="pro plugin"
|
||||
class="hover:-translate-y-px mx-1 -translate-y-0.5"
|
||||
href="{% if not is_pro_version %}https://panel.bunkerweb.io/?utm_campaign=self&utm_source=ui#pro{% else %}javascript:void(0){% endif %}">
|
||||
<svg class="h-6 w-6 dark:brightness-90"
|
||||
viewBox="0 0 48 46"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path class="fill-yellow-500" d="M43.218 28.2327L43.6765 23.971C43.921 21.6973 44.0825 20.1957 43.9557 19.2497L44 19.25C46.071 19.25 47.75 17.5711 47.75 15.5C47.75 13.4289 46.071 11.75 44 11.75C41.929 11.75 40.25 13.4289 40.25 15.5C40.25 16.4366 40.5935 17.2931 41.1613 17.9503C40.346 18.4535 39.2805 19.515 37.6763 21.1128C36.4405 22.3438 35.8225 22.9593 35.1333 23.0548C34.7513 23.1075 34.3622 23.0532 34.0095 22.898C33.373 22.6175 32.9485 21.8567 32.0997 20.335L27.6262 12.3135C27.1025 11.3747 26.6642 10.5889 26.2692 9.95662C27.89 9.12967 29 7.44445 29 5.5C29 2.73857 26.7615 0.5 24 0.5C21.2385 0.5 19 2.73857 19 5.5C19 7.44445 20.11 9.12967 21.7308 9.95662C21.3358 10.589 20.8975 11.3746 20.3738 12.3135L15.9002 20.335C15.0514 21.8567 14.627 22.6175 13.9905 22.898C13.6379 23.0532 13.2487 23.1075 12.8668 23.0548C12.1774 22.9593 11.5595 22.3438 10.3238 21.1128C8.71968 19.515 7.6539 18.4535 6.83882 17.9503C7.4066 17.2931 7.75 16.4366 7.75 15.5C7.75 13.4289 6.07107 11.75 4 11.75C1.92893 11.75 0.25 13.4289 0.25 15.5C0.25 17.5711 1.92893 19.25 4 19.25L4.04428 19.2497C3.91755 20.1957 4.07905 21.6973 4.32362 23.971L4.782 28.2327C5.03645 30.5982 5.24802 32.849 5.50717 34.875H42.4928C42.752 32.849 42.9635 30.5982 43.218 28.2327Z" fill="#1C274C" />
|
||||
<path class="fill-yellow-500" d="M21.2803 45.5H26.7198C33.8098 45.5 37.3545 45.5 39.7198 43.383C40.7523 42.4588 41.4057 40.793 41.8775 38.625H6.1224C6.59413 40.793 7.24783 42.4588 8.2802 43.383C10.6454 45.5 14.1903 45.5 21.2803 45.5Z" fill="#1C274C" />
|
||||
</svg>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div data-plugins-nomatch
|
||||
class="hidden w-full overflow-hidden grid grid-cols-12 max-h-100 sm:max-h-125 col-span-12 p-4 relative break-words">
|
||||
<div class="col-span-12 flex flex-col justify-center items-center h-fit">
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="mb-2 w-8 h-8 stroke-white">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6" />
|
||||
</svg>
|
||||
<h5 class="font-bold dark:text-white/90 mx-2 text-white">No plugins match</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
|||
159
src/ui/templates/reports.html
vendored
159
src/ui/templates/reports.html
vendored
|
|
@ -204,89 +204,92 @@
|
|||
<h5 class="font-bold dark:text-white/90 mx-2 text-white">No reports match</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div data-reports-list-container
|
||||
class="w-full overflow-hidden grid grid-cols-12 col-span-12 p-4 relative break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border">
|
||||
<div class="overflow-auto w-full col-span-12 p-4 relative break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border">
|
||||
<div class="col-span-12">
|
||||
<h5 class="mb-4 mt-2 font-bold dark:text-white/90 mx-2">REPORTING</h5>
|
||||
<h5 class="mx-2 font-bold dark:text-white/90 mx-2">REPORTING LIST</h5>
|
||||
</div>
|
||||
<div class=" max-h-100 sm:max-h-125 col-span-12 overflow-y-auto overflow-x-auto">
|
||||
<!-- list container-->
|
||||
<div class="min-w-[1300px] w-full grid grid-cols-12 rounded p-2">
|
||||
{% set reports_header = [
|
||||
{
|
||||
"name": "Date",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "IP",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "Country",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "Method",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "URL",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Code",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "User agent",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Reason",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "Data",
|
||||
"position": "col-span-2"
|
||||
}
|
||||
] %}
|
||||
<!-- header-->
|
||||
{% for header in reports_header %}
|
||||
<p class="dark:text-gray-100 flex justify-center h-8 text-sm font-bold {{ header['position'] }} m-0 pb-2 border-b border-gray-400">
|
||||
{{ header['name'] }}
|
||||
</p>
|
||||
{% endfor %}
|
||||
<!-- end header-->
|
||||
<!-- list -->
|
||||
<ul class="col-span-12 w-full" data-reports-list>
|
||||
{% for report in reports %}
|
||||
<li data-reports-item
|
||||
class="items-center grid grid-cols-12 border-b border-gray-300 py-2.5">
|
||||
<p class="text-center flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1"
|
||||
data-reports-date="{{ report['date'] }}">{{ report['date'] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1"
|
||||
data-reports-ip="{{ report['ip'] }}">{{ report['ip'] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1"
|
||||
data-reports-country="{{ report['country'] }}">{{ report['country'] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1 "
|
||||
data-reports-method="{{ report['method'] }}">{{ report["method"] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-reports-url="{{ report['url'] }}">{{ report['url'] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1 "
|
||||
data-reports-status="{{ report['status'] }}">{{ report["status"] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-2 m-0 my-1 "
|
||||
data-reports-user_agent="{{ report['user_agent'] }}">{{ report["user_agent"] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1 "
|
||||
data-reports-reason="{{ report['reason'] }}">{{ report["reason"] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-reports-data="{{ report['data'] }}">{{ report["data"] }}</p>
|
||||
</li>
|
||||
<div data-reports-list-container
|
||||
class="w-full overflow-auto grid grid-cols-12 col-span-12 p-4 relative">
|
||||
<div class=" max-h-100 sm:max-h-125 col-span-12 overflow-y-auto overflow-x-auto">
|
||||
<!-- list container-->
|
||||
<div class="overflow-hidden min-w-[1300px] w-full grid grid-cols-12 rounded p-2">
|
||||
{% set reports_header = [
|
||||
{
|
||||
"name": "Date",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "IP",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "Country",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "Method",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "URL",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Code",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "User agent",
|
||||
"position": "col-span-2"
|
||||
},
|
||||
{
|
||||
"name": "Reason",
|
||||
"position": "col-span-1"
|
||||
},
|
||||
{
|
||||
"name": "Data",
|
||||
"position": "col-span-2"
|
||||
}
|
||||
] %}
|
||||
<!-- header-->
|
||||
{% for header in reports_header %}
|
||||
<p class="dark:text-gray-100 flex justify-center h-8 text-sm font-bold {{ header['position'] }} m-0 pb-2 border-b border-gray-400">
|
||||
{{ header['name'] }}
|
||||
</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<!-- end list-->
|
||||
<!-- end header-->
|
||||
<!-- list -->
|
||||
<ul class="col-span-12 w-full" data-reports-list>
|
||||
{% for report in reports %}
|
||||
<li data-reports-item
|
||||
class="items-center grid grid-cols-12 border-b border-gray-300 py-2.5">
|
||||
<p class="text-center flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1"
|
||||
data-reports-date="{{ report['date'] }}">{{ report['date'] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1"
|
||||
data-reports-ip="{{ report['ip'] }}">{{ report['ip'] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1"
|
||||
data-reports-country="{{ report['country'] }}">{{ report['country'] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1 "
|
||||
data-reports-method="{{ report['method'] }}">{{ report["method"] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-reports-url="{{ report['url'] }}">{{ report['url'] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1 "
|
||||
data-reports-status="{{ report['status'] }}">{{ report["status"] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-2 m-0 my-1 "
|
||||
data-reports-user_agent="{{ report['user_agent'] }}">{{ report["user_agent"] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-1 m-0 my-1 "
|
||||
data-reports-reason="{{ report['reason'] }}">{{ report["reason"] }}</p>
|
||||
<p class="flex justify-center dark:text-gray-400 text-sm col-span-2 m-0 my-1"
|
||||
data-reports-data="{{ report['data'] }}">{{ report["data"] }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<!-- end list-->
|
||||
</div>
|
||||
<!-- end list container-->
|
||||
</div>
|
||||
<!-- end list container-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
{% endblock content %}
|
||||
|
|
|
|||
2
src/ui/templates/services_modal_delete.html
vendored
2
src/ui/templates/services_modal_delete.html
vendored
|
|
@ -21,4 +21,4 @@
|
|||
</div>
|
||||
<!-- end action button-->
|
||||
</form>
|
||||
<!-- end delete form-->
|
||||
<!-- end delete form-->
|
||||
|
|
|
|||
|
|
@ -112,4 +112,4 @@
|
|||
<p data-services-modal-error-msg
|
||||
class="hidden text-red-500 font-bold dark:opacity-80 mb-0 text-center"></p>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -404,7 +404,6 @@ try:
|
|||
log_error("The service is still working, retry in 5 seconds ...")
|
||||
sleep(5)
|
||||
|
||||
|
||||
log_info("Create another service app3.example.com to get filters (need at least 4 services on page)")
|
||||
|
||||
try:
|
||||
|
|
|
|||
Loading…
Reference in a new issue