Optimisation de input/phone `v1` et `v2`, ne fait plus crasher mais très lent au chargement

This commit is contained in:
xdrm-brackets 2016-04-28 11:42:08 +02:00
parent 5f8968d580
commit 76897f88d8
15 changed files with 213 additions and 209 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -505,12 +505,12 @@
/* (14) Gestion de l'affichage des MINI fiches et des FICHES relations */
& article > article{
display: none;
&.active{
display: block;
}
}
// & article > article{
// display: none;
//
// &.active{
// display: block;
// }
// }
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,21 +1,22 @@
function inputPhoneFiche(a,c){this.container=a;this.nav_container=c}
function inputPhoneFiche(a,b){this.container=a;this.nav_container=b}
inputPhoneFiche.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{firstname:"",lastname:"",username:"",sexe:[{status:!0},{status:!1}],age:"",job:".",famsit:[{status:!0},{status:!1},{status:!1}],studies:".",reltype:[{status:!0},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1}],reltypeSpecial:"",city:"",loc:[{status:!0},{status:!1},{status:!1},{status:!1}],duration:["",""],context:[{status:!0},{status:!1},
{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1}],contextSpecial:["","",""],freq:[[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}]],connect:[[{status:!1},{status:!0}],[{status:!1},{status:!0}],[{status:!1},
{status:!0}],[{status:!1},{status:!0}],[{status:!1},{status:!0}],[{status:!1},{status:!0}]],connectSpecial:["",""]}};
inputPhoneFiche.prototype.fieldsToStorage=function(){console.log("FICHE: FIELDS TO STORAGE");for(var a=$$("article.relation-panel .fiche-relation"),c=0;c<a.length;c++){var b=(new FormDeflater(a[c],["input","select"],["data-name"])).deflate();console.log(b);var d=lsi.get("fiches","form"+b.uid.value);!1===d&&(d.username="inconnu",d.firstname="inconnu",d.lastname="inconnu");b={uid:b.uid.value,firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:b.sexe,age:b.age.value,job:b.job.value,famsit:b.famsit,
studies:b.studies.value,reltype:b.reltype,reltypeSpecial:b.reltypeSpecial.value,city:b.city.value,loc:b.loc,duration:[b.duration[0].value,b.duration[1].value],context:b.context,contextSpecial:[b.contextSpecial[0].value,b.contextSpecial[1].value,b.contextSpecial[2].value],freq:[b.freq0,b.freq1,b.freq2,b.freq3,b.freq4],connect:[b.connect0,b.connect1,b.connect2,b.connect3,b.connect4,b.connect5],connectSpecial:[b.connectSpecial[0].value,b.connectSpecial[1].value]};lsi.set("fiches","form"+b.uid,b)}};
inputPhoneFiche.prototype.fieldsToStorage=function(){console.log("FICHE: FIELDS TO STORAGE");for(var a=$$("article.relation-panel .fiche-relation"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input","select"],["data-name"])).deflate();console.log(c);var d=lsi.get("fiches","form"+c.uid.value);!1===d&&(d.username="inconnu",d.firstname="inconnu",d.lastname="inconnu");c={uid:c.uid.value,firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:c.sexe,age:c.age.value,job:c.job.value,famsit:c.famsit,
studies:c.studies.value,reltype:c.reltype,reltypeSpecial:c.reltypeSpecial.value,city:c.city.value,loc:c.loc,duration:[c.duration[0].value,c.duration[1].value],context:c.context,contextSpecial:[c.contextSpecial[0].value,c.contextSpecial[1].value,c.contextSpecial[2].value],freq:[c.freq0,c.freq1,c.freq2,c.freq3,c.freq4],connect:[c.connect0,c.connect1,c.connect2,c.connect3,c.connect4,c.connect5],connectSpecial:[c.connectSpecial[0].value,c.connectSpecial[1].value]};c.valid=this.check(c);lsi.set("fiches",
"form"+c.uid,c)}};
inputPhoneFiche.prototype.add=function(a){console.log("FICHE: ADD");if(null==a.uid)return!1;a.firstname=null!=a.firstname?a.firstname:this.defaultData.firstname;a.lastname=null!=a.lastname?a.lastname:this.defaultData.lastname;a.username=null!=a.username?a.username:this.defaultData.username;a.age=null!=a.age?a.age:this.defaultData.age;a.city=null!=a.city?a.city:this.defaultData.city;a.duration[0]=null!=a.duration[0]?a.duration[0]:this.defaultData.duration[0];a.duration[1]=null!=a.duration[1]?a.duration[1]:
this.defaultData.duration[1];a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial;a.contextSpecial[0]=null!=a.contextSpecial[0]?a.contextSpecial[0]:this.defaultData.contextSpecial[0];a.contextSpecial[1]=null!=a.contextSpecial[1]?a.contextSpecial[1]:this.defaultData.contextSpecial[1];a.contextSpecial[2]=null!=a.contextSpecial[2]?a.contextSpecial[2]:this.defaultData.contextSpecial[2];a.connectSpecial[0]=null!=a.connectSpecial[0]?a.connectSpecial[0]:this.defaultData.connectSpecial[0];
a.connectSpecial[1]=null!=a.connectSpecial[1]?a.connectSpecial[1]:this.defaultData.connectSpecial[1];a.job=null!=a.job?a.job:this.defaultData.job;a.studies=null!=a.studies?a.studies:this.defaultData.studies;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.famsit=null!=a.famsit?a.famsit:this.defaultData.famsit;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.context=null!=a.context?a.context:this.defaultData.context;a.freq=null!=a.freq?a.freq:
this.defaultData.freq;a.connect=null!=a.connect?a.connect:this.defaultData.connect;this.container.innerHTML+=ficheBuilder.build({firstname:a.firstname,lastname:a.lastname,username:a.username,uid:a.uid,age:a.age,city:a.city,duration0:a.duration[0],duration1:a.duration[1],reltypespecial:a.reltypeSpecial,contextspecial0:a.contextSpecial[0],contextspecial1:a.contextSpecial[1],contextspecial2:a.contextSpecial[2],connectspecial0:a.connectSpecial[0],connectspecial1:a.connectSpecial[1]});var c=$('article.fiche-relation input[data-name="uid"][value="'+
a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=c&&c.setAttribute("selected","selected");c=$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=c&&c.setAttribute("selected","selected");for(var b=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),c=0;c<b.length&&c<a.sexe.length;c++)a.sexe[c].status?b[c].setAttribute("checked",
"checked"):b[c].removeAttribute("checked");b=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');for(c=0;c<b.length&&c<a.famsit.length;c++)a.famsit[c].status?b[c].setAttribute("checked","checked"):b[c].removeAttribute("checked");b=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');for(c=0;c<b.length&&c<a.reltype.length;c++)a.reltype[c].status?b[c].setAttribute("checked",
"checked"):b[c].removeAttribute("checked");b=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');for(c=0;c<b.length&&c<a.loc.length;c++)a.loc[c].status?b[c].setAttribute("checked","checked"):b[c].removeAttribute("checked");b=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="context"]');for(c=0;c<b.length&&c<a.context.length;c++)a.context[c].status?b[c].setAttribute("checked","checked"):
b[c].removeAttribute("checked");for(b=0;b<a.freq.length;b++)for(var d=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="freq'+b+'"]'),c=0;c<d.length&&c<a.freq[b].length;c++)a.freq[b][c].status?d[c].setAttribute("checked","checked"):d[c].removeAttribute("checked");for(b=0;b<a.connect.length;b++)for(d=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="connect'+b+'"]'),c=0;c<d.length&&c<a.connect[b].length;c++)a.connect[b][c].status?
d[c].setAttribute("checked","checked"):d[c].removeAttribute("checked")};inputPhoneFiche.prototype.storageToFields=function(){console.log("FICHE: STORAGE TO FIELDS");var a=lsi.keys("fiches");this.container.innerHTML="";for(var c=[],b=0;b<a.length;b++){var d=lsi.get("fiches",a[b]);this.add(d);c.push(d.uid)}this.updateNavBar(c)};
inputPhoneFiche.prototype.sync=function(){console.log("FICHE: SYNC");for(var a=lsi.keys("contacts"),c=0;c<a.length&&9>c;c++){var b=lsi.get("contacts",a[c]),d=lsi.get("fiches",a[c]);null==d&&(d=this.defaultData);d.uid=b.uid;d.firstname=b.firstname;d.lastname=b.lastname;d.username=b.username;lsi.set("fiches",a[c],d)}};
inputPhoneFiche.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML))return!1;for(var c=$$("#nav-fiche > span.active"),b=0;b<c.length;b++)c[b].remClass("active");a.addClass("active");this.selected=parseInt(a.innerHTML)-1;a=$$("article.relation-panel .fiche-relation.active");for(b=0;b<a.length;b++)a[b].remClass("active");this.container.children[this.selected].addClass("active")};
inputPhoneFiche.prototype.updateNavBar=function(a){this.nav_container.innerHTML="";for(var c=0;c<a.length;c++){var b=parseInt(a[c])+1;this.nav_container.innerHTML+="<span>"+b+"</span>"}this.check();this.nav(this.nav_container.children[this.selected])};
inputPhoneFiche.prototype.check=function(){for(var a=lsi.keys("fiches"),c=0;c<a.length;c++){for(var b=lsi.get("fiches",a[c]),d=!0,d=(d=(d=(d=(d=(d=(d=(d=(d=(d=(d=(d=d&&!isNaN(parseInt(b.age)))&&2<=b.city.length)&&(!isNaN(parseInt(b.duration[0]))||""==b.duration[0].length))&&(!isNaN(parseInt(b.duration[1]))||""==b.duration[1].length))&&0<b.duration[0].length+b.duration[1].length)&&"."!=b.job)&&"."!=b.studies)&&checkRadioValue(b.sexe))&&checkRadioValue(b.famsit))&&checkRadioValue(b.reltype))&&checkRadioValue(b.loc))&&
checkRadioValue(b.context),c=0;c<b.freq.length;c++)d=d&&checkRadioValue(b.freq[c]);for(c=0;c<b.connect.length;c++)d=d&&checkRadioValue(b.connect[c]);(d=(d=(d=(d=d&&(!b.reltype[8].status||b.reltype[8].status&&2<=b.reltypeSpecial.length))&&(!b.context[11].status||b.context[11].status&&2<=b.contextSpecial[0].length))&&(!b.context[12].status||b.context[12].status&&2<=b.contextSpecial[1].length))&&(!b.context[13].status||b.context[13].status&&2<=b.contextSpecial[2].length))?this.nav_container.children[b.uid].addClass("done"):
this.nav_container.children[b.uid].remClass("done")}};inputPhoneFiche.prototype.attach=function(a){console.log("FICHE: ATTACH");lsi.createDataset("fiches");this.storageToFields();this.handler=a;var c=this,c=this;this.nav_container.addEventListener("click",function(a){c.nav(a.target);c.handler()},!1)};
this.defaultData.freq;a.connect=null!=a.connect?a.connect:this.defaultData.connect;this.container.innerHTML+=ficheBuilder.build({firstname:a.firstname,lastname:a.lastname,username:a.username,uid:a.uid,age:a.age,city:a.city,duration0:a.duration[0],duration1:a.duration[1],reltypespecial:a.reltypeSpecial,contextspecial0:a.contextSpecial[0],contextspecial1:a.contextSpecial[1],contextspecial2:a.contextSpecial[2],connectspecial0:a.connectSpecial[0],connectspecial1:a.connectSpecial[1]});var b=$('article.fiche-relation input[data-name="uid"][value="'+
a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");b=$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;b<c.length&&b<a.sexe.length;b++)a.sexe[b].status?c[b].setAttribute("checked",
"checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');for(b=0;b<c.length&&b<a.famsit.length;b++)a.famsit[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');for(b=0;b<c.length&&b<a.reltype.length;b++)a.reltype[b].status?c[b].setAttribute("checked",
"checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');for(b=0;b<c.length&&b<a.loc.length;b++)a.loc[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="context"]');for(b=0;b<c.length&&b<a.context.length;b++)a.context[b].status?c[b].setAttribute("checked","checked"):
c[b].removeAttribute("checked");for(c=0;c<a.freq.length;c++)for(var d=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="freq'+c+'"]'),b=0;b<d.length&&b<a.freq[c].length;b++)a.freq[c][b].status?d[b].setAttribute("checked","checked"):d[b].removeAttribute("checked");for(c=0;c<a.connect.length;c++)for(d=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="connect'+c+'"]'),b=0;b<d.length&&b<a.connect[c].length;b++)a.connect[c][b].status?
d[b].setAttribute("checked","checked"):d[b].removeAttribute("checked")};inputPhoneFiche.prototype.storageToFields=function(){console.log("FICHE: STORAGE TO FIELDS");var a=lsi.keys("fiches");this.container.innerHTML="";for(var b=[],c=0;c<a.length;c++){var d=lsi.get("fiches",a[c]);b.push(d.uid);c==this.selected&&this.add(d)}this.updateNavBar(b)};
inputPhoneFiche.prototype.sync=function(){console.log("FICHE: SYNC");for(var a=lsi.keys("contacts"),b=0;b<a.length&&10>b;b++){var c=lsi.get("contacts",a[b]),d=lsi.get("fiches",a[b]);null==d&&(d=this.defaultData);d.uid=c.uid;d.firstname=c.firstname;d.lastname=c.lastname;d.username=c.username;lsi.set("fiches",a[b],d)}};
inputPhoneFiche.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML))return!1;for(var b=$$("#nav-fiche > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.innerHTML)-1};
inputPhoneFiche.prototype.updateNavBar=function(a){this.nav_container.innerHTML="";for(var b=0;b<a.length;b++){var c=parseInt(a[b])+1;this.nav_container.innerHTML+="<span>"+c+"</span>"}a=lsi.keys("fiches");for(b=0;b<a.length;b++)c=lsi.get("fiches",a[b]),!0===c.valid?this.nav_container.children[c.uid].addClass("done"):this.nav_container.children[c.uid].remClass("done");this.nav(this.nav_container.children[this.selected])};
inputPhoneFiche.prototype.check=function(a){if(isNaN(parseInt(a.age))||2>a.city.length||isNaN(parseInt(a.duration[0]))&&0<a.duration[0].length||isNaN(parseInt(a.duration[1]))&&0<a.duration[1].length||0==a.duration[0].length+a.duration[1].length||"."==a.job||"."==a.studies||!checkRadioValue(a.sexe)||!checkRadioValue(a.famsit)||!checkRadioValue(a.reltype)||!checkRadioValue(a.loc)||!checkRadioValue(a.context))return!1;for(var b=0;b<a.freq.length;b++)if(!checkRadioValue(a.freq[b]))return!1;for(b=0;b<
a.connect.length;b++)if(!checkRadioValue(a.connect[b]))return!1;return a.reltype[8].status&&2>a.reltypeSpecial.length||a.context[11].status&&2>a.contextSpecial[0].length||a.context[12].status&&2>a.contextSpecial[1].length||a.context[13].status&&2>a.contextSpecial[2].length?!1:!0};
inputPhoneFiche.prototype.attach=function(a){console.log("FICHE: ATTACH");lsi.createDataset("fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler()},!1)};

View File

@ -125,13 +125,13 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
]
};
/* (6) On vérifie la validité des données et on l'enregistre dans l'objet */
obj.valid = this.check(obj);
// {6} On enregistre les données dans le 'localStorage' //
lsi.set('fiches', 'form'+obj.uid, obj);
}
// {7} On met à jour le rendu //
// this.storageToFields();
};
@ -142,7 +142,7 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
/* [3] Gestion de l'ajout physique d'un nouveau contact
/* [3] Gestion de l'ajout physique d'une nouvelle fiche
=========================================================*/
/*
*
@ -293,17 +293,19 @@ inputPhoneFiche.prototype.storageToFields = function(){
// On récupère les UIDS
var UIDs = [];
//
for( var i = 0 ; i < existingFiches.length ; i++ ){
// {2} On récupère les informations du contact //
var ficheData = lsi.get('fiches', existingFiches[i]);
// {3} On ajoute un contact à la liste //
this.add(ficheData);
UIDs.push(ficheData.uid);
if( i == this.selected )
this.add(ficheData);
}
// {4} On met à jour la navigation //
this.updateNavBar(UIDs);
@ -328,7 +330,7 @@ inputPhoneFiche.prototype.sync = function(){
var contactUIDs = lsi.keys('contacts');
/* (2) Pour chaque CONTACT, on met à jour/crée la MINI fiche associée */
for( var i = 0 ; i < contactUIDs.length && i < 10-1; i++ ){
for( var i = 0 ; i < contactUIDs.length && i < 10; i++ ){
/* (3) On récupère les informations du CONTACT */
var contactData = lsi.get('contacts', contactUIDs[i]);
@ -381,13 +383,6 @@ inputPhoneFiche.prototype.nav = function(element){
element.addClass('active');
this.selected = parseInt(element.innerHTML) - 1;
/* (4) On récupère toutes les MINI fiches visibles */
var visible = $$('article.relation-panel .fiche-relation.active');
for( var i = 0 ; i < visible.length ; i++ )
visible[i].remClass('active');
/* (5) On affiche la MINI fiche associée */
this.container.children[this.selected].addClass('active');
};
@ -411,8 +406,18 @@ inputPhoneFiche.prototype.updateNavBar = function(uid_list){
}
/* (3) On montre les MINI fiches qui sont correctes */
this.check();
/* (3) On montre les FICHES qui sont correctes */
var ficheKeys = lsi.keys('fiches');
for( var i = 0 ; i < ficheKeys.length ; i++ ){
var ficheData = lsi.get('fiches', ficheKeys[i]);
// Si la MINI fiche est valide
if( ficheData.valid === true ) this.nav_container.children[ficheData.uid].addClass('done');
// Si elle est invalide
else this.nav_container.children[ficheData.uid].remClass('done');
}
/* (4) On séléctionne par défaut le dernier sélectionné */
this.nav( this.nav_container.children[this.selected] );
@ -423,77 +428,79 @@ inputPhoneFiche.prototype.updateNavBar = function(uid_list){
/* [8] Vérification des données du formulaire
=========================================================*/
inputPhoneFiche.prototype.check = function(){
inputPhoneFiche.prototype.check = function(ficheData){
/* (1) On parcours toutes les fiches */
var ficheKeys = lsi.keys('fiches');
// {1} Vérification des <input> //
// 1. L'age est un nombre
if( isNaN(parseInt(ficheData.age)) )
return false;
// 2. La ville a au moins 2 caractères
if( ficheData.city.length < 2 )
return false;
// 3. La durée de la relation en mois est vide ou un nombre
if( isNaN(parseInt(ficheData.duration[0])) && ficheData.duration[0].length > 0 )
return false;
// 4. La durée de la relation en année est vide ou un nombre
if( isNaN(parseInt(ficheData.duration[1])) && ficheData.duration[1].length > 0 )
return false;
// 5. Pour la durée de la relation, au moins un des 2 n'est pas vide
if( ficheData.duration[0].length+ficheData.duration[1].length == 0 )
return false;
for( var i = 0 ; i < ficheKeys.length ; i++ ){
var ficheData = lsi.get('fiches', ficheKeys[i]);
// {2} Vérification des <select> //
// 6. Le <select> pour la profession n'est pas indéfini
if( ficheData.job == '.' )
return false;
// 7. Le <select> pour les études n'est pas indéfini
if( ficheData.studies == '.' )
return false;
/* (2) On vérifie le formulaire complet */
var validForm = true;
// {3} Vérification des <input> radio //
// 8. Le SEXE a un et un seul choix
if( !checkRadioValue(ficheData.sexe) )
return false;
// 9. La SITUATION FAMILIALE a un et un seul choix
if( !checkRadioValue(ficheData.famsit) )
return false;
// 10. Le TYPE DE RELATION a un et un seul choix
if( !checkRadioValue(ficheData.reltype) )
return false;
// 11. La DISTANCE DE DOMICILE (location) a un et un seul choix
if( !checkRadioValue(ficheData.loc) )
return false;
// 12. Le CONTEXTE DE RENCONTRE a un et un seul choix
if( !checkRadioValue(ficheData.context) )
return false;
// 13. Les FRÉQUENCES ont un et un seul choix (par question de fréquence)
for( var i = 0 ; i < ficheData.freq.length ; i++ )
if( !checkRadioValue( ficheData.freq[i] ) )
return false;
// {1} Vérification des <input> //
// 1. L'age est un nombre
validForm = validForm && !isNaN(parseInt(ficheData.age));
// 2. La ville a au moins 2 caractères
validForm = validForm && ficheData.city.length >= 2;
// 3. La durée de la relation en mois est vide ou un nombre
validForm = validForm && (!isNaN(parseInt(ficheData.duration[0])) || ficheData.duration[0].length == '');
// 4. La durée de la relation en année est vide ou un nombre
validForm = validForm && (!isNaN(parseInt(ficheData.duration[1])) || ficheData.duration[1].length == '');
// 5. Pour la durée de la relation, au moins un des 2 n'est pas vide
validForm = validForm && ficheData.duration[0].length+ficheData.duration[1].length > 0;
// 14. Les CONNECTION ont un et un seul choix (par question de connection)
for( var i = 0 ; i < ficheData.connect.length ; i++ )
if( !checkRadioValue( ficheData.connect[i] ) )
return false;
// {2} Vérification des <select> //
// 6. Le <select> pour la profession n'est pas indéfini
validForm = validForm && ficheData.job != '.';
// 7. Le <select> pour les études n'est pas indéfini
validForm = validForm && ficheData.studies != '.';
// {4} <input> dépendant d'un choix d'un <input> radio //
// 15. TYPE DE RELATION si autre est coché (indice 8), reltypeSpecial doit avoir au moins 2 caractère
if( ficheData.reltype[8].status && ficheData.reltypeSpecial.length < 2 )
return false;
// 16. CONTEXTE DE RELATION si est coché indice 11, contactSpecial[0] doit avoir au moins 2 caractères
if( ficheData.context[11].status && ficheData.contextSpecial[0].length < 2 )
return false;
// {3} Vérification des <input> radio //
// 8. Le SEXE a un et un seul choix
validForm = validForm && checkRadioValue(ficheData.sexe);
// 9. La SITUATION FAMILIALE a un et un seul choix
validForm = validForm && checkRadioValue(ficheData.famsit);
// 10. Le TYPE DE RELATION a un et un seul choix
validForm = validForm && checkRadioValue(ficheData.reltype);
// 11. La DISTANCE DE DOMICILE (location) a un et un seul choix
validForm = validForm && checkRadioValue(ficheData.loc);
// 12. Le CONTEXTE DE RENCONTRE a un et un seul choix
validForm = validForm && checkRadioValue(ficheData.context);
// 13. Les FRÉQUENCES ont un et un seul choix (par question de fréquence)
for( var i = 0 ; i < ficheData.freq.length ; i++ )
validForm = validForm && checkRadioValue( ficheData.freq[i] );
// 17. CONTEXTE DE RELATION si est coché indice 12, contextSpecial[1] doit avoir au moins 2 caractères
if( ficheData.context[12].status && ficheData.contextSpecial[1].length < 2 )
return false;
// 14. Les CONNECTION ont un et un seul choix (par question de connection)
for( var i = 0 ; i < ficheData.connect.length ; i++ )
validForm = validForm && checkRadioValue( ficheData.connect[i] );
// {4} <input> dépendant d'un choix d'un <input> radio //
// 15. TYPE DE RELATION si autre est coché (indice 8)
validForm = validForm && (!ficheData.reltype[8].status || ficheData.reltype[8].status && ficheData.reltypeSpecial.length >= 2);
// 16. CONTEXTE DE RELATION si est coché indice 11
validForm = validForm && (!ficheData.context[11].status || ficheData.context[11].status && ficheData.contextSpecial[0].length >= 2);
// 17. CONTEXTE DE RELATION si est coché indice 12
validForm = validForm && (!ficheData.context[12].status || ficheData.context[12].status && ficheData.contextSpecial[1].length >= 2);
// 18. CONTEXTE DE RELATION si est coché indice 13
validForm = validForm && (!ficheData.context[13].status || ficheData.context[13].status && ficheData.contextSpecial[2].length >= 2);
// 18. CONTEXTE DE RELATION si est coché indice 13, contextSpecial[2] doit avoir au moins 2 caractères
if( ficheData.context[13].status && ficheData.contextSpecial[2].length < 2 )
return false;
/* (3) Si le formulaire est valide, on le met en valeur dans la barre de navigation (pages) */
if( validForm )
this.nav_container.children[ficheData.uid].addClass('done');
else // sinon, on lui enlève la classe s'il l'a
this.nav_container.children[ficheData.uid].remClass('done');
}
// 19. Si tout s'est bien passé, on retourne TRUE
return true;
};

View File

@ -1,12 +1,11 @@
function inputPhoneMini(a,b){this.container=a;this.nav_container=b}inputPhoneMini.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{firstname:"",lastname:"",username:"",sexe:[{status:!0},{status:!1}],age:"",job:".",loc:[{status:!0},{status:!1},{status:!1},{status:!1}]}};
inputPhoneMini.prototype.fieldsToStorage=function(){console.log("MINI FICHE: FIELDS TO STORAGE");for(var a=$$("article.mini-relation-panel .mini-fiche-relation"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input","select"],["data-name"])).deflate();console.log(c);var d=lsi.get("mini-fiches","form"+c.uid.value);!1===d&&(d.username="inconnu",d.firstname="inconnu",d.lastname="inconnu");c={uid:c.uid.value,firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:c.sexe,age:c.age.value,
job:c.job.value,loc:c.loc};lsi.set("mini-fiches","form"+c.uid,c)}};
job:c.job.value,loc:c.loc};c.valid=this.check(c);lsi.set("mini-fiches","form"+c.uid,c)}};
inputPhoneMini.prototype.add=function(a){console.log("MINI FICHE: ADD");if(null==a.uid)return!1;a.firstname=null!=a.firstname?a.firstname:this.defaultData.firstname;a.lastname=null!=a.lastname?a.lastname:this.defaultData.lastname;a.username=null!=a.username?a.username:this.defaultData.username;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.job=null!=a.job?a.job:this.defaultData.job;a.loc=null!=a.loc?a.loc:this.defaultData.loc;this.container.innerHTML+=
miniFicheBuilder.build({firstname:a.firstname,lastname:a.lastname,username:a.username,uid:a.uid,age:a.age,job:a.job});var b=$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;b<c.length&&b<a.sexe.length;b++)a.sexe[b].status?c[b].setAttribute("checked",
"checked"):c[b].removeAttribute("checked");c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');for(b=0;b<c.length&&b<a.loc.length;b++)a.loc[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked")};
inputPhoneMini.prototype.storageToFields=function(){console.log("MINI FICHE: STORAGE TO FIELDS");var a=lsi.keys("mini-fiches");this.container.innerHTML="";for(var b=[],c=0;c<a.length;c++){var d=lsi.get("mini-fiches",a[c]);this.add({uid:d.uid,firstname:d.firstname,lastname:d.lastname,username:d.username,age:d.age,sexe:d.sexe,job:d.job,loc:d.loc});b.push(d.uid)}this.updateNavBar(b)};
inputPhoneMini.prototype.sync=function(){console.log("MINI FICHE: SYNC");for(var a=lsi.keys("contacts"),b=0;b<a.length;b++){var c=lsi.get("contacts",a[b]),d=lsi.get("mini-fiches",a[b]);null==d&&(d=this.defaultData);d.uid=c.uid;d.firstname=c.firstname;d.lastname=c.lastname;d.username=c.username;lsi.set("mini-fiches",a[b],d)}};
inputPhoneMini.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML))return!1;for(var b=$$("#nav-mini > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.innerHTML)-1;a=$$("article.mini-relation-panel .mini-fiche-relation.active");for(c=0;c<a.length;c++)a[c].remClass("active");this.container.children[this.selected].addClass("active")};
inputPhoneMini.prototype.updateNavBar=function(a){this.nav_container.innerHTML="";for(var b=0;b<a.length;b++){var c=parseInt(a[b])+1;this.nav_container.innerHTML+="<span>"+c+"</span>"}this.check();this.nav(this.nav_container.children[this.selected])};
inputPhoneMini.prototype.check=function(){for(var a=lsi.keys("mini-fiches"),b=0;b<a.length;b++){var c=lsi.get("mini-fiches",a[b]),d=!0;(d=(d=(d=(d=d&&!isNaN(parseInt(c.age)))&&checkRadioValue(c.sexe))&&"."!=c.job)&&checkRadioValue(c.loc))?this.nav_container.children[c.uid].addClass("done"):this.nav_container.children[c.uid].remClass("done")}};
inputPhoneMini.prototype.attach=function(a){console.log("MINI FICHE: ATTACH");lsi.createDataset("mini-fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler()},!1)};
inputPhoneMini.prototype.storageToFields=function(){console.log("MINI FICHE: STORAGE TO FIELDS");var a=lsi.keys("mini-fiches");this.container.innerHTML="";for(var b=[],c=0;c<a.length;c++){var d=lsi.get("mini-fiches",a[c]);b.push(d.uid);c==this.selected&&this.add({uid:d.uid,firstname:d.firstname,lastname:d.lastname,username:d.username,age:d.age,sexe:d.sexe,job:d.job,loc:d.loc})}this.updateNavBar(b)};
inputPhoneMini.prototype.sync=function(){console.log("MINI FICHE: SYNC");for(var a=lsi.keys("contacts"),b=0;b<a.length;b++){var c=lsi.get("contacts",a[b]),d=lsi.get("mini-fiches",a[b]);null==d&&(d=this.defaultData,d.valid=!1);d.uid=c.uid;d.firstname=c.firstname;d.lastname=c.lastname;d.username=c.username;lsi.set("mini-fiches",a[b],d)}};
inputPhoneMini.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML))return!1;for(var b=$$("#nav-mini > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.innerHTML)-1};
inputPhoneMini.prototype.updateNavBar=function(a){if(this.nav_container.children.length!=a.length){this.nav_container.innerHTML="";for(var b=0;b<a.length;b++)this.nav_container.innerHTML+="<span>"+(parseInt(a[b])+1)+"</span>"}a=lsi.keys("mini-fiches");for(b=0;b<a.length;b++){var c=lsi.get("mini-fiches",a[b]);!0===c.valid?this.nav_container.children[c.uid].addClass("done"):this.nav_container.children[c.uid].remClass("done")}this.nav(this.nav_container.children[this.selected])};
inputPhoneMini.prototype.check=function(a){return!isNaN(parseInt(a.age))&&checkRadioValue(a.sexe)&&"."!=a.job&&checkRadioValue(a.loc)?!0:!1};inputPhoneMini.prototype.attach=function(a){console.log("MINI FICHE: ATTACH");lsi.createDataset("mini-fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler()},!1)};

View File

@ -32,7 +32,6 @@ inputPhoneMini.prototype.fieldsToStorage = function(){
// {1} Pour chaque formulaire de contact présent //
var existingMiniFiches = $$('article.mini-relation-panel .mini-fiche-relation');
for( var i = 0 ; i < existingMiniFiches.length ; i++ ){
// {2} On initialise notre deflater pour récupérer les valeurs //
var deflater = new FormDeflater(existingMiniFiches[i], ['input', 'select'], ['data-name']);
@ -66,13 +65,14 @@ inputPhoneMini.prototype.fieldsToStorage = function(){
loc: deflated.loc // [0] Choix 1 -> [3] Choix 4
};
// {6} On enregistre les données dans le 'localStorage' //
/* (6) On vérifie la validité des données et on l'enregistre dans l'objet */
obj.valid = this.check(obj);
// {7} On enregistre les données dans le 'localStorage' //
lsi.set('mini-fiches', 'form'+obj.uid, obj);
}
// {7} On met à jour le rendu //
// this.storageToFields();
};
@ -163,22 +163,25 @@ inputPhoneMini.prototype.storageToFields = function(){
for( var i = 0 ; i < existingMiniFiches.length ; i++ ){
// {2} On récupère les informations du contact //
var ficheData = lsi.get('mini-fiches', existingMiniFiches[i]);
// {3} On ajoute un contact à la liste //
this.add({
uid: ficheData.uid,
firstname: ficheData.firstname,
lastname: ficheData.lastname,
username: ficheData.username,
age: ficheData.age,
sexe: ficheData.sexe,
job: ficheData.job,
loc: ficheData.loc
});
UIDs.push(ficheData.uid);
// {3} On affiche la MINI fiche sélectionnée //
if( i == this.selected )
this.add({
uid: ficheData.uid,
firstname: ficheData.firstname,
lastname: ficheData.lastname,
username: ficheData.username,
age: ficheData.age,
sexe: ficheData.sexe,
job: ficheData.job,
loc: ficheData.loc
});
}
// {4} On met à jour la navigation //
this.updateNavBar(UIDs);
@ -213,8 +216,10 @@ inputPhoneMini.prototype.sync = function(){
/* (5) Si la MINI fiche n'exise pas, on la crée avec les valeurs par défaut */
if( miniData == null )
if( miniData == null ){
miniData = this.defaultData;
miniData.valid = false;
}
/* (6) On met à jour la MINI fiche */
@ -255,14 +260,6 @@ inputPhoneMini.prototype.nav = function(element){
/* (3) On active l'élément courant */
element.addClass('active');
this.selected = parseInt(element.innerHTML) - 1;
/* (4) On récupère toutes les MINI fiches visibles */
var visible = $$('article.mini-relation-panel .mini-fiche-relation.active');
for( var i = 0 ; i < visible.length ; i++ )
visible[i].remClass('active');
/* (5) On affiche la MINI fiche associée */
this.container.children[this.selected].addClass('active');
};
@ -274,22 +271,33 @@ inputPhoneMini.prototype.nav = function(element){
/* [7] Mise à jour de la navigation
=========================================================*/
inputPhoneMini.prototype.updateNavBar = function(uid_list){
/* (1) On vide la nav bar */
this.nav_container.innerHTML = '';
/* (1) On vérifie si la barre de navigation est à jour */
var navBarUpToDate = this.nav_container.children.length == uid_list.length;
/* (2) On la re-remplit avec toutes les données */
for( var i = 0 ; i < uid_list.length ; i++ ){
// On rajoute 1 pour la lisibilité
var realIndex = parseInt(uid_list[i]) + 1;
/* (1) On vide et remplit la barre de nav, si elle n'est pas à jour */
if( !navBarUpToDate ){
this.nav_container.innerHTML = '';
this.nav_container.innerHTML += '<span>'+realIndex+'</span>';
for( var i = 0 ; i < uid_list.length ; i++ )
this.nav_container.innerHTML += '<span>'+( parseInt(uid_list[i])+1 )+'</span>';
}
/* (3) On montre les MINI fiches qui sont correctes dans la navbar */
var miniKeys = lsi.keys('mini-fiches');
for( var i = 0 ; i < miniKeys.length ; i++ ){
var miniData = lsi.get('mini-fiches', miniKeys[i]);
// Si la MINI fiche est valide
if( miniData.valid === true ) this.nav_container.children[miniData.uid].addClass('done');
// Si elle est invalide
else this.nav_container.children[miniData.uid].remClass('done');
}
/* (3) On montre les MINI fiches qui sont correctes */
this.check();
/* (4) On séléctionne par défaut le dernier sélectionné */
/* (4) On séléctionne par défaut la dernière MINI fiche sélectionnée */
this.nav( this.nav_container.children[this.selected] );
};
@ -298,36 +306,24 @@ inputPhoneMini.prototype.updateNavBar = function(uid_list){
/* [8] Vérification des données du formulaire
=========================================================*/
inputPhoneMini.prototype.check = function(){
inputPhoneMini.prototype.check = function(miniData){
/* (1) On parcours toutes les fiches */
var miniKeys = lsi.keys('mini-fiches');
for( var i = 0 ; i < miniKeys.length ; i++ ){
var miniData = lsi.get('mini-fiches', miniKeys[i]);
/* (2) On vérifie le formulaire complet */
var validForm = true;
// 1. L'age est un nombre
validForm = validForm && !isNaN(parseInt(miniData.age));
// 2. Le sexe est défini
validForm = validForm && checkRadioValue(miniData.sexe);
// 3. Le métier est défini
validForm = validForm && miniData.job != '.';
// 4. La distance de localisation est définie
validForm = validForm && checkRadioValue(miniData.loc);
// 1. L'age est un nombre
if( isNaN(parseInt(miniData.age)) )
return false;
// 2. Le sexe est défini
if( !checkRadioValue(miniData.sexe) )
return false;
// 3. Le métier est défini
if( miniData.job == '.' )
return false;
// 4. La distance de localisation est définie
if( !checkRadioValue(miniData.loc) )
return false;
/* (3) Si le formulaire est valide, on le met en valeur dans la barre de navigation (pages) */
if( validForm )
this.nav_container.children[miniData.uid].addClass('done');
else // sinon, on lui enlève la classe s'il l'a
this.nav_container.children[miniData.uid].remClass('done');
}
// Si aucune erreur, tout est ok
return true;
};

View File

@ -1,5 +1,5 @@
var importCallLog=$('input#call_log-import[type="file"]'),subjectManager,contactManager,miniManager,ficheManager;function dynamicUpdate(){console.log("DYNAMIC UPDATE: UPDATING");miniManager.fieldsToStorage();ficheManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.sync();ficheManager.sync();miniManager.storageToFields();ficheManager.storageToFields();contactManager.storageToFields()}
function checkRadioValue(b){for(var a=0,c=0;c<b.length;c++)!0===b[c].status&&a++;return 1!=a?!1:!0}
function checkRadioValue(c){for(var a=0,b=0;b<c.length;b++)!0===c[b].status&&a++;return 1!=a?!1:!0}
include("/js/includes/input-phone-subject.js",function(){include("/js/includes/input-phone-contact.js",function(){include("/js/includes/input-phone-mini.js",function(){include("/js/includes/input-phone-fiche.js",function(){subjectManager=new inputPhoneSubject($('article.subject-panel [data-name="number"]'),$('article.subject-panel [data-name="username"]'),$('article.subject-panel [data-name="firstname"]'),$('article.subject-panel [data-name="lastname"]'),$('article.subject-panel [data-name="submit"]'));
subjectManager.attach();contactManager=new inputPhoneContact($("article.contact-panel"),$("h4.add-contact"));contactManager.attach(dynamicUpdate);miniManager=new inputPhoneMini($("article.mini-relation-panel"),$("#nav-mini"));miniManager.attach(dynamicUpdate);ficheManager=new inputPhoneFiche($("article.relation-panel"),$("#nav-fiche"));ficheManager.attach(dynamicUpdate);importCallLog.addEventListener("change",function(b){api.send({path:"upload/call_log",file:importCallLog.files[0]},function(a){0==
a.ModuleError&&(importCallLog.addClass("active"),console.log(a),a={path:"call_log/unserialize",phone_number:$("#subject_phone_number").value},api.send(a,function(a){console.log(a)}))})},!1)})})})});
subjectManager.attach();contactManager=new inputPhoneContact($("article.contact-panel"),$("h4.add-contact"));contactManager.attach(dynamicUpdate);miniManager=new inputPhoneMini($("article.mini-relation-panel"),$("#nav-mini"));miniManager.attach(dynamicUpdate);ficheManager=new inputPhoneFiche($("article.relation-panel"),$("#nav-fiche"));ficheManager.attach(dynamicUpdate);importCallLog.addEventListener("change",function(c){api.send({path:"upload/call_log",file:importCallLog.files[0]},function(a){console.log(a);
0==a.ModuleError&&(importCallLog.addClass("active"),a={path:"call_log/unserialize",phone_number:$("#subject_phone_number").value},api.send(a,function(b){console.log(b);if(0==b.ModuleError){for(var a=0;a<b.directory.length&&20>a;a++)lsi.set("contacts","form"+a,{uid:a,number:b.directory[a].number,username:b.directory[a].name,firstname:"",lastname:""});dynamicUpdate()}}))})},!1)})})})});

View File

@ -147,14 +147,13 @@ include('/js/includes/input-phone-fiche.js', function(){
/* (2) On effectue l'upload (import) */
api.send(uploadRequest, function(uploadResponse){
console.log(uploadResponse);
// Si tout est bon, on met l'input en bleu
if( uploadResponse.ModuleError == 0 ){
importCallLog.addClass('active');
// TODO: Gestion de l'ajout des fiches relation
/* (3) On rédige la requête pour récupérer les données du fichier */
console.log(uploadResponse);
var getCallLogRequest = {
path: 'call_log/unserialize',
phone_number: $('#subject_phone_number').value
@ -163,6 +162,24 @@ include('/js/includes/input-phone-fiche.js', function(){
/* (4) On effectue la récupération d'informations */
api.send(getCallLogRequest, function(dataResponse){
console.log(dataResponse);
// Si tout est ok, on ajoute les données
if( dataResponse.ModuleError == 0 ){
/* (5) Pour chaque contact de l'annuaire, on ajoute un contact */
for( var i = 0 ; i < dataResponse.directory.length && i < 20 ; i++ ){
lsi.set('contacts', 'form'+i, {
uid: i,
number: dataResponse.directory[i].number,
username: dataResponse.directory[i].name,
firstname: '',
lastname: ''
});
}
/* (6) On met à jour l'affichage */
dynamicUpdate();
}
});
}