Make search page layout draggable
This commit is contained in:
1
core/static/css/gridstack.min.css
vendored
Normal file
1
core/static/css/gridstack.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
3
core/static/js/gridstack-all.js
Normal file
3
core/static/js/gridstack-all.js
Normal file
File diff suppressed because one or more lines are too long
16
core/static/js/gridstack.min.js
vendored
Normal file
16
core/static/js/gridstack.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -16,6 +16,7 @@
|
|||||||
<link rel="stylesheet" href="{% static 'css/bulma-calendar.min.css' %}">
|
<link rel="stylesheet" href="{% static 'css/bulma-calendar.min.css' %}">
|
||||||
<link rel="stylesheet" href="{% static 'css/bulma-tagsinput.min.css' %}">
|
<link rel="stylesheet" href="{% static 'css/bulma-tagsinput.min.css' %}">
|
||||||
<link rel="stylesheet" href="{% static 'css/bulma-switch.min.css' %}">
|
<link rel="stylesheet" href="{% static 'css/bulma-switch.min.css' %}">
|
||||||
|
<link rel="stylesheet" href="{% static 'css/gridstack.min.css' %}">
|
||||||
<script src="{% static 'js/bulma-calendar.min.js' %}" integrity="sha384-DThNif0xGXbopX7+PE+UabkuClfI/zELNhaVqoGLutaWB76dyMw0vIQBGmUxSfVQ" crossorigin="anonymous"></script>
|
<script src="{% static 'js/bulma-calendar.min.js' %}" integrity="sha384-DThNif0xGXbopX7+PE+UabkuClfI/zELNhaVqoGLutaWB76dyMw0vIQBGmUxSfVQ" crossorigin="anonymous"></script>
|
||||||
<script src="{% static 'js/bulma-slider.min.js' %}" integrity="sha384-wbyps8iLG8QzJE02viYc/27BtT5HSa11+b5V7QPR1/huVuA8f4LRTNGc82qAIeIZ" crossorigin="anonymous"></script>
|
<script src="{% static 'js/bulma-slider.min.js' %}" integrity="sha384-wbyps8iLG8QzJE02viYc/27BtT5HSa11+b5V7QPR1/huVuA8f4LRTNGc82qAIeIZ" crossorigin="anonymous"></script>
|
||||||
<script defer src="{% static 'js/htmx.min.js' %}" integrity="sha384-cZuAZ+ZbwkNRnrKi05G/fjBX+azI9DNOkNYysZ0I/X5ZFgsmMiBXgDZof30F5ofc" crossorigin="anonymous"></script>
|
<script defer src="{% static 'js/htmx.min.js' %}" integrity="sha384-cZuAZ+ZbwkNRnrKi05G/fjBX+azI9DNOkNYysZ0I/X5ZFgsmMiBXgDZof30F5ofc" crossorigin="anonymous"></script>
|
||||||
@@ -23,6 +24,7 @@
|
|||||||
<script defer src="{% static 'js/hyperscript.min.js' %}" integrity="sha384-6GYN8BDHOJkkru6zcpGOUa//1mn+5iZ/MyT6mq34WFIpuOeLF52kSi721q0SsYF9" crossorigin="anonymous"></script>
|
<script defer src="{% static 'js/hyperscript.min.js' %}" integrity="sha384-6GYN8BDHOJkkru6zcpGOUa//1mn+5iZ/MyT6mq34WFIpuOeLF52kSi721q0SsYF9" crossorigin="anonymous"></script>
|
||||||
<script src="{% static 'js/bulma-tagsinput.min.js' %}" integrity="sha384-GmnKCsPJIPPZbNVXpkGRmKdxOa0PQLnOM/hQLIHvMRERySuyvFqKGc76iHTGUY+d" crossorigin="anonymous"></script>
|
<script src="{% static 'js/bulma-tagsinput.min.js' %}" integrity="sha384-GmnKCsPJIPPZbNVXpkGRmKdxOa0PQLnOM/hQLIHvMRERySuyvFqKGc76iHTGUY+d" crossorigin="anonymous"></script>
|
||||||
<script src="{% static 'js/jquery.min.js' %}"></script>
|
<script src="{% static 'js/jquery.min.js' %}"></script>
|
||||||
|
<script src="{% static 'js/gridstack-all.js' %}"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("restore-scroll", function(event) {
|
document.addEventListener("restore-scroll", function(event) {
|
||||||
var scrollpos = localStorage.getItem('scrollpos');
|
var scrollpos = localStorage.getItem('scrollpos');
|
||||||
@@ -109,6 +111,35 @@
|
|||||||
.rounded-tooltip:hover .tooltiptext {
|
.rounded-tooltip:hover .tooltiptext {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
.ui-move {
|
||||||
|
background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDUxMS42MjYgNTExLjYyNyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTExLjYyNiA1MTEuNjI3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTMyOC45MDYsNDAxLjk5NGgtMzYuNTUzVjEwOS42MzZoMzYuNTUzYzQuOTQ4LDAsOS4yMzYtMS44MDksMTIuODQ3LTUuNDI2YzMuNjEzLTMuNjE1LDUuNDIxLTcuODk4LDUuNDIxLTEyLjg0NSAgIGMwLTQuOTQ5LTEuODAxLTkuMjMxLTUuNDI4LTEyLjg1MWwtNzMuMDg3LTczLjA5QzI2NS4wNDQsMS44MDksMjYwLjc2LDAsMjU1LjgxMywwYy00Ljk0OCwwLTkuMjI5LDEuODA5LTEyLjg0Nyw1LjQyNCAgIGwtNzMuMDg4LDczLjA5Yy0zLjYxOCwzLjYxOS01LjQyNCw3LjkwMi01LjQyNCwxMi44NTFjMCw0Ljk0NiwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDVjMy42MTksMy42MTcsNy45MDEsNS40MjYsMTIuODUsNS40MjYgICBoMzYuNTQ1djI5Mi4zNThoLTM2LjU0MmMtNC45NTIsMC05LjIzNSwxLjgwOC0xMi44NSw1LjQyMWMtMy42MTcsMy42MjEtNS40MjQsNy45MDUtNS40MjQsMTIuODU0ICAgYzAsNC45NDUsMS44MDcsOS4yMjcsNS40MjQsMTIuODQ3bDczLjA4OSw3My4wODhjMy42MTcsMy42MTcsNy44OTgsNS40MjQsMTIuODQ3LDUuNDI0YzQuOTUsMCw5LjIzNC0xLjgwNywxMi44NDktNS40MjQgICBsNzMuMDg3LTczLjA4OGMzLjYxMy0zLjYyLDUuNDIxLTcuOTAxLDUuNDIxLTEyLjg0N2MwLTQuOTQ4LTEuODA4LTkuMjMyLTUuNDIxLTEyLjg1NCAgIEMzMzguMTQyLDQwMy44MDIsMzMzLjg1Nyw0MDEuOTk0LDMyOC45MDYsNDAxLjk5NHoiIGZpbGw9IiM2NjY2NjYiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K");
|
||||||
|
background-position-x: 50%;
|
||||||
|
background-position-y: 50%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
bottom: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: rgb(74, 74, 74);
|
||||||
|
cursor: se-resize;
|
||||||
|
display: none;
|
||||||
|
filter: none;
|
||||||
|
font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 0.1px;
|
||||||
|
font-weight: 400;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 0.15px;
|
||||||
|
position: absolute;
|
||||||
|
left: 10px;
|
||||||
|
text-rendering: optimizelegibility;
|
||||||
|
touch-action: none;
|
||||||
|
transform: matrix(0.707107, -0.707107, 0.707107, 0.707107, 0, 0);
|
||||||
|
user-select: none;
|
||||||
|
width: 20px;
|
||||||
|
z-index: 100
|
||||||
|
}
|
||||||
|
.grid-stack-item-content:hover .ui-move {
|
||||||
|
display: block;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -214,6 +245,8 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
{% block outer_content %}
|
||||||
|
{% endblock %}
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load joinsep %}
|
{% load joinsep %}
|
||||||
{% block content %}
|
{% block outer_content %}
|
||||||
{% if params.modal == 'context' %}
|
{% if params.modal == 'context' %}
|
||||||
<div
|
<div
|
||||||
style="display: none;"
|
style="display: none;"
|
||||||
@@ -53,439 +53,49 @@
|
|||||||
htmx.trigger("#search", "click");
|
htmx.trigger("#search", "click");
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<div>
|
<div class="grid-stack">
|
||||||
{# Not sure why this was here, but it duplicates errors! #}
|
<div class="grid-stack-item" gs-w="5" gs-h="10" gs-y="0" gs-x="1">
|
||||||
{# include 'partials/notify.html' #}
|
<div class="grid-stack-item-content">
|
||||||
<form class="skipEmptyFields" method="POST" hx-post="{% url 'search' %}"
|
<nav class="panel">
|
||||||
hx-trigger="change"
|
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
||||||
hx-target="#results"
|
<i class="fa-solid fa-arrows-up-down-left-right has-text-grey-light"></i>
|
||||||
hx-swap="innerHTML"
|
|
||||||
hx-indicator="#spinner">
|
|
||||||
{% csrf_token %}
|
|
||||||
|
|
||||||
<div class="columns">
|
|
||||||
<div class="column">
|
|
||||||
<div class="field has-addons">
|
|
||||||
<div id="query" 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"
|
|
||||||
value="{{ params.query }}"
|
|
||||||
class="input"
|
|
||||||
type="text"
|
|
||||||
placeholder="(science | tech | art) + (interest) -hello">
|
|
||||||
<span class="icon is-small is-left">
|
|
||||||
<i class="fas fa-magnifying-glass"></i>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="control">
|
|
||||||
<div class="field">
|
|
||||||
<button
|
|
||||||
id="search"
|
|
||||||
class="button is-info is-fullwidth"
|
|
||||||
hx-post="{% url 'search' %}"
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#results"
|
|
||||||
hx-swap="innerHTML">
|
|
||||||
Search
|
Search
|
||||||
</button>
|
|
||||||
</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 class="nowrap-child">
|
|
||||||
<span id="spinner" class="button is-light has-text-link is-loading htmx-indicator">Static</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="options" class="block 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 %}
|
|
||||||
{% if size == params.size %}
|
|
||||||
<option selected value="{{ size }}">{{ size }}</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="{{ size }}">{{ size }}</option>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</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">
|
|
||||||
results
|
|
||||||
</a>
|
|
||||||
</p>
|
</p>
|
||||||
|
<article class="panel-block is-active">
|
||||||
|
{% include 'ui/drilldown/search_partial.html' %}
|
||||||
|
</article>
|
||||||
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
<div class="control">
|
<div class="grid-stack-item" gs-w="10" gs-h="40" gs-y="10" gs-x="1">
|
||||||
<div class="field rounded-tooltip">
|
<div class="grid-stack-item-content">
|
||||||
<input
|
|
||||||
id="full_query"
|
|
||||||
type="checkbox"
|
|
||||||
class="switch is-rounded is-info"
|
|
||||||
{% if params.query_full is not None %}checked="checked"{% else %}none{% endif %}
|
|
||||||
{% if not perms.core.query_search %}
|
|
||||||
disabled
|
|
||||||
{% endif %}
|
|
||||||
data-script="on click toggle .is-hidden on #query_full">
|
|
||||||
<label
|
|
||||||
for="full_query">
|
|
||||||
Full query
|
|
||||||
</label>
|
|
||||||
{% if not perms.core.query_search %}
|
|
||||||
<span class="tooltiptext tag is-danger is-light">No access</span>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="column is-narrow">
|
|
||||||
<div class="field has-addons block">
|
|
||||||
<div class="control has-icons-left">
|
|
||||||
<span class="select">
|
|
||||||
<select id="source" name="source">
|
|
||||||
{% 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 %}
|
|
||||||
|
|
||||||
</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">
|
|
||||||
source
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="control">
|
|
||||||
<div class="field">
|
|
||||||
<input
|
|
||||||
id="dedup_switch"
|
|
||||||
type="checkbox"
|
|
||||||
class="switch is-rounded is-info"
|
|
||||||
name="dedup"
|
|
||||||
{% if params.dedup == "on" %}
|
|
||||||
checked="checked"
|
|
||||||
{% endif %}>
|
|
||||||
<label
|
|
||||||
for="dedup_switch">
|
|
||||||
Deduplicate results
|
|
||||||
</label>
|
|
||||||
</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>
|
|
||||||
<p class="control">
|
|
||||||
<a class="button is-static">
|
|
||||||
sentiment
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="control">
|
|
||||||
<label class="radio button has-text-link">
|
|
||||||
<input type="radio"
|
|
||||||
value="below"
|
|
||||||
class="sentiment-radio"
|
|
||||||
{% if params.sentiment_method == 'below' %}
|
|
||||||
checked
|
|
||||||
{% endif %}
|
|
||||||
name="sentiment_method"
|
|
||||||
{% if params.check_sentiment != "on" %}
|
|
||||||
disabled
|
|
||||||
{% endif %}>
|
|
||||||
<span class="icon" data-tooltip="Below">
|
|
||||||
<i class="fa-solid fa-face-frown"></i>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<label class="radio button has-text-link is-hidden">
|
|
||||||
<input type="radio"
|
|
||||||
value="exact"
|
|
||||||
class="sentiment-radio"
|
|
||||||
{% if params.sentiment_method == 'exact' %}
|
|
||||||
checked
|
|
||||||
{% endif %}
|
|
||||||
name="sentiment_method"
|
|
||||||
{% if params.check_sentiment != "on" %}
|
|
||||||
disabled
|
|
||||||
{% endif %}>
|
|
||||||
<span class="icon" data-tooltip="Exact">
|
|
||||||
<i class="fa-solid fa-face-smile"></i>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<label class="radio button has-text-link">
|
|
||||||
<input type="radio"
|
|
||||||
value="above"
|
|
||||||
class="sentiment-radio"
|
|
||||||
{% if params.sentiment_method == 'above' %}
|
|
||||||
checked
|
|
||||||
{% endif %}
|
|
||||||
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 class="control">
|
|
||||||
<div class="field">
|
|
||||||
<input
|
|
||||||
id="sentiment_switch"
|
|
||||||
type="checkbox"
|
|
||||||
class="switch is-rounded is-info"
|
|
||||||
name="check_sentiment"
|
|
||||||
data-script="on click toggle @disabled on #sliderWithValue then toggle @disabled on #sentiment then toggle @disabled on .sentiment-radio"
|
|
||||||
{% if params.check_sentiment == "on" %}
|
|
||||||
checked
|
|
||||||
{% endif %}>
|
|
||||||
<label
|
|
||||||
for="sentiment_switch">
|
|
||||||
Check sentiment
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="control">
|
|
||||||
<div class="field">
|
|
||||||
<input
|
|
||||||
id="sentiment_graph_switch"
|
|
||||||
type="checkbox"
|
|
||||||
class="switch is-rounded is-info"
|
|
||||||
name="show_sentiment"
|
|
||||||
data-script="on click toggle .is-hidden on #sentiment-container">
|
|
||||||
|
|
||||||
<label
|
|
||||||
for="sentiment_graph_switch">
|
|
||||||
Show graph
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="column is-narrow">
|
|
||||||
<div id="date">
|
|
||||||
<div class="field">
|
|
||||||
<div class="control">
|
|
||||||
<input type="date" name="dates" value="{{ params.date }}">
|
|
||||||
<script>
|
|
||||||
var options = {
|
|
||||||
"type": "datetime",
|
|
||||||
"isRange": true,
|
|
||||||
"color": "info",
|
|
||||||
"validateLabel": "Save",
|
|
||||||
"dateFormat": "yyyy-MM-dd",
|
|
||||||
"startDate": "{{ params.from_date|escapejs }}",
|
|
||||||
"startTime": "{{ params.from_time|escapejs }}",
|
|
||||||
"endDate": "{{ params.to_date|escapejs }}",
|
|
||||||
"endTime": "{{ params.to_time|escapejs }}",
|
|
||||||
"displayMode": "dialog"
|
|
||||||
};
|
|
||||||
// Initialize all input of type date
|
|
||||||
var calendars = bulmaCalendar.attach('[type="date"]', options);
|
|
||||||
|
|
||||||
// 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">
|
|
||||||
<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 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' %}
|
|
||||||
<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>
|
|
||||||
{% if not user.is_superuser %}
|
|
||||||
<span class="tooltiptext tag is-danger is-light">No access</span>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<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>
|
|
||||||
<div class="is-hidden"></div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="block">
|
|
||||||
<div id="results">
|
<div id="results">
|
||||||
|
<nav 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"></i>
|
||||||
|
Results
|
||||||
|
</p>
|
||||||
|
<div class="panel-block is-active">
|
||||||
|
<div class="control">
|
||||||
{% include 'ui/drilldown/table_results.html' %}
|
{% include 'ui/drilldown/table_results.html' %}
|
||||||
<script>
|
</div>
|
||||||
setupTags();
|
</div>
|
||||||
</script>
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="modals-here">
|
<div id="modals-here">
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
<script>
|
||||||
|
setupTags();
|
||||||
|
var grid = GridStack.init({
|
||||||
|
cellHeight: 20,
|
||||||
|
// cellWidth: 50,
|
||||||
|
auto: true,
|
||||||
|
float: true,
|
||||||
|
draggable: {handle: '.panel-heading', scroll: false, appendTo: 'body'},
|
||||||
|
removable: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock outer_content %}
|
||||||
|
|||||||
421
core/templates/ui/drilldown/search_partial.html
Normal file
421
core/templates/ui/drilldown/search_partial.html
Normal file
@@ -0,0 +1,421 @@
|
|||||||
|
<form class="skipEmptyFields" method="POST" hx-post="{% url 'search' %}"
|
||||||
|
hx-trigger="change"
|
||||||
|
hx-target="#results"
|
||||||
|
hx-swap="innerHTML"
|
||||||
|
hx-indicator="#spinner">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<div class="field has-addons">
|
||||||
|
<div id="query" 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"
|
||||||
|
value="{{ params.query }}"
|
||||||
|
class="input"
|
||||||
|
type="text"
|
||||||
|
placeholder="(science | tech | art) + (interest) -hello">
|
||||||
|
<span class="icon is-small is-left">
|
||||||
|
<i class="fas fa-magnifying-glass"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<div class="field">
|
||||||
|
<button
|
||||||
|
id="search"
|
||||||
|
class="button is-info is-fullwidth"
|
||||||
|
hx-post="{% url 'search' %}"
|
||||||
|
hx-trigger="click"
|
||||||
|
hx-target="#results"
|
||||||
|
hx-swap="innerHTML">
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</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 class="nowrap-child">
|
||||||
|
<span id="spinner" class="button is-light has-text-link is-loading htmx-indicator">Static</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="options" class="block 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 %}
|
||||||
|
{% if size == params.size %}
|
||||||
|
<option selected value="{{ size }}">{{ size }}</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="{{ size }}">{{ size }}</option>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</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">
|
||||||
|
results
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<div class="field rounded-tooltip">
|
||||||
|
<input
|
||||||
|
id="full_query"
|
||||||
|
type="checkbox"
|
||||||
|
class="switch is-rounded is-info"
|
||||||
|
{% if params.query_full is not None %}checked="checked"{% else %}none{% endif %}
|
||||||
|
{% if not perms.core.query_search %}
|
||||||
|
disabled
|
||||||
|
{% endif %}
|
||||||
|
data-script="on click toggle .is-hidden on #query_full">
|
||||||
|
<label
|
||||||
|
for="full_query">
|
||||||
|
Full query
|
||||||
|
</label>
|
||||||
|
{% if not perms.core.query_search %}
|
||||||
|
<span class="tooltiptext tag is-danger is-light">No access</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column is-narrow">
|
||||||
|
<div class="field has-addons block">
|
||||||
|
<div class="control has-icons-left">
|
||||||
|
<span class="select">
|
||||||
|
<select id="source" name="source">
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
</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">
|
||||||
|
source
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<div class="field">
|
||||||
|
<input
|
||||||
|
id="dedup_switch"
|
||||||
|
type="checkbox"
|
||||||
|
class="switch is-rounded is-info"
|
||||||
|
name="dedup"
|
||||||
|
{% if params.dedup == "on" %}
|
||||||
|
checked="checked"
|
||||||
|
{% endif %}>
|
||||||
|
<label
|
||||||
|
for="dedup_switch">
|
||||||
|
Deduplicate results
|
||||||
|
</label>
|
||||||
|
</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>
|
||||||
|
<p class="control">
|
||||||
|
<a class="button is-static">
|
||||||
|
sentiment
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<label class="radio button has-text-link">
|
||||||
|
<input type="radio"
|
||||||
|
value="below"
|
||||||
|
class="sentiment-radio"
|
||||||
|
{% if params.sentiment_method == 'below' %}
|
||||||
|
checked
|
||||||
|
{% endif %}
|
||||||
|
name="sentiment_method"
|
||||||
|
{% if params.check_sentiment != "on" %}
|
||||||
|
disabled
|
||||||
|
{% endif %}>
|
||||||
|
<span class="icon" data-tooltip="Below">
|
||||||
|
<i class="fa-solid fa-face-frown"></i>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<label class="radio button has-text-link is-hidden">
|
||||||
|
<input type="radio"
|
||||||
|
value="exact"
|
||||||
|
class="sentiment-radio"
|
||||||
|
{% if params.sentiment_method == 'exact' %}
|
||||||
|
checked
|
||||||
|
{% endif %}
|
||||||
|
name="sentiment_method"
|
||||||
|
{% if params.check_sentiment != "on" %}
|
||||||
|
disabled
|
||||||
|
{% endif %}>
|
||||||
|
<span class="icon" data-tooltip="Exact">
|
||||||
|
<i class="fa-solid fa-face-smile"></i>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<label class="radio button has-text-link">
|
||||||
|
<input type="radio"
|
||||||
|
value="above"
|
||||||
|
class="sentiment-radio"
|
||||||
|
{% if params.sentiment_method == 'above' %}
|
||||||
|
checked
|
||||||
|
{% endif %}
|
||||||
|
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 class="control">
|
||||||
|
<div class="field">
|
||||||
|
<input
|
||||||
|
id="sentiment_switch"
|
||||||
|
type="checkbox"
|
||||||
|
class="switch is-rounded is-info"
|
||||||
|
name="check_sentiment"
|
||||||
|
data-script="on click toggle @disabled on #sliderWithValue then toggle @disabled on #sentiment then toggle @disabled on .sentiment-radio"
|
||||||
|
{% if params.check_sentiment == "on" %}
|
||||||
|
checked
|
||||||
|
{% endif %}>
|
||||||
|
<label
|
||||||
|
for="sentiment_switch">
|
||||||
|
Check sentiment
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<div class="field">
|
||||||
|
<input
|
||||||
|
id="sentiment_graph_switch"
|
||||||
|
type="checkbox"
|
||||||
|
class="switch is-rounded is-info"
|
||||||
|
name="show_sentiment"
|
||||||
|
data-script="on click toggle .is-hidden on #sentiment-container">
|
||||||
|
|
||||||
|
<label
|
||||||
|
for="sentiment_graph_switch">
|
||||||
|
Show graph
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column is-narrow">
|
||||||
|
<div id="date">
|
||||||
|
<div class="field">
|
||||||
|
<div class="control">
|
||||||
|
<input type="date" name="dates" value="{{ params.date }}">
|
||||||
|
<script>
|
||||||
|
var options = {
|
||||||
|
"type": "datetime",
|
||||||
|
"isRange": true,
|
||||||
|
"color": "info",
|
||||||
|
"validateLabel": "Save",
|
||||||
|
"dateFormat": "yyyy-MM-dd",
|
||||||
|
"startDate": "{{ params.from_date|escapejs }}",
|
||||||
|
"startTime": "{{ params.from_time|escapejs }}",
|
||||||
|
"endDate": "{{ params.to_date|escapejs }}",
|
||||||
|
"endTime": "{{ params.to_time|escapejs }}",
|
||||||
|
"displayMode": "dialog"
|
||||||
|
};
|
||||||
|
// Initialize all input of type date
|
||||||
|
var calendars = bulmaCalendar.attach('[type="date"]', options);
|
||||||
|
|
||||||
|
// 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">
|
||||||
|
<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 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' %}
|
||||||
|
<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>
|
||||||
|
{% if not user.is_superuser %}
|
||||||
|
<span class="tooltiptext tag is-danger is-light">No access</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<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>
|
||||||
|
<div class="is-hidden"></div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
{% load joinsep %}
|
{% load joinsep %}
|
||||||
{% load urlsafe %}
|
{% load urlsafe %}
|
||||||
{% block table-wrapper %}
|
{% block table-wrapper %}
|
||||||
<div id="drilldown-table" class="container column-shifter-container" style="position:relative; z-index:1;">
|
<div id="drilldown-table" class="column-shifter-container" style="position:relative; z-index:1;">
|
||||||
{% block table %}
|
{% block table %}
|
||||||
<div class="nowrap-parent">
|
<div class="nowrap-parent">
|
||||||
<div class="nowrap-child">
|
<div class="nowrap-child">
|
||||||
|
|||||||
Reference in New Issue
Block a user