Fix src/source issue in management
This commit is contained in:
parent
bdee5a2aae
commit
d3de054d5a
|
@ -102,7 +102,7 @@
|
||||||
hx-post="{% url 'modal_context' %}"
|
hx-post="{% url 'modal_context' %}"
|
||||||
hx-vals='{"net": "{{ net }}",
|
hx-vals='{"net": "{{ net }}",
|
||||||
"num": "{{ relay.id }}",
|
"num": "{{ relay.id }}",
|
||||||
"src": "irc",
|
"source": "irc",
|
||||||
"channel": "*status",
|
"channel": "*status",
|
||||||
"time": "None",
|
"time": "None",
|
||||||
"date": "None",
|
"date": "None",
|
||||||
|
@ -192,7 +192,7 @@
|
||||||
hx-post="{% url 'modal_context' %}"
|
hx-post="{% url 'modal_context' %}"
|
||||||
hx-vals='{"net": "{{ net }}",
|
hx-vals='{"net": "{{ net }}",
|
||||||
"num": "{{ relay.id }}",
|
"num": "{{ relay.id }}",
|
||||||
"src": "irc",
|
"source": "irc",
|
||||||
"channel": "{{ sinst.entity }}",
|
"channel": "{{ sinst.entity }}",
|
||||||
"time": "None",
|
"time": "None",
|
||||||
"date": "None",
|
"date": "None",
|
||||||
|
|
|
@ -69,7 +69,9 @@
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid-stack-item" gs-w="10" gs-h="40" gs-y="10" gs-x="1">
|
<div id="results">
|
||||||
|
{% if table %}
|
||||||
|
<div id="results-content" class="grid-stack-item" gs-w="5" gs-h="15" gs-y="10">
|
||||||
<div class="grid-stack-item-content">
|
<div class="grid-stack-item-content">
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
||||||
|
@ -78,13 +80,42 @@
|
||||||
</p>
|
</p>
|
||||||
<div class="panel-block is-active">
|
<div class="panel-block is-active">
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<div id="results">
|
<script src="{% static 'js/column-shifter.js' %}"></script>
|
||||||
{% include 'ui/drilldown/table_results.html' %}
|
<span class="icon has-tooltip-bottom" data-tooltip="{{ card }} hits total">
|
||||||
|
<i class="fa-solid fa-chart-mixed"></i>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{{ table.data|length }} hits in {{ took }}ms
|
||||||
|
{% if exemption is not None %}
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="God mode">
|
||||||
|
<i class="fa-solid fa-book-bible"></i>
|
||||||
|
</span>
|
||||||
|
{% else %}
|
||||||
|
{% if redacted is not None %}
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="{{ redacted }} redacted">
|
||||||
|
<i class="fa-solid fa-mask"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if delay is not None %}
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="delayed by {{ delay }} days">
|
||||||
|
<i class="fa-solid fa-clock"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if randomised is True %}
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="integer fields randomised">
|
||||||
|
<i class="fa-solid fa-shuffle"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% include 'ui/drilldown/table_results_partial.html' %}
|
||||||
|
{% include 'ui/drilldown/sentiment_partial.html' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="modals-here">
|
<div id="modals-here">
|
||||||
|
|
|
@ -1,219 +0,0 @@
|
||||||
{% load static %}
|
|
||||||
{% load index %}
|
|
||||||
{% load joinsep %}
|
|
||||||
{% include 'partials/notify.html' %}
|
|
||||||
{% if results %}
|
|
||||||
<div style="display: none" id="jsonData" data-json="{{ data }}">
|
|
||||||
</div>
|
|
||||||
<div class="has-text-grey-light nowrap-parent">
|
|
||||||
<div class="nowrap-child block">
|
|
||||||
<i class="fa-solid fa-chart-mixed"></i>
|
|
||||||
</div>
|
|
||||||
<div class="nowrap-child">
|
|
||||||
<p>fetched {{ results|length }} of {{ card }} hits in {{ took }}ms</p>
|
|
||||||
</div>
|
|
||||||
{% if exemption is not None %}
|
|
||||||
<div class="nowrap-child">
|
|
||||||
<i class="fa-solid fa-book-bible"></i>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
{% if redacted is not None %}
|
|
||||||
<div class="nowrap-child">
|
|
||||||
<p>{{ redacted }} redacted</p>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<div class="box">
|
|
||||||
<div style="height: 30rem">
|
|
||||||
<canvas id="volume"></canvas>
|
|
||||||
</div>
|
|
||||||
<script src="{% static 'chart.js' %}"></script>
|
|
||||||
</div>
|
|
||||||
<div class="box">
|
|
||||||
<div class="table-container">
|
|
||||||
<table class="table is-striped is-hoverable is-fullwidth">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>src</th>
|
|
||||||
<th>type</th>
|
|
||||||
<th>ts</th>
|
|
||||||
<th>msg</th>
|
|
||||||
<th>host</th>
|
|
||||||
<th>nick</th>
|
|
||||||
<th>actions</th>
|
|
||||||
<th>channel</th>
|
|
||||||
<th>net</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for item in results %}
|
|
||||||
{# Workaround for curlylint #}
|
|
||||||
<tr class="{% if item.exemption == True %}
|
|
||||||
has-background-grey-lighter
|
|
||||||
{% elif item.type == 'join' %}
|
|
||||||
has-background-success-light
|
|
||||||
{% elif item.type == 'quit' %}
|
|
||||||
has-background-danger-light
|
|
||||||
{% elif item.type == 'kick' %}
|
|
||||||
has-background-danger-light
|
|
||||||
{% elif item.type == 'part' %}
|
|
||||||
has-background-warning-light
|
|
||||||
{% elif item.type == 'mode' %}
|
|
||||||
has-background-info-light
|
|
||||||
{% endif %}">
|
|
||||||
<td>
|
|
||||||
<a class="has-text-link is-underlined"
|
|
||||||
onclick="populateSearch('src', '{{ item.src|escapejs }}')">
|
|
||||||
{% if item.src == 'irc' %}
|
|
||||||
<span class="icon" data-tooltip="IRC">
|
|
||||||
<i class="fa-solid fa-hashtag" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.src == 'dis' %}
|
|
||||||
<span class="icon" data-tooltip="Discord">
|
|
||||||
<i class="fa-brands fa-discord" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a class="has-text-link is-underlined"
|
|
||||||
onclick="populateSearch('type', '{{ item.type|escapejs }}')">
|
|
||||||
{% if item.type == 'msg' %}
|
|
||||||
<span class="icon" data-tooltip="Message">
|
|
||||||
<i class="fa-solid fa-message"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.type == 'join' %}
|
|
||||||
<span class="icon" data-tooltip="Join">
|
|
||||||
<i class="fa-solid fa-person-to-portal"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.type == 'part' %}
|
|
||||||
<span class="icon" data-tooltip="Part">
|
|
||||||
<i class="fa-solid fa-person-from-portal"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.type == 'quit' %}
|
|
||||||
<span class="icon" data-tooltip="Quit">
|
|
||||||
<i class="fa-solid fa-circle-xmark"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.type == 'kick' %}
|
|
||||||
<span class="icon" data-tooltip="Kick">
|
|
||||||
<i class="fa-solid fa-user-slash"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.type == 'nick' %}
|
|
||||||
<span class="icon" data-tooltip="Nick">
|
|
||||||
<i class="fa-solid fa-signature"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.type == 'mode' %}
|
|
||||||
<span class="icon" data-tooltip="Mode">
|
|
||||||
<i class="fa-solid fa-gear"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.type == 'action' %}
|
|
||||||
<span class="icon" data-tooltip="Action">
|
|
||||||
<i class="fa-solid fa-exclamation"></i>
|
|
||||||
</span>
|
|
||||||
{% else %}
|
|
||||||
{{ item.type }}
|
|
||||||
{% endif %}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<p>{{ item.date }}</p>
|
|
||||||
<p>{{ item.time }}</p>
|
|
||||||
</td>
|
|
||||||
<td style="max-width: 10em" class="wrap">{{ item.msg }}</td>
|
|
||||||
<td>
|
|
||||||
<a class="has-text-link is-underlined"
|
|
||||||
onclick="populateSearch('host', '{{ item.host|escapejs }}')">
|
|
||||||
{{ item.host }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<div class="nowrap-parent">
|
|
||||||
<div class="nowrap-child">
|
|
||||||
{% if item.online is True %}
|
|
||||||
<span class="icon has-text-success has-tooltip-success" data-tooltip="Online">
|
|
||||||
<i class="fa-solid fa-circle"></i>
|
|
||||||
</span>
|
|
||||||
{% elif item.online is False %}
|
|
||||||
<span class="icon has-text-danger has-tooltip-danger" data-tooltip="Offline">
|
|
||||||
<i class="fa-solid fa-circle"></i>
|
|
||||||
</span>
|
|
||||||
{% else %}
|
|
||||||
<span class="icon has-text-warning has-tooltip-warning" data-tooltip="Unknown">
|
|
||||||
<i class="fa-solid fa-circle"></i>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<a class="nowrap-child has-text-link is-underlined" onclick="populateSearch('nick', '{{ item.nick|escapejs }}')">
|
|
||||||
{{ item.nick }}
|
|
||||||
</a>
|
|
||||||
{% if item.num_chans is not None %}
|
|
||||||
<div class="nowrap-child">
|
|
||||||
<span class="tag">
|
|
||||||
{{ item.num_chans }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if item.src == 'irc' %}
|
|
||||||
<button
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-post="{% url 'modal_drilldown' %}"
|
|
||||||
hx-vals='{"net": "{{ item.net }}", "nick": "{{ item.nick }}", "channel": "{{ item.channel }}"}'
|
|
||||||
hx-target="#modals-here"
|
|
||||||
hx-trigger="click"
|
|
||||||
class="button is-small">
|
|
||||||
Information
|
|
||||||
</button>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<div class="nowrap-parent">
|
|
||||||
<a class="nowrap-child has-text-link is-underlined"
|
|
||||||
onclick="populateSearch('channel', '{{ item.channel|escapejs }}')">
|
|
||||||
{{ item.channel }}
|
|
||||||
</a>
|
|
||||||
{% if item.num_users is not None %}
|
|
||||||
<div class="nowrap-child">
|
|
||||||
<span class="tag">
|
|
||||||
{{ item.num_users }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a class="has-text-link is-underlined"
|
|
||||||
onclick="populateSearch('net', '{{ item.net|escapejs }}')">
|
|
||||||
{{ item.net }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{# Update the tags in case the user changed the query #}
|
|
||||||
{# Check for focus and refocus #}
|
|
||||||
<script>
|
|
||||||
var inputTags = document.getElementsByClassName('tags-input');
|
|
||||||
var inputBox = document.querySelector("[placeholder='Add query']");
|
|
||||||
var isFocused = (document.activeElement === inputBox);
|
|
||||||
for (index = 0; index < inputTags.length; index++) {
|
|
||||||
if (index == 0) {
|
|
||||||
inputTags[0].outerHTML = '<input id="tags" class="input" type="tags" placeholder="Add query" value="{{ tags|joinsep:',' }}">';
|
|
||||||
} else {
|
|
||||||
inputTags[index].remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// inputTags[0].outerHTML = '<input id="tags" class="input" type="tags" placeholder="Add query" value="{{ tags|joinsep:',' }}">';
|
|
||||||
setupTags();
|
|
||||||
var inputBox = document.querySelector("[placeholder='Add query']");
|
|
||||||
if (isFocused) {
|
|
||||||
inputBox.focus();
|
|
||||||
}
|
|
||||||
</script>
|
|
|
@ -1,80 +0,0 @@
|
||||||
{% extends 'django-tables2/bulma.html' %}
|
|
||||||
|
|
||||||
{% load django_tables2 %}
|
|
||||||
|
|
||||||
{% load i18n %}
|
|
||||||
|
|
||||||
{% block table.thead %}
|
|
||||||
{% if table.show_header %}
|
|
||||||
<thead {{ table.attrs.thead.as_html }}>
|
|
||||||
<tr>
|
|
||||||
{% for column in table.columns %}
|
|
||||||
<th
|
|
||||||
{{ column.attrs.th.as_html }}
|
|
||||||
hx-get="search/{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}&{{ uri }}"
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#results"
|
|
||||||
hx-swap="innerHTML"
|
|
||||||
hx-indicator=".progress"
|
|
||||||
style="cursor: pointer;">
|
|
||||||
{{ column.header }}
|
|
||||||
</th>
|
|
||||||
{% endfor %}
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock table.thead %}
|
|
||||||
|
|
||||||
{# Pagination block overrides #}
|
|
||||||
{% block pagination.previous %}
|
|
||||||
{% if table.page.has_previous %}
|
|
||||||
<li class="pagination-previous">
|
|
||||||
<div
|
|
||||||
hx-get="search/{% querystring table.prefixed_page_field=table.page.previous_page_number %}&{{ uri }}"
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#results"
|
|
||||||
hx-swap="innerHTML"
|
|
||||||
hx-indicator=".progress"
|
|
||||||
class="pagination-link">
|
|
||||||
<span aria-hidden="true">«</span>
|
|
||||||
{% trans 'previous' %}
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock pagination.previous %}
|
|
||||||
|
|
||||||
{% block pagination.range %}
|
|
||||||
{% for p in table.page|table_page_range:table.paginator %}
|
|
||||||
<li class="page-item{% if table.page.number == p %} active{% endif %}">
|
|
||||||
<div
|
|
||||||
class="pagination-link"
|
|
||||||
{% if p != '...' %}hx-get="search/{% querystring table.prefixed_page_field=p %}&{{ uri }}"{% endif %}
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#results"
|
|
||||||
hx-swap="innerHTML"
|
|
||||||
hx-indicator=".progress">
|
|
||||||
{{ p }}
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
{% endblock pagination.range %}
|
|
||||||
{% if table.page.has_next %}
|
|
||||||
{% block pagination.next %}
|
|
||||||
<li class="pagination-next">
|
|
||||||
<div
|
|
||||||
hx-get="search/{% querystring table.prefixed_page_field=table.page.next_page_number %}&{{ uri }}"
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#results"
|
|
||||||
hx-swap="innerHTML"
|
|
||||||
hx-indicator=".progress"
|
|
||||||
class="pagination-link">
|
|
||||||
{% trans 'next' %}
|
|
||||||
<span aria-hidden="true">»</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
{% endblock pagination.next %}
|
|
||||||
{% endif %}
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
{% load static %}
|
||||||
|
<div id="drilldown-widget">
|
||||||
|
<div id="results-content" class="grid-stack-item" gs-w="5" gs-h="15">
|
||||||
|
<div class="grid-stack-item-content">
|
||||||
|
<div class="panel">
|
||||||
|
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
||||||
|
<i class="fa-solid fa-arrows-up-down-left-right has-text-grey-light ui-move"></i>
|
||||||
|
Results
|
||||||
|
</p>
|
||||||
|
<div class="panel-block is-active">
|
||||||
|
<div class="control">
|
||||||
|
{% if table %}
|
||||||
|
<script src="{% static 'js/column-shifter.js' %}"></script>
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="{{ card }} hits total">
|
||||||
|
<i class="fa-solid fa-chart-mixed"></i>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{{ table.data|length }} hits in {{ took }}ms
|
||||||
|
{% if exemption is not None %}
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="God mode">
|
||||||
|
<i class="fa-solid fa-book-bible"></i>
|
||||||
|
</span>
|
||||||
|
{% else %}
|
||||||
|
{% if redacted is not None %}
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="{{ redacted }} redacted">
|
||||||
|
<i class="fa-solid fa-mask"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if delay is not None %}
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="delayed by {{ delay }} days">
|
||||||
|
<i class="fa-solid fa-clock"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if randomised is True %}
|
||||||
|
<span class="icon has-tooltip-bottom" data-tooltip="integer fields randomised">
|
||||||
|
<i class="fa-solid fa-shuffle"></i>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% include 'ui/drilldown/table_results_partial.html' %}
|
||||||
|
{% include 'ui/drilldown/sentiment_partial.html' %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
//var contents = $("#drilldown-widget").outerHTML;
|
||||||
|
var contents = document.getElementById("drilldown-widget");
|
||||||
|
var grid = document.getElementById("grid-stack-main").gridstack;
|
||||||
|
grid.addWidget(contents.innerHTML);
|
||||||
|
contents.outerHTML = "";
|
||||||
|
grid.compact();
|
||||||
|
// because we remove the element the JS runs in
|
||||||
|
// so we need to run it again here
|
||||||
|
// initTabs("{{ unique }}");
|
||||||
|
|
||||||
|
</script>
|
|
@ -101,7 +101,7 @@ def drilldown_search(request, return_context=False, template=None):
|
||||||
extra_params = {}
|
extra_params = {}
|
||||||
|
|
||||||
if not template:
|
if not template:
|
||||||
template_name = "ui/drilldown/table_results.html"
|
template_name = "widgets/table_results.html"
|
||||||
else:
|
else:
|
||||||
template_name = template
|
template_name = template
|
||||||
if request.user.is_anonymous:
|
if request.user.is_anonymous:
|
||||||
|
|
Loading…
Reference in New Issue