2021-06-07 16:13:24 +00:00
|
|
|
{% load layout %}
|
2022-03-04 20:40:06 +00:00
|
|
|
{% load sass_tags %}
|
2021-06-07 16:13:24 +00:00
|
|
|
{% load i18n %}
|
|
|
|
{% load static %}
|
2022-02-19 23:29:47 +00:00
|
|
|
|
2020-01-25 23:25:19 +00:00
|
|
|
<!DOCTYPE html>
|
2021-04-22 18:41:58 +00:00
|
|
|
<html lang="{% get_lang %}">
|
2020-01-25 23:25:19 +00:00
|
|
|
<head>
|
2021-09-19 00:09:18 +00:00
|
|
|
<title>{% block title %}BookWyrm{% endblock %} - {{ site.name }}</title>
|
2020-01-25 23:25:19 +00:00
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
2022-03-04 20:40:06 +00:00
|
|
|
<link href="{% sass_src site_theme %}" rel="stylesheet" type="text/css" />
|
2020-01-25 23:25:19 +00:00
|
|
|
|
2021-09-10 23:47:59 +00:00
|
|
|
<link rel="search" type="application/opensearchdescription+xml" href="{% url 'opensearch' %}" title="{% blocktrans with site_name=site.name %}{{ site_name }} search{% endblocktrans %}" />
|
|
|
|
|
2021-06-07 16:13:24 +00:00
|
|
|
<link rel="shortcut icon" type="image/x-icon" href="{% if site.favicon %}{% get_media_prefix %}{{ site.favicon }}{% else %}{% static "images/favicon.ico" %}{% endif %}">
|
2022-12-10 16:57:05 +00:00
|
|
|
<link rel="apple-touch-icon" href="{% if site.logo %}{{ media_full_url }}{{ site.logo }}{% else %}{% static "images/logo.png" %}{% endif %}">
|
2023-09-07 12:41:31 +00:00
|
|
|
<link rel="manifest" href="/manifest.json" />
|
2020-01-25 23:25:19 +00:00
|
|
|
|
2023-01-11 21:17:41 +00:00
|
|
|
{% block opengraph %}
|
|
|
|
{% include 'snippets/opengraph.html' %}
|
2021-05-26 12:44:15 +00:00
|
|
|
{% endblock %}
|
2021-12-20 22:38:18 +00:00
|
|
|
|
|
|
|
{% block head_links %}{% endblock %}
|
2020-01-25 23:25:19 +00:00
|
|
|
</head>
|
|
|
|
<body>
|
2022-02-17 18:02:27 +00:00
|
|
|
{% block body %}
|
2021-04-15 19:51:14 +00:00
|
|
|
<nav class="navbar" aria-label="main navigation">
|
|
|
|
<div class="container">
|
2023-01-29 15:30:09 +00:00
|
|
|
{% with notification_count=request.user.unread_notification_count has_unread_mentions=request.user.has_unread_mentions %}
|
2023-10-27 11:22:58 +00:00
|
|
|
{% if not request.user.moved_to %}
|
2021-04-15 19:51:14 +00:00
|
|
|
<div class="navbar-brand">
|
|
|
|
<a class="navbar-item" href="/">
|
2023-03-01 13:14:42 +00:00
|
|
|
<img class="image logo" src="{% if site.logo_small %}{% get_media_prefix %}{{ site.logo_small }}{% else %}{% static "images/logo-small.png" %}{% endif %}" alt="{% blocktrans with site_name=site.name %}{{ site_name }} home page{% endblocktrans %}" loading="lazy" decoding="async">
|
2021-04-15 19:51:14 +00:00
|
|
|
</a>
|
2021-12-17 16:30:14 +00:00
|
|
|
<form class="navbar-item column is-align-items-start pt-5" action="{% url 'search' %}">
|
2021-04-15 19:51:14 +00:00
|
|
|
<div class="field has-addons">
|
|
|
|
<div class="control">
|
2023-10-27 11:00:04 +00:00
|
|
|
{% if request.user.is_authenticated %}
|
2024-02-03 20:55:46 +00:00
|
|
|
{% trans "Search for a book, author, user, or list" as search_placeholder %}
|
2021-09-20 19:28:08 +00:00
|
|
|
{% else %}
|
|
|
|
{% trans "Search for a book" as search_placeholder %}
|
|
|
|
{% endif %}
|
2023-07-30 20:33:08 +00:00
|
|
|
<input aria-label="{{ search_placeholder }}" id="tour-search" class="input" type="text" name="q" placeholder="{{ search_placeholder }}" value="{{ query }}" spellcheck="false">
|
2021-04-15 19:51:14 +00:00
|
|
|
</div>
|
|
|
|
<div class="control">
|
|
|
|
<button class="button" type="submit">
|
|
|
|
<span class="icon icon-search" title="{% trans 'Search' %}">
|
|
|
|
<span class="is-sr-only">{% trans "Search" %}</span>
|
|
|
|
</span>
|
|
|
|
</button>
|
|
|
|
</div>
|
2022-02-27 07:28:13 +00:00
|
|
|
<div class="control">
|
2022-02-15 10:38:57 +00:00
|
|
|
<button class="button" type="button" data-modal-open="barcode-scanner-modal">
|
2022-07-03 05:57:10 +00:00
|
|
|
<span class="icon icon-barcode" title="{% trans 'Scan Barcode' %}" id="tour-barcode">
|
2022-02-14 10:56:05 +00:00
|
|
|
<span class="is-sr-only">{% trans "Scan Barcode" %}</span>
|
|
|
|
</span>
|
|
|
|
</button>
|
2021-04-15 19:51:14 +00:00
|
|
|
</div>
|
2020-11-21 05:19:26 +00:00
|
|
|
</div>
|
2021-04-15 19:51:14 +00:00
|
|
|
</form>
|
2022-02-15 10:38:57 +00:00
|
|
|
{% include "search/barcode_modal.html" with id="barcode-scanner-modal" %}
|
2020-09-28 21:47:53 +00:00
|
|
|
|
2022-08-05 09:15:11 +00:00
|
|
|
<button
|
|
|
|
type="button"
|
|
|
|
tabindex="0"
|
|
|
|
class="navbar-burger pulldown-menu my-4 is-flex-touch is-align-items-center is-justify-content-center"
|
|
|
|
data-controls="main_nav"
|
|
|
|
aria-expanded="false"
|
|
|
|
aria-label="{% trans 'Main navigation menu' %}"
|
|
|
|
>
|
|
|
|
<i class="icon-dots-three-vertical" aria-hidden="true"></i>
|
|
|
|
|
|
|
|
<strong
|
2023-01-29 15:30:09 +00:00
|
|
|
class="{% if not notification_count %}is-hidden {% elif has_unread_mentions %}is-danger {% else %}is-primary {% endif %} tag is-small px-1"
|
2022-08-05 09:15:11 +00:00
|
|
|
data-poll-wrapper
|
|
|
|
>
|
|
|
|
<span class="is-sr-only">{% trans "Notifications" %}</span>
|
|
|
|
<strong data-poll="notifications" class="has-text-white">
|
|
|
|
{{ notification_count }}
|
|
|
|
</strong>
|
|
|
|
</strong>
|
2021-12-17 16:30:14 +00:00
|
|
|
</button>
|
2021-01-18 04:31:37 +00:00
|
|
|
</div>
|
2021-08-09 01:40:47 +00:00
|
|
|
<div class="navbar-menu" id="main_nav">
|
2022-07-03 05:57:10 +00:00
|
|
|
<div class="navbar-start" id="tour-navbar-start">
|
2021-04-15 19:51:14 +00:00
|
|
|
{% if request.user.is_authenticated %}
|
2021-12-17 16:30:14 +00:00
|
|
|
<a href="{% url 'lists' %}" class="navbar-item mt-3 py-0">
|
2021-04-15 19:51:14 +00:00
|
|
|
{% trans "Lists" %}
|
2020-09-30 18:56:02 +00:00
|
|
|
</a>
|
2021-12-17 16:30:14 +00:00
|
|
|
<a href="{% url 'discover' %}" class="navbar-item mt-3 py-0">
|
2021-08-08 15:07:20 +00:00
|
|
|
{% trans "Discover" %}
|
2021-05-10 22:55:42 +00:00
|
|
|
</a>
|
2022-07-08 17:51:22 +00:00
|
|
|
<a href="{% url 'user-shelves' request.user.localname %}" class="navbar-item mt-3 py-0">
|
|
|
|
{% trans "Your Books" %}
|
|
|
|
</a>
|
2021-04-15 19:51:14 +00:00
|
|
|
{% endif %}
|
2020-03-15 21:15:36 +00:00
|
|
|
</div>
|
2021-04-15 19:51:14 +00:00
|
|
|
|
|
|
|
<div class="navbar-end">
|
|
|
|
{% if request.user.is_authenticated %}
|
2022-04-08 20:11:41 +00:00
|
|
|
<div class="navbar-item mt-3 py-0">
|
|
|
|
{% include 'user_menu.html' %}
|
2021-04-15 19:51:14 +00:00
|
|
|
</div>
|
2021-12-17 16:30:14 +00:00
|
|
|
<div class="navbar-item mt-3 py-0">
|
2022-07-03 05:57:10 +00:00
|
|
|
<a href="{% url 'notifications' %}" class="tags has-addons" id="tour-notifications">
|
2021-04-15 19:51:14 +00:00
|
|
|
<span class="tag is-medium">
|
|
|
|
<span class="icon icon-bell" title="{% trans 'Notifications' %}">
|
|
|
|
<span class="is-sr-only">{% trans "Notifications" %}</span>
|
|
|
|
</span>
|
|
|
|
</span>
|
2021-04-30 14:49:34 +00:00
|
|
|
<span
|
2023-01-29 15:30:09 +00:00
|
|
|
class="{% if not notification_count %}is-hidden {% elif has_unread_mentions %}is-danger {% endif %}tag is-medium transition-x"
|
2021-04-30 14:49:34 +00:00
|
|
|
data-poll-wrapper
|
|
|
|
>
|
2021-05-23 01:34:34 +00:00
|
|
|
<span data-poll="notifications">{{ notification_count }}</span>
|
2021-04-15 19:51:14 +00:00
|
|
|
</span>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
{% else %}
|
2021-12-17 16:30:14 +00:00
|
|
|
<div class="navbar-item pt-5 pb-0">
|
2021-04-15 19:51:14 +00:00
|
|
|
{% if request.path != '/login' and request.path != '/login/' %}
|
|
|
|
<div class="columns">
|
|
|
|
<div class="column">
|
2021-08-02 23:24:36 +00:00
|
|
|
<form name="login" method="post" action="{% url 'login' %}?next={{ request.path }}">
|
2021-04-15 19:51:14 +00:00
|
|
|
{% csrf_token %}
|
|
|
|
<div class="columns is-variable is-1">
|
|
|
|
<div class="column">
|
|
|
|
<label class="is-sr-only" for="id_localname">{% trans "Username:" %}</label>
|
|
|
|
<input type="text" name="localname" maxlength="150" class="input" required="" id="id_localname" placeholder="{% trans 'username' %}">
|
|
|
|
</div>
|
|
|
|
<div class="column">
|
2021-10-16 17:20:06 +00:00
|
|
|
<label class="is-sr-only" for="id_password">{% trans "Password:" %}</label>
|
2023-10-13 14:36:19 +00:00
|
|
|
<div class="control has-icons-right">
|
|
|
|
<input type="password" name="password" maxlength="128" class="input" required="" id="id_password" placeholder="{% trans 'password' %}">
|
|
|
|
<span data-password-icon data-for="id_password" class="icon is-right is-clickable">
|
|
|
|
<button type="button" aria-controls="id_password" class="icon-eye-blocked" title="{% trans 'Show/Hide password' %}"></button>
|
|
|
|
</span>
|
|
|
|
</div>
|
2021-05-04 16:34:16 +00:00
|
|
|
<p class="help"><a href="{% url 'password-reset' %}">{% trans "Forgot your password?" %}</a></p>
|
2021-04-15 19:51:14 +00:00
|
|
|
</div>
|
|
|
|
<div class="column is-narrow">
|
|
|
|
<button class="button is-primary" type="submit">{% trans "Log in" %}</button>
|
|
|
|
</div>
|
2021-01-14 03:14:01 +00:00
|
|
|
</div>
|
2021-04-15 19:51:14 +00:00
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
{% if site.allow_registration and request.path != '' and request.path != '/' %}
|
|
|
|
<div class="column is-narrow">
|
|
|
|
<a href="/" class="button is-link">
|
|
|
|
{% trans "Join" %}
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2021-01-03 19:10:04 +00:00
|
|
|
</div>
|
2021-01-03 23:41:20 +00:00
|
|
|
{% endif %}
|
2020-09-28 21:47:53 +00:00
|
|
|
</div>
|
2021-01-03 23:41:20 +00:00
|
|
|
{% endif %}
|
2020-01-25 23:25:19 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
2023-10-27 11:22:58 +00:00
|
|
|
{% else %}
|
|
|
|
<div class="navbar-brand">
|
|
|
|
<a class="navbar-item" href="/">
|
|
|
|
<img class="image logo" src="{% if site.logo_small %}{% get_media_prefix %}{{ site.logo_small }}{% else %}{% static "images/logo-small.png" %}{% endif %}" alt="{% blocktrans with site_name=site.name %}{{ site_name }} home page{% endblocktrans %}" loading="lazy" decoding="async">
|
|
|
|
</a>
|
|
|
|
</div>
|
2023-10-27 11:00:04 +00:00
|
|
|
{% endif %}
|
2023-01-29 15:25:29 +00:00
|
|
|
{% endwith %}
|
2020-09-28 21:47:53 +00:00
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
|
2021-05-20 22:11:47 +00:00
|
|
|
{% if request.user.is_authenticated and active_announcements.exists %}
|
2022-10-20 14:45:53 +00:00
|
|
|
<div class="is-flex-grow-1">
|
2021-05-19 22:35:14 +00:00
|
|
|
<div class="container">
|
|
|
|
{% for announcement in active_announcements %}
|
2021-05-20 15:09:35 +00:00
|
|
|
{% include 'snippets/announcement.html' with announcement=announcement %}
|
2021-05-19 22:35:14 +00:00
|
|
|
{% endfor %}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2020-01-25 23:25:19 +00:00
|
|
|
|
2022-02-12 15:10:40 +00:00
|
|
|
<main class="section is-flex-grow-1">
|
2021-04-15 19:51:14 +00:00
|
|
|
<div class="container">
|
2023-10-27 11:00:04 +00:00
|
|
|
{% if request.user.moved_to %}
|
|
|
|
{% include "moved.html" %}
|
|
|
|
{% else %}
|
|
|
|
{# almost every view needs to know the user shelves #}
|
|
|
|
{% with request.user.shelf_set.all as user_shelves %}
|
|
|
|
{% block content %}
|
|
|
|
{% endblock %}
|
|
|
|
{% endwith %}
|
|
|
|
{% endif %}
|
2021-04-15 19:51:14 +00:00
|
|
|
</div>
|
2022-02-12 15:10:40 +00:00
|
|
|
</main>
|
2020-01-25 23:25:19 +00:00
|
|
|
|
2021-09-10 17:12:37 +00:00
|
|
|
<div role="region" aria-live="polite" id="live-messages">
|
|
|
|
<p id="status-success-message" class="live-message is-sr-only is-hidden">{% trans "Successfully posted status" %}</p>
|
|
|
|
<p id="status-error-message" class="live-message notification is-danger p-3 pr-5 pl-5 is-hidden">{% trans "Error posting status" %}</p>
|
|
|
|
</div>
|
|
|
|
|
2022-11-15 02:18:27 +00:00
|
|
|
{% include 'snippets/footer.html' %}
|
2022-02-17 21:01:36 +00:00
|
|
|
{% endblock %}
|
2020-12-11 20:07:37 +00:00
|
|
|
|
2023-02-01 20:59:10 +00:00
|
|
|
<script nonce="{{request.csp_nonce}}">
|
2020-03-16 01:12:45 +00:00
|
|
|
var csrf_token = '{{ csrf_token }}';
|
2020-03-15 21:15:36 +00:00
|
|
|
</script>
|
2021-09-09 14:39:38 +00:00
|
|
|
|
2021-09-10 17:57:16 +00:00
|
|
|
<script src="{% static "js/bookwyrm.js" %}?v={{ js_cache }}"></script>
|
|
|
|
<script src="{% static "js/localstorage.js" %}?v={{ js_cache }}"></script>
|
|
|
|
<script src="{% static "js/status_cache.js" %}?v={{ js_cache }}"></script>
|
2022-03-01 05:22:49 +00:00
|
|
|
<script src="{% static "js/vendor/quagga.min.js" %}?v={{ js_cache }}"></script>
|
2022-06-12 09:41:50 +00:00
|
|
|
<script src="{% static "js/vendor/shepherd.min.js" %}?v={{ js_cache }}"></script>
|
2022-06-18 03:27:00 +00:00
|
|
|
<script src="{% static "js/guided_tour.js" %}?v={{ js_cache }}"></script>
|
2021-09-09 14:39:38 +00:00
|
|
|
|
2021-03-19 17:47:32 +00:00
|
|
|
{% block scripts %}{% endblock %}
|
2021-09-09 14:39:38 +00:00
|
|
|
|
2020-01-25 23:25:19 +00:00
|
|
|
</body>
|
|
|
|
</html>
|