add a file search
This commit is contained in:
37
main.py
37
main.py
@@ -652,15 +652,40 @@ def outofdate():
|
||||
def search():
|
||||
global sources
|
||||
|
||||
query = request.args.get('q')
|
||||
res = []
|
||||
if query is not None:
|
||||
parts = query.split()
|
||||
query = request.args.get('q', '')
|
||||
qtype = request.args.get('t', '')
|
||||
|
||||
if qtype not in ["pkg", "files"]:
|
||||
qtype = "pkg"
|
||||
|
||||
if not query:
|
||||
return render_template(
|
||||
'search.html', sources=[], files=[], query=query, qtype=qtype)
|
||||
|
||||
parts = query.split()
|
||||
res_pkg = []
|
||||
res_files = []
|
||||
|
||||
if qtype == "pkg":
|
||||
for s in sources:
|
||||
if [p for p in parts if p.lower() in s.name.lower()] == parts:
|
||||
res.append(s)
|
||||
res_pkg.append(s)
|
||||
elif qtype == "files":
|
||||
for s in sources:
|
||||
for p in s.packages.values():
|
||||
for f in p.files:
|
||||
if f.endswith("/"):
|
||||
continue
|
||||
if [p for p in parts if p.lower() in f.lower()] == parts:
|
||||
res_files.append((f, p))
|
||||
|
||||
return render_template('search.html', sources=res, query=query or "")
|
||||
res_pkg.sort(key=lambda s: s.name)
|
||||
res_files.sort(key=lambda i: i[0])
|
||||
res_files = res_files[:150]
|
||||
|
||||
return render_template(
|
||||
'search.html', sources=res_pkg, files=res_files,
|
||||
query=query, qtype=qtype)
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
<a class="nav-link" href="{{ url_for('group') }}">Groups</a>
|
||||
</li>
|
||||
<li class="nav-item"><a class="nav-link">|</a></li>
|
||||
<li class="nav-item {{ 'active' if request.endpoint == 'search' }}">
|
||||
<a class="nav-link" href="{{ url_for('search') }}">Search</a>
|
||||
</li>
|
||||
<li class="nav-item"><a class="nav-link">|</a></li>
|
||||
<li class="nav-item {{ 'active' if request.endpoint == 'updates' }}">
|
||||
<a class="nav-link" href="{{ url_for('updates') }}">Updates</a>
|
||||
</li>
|
||||
@@ -41,12 +45,9 @@
|
||||
<li class="nav-item {{ 'active' if request.endpoint == 'outofdate' }}">
|
||||
<a class="nav-link" href="{{ url_for('outofdate') }}">Outdated Packages</a>
|
||||
</li>
|
||||
</li>
|
||||
</ul>
|
||||
<form class="form-inline" action="{{ url_for('search') }}" method="get">
|
||||
<input class="form-control form-control-sm mr-sm-2" type="text" placeholder="Search" aria-label="Search" name="q" value="{{ query }}">
|
||||
<button class="btn btn-sm btn-outline-secondary my-2 my-sm-0" type="submit">Search</button>
|
||||
</form>
|
||||
<a href="https://github.com/lazka/msys2-web" class="btn btn-sm btn-outline-info" style="margin-left: 20px">Fork on GitHub</a>
|
||||
<a href="https://github.com/lazka/msys2-web" class="btn btn-sm btn-outline-info" style="margin-left: 20px">Fork on GitHub</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
@@ -1,6 +1,32 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block content %}
|
||||
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
|
||||
<form class="form-inline" action="{{ url_for('search') }}" method="get">
|
||||
|
||||
Search in
|
||||
<select style="margin: 0 12px" name="t" class="custom-select custom-select-sm">
|
||||
<option value="pkg" {{ "selected" if qtype == 'pkg' or not qtype }}>Base Packages</option>
|
||||
<option value="files" {{ "selected" if qtype == 'files' }}>Files</option>
|
||||
</select>
|
||||
for
|
||||
<input style="margin: 0 12px" class="form-control form-control-sm mr-sm-2" type="text" aria-label="Search" name="q" value="{{ query }}">
|
||||
|
||||
<button class="btn btn-sm btn-outline-secondary my-2 my-sm-0" type="submit">Search</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
{% if query %}
|
||||
|
||||
{% if qtype == 'pkg' %}
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<h4 class="card-title">Search results for "{{ query }}"</h4>
|
||||
@@ -17,4 +43,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<h4 class="card-title">Search results for "{{ query }}"</h4>
|
||||
<h6 class="card-subtitle mb-2 text-muted">Files (max 150) matching the search query</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<ul>
|
||||
{% for f, p in files %}
|
||||
<li>
|
||||
<code>{{ f }}</code>
|
||||
<span class="text-muted">
|
||||
(<a href="{{ package_url(p) }}">{{ package_name(p) }}</a>)
|
||||
</span>
|
||||
</li>
|
||||
{% else %}
|
||||
No matches
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user