Commit 037a4316 authored by Maria Climent-Pommeret's avatar Maria Climent-Pommeret

Merge branch 'master' into 'master'

: réutilisation des informations personnelles d'un formulaire à l'autre

See merge request !7
parents 9d44fa87 b0cf6709
Pipeline #65 failed with stage
......@@ -101,6 +101,10 @@ Créez votre fichier de configuration:
Éditez le fichier `mysite/mysite/localsettings.py` et ajoutez une valeur pour `SECRET_KEY`, par exemple `SECRET_KEY = 'dev'`.
Appliquez les migrations
virtualenv/bin/python mysite/manage.py migrate
Lancez le serveur de développement:
virtualenv/bin/python mysite/manage.py runserver
......
......@@ -9,18 +9,67 @@ main {
padding: 2em 0;
}
.navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a {
color: #cecece;
}
.navbar-collapse {
padding-right: 0;
}
/* Remove the navbar's default margin-bottom and rounded borders */
.navbar {
margin-bottom: 0;
border-radius: 0;
}
.row-margin-custom { margin-top: 2.0em; }
.navbar-nav > li > span.icon {
color: #cecece;
padding: 5px;
font-size: 2em;
position: relative;
display: block;
cursor: pointer;
}
.navbar-nav > li > span.icon.active, .navbar-nav > li > span.icon:active {
color: #333;
background: #cecece;
}
.navbar-nav > li > span.icon:hover {
color: #fff;
}
#memory {
float: right;
}
.memoryControls {
margin: 0.5em 0;
}
.memoryControls .toggleable {
display: none;
}
.memoryControls .toggleable.on {
display: inline;
}
.row-margin-custom {
margin-top: 2.0em;
}
/* Add a gray background color and some padding to the footer */
.form-container {
max-width: 600px;
}
.form-actions {
text-align: center;
}
.message {
padding: 1em;
margin: 0.5em 0;
......
(function () {
function Memory() {
var isOn = JSON.parse(localStorage.getItem('memory'));
var dom = {
picto: document.getElementById('save'),
forms: []
};
return {
init: init,
prepare: prepare
};
function clear() {
if (confirm("Effacer toutes les données personnelles enregistrées ?")) {
localStorage.removeItem('profile');
}
}
function fill(form) {
if (isOn) {
var data = JSON.parse(localStorage.getItem('profile')) || {};
var inputs = getInputs(form);
for (var i = 0; i < inputs.length; i++) {
var key = inputs[i].id;
if (key != undefined && data[key] != undefined) {
inputs[i].value = data[key];
}
}
}
}
function getInputs(form) {
var inputs = Array.prototype.slice.call(form.getElementsByTagName('input'));
var selects = Array.prototype.slice.call(form.getElementsByTagName('select'));
return inputs.filter(function(input) { return input.type != "hidden"; })
.concat(selects);
}
function init() {
dom.picto.classList.toggle('active', isOn);
dom.picto.addEventListener('click', toggle);
document.getElementById('forget').addEventListener('click', clear);
}
function prepare(form) {
fill(form);
form.querySelector('button[type=submit]')
.addEventListener('click', save(form));
form.save.addEventListener('click', toggle);
form.forget.addEventListener('click', clear);
var spans = {
enable: form.save.querySelector('.enable'),
disable: form.save.querySelector('.disable')
};
spans[isOn ? 'disable' : 'enable'].classList.add('on');
dom.forms.push(spans);
}
function save(form) {
return function() {
if (isOn) {
var data = JSON.parse(localStorage.getItem('profile')) || {};
var inputs = getInputs(form);
for (var i = 0; i < inputs.length; i++) {
var key = inputs[i].id;
if (key != undefined && inputs[i].checkValidity()) {
data[key] = inputs[i].value;
}
}
localStorage.setItem('profile', JSON.stringify(data));
}
};
}
function toggle() {
isOn = !isOn;
dom.picto.classList.toggle('active', isOn);
for (var i = 0; i < dom.forms.length; i++) {
var spans = dom.forms[i];
spans[isOn ? 'disable' : 'enable'].classList.add('on');
spans[isOn ? 'enable' : 'disable'].classList.remove('on');
}
localStorage.setItem('memory', JSON.stringify(isOn));
}
}
window.addEventListener('load', function() {
var memory = Memory();
memory.init();
var forms = document.getElementsByClassName('memory');
for (var i = 0; i < forms.length; i++) {
memory.prepare(forms[i]);
}
});
})()
STRINGS = {
'enableMemory': 'Activer l\'enregistrement des données',
'disableMemory': 'Désactiver l\'enregistrement des données',
'toggleSaveFull': 'En activant cette option, les données entrées sur ce site seront partagées entre les formulaires. Cela ne marche que pour un même navigateur sur une même machine. N\'activez cette option que si vous êtes sur une machine en votre contrôle',
'clearData': 'Effacer toutes les données',
'clearDataFull': 'Toutes les données sauvegardées par ce site dans le cache de votre navigateur seront effacées et les formulaires seront à nouveau vides quand vous les afficherez'
}
......@@ -3,10 +3,11 @@
<head>
<meta charset="UTF-8">
<title>Trans Administratif</title>
<script src="{% static 'js/memory.js' %}"></script>
<!-- Latest compiled and minified CSS -->
<!-- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css"> -->
<link rel="stylesheet" href={% static 'css/bootstrap.min.css' %}>
<link rel="stylesheet" href={% static 'css/main.css' %}>
<link rel="stylesheet" href={% static 'css/custom.css' %}>
</head>
<body class="center">
......@@ -26,6 +27,10 @@
{% endfor %}
<li><a href={% url 'form' category='attestation' id='chgmtprenom' %}>Changement de prénom</a></li>
</ul>
<ul id="memory" class="nav navbar-nav">
<li><span title="{{ strings.enableMemory }}" class="icon" id="save">&#128062;&#xfe0e;</span></li>
<li><span title="{{ strings.clearData }}" class="icon" id="forget">&#127754;&#xfe0e;</span></li>
</ul>
</div>
</div>
</nav>
......
......@@ -14,7 +14,7 @@
</h1>
<form class="form-horizontal" method="post">{% csrf_token %}
<form class="memory form-horizontal" method="post">{% csrf_token %}
{% if form.errors and not form.non_field_errors() %}
<p class="message bg-danger">
Le formulaire contient des erreurs. Merci de les corriger.
......@@ -48,7 +48,14 @@
</fieldset>
{% endfor %}
<div class="form-actions">
<button type="submit" class="btn btn-primary" >Générer</button>
<div class="memoryControls">
<button type="button" class="btn btn-secondary" name="save" title="{{ strings.toggleSaveFull }}">
<span class="toggleable enable">{{ strings.enableMemory }}</span>
<span class="toggleable disable">{{ strings.disableMemory }}</span>
</button>
<button type="button" class="btn btn-secondary" name="forget" title="{{ strings.clearDataFull }}">{{ strings.clearData }}</button>
</div>
<button type="submit" class="btn btn-primary">Générer</button>
</div>
</form>
</div>
......
......@@ -11,9 +11,11 @@ from .forms import CPAMStandalone, BanqueStandalone, EcoleStandalone, Entreprise
from .forms import ChgmtPrenomForm
from . import forms
from . import lists
from . import strings
def context(obj):
obj['lists'] = lists.LISTS.items()
obj['strings'] = strings.STRINGS
return obj
def list_letters_type(request):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment