Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 72 additions & 39 deletions lewa/core/templates/core/languages.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,33 @@ <h1 class="has-text-white">
<section class="section">
<div class="container">
<h2 class="title is-3 has-text-centered mb-6">African Languages</h2>
<div class="level">
<div class="level-left">
<form class="field has-addons" role="search" action="" method="get">
<div class="control">
<input class="input"
type="search"
name="q"
placeholder="Search languages, scripts, countries..."
value="{{ q|default:'' }}">
</div>
<div class="control">
<button class="button is-info" type="submit" aria-label="Search">
<span class="icon"><i class="fas fa-search"></i></span>
</button>
</div>
</form>
</div>
<div class="level-right">
{% if q %}
<div class="has-text-right">
<p class="is-size-7">
Showing <strong>{{ total }}</strong> result{{ total|pluralize }} for "<em>{{ q }}</em>"
</p>
</div>
{% endif %}
</div>
</div>
<div class="box has-background-secondary mt-6">
<div class="content">
<h3 class="title is-4">About African Languages</h3>
Expand All @@ -26,53 +53,59 @@ <h3 class="title is-4">About African Languages</h3>
</div>
</div>
<div class="columns is-multiline">
{% for lang in languages %}
<div class="column is-4">
<div class="card language-card">
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fi fi-{{ lang.country_code }}"></i>
{% if languages %}
{% for lang in languages %}
<div class="column is-4">
<div class="card language-card">
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fi fi-{{ lang.country_code }}"></i>
</div>
<div class="media-content">
<p class="title is-4">{{ lang.name }}</p>
<p class="subtitle is-6">{{ lang.short.en }}</p>
</div>
</div>
<div class="media-content">
<p class="title is-4">{{ lang.name }}</p>
<p class="subtitle is-6">{{ lang.short.en }}</p>
<div class="content">
{{ lang.description.en }}
<a href="{{ lang.description.source }}" target="_blank"><i>[source]</i></a>
</div>
</div>
<div class="content">
{{ lang.description.en }}
<a href="{{ lang.description.source }}" target="_blank"><i>[source]</i></a>
<div class="card-footer">
<span class="card-footer-item">Writing systems:</span>
<div class="card-footer-item">
{% for ws in lang.writing_systems %}
<a class="tag" href="{% url 'writing-systems' writing_system=ws %}">{{ ws }}</a>&nbsp;
{% endfor %}
</div>
</div>
</div>
<div class="card-footer">
<span class="card-footer-item">Writing systems:</span>
<div class="card-footer-item">
{% for ws in lang.writing_systems %}
<a class="tag" href="{% url 'writing-systems' writing_system=ws %}">{{ ws }}</a>&nbsp;
{% endfor %}
<div class="card-footer">
<a class="card-footer-item">
<span class="content is-small">
<i class="fa fa-volume-up"></i>&nbsp;
Learn to Speak /&nbsp;
<i class="fa fa-ear-listen"></i>&nbsp;
Listen
</span>
</a>
<a class="card-footer-item">
<span class="content is-small">
<i class="fa fa-font"></i>&nbsp;
Learn to Type /&nbsp;
<i class="fa fa-volume-up"></i>&nbsp;
Read
</span>
</a>
</div>
</div>
<div class="card-footer">
<a class="card-footer-item">
<span class="content is-small">
<i class="fa fa-volume-up"></i>&nbsp;
Learn to Speak /&nbsp;
<i class="fa fa-ear-listen"></i>&nbsp;
Listen
</span>
</a>
<a class="card-footer-item">
<span class="content is-small">
<i class="fa fa-font"></i>&nbsp;
Learn to Type /&nbsp;
<i class="fa fa-volume-up"></i>&nbsp;
Read
</span>
</a>
</div>
</div>
{% endfor %}
{% else %}
<div class="column">
<div class="notification is-warning">No languages matched your search. Try different keywords.</div>
</div>
{% endfor %}
{% endif %}
</div>
</div>
</section>
Expand Down
31 changes: 29 additions & 2 deletions lewa/core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,36 @@ def pronunciation(request):


def languages(request, language=None):
data = LewaData.get_languages()
# Support search via ?q=term
q = (request.GET.get("q") or "").strip()
data = list(LewaData.get_languages())

if q:
q_lower = q.lower()

def matches(lang):
# search common fields: name, short English, description English, country, country_code, writing systems
name = str(lang.get("name", "")).lower()
short = str((lang.get("short") or {}).get("en", "")).lower()
desc = str((lang.get("description") or {}).get("en", "")).lower()
country = str(lang.get("country", "")).lower()
country_code = str(lang.get("country_code", "")).lower()
writing_systems = " ".join(lang.get("writing_systems", [])).lower()

return (
q_lower in name
or q_lower in short
or q_lower in desc
or q_lower in country
or q_lower in country_code
or q_lower in writing_systems
)

filtered = [l for l in data if matches(l)]
else:
filtered = data

return render(request, "core/languages.html", {"languages": data})
return render(request, "core/languages.html", {"languages": filtered, "q": q, "total": len(filtered)})


def writing_systems(request, writing_system=None):
Expand Down
21 changes: 20 additions & 1 deletion lewa/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,26 @@
</a>
</div>
<div class="navbar-menu" id="navbarMenu">
<div class="navbar-start">
<form class="navbar-item"
role="search"
action="{% url 'languages' %}"
method="get">
<div class="field has-addons">
<div class="control">
<input class="input"
type="search"
name="q"
placeholder="Search languages, scripts...">
</div>
<div class="control">
<button class="button is-info" type="submit" aria-label="Search">
<span class="icon"><i class="fas fa-search"></i></span>
</button>
</div>
</div>
</form>
</div>
<div class="navbar-end">
{% if user.is_authenticated %}
<div class="navbar-item has-dropdown is-hoverable">
Expand Down Expand Up @@ -59,7 +79,6 @@
{% endfor %}
</div>
{% endif %}

<main id="content" role="main">
{% block content %}
{% endblock content %}
Expand Down
Loading