597 lines
25 KiB
JavaScript
597 lines
25 KiB
JavaScript
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
|
|
=========================================================*/
|
|
function inputPhoneFiche(container, navContainer){
|
|
this.container = container;
|
|
this.nav_container = navContainer;
|
|
}
|
|
|
|
/* [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
|
|
firstname: '',
|
|
lastname: '',
|
|
username: '',
|
|
sexe: [ {status:true}, {status:false}],
|
|
age: '',
|
|
job: '.',
|
|
famsit: [ {status:true}, {status:false}, {status:false} ], // Choix 1 à 3
|
|
studies: '.',
|
|
reltype: [ {status:true}, {status:false}, {status:false}, {status:false}, {status:false},
|
|
{status:false}, {status:false}, {status:false}, {status:false}], // Choix 1 à 9
|
|
reltypeSpecial: '',
|
|
city: '',
|
|
loc: [ {status:true}, {status:false}, {status:false}, {status:false} ],
|
|
loc2: [ {status:true}, {status:false}, {status:false}, {status:false} ],
|
|
duration: ['', ''],
|
|
context: [ {status:true}, {status:false}, {status:false}, {status:false}, {status:false},
|
|
{status:false}, {status:false}, {status:false}, {status:false}, {status:false},
|
|
{status:false}, {status:false}, {status:false}, {status:false}], // Choix 1 à 14
|
|
contextSpecial: ['', '', ''],
|
|
freq: [
|
|
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
|
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
|
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
|
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
|
[ {status:true}, {status:false}, {status:false}, {status:false} ]],
|
|
connect: [
|
|
[ {status:false}, {status:true} ],
|
|
[ {status:false}, {status:true} ],
|
|
[ {status:false}, {status:true} ],
|
|
[ {status:false}, {status:true} ],
|
|
[ {status:false}, {status:true} ],
|
|
[ {status:false}, {status:true} ]],
|
|
connectSpecial: ['', ''],
|
|
timestamp: 0,
|
|
valid: false
|
|
}
|
|
};
|
|
|
|
|
|
/* [2] Gestion de l'enregistrement des formulaires fiche fiches relation
|
|
=========================================================*/
|
|
inputPhoneFiche.prototype.fieldsToStorage = function(){
|
|
console.log('FICHE: FIELDS TO STORAGE');
|
|
|
|
// {1} Pour chaque formulaire de contact présent //
|
|
var existingFiches = $$('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('fiches', deflated.uid.value);
|
|
|
|
// 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 //
|
|
// Si le hash est le même, on ne fait rien
|
|
if( existingData.hash != null && existingData.hash == deflatedHash )
|
|
return;
|
|
|
|
console.warn('> FICHE UPDATE');
|
|
|
|
|
|
var obj = {
|
|
uid: deflated.uid.value,
|
|
firstname: existingData.firstname,
|
|
lastname: existingData.lastname,
|
|
username: existingData.username,
|
|
sexe: deflated.sexe, // Choix 1 à 2
|
|
age: deflated.age.value,
|
|
job: deflated.job.value,
|
|
famsit: deflated.famsit, // Choix 1 à 3
|
|
studies: deflated.studies.value,
|
|
reltype: deflated.reltype, // Choix 1 à 9
|
|
reltypeSpecial: deflated.reltypeSpecial.value,
|
|
city: deflated.city.value,
|
|
loc: deflated.loc, // Choix 1 à 3
|
|
loc2: deflated.loc2, // Choix 1 à 3
|
|
duration: [
|
|
deflated.duration[0].value, // Durée de la relation en mois
|
|
deflated.duration[1].value // Durée de la relation en années
|
|
],
|
|
context: deflated.context, // Choix 1 à 14
|
|
contextSpecial: [
|
|
deflated.contextSpecial[0].value, // Valeur du contexte si context[11]
|
|
deflated.contextSpecial[1].value, // Valeur du contexte si context[12]
|
|
deflated.contextSpecial[2].value // Valeur du contexte si context[13]
|
|
],
|
|
freq: [
|
|
deflated.freq0, // Choix 1 à 4
|
|
deflated.freq1, // Choix 1 à 4
|
|
deflated.freq2, // Choix 1 à 4
|
|
deflated.freq3, // Choix 1 à 4
|
|
deflated.freq4 // Choix 1 à 4
|
|
],
|
|
connect: [
|
|
deflated.connect0, // Choix 1 à 2
|
|
deflated.connect1, // Choix 1 à 2
|
|
deflated.connect2, // Choix 1 à 2
|
|
deflated.connect3, // Choix 1 à 2
|
|
deflated.connect4, // Choix 1 à 2
|
|
deflated.connect5 // Choix 1 à 2
|
|
],
|
|
connectSpecial: [
|
|
deflated.connectSpecial[0].value,
|
|
deflated.connectSpecial[1].value
|
|
],
|
|
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);
|
|
obj.timestamp = Date.now();
|
|
|
|
/* (7) On enregistre les données dans le 'localStorage' */
|
|
lsi.set('fiches', obj.uid, obj);
|
|
}
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [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){
|
|
console.log('FICHE: ADD');
|
|
|
|
// Si pas d'UID, on retourne une erreur
|
|
if( objectData.uid == null )
|
|
return false;
|
|
|
|
/* (0) Gestion du formattage des valeur */
|
|
// {1} Champs de texte //
|
|
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : this.defaultData.firstname;
|
|
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : this.defaultData.lastname;
|
|
objectData.username = (objectData.username != null) ? objectData.username : this.defaultData.username;
|
|
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
|
objectData.city = (objectData.city != null) ? objectData.city : this.defaultData.city;
|
|
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;
|
|
|
|
// {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.loc2 = (objectData.loc2 != null) ? objectData.loc2 : this.defaultData.loc2;
|
|
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;
|
|
|
|
|
|
// {1} Création physique //
|
|
this.container.innerHTML += ficheBuilder.build({
|
|
firstname: objectData.firstname,
|
|
lastname: objectData.lastname,
|
|
username: (objectData.username.length==0) ? '' : '('+objectData.username+')',
|
|
uid: objectData.uid,
|
|
age: objectData.age,
|
|
city: objectData.city,
|
|
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]
|
|
});
|
|
|
|
|
|
/* (2) On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
|
var selectedOption = $('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');
|
|
|
|
/* (3) On sélectionne la valeur dans le select (manuellement) des ETUDES */
|
|
selectedOption = $('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');
|
|
|
|
|
|
/* (4) On sélectionna la valeur des boutons <radio> pour le SEXE */
|
|
var sexeCreated = $$('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 < objectData.sexe.length ; i++ )
|
|
if( objectData.sexe[i].status ) sexeCreated[i].setAttribute('checked', 'checked');
|
|
else sexeCreated[i].removeAttribute('checked');
|
|
|
|
|
|
/* (5) On sélectionna la valeur des boutons <radio> pour la SITUATION FAMILIALE */
|
|
var famsitCreated = $$('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 < objectData.famsit.length ; i++ )
|
|
if( objectData.famsit[i].status ) famsitCreated[i].setAttribute('checked', 'checked');
|
|
else famsitCreated[i].removeAttribute('checked');
|
|
|
|
|
|
/* (6) On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
|
|
var reltypeCreated = $$('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 < objectData.reltype.length ; i++ )
|
|
if( objectData.reltype[i].status ) reltypeCreated[i].setAttribute('checked', 'checked');
|
|
else reltypeCreated[i].removeAttribute('checked');
|
|
|
|
|
|
/* (7) On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
|
var locCreated = $$('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 < objectData.loc.length ; i++ )
|
|
if( objectData.loc[i].status ) locCreated[i].setAttribute('checked', 'checked');
|
|
else locCreated[i].removeAttribute('checked');
|
|
|
|
/* (7bis) On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
|
var loc2Created = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="loc2"]');
|
|
for( var i = 0 ; i < loc2Created.length && i < objectData.loc2.length ; i++ )
|
|
if( objectData.loc2[i].status ) loc2Created[i].setAttribute('checked', 'checked');
|
|
else loc2Created[i].removeAttribute('checked');
|
|
|
|
|
|
/* (8) On sélectionna la valeur des boutons <radio> pour le CONTEXTE DE RENCONTRE */
|
|
var contextCreated = $$('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 < objectData.context.length ; i++ )
|
|
if( objectData.context[i].status ) contextCreated[i].setAttribute('checked', 'checked');
|
|
else contextCreated[i].removeAttribute('checked');
|
|
|
|
|
|
/* (9) On sélectionna la valeur des boutons <radio> pour les FREQUENCES */
|
|
for( var f = 0 ; f < objectData.freq.length ; f++ ){
|
|
var freqCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="freq'+f+'"]');
|
|
for( var i = 0 ; i < freqCreated.length && i < objectData.freq[f].length ; i++ )
|
|
if( objectData.freq[f][i].status ) freqCreated[i].setAttribute('checked', 'checked');
|
|
else freqCreated[i].removeAttribute('checked');
|
|
}
|
|
|
|
/* (10) On sélectionna la valeur des boutons <radio> pour les CONNECTIONS */
|
|
for( var c = 0 ; c < objectData.connect.length ;c++ ){
|
|
var connectCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="connect'+c+'"]');
|
|
for( var i = 0 ; i < connectCreated.length && i < objectData.connect[c].length ; i++ )
|
|
if( objectData.connect[c][i].status ) connectCreated[i].setAttribute('checked', 'checked');
|
|
else connectCreated[i].removeAttribute('checked');
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [4] Gestion de l'affichage depuis le 'localStorage'
|
|
=========================================================*/
|
|
inputPhoneFiche.prototype.storageToFields = function(){
|
|
console.log('FICHE: STORAGE TO FIELDS');
|
|
|
|
// {1} Pour chaque contact du 'localStorage' //
|
|
var ficheData = lsi.export('fiches');
|
|
|
|
// On réinitialise le HTML
|
|
this.container.innerHTML = '';
|
|
|
|
// On récupère les UIDS
|
|
var UIDs = [];
|
|
//
|
|
for( var key in ficheData ){
|
|
var uid = ficheData[key].uid;
|
|
|
|
if( uid == this.selected )
|
|
this.add(ficheData[key]);
|
|
|
|
UIDs.push(uid);
|
|
}
|
|
|
|
|
|
// {4} On met à jour la navigation //
|
|
this.updateNavBar(UIDs);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [5] Synchronisation des CONTACT vers les MINI fiches
|
|
=========================================================*/
|
|
inputPhoneFiche.prototype.sync = function(){
|
|
console.log('FICHE: SYNC');
|
|
|
|
/* (1) Mise à jour en fonction des contacts
|
|
---------------------------------------------------------*/
|
|
/* (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 < 10; 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 ficheData = lsi.get('fiches', contactUIDs[i]);
|
|
|
|
|
|
/* (5) Si la FICHE n'exise pas, on la crée avec les valeurs par défaut */
|
|
if( ficheData == null )
|
|
ficheData = this.defaultData;
|
|
|
|
|
|
/* (6) On met à jour la fiche */
|
|
ficheData.uid = contactData.uid;
|
|
ficheData.firstname = contactData.firstname;
|
|
ficheData.lastname = contactData.lastname;
|
|
ficheData.username = contactData.username;
|
|
|
|
|
|
/* (7) On enregistre les modification */
|
|
lsi.set('fiches', contactUIDs[i], ficheData);
|
|
}
|
|
|
|
/* (2) Mise à jour en fonction des MINI fiches
|
|
---------------------------------------------------------*/
|
|
/* (1) On récupère les valeurs des MINI fiches et des FICHES */
|
|
var miniData = lsi.export('mini-fiches');
|
|
var ficheData = lsi.export('fiches');
|
|
|
|
|
|
/* (2) Pour chaque champ, on synchronise les MINI fiches avec les FICHES associées */
|
|
for( var key in ficheData ){
|
|
var ficheModifiedLast = ficheData[key].timestamp > miniData[key].timestamp;
|
|
|
|
/* (3) Si la FICHE a été modifiée en dernier, on utilise ses données */
|
|
if( ficheModifiedLast ){
|
|
miniData[key].sexe = ficheData[key].sexe;
|
|
miniData[key].age = ficheData[key].age;
|
|
miniData[key].job = ficheData[key].job;
|
|
miniData[key].loc = ficheData[key].loc;
|
|
|
|
/* (4) Sinon, on utilise les données de la MINI */
|
|
}else{
|
|
ficheData[key].sexe = miniData[key].sexe;
|
|
ficheData[key].age = miniData[key].age;
|
|
ficheData[key].job = miniData[key].job;
|
|
ficheData[key].loc = miniData[key].loc;
|
|
}
|
|
|
|
/* (5) On enregistre les modifications */
|
|
lsi.set('mini-fiches', key, miniData[key]);
|
|
lsi.set('fiches', key, ficheData[key]);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [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( typeof element == 'undefined' )
|
|
return false;
|
|
|
|
if( isNaN(element.innerHTML) || element.parentNode.id != 'nav-fiche' )
|
|
return false;
|
|
|
|
/* (2) On désactive tous les éléments actifs */
|
|
var activeElements = $$('#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.innerHTML) - 1;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [7] Mise à jour de la navigation
|
|
=========================================================*/
|
|
inputPhoneFiche.prototype.updateNavBar = function(){
|
|
var ficheData = lsi.export('fiches');
|
|
var len = Object.keys(ficheData).length;
|
|
|
|
|
|
/* (1) On vérifie si la barre de navigation est à jour */
|
|
var navBarUpToDate = this.nav_container.children.length == len;
|
|
|
|
|
|
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
|
if( !navBarUpToDate ){
|
|
this.nav_container.innerHTML = '';
|
|
|
|
for( var i = 0 ; i < len ; i++ )
|
|
this.nav_container.innerHTML += '<span></span>';
|
|
}
|
|
|
|
/* (3) On montre les FICHES qui sont correctes */
|
|
for( var key in ficheData ){
|
|
|
|
var currentElement = this.nav_container.children[ ficheData[key].uid ];
|
|
|
|
// On remplit avec le numéro de la fiche
|
|
currentElement.innerHTML = ficheData[key].uid+1;
|
|
|
|
// Si la MINI 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( this.nav_container.children[this.selected] );
|
|
};
|
|
|
|
|
|
|
|
|
|
/* [8] Vérification des données du formulaire
|
|
=========================================================*/
|
|
inputPhoneFiche.prototype.check = function(ficheData){
|
|
|
|
// {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;
|
|
|
|
// {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;
|
|
|
|
// {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;
|
|
// 11bis. La DISTANCE DE DOMICILE (location 2) a un et un seul choix
|
|
if( !checkRadioValue(ficheData.loc2) )
|
|
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;
|
|
|
|
// 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;
|
|
|
|
// {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;
|
|
|
|
// 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;
|
|
|
|
// 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;
|
|
|
|
|
|
|
|
// 19. 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){
|
|
console.log('FICHE: ATTACH');
|
|
|
|
/* (1) On initialise le jeu de données */
|
|
lsi.createDataset('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;
|
|
var ptr = this;
|
|
|
|
/* (2) On attache l'évènement sur le bouton d'ajout de contact */
|
|
var ptr = this;
|
|
this.nav_container.addEventListener('click', function(e){
|
|
// 1. On gère la navigation
|
|
ptr.nav(e.target);
|
|
// 2. On gere le chargement dynamique
|
|
ptr.handler(e.target);
|
|
}, false);
|
|
|
|
};
|