Code login template.
- Add base bootstrap files - Enable musician app
This commit is contained in:
parent
041f6f79da
commit
da8b91d892
7
musician/static/musician/css/bootstrap.min.css
vendored
Normal file
7
musician/static/musician/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
musician/static/musician/css/bootstrap.min.css.map
Normal file
1
musician/static/musician/css/bootstrap.min.css.map
Normal file
File diff suppressed because one or more lines are too long
44
musician/static/musician/css/default.css
Normal file
44
musician/static/musician/css/default.css
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
a, a:hover, a:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
transition: all 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: rgba(0,0,0,.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar {
|
||||||
|
min-width: 250px;
|
||||||
|
max-width: 250px;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar.active {
|
||||||
|
margin-left: -250px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul.components {
|
||||||
|
padding: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#sidebar ul li a {
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 1.1em;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#sidebar ul li a:hover {
|
||||||
|
color: #777;
|
||||||
|
background: #efefef;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*#sidebar ul li.active > a, a[aria-expanded="true"] {
|
||||||
|
color: #fff;
|
||||||
|
background: #6d7fcc;
|
||||||
|
}*/
|
7
musician/static/musician/js/bootstrap.min.js
vendored
Normal file
7
musician/static/musician/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
musician/static/musician/js/bootstrap.min.js.map
Normal file
1
musician/static/musician/js/bootstrap.min.js.map
Normal file
File diff suppressed because one or more lines are too long
2
musician/static/musician/js/jquery-3.3.1.slim.min.js
vendored
Normal file
2
musician/static/musician/js/jquery-3.3.1.slim.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
musician/static/musician/js/popper.min.js
vendored
Normal file
5
musician/static/musician/js/popper.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
50
musician/templates/auth/login.html
Normal file
50
musician/templates/auth/login.html
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
{% extends "auth/login_base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block login_content %}
|
||||||
|
<div>
|
||||||
|
<form action="{% url 'musician:login' %}" role="form" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="next" value="{{ next }}" />
|
||||||
|
|
||||||
|
<div id="div_id_username" class="clearfix control-group {% if form.username.errors %}error{% endif %}">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="id_username">{{ form.username.label }}:</label>
|
||||||
|
<input type="text" name="username" maxlength="100" autocapitalize="off" autocorrect="off"
|
||||||
|
class="form-control textinput textInput" id="id_username" required autofocus
|
||||||
|
{% if form.username.value %}value="{{ form.username.value }}" {% endif %}>
|
||||||
|
{% if form.username.errors %}
|
||||||
|
<p class="text-error">
|
||||||
|
{{ form.username.errors|striptags }}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="div_id_password" class="clearfix control-group {% if form.password.errors %}error{% endif %}">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="id_password">{{ form.password.label }}:</label>
|
||||||
|
<input type="password" name="password" maxlength="100" autocapitalize="off" autocorrect="off"
|
||||||
|
class="form-control textinput textInput" id="id_password" required>
|
||||||
|
{% if form.password.errors %}
|
||||||
|
<p class="text-error">
|
||||||
|
{{ form.password.errors|striptags }}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if form.non_field_errors %}
|
||||||
|
{% for error in form.non_field_errors %}
|
||||||
|
<div class="well well-small text-error" style="border: none">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div><a href=#password_reset">{% trans "Have you forgot the password?" %}</a></div>
|
||||||
|
<div class="form-actions-no-box">
|
||||||
|
<input type="submit" name="submit" value="{% trans 'Log in' %}" class="btn btn-primary form-control"
|
||||||
|
id="submit-id-submit">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock login_content %}
|
22
musician/templates/auth/login_base.html
Normal file
22
musician/templates/auth/login_base.html
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{% extends "musician/base.html" %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<body class="container">
|
||||||
|
<div class="container-fluid" style="margin-top: 30px;">
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="well rounded" style="width: 320px; margin-left: auto; margin-right: auto; background: rgba(169, 169, 169, 0.25); padding: 1em;">
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div>
|
||||||
|
{% block branding %}<h3 style="margin: 0 0 20px;">Musician <span class="small">v{{ version }}</span></h3>{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div><!-- /row fluid -->
|
||||||
|
|
||||||
|
<div class="row-fluid">
|
||||||
|
{% block login_content %}
|
||||||
|
{% endblock login_content %}
|
||||||
|
</div><!-- /.row-fluid -->
|
||||||
|
</div><!--/.well-->
|
||||||
|
</div><!-- /.row-fluid -->
|
||||||
|
</div><!-- /.container-fluid -->
|
||||||
|
</body>
|
||||||
|
{% endblock %}
|
115
musician/templates/musician/base.html
Normal file
115
musician/templates/musician/base.html
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
{% load i18n static %}
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
{% block head %}
|
||||||
|
|
||||||
|
{% block meta %}
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="NONE,NOARCHIVE" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
<title>{% block title %}{% if name %}{{ name }} – {% endif %}ICO monitoring{% endblock %}</title>
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
{% block bootstrap_theme %}
|
||||||
|
<link rel="stylesheet" type="text/css" href="{% static "musician/css/bootstrap.min.css" %}" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="{% static "musician/css/default.css" %}" />
|
||||||
|
{% if code_style %}<style>
|
||||||
|
{{ code_style }}
|
||||||
|
</style>{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
</head>
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
|
||||||
|
<body class="{% block bodyclass %}{% endblock %}">
|
||||||
|
|
||||||
|
{% block navbar %}
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||||
|
<a class="navbar-brand" href="/">ICO monitoring</a>
|
||||||
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown"
|
||||||
|
aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item dropdown">
|
||||||
|
<a class="nav-link dropdown-toggle" href="javascript:void(0)" id="navbarDropdownMenuLink" role="button"
|
||||||
|
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
Projects
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
|
||||||
|
{% for project in projects %}
|
||||||
|
<a class="dropdown-item" href="{% url 'project_detail' project.slug %}">{{ project.name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<ul class="nav navbar-nav pull-right">
|
||||||
|
{% block userlinks %}
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<li class="nav-item dropdown">
|
||||||
|
<a href="{% url 'logout' %}" class="nav-link dropdown-toggle" data-toggle="dropdown">
|
||||||
|
{{ user.username }}
|
||||||
|
</a>
|
||||||
|
<b class="caret"></b>
|
||||||
|
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
|
||||||
|
<li class="nav-item dropdown">
|
||||||
|
<a class="dropdown-item" href="{% url 'logout' %}">{% trans 'Log out' %}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% else %}
|
||||||
|
<li><a href="{% url 'login' %}">{% trans 'Log in' %}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
<div class="wrapper">
|
||||||
|
<nav id="sidebar" class="border-right pt-4">
|
||||||
|
{% block sidebar %}
|
||||||
|
{% if actual_project %}
|
||||||
|
<div class="sidebar-header mb-3">
|
||||||
|
<span class="rounded-circle" style="padding: 8px 8px 8px 12px; margin-right: 10px; background-color: #fcaf3e">
|
||||||
|
{{actual_project.name|first|capfirst }}
|
||||||
|
</span>
|
||||||
|
{{ actual_project.name }} ({{ actual_project.location.name }})
|
||||||
|
</div>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
|
||||||
|
<ul class="list-unstyled components">
|
||||||
|
<li><a href="{% url 'project_detail' actual_project.slug %}">{% trans 'Project Details' %}</a></li>
|
||||||
|
<li><a href="{% url 'monitoringsite_list' actual_project.slug %}">{% trans 'Monitoring Sites' %}</a></li>
|
||||||
|
<li><a href="{% url 'project_users_list' actual_project.slug %}">{% trans 'Users' %}</a></li>
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<!-- TODO (slamora) create another menu? -->
|
||||||
|
{% endif %}
|
||||||
|
{% endblock sidebar %}
|
||||||
|
</nav><!-- ./sidebar -->
|
||||||
|
<div id="content" class="container-fluid pt-4">
|
||||||
|
{% block content %}
|
||||||
|
{% endblock content %}
|
||||||
|
</div><!-- ./content -->
|
||||||
|
</div><!-- ./wrapper -->
|
||||||
|
|
||||||
|
{% block script %}
|
||||||
|
<script src="{% static "musician/js/jquery-3.3.1.slim.min.js" %}"></script>
|
||||||
|
<script src="{% static "musician/js/popper.min.js" %}"></script>
|
||||||
|
<script src="{% static "musician/js/bootstrap.min.js" %}"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
</html>
|
|
@ -4,11 +4,16 @@ URL routes definition.
|
||||||
|
|
||||||
Describe the paths where the views are accesible.
|
Describe the paths where the views are accesible.
|
||||||
"""
|
"""
|
||||||
|
from django.contrib.auth import views as auth_views
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
app_name = 'musician'
|
app_name = 'musician'
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
# path('auth/login/', views.LoginView.as_view(), name='login'),
|
path('auth/login/', auth_views.LoginView.as_view(template_name='auth/login.html',
|
||||||
|
extra_context={'version': '0.1'}), name='login'),
|
||||||
# path('auth/logout/', views.LogoutView.as_view(), name='logout'),
|
# path('auth/logout/', views.LogoutView.as_view(), name='logout'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -50,6 +50,7 @@ INSTALLED_APPS = [
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'django_extensions',
|
'django_extensions',
|
||||||
|
'musician',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|
Loading…
Reference in a new issue