Avancement sur les interactions dynamiques + passage des instances 'subject', 'contact', 'mini' en classes externes.

This commit is contained in:
xdrm-brackets 2016-04-26 16:16:43 +02:00
parent 59a38ff6d2
commit 0998c89f47
21 changed files with 705 additions and 277 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

@ -264,7 +264,7 @@
font-weight: normal;
color: #333;
@include transition( border .2s ease-in-out, background .2s ease-in-out );
@include transition( border .2s ease-in-out, background .2s ease-in-out, color .2s ease-in-out );
/* Animation de @focus*/
&:focus{
@ -272,6 +272,23 @@
}
}
// Boutons
& input[type='submit']{
border-color: darken($timeline-2, 20);
background: $timeline-2;
color: #fff;
// Animation de @hover pour les boutons
&:hover,
&:focus{
background: darken($timeline-2, 5);
}
}
& label{
color: #555;
@ -409,7 +426,7 @@
display: inline-block;
position: relative;
margin: 0;
margin: .3em 0;
padding: .5em .8em;
border: 1px solid darken(#d8e0e9, 10);

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

File diff suppressed because one or more lines are too long

View File

@ -44,8 +44,8 @@ miniFicheBuilder.setLayout(
"\t<h4 data-icon='o' class='color2'>@firstname @lastname (@username)</h4>\n"+
"\t<h5 class='nobold color0'>\n"+
"\t\t<input type='radio' name='sexe_min_@uid' checked data-name='sexe' id='sexeH_min_@uid' checked='@sexe_A'><label for='sexeH_min_@uid'>Homme</label>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' class='btm' name='sexe_min_@uid' data-name='sexe' id='sexeF_min_@uid' checked='@sexe_B'><label for='sexeF_min_@uid'>Femme</label>\n"+
"\t\t<input type='radio' name='sexe_min_@uid' checked data-name='sexe' id='sexeH_min_@uid' checked='@sexea'><label for='sexeH_min_@uid'>Homme</label>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' class='btm' name='sexe_min_@uid' data-name='sexe' id='sexeF_min_@uid' checked='@sexeb'><label for='sexeF_min_@uid'>Femme</label>\n"+
"\t</h5>\n"+
@ -99,10 +99,10 @@ miniFicheBuilder.setLayout(
"\t<h5 class='nobold color0'>\n"+
"\t\tOù habite t-elle/il ?<br>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' checked name='loc_min_@uid' data-name='loc' id='locA_min_@uid' checked='@loc_A'><label for='locA_min_@uid'>- de 10km</label><br>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' name='loc_min_@uid' data-name='loc' id='locB_min_@uid' checked='@loc_B'><label for='locB_min_@uid'>de 10km à 30km</label><br>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' name='loc_min_@uid' data-name='loc' id='locC_min_@uid' checked='@loc_C'><label for='locC_min_@uid'>de 30km à 100km</label><br>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' name='loc_min_@uid' data-name='loc' id='locD_min_@uid' checked='@loc_D'><label for='locD_min_@uid'>+ de 100km</label>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' checked name='loc_min_@uid' data-name='loc' id='locA_min_@uid' checked='@loca'><label for='locA_min_@uid'>- de 10km</label><br>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' name='loc_min_@uid' data-name='loc' id='locB_min_@uid' checked='@locb'><label for='locB_min_@uid'>de 10km à 30km</label><br>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' name='loc_min_@uid' data-name='loc' id='locC_min_@uid' checked='@locc'><label for='locC_min_@uid'>de 30km à 100km</label><br>\n"+
"\t\t&nbsp&nbsp&nbsp<input type='radio' name='loc_min_@uid' data-name='loc' id='locD_min_@uid' checked='@locd'><label for='locD_min_@uid'>+ de 100km</label>\n"+
"\t</h5>\n"+
"</article>");

View File

@ -1,5 +1,4 @@
function inputPhoneContact(a,c){this.container=a;this.add_button=c}inputPhoneContact.prototype={container:this.container,add_button:this.add_button};
inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$("article.contact-panel .new-contact"),c=0;c<a.length;c++){var d=a[c].parentNode.children.indexOf(a[c]),b=(new FormDeflater(a[c],["input"],["data-name"])).deflate(),e=0<b.number.value.length;if(e=e&&0<b.username.value.length+b.firstname.value.length+b.lastname.value.length)b={number:b.number.value,username:b.username.value,firstname:b.firstname.value,lastname:b.lastname.value},lsi.set("contacts",
"form"+d,b),e=lsi.get("mini-fiches","form"+d),!1===e?lsi.set("mini-fiches","form"+d,{uid:d,firstname:b.firstname,lastname:b.lastname,username:b.username,age:"",sexe:[!0,!1],job:".",location:[!0,!1,!1,!1]}):(e.firstname=b.firstname,e.lastname=b.lastname,e.username=b.username,lsi.set("mini-fiches","form"+d,e))}this.storageToFields()};
inputPhoneContact.prototype.add=function(a){console.log("CONTACTS: ADD");a.number=null!=a.number?a.number:"";a.username=null!=a.username?a.username:"";a.firstname=null!=a.firstname?a.firstname:"";a.lastname=null!=a.lastname?a.lastname:"";this.container.innerHTML+=contactBuilder.build(a);a=$$('article.contact-panel .new-contact input[type="submit"]');for(var c=this,d=0;d<a.length;d++)a[d].removeEventListener("click",function(a){c.fieldsToStorage()},!1),a[d].addEventListener("click",function(a){c.fieldsToStorage()},
!1)};inputPhoneContact.prototype.storageToFields=function(){console.log("CONTACTS: STORAGE TO FIELDS");var a=lsi.keys("contacts");this.container.innerHTML="";for(var c=0;c<a.length;c++){var d=lsi.get("contacts",a[c]);this.add(d)}this.add({number:"",firstname:"",lastname:"",username:""})};inputPhoneContact.prototype.attach=function(){console.log("CONTACTS: ATTACH");lsi.createDataset("contacts");var a=this;this.add_button.addEventListener("click",function(c){a.fieldsToStorage()},!1);this.storageToFields()};
function inputPhoneContact(a,b){this.container=a;this.add_button=b}inputPhoneContact.prototype={container:this.container,add_button:this.add_button,handler:null};
inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$("article.contact-panel .new-contact"),b=0;b<a.length;b++){var c=a[b].parentNode.children.indexOf(a[b]),d=(new FormDeflater(a[b],["input"],["data-name"])).deflate(),e=0<d.number.value.length;(e=e&&0<d.username.value.length+d.firstname.value.length+d.lastname.value.length)&&lsi.set("contacts","form"+c,{uid:c,number:d.number.value,username:d.username.value,firstname:d.firstname.value,lastname:d.lastname.value})}this.storageToFields()};
inputPhoneContact.prototype.add=function(a){console.log("CONTACTS: ADD");a.number=null!=a.number?a.number:"";a.username=null!=a.username?a.username:"";a.firstname=null!=a.firstname?a.firstname:"";a.lastname=null!=a.lastname?a.lastname:"";this.container.innerHTML+=contactBuilder.build(a);a=$$('article.contact-panel .new-contact input[type="submit"]');for(var b=this,c=0;c<a.length;c++)a[c].removeEventListener("click",function(a){b.handler()},!1),a[c].addEventListener("click",function(a){b.handler()},
!1)};inputPhoneContact.prototype.storageToFields=function(){console.log("CONTACTS: STORAGE TO FIELDS");var a=lsi.keys("contacts");this.container.innerHTML="";for(var b=0;b<a.length;b++){var c=lsi.get("contacts",a[b]);this.add(c)}this.add({number:"",firstname:"",lastname:"",username:""})};inputPhoneContact.prototype.attach=function(a){console.log("CONTACTS: ATTACH");lsi.createDataset("contacts");this.handler=a;var b=this;this.add_button.addEventListener("click",function(){b.handler()},!1);this.storageToFields()};

View File

@ -9,7 +9,8 @@ function inputPhoneContact(container, add_button){
=========================================================*/
inputPhoneContact.prototype = {
container: this.container, // Conteneur des formulaires de contact
add_button: this.add_button // Bouton d'ajout d'un formulaire
add_button: this.add_button, // Bouton d'ajout d'un formulaire
handler: null // Fonction pour l'enregistrement et la synchronisation des données
};
@ -41,6 +42,7 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
// {5} On récupère et met en forme les valeurs du deflater //
var obj = {
uid: indexInParent,
number: deflated.number.value,
username: deflated.username.value,
firstname: deflated.firstname.value,
@ -50,35 +52,9 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
// {6} On enregistre les données dans le 'localStorage' //
lsi.set('contacts', 'form'+indexInParent, obj);
// {7} On enregistre les données des MINI fiches associées //
var associatedMiniFiche = lsi.get('mini-fiches', 'form'+indexInParent);
// Si n'existe pas, on la crée
if( associatedMiniFiche === false ){
lsi.set('mini-fiches', 'form'+indexInParent, {
uid: indexInParent,
firstname: obj.firstname,
lastname: obj.lastname,
username: obj.username,
age: '',
sexe: [true, false],
job: '.',
location: [true, false, false, false]
});
// Sinon, on met à jour
}else{
associatedMiniFiche.firstname = obj.firstname;
associatedMiniFiche.lastname = obj.lastname;
associatedMiniFiche.username = obj.username;
lsi.set('mini-fiches', 'form'+indexInParent, associatedMiniFiche);
}
}
// {8} On met à jour le rendu des contacts//
// {7} On met à jour le rendu des contacts//
this.storageToFields();
};
@ -116,8 +92,8 @@ inputPhoneContact.prototype.add = function(objectData){
// On met à jour les listener (remove, puis add)
var ptr = this;
for( var i = 0 ; i < contactSubmits.length ; i++ ){
contactSubmits[i].removeEventListener('click', function(e){ ptr.fieldsToStorage(); }, false);
contactSubmits[i].addEventListener('click', function(e){ ptr.fieldsToStorage(); }, false);
contactSubmits[i].removeEventListener('click', function(e){ ptr.handler(); }, false);
contactSubmits[i].addEventListener('click', function(e){ ptr.handler(); }, false);
}
};
@ -154,24 +130,24 @@ inputPhoneContact.prototype.storageToFields = function(){
// On ajoute un champ de plus à remplir
this.add({number:'', firstname:'', lastname:'', username:''});
// {4} On met à jour les MINI fiches //
// miniFiche.fieldsToStorage();
};
/* [5] Point d'amorçage de la gestion des contacts
=========================================================*/
inputPhoneContact.prototype.attach = function(){
inputPhoneContact.prototype.attach = function(handler){
console.log('CONTACTS: ATTACH');
/* (1) On initialise le jeu de données */
lsi.createDataset('contacts');
// On enregistre le handler
this.handler = handler;
/* (2) On attache l'évènement sur le bouton d'ajout de contact */
var ptr = this;
this.add_button.addEventListener('click', function(e){ ptr.fieldsToStorage(); }, false);
this.add_button.addEventListener('click', function(){ ptr.handler(); }, false);
/* (3) On charge les contacts depuis la mémoire ('localStorage') */
this.storageToFields();

View File

8
js/includes/input-phone-mini-min.js vendored Normal file
View File

@ -0,0 +1,8 @@
function inputPhoneMini(a){this.container=a}inputPhoneMini.prototype={container:this.container};
inputPhoneMini.prototype.fieldsToStorage=function(){console.log("MINI FICHE: FIELDS TO STORAGE");for(var a=$$("article.mini-relation-panel .mini-fiche-relation"),c=0;c<a.length;c++){var b=(new FormDeflater(a[c],["input","select"],["data-name"])).deflate(),d=lsi.get("mini-fiches","form"+b.uid.value);console.log("deflated");console.log(b);!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[0].status,
b.sexe[1].status],age:b.age.value,job:b.job.value,loc:[b.loc[0].status,b.loc[1].status,b.loc[2].status,b.loc[3].status]};lsi.set("mini-fiches","form"+b.uid,b)}this.storageToFields()};
inputPhoneMini.prototype.add=function(a){console.log("MINI FICHE: ADD");if(null==a.uid)return!1;a.firstname=null!=a.firstname?a.firstname:"";a.lastname=null!=a.lastname?a.lastname:"";a.username=null!=a.username?a.username:"";a.age=null!=a.age?a.age:"";a.sexe=null!=a.sexe?a.sexe:[!0,!1];a.job=null!=a.job?a.job:".";a.loc=null!=a.loc?a.loc:[!0,!1,!1,!1];console.log(a);this.container.innerHTML+=miniFicheBuilder.build({firstname:a.firstname,lastname:a.lastname,username:a.username,uid:a.uid,age:a.age,sexea:a.sexe[0]?
"true":"false",sexeb:a.sexe[1]?"true":"false",job:a.job,loca:a.loc[0]?"true":"false",locb:a.loc[1]?"true":"false",locc:a.loc[2]?"true":"false",locd:a.loc[3]?"true":"false"})};
inputPhoneMini.prototype.storageToFields=function(){console.log("MINI FICHE: STORAGE TO FIELDS");var a=lsi.keys("mini-fiches");this.container.innerHTML="";for(var c=0;c<a.length;c++){var b=lsi.get("mini-fiches",a[c]);this.add({uid:b.uid,firstname:b.firstname,lastname:b.lastname,username:b.username,age:b.age,sexe:b.sexe,job:b.job,loc:b.loc})}};
inputPhoneMini.prototype.sync=function(){for(var a=lsi.keys("contacts"),c=0;c<a.length;c++){var b=lsi.get("contacts",a[c]),d=lsi.get("mini-fiches",a[c]);null==d?lsi.set("mini-fiches",a[c],{uid:b.uid,firstname:b.firstname,lastname:b.lastname,username:b.username,sexe:[!0,!1],age:"",job:".",loc:[!0,!1,!1,!1]}):(d.firstname=b.firstname,d.lastname=b.lastname,d.username=b.username,lsi.set("mini-fiches",a[c],d))}};
inputPhoneMini.prototype.attach=function(){console.log("MINI FICHE: ATTACH");lsi.createDataset("mini-fiches");this.storageToFields()};

View File

@ -0,0 +1,245 @@
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
=========================================================*/
function inputPhoneMini(container){
this.container = container;
}
/* [1] Attributs
=========================================================*/
inputPhoneMini.prototype = {
container: this.container // Conteneur des mini fiches relation
};
/* [2] Gestion de l'enregistrement des formulaires mini fiches relation
=========================================================*/
inputPhoneMini.prototype.fieldsToStorage = function(){
console.log('MINI FICHE: FIELDS TO STORAGE');
// {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']);
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
var deflated = deflater.deflate();
// TODO: Condition pour que le formulaire soit valide
var validForm = true;
// Si le formulaire n'est pas valide, on ne l'enregistre pas
if( !validForm ) continue;
// {4} On récupère les données du LSI si elles existent //
var existingData = lsi.get('mini-fiches', 'form'+deflated.uid.value);
console.log('deflated');
console.log(deflated);
// Si n'existe pas, on initialise
if( existingData === false ){
existingData.username = 'inconnu';
existingData.firstname = 'inconnu';
existingData.lastname = 'inconnu';
}
// {5} On récupère et met en forme les valeurs du deflater //
var obj = {
uid: deflated.uid.value,
firstname: existingData.firstname,
lastname: existingData.lastname,
username: existingData.username,
sexe: [
deflated.sexe[0].status, // VRAI SI HOMME
deflated.sexe[1].status // VRAI SI FEMME
],
age: deflated.age.value,
job: deflated.job.value,
loc: [
deflated.loc[0].status, // VRAI si choix 1
deflated.loc[1].status, // VRAI si choix 2
deflated.loc[2].status, // VRAI si choix 3
deflated.loc[3].status // VRAI si choix 4
]
};
// {6} On enregistre les données dans le 'localStorage' //
lsi.set('mini-fiches', 'form'+obj.uid, obj);
}
// {7} On met à jour le rendu //
this.storageToFields();
};
/* [3] Gestion de l'ajout physique d'un nouveau contact
=========================================================*/
/*
*
* @objectData<Object> Objet contenant les informations nécessaires à l'affichage
*
*/
inputPhoneMini.prototype.add = function(objectData){
console.log('MINI FICHE: ADD');
// Si pas d'UID, on retourne une erreur
if( objectData.uid == null )
return false;
/* (0) Gestion du formattage des valeur */
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : '';
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : '';
objectData.username = (objectData.username != null) ? objectData.username : '';
objectData.age = (objectData.age != null) ? objectData.age : '';
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : [true, false];
objectData.job = (objectData.job != null) ? objectData.job : '.';
objectData.loc = (objectData.loc != null) ? objectData.loc : [true, false, false, false];
console.log(objectData);
// {1} Création physique //
this.container.innerHTML += miniFicheBuilder.build({
firstname: objectData.firstname,
lastname: objectData.lastname,
username: objectData.username,
uid: objectData.uid,
age: objectData.age,
sexea: objectData.sexe[0] ? 'true' : 'false',
sexeb: objectData.sexe[1] ? 'true' : 'false',
job: objectData.job,
loca: objectData.loc[0] ? 'true' : 'false',
locb: objectData.loc[1] ? 'true' : 'false',
locc: objectData.loc[2] ? 'true' : 'false',
locd: objectData.loc[3] ? 'true' : 'false'
});
};
/* [4] Gestion de l'affichage depuis le 'localStorage'
=========================================================*/
inputPhoneMini.prototype.storageToFields = function(){
console.log('MINI FICHE: STORAGE TO FIELDS');
// {1} Pour chaque contact du 'localStorage' //
var existingMiniFiches = lsi.keys('mini-fiches');
// On réinitialise le HTML
this.container.innerHTML = '';
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
});
}
};
/* [5] Synchronisation des CONTACT vers les MINI fiches
=========================================================*/
inputPhoneMini.prototype.sync = function(){
/* (1) On récupère les clés de tous les CONTACTS */
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++ ){
/* (3) On récupère les informations du CONTACT */
var contactData = lsi.get('contacts', contactUIDs[i]);
/* (4) On récupère les informations de la MINI (si elle existe) */
var miniData = lsi.get('mini-fiches', contactUIDs[i]);
/* (5) Cas 1 : la MINI fiche n'exise pas */
if( miniData == null ){
// On crée la MINI fiche
lsi.set('mini-fiches', contactUIDs[i], {
uid: contactData.uid,
firstname: contactData.firstname,
lastname: contactData.lastname,
username: contactData.username,
sexe: [true, false], // valeur par défaut
age: '', // valeur par défaut
job: '.', // valeur par défaut
loc: [true, false, false, false] // valeur par défaut
});
/* (6) Cas 2 : la MINI fiche existe déja */
}else{
// On modifie la MINI fiche
miniData.firstname = contactData.firstname;
miniData.lastname = contactData.lastname;
miniData.username = contactData.username;
// On met à jour la MINI fiche
lsi.set('mini-fiches', contactUIDs[i], miniData);
}
}
};
/* [6] Point d'amorçage de la gestion des contacts
=========================================================*/
inputPhoneMini.prototype.attach = function(){
console.log('MINI FICHE: ATTACH');
/* (1) On initialise le jeu de données */
lsi.createDataset('mini-fiches');
/* (2) On charge les mini fiches depuis la mémoire ('localStorage') */
this.storageToFields();
};

View File

@ -0,0 +1,3 @@
function inputPhoneSubject(a,b,c,d,e){this.number=a;this.username=b;this.firstname=c;this.lastname=d;this.store_button=e}inputPhoneSubject.prototype={store_button:this.store_button,number:this.number,username:this.username,firstname:this.firstname,lastname:this.lastname};
inputPhoneSubject.prototype.fieldsToStorage=function(){console.log("SUBJECT: FIELDS TO STORAGE");var a=0<this.number.value.length,a=a&&0<this.username.value.length+this.firstname.value.length+this.lastname.value.length;if(!a)return!1;lsi.set("subject","form",{number:this.number.value,username:this.username.value,firstname:this.firstname.value,lastname:this.lastname.value})};
inputPhoneSubject.prototype.storageToFields=function(){console.log("SUBJECT: STORAGE TO FIELDS");var a=lsi.get("subject","form");null!=a&&(this.number.value=a.number,this.username.value=a.username,this.firstname.value=a.firstname,this.lastname.value=a.lastname)};inputPhoneSubject.prototype.attach=function(){console.log("SUBJECT: ATTACH");lsi.createDataset("subject");var a=this;this.store_button.addEventListener("click",function(b){a.fieldsToStorage()},!1);this.storageToFields()};

View File

@ -0,0 +1,88 @@
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
=========================================================*/
function inputPhoneSubject(iNumber, iUsername, iFirstname, iLastname, store_button){
this.number = iNumber;
this.username = iUsername;
this.firstname = iFirstname;
this.lastname = iLastname;
this.store_button = store_button;
}
/* [1] Attributs
=========================================================*/
inputPhoneSubject.prototype = {
store_button: this.store_button, // Bouton d'ajout d'un formulaire
number: this.number,
username: this.username,
firstname: this.firstname,
lastname: this.lastname
};
/* [2] Gestion de l'enregistrement des formulaires de contact
=========================================================*/
inputPhoneSubject.prototype.fieldsToStorage = function(){
console.log('SUBJECT: FIELDS TO STORAGE');
// {1} Vérification des champs //
// Le numéro n'est pas vide
var validForm = this.number.value.length > 0;
// ET le pseudo et/ou le prénom et/ou le nom n'est pas vide
validForm = validForm && this.username.value.length+this.firstname.value.length+this.lastname.value.length > 0;
// Si le formulaire n'est pas valide, on ne l'enregistre pas
if( !validForm ) return false;
// {2} On récupère et met en forme les valeurs du deflater //
var obj = {
number: this.number.value,
username: this.username.value,
firstname: this.firstname.value,
lastname: this.lastname.value
};
// {3} On enregistre les données dans le 'localStorage' //
lsi.set('subject', 'form', obj);
};
/* [3] Gestion de l'affichage depuis le 'localStorage'
=========================================================*/
inputPhoneSubject.prototype.storageToFields = function(){
console.log('SUBJECT: STORAGE TO FIELDS');
// {1} On récupère les informations du sujet //
var subjectData = lsi.get('subject', 'form');
if( subjectData == null ) return;
// {2} On restore les valeurs //
this.number.value = subjectData.number;
this.username.value = subjectData.username;
this.firstname.value = subjectData.firstname;
this.lastname.value = subjectData.lastname;
};
/* [4] Point d'amorçage de la gestion des contacts
=========================================================*/
inputPhoneSubject.prototype.attach = function(){
console.log('SUBJECT: ATTACH');
/* (1) On initialise le jeu de données */
lsi.createDataset('subject');
/* (2) On attache l'évènement sur le bouton d'ajout de contact */
var ptr = this;
this.store_button.addEventListener('click', function(e){ ptr.fieldsToStorage(); }, false);
/* (3) On charge le sujet depuis la mémoire ('localStorage') */
this.storageToFields();
};

View File

@ -75,6 +75,30 @@
<!-- GESTION DES MINI-FICHES RELATIONS -->
<h3 data-n='3' class='color4'>Remplir les fiches relations rapides pour tous les contacts</h3>
<div class='arrow-container line'>
<span>&laquo;</span>
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
<span>16</span>
<span>17</span>
<span>18</span>
<span>19</span>
<span>20</span>
<span>&raquo;</span>
</div>
<span data-space></span>
<article class='mini-relation-panel'>

10
view/js/input-min.js vendored
View File

@ -1,7 +1,3 @@
function updateListener(b,c,a){b.removeEventListener(c,a);b.addEventListener(c,a)}
var ic=new inputChecker,FormDeflaterP={tags:["input"],attr:["data-name"]},importCallLog=$('input#call_log-import[type="file"]'),addContact=$("h4.add-contact"),contactContainer=$("article.contact-panel"),miniFicheContainer=$("article.mini-relation-panel"),ficheContainer=$("article.relation-panel"),subjectInput={number:$('article.subject-panel [data-name="number"]'),username:$('article.subject-panel [data-name="username"]'),firstname:$('article.subject-panel [data-name="firstname"]'),lastname:$('article.subject-panel [data-name="lastname"]'),
store:$('article.subject-panel [data-name="submit"]')};lsi.createDataset("subject");function storeSubject(){console.log("storing subject");var b=0<subjectInput.number.value.length,b=b&&0<subjectInput.username.value.length+subjectInput.firstname.value.length+subjectInput.lastname.value.length;if(!b)return!1;lsi.set("subject","form",{number:subjectInput.number.value,username:subjectInput.username.value,firstname:subjectInput.firstname.value,lastname:subjectInput.lastname.value})}
function restoreSubject(){var b=lsi.get("subject","form");null!=b&&(subjectInput.number.value=b.number,subjectInput.username.value=b.username,subjectInput.firstname.value=b.firstname,subjectInput.lastname.value=b.lastname)}restoreSubject();subjectInput.store.addEventListener("click",storeSubject,!1);var contactManager;include("/js/includes/input-phone-contact.js",function(){contactManager=new inputPhoneContact(contactContainer,addContact);contactManager.attach()});lsi.createDataset("mini-fiches");
function storeMiniFiches(){console.log("STORING ALL MINI-FICHES");for(var b=$$("article.mini-relation-panel .mini-fiche-relation "),c=0;c<b.length;c++){var a=(new FormDeflater(b[c],["input","select"],["data-name"])).deflate(),d=lsi.get("mini-fiches","form"+a.uid.value);console.log("deflated");console.log(a);!1===d&&(d.username="inconnu",d.firstname="inconnu",d.lastname="inconnu");a={uid:a.uid.value,firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:[a.sexe[0].status,a.sexe[1].status],
age:a.age.value,job:a.job.value,location:[a.loc[0].status,a.loc[1].status,a.loc[2].status,a.loc[3].status]};lsi.set("mini-fiches","form"+a.uid,a)}restoreMiniFiches()}function addNewMiniFiche(b,c,a,d,h,f,g,e){miniFicheContainer.innerHTML+=miniFicheBuilder.build({firstname:b,lastname:c,username:a,uid:d,age:"",sexe_A:f[0]?"true":"false",sexe_B:f[1]?"true":"false",job:g,loc_A:e[0]?"true":"false",loc_B:e[1]?"true":"false",loc_C:e[2]?"true":"false",loc_D:e[3]?"true":"false"})}
function restoreMiniFiches(){var b=lsi.keys("mini-fiches");miniFicheContainer.innerHTML="";for(var c=0;c<b.length;c++){var a=lsi.get("mini-fiches",b[c]);addNewMiniFiche(a.firstname,a.lastname,a.username,a.uid,a.age,a.sexe,a.job,a.location)}}restoreMiniFiches();importCallLog.addEventListener("change",function(b){api.send({path:"upload/call_log",file:importCallLog.files[0]},function(b){console.log(b);0==b.ModuleError&&importCallLog.addClass("active")})},!1);
function updateListener(b,a,c){b.removeEventListener(a,c);b.addEventListener(a,c)}var importCallLog=$('input#call_log-import[type="file"]'),ficheContainer=$("article.relation-panel"),subjectManager,contactManager,miniManager,ficheManager;function dynamicUpdate(){console.log("dynamic update");miniManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.sync();miniManager.storageToFields();contactManager.storageToFields()}
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"));miniManager.attach()})})})});importCallLog.addEventListener("change",function(b){api.send({path:"upload/call_log",file:importCallLog.files[0]},function(a){console.log(a);0==a.ModuleError&&importCallLog.addClass("active")})},!1);

View File

@ -29,49 +29,44 @@ function updateListener(element, eventType, handler){
/* [1] Initialisation des utilitaires
=========================================================*/
/* (1) Instanciation de inputChecker */
var ic = new inputChecker();
/* (2) Paramètres de FormDeflater */
var FormDeflaterP = { tags: ['input'], attr: ['data-name'] };
/* [2] Indexation des inputs + Containers
/* [1] Initialisation des utilitaires et variables
=========================================================*/
/* (1) Input de type fichier pour l'import */
var importCallLog = $('input#call_log-import[type="file"]');
/* (2) Bouton d'ajout de contact */
var addContact = $('h4.add-contact');
/* (3) Conteneur des formulaires de contact */
var contactContainer = $('article.contact-panel');
/* (4) Conteneur des MINI fiches relation */
var miniFicheContainer = $('article.mini-relation-panel');
/* (5) Conteneur des fiches relation */
/* (2) Conteneur des fiches relation */
var ficheContainer = $('article.relation-panel');
/* (3) Initialisation des managers */
var subjectManager;
var contactManager;
var miniManager;
var ficheManager;
function dynamicUpdate(){
console.log('dynamic update');
/* (1) On enregistre les MINI fiches relation */
miniManager.fieldsToStorage();
/* (2) On enregister les FICHES relation */
// ficheManager.fieldsToStorage();
/* (3) On enregistre les CONTACTS */
contactManager.fieldsToStorage();
/* (4) On synchronise les MINI avec les CONTACTS */
miniManager.sync();
/* (5) On synchronise les FICHE avec les CONTACTS */
// ficheManager.sync();
/* (6) On affiche le tout */
miniManager.storageToFields();
// ficheManager.storageToFields();
contactManager.storageToFields();
}
@ -88,59 +83,59 @@ var ficheContainer = $('article.relation-panel');
/* [3] Gestion des formulaires du sujet
=========================================================*/
/* (0) Les input du formulaire du sujet */
var subjectInput = {
number: $('article.subject-panel [data-name="number"]'),
username: $('article.subject-panel [data-name="username"]'),
firstname: $('article.subject-panel [data-name="firstname"]'),
lastname: $('article.subject-panel [data-name="lastname"]'),
store: $('article.subject-panel [data-name="submit"]')
};
/* (1) Gestion de l'enregistrement du sujet en local ('localStorage') */
lsi.createDataset('subject');
function storeSubject(){
console.log('storing subject');
// {1} Vérification des champs //
// Le numéro n'est pas vide
var validForm = subjectInput.number.value.length > 0;
// ET le pseudo et/ou le prénom et/ou le nom n'est pas vide
validForm = validForm && subjectInput.username.value.length+subjectInput.firstname.value.length+subjectInput.lastname.value.length > 0;
// Si le formulaire n'est pas valide, on ne l'enregistre pas
if( !validForm ) return false;
// {2} On récupère et met en forme les valeurs du deflater //
var obj = {
number: subjectInput.number.value,
username: subjectInput.username.value,
firstname: subjectInput.firstname.value,
lastname: subjectInput.lastname.value
};
// {3} On enregistre les données dans le 'localStorage' //
lsi.set('subject', 'form', obj);
}
/* (2) Gestion de l'affichage (et mise à jour) du sujet (depuis 'localStorage') */
function restoreSubject(){
// {1} On récupère les informations du sujet //
var subjectData = lsi.get('subject', 'form');
if( subjectData == null ) return;
// {2} On restore les valeurs //
subjectInput.number.value = subjectData.number;
subjectInput.username.value = subjectData.username;
subjectInput.firstname.value = subjectData.firstname;
subjectInput.lastname.value = subjectData.lastname;
}restoreSubject();
// var subjectInput = {
// number: $('article.subject-panel [data-name="number"]'),
// username: $('article.subject-panel [data-name="username"]'),
// firstname: $('article.subject-panel [data-name="firstname"]'),
// lastname: $('article.subject-panel [data-name="lastname"]'),
//
// store: $('article.subject-panel [data-name="submit"]')
// };
//
// /* (1) Gestion de l'enregistrement du sujet en local ('localStorage') */
// lsi.createDataset('subject');
// function storeSubject(){
// console.log('storing subject');
//
// // {1} Vérification des champs //
// // Le numéro n'est pas vide
// var validForm = subjectInput.number.value.length > 0;
// // ET le pseudo et/ou le prénom et/ou le nom n'est pas vide
// validForm = validForm && subjectInput.username.value.length+subjectInput.firstname.value.length+subjectInput.lastname.value.length > 0;
//
// // Si le formulaire n'est pas valide, on ne l'enregistre pas
// if( !validForm ) return false;
//
// // {2} On récupère et met en forme les valeurs du deflater //
// var obj = {
// number: subjectInput.number.value,
// username: subjectInput.username.value,
// firstname: subjectInput.firstname.value,
// lastname: subjectInput.lastname.value
// };
//
// // {3} On enregistre les données dans le 'localStorage' //
// lsi.set('subject', 'form', obj);
//
// }
//
// /* (2) Gestion de l'affichage (et mise à jour) du sujet (depuis 'localStorage') */
// function restoreSubject(){
// // {1} On récupère les informations du sujet //
// var subjectData = lsi.get('subject', 'form');
//
// if( subjectData == null ) return;
//
// // {2} On restore les valeurs //
// subjectInput.number.value = subjectData.number;
// subjectInput.username.value = subjectData.username;
// subjectInput.firstname.value = subjectData.firstname;
// subjectInput.lastname.value = subjectData.lastname;
// }restoreSubject();
/* (n) On attache l'évènement d'enregistrement du formulaire du sujet */
subjectInput.store.addEventListener('click', storeSubject, false);
// subjectInput.store.addEventListener('click', storeSubject, false);
@ -151,28 +146,85 @@ subjectInput.store.addEventListener('click', storeSubject, false);
var contactManager;
/* [4] Gestion des formulaires de contact
/* [2] Inclusion des scripts externes et lancement
=========================================================*/
include('/js/includes/input-phone-subject.js', function(){
include('/js/includes/input-phone-contact.js', function(){
/* (1) On crée une instance du gestionnaire des CONTACTS */
contactManager = new inputPhoneContact(
contactContainer,
addContact
include('/js/includes/input-phone-mini.js', function(){
include('/js/includes/input-phone-fiche.js', function(){
/* [3] Gestion du formulaire du sujet
=========================================================*/
/* (1) On crée une instance du manager du sujet */
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"]')
);
/* (2) On le démarre */
contactManager.attach();
});
subjectManager.attach();
/* [4] Gestion des formulaires de contact
=========================================================*/
/* (1) On crée une instance du gestionnaire des CONTACTS */
contactManager = new inputPhoneContact(
$('article.contact-panel'),
$('h4.add-contact')
);
/* (2) On le démarre */
contactManager.attach(dynamicUpdate);
/* [5] Gestion des mini fiches relation
=========================================================*/
/* (1) On crée une instance du gestionnaire des mini fiches relation */
miniManager = new inputPhoneMini(
$('article.mini-relation-panel')
);
miniManager.attach();
/* [6] Gestion des fiches relation
=========================================================*/
/* (1) On crée une instance du gestionnaire des fiches relation */
}) }) }) });
// ETAPE 1 : INITIALISATION (ON RESTAURE LES DONNEES)
// 1. contact.storageToFields();
// 2. contact.add();
// 3. mini.storageToFields();
// 4. fiche.storageToFields();
// ETAPE 2 : ENREGISTREMENT + MISE À JOUR
// 1. mini.fieldsToStorage();
// 2. fiche.fieldsToStorage();
// 3. contact.fieldsToStorage();
// 4. mini.sync();
// 5. fiche.sync();
@ -325,115 +377,115 @@ include('/js/includes/input-phone-contact.js', function(){
/* [5] Gestion des MINI fiches relation
=========================================================*/
/* (1) Gestion de l'enregistrement des contacts en local ('localStorage') */
lsi.createDataset('mini-fiches');
function storeMiniFiches(){
console.log('STORING ALL MINI-FICHES');
// {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']);
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
var deflated = deflater.deflate();
// TODO: Condition pour que le formulaire soit valide
var validForm = true;
// Si le formulaire n'est pas valide, on ne l'enregistre pas
if( !validForm ) continue;
// {4} On récupère les données du LSI si elles existent //
var existingData = lsi.get('mini-fiches', 'form'+deflated.uid.value);
console.log('deflated');
console.log(deflated);
// Si n'existe pas, on initialise
if( existingData === false ){
existingData.username = 'inconnu';
existingData.firstname = 'inconnu';
existingData.lastname = 'inconnu';
}
// {5} On récupère et met en forme les valeurs du deflater //
var obj = {
uid: deflated.uid.value,
firstname: existingData.firstname,
lastname: existingData.lastname,
username: existingData.username,
sexe: [
deflated.sexe[0].status, // VRAI SI HOMME
deflated.sexe[1].status // VRAI SI FEMME
],
age: deflated.age.value,
job: deflated.job.value,
location: [
deflated.loc[0].status, // VRAI si choix 1
deflated.loc[1].status, // VRAI si choix 2
deflated.loc[2].status, // VRAI si choix 3
deflated.loc[3].status // VRAI si choix 4
]
};
// {6} On enregistre les données dans le 'localStorage' //
lsi.set('mini-fiches', 'form'+obj.uid, obj);
}
// {7} On met à jour le rendu //
restoreMiniFiches();
}
/* (2) Fonction pour l'ajout d'un contact */
function addNewMiniFiche(firstname, lastname, username, uid, age, sexe, job, location){
// {1} Création physique //
miniFicheContainer.innerHTML += miniFicheBuilder.build({
firstname: firstname,
lastname: lastname,
username: username,
uid: uid,
age: '',
sexe_A: sexe[0] ? 'true' : 'false',
sexe_B: sexe[1] ? 'true' : 'false',
job: job,
loc_A: location[0] ? 'true' : 'false',
loc_B: location[1] ? 'true' : 'false',
loc_C: location[2] ? 'true' : 'false',
loc_D: location[3] ? 'true' : 'false'
});
}
/* (3) Gestion de l'affichage (et mise à jour) des contacts (depuis 'localStorage') */
function restoreMiniFiches(){
// {1} Pour chaque contact du 'localStorage' //
var existingMiniFiches = lsi.keys('mini-fiches');
// On réinitialise le HTML
miniFicheContainer.innerHTML = '';
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 //
addNewMiniFiche(
ficheData.firstname,
ficheData.lastname,
ficheData.username,
ficheData.uid,
ficheData.age,
ficheData.sexe,
ficheData.job,
ficheData.location
);
}
}restoreMiniFiches();
// lsi.createDataset('mini-fiches');
// function storeMiniFiches(){
// console.log('STORING ALL MINI-FICHES');
//
// // {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']);
//
// // {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
// var deflated = deflater.deflate();
//
// // TODO: Condition pour que le formulaire soit valide
// var validForm = true;
//
// // Si le formulaire n'est pas valide, on ne l'enregistre pas
// if( !validForm ) continue;
//
// // {4} On récupère les données du LSI si elles existent //
// var existingData = lsi.get('mini-fiches', 'form'+deflated.uid.value);
// console.log('deflated');
// console.log(deflated);
// // Si n'existe pas, on initialise
// if( existingData === false ){
// existingData.username = 'inconnu';
// existingData.firstname = 'inconnu';
// existingData.lastname = 'inconnu';
// }
//
// // {5} On récupère et met en forme les valeurs du deflater //
// var obj = {
// uid: deflated.uid.value,
// firstname: existingData.firstname,
// lastname: existingData.lastname,
// username: existingData.username,
// sexe: [
// deflated.sexe[0].status, // VRAI SI HOMME
// deflated.sexe[1].status // VRAI SI FEMME
// ],
// age: deflated.age.value,
// job: deflated.job.value,
// location: [
// deflated.loc[0].status, // VRAI si choix 1
// deflated.loc[1].status, // VRAI si choix 2
// deflated.loc[2].status, // VRAI si choix 3
// deflated.loc[3].status // VRAI si choix 4
// ]
// };
//
// // {6} On enregistre les données dans le 'localStorage' //
// lsi.set('mini-fiches', 'form'+obj.uid, obj);
//
// }
//
// // {7} On met à jour le rendu //
// restoreMiniFiches();
// }
//
//
//
// /* (2) Fonction pour l'ajout d'un contact */
// function addNewMiniFiche(firstname, lastname, username, uid, age, sexe, job, location){
// // {1} Création physique //
// miniFicheContainer.innerHTML += miniFicheBuilder.build({
// firstname: firstname,
// lastname: lastname,
// username: username,
// uid: uid,
// age: '',
// sexe_A: sexe[0] ? 'true' : 'false',
// sexe_B: sexe[1] ? 'true' : 'false',
// job: job,
// loc_A: location[0] ? 'true' : 'false',
// loc_B: location[1] ? 'true' : 'false',
// loc_C: location[2] ? 'true' : 'false',
// loc_D: location[3] ? 'true' : 'false'
// });
//
// }
//
//
// /* (3) Gestion de l'affichage (et mise à jour) des contacts (depuis 'localStorage') */
// function restoreMiniFiches(){
// // {1} Pour chaque contact du 'localStorage' //
// var existingMiniFiches = lsi.keys('mini-fiches');
//
// // On réinitialise le HTML
// miniFicheContainer.innerHTML = '';
//
// 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 //
// addNewMiniFiche(
// ficheData.firstname,
// ficheData.lastname,
// ficheData.username,
// ficheData.uid,
// ficheData.age,
// ficheData.sexe,
// ficheData.job,
// ficheData.location
// );
// }
//
// }