Reformat and don't pass back default parameters to URL
parent
ba57c378cd
commit
11dbe3e094
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,46 +1,46 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<article class="panel is-info">
|
<article class="panel is-info">
|
||||||
<p class="panel-heading">
|
<p class="panel-heading">
|
||||||
User information
|
User information
|
||||||
</p>
|
</p>
|
||||||
<a class="panel-block is-active">
|
<a class="panel-block is-active">
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<i class="fas fa-id-card" aria-hidden="true"></i>
|
<i class="fas fa-id-card" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<span class="tag is-info">{{ user.first_name }} {{ user.last_name }}</span>
|
<span class="tag is-info">{{ user.first_name }} {{ user.last_name }}</span>
|
||||||
</a>
|
</a>
|
||||||
<a class="panel-block">
|
<a class="panel-block">
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<i class="fas fa-binary" aria-hidden="true"></i>
|
<i class="fas fa-binary" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
{% for plan in user.plans.all %}
|
{% for plan in user.plans.all %}
|
||||||
<span class="tag is-info">{{ plan.name }}</span>
|
<span class="tag is-info">{{ plan.name }}</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</a>
|
</a>
|
||||||
<a class="panel-block">
|
<a class="panel-block">
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<i class="fas fa-credit-card" aria-hidden="true"></i>
|
<i class="fas fa-credit-card" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<span class="tag">{{ user.last_payment }}</span>
|
<span class="tag">{{ user.last_payment }}</span>
|
||||||
</a>
|
</a>
|
||||||
<a class="panel-block" href="{% url 'portal' %}">
|
<a class="panel-block" href="{% url 'portal' %}">
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<i class="fa-brands fa-stripe-s" aria-hidden="true"></i>
|
<i class="fa-brands fa-stripe-s" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
Subscription management
|
Subscription management
|
||||||
</a>
|
</a>
|
||||||
</article>
|
</article>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h1 class="subtitle">
|
<h1 class="subtitle">
|
||||||
This product is currently free. You may cancel any plans above.
|
This product is currently free. You may cancel any plans above.
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h1 class="subtitle">
|
<h1 class="subtitle">
|
||||||
You cannot pay for access to the raw data. It is hashed to preserve privacy.
|
You cannot pay for access to the raw data. It is hashed to preserve privacy.
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
{# {% include "partials/product-list.html" %} #}
|
{# {% include "partials/product-list.html" %} #}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1 class="title">Access denied</h1>
|
<h1 class="title">Access denied</h1>
|
||||||
<h2 class="subtitle">Sorry, you do not have the necessary permissions to view this page.</h2>
|
<h2 class="subtitle">Sorry, you do not have the necessary permissions to view this page.</h2>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -1,81 +1,81 @@
|
|||||||
<div id="actions">
|
<div id="actions">
|
||||||
{% include 'manage/threshold/partials/notify.html' %}
|
{% include 'manage/threshold/partials/notify.html' %}
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<button
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-put="{% url 'threshold_irc_network_actions_add_relay' net %}"
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#actions"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
class="button is-info">
|
|
||||||
<span class="icon-text">
|
|
||||||
<span class="icon">
|
|
||||||
<i class="fa-solid fa-plus"></i>
|
|
||||||
</span>
|
|
||||||
<span>Relay</span>
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-post="{% url 'threshold_irc_network_actions_auto' net %}"
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#actions"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
class="button is-info">
|
|
||||||
<span class="icon-text">
|
|
||||||
<span class="icon">
|
|
||||||
<i class="fa-solid fa-wrench"></i>
|
|
||||||
</span>
|
|
||||||
<span>Auto</span>
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-get="{% url 'threshold_irc_actions_registration_net' net %}"
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#modals-here"
|
|
||||||
class="button is-info">
|
|
||||||
<span class="icon-text">
|
|
||||||
<span class="icon">
|
|
||||||
<i class="fa-solid fa-list"></i>
|
|
||||||
</span>
|
|
||||||
<span>Registration</span>
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-post="{% url 'threshold_irc_network_list' net %}"
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#actions"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
class="button is-info">
|
|
||||||
<span class="icon-text">
|
|
||||||
<span class="icon">
|
|
||||||
<i class="fa-solid fa-list"></i>
|
|
||||||
</span>
|
|
||||||
<span>List</span>
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<form method="POST">
|
|
||||||
<div class="field has-addons">
|
|
||||||
<div class="control is-expanded has-icons-left">
|
|
||||||
<input class="input" name="num" type="text" placeholder="Relay number">
|
|
||||||
<span class="icon is-small is-left">
|
|
||||||
<i class="fa-brands fa-unity"></i>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="control">
|
|
||||||
<button
|
<button
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
class="button is-info is-fullwidth"
|
hx-put="{% url 'threshold_irc_network_actions_add_relay' net %}"
|
||||||
hx-put="{% url 'threshold_irc_network_actions_add_relay' net %}"
|
hx-trigger="click"
|
||||||
hx-trigger="click"
|
hx-target="#actions"
|
||||||
hx-target="#actions"
|
hx-swap="outerHTML"
|
||||||
hx-swap="outerHTML">
|
class="button is-info">
|
||||||
Add
|
<span class="icon-text">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa-solid fa-plus"></i>
|
||||||
|
</span>
|
||||||
|
<span>Relay</span>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-post="{% url 'threshold_irc_network_actions_auto' net %}"
|
||||||
|
hx-trigger="click"
|
||||||
|
hx-target="#actions"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
class="button is-info">
|
||||||
|
<span class="icon-text">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa-solid fa-wrench"></i>
|
||||||
|
</span>
|
||||||
|
<span>Auto</span>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-get="{% url 'threshold_irc_actions_registration_net' net %}"
|
||||||
|
hx-trigger="click"
|
||||||
|
hx-target="#modals-here"
|
||||||
|
class="button is-info">
|
||||||
|
<span class="icon-text">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa-solid fa-list"></i>
|
||||||
|
</span>
|
||||||
|
<span>Registration</span>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-post="{% url 'threshold_irc_network_list' net %}"
|
||||||
|
hx-trigger="click"
|
||||||
|
hx-target="#actions"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
class="button is-info">
|
||||||
|
<span class="icon-text">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa-solid fa-list"></i>
|
||||||
|
</span>
|
||||||
|
<span>List</span>
|
||||||
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
<form method="POST">
|
||||||
|
<div class="field has-addons">
|
||||||
|
<div class="control is-expanded has-icons-left">
|
||||||
|
<input class="input" name="num" type="text" placeholder="Relay number">
|
||||||
|
<span class="icon is-small is-left">
|
||||||
|
<i class="fa-brands fa-unity"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<button
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
class="button is-info is-fullwidth"
|
||||||
|
hx-put="{% url 'threshold_irc_network_actions_add_relay' net %}"
|
||||||
|
hx-trigger="click"
|
||||||
|
hx-target="#actions"
|
||||||
|
hx-swap="outerHTML">
|
||||||
|
Add
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
@ -1,44 +1,44 @@
|
|||||||
<div id="channels">
|
<div id="channels">
|
||||||
{% include 'manage/threshold/partials/notify.html' %}
|
{% include 'manage/threshold/partials/notify.html' %}
|
||||||
{% if channels is not None %}
|
{% if channels is not None %}
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<thead>
|
<thead>
|
||||||
<th>channel</th>
|
<th>channel</th>
|
||||||
<th>num</th>
|
<th>num</th>
|
||||||
<th>actions</th>
|
<th>actions</th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for channel in channels %}
|
{% for channel in channels %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{{ channel.name }}
|
{{ channel.name }}
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ channel.users }}
|
{{ channel.users }}
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ channel.num }}
|
{{ channel.num }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button
|
<button
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}", "Content-Type": "application/json"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}", "Content-Type": "application/json"}'
|
||||||
hx-delete="{% url 'threshold_irc_network_channel_json' net %}"
|
hx-delete="{% url 'threshold_irc_network_channel_json' net %}"
|
||||||
hx-vals='{"channel": "{{ channel.name }}"}'
|
hx-vals='{"channel": "{{ channel.name }}"}'
|
||||||
hx-target="#channels"
|
hx-target="#channels"
|
||||||
hx-swap="outerHTML"
|
hx-swap="outerHTML"
|
||||||
class="button is-danger is-small">
|
class="button is-danger is-small">
|
||||||
<span class="icon" data-tooltip="Part">
|
<span class="icon" data-tooltip="Part">
|
||||||
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
@ -1,77 +1,77 @@
|
|||||||
<form
|
<form
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="{% url 'threshold_irc_network_edit' net %}"
|
hx-post="{% url 'threshold_irc_network_edit' net %}"
|
||||||
hx-target="this"
|
hx-target="this"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<thead>
|
<thead>
|
||||||
<th>attribute</th>
|
<th>attribute</th>
|
||||||
<th>value</th>
|
<th>value</th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for key, item in network.items %}
|
{% for key, item in network.items %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ key }}</th>
|
<th>{{ key }}</th>
|
||||||
<td>
|
<td>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
{% if key == 'auth' %}
|
{% if key == 'auth' %}
|
||||||
<div class="select">
|
<div class="select">
|
||||||
<select name="{{ key }}">
|
<select name="{{ key }}">
|
||||||
{% if item == 'sasl' %}
|
{% if item == 'sasl' %}
|
||||||
<option selected>sasl</option>
|
<option selected>sasl</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option>sasl</option>
|
<option>sasl</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if item == 'ns' %}
|
{% if item == 'ns' %}
|
||||||
<option selected>ns</option>
|
<option selected>ns</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option>ns</option>
|
<option>ns</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if item == 'none' %}
|
{% if item == 'none' %}
|
||||||
<option selected>none</option>
|
<option selected>none</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option>none</option>
|
<option>none</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
{% elif key == 'security' %}
|
{% elif key == 'security' %}
|
||||||
<div class="select">
|
<div class="select">
|
||||||
<select name="{{ key }}">
|
<select name="{{ key }}">
|
||||||
{% if item == 'ssl' %}
|
{% if item == 'ssl' %}
|
||||||
<option selected>ssl</option>
|
<option selected>ssl</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option>ssl</option>
|
<option>ssl</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if item == 'plain' %}
|
{% if item == 'plain' %}
|
||||||
<option selected>plain</option>
|
<option selected>plain</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option>plain</option>
|
<option>plain</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<input class="input" type="text" name="{{ key }}" value="{{ item }}">
|
<input class="input" type="text" name="{{ key }}" value="{{ item }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="button is-light"
|
class="button is-light"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_network_info' net %}">
|
hx-get="{% url 'threshold_irc_network_info' net %}">
|
||||||
Cancel
|
Cancel
|
||||||
</button>
|
</button>
|
||||||
<button type="submit" class="button is-info">Submit</button>
|
<button type="submit" class="button is-info">Submit</button>
|
||||||
<script>activateButtons();</script>
|
<script>activateButtons();</script>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -1,61 +1,61 @@
|
|||||||
<div id="info">
|
<div id="info">
|
||||||
{% include 'manage/threshold/partials/notify.html' %}
|
{% include 'manage/threshold/partials/notify.html' %}
|
||||||
{% if network is not None %}
|
{% if network is not None %}
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<thead>
|
<thead>
|
||||||
<th>attribute</th>
|
<th>attribute</th>
|
||||||
<th>value</th>
|
<th>value</th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for key, item in network.items %}
|
{% for key, item in network.items %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ key }}</th>
|
<th>{{ key }}</th>
|
||||||
<td>
|
<td>
|
||||||
{% if key == 'security' %}
|
{% if key == 'security' %}
|
||||||
{% if item == 'none' %}
|
{% if item == 'none' %}
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-lock-open" aria-hidden="true"></i>
|
<i class="fa-solid fa-lock-open" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item == 'ssl' %}
|
{% elif item == 'ssl' %}
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-lock" aria-hidden="true"></i>
|
<i class="fa-solid fa-lock" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif key == 'relays' %}
|
{% elif key == 'relays' %}
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-brands fa-unity"></i>
|
<i class="fa-brands fa-unity"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif key == 'channels' %}
|
{% elif key == 'channels' %}
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-hashtag"></i>
|
<i class="fa-solid fa-hashtag"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif key == 'records' %}
|
{% elif key == 'records' %}
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-album"></i>
|
<i class="fa-solid fa-album"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif key == 'host' %}
|
{% elif key == 'host' %}
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-router"></i>
|
<i class="fa-solid fa-router"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item is not None %}
|
{% if item is not None %}
|
||||||
{{ item }}
|
{{ item }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div hx-target="#info" hx-swap="outerHTML">
|
<div hx-target="#info" hx-swap="outerHTML">
|
||||||
<button hx-get="{% url 'threshold_irc_network_info_edit' network.net %}" class="button is-info is-fullwidth">
|
<button hx-get="{% url 'threshold_irc_network_info_edit' network.net %}" class="button is-info is-fullwidth">
|
||||||
<span class="icon" data-tooltip="Edit">
|
<span class="icon" data-tooltip="Edit">
|
||||||
<i class="fa-solid fa-pencil" aria-hidden="true"></i>
|
<i class="fa-solid fa-pencil" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endif %}
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
@ -1,150 +1,150 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("restore-relay-scroll", function(event) {
|
document.addEventListener("restore-relay-scroll", function(event) {
|
||||||
var modalContent = document.getElementsByClassName("relay_table_container")[0];
|
var modalContent = document.getElementsByClassName("relay_table_container")[0];
|
||||||
var maxScroll = modalContent.scrollHeight - modalContent.offsetHeight;
|
var maxScroll = modalContent.scrollHeight - modalContent.offsetHeight;
|
||||||
var scrollpos = localStorage.getItem('scrollpos_relays_table');
|
var scrollpos = localStorage.getItem('scrollpos_relays_table');
|
||||||
if (scrollpos == 'BOTTOM') {
|
if (scrollpos == 'BOTTOM') {
|
||||||
modalContent.scrollTop = maxScroll;
|
modalContent.scrollTop = maxScroll;
|
||||||
} else if (scrollpos) {
|
} else if (scrollpos) {
|
||||||
modalContent.scrollTop = scrollpos;
|
modalContent.scrollTop = scrollpos;
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
document.addEventListener("htmx:beforeSwap", function(event) {
|
document.addEventListener("htmx:beforeSwap", function(event) {
|
||||||
var modalContent = document.getElementsByClassName("relay_table_container")[0];
|
var modalContent = document.getElementsByClassName("relay_table_container")[0];
|
||||||
var scrollpos = modalContent.scrollTop;
|
var scrollpos = modalContent.scrollTop;
|
||||||
if(modalContent.scrollTop === (modalContent.scrollHeight - modalContent.offsetHeight)) {
|
if(modalContent.scrollTop === (modalContent.scrollHeight - modalContent.offsetHeight)) {
|
||||||
localStorage.setItem('scrollpos_relays_table', 'BOTTOM');
|
localStorage.setItem('scrollpos_relays_table', 'BOTTOM');
|
||||||
} else {
|
} else {
|
||||||
localStorage.setItem('scrollpos_relays_table', scrollpos);
|
localStorage.setItem('scrollpos_relays_table', scrollpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_network_info' net %}"
|
hx-get="{% url 'threshold_irc_network_info' net %}"
|
||||||
hx-trigger="load, every 60s"
|
hx-trigger="load, every 60s"
|
||||||
hx-target="#info"
|
hx-target="#info"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_network_relays' net %}"
|
hx-get="{% url 'threshold_irc_network_relays' net %}"
|
||||||
hx-trigger="load, every 60s"
|
hx-trigger="load, every 60s"
|
||||||
hx-target="#relays"
|
hx-target="#relays"
|
||||||
{# hx-swap="innerHTML" #}
|
{# hx-swap="innerHTML" #}
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_network_channels' net %}"
|
hx-get="{% url 'threshold_irc_network_channels' net %}"
|
||||||
hx-trigger="load, every 60s"
|
hx-trigger="load, every 60s"
|
||||||
hx-target="#channels"
|
hx-target="#channels"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_network_actions' net %}"
|
hx-get="{% url 'threshold_irc_network_actions' net %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#actions"
|
hx-target="#actions"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_network_list' net %}"
|
hx-get="{% url 'threshold_irc_network_list' net %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#stats"
|
hx-target="#stats"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div id="info">
|
<div id="info">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<!-- <div class="column">
|
||||||
</div>
|
|
||||||
<!-- <div class="column">
|
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div id="relays">
|
<div id="relays">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
</div> -->
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div>
|
<div>
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<div class="table-container relay_table_container" id="relays">
|
<div class="table-container relay_table_container" id="relays">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div id="channels">
|
<div id="channels">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="column">
|
||||||
</div>
|
<div class="box">
|
||||||
<div class="column">
|
<div id="stats">
|
||||||
<div class="box">
|
Stats here
|
||||||
<div id="stats">
|
</div>
|
||||||
Stats here
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="columns">
|
||||||
<div class="columns">
|
<div class="column">
|
||||||
<div class="column">
|
{# This is the only thing included without HTMX because it isn't interactive #}
|
||||||
{# This is the only thing included without HTMX because it isn't interactive #}
|
{# It needs no dynamic message element because it posts messages to chanels #}
|
||||||
{# It needs no dynamic message element because it posts messages to chanels #}
|
<div class="box">
|
||||||
<div class="box">
|
<form method="POST">
|
||||||
<form method="POST">
|
<div class="field has-addons">
|
||||||
<div class="field has-addons">
|
<div class="control is-expanded has-icons-left">
|
||||||
<div class="control is-expanded has-icons-left">
|
<input id="query" name="channel" class="input" type="text" placeholder="channel">
|
||||||
<input id="query" name="channel" class="input" type="text" placeholder="channel">
|
<span class="icon is-small is-left">
|
||||||
<span class="icon is-small is-left">
|
<i class="fa-solid fa-hashtag"></i>
|
||||||
<i class="fa-solid fa-hashtag"></i>
|
</span>
|
||||||
</span>
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<button
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
class="button is-info is-fullwidth"
|
||||||
|
hx-put="{% url 'threshold_irc_network_channel' net %}"
|
||||||
|
hx-trigger="click"
|
||||||
|
hx-target="#channels"
|
||||||
|
hx-swap="outerHTML">
|
||||||
|
Join
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="control">
|
</div>
|
||||||
<button
|
<div class="column">
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
<div class="box">
|
||||||
class="button is-info is-fullwidth"
|
<div id="actions">
|
||||||
hx-put="{% url 'threshold_irc_network_channel' net %}"
|
</div>
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#channels"
|
|
||||||
hx-swap="outerHTML">
|
|
||||||
Join
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="column">
|
|
||||||
<div class="box">
|
|
||||||
<div id="actions">
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div id="modals-here">
|
||||||
<div id="modals-here">
|
</div>
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -1,221 +1,221 @@
|
|||||||
{% load index %}
|
{% load index %}
|
||||||
|
|
||||||
<div class="table-container relay_table_container" id="relays">
|
<div class="table-container relay_table_container" id="relays">
|
||||||
<table class="table is-fullwidth is-hoverable relays-table">
|
<table class="table is-fullwidth is-hoverable relays-table">
|
||||||
<thead>
|
<thead>
|
||||||
<th>id</th>
|
<th>id</th>
|
||||||
<th>
|
<th>
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Registered">
|
<span class="icon has-tooltip-bottom" data-tooltip="Registered">
|
||||||
<i class="fa-solid fa-seal"></i>
|
<i class="fa-solid fa-seal"></i>
|
||||||
</span>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Authenticated">
|
|
||||||
<i class="fa-solid fa-passport"></i>
|
|
||||||
</span>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Connected">
|
|
||||||
<i class="fa-solid fa-cloud-question"></i>
|
|
||||||
</span>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Enabled">
|
|
||||||
<i class="fa-solid fa-toggle-on"></i>
|
|
||||||
</span>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Channels">
|
|
||||||
<i class="fa-solid fa-hashtag"></i>
|
|
||||||
</span>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Chanlimit">
|
|
||||||
<i class="fa-solid fa-list-ol"></i>
|
|
||||||
</span>
|
|
||||||
</th>
|
|
||||||
<th>nick</th>
|
|
||||||
<th>
|
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Actions">
|
|
||||||
<i class="fa-solid fa-wrench"></i>
|
|
||||||
</span>
|
|
||||||
</th>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for relay in relays %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ relay.id }}</td>
|
|
||||||
<td>
|
|
||||||
{% if relay.registered %}
|
|
||||||
<span class="icon has-text-success">
|
|
||||||
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% else %}
|
|
||||||
<span class="icon has-text-danger">
|
|
||||||
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if relay.authed %}
|
|
||||||
<span class="icon has-text-success">
|
|
||||||
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% else %}
|
|
||||||
<span class="icon has-text-danger">
|
|
||||||
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if relay.conn %}
|
|
||||||
<span class="icon has-text-success">
|
|
||||||
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% else %}
|
|
||||||
<span class="icon has-text-danger">
|
|
||||||
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if relay.enabled %}
|
|
||||||
<span class="icon has-text-success">
|
|
||||||
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% else %}
|
|
||||||
<span class="icon has-text-danger">
|
|
||||||
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ relay.chans }}
|
|
||||||
</td>
|
|
||||||
<td>{{ relay.limit }}</td>
|
|
||||||
<td>
|
|
||||||
{{ relay.nick }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-post="{% url 'modal_context' %}"
|
|
||||||
hx-vals='{"net": "{{ net }}",
|
|
||||||
"num": "{{ relay.id }}",
|
|
||||||
"source": "irc",
|
|
||||||
"channel": "*status",
|
|
||||||
"time": "None",
|
|
||||||
"date": "None",
|
|
||||||
"index": "int",
|
|
||||||
"type": "znc",
|
|
||||||
"mtype": "None",
|
|
||||||
"nick": "*status",
|
|
||||||
"dedup": "on"}'
|
|
||||||
hx-target="#modals-here"
|
|
||||||
hx-trigger="click"
|
|
||||||
class="button is-small has-background-info has-text-white">
|
|
||||||
<span class="icon has-tooltip-left" data-tooltip="ZNC context">
|
|
||||||
<i class="fa-brands fa-unity" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<a
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-delete="{% url 'threshold_irc_network_relay_del' relay|index:'net' relay|index:'id' %}"
|
|
||||||
hx-target="#relays"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
class="button is-small has-background-danger has-text-white">
|
|
||||||
<span class="icon" data-tooltip="Delete">
|
|
||||||
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-post="{% url 'threshold_irc_network_relay_provision' relay|index:'net' relay|index:'id' %}"
|
|
||||||
hx-target="#relays"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
class="button is-small has-background-info has-text-white">
|
|
||||||
<span class="icon" data-tooltip="Provision">
|
|
||||||
<i class="fa-solid fa-wrench" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-post="{% url 'threshold_irc_network_relay_auth' relay|index:'net' relay|index:'id' %}"
|
|
||||||
hx-target="#relays"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
class="button is-small has-background-info has-text-white">
|
|
||||||
<span class="icon" data-tooltip="Enable authentication">
|
|
||||||
<i class="fa-solid fa-passport" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td></td>
|
|
||||||
<td>
|
|
||||||
{% if relay.enabled %}
|
|
||||||
<a
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-get="{% url 'threshold_irc_network_relay_status' relay|index:'net' relay|index:'id' 0 %}"
|
|
||||||
hx-target="#relays"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
class="button is-small has-background-warning">
|
|
||||||
<span class="icon" data-tooltip="Disable">
|
|
||||||
<i class="fa-solid fa-wifi-slash" aria-hidden="true"></i>
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</th>
|
||||||
{% else %}
|
<th>
|
||||||
<a
|
<span class="icon has-tooltip-bottom" data-tooltip="Authenticated">
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
<i class="fa-solid fa-passport"></i>
|
||||||
hx-get="{% url 'threshold_irc_network_relay_status' relay|index:'net' relay|index:'id' 1 %}"
|
|
||||||
hx-target="#relays"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
class="button is-small has-background-success has-text-white">
|
|
||||||
<span class="icon" data-tooltip="Enable">
|
|
||||||
<i class="fa-solid fa-wifi" aria-hidden="true"></i>
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</th>
|
||||||
{% endif %}
|
<th>
|
||||||
</td>
|
<span class="icon has-tooltip-bottom" data-tooltip="Connected">
|
||||||
<td></td>
|
<i class="fa-solid fa-cloud-question"></i>
|
||||||
<td></td>
|
</span>
|
||||||
<td></td>
|
</th>
|
||||||
<td>
|
<th>
|
||||||
<a
|
<span class="icon has-tooltip-bottom" data-tooltip="Enabled">
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
<i class="fa-solid fa-toggle-on"></i>
|
||||||
hx-post="{% url 'modal_context' %}"
|
</span>
|
||||||
hx-vals='{"net": "{{ net }}",
|
</th>
|
||||||
"num": "{{ relay.id }}",
|
<th>
|
||||||
"source": "irc",
|
<span class="icon has-tooltip-bottom" data-tooltip="Channels">
|
||||||
"channel": "{{ sinst.entity }}",
|
<i class="fa-solid fa-hashtag"></i>
|
||||||
"time": "None",
|
</span>
|
||||||
"date": "None",
|
</th>
|
||||||
"index": "int",
|
<th>
|
||||||
"type": "auth",
|
<span class="icon has-tooltip-bottom" data-tooltip="Chanlimit">
|
||||||
"mtype": "None",
|
<i class="fa-solid fa-list-ol"></i>
|
||||||
"nick": "{{ sinst.entity }}",
|
</span>
|
||||||
"dedup": "on"}'
|
</th>
|
||||||
hx-target="#modals-here"
|
<th>nick</th>
|
||||||
hx-trigger="click"
|
<th>
|
||||||
class="button is-small has-background-info has-text-white">
|
<span class="icon has-tooltip-bottom" data-tooltip="Actions">
|
||||||
<span class="icon has-tooltip-left" data-tooltip="Auth ({{ sinst.entity }})">
|
<i class="fa-solid fa-wrench"></i>
|
||||||
<i class="fa-solid fa-signature" aria-hidden="true"></i>
|
</span>
|
||||||
</span>
|
</th>
|
||||||
</a>
|
</thead>
|
||||||
</td>
|
<tbody>
|
||||||
</tr>
|
{% for relay in relays %}
|
||||||
{% endfor %}
|
<tr>
|
||||||
</tbody>
|
<td>{{ relay.id }}</td>
|
||||||
</table>
|
<td>
|
||||||
<script>
|
{% if relay.registered %}
|
||||||
var modal_event = new Event('restore-relay-scroll');
|
<span class="icon has-text-success">
|
||||||
document.dispatchEvent(modal_event);
|
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
||||||
</script>
|
</span>
|
||||||
{% include 'manage/threshold/partials/notify.html' %}
|
{% else %}
|
||||||
|
<span class="icon has-text-danger">
|
||||||
|
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if relay.authed %}
|
||||||
|
<span class="icon has-text-success">
|
||||||
|
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="icon has-text-danger">
|
||||||
|
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if relay.conn %}
|
||||||
|
<span class="icon has-text-success">
|
||||||
|
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="icon has-text-danger">
|
||||||
|
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if relay.enabled %}
|
||||||
|
<span class="icon has-text-success">
|
||||||
|
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="icon has-text-danger">
|
||||||
|
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ relay.chans }}
|
||||||
|
</td>
|
||||||
|
<td>{{ relay.limit }}</td>
|
||||||
|
<td>
|
||||||
|
{{ relay.nick }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-post="{% url 'modal_context' %}"
|
||||||
|
hx-vals='{"net": "{{ net }}",
|
||||||
|
"num": "{{ relay.id }}",
|
||||||
|
"source": "irc",
|
||||||
|
"channel": "*status",
|
||||||
|
"time": "None",
|
||||||
|
"date": "None",
|
||||||
|
"index": "int",
|
||||||
|
"type": "znc",
|
||||||
|
"mtype": "None",
|
||||||
|
"nick": "*status",
|
||||||
|
"dedup": "on"}'
|
||||||
|
hx-target="#modals-here"
|
||||||
|
hx-trigger="click"
|
||||||
|
class="button is-small has-background-info has-text-white">
|
||||||
|
<span class="icon has-tooltip-left" data-tooltip="ZNC context">
|
||||||
|
<i class="fa-brands fa-unity" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-delete="{% url 'threshold_irc_network_relay_del' relay|index:'net' relay|index:'id' %}"
|
||||||
|
hx-target="#relays"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
class="button is-small has-background-danger has-text-white">
|
||||||
|
<span class="icon" data-tooltip="Delete">
|
||||||
|
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-post="{% url 'threshold_irc_network_relay_provision' relay|index:'net' relay|index:'id' %}"
|
||||||
|
hx-target="#relays"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
class="button is-small has-background-info has-text-white">
|
||||||
|
<span class="icon" data-tooltip="Provision">
|
||||||
|
<i class="fa-solid fa-wrench" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-post="{% url 'threshold_irc_network_relay_auth' relay|index:'net' relay|index:'id' %}"
|
||||||
|
hx-target="#relays"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
class="button is-small has-background-info has-text-white">
|
||||||
|
<span class="icon" data-tooltip="Enable authentication">
|
||||||
|
<i class="fa-solid fa-passport" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
{% if relay.enabled %}
|
||||||
|
<a
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-get="{% url 'threshold_irc_network_relay_status' relay|index:'net' relay|index:'id' 0 %}"
|
||||||
|
hx-target="#relays"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
class="button is-small has-background-warning">
|
||||||
|
<span class="icon" data-tooltip="Disable">
|
||||||
|
<i class="fa-solid fa-wifi-slash" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<a
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-get="{% url 'threshold_irc_network_relay_status' relay|index:'net' relay|index:'id' 1 %}"
|
||||||
|
hx-target="#relays"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
class="button is-small has-background-success has-text-white">
|
||||||
|
<span class="icon" data-tooltip="Enable">
|
||||||
|
<i class="fa-solid fa-wifi" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-post="{% url 'modal_context' %}"
|
||||||
|
hx-vals='{"net": "{{ net }}",
|
||||||
|
"num": "{{ relay.id }}",
|
||||||
|
"source": "irc",
|
||||||
|
"channel": "{{ sinst.entity }}",
|
||||||
|
"time": "None",
|
||||||
|
"date": "None",
|
||||||
|
"index": "int",
|
||||||
|
"type": "auth",
|
||||||
|
"mtype": "None",
|
||||||
|
"nick": "{{ sinst.entity }}",
|
||||||
|
"dedup": "on"}'
|
||||||
|
hx-target="#modals-here"
|
||||||
|
hx-trigger="click"
|
||||||
|
class="button is-small has-background-info has-text-white">
|
||||||
|
<span class="icon has-tooltip-left" data-tooltip="Auth ({{ sinst.entity }})">
|
||||||
|
<i class="fa-solid fa-signature" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<script>
|
||||||
|
var modal_event = new Event('restore-relay-scroll');
|
||||||
|
document.dispatchEvent(modal_event);
|
||||||
|
</script>
|
||||||
|
{% include 'manage/threshold/partials/notify.html' %}
|
||||||
</div>
|
</div>
|
@ -1,27 +1,27 @@
|
|||||||
<div id="stats">
|
<div id="stats">
|
||||||
{% include 'manage/threshold/partials/notify.html' %}
|
{% include 'manage/threshold/partials/notify.html' %}
|
||||||
{% if list is not None %}
|
{% if list is not None %}
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<thead>
|
<thead>
|
||||||
<th>attribute</th>
|
<th>attribute</th>
|
||||||
<th>value</th>
|
<th>value</th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for key, item in list.items %}
|
{% for key, item in list.items %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ key }}</th>
|
<th>{{ key }}</th>
|
||||||
<td>
|
<td>
|
||||||
{% if item is not None %}
|
{% if item is not None %}
|
||||||
{{ item }}
|
{{ item }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
@ -1,45 +1,45 @@
|
|||||||
<div id="actions">
|
<div id="actions">
|
||||||
{% include 'manage/threshold/partials/notify.html' %}
|
{% include 'manage/threshold/partials/notify.html' %}
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<button
|
<button
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_actions_add-network' %}"
|
hx-get="{% url 'threshold_irc_actions_add-network' %}"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
hx-target="#modals-here"
|
hx-target="#modals-here"
|
||||||
class="button is-info">
|
class="button is-info">
|
||||||
<span class="icon-text">
|
<span class="icon-text">
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-plus"></i>
|
<i class="fa-solid fa-plus"></i>
|
||||||
</span>
|
</span>
|
||||||
<span>Network</span>
|
<span>Network</span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="% url 'threshold_irc_actions_auto' %"
|
hx-post="% url 'threshold_irc_actions_auto' %"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
hx-target="#actions"
|
hx-target="#actions"
|
||||||
hx-swap="outerHTML"
|
hx-swap="outerHTML"
|
||||||
class="button is-info">
|
class="button is-info">
|
||||||
<span class="icon-text">
|
<span class="icon-text">
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-wrench"></i>
|
<i class="fa-solid fa-wrench"></i>
|
||||||
</span>
|
</span>
|
||||||
<span>Auto</span>
|
<span>Auto</span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_actions_registration' %}"
|
hx-get="{% url 'threshold_irc_actions_registration' %}"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
hx-target="#modals-here"
|
hx-target="#modals-here"
|
||||||
class="button is-info">
|
class="button is-info">
|
||||||
<span class="icon-text">
|
<span class="icon-text">
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-list"></i>
|
<i class="fa-solid fa-list"></i>
|
||||||
</span>
|
</span>
|
||||||
<span>Registration</span>
|
<span>Registration</span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,45 +1,45 @@
|
|||||||
{% load joinsep %}
|
{% load joinsep %}
|
||||||
|
|
||||||
<div id="aliases">
|
<div id="aliases">
|
||||||
{% include 'manage/threshold/partials/notify.html' %}
|
{% include 'manage/threshold/partials/notify.html' %}
|
||||||
{% if aliases is not None %}
|
{% if aliases is not None %}
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<thead>
|
<thead>
|
||||||
<th>num</th>
|
<th>num</th>
|
||||||
<th>nick</th>
|
<th>nick</th>
|
||||||
<th>realname</th>
|
<th>realname</th>
|
||||||
<th>emails</th>
|
<th>emails</th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for alias in aliases %}
|
{% for alias in aliases %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{{ alias.num }}
|
{{ alias.num }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ alias.nick }}
|
{{ alias.nick }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ alias.realname }}
|
{{ alias.realname }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ alias.emails|joinsep:', ' }}
|
{{ alias.emails|joinsep:', ' }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div hx-target="#modals-here">
|
<div hx-target="#modals-here">
|
||||||
<button hx-get="{% url 'threshold_irc_aliases_edit' %}" class="button is-info is-fullwidth">
|
<button hx-get="{% url 'threshold_irc_aliases_edit' %}" class="button is-info is-fullwidth">
|
||||||
<span class="icon" data-tooltip="Edit">
|
<span class="icon" data-tooltip="Edit">
|
||||||
<i class="fa-solid fa-pencil" aria-hidden="true"></i>
|
<i class="fa-solid fa-pencil" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
@ -1,76 +1,76 @@
|
|||||||
<div id="networks">
|
<div id="networks">
|
||||||
{% include 'manage/threshold/partials/notify.html' %}
|
{% include 'manage/threshold/partials/notify.html' %}
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<thead>
|
<thead>
|
||||||
<th>net</th>
|
<th>net</th>
|
||||||
<th>
|
<th>
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Relays">
|
<span class="icon has-tooltip-bottom" data-tooltip="Relays">
|
||||||
<i class="fa-brands fa-unity"></i>
|
<i class="fa-brands fa-unity"></i>
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Active">
|
<span class="icon has-tooltip-bottom" data-tooltip="Active">
|
||||||
<i class="fa-solid fa-signal-bars-good"></i>
|
<i class="fa-solid fa-signal-bars-good"></i>
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Channels">
|
<span class="icon has-tooltip-bottom" data-tooltip="Channels">
|
||||||
<i class="fa-solid fa-hashtag"></i>
|
<i class="fa-solid fa-hashtag"></i>
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Records">
|
<span class="icon has-tooltip-bottom" data-tooltip="Records">
|
||||||
<i class="fa-solid fa-album"></i>
|
<i class="fa-solid fa-album"></i>
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<span class="icon has-tooltip-bottom" data-tooltip="Actions">
|
<span class="icon has-tooltip-bottom" data-tooltip="Actions">
|
||||||
<i class="fa-solid fa-wrench" aria-hidden="true"></i>
|
<i class="fa-solid fa-wrench" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
</thead>
|
</thead>
|
||||||
{% for key, net in networks.items %}
|
{% for key, net in networks.items %}
|
||||||
<tr>
|
<tr>
|
||||||
<th><a href="{% url 'threshold_irc_network' key %}">{{ key }}</a></th>
|
<th><a href="{% url 'threshold_irc_network' key %}">{{ key }}</a></th>
|
||||||
<td>
|
<td>
|
||||||
|
|
||||||
|
|
||||||
{{ net.relays }}
|
|
||||||
</td>
|
{{ net.relays }}
|
||||||
<td>
|
</td>
|
||||||
{% if net.active %}
|
<td>
|
||||||
<span class="icon has-text-success">
|
{% if net.active %}
|
||||||
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
<span class="icon has-text-success">
|
||||||
</span>
|
<i class="fa-solid fa-check" aria-hidden="true"></i>
|
||||||
{% else %}
|
</span>
|
||||||
<span class="icon has-text-danger">
|
{% else %}
|
||||||
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
<span class="icon has-text-danger">
|
||||||
</span>
|
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
||||||
{% endif %}
|
</span>
|
||||||
</td>
|
{% endif %}
|
||||||
<td>
|
</td>
|
||||||
{{ net.channels }}
|
<td>
|
||||||
</td>
|
{{ net.channels }}
|
||||||
<td>
|
</td>
|
||||||
{{ net.records }}
|
<td>
|
||||||
</td>
|
{{ net.records }}
|
||||||
<td>
|
</td>
|
||||||
<button
|
<td>
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
<button
|
||||||
hx-delete="{% url 'threshold_irc_network_del' key %}"
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-target="#networks"
|
hx-delete="{% url 'threshold_irc_network_del' key %}"
|
||||||
hx-swap="outerHTML"
|
hx-target="#networks"
|
||||||
class="button is-small is-danger">
|
hx-swap="outerHTML"
|
||||||
<span class="icon" data-tooltip="Delete">
|
class="button is-small is-danger">
|
||||||
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
<span class="icon" data-tooltip="Delete">
|
||||||
</span>
|
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
||||||
</button>
|
</span>
|
||||||
</td>
|
</button>
|
||||||
</tr>
|
</td>
|
||||||
{% endfor %}
|
</tr>
|
||||||
</table>
|
{% endfor %}
|
||||||
</div>
|
</table>
|
||||||
<div id="modals-here-actions">
|
</div>
|
||||||
</div>
|
<div id="modals-here-actions">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,82 +1,82 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_stats' %}"
|
hx-get="{% url 'threshold_irc_stats' %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#stats"
|
hx-target="#stats"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_networks' %}"
|
hx-get="{% url 'threshold_irc_networks' %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#networks"
|
hx-target="#networks"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_aliases' %}"
|
hx-get="{% url 'threshold_irc_aliases' %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#aliases"
|
hx-target="#aliases"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="{% url 'threshold_irc_actions' %}"
|
hx-get="{% url 'threshold_irc_actions' %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#actions"
|
hx-target="#actions"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div id="stats">
|
<div id="stats">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="column">
|
||||||
</div>
|
<div class="box">
|
||||||
<div class="column">
|
<div id="networks">
|
||||||
<div class="box">
|
</div>
|
||||||
<div id="networks">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div id="aliases">
|
<div id="aliases">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="column">
|
||||||
</div>
|
<div class="box">
|
||||||
<div class="column">
|
<div id="alerts">
|
||||||
<div class="box">
|
Alerts here
|
||||||
<div id="alerts">
|
</div>
|
||||||
Alerts here
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column"></div>
|
<div class="column"></div>
|
||||||
<div class="column is-half">
|
<div class="column is-half">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div id="actions">
|
<div id="actions">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div id="modals-here">
|
||||||
<div id="modals-here">
|
</div>
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -1,49 +1,49 @@
|
|||||||
<div id="stats">
|
<div id="stats">
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>attribute</th>
|
<th>attribute</th>
|
||||||
<th>count</th>
|
<th>count</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th>relays</th>
|
<th>relays</th>
|
||||||
<td>
|
<td>
|
||||||
{{ stats.servers_online_total }}/{{ stats.servers_total_total }}
|
{{ stats.servers_online_total }}/{{ stats.servers_total_total }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>networks</th>
|
<th>networks</th>
|
||||||
<td>
|
<td>
|
||||||
{{ stats.servers_online_unique }}/{{ stats.servers_total_unique }}
|
{{ stats.servers_online_unique }}/{{ stats.servers_total_unique }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>channels</th>
|
<th>channels</th>
|
||||||
<td>
|
<td>
|
||||||
{{ stats.channels}}
|
{{ stats.channels}}
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>records</th>
|
<th>records</th>
|
||||||
<td>
|
<td>
|
||||||
{{ stats.records }}
|
{{ stats.records }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>events</th>
|
<th>events</th>
|
||||||
<td>
|
<td>
|
||||||
{{ stats.eventrate }}
|
{{ stats.eventrate }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
@ -1,5 +1,5 @@
|
|||||||
{% if message is not None %}
|
{% if message is not None %}
|
||||||
<div class="notification is-{{ class }}" hx-ext="remove-me" remove-me="3s">
|
<div class="notification is-{{ class }}" hx-ext="remove-me" remove-me="3s">
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
@ -1,5 +1,5 @@
|
|||||||
{% extends 'wm/modal.html' %}
|
{% extends 'wm/modal.html' %}
|
||||||
|
|
||||||
{% block modal_content %}
|
{% block modal_content %}
|
||||||
{% include 'window-content/drilldown.html' %}
|
{% include 'window-content/drilldown.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -1,177 +1,177 @@
|
|||||||
<article class="table-container" id="modal-context-table">
|
<article class="table-container" id="modal-context-table">
|
||||||
<table class="table is-fullwidth">
|
<table class="table is-fullwidth">
|
||||||
<thead>
|
<thead>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for item in object_list %}
|
{% for item in object_list %}
|
||||||
{% if item.type == 'control' %}
|
{% if item.type == 'control' %}
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<span class="icon has-text-grey" data-tooltip="Hidden">
|
<span class="icon has-text-grey" data-tooltip="Hidden">
|
||||||
<i class="fa-solid fa-file-slash"></i>
|
<i class="fa-solid fa-file-slash"></i>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="has-text-grey">Hidden {{ item.hidden }} similar result{% if item.hidden > 1%}s{% endif %}</p>
|
<p class="has-text-grey">Hidden {{ item.hidden }} similar result{% if item.hidden > 1%}s{% endif %}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ item.time }}</td>
|
<td>{{ item.time }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% if item.type != 'znc' and item.type != 'self' and query is not True %}
|
{% if item.type != 'znc' and item.type != 'self' and query is not True %}
|
||||||
<article class="nowrap-parent">
|
<article class="nowrap-parent">
|
||||||
<article class="nowrap-child">
|
<article class="nowrap-child">
|
||||||
{% if item.type == 'msg' %}
|
{% if item.type == 'msg' %}
|
||||||
<span class="icon" data-tooltip="Message">
|
<span class="icon" data-tooltip="Message">
|
||||||
<i class="fa-solid fa-message"></i>
|
<i class="fa-solid fa-message"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'join' %}
|
{% elif item.type == 'join' %}
|
||||||
<span class="icon" data-tooltip="Join">
|
<span class="icon" data-tooltip="Join">
|
||||||
<i class="fa-solid fa-person-to-portal"></i>
|
<i class="fa-solid fa-person-to-portal"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'part' %}
|
{% elif item.type == 'part' %}
|
||||||
<span class="icon" data-tooltip="Part">
|
<span class="icon" data-tooltip="Part">
|
||||||
<i class="fa-solid fa-person-from-portal"></i>
|
<i class="fa-solid fa-person-from-portal"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'quit' %}
|
{% elif item.type == 'quit' %}
|
||||||
<span class="icon" data-tooltip="Quit">
|
<span class="icon" data-tooltip="Quit">
|
||||||
<i class="fa-solid fa-circle-xmark"></i>
|
<i class="fa-solid fa-circle-xmark"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'kick' %}
|
{% elif item.type == 'kick' %}
|
||||||
<span class="icon" data-tooltip="Kick">
|
<span class="icon" data-tooltip="Kick">
|
||||||
<i class="fa-solid fa-user-slash"></i>
|
<i class="fa-solid fa-user-slash"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'nick' %}
|
{% elif item.type == 'nick' %}
|
||||||
<span class="icon" data-tooltip="Nick">
|
<span class="icon" data-tooltip="Nick">
|
||||||
<i class="fa-solid fa-signature"></i>
|
<i class="fa-solid fa-signature"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'mode' %}
|
{% elif item.type == 'mode' %}
|
||||||
<span class="icon" data-tooltip="Mode">
|
<span class="icon" data-tooltip="Mode">
|
||||||
<i class="fa-solid fa-gear"></i>
|
<i class="fa-solid fa-gear"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'action' %}
|
{% elif item.type == 'action' %}
|
||||||
<span class="icon" data-tooltip="Action">
|
<span class="icon" data-tooltip="Action">
|
||||||
<i class="fa-solid fa-exclamation"></i>
|
<i class="fa-solid fa-exclamation"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'notice' %}
|
{% elif item.type == 'notice' %}
|
||||||
<span class="icon" data-tooltip="Notice">
|
<span class="icon" data-tooltip="Notice">
|
||||||
<i class="fa-solid fa-message-code"></i>
|
<i class="fa-solid fa-message-code"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'conn' %}
|
{% elif item.type == 'conn' %}
|
||||||
<span class="icon" data-tooltip="Connection">
|
<span class="icon" data-tooltip="Connection">
|
||||||
<i class="fa-solid fa-cloud-exclamation"></i>
|
<i class="fa-solid fa-cloud-exclamation"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'znc' %}
|
{% elif item.type == 'znc' %}
|
||||||
<span class="icon" data-tooltip="ZNC">
|
<span class="icon" data-tooltip="ZNC">
|
||||||
<i class="fa-brands fa-unity"></i>
|
<i class="fa-brands fa-unity"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'query' %}
|
{% elif item.type == 'query' %}
|
||||||
<span class="icon" data-tooltip="Query">
|
<span class="icon" data-tooltip="Query">
|
||||||
<i class="fa-solid fa-message"></i>
|
<i class="fa-solid fa-message"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'highlight' %}
|
{% elif item.type == 'highlight' %}
|
||||||
<span class="icon" data-tooltip="Highlight">
|
<span class="icon" data-tooltip="Highlight">
|
||||||
<i class="fa-solid fa-exclamation"></i>
|
<i class="fa-solid fa-exclamation"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'who' %}
|
{% elif item.type == 'who' %}
|
||||||
<span class="icon" data-tooltip="Who">
|
<span class="icon" data-tooltip="Who">
|
||||||
<i class="fa-solid fa-passport"></i>
|
<i class="fa-solid fa-passport"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'topic' %}
|
{% elif item.type == 'topic' %}
|
||||||
<span class="icon" data-tooltip="Topic">
|
<span class="icon" data-tooltip="Topic">
|
||||||
<i class="fa-solid fa-sign"></i>
|
<i class="fa-solid fa-sign"></i>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ item.type }}
|
{{ item.type }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.online is True %}
|
{% if item.online is True %}
|
||||||
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.online is False %}
|
{% elif item.online is False %}
|
||||||
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.src == 'irc' %}
|
{% if item.src == 'irc' %}
|
||||||
<a
|
<a
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="{% url 'modal_drilldown' %}"
|
hx-post="{% url 'modal_drilldown' %}"
|
||||||
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}", "channel": "{{ item.channel }}"}'
|
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}", "channel": "{{ item.channel }}"}'
|
||||||
hx-target="#modals-here"
|
hx-target="#modals-here"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
class="has-text-black">
|
class="has-text-black">
|
||||||
<span class="icon" data-tooltip="Open drilldown modal">
|
<span class="icon" data-tooltip="Open drilldown modal">
|
||||||
<i class="fa-solid fa-album"></i>
|
<i class="fa-solid fa-album"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</article>
|
</article>
|
||||||
<a class="nowrap-child has-text-link is-underlined" onclick="populateSearch('nick', '{{ item.nick|escapejs }}')">
|
<a class="nowrap-child has-text-link is-underlined" onclick="populateSearch('nick', '{{ item.nick|escapejs }}')">
|
||||||
{{ item.nick }}
|
{{ item.nick }}
|
||||||
</a>
|
</a>
|
||||||
{% if item.num_chans != '—' %}
|
{% if item.num_chans != '—' %}
|
||||||
<article class="nowrap-child">
|
<article class="nowrap-child">
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ item.num_chans }}
|
{{ item.num_chans }}
|
||||||
</span>
|
</span>
|
||||||
</article>
|
</article>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</article>
|
</article>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.type == 'self' %}
|
{% if item.type == 'self' %}
|
||||||
<span class="icon has-text-primary" data-tooltip="You">
|
<span class="icon has-text-primary" data-tooltip="You">
|
||||||
<i class="fa-solid fa-message-check"></i>
|
<i class="fa-solid fa-message-check"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'znc' %}
|
{% elif item.type == 'znc' %}
|
||||||
<span class="icon has-text-info" data-tooltip="ZNC">
|
<span class="icon has-text-info" data-tooltip="ZNC">
|
||||||
<i class="fa-brands fa-unity"></i>
|
<i class="fa-brands fa-unity"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif query %}
|
{% elif query %}
|
||||||
<span class="icon has-text-info" data-tooltip="Auth">
|
<span class="icon has-text-info" data-tooltip="Auth">
|
||||||
<i class="fa-solid fa-passport"></i>
|
<i class="fa-solid fa-passport"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="wrap">{{ item.msg }}</td>
|
<td class="wrap">{{ item.msg }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% if object_list %}
|
{% if object_list %}
|
||||||
<div
|
<div
|
||||||
class="modal-refresh"
|
class="modal-refresh"
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="{% url 'modal_context_table' %}"
|
hx-post="{% url 'modal_context_table' %}"
|
||||||
hx-vals='{"net": "{{ net }}",
|
hx-vals='{"net": "{{ net }}",
|
||||||
"num": "{{ num }}",
|
"num": "{{ num }}",
|
||||||
"source": "{{ source }}",
|
"source": "{{ source }}",
|
||||||
"channel": "{{ channel }}",
|
"channel": "{{ channel }}",
|
||||||
"time": "{{ time }}",
|
"time": "{{ time }}",
|
||||||
"date": "{{ date }}",
|
"date": "{{ date }}",
|
||||||
"index": "{{ index }}",
|
"index": "{{ index }}",
|
||||||
"type": "{{ type }}",
|
"type": "{{ type }}",
|
||||||
"mtype": "{{ mtype }}",
|
"mtype": "{{ mtype }}",
|
||||||
"nick": "{{ nick }}",
|
"nick": "{{ nick }}",
|
||||||
"dedup": "{{ params.dedup }}"}'
|
"dedup": "{{ params.dedup }}"}'
|
||||||
hx-target="#modal-context-table"
|
hx-target="#modal-context-table"
|
||||||
hx-trigger="every 5s">
|
hx-trigger="every 5s">
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var modal_event = new Event('restore-modal-scroll');
|
var modal_event = new Event('restore-modal-scroll');
|
||||||
document.dispatchEvent(modal_event);
|
document.dispatchEvent(modal_event);
|
||||||
</script>
|
</script>
|
@ -1,5 +1,5 @@
|
|||||||
{% if message is not None %}
|
{% if message is not None %}
|
||||||
<main class="notification is-{{ class }}" hx-ext="remove-me" remove-me="3s">
|
<main class="notification is-{{ class }}" hx-ext="remove-me" remove-me="3s">
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</main>
|
</main>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{% if message is not None %}
|
{% if message is not None %}
|
||||||
<div class="notification is-{{ class }}" hx-ext="remove-me" remove-me="3s">
|
<div class="notification is-{{ class }}" hx-ext="remove-me" remove-me="3s">
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1 class="title">Pathogen Data Insights</h1>
|
<h1 class="title">Pathogen Data Insights</h1>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h2 class="subtitle">Thank you for your order!</h2>
|
<h2 class="subtitle">Thank you for your order!</h2>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h2 class="subtitle">The customer portal will be available <a href="{% url 'billing' %} ">in your profile</a> shortly.</h2>
|
<h2 class="subtitle">The customer portal will be available <a href="{% url 'billing' %} ">in your profile</a> shortly.</h2>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -1,401 +1,401 @@
|
|||||||
<form class="skipEmptyFields" method="POST" hx-post="{% url 'search' %}"
|
<form class="skipEmptyFields" method="POST" hx-post="{% url 'search' %}"
|
||||||
hx-trigger="change"
|
hx-trigger="change"
|
||||||
hx-target="#results"
|
hx-target="#results"
|
||||||
hx-swap="innerHTML"
|
hx-swap="innerHTML"
|
||||||
hx-indicator="#spinner">
|
hx-indicator="#spinner">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="field has-addons">
|
<div class="field has-addons">
|
||||||
<div id="query" class="control is-expanded has-icons-left">
|
<div id="query" class="control is-expanded has-icons-left">
|
||||||
<input
|
<input
|
||||||
hx-post="{% url 'search' %}"
|
hx-post="{% url 'search' %}"
|
||||||
hx-trigger="keyup changed delay:200ms"
|
hx-trigger="keyup changed delay:200ms"
|
||||||
hx-target="#results"
|
hx-target="#results"
|
||||||
hx-swap="innerHTML"
|
hx-swap="innerHTML"
|
||||||
name="query"
|
name="query"
|
||||||
value="{{ params.query }}"
|
value="{{ params.query }}"
|
||||||
class="input"
|
class="input"
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Search something">
|
placeholder="Search something">
|
||||||
<span class="icon is-small is-left">
|
<span class="icon is-small is-left">
|
||||||
<i class="fas fa-magnifying-glass"></i>
|
<i class="fas fa-magnifying-glass"></i>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<button
|
<button
|
||||||
id="search"
|
id="search"
|
||||||
class="button is-info is-fullwidth"
|
class="button is-info is-fullwidth"
|
||||||
hx-post="{% url 'search' %}"
|
hx-post="{% url 'search' %}"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
hx-target="#results"
|
hx-target="#results"
|
||||||
hx-swap="innerHTML">
|
hx-swap="innerHTML">
|
||||||
Search
|
Search
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="column is-3">
|
|
||||||
<div class="nowrap-parent">
|
|
||||||
<div
|
|
||||||
data-script="on click toggle .is-hidden on #options"
|
|
||||||
class="button is-light has-text-link is-right nowrap-child">
|
|
||||||
Options
|
|
||||||
</div>
|
</div>
|
||||||
<div class="nowrap-child">
|
<div class="column is-3">
|
||||||
<span id="spinner" class="button is-light has-text-link is-loading htmx-indicator">Static</span>
|
<div class="nowrap-parent">
|
||||||
|
<div
|
||||||
|
data-script="on click toggle .is-hidden on #options"
|
||||||
|
class="button is-light has-text-link is-right nowrap-child">
|
||||||
|
Options
|
||||||
|
</div>
|
||||||
|
<div class="nowrap-child">
|
||||||
|
<span id="spinner" class="button is-light has-text-link is-loading htmx-indicator">Static</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div id="options" class="block is-hidden">
|
||||||
<div id="options" class="block is-hidden">
|
<div class="columns is-multiline">
|
||||||
<div class="columns is-multiline">
|
<div class="column is-narrow">
|
||||||
<div class="column is-narrow">
|
<div class="field has-addons">
|
||||||
<div class="field has-addons">
|
<div class="control has-icons-left">
|
||||||
<div class="control has-icons-left">
|
<span class="select">
|
||||||
<span class="select">
|
<select name="size">
|
||||||
<select name="size">
|
{% for size in sizes %}
|
||||||
{% for size in sizes %}
|
{% if size == params.size %}
|
||||||
{% if size == params.size %}
|
<option selected value="{{ size }}">{{ size }}</option>
|
||||||
<option selected value="{{ size }}">{{ size }}</option>
|
{% else %}
|
||||||
{% else %}
|
<option value="{{ size }}">{{ size }}</option>
|
||||||
<option value="{{ size }}">{{ size }}</option>
|
{% endif %}
|
||||||
{% endif %}
|
{% endfor %}
|
||||||
{% endfor %}
|
</select>
|
||||||
</select>
|
<span class="icon is-small is-left">
|
||||||
<span class="icon is-small is-left">
|
<i class="fas fa-magnifying-glass"></i>
|
||||||
<i class="fas fa-magnifying-glass"></i>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</div>
|
||||||
</div>
|
<p class="control">
|
||||||
<p class="control">
|
<a class="button is-static">
|
||||||
<a class="button is-static">
|
results
|
||||||
results
|
</a>
|
||||||
</a>
|
</p>
|
||||||
</p>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="column is-narrow">
|
||||||
<div class="column is-narrow">
|
<div class="field has-addons block">
|
||||||
<div class="field has-addons block">
|
<div class="control has-icons-left">
|
||||||
<div class="control has-icons-left">
|
<span class="select">
|
||||||
<span class="select">
|
<select id="source" name="source">
|
||||||
<select id="source" name="source">
|
{% if params.source == 'irc' %}
|
||||||
{% if params.source == 'irc' %}
|
<option selected value="irc">IRC</option>
|
||||||
<option selected value="irc">IRC</option>
|
{% else %}
|
||||||
{% else %}
|
<option value="irc">IRC</option>
|
||||||
<option value="irc">IRC</option>
|
{% endif %}
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if params.source == 'dis' %}
|
{% if params.source == 'dis' %}
|
||||||
<option selected value="dis">Discord</option>
|
<option selected value="dis">Discord</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option value="dis">Discord</option>
|
<option value="dis">Discord</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if params.source == None %}
|
{% if params.source == None %}
|
||||||
<option selected value="4ch">4chan</option>
|
<option selected value="4ch">4chan</option>
|
||||||
{% elif params.source == '4ch' %}
|
{% elif params.source == '4ch' %}
|
||||||
<option selected value="4ch">4chan</option>
|
<option selected value="4ch">4chan</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option value="4ch">4chan</option>
|
<option value="4ch">4chan</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if params.source == 'all' %}
|
{% if params.source == 'all' %}
|
||||||
<option selected value="all">All</option>
|
<option selected value="all">All</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option value="all">All</option>
|
<option value="all">All</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
<span class="icon is-small is-left">
|
<span class="icon is-small is-left">
|
||||||
<i class="fas fa-magnifying-glass"></i>
|
<i class="fas fa-magnifying-glass"></i>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<a class="button is-static">
|
<a class="button is-static">
|
||||||
source
|
source
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<input
|
<input
|
||||||
id="dedup_switch"
|
id="dedup_switch"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="switch is-rounded is-info"
|
class="switch is-rounded is-info"
|
||||||
name="dedup"
|
name="dedup"
|
||||||
{% if params.dedup == "on" %}
|
{% if params.dedup == "on" %}
|
||||||
checked="checked"
|
checked="checked"
|
||||||
{% endif %}>
|
{% endif %}>
|
||||||
<label
|
<label
|
||||||
for="dedup_switch">
|
for="dedup_switch">
|
||||||
Deduplicate results
|
Deduplicate results
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="column is-narrow">
|
|
||||||
<div id="sentiment">
|
|
||||||
<div class="field has-addons">
|
|
||||||
<div class="control">
|
|
||||||
<input
|
|
||||||
{% if params.check_sentiment != "on" %}
|
|
||||||
disabled="undefined"
|
|
||||||
{% endif %}
|
|
||||||
name="sentiment" id="sliderWithValue" class="slider has-output-tooltip is-fullwidth" min="-1" max="1"
|
|
||||||
{% if params.sentiment == None %}
|
|
||||||
value="0"
|
|
||||||
{% else %}
|
|
||||||
value="{{ params.sentiment }}"
|
|
||||||
{% endif %}
|
|
||||||
step="0.05" type="range">
|
|
||||||
<output for="sliderWithValue" class="slider-output">
|
|
||||||
{% if params.sentiment == None %}
|
|
||||||
0
|
|
||||||
{% else %}
|
|
||||||
{{ params.sentiment }}
|
|
||||||
{% endif %}
|
|
||||||
</output>
|
|
||||||
<script>bulmaSlider.attach();</script>
|
|
||||||
</div>
|
</div>
|
||||||
<p class="control">
|
<div class="column is-narrow">
|
||||||
<a class="button is-static">
|
<div id="sentiment">
|
||||||
sentiment
|
<div class="field has-addons">
|
||||||
</a>
|
<div class="control">
|
||||||
</p>
|
<input
|
||||||
</div>
|
{% if params.check_sentiment != "on" %}
|
||||||
<div class="control">
|
disabled="undefined"
|
||||||
<label class="radio button has-text-link">
|
{% endif %}
|
||||||
<input
|
name="sentiment" id="sliderWithValue" class="slider has-output-tooltip is-fullwidth" min="-1" max="1"
|
||||||
type="radio"
|
{% if params.sentiment == None %}
|
||||||
value="below"
|
value="0"
|
||||||
class="sentiment-radio"
|
{% else %}
|
||||||
{% if params.sentiment_method == 'below' %}
|
value="{{ params.sentiment }}"
|
||||||
checked
|
{% endif %}
|
||||||
{% endif %}
|
step="0.05" type="range">
|
||||||
name="sentiment_method"
|
<output for="sliderWithValue" class="slider-output">
|
||||||
{% if params.check_sentiment != "on" %}
|
{% if params.sentiment == None %}
|
||||||
disabled
|
0
|
||||||
{% endif %}>
|
{% else %}
|
||||||
<span class="icon" data-tooltip="Below">
|
{{ params.sentiment }}
|
||||||
<i class="fa-solid fa-face-frown"></i>
|
{% endif %}
|
||||||
</span>
|
</output>
|
||||||
</label>
|
<script>bulmaSlider.attach();</script>
|
||||||
<label class="radio button has-text-link is-hidden">
|
</div>
|
||||||
<input
|
<p class="control">
|
||||||
type="radio"
|
<a class="button is-static">
|
||||||
value="exact"
|
sentiment
|
||||||
class="sentiment-radio"
|
</a>
|
||||||
{% if params.sentiment_method == 'exact' %}
|
</p>
|
||||||
checked
|
</div>
|
||||||
{% endif %}
|
<div class="control">
|
||||||
name="sentiment_method"
|
<label class="radio button has-text-link">
|
||||||
{% if params.check_sentiment != "on" %}
|
<input
|
||||||
disabled
|
type="radio"
|
||||||
{% endif %}>
|
value="below"
|
||||||
<span class="icon" data-tooltip="Exact">
|
class="sentiment-radio"
|
||||||
<i class="fa-solid fa-face-smile"></i>
|
{% if params.sentiment_method == 'below' %}
|
||||||
</span>
|
checked
|
||||||
</label>
|
{% endif %}
|
||||||
<label class="radio button has-text-link">
|
name="sentiment_method"
|
||||||
<input
|
{% if params.check_sentiment != "on" %}
|
||||||
type="radio"
|
disabled
|
||||||
value="above"
|
{% endif %}>
|
||||||
class="sentiment-radio"
|
<span class="icon" data-tooltip="Below">
|
||||||
{% if params.sentiment_method == 'above' %}
|
<i class="fa-solid fa-face-frown"></i>
|
||||||
checked
|
</span>
|
||||||
{% endif %}
|
</label>
|
||||||
name="sentiment_method"
|
<label class="radio button has-text-link is-hidden">
|
||||||
{% if params.check_sentiment != "on" %}
|
<input
|
||||||
disabled
|
type="radio"
|
||||||
{% endif %}>
|
value="exact"
|
||||||
<span class="icon" data-tooltip="Above">
|
class="sentiment-radio"
|
||||||
<i class="fa-solid fa-face-smile"></i>
|
{% if params.sentiment_method == 'exact' %}
|
||||||
</span>
|
checked
|
||||||
</label>
|
{% endif %}
|
||||||
<label class="radio button has-text-link">
|
name="sentiment_method"
|
||||||
<input
|
{% if params.check_sentiment != "on" %}
|
||||||
type="radio"
|
disabled
|
||||||
value="nonzero"
|
{% endif %}>
|
||||||
class="sentiment-radio"
|
<span class="icon" data-tooltip="Exact">
|
||||||
{% if params.sentiment_method == 'nonzero' %}
|
<i class="fa-solid fa-face-smile"></i>
|
||||||
checked
|
</span>
|
||||||
{% endif %}
|
</label>
|
||||||
name="sentiment_method"
|
<label class="radio button has-text-link">
|
||||||
{% if params.check_sentiment != "on" %}
|
<input
|
||||||
disabled
|
type="radio"
|
||||||
{% endif %}>
|
value="above"
|
||||||
<span class="icon" data-tooltip="Nonzero">
|
class="sentiment-radio"
|
||||||
<i class="fa-solid fa-face-meh-blank"></i>
|
{% if params.sentiment_method == 'above' %}
|
||||||
</span>
|
checked
|
||||||
</label>
|
{% endif %}
|
||||||
</div>
|
name="sentiment_method"
|
||||||
|
{% if params.check_sentiment != "on" %}
|
||||||
|
disabled
|
||||||
|
{% endif %}>
|
||||||
|
<span class="icon" data-tooltip="Above">
|
||||||
|
<i class="fa-solid fa-face-smile"></i>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<label class="radio button has-text-link">
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
value="nonzero"
|
||||||
|
class="sentiment-radio"
|
||||||
|
{% if params.sentiment_method == 'nonzero' %}
|
||||||
|
checked
|
||||||
|
{% endif %}
|
||||||
|
name="sentiment_method"
|
||||||
|
{% if params.check_sentiment != "on" %}
|
||||||
|
disabled
|
||||||
|
{% endif %}>
|
||||||
|
<span class="icon" data-tooltip="Nonzero">
|
||||||
|
<i class="fa-solid fa-face-meh-blank"></i>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<input
|
<input
|
||||||
id="sentiment_switch"
|
id="sentiment_switch"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="switch is-rounded is-info"
|
class="switch is-rounded is-info"
|
||||||
name="check_sentiment"
|
name="check_sentiment"
|
||||||
data-script="on click toggle @disabled on #sliderWithValue then toggle @disabled on #sentiment then toggle @disabled on .sentiment-radio"
|
data-script="on click toggle @disabled on #sliderWithValue then toggle @disabled on #sentiment then toggle @disabled on .sentiment-radio"
|
||||||
{% if params.check_sentiment == "on" %}
|
{% if params.check_sentiment == "on" %}
|
||||||
checked
|
checked
|
||||||
{% endif %}>
|
{% endif %}>
|
||||||
<label
|
<label
|
||||||
for="sentiment_switch">
|
for="sentiment_switch">
|
||||||
Check sentiment
|
Check sentiment
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<input
|
<input
|
||||||
id="sentiment_graph_switch"
|
id="sentiment_graph_switch"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="switch is-rounded is-info"
|
class="switch is-rounded is-info"
|
||||||
name="show_sentiment"
|
name="show_sentiment"
|
||||||
data-script="on click toggle .is-hidden on #sentiment-container">
|
data-script="on click toggle .is-hidden on #sentiment-container">
|
||||||
|
|
||||||
<label
|
<label
|
||||||
for="sentiment_graph_switch">
|
for="sentiment_graph_switch">
|
||||||
Show graph
|
Show graph
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="column is-narrow">
|
<div class="column is-narrow">
|
||||||
<div id="date">
|
<div id="date">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<input type="date" name="dates" value="{{ params.date }}">
|
<input type="date" name="dates" value="{{ params.date }}">
|
||||||
<script>
|
<script>
|
||||||
var options = {
|
var options = {
|
||||||
"type": "datetime",
|
"type": "datetime",
|
||||||
"isRange": true,
|
"isRange": true,
|
||||||
"color": "info",
|
"color": "info",
|
||||||
"validateLabel": "Save",
|
"validateLabel": "Save",
|
||||||
"dateFormat": "yyyy-MM-dd",
|
"dateFormat": "yyyy-MM-dd",
|
||||||
"startDate": "{{ params.from_date|escapejs }}",
|
"startDate": "{{ params.from_date|escapejs }}",
|
||||||
"startTime": "{{ params.from_time|escapejs }}",
|
"startTime": "{{ params.from_time|escapejs }}",
|
||||||
"endDate": "{{ params.to_date|escapejs }}",
|
"endDate": "{{ params.to_date|escapejs }}",
|
||||||
"endTime": "{{ params.to_time|escapejs }}",
|
"endTime": "{{ params.to_time|escapejs }}",
|
||||||
"displayMode": "dialog"
|
"displayMode": "dialog"
|
||||||
};
|
};
|
||||||
// Initialize all input of type date
|
// Initialize all input of type date
|
||||||
var calendars = bulmaCalendar.attach('[type="date"]', options);
|
var calendars = bulmaCalendar.attach('[type="date"]', options);
|
||||||
|
|
||||||
// Loop on each calendar initialized
|
// Loop on each calendar initialized
|
||||||
for(var i = 0; i < calendars.length; i++) {
|
for(var i = 0; i < calendars.length; i++) {
|
||||||
// Add listener to select event
|
// Add listener to select event
|
||||||
calendars[i].on('save', date => {
|
calendars[i].on('save', date => {
|
||||||
htmx.trigger("#search", "click");
|
htmx.trigger("#search", "click");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<label class="radio button has-text-link">
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
value="desc"
|
||||||
|
name="sorting"
|
||||||
|
{% if params.sorting == None %}
|
||||||
|
checked
|
||||||
|
{% elif params.sorting == 'desc' %}
|
||||||
|
checked
|
||||||
|
{% endif %}>
|
||||||
|
<span class="icon" data-tooltip="Sort descending">
|
||||||
|
<i class="fa-solid fa-sort-down"></i>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<label class="radio button">
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
value="asc"
|
||||||
|
name="sorting"
|
||||||
|
{% if params.sorting == 'asc' %}
|
||||||
|
checked
|
||||||
|
{% endif %}>
|
||||||
|
<span class="icon" data-tooltip="Sort ascending">
|
||||||
|
<i class="fa-solid fa-sort-up"></i>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<label class="radio button">
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
value="none"
|
||||||
|
name="sorting"
|
||||||
|
{% if params.sorting == 'none' %}
|
||||||
|
checked
|
||||||
|
{% endif %}>
|
||||||
|
<span class="icon" data-tooltip="No sort">
|
||||||
|
<i class="fa-solid fa-sort"></i>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="column is-narrow rounded-tooltip">
|
||||||
<div class="control">
|
<div class="field has-addons">
|
||||||
<label class="radio button has-text-link">
|
<div class="control has-icons-left">
|
||||||
<input
|
<span class="select is-warning">
|
||||||
type="radio"
|
<select {% if not user.is_superuser %}disabled{% endif %} id="index" name="index">
|
||||||
value="desc"
|
{% if params.index == 'main' %}
|
||||||
name="sorting"
|
<option selected value="main">Main</option>
|
||||||
{% if params.sorting == None %}
|
{% elif params.index == None %}
|
||||||
checked
|
<option selected value="main">Main</option>
|
||||||
{% elif params.sorting == 'desc' %}
|
{% else %}
|
||||||
checked
|
<option value="main">Main</option>
|
||||||
{% endif %}>
|
{% endif %}
|
||||||
<span class="icon" data-tooltip="Sort descending">
|
|
||||||
<i class="fa-solid fa-sort-down"></i>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<label class="radio button">
|
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
value="asc"
|
|
||||||
name="sorting"
|
|
||||||
{% if params.sorting == 'asc' %}
|
|
||||||
checked
|
|
||||||
{% endif %}>
|
|
||||||
<span class="icon" data-tooltip="Sort ascending">
|
|
||||||
<i class="fa-solid fa-sort-up"></i>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<label class="radio button">
|
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
value="none"
|
|
||||||
name="sorting"
|
|
||||||
{% if params.sorting == 'none' %}
|
|
||||||
checked
|
|
||||||
{% endif %}>
|
|
||||||
<span class="icon" data-tooltip="No sort">
|
|
||||||
<i class="fa-solid fa-sort"></i>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="column is-narrow rounded-tooltip">
|
|
||||||
<div class="field has-addons">
|
|
||||||
<div class="control has-icons-left">
|
|
||||||
<span class="select is-warning">
|
|
||||||
<select {% if not user.is_superuser %}disabled{% endif %} id="index" name="index">
|
|
||||||
{% if params.index == 'main' %}
|
|
||||||
<option selected value="main">Main</option>
|
|
||||||
{% elif params.index == None %}
|
|
||||||
<option selected value="main">Main</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="main">Main</option>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if params.index == 'int' %}
|
{% if params.index == 'int' %}
|
||||||
<option selected value="int">Internal</option>
|
<option selected value="int">Internal</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option value="int">Internal</option>
|
<option value="int">Internal</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if params.index == 'meta' %}
|
||||||
|
<option selected value="meta">Meta</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="meta">Meta</option>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if params.index == 'meta' %}
|
</select>
|
||||||
<option selected value="meta">Meta</option>
|
<span class="icon is-small is-left">
|
||||||
{% else %}
|
<i class="fas fa-magnifying-glass"></i>
|
||||||
<option value="meta">Meta</option>
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<p class="control">
|
||||||
|
<a class="button is-static">
|
||||||
|
index
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% if not user.is_superuser %}
|
||||||
|
<span class="tooltiptext tag is-danger is-light">No access</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</div>
|
||||||
</select>
|
|
||||||
<span class="icon is-small is-left">
|
|
||||||
<i class="fas fa-magnifying-glass"></i>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<p class="control">
|
|
||||||
<a class="button is-static">
|
|
||||||
index
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
{% if not user.is_superuser %}
|
|
||||||
<span class="tooltiptext tag is-danger is-light">No access</span>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="block">
|
||||||
<div class="block">
|
<input
|
||||||
<input
|
hx-trigger="change"
|
||||||
hx-trigger="change"
|
hx-post="{% url 'search' %}"
|
||||||
hx-post="{% url 'search' %}"
|
hx-target="#results"
|
||||||
hx-target="#results"
|
hx-swap="innerHTML"
|
||||||
hx-swap="innerHTML"
|
id="tags"
|
||||||
id="tags"
|
class="input"
|
||||||
class="input"
|
type="tags"
|
||||||
type="tags"
|
name="tags"
|
||||||
name="tags"
|
placeholder="Tag search: nick: john"
|
||||||
placeholder="Tag search: nick: john"
|
value="{{ params.tags }}">
|
||||||
value="{{ params.tags }}">
|
</div>
|
||||||
</div>
|
<div class="is-hidden"></div>
|
||||||
<div class="is-hidden"></div>
|
|
||||||
</form>
|
</form>
|
@ -1,30 +1,30 @@
|
|||||||
{% load index %}
|
{% load index %}
|
||||||
|
|
||||||
<div id="channels">
|
<div id="channels">
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for chan in chans %}
|
{% for chan in chans %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<span
|
<span
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="{% url 'modal_drilldown' %}"
|
hx-post="{% url 'modal_drilldown' %}"
|
||||||
hx-vals='{"net": "{{ net }}", "nick": "{{ nick }}", "channel": "{{ chan }}"}'
|
hx-vals='{"net": "{{ net }}", "nick": "{{ nick }}", "channel": "{{ chan }}"}'
|
||||||
hx-target="#modals-here"
|
hx-target="#modals-here"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
class="button is-small">
|
class="button is-small">
|
||||||
{{ chan }}
|
{{ chan }}
|
||||||
</span>
|
</span>
|
||||||
{% if chan in num_users %}
|
{% if chan in num_users %}
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ num_users|index:chan }}
|
{{ num_users|index:chan }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,103 +1,103 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
{% load index %}
|
{% load index %}
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}"}'
|
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}"}'
|
||||||
hx-post="{% url 'chans_insights' %}"
|
hx-post="{% url 'chans_insights' %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#channels"
|
hx-target="#channels"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}"}'
|
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}"}'
|
||||||
hx-post="{% url 'nicks_insights' %}"
|
hx-post="{% url 'nicks_insights' %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#nicks"
|
hx-target="#nicks"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
<div id="info">
|
<div id="info">
|
||||||
{% include 'partials/notify.html' %}
|
{% include 'partials/notify.html' %}
|
||||||
{% if item is not None %}
|
{% if item is not None %}
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<thead>
|
<thead>
|
||||||
<th>attribute</th>
|
<th>attribute</th>
|
||||||
<th>value</th>
|
<th>value</th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th>src</th>
|
<th>src</th>
|
||||||
<td>
|
<td>
|
||||||
{% if item.src == 'irc' %}
|
{% if item.src == 'irc' %}
|
||||||
<span class="icon" data-tooltip="IRC">
|
<span class="icon" data-tooltip="IRC">
|
||||||
<i class="fa-solid fa-hashtag" aria-hidden="true"></i>
|
<i class="fa-solid fa-hashtag" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
IRC
|
IRC
|
||||||
{% elif item.src == 'dis' %}
|
{% elif item.src == 'dis' %}
|
||||||
<span class="icon" data-tooltip="Discord">
|
<span class="icon" data-tooltip="Discord">
|
||||||
<i class="fa-brands fa-discord" aria-hidden="true"></i>
|
<i class="fa-brands fa-discord" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
Discord
|
Discord
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>nick</th>
|
<th>nick</th>
|
||||||
<td>
|
<td>
|
||||||
{% if item.online is True %}
|
{% if item.online is True %}
|
||||||
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{{ item.nick }}
|
{{ item.nick }}
|
||||||
{% elif item.online is False %}
|
{% elif item.online is False %}
|
||||||
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{{ item.nick }}
|
{{ item.nick }}
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{{ item.nick }}
|
{{ item.nick }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.num_chans is not None %}
|
{% if item.num_chans is not None %}
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ item.num_chans }}
|
{{ item.num_chans }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>host</th>
|
<th>host</th>
|
||||||
<td>{{ item.host }}</td>
|
<td>{{ item.host }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>actions</th>
|
<th>actions</th>
|
||||||
<td>
|
<td>
|
||||||
{% if item.src == 'irc' %}
|
{% if item.src == 'irc' %}
|
||||||
<button
|
<button
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="{% url 'modal_insights' %}"
|
hx-post="{% url 'modal_insights' %}"
|
||||||
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}", "channel": "{{ item.channel }}"}'
|
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}", "channel": "{{ item.channel }}"}'
|
||||||
hx-target="#modals-here"
|
hx-target="#modals-here"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
class="button is-small">
|
class="button is-small">
|
||||||
Information
|
Information
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>net</th>
|
<th>net</th>
|
||||||
<td>{{ item.net }}</td>
|
<td>{{ item.net }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
@ -1,101 +1,101 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% include 'partials/notify.html' %}
|
{% include 'partials/notify.html' %}
|
||||||
<script>
|
<script>
|
||||||
// tabbed browsing for the modal
|
// tabbed browsing for the modal
|
||||||
function initTabs() {
|
function initTabs() {
|
||||||
TABS.forEach((tab) => {
|
TABS.forEach((tab) => {
|
||||||
tab.addEventListener('click', (e) => {
|
tab.addEventListener('click', (e) => {
|
||||||
let selected = tab.getAttribute('data-tab');
|
let selected = tab.getAttribute('data-tab');
|
||||||
updateActiveTab(tab);
|
updateActiveTab(tab);
|
||||||
updateActiveContent(selected);
|
updateActiveContent(selected);
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateActiveTab(selected) {
|
function updateActiveTab(selected) {
|
||||||
TABS.forEach((tab) => {
|
TABS.forEach((tab) => {
|
||||||
if (tab && tab.classList.contains(ACTIVE_CLASS)) {
|
if (tab && tab.classList.contains(ACTIVE_CLASS)) {
|
||||||
tab.classList.remove(ACTIVE_CLASS);
|
tab.classList.remove(ACTIVE_CLASS);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
selected.classList.add(ACTIVE_CLASS);
|
selected.classList.add(ACTIVE_CLASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateActiveContent(selected) {
|
||||||
|
CONTENT.forEach((item) => {
|
||||||
|
if (item && item.classList.contains(ACTIVE_CLASS)) {
|
||||||
|
item.classList.remove(ACTIVE_CLASS);
|
||||||
|
}
|
||||||
|
let data = item.getAttribute('data-content');
|
||||||
|
if (data === selected) {
|
||||||
|
item.classList.add(ACTIVE_CLASS);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
.icon { border-bottom: 0px !important;}
|
||||||
|
</style>
|
||||||
|
<div class="tile is-ancestor">
|
||||||
|
<div class="tile is-vertical is-9">
|
||||||
|
<div class="tile">
|
||||||
|
<div class="tile is-parent is-vertical">
|
||||||
|
<article class="tile is-child box">
|
||||||
|
<form method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="field has-addons">
|
||||||
|
<div class="control is-expanded has-icons-left">
|
||||||
|
<input id="query_full" name="query_full" class="input" type="text" placeholder="nickname">
|
||||||
|
<span class="icon is-small is-left">
|
||||||
|
<i class="fas fa-magnifying-glass"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<button
|
||||||
|
class="button is-info is-fullwidth"
|
||||||
|
hx-post="{% url 'search_insights' %}"
|
||||||
|
hx-trigger="click"
|
||||||
|
hx-target="#info"
|
||||||
|
hx-swap="outerHTML">
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</article>
|
||||||
|
|
||||||
function updateActiveContent(selected) {
|
|
||||||
CONTENT.forEach((item) => {
|
|
||||||
if (item && item.classList.contains(ACTIVE_CLASS)) {
|
|
||||||
item.classList.remove(ACTIVE_CLASS);
|
|
||||||
}
|
|
||||||
let data = item.getAttribute('data-content');
|
|
||||||
if (data === selected) {
|
|
||||||
item.classList.add(ACTIVE_CLASS);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style>
|
|
||||||
.icon { border-bottom: 0px !important;}
|
|
||||||
</style>
|
|
||||||
<div class="tile is-ancestor">
|
|
||||||
<div class="tile is-vertical is-9">
|
|
||||||
<div class="tile">
|
|
||||||
<div class="tile is-parent is-vertical">
|
|
||||||
<article class="tile is-child box">
|
|
||||||
<form method="POST">
|
|
||||||
{% csrf_token %}
|
|
||||||
<div class="field has-addons">
|
|
||||||
<div class="control is-expanded has-icons-left">
|
|
||||||
<input id="query_full" name="query_full" class="input" type="text" placeholder="nickname">
|
|
||||||
<span class="icon is-small is-left">
|
|
||||||
<i class="fas fa-magnifying-glass"></i>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="control">
|
<div class="tile is-parent">
|
||||||
<button
|
<article class="tile is-child box">
|
||||||
class="button is-info is-fullwidth"
|
<h5 class="subtitle is-5">Nicks</h5>
|
||||||
hx-post="{% url 'search_insights' %}"
|
<div id="nicks"></div>
|
||||||
hx-trigger="click"
|
</article>
|
||||||
hx-target="#info"
|
|
||||||
hx-swap="outerHTML">
|
|
||||||
Search
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
<div class="tile">
|
||||||
</article>
|
<div class="tile is-parent is-vertical">
|
||||||
|
<article class="tile is-child box">
|
||||||
</div>
|
<h5 class="subtitle is-5">Info</h5>
|
||||||
<div class="tile is-parent">
|
<div id="info"></div>
|
||||||
<article class="tile is-child box">
|
</article>
|
||||||
<h5 class="subtitle is-5">Nicks</h5>
|
|
||||||
<div id="nicks"></div>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tile">
|
|
||||||
<div class="tile is-parent is-vertical">
|
|
||||||
<article class="tile is-child box">
|
|
||||||
<h5 class="subtitle is-5">Info</h5>
|
|
||||||
<div id="info"></div>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="tile is-parent">
|
||||||
|
<article class="tile is-child box">
|
||||||
|
<h5 class="subtitle is-5">Meta</h5>
|
||||||
|
<div id="meta"></div>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tile is-parent">
|
<div class="tile is-parent">
|
||||||
<article class="tile is-child box">
|
<article class="tile is-child box">
|
||||||
<h5 class="subtitle is-5">Meta</h5>
|
<h5 class="subtitle is-5">Channels</h5>
|
||||||
<div id="meta"></div>
|
<div id="channels"></div>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tile is-parent">
|
|
||||||
<article class="tile is-child box">
|
|
||||||
<h5 class="subtitle is-5">Channels</h5>
|
|
||||||
<div id="channels"></div>
|
|
||||||
</article>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div id="modals-here"></div>
|
||||||
<div id="modals-here"></div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -1,20 +1,20 @@
|
|||||||
<div id="meta">
|
<div id="meta">
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
{% for key,items in meta.items %}
|
{% for key,items in meta.items %}
|
||||||
<th><strong>{{ key }}</strong></th>
|
<th><strong>{{ key }}</strong></th>
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for item in items %}
|
{% for item in items %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</div>
|
||||||
</table>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
@ -1,54 +1,54 @@
|
|||||||
{% load index %}
|
{% load index %}
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-vals='{"net": "{{ net }}", "nicks": "{{ nicks }}"}'
|
hx-vals='{"net": "{{ net }}", "nicks": "{{ nicks }}"}'
|
||||||
hx-post="{% url 'meta_insights' %}"
|
hx-post="{% url 'meta_insights' %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="#meta"
|
hx-target="#meta"
|
||||||
hx-swap="outerHTML">
|
hx-swap="outerHTML">
|
||||||
</div>
|
</div>
|
||||||
<div id="nicks">
|
<div id="nicks">
|
||||||
<div class="content" style="max-height: 30em; overflow: auto;">
|
<div class="content" style="max-height: 30em; overflow: auto;">
|
||||||
<table class="table is-fullwidth is-hoverable">
|
<table class="table is-fullwidth is-hoverable">
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for nick in nicks %}
|
{% for nick in nicks %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{% if nick in online %}
|
{% if nick in online %}
|
||||||
{% if online|index:nick is True %}
|
{% if online|index:nick is True %}
|
||||||
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif online|index:nick is False %}
|
{% elif online|index:nick is False %}
|
||||||
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span
|
<span
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="{% url 'modal_drilldown' %}"
|
hx-post="{% url 'modal_drilldown' %}"
|
||||||
hx-vals='{"net": "{{ net }}", "nick": "{{ nick }}", "channel": "{{ chan }}"}'
|
hx-vals='{"net": "{{ net }}", "nick": "{{ nick }}", "channel": "{{ chan }}"}'
|
||||||
hx-target="#modals-here"
|
hx-target="#modals-here"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
class="button is-small">
|
class="button is-small">
|
||||||
{{ nick }}
|
{{ nick }}
|
||||||
</span>
|
</span>
|
||||||
<a
|
<a
|
||||||
class="icon has-text-info has-tooltip-info"
|
class="icon has-text-info has-tooltip-info"
|
||||||
data-tooltip="Populate search"
|
data-tooltip="Populate search"
|
||||||
onclick="document.getElementById('query').value='nick: {{ nick }}';">
|
onclick="document.getElementById('query').value='nick: {{ nick }}';">
|
||||||
<i class="fa-solid fa-arrow-left-long-to-line"></i>
|
<i class="fa-solid fa-arrow-left-long-to-line"></i>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,177 +1,177 @@
|
|||||||
<article class="table-container" id="modal-context-table">
|
<article class="table-container" id="modal-context-table">
|
||||||
<table class="table is-fullwidth">
|
<table class="table is-fullwidth">
|
||||||
<thead>
|
<thead>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for item in object_list %}
|
{% for item in object_list %}
|
||||||
{% if item.type == 'control' %}
|
{% if item.type == 'control' %}
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<span class="icon has-text-grey" data-tooltip="Hidden">
|
<span class="icon has-text-grey" data-tooltip="Hidden">
|
||||||
<i class="fa-solid fa-file-slash"></i>
|
<i class="fa-solid fa-file-slash"></i>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="has-text-grey">Hidden {{ item.hidden }} similar result{% if item.hidden > 1%}s{% endif %}</p>
|
<p class="has-text-grey">Hidden {{ item.hidden }} similar result{% if item.hidden > 1%}s{% endif %}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ item.time }}</td>
|
<td>{{ item.time }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% if item.type != 'znc' and item.type != 'self' and query is not True %}
|
{% if item.type != 'znc' and item.type != 'self' and query is not True %}
|
||||||
<article class="nowrap-parent">
|
<article class="nowrap-parent">
|
||||||
<article class="nowrap-child">
|
<article class="nowrap-child">
|
||||||
{% if item.type == 'msg' %}
|
{% if item.type == 'msg' %}
|
||||||
<span class="icon" data-tooltip="Message">
|
<span class="icon" data-tooltip="Message">
|
||||||
<i class="fa-solid fa-message"></i>
|
<i class="fa-solid fa-message"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'join' %}
|
{% elif item.type == 'join' %}
|
||||||
<span class="icon" data-tooltip="Join">
|
<span class="icon" data-tooltip="Join">
|
||||||
<i class="fa-solid fa-person-to-portal"></i>
|
<i class="fa-solid fa-person-to-portal"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'part' %}
|
{% elif item.type == 'part' %}
|
||||||
<span class="icon" data-tooltip="Part">
|
<span class="icon" data-tooltip="Part">
|
||||||
<i class="fa-solid fa-person-from-portal"></i>
|
<i class="fa-solid fa-person-from-portal"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'quit' %}
|
{% elif item.type == 'quit' %}
|
||||||
<span class="icon" data-tooltip="Quit">
|
<span class="icon" data-tooltip="Quit">
|
||||||
<i class="fa-solid fa-circle-xmark"></i>
|
<i class="fa-solid fa-circle-xmark"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'kick' %}
|
{% elif item.type == 'kick' %}
|
||||||
<span class="icon" data-tooltip="Kick">
|
<span class="icon" data-tooltip="Kick">
|
||||||
<i class="fa-solid fa-user-slash"></i>
|
<i class="fa-solid fa-user-slash"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'nick' %}
|
{% elif item.type == 'nick' %}
|
||||||
<span class="icon" data-tooltip="Nick">
|
<span class="icon" data-tooltip="Nick">
|
||||||
<i class="fa-solid fa-signature"></i>
|
<i class="fa-solid fa-signature"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'mode' %}
|
{% elif item.type == 'mode' %}
|
||||||
<span class="icon" data-tooltip="Mode">
|
<span class="icon" data-tooltip="Mode">
|
||||||
<i class="fa-solid fa-gear"></i>
|
<i class="fa-solid fa-gear"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'action' %}
|
{% elif item.type == 'action' %}
|
||||||
<span class="icon" data-tooltip="Action">
|
<span class="icon" data-tooltip="Action">
|
||||||
<i class="fa-solid fa-exclamation"></i>
|
<i class="fa-solid fa-exclamation"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'notice' %}
|
{% elif item.type == 'notice' %}
|
||||||
<span class="icon" data-tooltip="Notice">
|
<span class="icon" data-tooltip="Notice">
|
||||||
<i class="fa-solid fa-message-code"></i>
|
<i class="fa-solid fa-message-code"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'conn' %}
|
{% elif item.type == 'conn' %}
|
||||||
<span class="icon" data-tooltip="Connection">
|
<span class="icon" data-tooltip="Connection">
|
||||||
<i class="fa-solid fa-cloud-exclamation"></i>
|
<i class="fa-solid fa-cloud-exclamation"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'znc' %}
|
{% elif item.type == 'znc' %}
|
||||||
<span class="icon" data-tooltip="ZNC">
|
<span class="icon" data-tooltip="ZNC">
|
||||||
<i class="fa-brands fa-unity"></i>
|
<i class="fa-brands fa-unity"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'query' %}
|
{% elif item.type == 'query' %}
|
||||||
<span class="icon" data-tooltip="Query">
|
<span class="icon" data-tooltip="Query">
|
||||||
<i class="fa-solid fa-message"></i>
|
<i class="fa-solid fa-message"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'highlight' %}
|
{% elif item.type == 'highlight' %}
|
||||||
<span class="icon" data-tooltip="Highlight">
|
<span class="icon" data-tooltip="Highlight">
|
||||||
<i class="fa-solid fa-exclamation"></i>
|
<i class="fa-solid fa-exclamation"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'who' %}
|
{% elif item.type == 'who' %}
|
||||||
<span class="icon" data-tooltip="Who">
|
<span class="icon" data-tooltip="Who">
|
||||||
<i class="fa-solid fa-passport"></i>
|
<i class="fa-solid fa-passport"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'topic' %}
|
{% elif item.type == 'topic' %}
|
||||||
<span class="icon" data-tooltip="Topic">
|
<span class="icon" data-tooltip="Topic">
|
||||||
<i class="fa-solid fa-sign"></i>
|
<i class="fa-solid fa-sign"></i>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ item.type }}
|
{{ item.type }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.online is True %}
|
{% if item.online is True %}
|
||||||
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.online is False %}
|
{% elif item.online is False %}
|
||||||
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
||||||
<i class="fa-solid fa-circle"></i>
|
<i class="fa-solid fa-circle"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.src == 'irc' %}
|
{% if item.src == 'irc' %}
|
||||||
<a
|
<a
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="{% url 'modal_drilldown' %}"
|
hx-post="{% url 'modal_drilldown' %}"
|
||||||
hx-vals='{"net": "{{ item.net|escapejs }}", "nick": "{{ item.nick|escapejs }}", "channel": "{{ item.channel|escapejs }}"}'
|
hx-vals='{"net": "{{ item.net|escapejs }}", "nick": "{{ item.nick|escapejs }}", "channel": "{{ item.channel|escapejs }}"}'
|
||||||
hx-target="#modals-here"
|
hx-target="#modals-here"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
class="has-text-black">
|
class="has-text-black">
|
||||||
<span class="icon" data-tooltip="Open drilldown modal">
|
<span class="icon" data-tooltip="Open drilldown modal">
|
||||||
<i class="fa-solid fa-album"></i>
|
<i class="fa-solid fa-album"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</article>
|
</article>
|
||||||
<a class="nowrap-child has-text-link is-underlined" onclick="populateSearch('nick', '{{ item.nick|escapejs }}')">
|
<a class="nowrap-child has-text-link is-underlined" onclick="populateSearch('nick', '{{ item.nick|escapejs }}')">
|
||||||
{{ item.nick }}
|
{{ item.nick }}
|
||||||
</a>
|
</a>
|
||||||
{% if item.num_chans != '—' %}
|
{% if item.num_chans != '—' %}
|
||||||
<article class="nowrap-child">
|
<article class="nowrap-child">
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ item.num_chans }}
|
{{ item.num_chans }}
|
||||||
</span>
|
</span>
|
||||||
</article>
|
</article>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</article>
|
</article>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.type == 'self' %}
|
{% if item.type == 'self' %}
|
||||||
<span class="icon has-text-primary" data-tooltip="You">
|
<span class="icon has-text-primary" data-tooltip="You">
|
||||||
<i class="fa-solid fa-message-check"></i>
|
<i class="fa-solid fa-message-check"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif item.type == 'znc' %}
|
{% elif item.type == 'znc' %}
|
||||||
<span class="icon has-text-info" data-tooltip="ZNC">
|
<span class="icon has-text-info" data-tooltip="ZNC">
|
||||||
<i class="fa-brands fa-unity"></i>
|
<i class="fa-brands fa-unity"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif query %}
|
{% elif query %}
|
||||||
<span class="icon has-text-info" data-tooltip="Auth">
|
<span class="icon has-text-info" data-tooltip="Auth">
|
||||||
<i class="fa-solid fa-passport"></i>
|
<i class="fa-solid fa-passport"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="wrap">{{ item.msg }}</td>
|
<td class="wrap">{{ item.msg }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% if object_list %}
|
{% if object_list %}
|
||||||
<div
|
<div
|
||||||
class="modal-refresh"
|
class="modal-refresh"
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-post="{% url 'modal_context_table' %}"
|
hx-post="{% url 'modal_context_table' %}"
|
||||||
hx-vals='{"net": "{{ net }}",
|
hx-vals='{"net": "{{ net }}",
|
||||||
"num": "{{ num }}",
|
"num": "{{ num }}",
|
||||||
"src": "{{ src }}",
|
"src": "{{ src }}",
|
||||||
"channel": "{{ channel }}",
|
"channel": "{{ channel }}",
|
||||||
"time": "{{ time }}",
|
"time": "{{ time }}",
|
||||||
"date": "{{ date }}",
|
"date": "{{ date }}",
|
||||||
"index": "{{ index }}",
|
"index": "{{ index }}",
|
||||||
"type": "{{ type }}",
|
"type": "{{ type }}",
|
||||||
"mtype": "{{ mtype }}",
|
"mtype": "{{ mtype }}",
|
||||||
"nick": "{{ nick }}",
|
"nick": "{{ nick }}",
|
||||||
"dedup": "{{ params.dedup }}"}'
|
"dedup": "{{ params.dedup }}"}'
|
||||||
hx-target="#modal-context-table"
|
hx-target="#modal-context-table"
|
||||||
hx-trigger="every 5s">
|
hx-trigger="every 5s">
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var modal_event = new Event('restore-modal-scroll');
|
var modal_event = new Event('restore-modal-scroll');
|
||||||
document.dispatchEvent(modal_event);
|
document.dispatchEvent(modal_event);
|
||||||
</script>
|
</script>
|
@ -1,107 +1,107 @@
|
|||||||
{% load index %}
|
{% load index %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<style>
|
<style>
|
||||||
#tab-content-{{ unique }} div {
|
#tab-content-{{ unique }} div {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tab-content-{{ unique }} div.is-active {
|
#tab-content-{{ unique }} div.is-active {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="tabs is-toggle is-fullwidth is-info" id="tabs-{{ unique }}">
|
<div class="tabs is-toggle is-fullwidth is-info" id="tabs-{{ unique }}">
|
||||||
<ul>
|
<ul>
|
||||||
<li class="is-active" data-tab="1">
|
<li class="is-active" data-tab="1">
|
||||||
<a>
|
<a>
|
||||||
<span class="icon is-small"><i class="fa-solid fa-user"></i></span>
|
<span class="icon is-small"><i class="fa-solid fa-user"></i></span>
|
||||||
<span>Channels</span>
|
<span>Channels</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li data-tab="2">
|
<li data-tab="2">
|
||||||
<a>
|
<a>
|
||||||
<span class="icon is-small"><i class="fa-solid fa-hashtag"></i></span>
|
<span class="icon is-small"><i class="fa-solid fa-hashtag"></i></span>
|
||||||
<span>Users</span>
|
<span>Users</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li data-tab="3">
|
<li data-tab="3">
|
||||||
<a>
|
<a>
|
||||||
<span class="icon is-small"><i class="fa-solid fa-people"></i></span>
|
<span class="icon is-small"><i class="fa-solid fa-people"></i></span>
|
||||||
<span>Intersection</span>
|
<span>Intersection</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li data-tab="4">
|
<li data-tab="4">
|
||||||
<a>
|
<a>
|
||||||
<span class="icon is-small"><i class="fa-solid fa-hashtag"></i></span>
|
<span class="icon is-small"><i class="fa-solid fa-hashtag"></i></span>
|
||||||
<span>Intersection</span>
|
<span>Intersection</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div id="tab-content-{{ unique }}">
|
<div id="tab-content-{{ unique }}">
|
||||||
<div class="is-active" data-content="1">
|
<div class="is-active" data-content="1">
|
||||||
<h4 class="subtitle is-4">Channels for {{ nick }} on {{ net }}</h4>
|
<h4 class="subtitle is-4">Channels for {{ nick }} on {{ net }}</h4>
|
||||||
{% for channel in chans %}
|
{% for channel in chans %}
|
||||||
<a class="panel-block is-active">
|
<a class="panel-block is-active">
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<i class="fa-solid fa-hashtag" aria-hidden="true"></i>
|
<i class="fa-solid fa-hashtag" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
{{ channel }}
|
{{ channel }}
|
||||||
{% if nick in num_chans %}
|
{% if nick in num_chans %}
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ num_users|index:channel }}
|
{{ num_users|index:channel }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div data-content="2">
|
<div data-content="2">
|
||||||
<h4 class="subtitle is-4">Users on {{ channel }} for {{ net }}</h4>
|
<h4 class="subtitle is-4">Users on {{ channel }} for {{ net }}</h4>
|
||||||
{% for user in users %}
|
{% for user in users %}
|
||||||
<a class="panel-block is-active">
|
<a class="panel-block is-active">
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<i class="fa-solid fa-user" aria-hidden="true"></i>
|
<i class="fa-solid fa-user" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
{{ user }}
|
{{ user }}
|
||||||
{% if channel in num_users %}
|
{% if channel in num_users %}
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ num_chans|index:user }}
|
{{ num_chans|index:user }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div data-content="3">
|
<div data-content="3">
|
||||||
<h4 class="subtitle is-4">Users sharing channels with {{ nick }} on {{ net }}</h4>
|
<h4 class="subtitle is-4">Users sharing channels with {{ nick }} on {{ net }}</h4>
|
||||||
{% for user in inter_users %}
|
{% for user in inter_users %}
|
||||||
<a class="panel-block is-active">
|
<a class="panel-block is-active">
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<i class="fa-solid fa-user" aria-hidden="true"></i>
|
<i class="fa-solid fa-user" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
{{ user }}
|
{{ user }}
|
||||||
{% if channel in num_users %}
|
{% if channel in num_users %}
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ num_chans|index:user }}
|
{{ num_chans|index:user }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div data-content="4">
|
<div data-content="4">
|
||||||
<h4 class="subtitle is-4">Channels sharing users with {{ channel }} on {{ net }}</h4>
|
<h4 class="subtitle is-4">Channels sharing users with {{ channel }} on {{ net }}</h4>
|
||||||
{% for channel in inter_chans %}
|
{% for channel in inter_chans %}
|
||||||
<a class="panel-block is-active">
|
<a class="panel-block is-active">
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<i class="fa-solid fa-hashtag" aria-hidden="true"></i>
|
<i class="fa-solid fa-hashtag" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
{{ channel }}
|
{{ channel }}
|
||||||
{% if nick in num_chans %}
|
{% if nick in num_chans %}
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
{{ num_users|index:channel }}
|
{{ num_users|index:channel }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<script>initTabs("{{ unique }}");</script>
|
<script>initTabs("{{ unique }}");</script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{% extends 'wm/magnet.html' %}
|
{% extends 'wm/magnet.html' %}
|
||||||
|
|
||||||
{% block heading %}
|
{% block heading %}
|
||||||
Drilldown
|
Drilldown
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block panel_content %}
|
{% block panel_content %}
|
||||||
{% include 'window-content/drilldown.html' %}
|
{% include 'window-content/drilldown.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -1,8 +1,8 @@
|
|||||||
<magnet-block attract-distance="10" align-to="outer|center" class="floating-window">
|
<magnet-block attract-distance="10" align-to="outer|center" class="floating-window">
|
||||||
{% extends 'wm/panel.html' %}
|
{% extends 'wm/panel.html' %}
|
||||||
{% block heading %}
|
{% block heading %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block panel_content %}
|
{% block panel_content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</magnet-block>
|
</magnet-block>
|
@ -1,19 +1,19 @@
|
|||||||
|
|
||||||
<nav class="panel">
|
<nav class="panel">
|
||||||
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
||||||
<i class="fa-solid fa-arrows-up-down-left-right has-text-grey-light"></i>
|
<i class="fa-solid fa-arrows-up-down-left-right has-text-grey-light"></i>
|
||||||
{% block close_button %}
|
{% block close_button %}
|
||||||
<i
|
<i
|
||||||
class="fa-solid fa-xmark has-text-grey-light float-right"
|
class="fa-solid fa-xmark has-text-grey-light float-right"
|
||||||
data-script="on click remove the closest <nav/>"></i>
|
data-script="on click remove the closest <nav/>"></i>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block heading %}
|
{% block heading %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</p>
|
</p>
|
||||||
<article class="panel-block is-active">
|
<article class="panel-block is-active">
|
||||||
<div class="control">
|
<div class="control">
|
||||||
{% block panel_content %}
|
{% block panel_content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -1,38 +1,37 @@
|
|||||||
<div id="drilldown-widget">
|
<div id="drilldown-widget">
|
||||||
<div id="drilldown-widget-{{ unique }}" class="grid-stack-item" {% block widget_options %}{% endblock %}>
|
<div id="drilldown-widget-{{ unique }}" class="grid-stack-item" {% block widget_options %}{% endblock %}>
|
||||||
<div class="grid-stack-item-content">
|
<div class="grid-stack-item-content">
|
||||||
|
|
||||||
<nav class="panel">
|
<nav class="panel">
|
||||||
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
||||||
<i class="fa-solid fa-arrows-up-down-left-right has-text-grey-light"></i>
|
<i class="fa-solid fa-arrows-up-down-left-right has-text-grey-light"></i>
|
||||||
{% block close_button %}
|
{% block close_button %}
|
||||||
<i
|
<i
|
||||||
class="fa-solid fa-xmark has-text-grey-light float-right"
|
class="fa-solid fa-xmark has-text-grey-light float-right"
|
||||||
onclick='grid.removeWidget("drilldown-widget-{{ unique }}");'></i>
|
onclick='grid.removeWidget("drilldown-widget-{{ unique }}");'></i>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
<i
|
<i
|
||||||
class="fa-solid fa-arrows-minimize has-text-grey-light float-right"
|
class="fa-solid fa-arrows-minimize has-text-grey-light float-right"
|
||||||
onclick='grid.compact();'></i>
|
onclick='grid.compact();'></i>
|
||||||
{% block heading %}
|
{% block heading %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</p>
|
</p>
|
||||||
<article class="panel-block is-active">
|
<article class="panel-block is-active">
|
||||||
<div class="control">
|
<div class="control">
|
||||||
{% block panel_content %}
|
{% block panel_content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</nav>
|
</nav>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
{% block custom_script %}
|
{% block custom_script %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
var widget_event = new Event('load-widget');
|
var widget_event = new Event('load-widget');
|
||||||
document.dispatchEvent(widget_event);
|
document.dispatchEvent(widget_event);
|
||||||
{% block custom_script_end %}
|
{% block custom_script_end %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue