NxTIC/public_html/js/includes/input-phone-fiche.js

759 lines
29 KiB
JavaScript
Raw Permalink Normal View History

/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
=========================================================*/
function inputPhoneFiche(container, navContainer){
this.container = container;
this.nav_container = navContainer;
this.top_size = 10;
}
/* [1] Attributs
=========================================================*/
inputPhoneFiche.prototype = {
container: this.container, // Conteneur des fiche fiches relation
nav_container: this.nav_container, // Conteneur de la navigation entre les fiches
selected: 0, // UID de la FICHE sélectionnée
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
defaultData: { // Valeurs par défaut
sexe: '2',
age: '.',
job: '.',
famsit: '0', // Choix 1 à 3
studies: '0',
reltype: '0', // Choix 1 à 9
reltypeSpecial: '',
city: '',
quartier: '',
cp: '',
loc: '0',
duration: ['', ''],
context: '0', // Choix 1 à 14
contextSpecial: ['', '', ''],
freq: ['4', '9', '14', '19', '24'], // 1er choix des 4 pour chaque question
connect: ['1', '3', '5', '7', '9', '11'], // Le deuxième choix (Oui/Non) donc 'Non' par défaut pour chaque question
connectSpecial: ['', ''],
timestamp: 0,
valid: false
}
};
/* [2] Gestion de l'enregistrement des formulaires fiche fiches relation
=========================================================*/
inputPhoneFiche.prototype.fieldsToStorage = function(){
2016-10-10 08:58:44 +00:00
console.group('[phone.fiche] fields to storage');
// {1} Pour chaque formulaire de contact présent //
var existingFiches = $$('[data-sublink="phone"] article.relation-panel .fiche-relation');
for( var i = 0 ; i < existingFiches.length ; i++ ){
// {2} On initialise notre deflater pour récupérer les valeurs //
var deflater = new FormDeflater(existingFiches[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();
// On crée le hash
var deflatedHash = crc32(JSON.stringify(deflated));
// console.log( deflated );
// {4} On récupère les données du LSI si elles existent //
var existingData = lsi.get('p_fiches', deflated.uid);
// Si n'existe pas, on passe au suivant
if( existingData === false )
continue;
// {5} On récupère et met en forme les valeurs du deflater //
// Si le hash est le même, on ne fait rien
if( existingData.hash != null && existingData.hash == deflatedHash )
return;
var obj = {
contact: parseInt(deflated.contact),
uid: parseInt(deflated.uid),
sexe: deflated.sexe,
age: deflated.age,
job: deflated.job,
famsit: deflated.famsit,
studies: deflated.studies,
reltype: deflated.reltype,
reltypeSpecial: deflated.reltypeSpecial,
city: deflated.city,
quartier: deflated.quartier,
cp: deflated.cp,
loc: deflated.loc,
duration: deflated.duration,
context: deflated.context,
contextSpecial: deflated.contextSpecial,
freq: deflated.freq,
connect: deflated.connect,
connectSpecial: deflated.connectSpecial,
hash: deflatedHash
};
/* (6) On vérifie la validité des données et on l'enregistre dans l'objet avec la date de modification */
obj.valid = this.check(obj);
// On met à jour la date de modification, si on a pas qu'@uid de différent
if( diff(existingData, obj, ['hash', 'valid', 'timestamp']).length > 0 ){
console.log( diff(existingData, obj, ['hash', 'valid', 'timestamp']) );
console.warn('> FICHE UPDATE');
// console.warn('fiche-ts', existingData.timestamp, obj.timestamp);
obj.timestamp = Date.now();
}else if( existingData['timestamp'] == undefined ){
// console.warn('fiche-refresh');
obj.timestamp = this.defaultData.timestamp;
}
/* (7) On enregistre les données dans le 'localStorage' */
lsi.set('p_fiches', obj.uid, obj);
}
2016-10-10 08:58:44 +00:00
console.groupEnd();
};
/* [3] Gestion de l'ajout physique d'une nouvelle fiche
=========================================================*/
/*
*
* @objectData<Object> Objet contenant les informations nécessaires à l'affichage
*
*/
inputPhoneFiche.prototype.add = function(objectData){
2016-10-10 08:58:44 +00:00
// console.log('FICHE: ADD');
// Si pas d'UID ou d'UID de contact, on retourne une erreur
if( objectData.uid == null || isNaN(objectData.uid) || objectData.contact == null || isNaN(objectData.contact) )
return false;
/* (0) Gestion du formattage des valeur */
// {1} Champs de texte //
objectData.city = (objectData.city != null) ? objectData.city : this.defaultData.city;
objectData.quartier = (objectData.quartier != null) ? objectData.quartier : this.defaultData.quartier;
objectData.cp = (objectData.cp != null) ? objectData.cp : this.defaultData.cp;
objectData.duration[0] = (objectData.duration[0] != null) ? objectData.duration[0] : this.defaultData.duration[0];
objectData.duration[1] = (objectData.duration[1] != null) ? objectData.duration[1] : this.defaultData.duration[1];
objectData.reltypeSpecial = (objectData.reltypeSpecial != null) ? objectData.reltypeSpecial : this.defaultData.reltypeSpecial;
objectData.contextSpecial[0] = (objectData.contextSpecial[0] != null) ? objectData.contextSpecial[0] : this.defaultData.contextSpecial[0];
objectData.contextSpecial[1] = (objectData.contextSpecial[1] != null) ? objectData.contextSpecial[1] : this.defaultData.contextSpecial[1];
objectData.contextSpecial[2] = (objectData.contextSpecial[2] != null) ? objectData.contextSpecial[2] : this.defaultData.contextSpecial[2];
objectData.connectSpecial[0] = (objectData.connectSpecial[0] != null) ? objectData.connectSpecial[0] : this.defaultData.connectSpecial[0];
objectData.connectSpecial[1] = (objectData.connectSpecial[1] != null) ? objectData.connectSpecial[1] : this.defaultData.connectSpecial[1];
// {2} Champs <select> //
objectData.job = (objectData.job != null) ? objectData.job : this.defaultData.job;
objectData.studies = (objectData.studies != null) ? objectData.studies : this.defaultData.studies;
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
// {3} Champs <radio> //
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
objectData.famsit = (objectData.famsit != null) ? objectData.famsit : this.defaultData.famsit;
objectData.reltype = (objectData.reltype != null) ? objectData.reltype : this.defaultData.reltype;
objectData.loc = (objectData.loc != null) ? objectData.loc : this.defaultData.loc;
objectData.context = (objectData.context != null) ? objectData.context : this.defaultData.context;
objectData.freq = (objectData.freq != null) ? objectData.freq : this.defaultData.freq;
objectData.connect = (objectData.connect != null) ? objectData.connect : this.defaultData.connect;
// {4} On récupère username/firstname/lastname du contact associé //
var associatedContact = lsi.get('p_contacts', objectData.contact);
// Si on ne trouve pas le contact, on ne fais rien
if( associatedContact === false )
return false;
// {2} Si lié à un contact d'une autre étude, on utilise ses informations //
2016-10-02 11:36:14 +00:00
var importedFiche = '';
if( !isNaN(associatedContact.existing) ){
var existingData = lsi.get('p_friends', associatedContact.existing);
// On récupère les données communes
associatedContact.username = existingData.name;
objectData.age = existingData.age;
objectData.sexe = existingData.sexe;
objectData.loc = existingData.dist;
// DISTANCE (LOC) : Si valeur
if( !isNaN(existingData.reltype) ){
objectData.reltype = existingData.reltype;
objectData.reltypeSpecial = '';
// DISTANCE (LOC) : Si extra
}else{
objectData.reltype = 10;
objectData.reltypeSpecial = existingData.reltype;
}
// On met à jour les études uniquement si 'studies2' est défini //
if( existingData.studies2 != null ){
objectData.studies = existingData.studies2;
objectData.job = existingData.job;
objectData.famsit = existingData.famsit;
objectData.city = existingData.city;
objectData.cp = existingData.cp;
objectData.quartier = existingData.quartier;
objectData.duration[0] = existingData.duration[0];
objectData.duration[1] = existingData.duration[1];
objectData.context = existingData.context;
objectData.contextSpecial = existingData.contextExtra;
objectData.connect = existingData.connect;
objectData.connectSpecial = existingData.connectExtra;
objectData.freq = existingData.freq;
2016-10-02 11:36:14 +00:00
importedFiche = 'Contact importé: non modifiable!';
}else{
importedFiche = 'Contact importé (incomplet): modifiable partiellement!';
}
}
// {5} Création physique //
this.container.innerHTML += pFicheBuilder.build({
2016-10-02 11:36:14 +00:00
importedfiche: importedFiche,
name: associatedContact.username,
countcall: associatedContact.countcall,
countsms: associatedContact.countsms,
uid: objectData.uid,
contact: objectData.contact, // uid du contact associé
city: objectData.city,
quartier: objectData.quartier,
cp: objectData.cp,
duration0: objectData.duration[0],
duration1: objectData.duration[1],
reltypespecial: objectData.reltypeSpecial,
contextspecial0: objectData.contextSpecial[0],
contextspecial1: objectData.contextSpecial[1],
contextspecial2: objectData.contextSpecial[2],
connectspecial0: objectData.connectSpecial[0],
connectspecial1: objectData.connectSpecial[1]
});
/* {6} On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
var selectedOption = $('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+objectData.job+'"]');
if( selectedOption != null )
selectedOption.setAttribute('selected', 'selected');
/* {7} On sélectionne la valeur dans le select (manuellement) des ETUDES */
selectedOption = $('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+objectData.studies+'"]');
if( selectedOption != null )
selectedOption.setAttribute('selected', 'selected');
/* {8} On sélectionne la valeur dans le select (manuellement) de l'AGE */
selectedOption = $('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+objectData.age+'"]');
if( selectedOption != null )
selectedOption.setAttribute('selected', 'selected');
/* {9} On sélectionna la valeur des boutons <radio> pour le SEXE */
var sexeCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');
for( var i = 0 ; i < sexeCreated.length ; i++ )
if( sexeCreated[i].value == objectData.sexe ) sexeCreated[i].setAttribute('checked', 'checked');
else sexeCreated[i].removeAttribute('checked');
/* {10} On sélectionna la valeur des boutons <radio> pour la SITUATION FAMILIALE */
var famsitCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');
for( var i = 0 ; i < famsitCreated.length ; i++ )
if( famsitCreated[i].value == objectData.famsit ) famsitCreated[i].setAttribute('checked', 'checked');
else famsitCreated[i].removeAttribute('checked');
/* {11} On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
var reltypeCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');
for( var i = 0 ; i < reltypeCreated.length ; i++ )
if( reltypeCreated[i].value == objectData.reltype ) reltypeCreated[i].setAttribute('checked', 'checked');
else reltypeCreated[i].removeAttribute('checked');
/* {12} On sélectionna la valeur des boutons <radio> pour la LOCATION */
var locCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');
for( var i = 0 ; i < locCreated.length ; i++ )
if( locCreated[i].value == objectData.loc ) locCreated[i].setAttribute('checked', 'checked');
else locCreated[i].removeAttribute('checked');
/* {13} On sélectionna la valeur des boutons <radio> pour le CONTEXTE DE RENCONTRE */
var contextCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="context"]');
for( var i = 0 ; i < contextCreated.length ; i++ )
if( contextCreated[i].value == objectData.context ) contextCreated[i].setAttribute('checked', 'checked');
else contextCreated[i].removeAttribute('checked');
/* {14} On sélectionna la valeur des boutons <radio> pour les FREQUENCES */
var freqCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="freq"]');
for( var i = 0 ; i < freqCreated.length ; i++ )
if( objectData.freq.indexOf(freqCreated[i].value) > -1 ) freqCreated[i].setAttribute('checked', 'checked');
else freqCreated[i].removeAttribute('checked');
/* {15} On sélectionna la valeur des boutons <radio> pour les CONNECTIONS */
var connectCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="connect"]');
for( var i = 0 ; i < connectCreated.length ; i++ )
if( objectData.connect.indexOf(connectCreated[i].value) > -1 ) connectCreated[i].setAttribute('checked', 'checked');
else connectCreated[i].removeAttribute('checked');
};
/* [4] Gestion de l'affichage depuis le 'localStorage'
=========================================================*/
inputPhoneFiche.prototype.storageToFields = function(){
2016-10-10 08:58:44 +00:00
console.group('[phone.fiche] storage to fields');
// {1} Pour chaque contact du 'localStorage' //
var ficheData = lsi.export('p_fiches');
// On réinitialise le HTML
this.container.innerHTML = '';
for( var key in ficheData )
if( ficheData[key].uid == this.selected )
this.add(ficheData[key]);
// {4} On met à jour la navigation //
this.updateNavBar();
2016-10-10 08:58:44 +00:00
console.groupEnd();
};
/* [5] Synchronisation des CONTACT vers les MINI fiches
=========================================================*/
inputPhoneFiche.prototype.sync = function(){
console.group('[phone.fiche] synchronisation');
{ /* (1) Initialisation
---------------------------------------------------------*/
/* (1) On récupère tous les CONTACTS */
var contacts = lsi.export('p_contacts');
/* (2) Contiendra les uids des fiches qui seront crées */
var addedFicheUids = [];
var ficheData, contactData, miniData, i;
}
{ /* (2) Mise à jour en fonction des contacts APRÈS SAISIE
---------------------------------------------------------*/
// Nombre maximum de fiches (40, sauf si moins de 40 contacts, dans ce cas, le nombre de contacts);
var nbMaxFiche = lsi.keys('p_contacts').length < 2*this.top_size ? lsi.keys('p_contacts').length : 2*this.top_size;
/* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée */
for( var uid in contacts ){
/* (1) On cherche un uid de fiche non existant dans l'intervalle [0;40[ */
ficheUid = 0;
while( addedFicheUids.indexOf(ficheUid) > -1 && ficheUid < nbMaxFiche )
ficheUid++;
// On enregistre le nouvel UID dans les uid crées
addedFicheUids.push(ficheUid);
/* (2) On récupère les informations de la FICHE (si elle existe) */
var ficheData = lsi.get('p_fiches', ficheUid);
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
!ficheData && ( ficheData = this.defaultData );
/* (3) On met à jour la fiche ET on l'enregistre */
ficheData.uid = ficheUid;
ficheData.contact = parseInt(uid);
lsi.set('p_fiches', ficheUid, ficheData);
/* (4) Si on a déja crée 20+20 fiches, on arrête */
if( addedFicheUids.length >= nbMaxFiche )
break;
}
}
{ /* (3) Gestion des liens entre mini-fiches et fiches
---------------------------------------------------------*/
var hasSameUsername, hasSameLink;
ficheData = lsi.export('p_fiches');
miniData = lsi.export('p_mini-fiches');
// Pour chaque mini-fiche
for( var key in miniData ){
/* (1) On récupère le contact associé */
var associatedContact = lsi.get('p_contacts', miniData[key].contact);
// Si erreur, on passe au suivant
if( !associatedContact )
continue;
/* (3) On récupère les/la fiche(s) clone(s) si existe */
var clone = [];
// Pour chaque fiche
for( i in ficheData ){
// on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement)
contactData = lsi.get('p_contacts', ficheData[i].contact);
if( i == key || !contactData )
continue;
// meme pseudo
hasSameUsername = contactData.username.length > 0 && associatedContact.username === contactData.username;
// meme lien de contact
hasSameLink = !isNaN(contactData.existing) && associatedContact.existing === contactData.existing;
// si ont le même contact, alors on enregistre le clone (sauf si la même fiche)
( hasSameUsername || hasSameLink ) && clone.push( ficheData[i] );
}
// si aucun clone, on quitte
if( clone.length === 0 )
continue;
/* (4) On récupère le modèle (dernier modifié) */
var mini_ts = ( miniData[key].hasOwnProperty('timestamp') ) ? miniData[key].timestamp : 0;
var clones_ts = []; // contiendra les temps des clones
var mini_update = true; // true si dernier modifié
for( i in clone ){
clones_ts[i] = clone[i].hasOwnProperty('timestamp') ? clone[i].timestamp : 0;
mini_update = mini_update && mini_ts > clones_ts[i];
}
var last_index = clones_ts.indexOf( Math.max.apply(Math, clones_ts) );
/* (5.1) Si mini est le modèle -> On copie les données de MINI dans les CLONES */
var copied;
if( mini_update ){
for( i in clone ){
console.warn('copying mini#'+miniData[key].uid+' to fiche#'+clone[i].uid, mini_ts-global_start_timestamp, clones_ts[i]-global_start_timestamp);
copied = clone[i];
copied.age = miniData[key].age;
copied.sexe = miniData[key].sexe;
copied.loc = miniData[key].loc;
copied.reltype = miniData[key].reltype;
copied.reltypeSpecial = miniData[key].reltypeSpecial;
// copied.timestamp = Date.now();
console.warn(copied);
lsi.set('p_fiches', copied.uid, copied);
}
// clone.timestamp = copied.timestamp+1;
// lsi.set('p_mini-fiches', clone.uid, clone);
/* (5.2) Si un clone est le modèle > On copie les données de la FICHE dans la fiche (autres clones) et dans MINI */
}else if( last_index > -1 ){
// {1} On copie dans MINI //
console.warn('copying fiche#'+clone[last_index].uid+' to mini#'+miniData[key].uid, clones_ts[last_index]-global_start_timestamp, mini_ts-global_start_timestamp);
copied = miniData[key];
copied.age = clone[last_index].age;
copied.sexe = clone[last_index].sexe;
copied.loc = clone[last_index].loc;
copied.reltype = clone[last_index].reltype;
copied.reltypeSpecial = clone[last_index].reltypeSpecial;
// copied.timestamp = Date.now();
lsi.set('p_mini-fiches', copied.uid, copied);
// {2} On copie dans les autres fiches //
for( i in clone ){
// sauf le modele
if( i == last_index ) continue;
console.warn('copying fiche#'+clone[last_index].uid+' to fiche#'+clone[i].uid, clones_ts[last_index]-global_start_timestamp, clones_ts[i]-global_start_timestamp);
copied = clone[last_index];
copied.uid = clone[i].uid;
// copied.timestamp = Date.now();
lsi.set('p_fiches', copied.uid, copied);
}
}
}
}
2016-10-10 08:58:44 +00:00
// { /* (4) Gestion des fiches dupliquées
// ---------------------------------------------------------*/
// ficheData = lsi.export('p_fiches');
//
// for( var key in ficheData ){
//
// /* (1) On récupère le contact associé */
// var associatedContact = lsi.get('p_contacts', ficheData[key].contact);
//
// // Si erreur, on passe au suivant
// if( !associatedContact )
// continue;
//
// /* (3) On récupère la/les autre(s) fiche(s) (clone(s)) */
// var clone = null;
// var inCall = parseInt( ficheData[key].uid ) < this.top_size; // vrai si dans les APPELS, sinon dans les SMS
//
// for( var i in ficheData ){
//
// // si on est pas dans le bonne tranche, on passe au suivant
// if( inCall && i < this.top_size || !inCall && i >= this.top_size )
// continue;
//
// // on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement)
// contactData = lsi.get('p_contacts', ficheData[i].contact);
//
// if( i == key || !contactData )
// continue;
//
// // meme pseudo
// hasSameUsername = contactData.username.length > 0 && associatedContact.username === contactData.username;
// // meme lien de contact
// hasSameLink = !isNaN(contactData.existing) && associatedContact.existing === contactData.existing;
//
// // si ont le même contact, alors on enregistre le clone (sauf si la même fiche)
// ( hasSameUsername || hasSameLink ) && ( clone = ficheData[i] );
//
// if( clone !== null )
// break;
//
// }
//
//
// /* (4) Si c'est le clone qui a été modifié en dernier, on ne fait rien */
// var fiche_ts = ( ficheData[key].hasOwnProperty('timestamp') ) ? ficheData[key].timestamp : 0;
// var clone_ts = ( clone instanceof Object && clone.hasOwnProperty('timestamp') ) ? clone.timestamp : 0;
// if( clone === null || clone_ts > fiche_ts )
// continue;
//
// console.warn('copying fiche#'+ficheData[key].uid+' to fiche#'+clone.uid, fiche_ts-global_start_timestamp, clone_ts-global_start_timestamp);
//
//
// /* (5) On copie les données de la FICHE dans le CLONE */
// var copied = ficheData[key];
// copied.uid = clone.uid;
// // copied.timestamp = Date.now();
// lsi.set('p_fiches', copied.uid, copied);
//
// // ficheData[key].timestamp = copied.timestamp;
// // lsi.set('p_fiches', ficheData[key].uid, ficheData[key]);
//
// }
//
// }
//
console.groupEnd();
};
/* [6] Gestion de la navigation entre les fiches
=========================================================*/
inputPhoneFiche.prototype.nav = function(element){
/* (1) On vérifie que l'élément contient un nombre et existe */
if( !(element instanceof Element) )
return false;
if( !element.getData('n') || isNaN(element.getData('n')) || element.parentNode.id != 'p_nav-fiche' )
return false;
/* (2) On désactive tous les éléments actifs */
var activeElements = $$('[data-sublink="phone"] #p_nav-fiche > span.active');
for( var i = 0 ; i < activeElements.length ; i++ )
activeElements[i].remClass('active');
/* (3) On active l'élément courant */
element.addClass('active');
this.selected = parseInt(element.getData('n'));
};
/* [7] Mise à jour de la navigation
=========================================================*/
inputPhoneFiche.prototype.updateNavBar = function(){
var ficheData = lsi.export('p_fiches');
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
this.nav_container.innerHTML = '';
var keys = Object.keys(ficheData);
for( var k = 0 ; k < keys.length ; k++ ){
var i = parseInt( keys[k] );
// Si 1ère valeur du top 20 des APPELS, on ajoute le bandeau "APPELS"
if( i == 0 )
this.nav_container.innerHTML += '<span>APPELS</span>';
// Si fin du top 20 des APPELS, on met un espace et un border-right
if( i < 20 && k < keys.length-1 && keys[k+1] >= 20 )
this.nav_container.innerHTML += '<span data-n="'+i+'" class="lc">'+(i%20 + 1)+'</span>&nbsp;&nbsp;';
// Si début du top 20 des SMS, on met le label 'SMS' et un border-left
else if( i == 20 ){
this.nav_container.innerHTML += '<br><span class="fc">&nbsp;&nbsp; SMS &nbsp;&nbsp;</span>';
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%20 + 1)+'</span>';
// Sinon, on ajoute juste le bouton
}else
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%20 + 1)+'</span>';
}
/* (3) On montre les FICHES qui sont correctes */
for( var key in ficheData ){
var currentElement = $('[data-sublink="phone"] #p_nav-fiche [data-n="'+ficheData[key].uid+'"]');
if( currentElement == null )
continue;
// Si on ne trouve pas le bouton
// Si la FICHE est valide
if( ficheData[key].valid === true ) currentElement.addClass('done');
// Si elle est invalide
else currentElement.remClass('done');
}
/* (4) On séléctionne par défaut le dernier sélectionné */
this.nav( $('[data-sublink="phone"] #p_nav-fiche [data-n="'+this.selected+'"]') );
};
/* [8] Vérification des données du formulaire
=========================================================*/
inputPhoneFiche.prototype.check = function(ficheData){
// {1} Vérification des <input> //
// 1. 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;
// {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;
// 8. Le <select> pour l'AGE n'est pas indéfini
if( ficheData.age == '.' )
return false;
// {3} Vérification des <input> radio //
// 9. Le SEXE a un et un seul choix
if( ficheData.sexe == '' )
return false;
// 10. La SITUATION FAMILIALE a un et un seul choix
if( ficheData.famsit == '' )
return false;
// 11. Le TYPE DE RELATION a un et un seul choix
if( ficheData.reltype == '' )
return false;
// 12. La DISTANCE DE DOMICILE (location) a un et un seul choix
if( ficheData.loc == '' )
return false;
// 13. Le CONTEXTE DE RENCONTRE a un et un seul choix
if( ficheData.context == '' )
return false;
// 14. Les FRÉQUENCES ont un et un seul choix (par question de fréquence)
for( var i = 0 ; i < ficheData.freq.length ; i++ )
if( ficheData.freq[i] == '' )
return false;
// 15. Les CONNECTION ont un et un seul choix (par question de connection)
for( var i = 0 ; i < ficheData.connect.length ; i++ )
if( ficheData.connect[i] == '' )
return false;
// {4} <input> dépendant d'un choix d'un <input> radio //
// 16. TYPE DE RELATION si autre est coché (indice 8), reltypeSpecial doit avoir au moins 2 caractère
if( ficheData.reltype == '10' && ficheData.reltypeSpecial.length < 2 )
return false;
// 17. CONTEXTE DE RELATION si est coché indice 11, contactSpecial[0] doit avoir au moins 2 caractères
if( ficheData.context == '11' && ficheData.contextSpecial[0].length < 2 )
return false;
// 18. CONTEXTE DE RELATION si est coché indice 12, contextSpecial[1] doit avoir au moins 2 caractères
if( ficheData.context == '12' && ficheData.contextSpecial[1].length < 2 )
return false;
// 19. CONTEXTE DE RELATION si est coché indice 13, contextSpecial[2] doit avoir au moins 2 caractères
if( ficheData.context == '13' && ficheData.contextSpecial[2].length < 2 )
return false;
// 20. Si tout s'est bien passé, on retourne TRUE
return true;
};
/* [9] Point d'amorçage de la gestion des contacts
=========================================================*/
inputPhoneFiche.prototype.attach = function(handler){
2016-10-10 08:58:44 +00:00
console.group('[phone.fiche] attaching events');
/* (1) On initialise le jeu de données */
lsi.createDataset('p_fiches');
/* (2) On charge les fiche fiches depuis la mémoire ('localStorage') */
this.storageToFields();
/* (3) On attache la barre de navigation à une fonction */
// On enregistre le handler
this.handler = handler;
/* (2) On attache l'évènement sur le bouton d'ajout de contact */
this.nav_container.addEventListener('click', function(e){
// 1. On gère la navigation
this.nav(e.target);
// 2. On gere le chargement dynamique
this.handler(e.target);
}.bind(this), false);
2016-10-10 08:58:44 +00:00
console.groupEnd();
};