add a file search

This commit is contained in:
Christoph Reiter
2017-09-10 22:22:23 +02:00
parent 86a45e174d
commit d87e9758b4
3 changed files with 90 additions and 11 deletions

37
main.py
View File

@@ -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

View File

@@ -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>

View File

@@ -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 %}