2022-07-21 12:45:28 +00:00
|
|
|
{% extends "base.html" %}
|
2022-07-21 12:46:48 +00:00
|
|
|
{% load static %}
|
2022-08-09 06:20:30 +00:00
|
|
|
{% load joinsep %}
|
2022-07-21 12:45:28 +00:00
|
|
|
{% block content %}
|
2022-08-09 06:20:30 +00:00
|
|
|
{% if params.modal == 'context' %}
|
2022-08-09 06:20:30 +00:00
|
|
|
<div
|
|
|
|
style="display: none;"
|
|
|
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
|
|
hx-post="{% url 'modal_context' %}"
|
|
|
|
hx-vals='{"net": "{{ params.net|escapejs }}",
|
|
|
|
"num": "{{ params.num|escapejs }}",
|
|
|
|
"src": "{{ params.src|escapejs }}",
|
|
|
|
"channel": "{{ params.channel|escapejs }}",
|
|
|
|
"time": "{{ params.time|escapejs }}",
|
|
|
|
"date": "{{ params.date|escapejs }}",
|
2022-08-14 21:58:29 +00:00
|
|
|
"index": "{{ params.index }}",
|
|
|
|
"type": "{{ params.type|escapejs }}",
|
|
|
|
"mtype": "{{ params.mtype|escapejs }}",
|
2022-08-14 22:01:21 +00:00
|
|
|
"nick": "{{ params.nick|escapejs }}"}'
|
2022-08-09 06:20:30 +00:00
|
|
|
hx-target="#modals-here"
|
|
|
|
hx-trigger="load">
|
|
|
|
</div>
|
2022-08-09 06:20:30 +00:00
|
|
|
{% endif %}
|
2022-08-05 22:10:07 +00:00
|
|
|
<script src="{% static 'js/chart.js' %}"></script>
|
2022-08-03 06:20:30 +00:00
|
|
|
<script>
|
2022-08-09 06:20:30 +00:00
|
|
|
function setupTags() {
|
2022-08-03 06:20:30 +00:00
|
|
|
var inputTags = document.getElementById('tags');
|
2022-08-09 06:20:30 +00:00
|
|
|
new BulmaTagsInput(inputTags);
|
|
|
|
|
|
|
|
inputTags.BulmaTagsInput().on('before.add', function(item) {
|
|
|
|
if (item.includes(": ")) {
|
|
|
|
var spl = item.split(": ");
|
|
|
|
} else {
|
|
|
|
var spl = item.split(":");
|
|
|
|
}
|
|
|
|
var field = spl[0];
|
|
|
|
try {
|
|
|
|
var value = JSON.parse(spl[1]);
|
|
|
|
} catch {
|
|
|
|
var value = spl[1];
|
|
|
|
}
|
|
|
|
return `${field}: ${value}`;
|
|
|
|
});
|
|
|
|
inputTags.BulmaTagsInput().on('after.remove', function(item) {
|
|
|
|
var spl = item.split(": ");
|
|
|
|
var field = spl[0];
|
2022-08-09 06:20:30 +00:00
|
|
|
var value = spl[1].trim();
|
2022-08-09 06:20:30 +00:00
|
|
|
});
|
2022-08-03 06:20:30 +00:00
|
|
|
}
|
2022-08-09 06:20:30 +00:00
|
|
|
function populateSearch(field, value) {
|
2022-08-26 16:16:55 +00:00
|
|
|
var inputTags = document.getElementById('tags');
|
|
|
|
inputTags.BulmaTagsInput().add(field+": "+value);
|
2022-08-03 06:20:30 +00:00
|
|
|
htmx.trigger("#search", "click");
|
|
|
|
}
|
|
|
|
</script>
|
2022-08-03 06:20:30 +00:00
|
|
|
<div>
|
2022-08-26 16:22:57 +00:00
|
|
|
{# Not sure why this was here, but it duplicates errors! #}
|
|
|
|
{# include 'partials/notify.html' #}
|
2022-08-26 16:16:55 +00:00
|
|
|
<form class="skipEmptyFields" method="POST" hx-post="{% url 'search' %}"
|
2022-08-09 06:20:30 +00:00
|
|
|
hx-trigger="change"
|
|
|
|
hx-target="#results"
|
|
|
|
hx-swap="innerHTML"
|
|
|
|
hx-indicator="#spinner">
|
2022-07-21 12:49:11 +00:00
|
|
|
{% csrf_token %}
|
2022-08-03 06:20:30 +00:00
|
|
|
|
|
|
|
<div class="columns">
|
|
|
|
<div class="column">
|
|
|
|
<div class="field has-addons">
|
2022-08-26 16:16:55 +00:00
|
|
|
<div id="query" class="control is-expanded has-icons-left">
|
2022-08-03 06:20:30 +00:00
|
|
|
<input
|
2022-08-09 06:20:30 +00:00
|
|
|
hx-post="{% url 'search' %}"
|
2022-08-09 06:20:30 +00:00
|
|
|
hx-trigger="keyup changed delay:200ms"
|
|
|
|
hx-target="#results"
|
2022-08-26 16:16:55 +00:00
|
|
|
hx-swap="innerHTML"
|
|
|
|
name="query"
|
|
|
|
value="{{ params.query }}"
|
|
|
|
class="input"
|
|
|
|
type="text"
|
|
|
|
placeholder="(science | tech | art) + (interest) -hello">
|
2022-07-21 12:49:11 +00:00
|
|
|
<span class="icon is-small is-left">
|
|
|
|
<i class="fas fa-magnifying-glass"></i>
|
|
|
|
</span>
|
2022-07-21 12:47:16 +00:00
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="control">
|
|
|
|
<div class="field">
|
|
|
|
<button
|
2022-08-03 06:20:30 +00:00
|
|
|
id="search"
|
2022-08-03 06:20:30 +00:00
|
|
|
class="button is-info is-fullwidth"
|
2022-08-09 06:20:30 +00:00
|
|
|
hx-post="{% url 'search' %}"
|
2022-08-03 06:20:30 +00:00
|
|
|
hx-trigger="click"
|
|
|
|
hx-target="#results"
|
|
|
|
hx-swap="innerHTML">
|
|
|
|
Search
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
2022-07-21 12:46:48 +00:00
|
|
|
</div>
|
2022-07-21 12:49:01 +00:00
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="column is-3">
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="nowrap-parent">
|
|
|
|
<div
|
2022-08-09 06:20:30 +00:00
|
|
|
data-script="on click toggle .is-hidden on #options"
|
2022-08-03 06:20:30 +00:00
|
|
|
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>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
<div id="options" class="box is-hidden">
|
|
|
|
<div class="columns is-multiline">
|
|
|
|
<div class="column is-narrow">
|
|
|
|
<div class="field has-addons">
|
|
|
|
<div class="control has-icons-left">
|
|
|
|
<span class="select">
|
|
|
|
<select name="size">
|
|
|
|
{% for size in sizes %}
|
2022-08-10 08:27:01 +00:00
|
|
|
{% if size == params.size %}
|
|
|
|
<option selected value="{{ size }}">{{ size }}</option>
|
|
|
|
{% else %}
|
|
|
|
<option value="{{ size }}">{{ size }}</option>
|
|
|
|
{% endif %}
|
2022-08-03 06:20:30 +00:00
|
|
|
{% endfor %}
|
|
|
|
</select>
|
|
|
|
<span class="icon is-small is-left">
|
|
|
|
<i class="fas fa-magnifying-glass"></i>
|
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
|
|
|
<p class="control">
|
|
|
|
<a class="button is-static">
|
|
|
|
results
|
|
|
|
</a>
|
|
|
|
</p>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
2022-08-26 16:16:55 +00:00
|
|
|
<div class="control">
|
|
|
|
<div class="field">
|
|
|
|
<input
|
|
|
|
id="full_query"
|
|
|
|
type="checkbox"
|
2022-08-26 16:22:57 +00:00
|
|
|
class="switch is-rounded"
|
2022-08-26 16:16:55 +00:00
|
|
|
{% if params.query_full is not None %}checked="checked"{% else %}none{% endif %}
|
2022-08-26 16:22:57 +00:00
|
|
|
{% if not perms.core.query_search %}disabled{% endif %}
|
2022-08-26 16:16:55 +00:00
|
|
|
data-script="on click toggle .is-hidden on #query_full">
|
|
|
|
<label
|
|
|
|
for="full_query">Full query </label>
|
|
|
|
</div>
|
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="column is-narrow">
|
2022-08-15 23:15:36 +00:00
|
|
|
<div class="field has-addons block">
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="control has-icons-left">
|
|
|
|
<span class="select">
|
|
|
|
<select id="source" name="source">
|
2022-08-10 08:27:01 +00:00
|
|
|
{% if params.source == 'irc' %}
|
|
|
|
<option selected value="irc">IRC</option>
|
|
|
|
{% else %}
|
|
|
|
<option value="irc">IRC</option>
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if params.source == 'dis' %}
|
|
|
|
<option selected value="dis">Discord</option>
|
|
|
|
{% else %}
|
|
|
|
<option value="dis">Discord</option>
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if params.source == None %}
|
|
|
|
<option selected value="all">All</option>
|
|
|
|
{% elif params.source == 'all' %}
|
|
|
|
<option selected value="all">All</option>
|
|
|
|
{% else %}
|
|
|
|
<option value="all">All</option>
|
|
|
|
{% endif %}
|
|
|
|
|
2022-08-03 06:20:30 +00:00
|
|
|
</select>
|
|
|
|
<span class="icon is-small is-left">
|
|
|
|
<i class="fas fa-magnifying-glass"></i>
|
|
|
|
</span>
|
|
|
|
</span>
|
2022-08-03 22:54:48 +00:00
|
|
|
</div>
|
|
|
|
<p class="control">
|
|
|
|
<a class="button is-static">
|
2022-08-03 06:20:30 +00:00
|
|
|
source
|
2022-08-03 22:54:48 +00:00
|
|
|
</a>
|
|
|
|
</p>
|
|
|
|
</div>
|
2022-08-15 23:15:36 +00:00
|
|
|
<div class="control">
|
|
|
|
<label class="button has-text-link">
|
|
|
|
<input type="checkbox"
|
|
|
|
name="dedup"
|
|
|
|
{% if params.dedup == "on" %}
|
|
|
|
checked
|
|
|
|
{% endif %}>
|
|
|
|
<span class="icon" data-tooltip="Deduplicate results">
|
|
|
|
<i class="fa-solid fa-copy"></i>
|
|
|
|
</span>
|
|
|
|
</label>
|
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
|
|
|
<div class="column is-narrow">
|
2022-08-11 22:32:11 +00:00
|
|
|
<div id="sentiment block">
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="field has-addons">
|
|
|
|
<div class="control">
|
2022-08-10 08:27:01 +00:00
|
|
|
<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>
|
2022-08-03 06:20:30 +00:00
|
|
|
<script>bulmaSlider.attach();</script>
|
|
|
|
</div>
|
|
|
|
<p class="control">
|
|
|
|
<a class="button is-static">
|
|
|
|
sentiment
|
|
|
|
</a>
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
<div class="control">
|
2022-08-03 06:20:30 +00:00
|
|
|
<label class="radio button has-text-link">
|
2022-08-10 08:27:01 +00:00
|
|
|
|
|
|
|
<input type="radio"
|
|
|
|
value="below"
|
|
|
|
{% if params.sentiment_method == 'below' %}
|
|
|
|
checked
|
|
|
|
{% endif %}
|
|
|
|
name="sentiment_method">
|
2022-08-03 06:20:30 +00:00
|
|
|
<span class="icon" data-tooltip="Below">
|
|
|
|
<i class="fa-solid fa-face-frown"></i>
|
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</label>
|
2022-08-03 06:20:30 +00:00
|
|
|
<label class="radio button has-text-link is-hidden">
|
2022-08-10 08:27:01 +00:00
|
|
|
|
|
|
|
<input type="radio"
|
|
|
|
value="exact"
|
|
|
|
{% if params.sentiment_method == 'exact' %}
|
|
|
|
checked
|
|
|
|
{% endif %}
|
|
|
|
name="sentiment_method">
|
2022-08-03 06:20:30 +00:00
|
|
|
<span class="icon" data-tooltip="Exact">
|
|
|
|
<i class="fa-solid fa-face-smile"></i>
|
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</label>
|
2022-08-03 06:20:30 +00:00
|
|
|
<label class="radio button has-text-link">
|
2022-08-10 08:27:01 +00:00
|
|
|
<input type="radio"
|
|
|
|
value="above"
|
|
|
|
{% if params.sentiment_method == 'above' %}
|
|
|
|
checked
|
|
|
|
{% endif %}
|
|
|
|
name="sentiment_method">
|
2022-08-03 06:20:30 +00:00
|
|
|
<span class="icon" data-tooltip="Above">
|
|
|
|
<i class="fa-solid fa-face-smile"></i>
|
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</label>
|
2022-08-03 06:20:30 +00:00
|
|
|
<label class="radio button has-text-link">
|
2022-08-10 08:27:01 +00:00
|
|
|
<input type="radio"
|
|
|
|
value="nonzero"
|
|
|
|
{% if params.sentiment_method == 'nonzero' %}
|
|
|
|
checked
|
|
|
|
{% endif %}
|
|
|
|
name="sentiment_method">
|
2022-08-03 06:20:30 +00:00
|
|
|
<span class="icon" data-tooltip="Nonzero">
|
|
|
|
<i class="fa-solid fa-face-meh-blank"></i>
|
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</label>
|
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
2022-08-11 22:32:11 +00:00
|
|
|
<label class="checkbox button mt-5">
|
2022-08-10 08:27:01 +00:00
|
|
|
<input type="checkbox"
|
|
|
|
name="check_sentiment"
|
|
|
|
{% if params.check_sentiment == "on" %}
|
|
|
|
checked
|
|
|
|
{% endif %}
|
2022-08-09 06:20:30 +00:00
|
|
|
data-script="on click toggle @disabled on #sliderWithValue then toggle @disabled on #sentiment">
|
2022-08-11 22:32:11 +00:00
|
|
|
Check sentiment
|
2022-08-03 06:20:30 +00:00
|
|
|
</label>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="column is-narrow">
|
|
|
|
<div id="date">
|
|
|
|
<div class="field">
|
|
|
|
<div class="control">
|
2022-08-10 08:27:01 +00:00
|
|
|
<input type="date" name="dates" value="{{ params.date }}">
|
2022-08-03 06:20:30 +00:00
|
|
|
<script>
|
|
|
|
var options = {
|
|
|
|
"type": "datetime",
|
|
|
|
"isRange": true,
|
|
|
|
"color": "info",
|
|
|
|
"validateLabel": "Save",
|
|
|
|
"dateFormat": "yyyy-MM-dd",
|
2022-08-10 08:27:01 +00:00
|
|
|
"startDate": "{{ params.from_date|escapejs }}",
|
|
|
|
"startTime": "{{ params.from_time|escapejs }}",
|
|
|
|
"endDate": "{{ params.to_date|escapejs }}",
|
|
|
|
"endTime": "{{ params.to_time|escapejs }}",
|
2022-08-12 19:45:25 +00:00
|
|
|
"displayMode": "dialog"
|
2022-08-03 06:20:30 +00:00
|
|
|
};
|
|
|
|
// Initialize all input of type date
|
|
|
|
var calendars = bulmaCalendar.attach('[type="date"]', options);
|
2022-08-03 22:54:48 +00:00
|
|
|
|
2022-08-03 06:20:30 +00:00
|
|
|
// Loop on each calendar initialized
|
|
|
|
for(var i = 0; i < calendars.length; i++) {
|
|
|
|
// Add listener to select event
|
|
|
|
calendars[i].on('save', date => {
|
|
|
|
htmx.trigger("#search", "click");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="control">
|
2022-08-03 06:20:30 +00:00
|
|
|
<label class="radio button has-text-link">
|
2022-08-10 08:27:01 +00:00
|
|
|
<input type="radio" value="desc" name="sorting"
|
|
|
|
{% if params.sorting == None %}
|
|
|
|
checked
|
|
|
|
{% elif params.sorting == 'desc' %}
|
|
|
|
checked
|
|
|
|
{% endif %}
|
|
|
|
>
|
2022-08-03 06:20:30 +00:00
|
|
|
<span class="icon" data-tooltip="Sort descending">
|
|
|
|
<i class="fa-solid fa-sort-down"></i>
|
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</label>
|
2022-08-03 06:20:30 +00:00
|
|
|
<label class="radio button">
|
2022-08-10 08:27:01 +00:00
|
|
|
<input type="radio" value="asc" name="sorting"
|
|
|
|
{% if params.sorting == 'asc' %}
|
|
|
|
checked
|
|
|
|
{% endif %}>
|
2022-08-03 06:20:30 +00:00
|
|
|
<span class="icon" data-tooltip="Sort ascending">
|
|
|
|
<i class="fa-solid fa-sort-up"></i>
|
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</label>
|
2022-08-03 06:20:30 +00:00
|
|
|
<label class="radio button">
|
2022-08-10 08:27:01 +00:00
|
|
|
<input type="radio" value="none" name="sorting"
|
|
|
|
{% if params.sorting == 'none' %}
|
|
|
|
checked
|
|
|
|
{% endif %}>
|
2022-08-03 06:20:30 +00:00
|
|
|
<span class="icon" data-tooltip="No sort">
|
|
|
|
<i class="fa-solid fa-sort"></i>
|
|
|
|
</span>
|
2022-08-03 06:20:30 +00:00
|
|
|
</label>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2022-08-11 21:45:02 +00:00
|
|
|
<div class="column is-narrow">
|
|
|
|
<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' %}
|
|
|
|
<option selected value="int">Internal</option>
|
|
|
|
{% else %}
|
|
|
|
<option value="int">Internal</option>
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
{% if params.index == 'meta' %}
|
|
|
|
<option selected value="meta">Meta</option>
|
|
|
|
{% else %}
|
|
|
|
<option value="meta">Meta</option>
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
</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>
|
2022-08-03 06:20:30 +00:00
|
|
|
</div>
|
2022-07-21 12:49:01 +00:00
|
|
|
</div>
|
2022-08-26 16:16:55 +00:00
|
|
|
<div id="query_full" class="block {% if params.query_full is None %}is-hidden{% endif %}">
|
|
|
|
<div class="control is-expanded has-icons-left">
|
|
|
|
<input
|
|
|
|
hx-post="{% url 'search' %}"
|
|
|
|
hx-trigger="keyup changed delay:200ms"
|
|
|
|
hx-target="#results"
|
|
|
|
hx-swap="innerHTML"
|
|
|
|
name="query_full"
|
|
|
|
value="{{ params.query_full }}"
|
|
|
|
class="input"
|
|
|
|
type="text"
|
|
|
|
placeholder="msg: science AND nick: BillNye AND channel: #science">
|
|
|
|
<span class="icon is-small is-left">
|
|
|
|
<i class="fas fa-magnifying-glass"></i>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="block">
|
|
|
|
<input
|
|
|
|
hx-trigger="change"
|
|
|
|
hx-post="{% url 'search' %}"
|
|
|
|
hx-target="#results"
|
|
|
|
hx-swap="innerHTML"
|
|
|
|
id="tags"
|
|
|
|
class="input"
|
|
|
|
type="tags"
|
|
|
|
name="tags"
|
|
|
|
placeholder="Add tags"
|
|
|
|
value="{{ params.tags }}">
|
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="is-hidden"></div>
|
2022-07-21 12:49:11 +00:00
|
|
|
</form>
|
2022-07-21 12:46:05 +00:00
|
|
|
</div>
|
2022-08-03 06:20:30 +00:00
|
|
|
<div class="block">
|
2022-08-03 22:26:22 +00:00
|
|
|
<div id="results">
|
2022-08-26 16:16:55 +00:00
|
|
|
{% include 'ui/drilldown/table_results.html' %}
|
|
|
|
<script>
|
|
|
|
setupTags();
|
|
|
|
</script>
|
2022-08-03 22:26:22 +00:00
|
|
|
</div>
|
2022-07-21 12:50:51 +00:00
|
|
|
</div>
|
2022-07-21 12:52:06 +00:00
|
|
|
<div id="modals-here">
|
|
|
|
</div>
|
2022-07-21 12:45:28 +00:00
|
|
|
{% endblock %}
|