2016-05-18 13:08:45 +00:00
|
|
|
|
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
|
|
|
|
|
=========================================================*/
|
|
|
|
|
function inputFacebookMatrice(container){
|
|
|
|
|
this.container = container;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* [1] Attributs
|
|
|
|
|
=========================================================*/
|
|
|
|
|
inputFacebookMatrice.prototype = {
|
|
|
|
|
container: this.container // Conteneur de la matrice
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [2] Gestion de l'enregistrement de la matrice
|
|
|
|
|
=========================================================*/
|
|
|
|
|
inputFacebookMatrice.prototype.fieldsToStorage = function(){
|
2016-10-12 14:20:46 +00:00
|
|
|
|
console.group('[facebook.matrice] fields to storage');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// {1} On initialise notre deflater pour récupérer les valeurs //
|
|
|
|
|
var deflater = new FormDeflater(this.container, ['input'], ['data-name']);
|
|
|
|
|
|
|
|
|
|
// {2} On extrait les données //
|
|
|
|
|
var deflated = deflater.deflate();
|
|
|
|
|
// On crée le hash
|
|
|
|
|
var deflatedHash = crc32(JSON.stringify(deflated));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// console.log(deflated);
|
|
|
|
|
|
|
|
|
|
/* (3) On crée l'objet et on le remplit avec les relations */
|
|
|
|
|
var obj = {};
|
|
|
|
|
|
|
|
|
|
for( var i in deflated )
|
|
|
|
|
|
|
|
|
|
// {1} Si c'est un tableau de sujets //
|
|
|
|
|
if( deflated[i] instanceof Array ){
|
|
|
|
|
|
|
|
|
|
// Pour chacune des différentes relations, on ajoute si TRUE
|
|
|
|
|
for( var a in deflated[i] ){
|
|
|
|
|
if( obj[i] == null )
|
|
|
|
|
obj[i] = [];
|
|
|
|
|
|
|
|
|
|
obj[i].push( parseInt(deflated[i][a]) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// {2} Si il n'y a qu'un sujet //
|
|
|
|
|
}else if( deflated[i] !== null ){
|
|
|
|
|
if( obj[i] == null )
|
|
|
|
|
obj[i] = [];
|
|
|
|
|
|
|
|
|
|
obj[i].push( parseInt(deflated[i]) );
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-18 13:28:02 +00:00
|
|
|
|
lsi.set( 'f_matrice', 0, obj );
|
2016-05-18 13:08:45 +00:00
|
|
|
|
// Objet de la forme
|
|
|
|
|
//
|
|
|
|
|
// idA: [idV, idW], # A connait V et W (et réciproquement)
|
|
|
|
|
// idB: [idX, idY], # B connait X et Y (et réciproquement)
|
|
|
|
|
// ...
|
|
|
|
|
//
|
2016-10-12 14:20:46 +00:00
|
|
|
|
|
|
|
|
|
console.groupEnd();
|
2016-05-18 13:08:45 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [4] Gestion de l'affichage depuis le 'localStorage'
|
|
|
|
|
=========================================================*/
|
|
|
|
|
inputFacebookMatrice.prototype.storageToFields = function(){
|
2016-10-12 14:20:46 +00:00
|
|
|
|
console.group('[facebook.matrice] storage to fields');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
/* (1) On récupère la liste des contacts à mettre dans la matrice */
|
|
|
|
|
// On récupère les fiches
|
2016-05-18 13:28:02 +00:00
|
|
|
|
var ficheData = lsi.export('f_fiches');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
// On récupère les données de la matrice
|
2016-05-18 13:28:02 +00:00
|
|
|
|
var matriceData = lsi.get('f_matrice', 0);
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
// On récupère les contacts pour afficher les noms/prénoms
|
2016-05-18 13:28:02 +00:00
|
|
|
|
var contactData = lsi.export('f_contacts');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
// Contiendra les UID des contacts à mettre dans la matrice
|
|
|
|
|
var contacts = [];
|
|
|
|
|
|
|
|
|
|
// Pour chaque fiche, on ajoute l'uid du contact s'il n'est pas déja ajouté
|
|
|
|
|
for( var f in ficheData )
|
|
|
|
|
if( contacts.indexOf( ficheData[f].contact ) == -1 )
|
|
|
|
|
contacts.push( ficheData[f].contact );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* (2) On construit le HTML de la matrice */
|
|
|
|
|
// Contiendra le HTML
|
2016-10-12 14:20:46 +00:00
|
|
|
|
var matrice_html = ["<table class='line'>"];
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
// {1} Pour chaque ligne //
|
|
|
|
|
for( var A = 0 ; A < contacts.length ; A++ ){
|
|
|
|
|
var conA = contactData[A];
|
|
|
|
|
|
|
|
|
|
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push('<tr>');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
if( A > 0 ){ // Noms sur la première ligne (abscisses)
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push('<td style="text-align: right;">');
|
|
|
|
|
matrice_html.push(conA.username);
|
|
|
|
|
matrice_html.push('</td>');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
}else // Sinon,
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push('<td></td>');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
// {2} Pour chaque case //
|
|
|
|
|
for( var B = 0 ; B < contacts.length ; B++ ){ if( B < contacts.length-1 ){
|
|
|
|
|
var conB = contactData[B];
|
|
|
|
|
|
|
|
|
|
// {3} Première colonne -> Intitulé des ordonnées //
|
|
|
|
|
if( A == 0 ){
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push('<td>');
|
|
|
|
|
matrice_html.push('<span style="writing-mode: vertical-lr; text-align: right;">');
|
|
|
|
|
matrice_html.push(conB.username);
|
|
|
|
|
matrice_html.push('</span>');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
// {4} Valeurs des relations (boutons) //
|
|
|
|
|
}else if( B < A ){
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push("<td>");
|
|
|
|
|
matrice_html.push("<input type='checkbox' name='matrice_"+conA.uid+"_"+conB.uid+"' data-name='"+conA.uid+"' value='"+conB.uid+"' id='f_matrice_"+conA.uid+"_"+conB.uid+"'");
|
2016-05-18 13:08:45 +00:00
|
|
|
|
// Si la relation existe, on active le bouton
|
|
|
|
|
if( matriceData[A] != null && matriceData[A].indexOf(B) > -1 )
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push(" checked");
|
|
|
|
|
matrice_html.push(" >");
|
|
|
|
|
matrice_html.push("<label for='f_matrice_"+conA.uid+"_"+conB.uid+"'></label>");
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
// {5} Cases vides (moitié supérieure droite) //
|
|
|
|
|
}else
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push("<td class='hidden'>");
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push('</td>');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
}}
|
|
|
|
|
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push('</tr>');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
}
|
2016-10-12 14:20:46 +00:00
|
|
|
|
matrice_html.push('</table>');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* (3) On affiche la matrice */
|
2016-10-12 14:20:46 +00:00
|
|
|
|
this.container.innerHTML = matrice_html.join('');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
2016-10-12 14:20:46 +00:00
|
|
|
|
console.groupEnd();
|
2016-05-18 13:08:45 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [9] Point d'amorçage de la gestion des contacts
|
|
|
|
|
=========================================================*/
|
|
|
|
|
inputFacebookMatrice.prototype.attach = function(){
|
2016-10-12 14:20:46 +00:00
|
|
|
|
console.group('[facebook.matrice] attaching events');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
/* (1) On initialise le jeu de données */
|
2016-05-18 13:28:02 +00:00
|
|
|
|
lsi.createDataset('f_matrice');
|
2016-05-18 13:08:45 +00:00
|
|
|
|
|
|
|
|
|
/* (2) On charge les mini fiches depuis la mémoire ('localStorage') */
|
|
|
|
|
this.storageToFields();
|
|
|
|
|
|
|
|
|
|
/* (3) On enregistre la matrice à chaque modification */
|
|
|
|
|
var ptr = this;
|
|
|
|
|
this.container.addEventListener('click', function(e){
|
2016-06-07 09:06:59 +00:00
|
|
|
|
|
2016-05-18 13:08:45 +00:00
|
|
|
|
ptr.fieldsToStorage();
|
2016-06-07 09:06:59 +00:00
|
|
|
|
|
|
|
|
|
setTimeout(function(){ ptr.storageToFields(); }, 500);
|
2016-10-10 10:24:03 +00:00
|
|
|
|
|
2016-05-18 13:08:45 +00:00
|
|
|
|
}, false);
|
2016-10-12 14:20:46 +00:00
|
|
|
|
|
|
|
|
|
console.groupEnd();
|
2016-05-18 13:08:45 +00:00
|
|
|
|
};
|