You've already forked snikket-web-portal
- Avoid fighting import cycles using a factory function - Collapse useless subpackages into simple modules - Move flask plugins / infrastructure in own module - Refactor how blueprints are used to localize information about URL routing to app factory
39 lines
1.3 KiB
HTML
39 lines
1.3 KiB
HTML
{% extends "base.html" %}
|
|
{% from "library.j2" import box %}
|
|
{% set body_id = "login" %}
|
|
{% block head_lead %}
|
|
<title>{{ _("Snikket Login") }}</title>
|
|
{% endblock %}
|
|
{% block style %}
|
|
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/app.css') }}">
|
|
{{ super() }}
|
|
{% endblock %}
|
|
{% block body %}
|
|
<main><div class="form layout-expanded">
|
|
<h1 class="form-title">{{ config["SNIKKET_DOMAIN"] }}</h1>
|
|
<p class="form-desc">{{ _("Enter your Snikket address and password to manage your account.") }}</p>
|
|
<form method="POST" action="{{ url_for('.login') }}" name="login">
|
|
{{ form.csrf_token }}
|
|
{% if form.errors %}
|
|
{% call box("alert", _("Login failed")) %}
|
|
<p>{{ form.errors.values() | flatten | join(", ")}}</p>
|
|
{% endcall %}
|
|
{% endif %}
|
|
<div class="f-ebox">
|
|
{{ form.address.label(class="a11y-only") }}
|
|
{{ form.address(placeholder=form.address.label.text) }}
|
|
</div>
|
|
<div class="f-ebox">
|
|
{{ form.password.label(class="a11y-only") }}
|
|
{{ form.password(placeholder=form.password.label.text) }}
|
|
</div>
|
|
<div class="f-bbox">
|
|
<button type="submit" class="primary">{{ _("Log in") }}</button>
|
|
</div>
|
|
</from>
|
|
</div></main>
|
|
<footer>
|
|
<ul><li>{% trans about_url=url_for('.about') %}A <a href="{{ about_url }}">Snikket</a> server{% endtrans %}</li></ul>
|
|
</footer>
|
|
{% endblock %}
|