From 8afd55351a0aa6124d795724bd04397b46e36219 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 8 Dec 2015 23:24:22 +0100 Subject: [PATCH 1/4] =?UTF-8?q?Cr=C3=A9ation=20et=20impl=C3=A9mentation=20?= =?UTF-8?q?de=20=20+=20=20ainsi=20que=20les?= =?UTF-8?q?=20applications?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Consultations.php | 55 +++++---- css/global.css | 45 ++++++- css/responsive.css | 8 ++ index.php | 2 +- js/adjust.js | 4 + js/consultations.js | 244 ++++++++++++++++++++++++++++++------- js/input-checker.js | 286 ++++++++++++++++++++++++++++++++++++++++++++ src/patient.svg | 0 src/save.svg | 121 +++++++++++++++++++ src/save@hover.svg | 121 +++++++++++++++++++ toBDD.php | 0 11 files changed, 817 insertions(+), 69 deletions(-) create mode 100755 css/responsive.css create mode 100755 js/input-checker.js mode change 100644 => 100755 src/patient.svg create mode 100755 src/save.svg create mode 100755 src/save@hover.svg mode change 100644 => 100755 toBDD.php diff --git a/Consultations.php b/Consultations.php index 71eb667..e3c0c66 100755 --- a/Consultations.php +++ b/Consultations.php @@ -16,8 +16,10 @@ if(!Authentification::checkUser(0)){ + + @@ -42,27 +44,38 @@ if(!Authentification::checkUser(0)){
-
- Choix du patient -
- - Selection du médecin pour la consultation. - Médecin traitant du patient. -

- -

coucou +
+
+ Choix du patient +
+ Selection du médecin pour la consultation.Médecin traitant du patient. +
+ +
Date: + + +
Heure: + + +
Durée: + + +
+ +
+
diff --git a/css/global.css b/css/global.css index 2dbd5f2..6f114f6 100755 --- a/css/global.css +++ b/css/global.css @@ -165,11 +165,11 @@ body{ #WRAPPER > #CONTAINER{ /* position */ display: block; - position: absolute; + position: relative; top: 0; left: 225px; width: calc( 100% - 225px ); - height: 100%; + min-height: 100%; } @@ -307,7 +307,7 @@ body{ /* */ -#CONTAINER > article span{ +#CONTAINER > article > form > span{ margin-left: 1em; } @@ -326,7 +326,7 @@ body{ /* */ #CONTAINER > article input{ /* position */ - display: block; + display: inline-block; position: relative; margin: 1em; padding: .7em; @@ -345,4 +345,39 @@ body{ /* @focus */ #CONTAINER > article input:focus{ border-color: #999; -} \ No newline at end of file +} + +/* .validated */ +#CONTAINER > article input.validated{ + border-color: #1cc952; +} + + +/* [type=submit] */ +#CONTAINER > article input[type=submit]{ + /* position */ + padding-left: 3em; + + /* border */ + border-color: #f09108; + + /* background */ + background: #f6f4f2 url(../src/save.svg) center left 1em no-repeat; + background-size: 1em auto; + + /* foreground */ + color: #777; + + /* extra */ + cursor: pointer; +} + +/* @hover */ +#CONTAINER > article input[type=submit]:hover{ + /* background */ + background-color: #f09108; + background-image: url(../src/save@hover.svg); + + /* foreground */ + color: #fff; +} diff --git a/css/responsive.css b/css/responsive.css new file mode 100755 index 0000000..8b771cc --- /dev/null +++ b/css/responsive.css @@ -0,0 +1,8 @@ +@media (max-width: 1024px){ + + #WRAPPER{ + left: calc( 50% - 50% - 1em ); + width: calc( 100% - 2em ); + } + +} \ No newline at end of file diff --git a/index.php b/index.php index 7feb6de..35bd17d 100755 --- a/index.php +++ b/index.php @@ -22,7 +22,7 @@ if(Authentification::checkUser(0)){ - Tests php + Connexion diff --git a/js/adjust.js b/js/adjust.js index ce85847..b3c7421 100755 --- a/js/adjust.js +++ b/js/adjust.js @@ -9,6 +9,10 @@ NodeList.prototype.indexOf = HTMLCollection.prototype.indexOf = function(searche }; + + + + function addClass(el, pClass){ if( el.className.length > 0 && el.className != pClass ) el.className = el.className + ' ' + pClass; else el.className = pClass; diff --git a/js/consultations.js b/js/consultations.js index ae43762..c914f5f 100755 --- a/js/consultations.js +++ b/js/consultations.js @@ -1,58 +1,218 @@ -/* [1] On récupère les 2 de création de RDV +// ===============================================================*/ +// var newRDVPatient = document.getElementById('newRDVPatient'); +// var newRDVMedecin = document.getElementById('newRDVMedecin'); -/* [2] Si on a récupéré les 2 , on créé l'évènement de selection dynamique +// ===============================================================*/ +// if( newRDVPatient != null && newRDVMedecin != null ){ - /* [1] On selectionne dynamiquement le médecin traitant associé - =======================================================================*/ - newRDVPatient.addEventListener('change', function(e){ - var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]"); +// /* [1] On selectionne dynamiquement le médecin traitant associé +// =======================================================================*/ +// newRDVPatient.addEventListener('change', function(e){ +// var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]"); - // on selectionne le medecin associé - newRDVMedecin.value = child.dataset.medecin; - addClass(newRDVMedecin, 'associated'); - }, false); +// // on selectionne le medecin associé +// newRDVMedecin.value = child.dataset.medecin; +// addClass(newRDVMedecin, 'associated'); +// }, false); - // [1] On met en valeur le médecin traitant associé (class=associated) - // ======================================================================= - newRDVMedecin.addEventListener('change', function(e){ - var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]"); - if( newRDVMedecin.value == child.dataset.medecin ) // si c'est le medecin traitant, on met en valeur l'association - addClass(newRDVMedecin, 'associated'); - else - remClass(newRDVMedecin, 'associated'); +// // [1] On met en valeur le médecin traitant associé (class=associated) +// // ======================================================================= +// newRDVMedecin.addEventListener('change', function(e){ +// var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]"); +// if( newRDVMedecin.value == child.dataset.medecin ) // si c'est le medecin traitant, on met en valeur l'association +// addClass(newRDVMedecin, 'associated'); +// else +// remClass(newRDVMedecin, 'associated'); - }, false); -} +// }, false); +// } -/* GESTION DU NUMÉRO DE SÉCU */ -var inSecu = document.getElementById('inSecu'); // input du numéro de sécu -var ftSecu = 'x xx xx xx xxx xxx xx'; // format du numéro de sécu +// /* GESTION DU NUMÉRO DE SÉCU */ +// var inSecu = document.getElementById('inSecu'); // input du numéro de sécu +// var ftSecu = 'x xx xx xx xxx xxx xx'; // format du numéro de sécu + +// inSecu.addEventListener('keyup', function(e){ + +// // pour chaque caractère +// for( var i = 0 ; i < inSecu.value.length ; i++ ){ + +// // [1] si le caractère n'est pas un nombre, on le supprime +// if( isNaN(inSecu.value[i]) ) +// inSecu.value = inSecu.value.slice(0, i).concat( inSecu.value.slice(i+1) ); + +// // [2] si c'est pas un espace mais qu'il en faut un, on met en forme +// if( inSecu.value[i] != ' ' && ftSecu[i] == ' ' ) +// inSecu.value = inSecu.value.slice(0, i).concat(' ').concat( inSecu.value.slice(i) ); + +// // [4] Le numéro saisi est trop long, on le coupe + enlève les espaces alentours +// inSecu.value = inSecu.value.slice(0, ftSecu.length).trim(); +// } + +// // si input complet +// if( inSecu.value.length == ftSecu.length ) +// addClass(inSecu, 'validated'); +// else +// remClass(inSecu, 'validated'); + +// }, false); + + + + +// /* GESTION DE LA DATE */ +// var inDate = document.getElementById('inDate'); // input de la date +// var ftDate = 'dd/dd/dddd'; // format de la date + +// inDate.addEventListener('keyup', function(e){ + +// // pour chaque caractère +// for( var i = 0 ; i < inDate.value.length ; i++ ){ + +// // [1] si le caractère n'est pas un nombre, on le supprime +// if( isNaN(inDate.value[i]) ) +// inDate.value = inDate.value.slice(0, i).concat( inDate.value.slice(i+1) ); + +// // [2] si c'est pas un espace mais qu'il en faut un, on met en forme +// if( inDate.value[i] != '/' && ftDate[i] == '/' ) +// inDate.value = inDate.value.slice(0, i).concat('/').concat( inDate.value.slice(i) ); + +// // [3] Le numéro saisi est trop long, on le coupe + enlève les espaces alentours +// inDate.value = inDate.value.slice(0, ftDate.length).trim(); +// } + +// // [4] vérification de cohérence +// var pJour = inDate.value.slice(0,2); +// var pMois = inDate.value.slice(3,5); +// var pAnnee = inDate.value.slice(6,11); + +// // test de la validité +// var pDate = new Date(pJour+'/'+pMois+'/'+pAnnee); +// // if( pDate.toString() != 'Invalid Date' ){ +// // var pDateObj = { +// // jour: (''+(pDate.getDate()-1)).length != 2 ? '0'+(pDate.getDate()-1) : ''+(pDate.getDate()-1), +// // mois: (''+(pDate.getMonth()+1)).length != 2 ? '0'+(pDate.getMonth()+1) : ''+(pDate.getMonth()+1), +// // annee: (''+(pDate.getFullYear())).length != 4 ? '0'+(pDate.getFullYear()) : ''+(pDate.getFullYear()), +// // } +// // inDate.value = pDateObj.jour +'/'+ pDateObj.mois +'/'+ pDateObj.annee; +// // } + +// }, false); + + + +// /* GESTION DE L'HEURE */ +// var inHeure = document.getElementById('inHeure'); // input de la date +// var ftHeure = 'dd:dd'; // format de la date + +// inHeure.addEventListener('keyup', function(e){ + +// // pour chaque caractère +// for( var i = 0 ; i < inHeure.value.length ; i++ ){ + +// // [1] si le caractère n'est pas un nombre, on le supprime +// if( isNaN(inHeure.value[i]) ) +// inHeure.value = inHeure.value.slice(0, i).concat( inHeure.value.slice(i+1) ); + +// // [2] si c'est pas un espace mais qu'il en faut un, on met en forme +// if( inHeure.value[i] != ':' && ftHeure[i] == ':' ) +// inHeure.value = inHeure.value.slice(0, i).concat(':').concat( inHeure.value.slice(i) ); + +// // [3] Le numéro saisi est trop long, on le coupe + enlève les espaces alentours +// inHeure.value = inHeure.value.slice(0, ftHeure.length).trim(); +// } + +// // [4] vérification de cohérence +// var pHeures = inHeure.value.slice(0,2); +// var pMinuts = inHeure.value.slice(3,5); + +// // on borne les valeurs +// if( pHeures.length == 2 ) pHeures = (pHeures>=24) ? '23' : pHeures; +// if( pMinuts.length == 2 ) pMinuts = (pMinuts>=60) ? '59' : pMinuts; + +// // on met au bon format dans tous les cas +// if( pHeures.length == 2 && pMinuts.length == 2 ){ +// addClass(inHeure, 'validated'); +// inHeure.value = pHeures+':'+pMinuts; +// }else +// remClass(inHeure, 'validated'); + +// }, false); + + + +/* VERIFICATION DES CHAMPS */ +var inCk = new inputChecker(); + var inDate = document.getElementById('inDate'); + var inHeure = document.getElementById('inHeure'); + var inSecu = document.getElementById('inSecu'); + + +// format de date simplifié +var dateFormat = new formatChecker( null, + 'Ji/Mi/2iii', + { 'J': '[0-3]', 'M': '[0-1]' } +); + +// format de temps simplifié +var timeFormat = new formatChecker( null, + 'Hi:Mi', + { 'H': '[0-2]', 'M': '[0-6]' } +); + +// format numéro SECU simplifié +var secuFormat = new formatChecker( null, + 'S ii ii ii iii iii ii', + { 'S': '[0-1]' } +); + + + + +var now = new Date(); +inCk.append( inDate, dateFormat, now.toLocaleFormat('%d/%m/%Y') ); +inCk.append( inHeure, timeFormat, now.toLocaleFormat('%H:%M') ); +inCk.append( inSecu, secuFormat, '1 23 45 67 890 123 45' ); + + +inDate.addEventListener('keyup', function(e){ + if( inCk.check(inDate) ) addClass(inDate, 'validated'); // on active la classe si correct + else{ // si incorrect + + remClass(inDate, 'validated'); // on désactive la classe + inCk.correct(inDate, false); // on corrige partiellement + if( inCk.check(inDate) ) addClass(inDate, 'validated'); // mise à jour de la classe après correction + } +}, false); + + +inHeure.addEventListener('keyup', function(e){ + if( inCk.check(inHeure) ) addClass(inHeure, 'validated'); // on active la classe + else{ // si incorrect + + remClass(inHeure, 'validated'); // on désactive la classe + inCk.correct(inHeure, false); // on corrige partiellement + if( inCk.check(inHeure) ) addClass(inHeure, 'validated'); // mise à jour de la classe après correction + } +}, false); inSecu.addEventListener('keyup', function(e){ + if( inCk.check(inSecu) ) addClass(inSecu, 'validated'); // on active la classe + else{ // si incorrect - // pour chaque caractère - for( var i = 0 ; i < inSecu.value.length ; i++ ){ - - // [1] si le caractère n'est pas un nombre, on le supprime - if( isNaN(inSecu.value[i]) ) - inSecu.value = inSecu.value.slice(0, i).concat( inSecu.value.slice(i+1) ); - - // [2] si c'est pas un espace mais qu'il en faut un, on met en forme - if( inSecu.value[i] != ' ' && ftSecu[i] == ' ' ) - inSecu.value = inSecu.value.slice(0, i).concat(' ').concat( inSecu.value.slice(i) ); - - // [4] Le numéro saisi est trop long, on le coupe + enlève les espaces alentours - inSecu.value = inSecu.value.slice(0, ftSecu.length).trim(); + remClass(inSecu, 'validated'); // on désactive la classe + inCk.correct(inSecu, false); // on corrige partiellement + if( inCk.check(inSecu) ) addClass(inSecu, 'validated'); // mise à jour de la classe après correction } +}, false); -}, false); \ No newline at end of file + +// inDate.value = 'x3 F3/a8'; +// inHeure.value = 'x3 F3/a8'; +// inSecu.value = 'x3 F3/a8'; \ No newline at end of file diff --git a/js/input-checker.js b/js/input-checker.js new file mode 100755 index 0000000..9e0293d --- /dev/null +++ b/js/input-checker.js @@ -0,0 +1,286 @@ +// __ _ _ _ +// / _| ___ _ __ _ __ ___ __ _| |_ ___| |__ ___ ___| | _____ _ __ +// | |_ / _ \| '__| '_ ` _ \ / _` | __|____ / __| '_ \ / _ \/ __| |/ / _ \ '__| +// | _| (_) | | | | | | | | (_| | ||_____| (__| | | | __/ (__| < __/ | +// |_| \___/|_| |_| |_| |_|\__,_|\__| \___|_| |_|\___|\___|_|\_\___|_| +// +function formatChecker(pValue, pPattern, pRules){ + this.value = pValue; + this.pattern = pPattern; + this.rules = (arguments.length>2) ? pRules : []; +}; + +formatChecker.prototype = { + value: this.value, // valeur à formater + pattern: this.pattern, // format global + rules: this.rules, // définition des règles du format global + regexp: null, // contiendra la RegExp de validation + // règles par défaut + default_rules: { + 'i': '[0-9]', // i = integer + 'a': '[a-z]', // a = lower case + 'A': '[A-Z]', // A = upper case + 'x': '[a-zA-Z]' // x = letter + }, + + // créé une RegExp en fonction du format global @pattern et des règles @rules + compile: function(){ + var RegExpExpr = '^'; // contiendra les chaines de la regex + var RegExpDecomposition = []; + + // on parcours les caractères du pattern + for( var i = 0 ; i < this.pattern.length ; i++ ){ + /* [1] Cas où la règle est définie par l'utilisateur + ====================================================*/ + if( this.rules.hasOwnProperty( this.pattern[i] ) ){ + RegExpExpr += this.rules[ this.pattern[i] ]; + RegExpDecomposition.push( this.rules[ this.pattern[i] ] ); + + /* [2] Cas où la règle est définie par défaut + ====================================================*/ + }else if( this.default_rules.hasOwnProperty( this.pattern[i] ) ){ + RegExpExpr += this.default_rules[ this.pattern[i] ]; + RegExpDecomposition.push( this.default_rules[ this.pattern[i] ] ); + + /* [3] Cas où on prends juste le caractère en compte + ====================================================*/ + }else{ + RegExpExpr += this.pattern[i]; + RegExpDecomposition.push( this.pattern[i] ); + } + } + + RegExpExpr += '$'; + + // on définit la RegExp associée + this.regexp = new RegExp( RegExpExpr ); + // on la complète avec la décomposition par caractère du pattern + this.regexp.patternDecomposition = RegExpDecomposition; + }, + + + // vérifie la validité en utilisant la RegExp, si elle n'est pas générée, on la génère + check: function(pPlotPlate){ + /* [1] On génère la RegExp si ce n'est pas déjà fait + ====================================================*/ + if( this.regexp == null ) this.compile(); + + + /* [2] Gestion de la plaque à trous + ====================================================*/ + if( arguments.length > 0 && pPlotPlate instanceof Array){ + + // on parcours les caractères du pattern + for( var i = 0 ; i < this.pattern.length ; i++ ){ + + var RegExpExpr = '^'; + + /* [1] Cas où la règle est définie par l'utilisateur + ====================================================*/ + if( this.rules.hasOwnProperty( this.pattern[i] ) ) + RegExpExpr += this.rules[ this.pattern[i] ]; + + /* [2] Cas où la règle est définie par défaut + ====================================================*/ + else if( this.default_rules.hasOwnProperty( this.pattern[i] ) ) + RegExpExpr += this.default_rules[ this.pattern[i] ]; + + /* [3] Cas où on prends juste le caractère en compte + ====================================================*/ + else + RegExpExpr += this.pattern[i]; + + RegExpExpr += '$'; + + pPlotPlate.push( this.value[i].match( new RegExp(RegExpExpr) ) != null ); + } + + } + + + // on retourne TRUE si c'est bon, FALSE sinon + return this.value.match( this.regexp ) != null; + } + +}; + +/***********/ +/* USECASE */ +/***********/ +/* [1] On créé une instance du formatChecker() +==================================================*/ +/*HIDDEN*///var instance = new formatChecker( +/*HIDDEN*/// 'te2t 1 2 1/23', // la chaîne à vérifier +/*HIDDEN*/// 'aava i i i/ii', // le schéma à respecter (cf. règles par défaut) +/*HIDDEN*/// {'v': '[0-2]'} // règles spécifiques. Ici, 'v' correspond à un chiffre compris entre 0 et 2 +/*HIDDEN*///); + +/* [2] On récupère le résultat de la vérification +==================================================*/ +// Note. On passe ici en paramètre un tableau qui va être rempli à TRUE pour les caractères +// correspondant au schéma, FALSE pour les erreurs +/*HIDDEN*///var respecteSchema = instance.check( plotPlate=[] ); +/*HIDDEN*///console.log( respecteSchema ); // affichera "true" + +/* [3] On accède à la plotPlate (afin de vérifier d'où vient l'erreur) +==================================================*/ +/*HIDDEN*///console.log( plotPlate ); // affichera "[true, true, true, ..]"" + + + + + + +// _ _ _ _ +// (_)_ __ _ __ _ _| |_ ___| |__ ___ ___| | _____ _ __ +// | | '_ \| '_ \| | | | __|____ / __| '_ \ / _ \/ __| |/ / _ \ '__| +// | | | | | |_) | |_| | ||_____| (__| | | | __/ (__| < __/ | +// |_|_| |_| .__/ \__,_|\__| \___|_| |_|\___|\___|_|\_\___|_| +// +function inputChecker(){}; + +inputChecker.prototype = { + input: [], // contiendra les éléments HTML + defval: [], // contiendra les valeurs par défaut ou NULL si pas défini + checker: [], // contiendra les classes + + + /* Ajout d'un champ au vérificateur + * + * @pInputElement l'élément à vérifier + * @pFormatChecker l'instance associée à la valeur voulue du champ + * @pDefaultValue [OPT] Valeur par défaut pour l'input + * + * + * @return ajouté retourne TRUE, si le champ a bien été ajouté + * retourne FALSE, si une erreur occure + */ + append: function(pInputElement, pFormatChecker, optDefaultValue){ + /* [1] Vérification des types + ====================================================*/ + if( !(pInputElement instanceof HTMLInputElement) ) return false; // si c'est pas un , retourne FALSE + if( !(pFormatChecker instanceof formatChecker) ) return false; // si c'est pas un , retourne FALSE + + + /* [2] Référencement des nouvelles données + ====================================================*/ + // insertion du + var index = this.input.push( pInputElement ); + + // insertion du , si pb d'insertion, retourne FALSE + if( index != this.checker.push(pFormatChecker) ) return false; + + // insertion de la valeur par défaut (si définie), si pb d'insetion, retourne FALSE + if( index != (this.defval.push((arguments.length>2)?optDefaultValue:null)) ) return false; + }, + + + + /* Vérifie le format d'un champ de rang spécifié + * + * @pInputElement L'élement qu'on veut vérifier + * + * + * @return verification retourne TRUE si la vérification s'avère correcte + * retourne FALSE si la vérification est incorrecte + */ + check: function(pInputElement){ + // si l'élément n'est pas référencé, retourne FALSE + var index = this.input.indexOf( pInputElement ); + if( index < 0 ) return false; + + /* [1] On remplace la valeur de vérification du par la valeur actuelle de l'élément + ====================================================*/ + this.checker[index].value = this.input[index].value; + + /* [2] On renvoie le résultat du checker + ====================================================*/ + return this.checker[index].check(); + }, + + + + /* Vérifie le format de tous les champs + * + * @return verifications retourne TRUE si les vérifications s'avèrent correctes + * retourne FALSE si les vérifications sont incorrectes + */ + checkAll: function(){ + var checkerCumul = true; + + for( var i = 0 ; i < this.input.length ; i++ ) + checkerCumul = checkerCumul && this.check(this.input[i]); + + return checkerCumul; + }, + + + /* Applique une correction en fonction du schéma + * + * @pInputElement l'élément concerné + * @pToEnd si on doit corriger jusqu'à la fin ou uniquement jusqu'à l'avancéé actuelle + * + * + * @return correctValue retourne la valeur corrigée + * retourne NULL si erreur + */ + correct: function(pInputElement, pToEnd){ + /* GESTION PARAMS */ + + // on retourne une erreur si l'élément n'est pas référencé + if( (index = this.input.indexOf(pInputElement)) < 0 ) return null; + + var pToEnd = (arguments.length>1) ? pToEnd : true; + + + + /* [1] On met à jour la valeur du + ====================================================*/ + this.checker[index].value = this.input[index].value; + + + this.checker[index].compile(); // on génére la RegExp + var RegExpByChar = this.checker[index].regexp.patternDecomposition; // on retire "/^" et "$/" de la RegExp + var tmpValue = this.input[index].value; // on copie la "value" pour la modifier + + + if( !this.check(pInputElement) ){ // si la chaîne n'est pas correcte + + /* [2] Cas 1 : vérification de la chaîne complète + ====================================================*/ + for( var i = 0 ; i < RegExpByChar.length ; i++ ){ // on parcours le pattern + + // si on dépasse de la valeur saisie et qu'on doit pas aller jusqu'à la fin, on quitte le FOR + if( !pToEnd && i >= this.input[index].value.length ) + break; + + // RegExp sur le caractère en question + var tmpRegExp = new RegExp( '^'+RegExpByChar[i]+'$' ); + + /* (1) Valeur inexistante (string.length < schéma.length) + -----------------------------------------------------------*/ + if( tmpValue.length == 0 || tmpValue[i] == null ){ + tmpValue = tmpValue.slice(0, i).concat( this.defval[index][i] ).concat( tmpValue.slice(i) ); + i++; // on incrémente car on décale la valeur + + + /* (2) Valeur ne correspond pas au schéma du caractère + -----------------------------------------------------------*/ + }else if( tmpValue[i].match(tmpRegExp) == null ) + tmpValue = tmpValue.slice(0, i).concat( this.defval[index][i] ).concat( tmpValue.slice(i) ); + // Remarque. Ici on ne décale pas (i++) car le décalage fait correspondre au schéma + } + + + // on tronque ce qui dépasse + tmpValue = tmpValue.slice(0, RegExpByChar.length); + + // on met à jour la valeur de l'élément input + this.input[index].value = tmpValue; + } + + + } + + +}; \ No newline at end of file diff --git a/src/patient.svg b/src/patient.svg old mode 100644 new mode 100755 diff --git a/src/save.svg b/src/save.svg new file mode 100755 index 0000000..684127c --- /dev/null +++ b/src/save.svg @@ -0,0 +1,121 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/save@hover.svg b/src/save@hover.svg new file mode 100755 index 0000000..116425b --- /dev/null +++ b/src/save@hover.svg @@ -0,0 +1,121 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/toBDD.php b/toBDD.php old mode 100644 new mode 100755 From 2ebf66e0b7404f85989c29b2f9d78b633c6d9f09 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 9 Dec 2015 11:48:42 +0100 Subject: [PATCH 2/4] =?UTF-8?q?Correction=20et=20optimisation=20avanc?= =?UTF-8?q?=C3=A9e=20du=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Consultations.php | 2 +- Dashboard.php | 3 + js/consultations.js | 181 ++++++++------------------------------------ js/input-checker.js | 19 +++-- 4 files changed, 48 insertions(+), 157 deletions(-) diff --git a/Consultations.php b/Consultations.php index e3c0c66..8076b93 100755 --- a/Consultations.php +++ b/Consultations.php @@ -63,7 +63,7 @@ if(!Authentification::checkUser(0)){ Selection du médecin pour la consultation.Médecin traitant du patient. -
Date: +
Date:  
Heure: diff --git a/Dashboard.php b/Dashboard.php index 72cae8d..ffbd46f 100755 --- a/Dashboard.php +++ b/Dashboard.php @@ -16,8 +16,10 @@ if(!Authentification::checkUser(0)){ + + @@ -47,5 +49,6 @@ if(!Authentification::checkUser(0)){ + diff --git a/js/consultations.js b/js/consultations.js index c914f5f..626402e 100755 --- a/js/consultations.js +++ b/js/consultations.js @@ -1,152 +1,39 @@ -// /* [1] On récupère les 2 de création de RDV +===============================================================*/ +var newRDVPatient = document.getElementById('newRDVPatient'); +var newRDVMedecin = document.getElementById('newRDVMedecin'); -// /* [2] Si on a récupéré les 2 , on créé l'évènement de selection dynamique +===============================================================*/ +if( newRDVPatient != null && newRDVMedecin != null ){ -// /* [1] On selectionne dynamiquement le médecin traitant associé -// =======================================================================*/ -// newRDVPatient.addEventListener('change', function(e){ -// var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]"); + /* [1] On selectionne dynamiquement le médecin traitant associé + =======================================================================*/ + newRDVPatient.addEventListener('change', function(e){ + var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]"); -// // on selectionne le medecin associé -// newRDVMedecin.value = child.dataset.medecin; -// addClass(newRDVMedecin, 'associated'); -// }, false); + // on selectionne le medecin associé + newRDVMedecin.value = child.dataset.medecin; + addClass(newRDVMedecin, 'associated'); + }, false); -// // [1] On met en valeur le médecin traitant associé (class=associated) -// // ======================================================================= -// newRDVMedecin.addEventListener('change', function(e){ -// var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]"); -// if( newRDVMedecin.value == child.dataset.medecin ) // si c'est le medecin traitant, on met en valeur l'association -// addClass(newRDVMedecin, 'associated'); -// else -// remClass(newRDVMedecin, 'associated'); + // [1] On met en valeur le médecin traitant associé (class=associated) + // ======================================================================= + newRDVMedecin.addEventListener('change', function(e){ + var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]"); + if( newRDVMedecin.value == child.dataset.medecin ) // si c'est le medecin traitant, on met en valeur l'association + addClass(newRDVMedecin, 'associated'); + else + remClass(newRDVMedecin, 'associated'); -// }, false); -// } + }, false); +} -// /* GESTION DU NUMÉRO DE SÉCU */ -// var inSecu = document.getElementById('inSecu'); // input du numéro de sécu -// var ftSecu = 'x xx xx xx xxx xxx xx'; // format du numéro de sécu - -// inSecu.addEventListener('keyup', function(e){ - -// // pour chaque caractère -// for( var i = 0 ; i < inSecu.value.length ; i++ ){ - -// // [1] si le caractère n'est pas un nombre, on le supprime -// if( isNaN(inSecu.value[i]) ) -// inSecu.value = inSecu.value.slice(0, i).concat( inSecu.value.slice(i+1) ); - -// // [2] si c'est pas un espace mais qu'il en faut un, on met en forme -// if( inSecu.value[i] != ' ' && ftSecu[i] == ' ' ) -// inSecu.value = inSecu.value.slice(0, i).concat(' ').concat( inSecu.value.slice(i) ); - -// // [4] Le numéro saisi est trop long, on le coupe + enlève les espaces alentours -// inSecu.value = inSecu.value.slice(0, ftSecu.length).trim(); -// } - -// // si input complet -// if( inSecu.value.length == ftSecu.length ) -// addClass(inSecu, 'validated'); -// else -// remClass(inSecu, 'validated'); - -// }, false); - - - - -// /* GESTION DE LA DATE */ -// var inDate = document.getElementById('inDate'); // input de la date -// var ftDate = 'dd/dd/dddd'; // format de la date - -// inDate.addEventListener('keyup', function(e){ - -// // pour chaque caractère -// for( var i = 0 ; i < inDate.value.length ; i++ ){ - -// // [1] si le caractère n'est pas un nombre, on le supprime -// if( isNaN(inDate.value[i]) ) -// inDate.value = inDate.value.slice(0, i).concat( inDate.value.slice(i+1) ); - -// // [2] si c'est pas un espace mais qu'il en faut un, on met en forme -// if( inDate.value[i] != '/' && ftDate[i] == '/' ) -// inDate.value = inDate.value.slice(0, i).concat('/').concat( inDate.value.slice(i) ); - -// // [3] Le numéro saisi est trop long, on le coupe + enlève les espaces alentours -// inDate.value = inDate.value.slice(0, ftDate.length).trim(); -// } - -// // [4] vérification de cohérence -// var pJour = inDate.value.slice(0,2); -// var pMois = inDate.value.slice(3,5); -// var pAnnee = inDate.value.slice(6,11); - -// // test de la validité -// var pDate = new Date(pJour+'/'+pMois+'/'+pAnnee); -// // if( pDate.toString() != 'Invalid Date' ){ -// // var pDateObj = { -// // jour: (''+(pDate.getDate()-1)).length != 2 ? '0'+(pDate.getDate()-1) : ''+(pDate.getDate()-1), -// // mois: (''+(pDate.getMonth()+1)).length != 2 ? '0'+(pDate.getMonth()+1) : ''+(pDate.getMonth()+1), -// // annee: (''+(pDate.getFullYear())).length != 4 ? '0'+(pDate.getFullYear()) : ''+(pDate.getFullYear()), -// // } -// // inDate.value = pDateObj.jour +'/'+ pDateObj.mois +'/'+ pDateObj.annee; -// // } - -// }, false); - - - -// /* GESTION DE L'HEURE */ -// var inHeure = document.getElementById('inHeure'); // input de la date -// var ftHeure = 'dd:dd'; // format de la date - -// inHeure.addEventListener('keyup', function(e){ - -// // pour chaque caractère -// for( var i = 0 ; i < inHeure.value.length ; i++ ){ - -// // [1] si le caractère n'est pas un nombre, on le supprime -// if( isNaN(inHeure.value[i]) ) -// inHeure.value = inHeure.value.slice(0, i).concat( inHeure.value.slice(i+1) ); - -// // [2] si c'est pas un espace mais qu'il en faut un, on met en forme -// if( inHeure.value[i] != ':' && ftHeure[i] == ':' ) -// inHeure.value = inHeure.value.slice(0, i).concat(':').concat( inHeure.value.slice(i) ); - -// // [3] Le numéro saisi est trop long, on le coupe + enlève les espaces alentours -// inHeure.value = inHeure.value.slice(0, ftHeure.length).trim(); -// } - -// // [4] vérification de cohérence -// var pHeures = inHeure.value.slice(0,2); -// var pMinuts = inHeure.value.slice(3,5); - -// // on borne les valeurs -// if( pHeures.length == 2 ) pHeures = (pHeures>=24) ? '23' : pHeures; -// if( pMinuts.length == 2 ) pMinuts = (pMinuts>=60) ? '59' : pMinuts; - -// // on met au bon format dans tous les cas -// if( pHeures.length == 2 && pMinuts.length == 2 ){ -// addClass(inHeure, 'validated'); -// inHeure.value = pHeures+':'+pMinuts; -// }else -// remClass(inHeure, 'validated'); - -// }, false); - - - /* VERIFICATION DES CHAMPS */ var inCk = new inputChecker(); var inDate = document.getElementById('inDate'); @@ -155,21 +42,18 @@ var inCk = new inputChecker(); // format de date simplifié -var dateFormat = new formatChecker( null, - 'Ji/Mi/2iii', - { 'J': '[0-3]', 'M': '[0-1]' } +var dateFormat = new formatChecker(null, + 'Ji/Mi/2iii', { 'J': '[0-3]', 'M': '[0-1]' } ); // format de temps simplifié -var timeFormat = new formatChecker( null, - 'Hi:Mi', - { 'H': '[0-2]', 'M': '[0-6]' } +var timeFormat = new formatChecker(null, + 'Hi:Mi', { 'H': '[0-2]', 'M': '[0-6]' } ); // format numéro SECU simplifié -var secuFormat = new formatChecker( null, - 'S ii ii ii iii iii ii', - { 'S': '[0-1]' } +var secuFormat = new formatChecker(null, + 'S ii ii ii iii iii ii', { 'S': '[0-1]' } ); @@ -184,7 +68,6 @@ inCk.append( inSecu, secuFormat, '1 23 45 67 890 123 45' ); inDate.addEventListener('keyup', function(e){ if( inCk.check(inDate) ) addClass(inDate, 'validated'); // on active la classe si correct else{ // si incorrect - remClass(inDate, 'validated'); // on désactive la classe inCk.correct(inDate, false); // on corrige partiellement if( inCk.check(inDate) ) addClass(inDate, 'validated'); // mise à jour de la classe après correction @@ -195,7 +78,6 @@ inDate.addEventListener('keyup', function(e){ inHeure.addEventListener('keyup', function(e){ if( inCk.check(inHeure) ) addClass(inHeure, 'validated'); // on active la classe else{ // si incorrect - remClass(inHeure, 'validated'); // on désactive la classe inCk.correct(inHeure, false); // on corrige partiellement if( inCk.check(inHeure) ) addClass(inHeure, 'validated'); // mise à jour de la classe après correction @@ -205,7 +87,6 @@ inHeure.addEventListener('keyup', function(e){ inSecu.addEventListener('keyup', function(e){ if( inCk.check(inSecu) ) addClass(inSecu, 'validated'); // on active la classe else{ // si incorrect - remClass(inSecu, 'validated'); // on désactive la classe inCk.correct(inSecu, false); // on corrige partiellement if( inCk.check(inSecu) ) addClass(inSecu, 'validated'); // mise à jour de la classe après correction diff --git a/js/input-checker.js b/js/input-checker.js index 9e0293d..f025c3e 100755 --- a/js/input-checker.js +++ b/js/input-checker.js @@ -246,6 +246,8 @@ inputChecker.prototype = { if( !this.check(pInputElement) ){ // si la chaîne n'est pas correcte + var lastChar = null; + /* [2] Cas 1 : vérification de la chaîne complète ====================================================*/ for( var i = 0 ; i < RegExpByChar.length ; i++ ){ // on parcours le pattern @@ -254,21 +256,26 @@ inputChecker.prototype = { if( !pToEnd && i >= this.input[index].value.length ) break; + lastChar = tmpValue[i]; + // RegExp sur le caractère en question var tmpRegExp = new RegExp( '^'+RegExpByChar[i]+'$' ); /* (1) Valeur inexistante (string.length < schéma.length) -----------------------------------------------------------*/ - if( tmpValue.length == 0 || tmpValue[i] == null ){ + if( tmpValue.length == 0 || tmpValue[i] == null ) tmpValue = tmpValue.slice(0, i).concat( this.defval[index][i] ).concat( tmpValue.slice(i) ); - i++; // on incrémente car on décale la valeur - /* (2) Valeur ne correspond pas au schéma du caractère -----------------------------------------------------------*/ - }else if( tmpValue[i].match(tmpRegExp) == null ) - tmpValue = tmpValue.slice(0, i).concat( this.defval[index][i] ).concat( tmpValue.slice(i) ); - // Remarque. Ici on ne décale pas (i++) car le décalage fait correspondre au schéma + else if( tmpValue[i].match(tmpRegExp) == null ){ + // si le caractère suivant match, on décale d'une position + if( tmpValue[i].match(new RegExp( '^'+RegExpByChar[i+1]+'$' )) != null ) + tmpValue = tmpValue.slice(0, i).concat( this.defval[index][i] ).concat( tmpValue.slice(i) ); + // sinon on remplace + else + tmpValue = tmpValue.slice(0, i).concat( this.defval[index][i] ).concat( tmpValue.slice(i+1) ); + } } From f831a1a5ed312005f53bffadf0c47ce84a878ef7 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 9 Dec 2015 12:28:04 +0100 Subject: [PATCH 3/4] =?UTF-8?q?Validation=20du=20num=C3=A9ro=20de=20SECU?= =?UTF-8?q?=20avec=20la=20cl=C3=A9=20de=20contr=C3=B4le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Consultations.php | 2 +- css/global.css | 16 ++++++++++++++++ js/consultations.js | 38 +++++++++++++++++++++++++++++++++----- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/Consultations.php b/Consultations.php index 8076b93..173eb5e 100755 --- a/Consultations.php +++ b/Consultations.php @@ -80,7 +80,7 @@ if(!Authentification::checkUser(0)){
- + Numéro invalide.
diff --git a/css/global.css b/css/global.css index 6f114f6..b51825c 100755 --- a/css/global.css +++ b/css/global.css @@ -352,6 +352,22 @@ body{ border-color: #1cc952; } +/* .invalid */ +#CONTAINER > article input.invalid{ + border-color: #ec111c; +} + +/* après */ +#CONTAINER > article input.invalid + span.invalid{ + color: #ec111c; +} + +/* après */ +#CONTAINER > article input:not(.invalid) + span.invalid{ + display: none; + color: #ec111c; +} + /* [type=submit] */ #CONTAINER > article input[type=submit]{ diff --git a/js/consultations.js b/js/consultations.js index 626402e..dca135d 100755 --- a/js/consultations.js +++ b/js/consultations.js @@ -53,7 +53,7 @@ var timeFormat = new formatChecker(null, // format numéro SECU simplifié var secuFormat = new formatChecker(null, - 'S ii ii ii iii iii ii', { 'S': '[0-1]' } + 'S ii Mi ii iii iii ii', { 'S': '[0-1]', 'M': '[0-1]' } ); @@ -84,16 +84,44 @@ inHeure.addEventListener('keyup', function(e){ } }, false); +function checkSecuControlKey(pNumSecu){ + var NIR = pNumSecu.slice(0,-2).replace(/ /g, ''); + var key = pNumSecu.slice(-2); + + return 97-(NIR%97) == key; +} + inSecu.addEventListener('keyup', function(e){ - if( inCk.check(inSecu) ) addClass(inSecu, 'validated'); // on active la classe - else{ // si incorrect + if( inCk.check(inSecu) ){ + + if( checkSecuControlKey(inSecu.value) ){ // si la clé est correcte + addClass(inSecu, 'validated'); // on dis que le champ est valide + remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide + }else{ + remClass(inSecu, 'validated'); // on dis que le champ n'est pas valide + addClass(inSecu, 'invalid'); // on dis qu'il est invalide + } + + }else{ // si incorrect + remClass(inSecu, 'validated'); // on désactive la classe + remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide + inCk.correct(inSecu, false); // on corrige partiellement - if( inCk.check(inSecu) ) addClass(inSecu, 'validated'); // mise à jour de la classe après correction + if( inCk.check(inSecu) ){ + + if( checkSecuControlKey(inSecu.value) ){ // si la clé est correcte + addClass(inSecu, 'validated'); // on dis que le champ est valide + remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide + }else{ + remClass(inSecu, 'validated'); // on dis que le champ n'est pas valide + addClass(inSecu, 'invalid'); // on dis qu'il est invalide + } + } } }, false); // inDate.value = 'x3 F3/a8'; // inHeure.value = 'x3 F3/a8'; -// inSecu.value = 'x3 F3/a8'; \ No newline at end of file +inSecu.value = '1 96 01 31 555 861'; \ No newline at end of file From b8ea4692c40dcb4709e93ce08534ddc8f306e160 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 9 Dec 2015 13:35:43 +0100 Subject: [PATCH 4/4] Checkbo --- Consultations.php | 23 +++++++-- css/global.css | 74 +++++++++++++++++++++++---- js/consultations.js | 15 ++++-- src/invalid.svg | 49 ++++++++++++++++++ src/save.svg | 10 ++-- src/save@hover.svg | 121 -------------------------------------------- src/validated.svg | 49 ++++++++++++++++++ 7 files changed, 197 insertions(+), 144 deletions(-) create mode 100644 src/invalid.svg delete mode 100755 src/save@hover.svg create mode 100755 src/validated.svg diff --git a/Consultations.php b/Consultations.php index 173eb5e..5454d7f 100755 --- a/Consultations.php +++ b/Consultations.php @@ -43,16 +43,19 @@ if(!Authentification::checkUser(0)){ +
Choix du patient +
Selection du médecin pour la consultation.Médecin traitant du patient. + Médecin traitant du patient.

Date:   @@ -78,9 +81,21 @@ if(!Authentification::checkUser(0)){
+ + + +
- Numéro invalide. + + + + + + + Clé de contrôle invalide.
diff --git a/css/global.css b/css/global.css index b51825c..140c925 100755 --- a/css/global.css +++ b/css/global.css @@ -223,9 +223,10 @@ body{ /* position */ display: block; position: relative; - width: calc( 100% - 2*2em - 2*1px ); + width: calc( 100% - 2*2em - 2*1px - 2*1em ); margin: 2em; margin-bottom: 4em; /* pour séparer les */ + padding: 1em; /* border */ border: 1px solid #f09108; @@ -237,8 +238,8 @@ body{ display: block; position: relative; margin-top: -2.5em; - margin-left: -1px; - width: calc( 100% - .5em - 2em ); + margin-left: calc( -1px - 1em ); + width: calc( 100% - .5em ); padding: .5em; padding-left: 2em; @@ -311,12 +312,6 @@ body{ margin-left: 1em; } - -/* SPECIFIC */ -#CONTAINER > article select.associated ~ span:not(.associated){ - display: none; /* on cache le texte défault quand c'est le médecin associé */ -} - #CONTAINER > article select:not(.associated) ~ span.associated{ display: none; /* on cache le texte associé quand c'est pas le médecin associé */ } @@ -333,6 +328,10 @@ body{ /* border */ border: 1px solid #e5e5e5; + + /* background */ + background: center right 1.5em no-repeat; + background-size: 0em auto; /* animation */ transition: all .2s ease-in-out; @@ -350,11 +349,17 @@ body{ /* .validated */ #CONTAINER > article input.validated{ border-color: #1cc952; + background-image: url(../src/validated.svg); + background-position: center right 1em; + background-size: 1em auto; } /* .invalid */ #CONTAINER > article input.invalid{ border-color: #ec111c; + background-image: url(../src/invalid.svg); + background-position: center right 1em; + background-size: 1em auto; } /* après */ @@ -392,8 +397,57 @@ body{ #CONTAINER > article input[type=submit]:hover{ /* background */ background-color: #f09108; - background-image: url(../src/save@hover.svg); /* foreground */ color: #fff; } + + + +/* CHECKBOX HACK */ +input[type=checkbox]{ display: none !important; } + +/* label */ +input[type=checkbox] + label:before{ + content: ''; + /* position */ + display: inline-block; + position: relative; + margin-right: .5em; + margin-bottom: -.3em; + width: 1.2em; + height: 1.2em; + + /* border */ + border-radius: 3px; + border: 1px solid #f18624; + + /* background */ + background: center center no-repeat; + background-size: 80% auto; + + /* animation */ + transition: all .2s ease-in-out; + -moz-transition: all .2s ease-in-out; + -webkit-transition: all .2s ease-in-out; + -ms-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; +} + +/* @active + label */ +input[type=checkbox]:active + label:before{ + transform: scale(.8); + -moz-transform: scale(.8); + -webkit-transform: scale(.8); + -ms-transform: scale(.8); + -o-transform: scale(.8); +} + + +/* @checked + label */ +input[type=checkbox]:checked + label:before{ + /* background */ + background-image: + background-size: 80% auto; +} + diff --git a/js/consultations.js b/js/consultations.js index dca135d..7e75d76 100755 --- a/js/consultations.js +++ b/js/consultations.js @@ -50,7 +50,6 @@ var dateFormat = new formatChecker(null, var timeFormat = new formatChecker(null, 'Hi:Mi', { 'H': '[0-2]', 'M': '[0-6]' } ); - // format numéro SECU simplifié var secuFormat = new formatChecker(null, 'S ii Mi ii iii iii ii', { 'S': '[0-1]', 'M': '[0-1]' } @@ -60,9 +59,9 @@ var secuFormat = new formatChecker(null, var now = new Date(); -inCk.append( inDate, dateFormat, now.toLocaleFormat('%d/%m/%Y') ); -inCk.append( inHeure, timeFormat, now.toLocaleFormat('%H:%M') ); -inCk.append( inSecu, secuFormat, '1 23 45 67 890 123 45' ); +inCk.append( inDate, dateFormat, now.toLocaleFormat('%d/%m/%Y') ); +inCk.append( inHeure, timeFormat, now.toLocaleFormat('%H:%M') ); +inCk.append( inSecu, secuFormat, inSecu.placeholder ); inDate.addEventListener('keyup', function(e){ @@ -84,6 +83,14 @@ inHeure.addEventListener('keyup', function(e){ } }, false); +inDuree.addEventListener('keyup', function(e){ + if( !isNaN(parseInt(inDuree.value)) ){ + inDuree.value = parseInt( inDuree.value ); // on caste en + addClass(inDuree, 'validated'); // on active la classe si correct + }else // si incorrect + remClass(inDuree, 'validated'); // on désactive la classe +}, false); + function checkSecuControlKey(pNumSecu){ var NIR = pNumSecu.slice(0,-2).replace(/ /g, ''); var key = pNumSecu.slice(-2); diff --git a/src/invalid.svg b/src/invalid.svg new file mode 100644 index 0000000..e305f94 --- /dev/null +++ b/src/invalid.svg @@ -0,0 +1,49 @@ + +image/svg+xml \ No newline at end of file diff --git a/src/save.svg b/src/save.svg index 684127c..116425b 100755 --- a/src/save.svg +++ b/src/save.svg @@ -12,7 +12,7 @@ width="18" id="svg2" inkscape:version="0.48.4 r9939" - sodipodi:docname="save.svg"> + sodipodi:docname="save@hover.svg"> @@ -45,7 +45,7 @@ fit-margin-right="0" fit-margin-bottom="0" inkscape:zoom="18.986111" - inkscape:cx="0.3544805" + inkscape:cx="0.2919805" inkscape:cy="13.75954" inkscape:window-x="0" inkscape:window-y="24" @@ -58,19 +58,19 @@ d="m 3,1037.4 v 2 2 6 c 0,1.1 0.8954,2 2,2 h 14 c 1.105,0 2,-0.9 2,-2 v -6 -2 -2 H 3 z" id="path6" inkscape:connector-curvature="0" - style="fill:#cccccc" /> + style="fill:#2980b9" /> + style="fill:#3498db" /> + style="fill:#2980b9" /> - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/validated.svg b/src/validated.svg new file mode 100755 index 0000000..67c7b48 --- /dev/null +++ b/src/validated.svg @@ -0,0 +1,49 @@ + +image/svg+xml \ No newline at end of file