New login page

This commit is contained in:
Halfdan 2023-10-04 12:26:20 +02:00
parent 03d996cee9
commit 0af7ee3dd0
8 changed files with 205 additions and 149 deletions

View file

@ -7,7 +7,7 @@
{% block content %} {% block content %}
<div class="view-list"> <div class="content-view">
<h2>Membership settings</h2> <h2>Membership settings</h2>
{% if not current_membership %} {% if not current_membership %}
<p>{% trans "You do not have an active membership!" %}</p> <p>{% trans "You do not have an active membership!" %}</p>
@ -28,7 +28,7 @@
{% endif %} {% endif %}
</div> </div>
<div class="view-list"> <div class="content-view">
<h2>Profile settings</h2> <h2>Profile settings</h2>
<form> <form>
<div> <div>

View file

@ -1,4 +1,4 @@
/* Start reset */ /* Reset */
*, *::before, *::after { *, *::before, *::after {
box-sizing: border-box; box-sizing: border-box;
} }
@ -23,16 +23,17 @@ p, h1, h2, h3, h4, h5, h6 {
} }
/* Variables */ /* Variables */
:root { :root {
/* Colors */ /* Colors */
--light : #fff; --light : #fff;
--light-dust : #fcfcfc; --light-dust : #fcfcfc;
--dust : #f1f1f1; --dust : #f1f1f1;
--dark-dust : #bfbfbf; --dark-dust : #bfbfbf;
--twilight : #404040; --fade : #878787;
--twilight : #3c3c3c;
--dark : #2a2a2a; --dark : #2a2a2a;
--custard : #f0dcac; --custard : #f0dcac;
--water : #a8f3f4;
--splash : #4b3aba; --splash : #4b3aba;
/* Sizes */ /* Sizes */
@ -49,11 +50,26 @@ p, h1, h2, h3, h4, h5, h6 {
} }
} }
html, body {
height : 100%;
}
h1, h2, h3, h4, h5, h6 {
font-weight : 600;
color : var(--twilight);
}
a {
font-weight : 500;
}
body { body {
margin : 0; margin : 0;
padding : 0; padding : 0;
background : var(--custard); background : var(--custard);
font-family : sans-serif; font-family : Inter;
font-weight : 400;
line-height : 1.6;
color : var(--dark); color : var(--dark);
} }
@ -116,7 +132,8 @@ aside > div > dl > dt {
clear : left; clear : left;
margin : 0 var(--double-space) 0 0; margin : 0 var(--double-space) 0 0;
width : 180px; width : 180px;
font-weight : bold; font-weight : 600;
color : var(--twilight);
} }
nav { nav {
@ -146,6 +163,8 @@ nav > ol > li > a {
text-decoration : none; text-decoration : none;
color : var(--dark); color : var(--dark);
cursor : pointer; cursor : pointer;
font-weight : 500;
letter-spacing : 0.04em;
} }
nav > ol > li:first-child > a { nav > ol > li:first-child > a {
@ -172,7 +191,7 @@ article > div {
margin-bottom : var(--double-space); margin-bottom : var(--double-space);
} }
div.view-list > h2 { div.content-view > h2 {
margin : 0 0 var(--double-space) 0; margin : 0 0 var(--double-space) 0;
} }
@ -183,7 +202,8 @@ div.services {
flex-wrap: wrap; flex-wrap: wrap;
} }
div.services > div { div.services > div,
div.infobox {
background : var(--light); background : var(--light);
padding : var(--double-space); padding : var(--double-space);
border-radius : 6px; border-radius : 6px;
@ -205,21 +225,29 @@ div.services > div > div.description {
margin-bottom : var(--double-space); margin-bottom : var(--double-space);
} }
div.services > div > div.description > p {
margin-top : var(--half-space);
}
div.services > div > a, div.services > div > a,
a.button,
button { button {
display : block;
color : var(--light); color : var(--light);
background : var(--splash); background : var(--splash);
padding : 6px 12px; padding : var(--space) var(--double-space);
border-radius : 3px; border-radius : 3px;
opacity : 0.9; opacity : 0.9;
cursor : pointer; cursor : pointer;
text-align : center; text-align : center;
border : 0; border : 0;
font-weight : bold; font-weight : 600;
letter-spacing : 0.03em;
text-decoration : none;
} }
div.services > div > a:hover, div.services > div > a:hover,
a.button:hover,
button:hover { button:hover {
opacity : 1.0; opacity : 1.0;
} }
@ -233,7 +261,8 @@ form > div >label {
margin : 0 0 6px; margin : 0 0 6px;
} }
form > div > input[type="text"] { form > div > input[type="text"],
form > div > input[type="password"] {
border : 1px solid var(--twilight); border : 1px solid var(--twilight);
border-radius : 3px; border-radius : 3px;
padding : 6px 12px; padding : 6px 12px;
@ -241,6 +270,68 @@ form > div > input[type="text"] {
width : 100%; width : 100%;
} }
#login {
height : 100%;
display : flex;
align-items : center;
justify-content : center;
}
#loginbox {
border-radius : var(--space);
background : var(--dust);
border : 6px solid white;
width : 800px;
height : 500px;
display : flex;
flex-flow : row;
//justify-content : space-between;
}
#loginbox > div {
padding : var(--double-space);
flex : 1;
}
#loginbox label {
color : var(--twilight);
}
#loginbox > div.login {
display: flex;
flex-flow: column;
justify-content: space-between;
}
#loginbox > div.signup {
border-radius : 0 var(--space) var(--space) 0;
background : var(--water);
display: flex;
flex-flow: column;
align-items: center;
}
#loginbox > div:last-child > * {
flex : 1;
}
#loginbox div.new_here {
margin-top : var(--double-space);
}
#loginbox div.new_here h2 {
margin: var(--double-space) 0;
}
#loginbox button {
width : 100%;
}
#loginbox img {
padding : 0 var(--double-space);
}
footer { footer {
position : fixed; position : fixed;
bottom : 0; bottom : 0;
@ -254,5 +345,5 @@ footer {
} }
span.time_remaining { span.time_remaining {
opacity : 0.6; color : var(--fade);
} }

View file

@ -4,55 +4,61 @@
{% block non_login_content %} {% block non_login_content %}
{% if form.non_field_errors %} <div id="loginbox">
{% for error in form.non_field_errors %} <div class="login">
<div class="alert alert-danger" role="alert"> {% if form.non_field_errors %}
{{ error }} {% for error in form.non_field_errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
{% endif %}
<h2>Log in</h2>
<form method="post" action="">
{% csrf_token %}
<div>
<label for="id_username"
class="visually-hidden">
{% trans "E-mail" %}
</label>
<input type="text"
id="id_username"
name="login"
class="form-control mb-lg-2"
placeholder="{% trans "E-mail" %}"
required
autofocus>
</div>
<div>
<label for="id_password" class="visually-hidden">
{% trans "Password" %}
</label>
<input type="password"
id="id_password"
name="password"
class="form-control mb-lg-2"
placeholder="{% trans "Password" %}"
required>
</div>
<div>
<button type="submit">{% trans "Sign in" %}</button>
</div>
</form>
<div>
<a href="{% url "account_reset_password" %}"
class="w-100 btn btn-lg btn-outline-info">
{% trans "Forgot password?" %}
</a>
</div> </div>
{% endfor %} </div>
{% endif %} <div class="signup">
<img src="https://data.coop/static/img/logo_da.svg" alt="data.coop logo">
<form method="post" action=""> <div class="new_here">
{% csrf_token %} <h2> Are you new here? </h2>
<a class="button" href="{% url "account_signup" %}">{% trans "Become a member" %}</a>
<label for="id_username" </div>
class="visually-hidden"> </div>
{% trans "E-mail" %}
</label>
<input type="text"
id="id_username"
name="login"
class="form-control mb-lg-2"
placeholder="{% trans "E-mail" %}"
required
autofocus>
<label for="id_password" class="visually-hidden">
{% trans "Password" %}
</label>
<input type="password"
id="id_password"
name="password"
class="form-control mb-lg-2"
placeholder="{% trans "Password" %}"
required>
<button class="w-100 mb-lg-2 btn btn-lg btn-primary"
type="submit">{% trans "Sign in" %}</button>
</form>
<a href="{% url "account_reset_password" %}"
class="w-100 btn btn-lg btn-outline-info">
{% trans "Forgot password?" %}
</a>
<div class="hr-text">
<span>{% trans "Or"|upper %}</span>
</div> </div>
<a class="w-100 btn btn-lg btn-outline-success"
type="submit"
href="{% url "account_signup" %}">
{% trans "Become a member" %}
</a>
{% endblock %} {% endblock %}

View file

@ -5,17 +5,18 @@
{% block head_title %}{% trans "Sign Out" %}{% endblock %} {% block head_title %}{% trans "Sign Out" %}{% endblock %}
{% block content %} {% block content %}
<h1>{% trans "Sign Out" %}</h1> <div class="content-view">
<h2>{% trans "Sign Out" %}</h2>
<p>{% trans 'Are you sure you want to sign out?' %}</p> <p>{% trans 'Are you sure you want to sign out?' %}</p>
<form method="post" action="{% url 'account_logout' %}"> <form method="post" action="{% url 'account_logout' %}">
{% csrf_token %} {% csrf_token %}
{% if redirect_field_value %} {% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/> <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/>
{% endif %} {% endif %}
<button type="submit">{% trans 'Sign Out' %}</button> <button type="submit">{% trans 'Sign Out' %}</button>
</form> </form>
</div>
{% endblock %} {% endblock %}

View file

@ -7,76 +7,13 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content=""> <meta name="description" content="">
<title>Login {{ site.name }}</title> <title>Login {{ site.name }}</title>
<link rel="stylesheet" href="{% static "/fonts/inter.css" %}">
<link href="{% static "/css/bootstrap.min.css" %}" rel="stylesheet" <link rel="stylesheet" href="{% static "/css/style.css" %}">
crossorigin="anonymous">
<link href="{% static "/css/bootstrap-icons.css" %}" rel="stylesheet"
crossorigin="anonymous">
<style>
html,
body {
height: 100%;
}
body {
display: flex;
align-items: center;
padding-top: 40px;
padding-bottom: 40px;
background-color: #a8f3f4;
}
.form-signin {
width: 100%;
max-width: 330px;
padding: 15px;
margin: auto;
}
.form-signin .checkbox {
font-weight: 400;
}
.form-signin .form-control {
position: relative;
box-sizing: border-box;
height: auto;
padding: 10px;
font-size: 16px;
}
.form-signin .form-control:focus {
z-index: 2;
}
.hr-text {
width: 100%;
text-align: center;
border-bottom: 1px solid #000;
line-height: 0.1em;
margin: 20px 0 20px;
}
.hr-text span {
background: #a8f3f4;
padding: 0 10px;
}
</style>
</head> </head>
<body class="text-center"> <body>
<main id="login">
<main class="form-signin"> {% block non_login_content %}
<img class="mb-4" src="https://data.coop/static/img/logo_da.svg" alt="" {% endblock %}
width="260" height="160"> </main>
{% block non_login_content %}
{% endblock %}
</main>
</body> </body>
</html> </html>

View file

@ -8,12 +8,13 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content=""> <meta name="description" content="">
<title>{% block head_title %}{% endblock %} {{ site.name }}</title> <title>{% block head_title %}{% endblock %} {{ site.name }}</title>
<link rel="stylesheet" href="{% static "/fonts/inter.css" %}">
<link rel="stylesheet" href="{% static "/css/style.css" %}"> <link rel="stylesheet" href="{% static "/css/style.css" %}">
</head> </head>
<body> <body>
<header> <header>
<h1> data.coop membersystem </h1> <h1> data.coop membersystem </h1>
<a class="logout" href="/logout">Log out</a> <a class="logout" href="/accounts/logout">Log out</a>
</header </header
<main> <main>
<aside> <aside>
@ -36,7 +37,7 @@
<ol> <ol>
<li><a href="/">Dashboard</a></li> <li><a href="/">Dashboard</a></li>
<li><a href="/services" class="current">Services</a></li> <li><a href="/services" class="current">Services</a></li>
<li><a>Payment</a></li> <li><a href="#">Payment</a></li>
<li><a href="/membership">Settings</a></li> <li><a href="/membership">Settings</a></li>
</ol> </ol>
</nav> </nav>

View file

@ -3,3 +3,18 @@
{% block head_title %} {% block head_title %}
{% trans "Home" %} {% trans "Home" %}
{% endblock %} {% endblock %}
{% block content %}
<div class="content-view">
<h2>Welcome {{ user }}!</h2>
<p>
Boink?
</p>
<div class="infobox">
<p>
To get started we need you to verify your email!
</p>
<button>Verify email</button>
</div>
</div>
{% endblock %}

View file

@ -1,47 +1,52 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="view-list"> <div class="content-view">
<h2>Services you subscribe to</h2> <h2>Services you subscribe to</h2>
<div class="services"> <div class="services">
<div> <div>
<div class="description"> <div class="description">
<h3>Passit</h3> <h3>Passit</h3>
<p>Passit is a service that blabla</p> <p>Passit is a service that blabla</p>
<a href="#">Read more &hellip;</a>
</div> </div>
<a>Unsubscribe</a> <a>Unsubscribe</a>
</div> </div>
</div> </div>
</div> </div>
<div class="view-list"> <div class="content-view">
<h2>Available services</h2> <h2>Available services</h2>
<div class="services"> <div class="services">
<div> <div>
<div class="description"> <div class="description">
<h3>Forgejo</h3> <h3>Forgejo</h3>
<p>Forgejo is a service that blabla</p> <p>Forgejo is a service that blabla</p>
<a href="#">Read more &hellip;</a>
</div> </div>
<a>Subscribe</a> <a>Subscribe</a>
</div> </div>
<div> <div>
<div class="description"> <div class="description">
<h3>Mastodon</h3> <h3>Mastodon</h3>
<p>Mastodon is a service where you can write things to people around the world.</p> <p>Mastodon is a service where you can write things to people around the world.</p>
<a href="#">Read more &hellip;</a>
</div> </div>
<a>Subscribe</a> <a>Subscribe</a>
</div> </div>
<div> <div>
<div class="description"> <div class="description">
<h3>Matrix</h3> <h3>Matrix</h3>
<p>Matrix is a service that blabla</p> <p>Matrix is a service that blabla</p>
<a href="#">Read more &hellip;</a>
</div> </div>
<a>Subscribe</a> <a>Subscribe</a>
</div> </div>
<div> <div>
<div class="description"> <div class="description">
<h3>NextCloud</h3> <h3>NextCloud</h3>
<p>NextCloud is a service that blabla</p> <p>NextCloud is a service that blabla</p>
<a href="#">Read more &hellip;</a>
</div> </div>
<a>Subscribe</a> <a>Subscribe</a>
</div> </div>