From 247fb83b3e443759966b0f2a1d4e6cf848be31b2 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 17 Oct 2016 11:45:25 +0200 Subject: [PATCH] Migration des modifications de `phone.fiche` et `phone.mini` vers `facebook.fiche` et `facebook.mini` ?? Pb de timestamp et de synchronisation [FONCT] --- js/includes/input-facebook-fiche.js | 265 +++++++++++++++++------- js/includes/input-facebook-mini.js | 52 ++--- js/includes/input-phone-mini.js | 2 +- js/includes/min/input-facebook-fiche.js | 16 +- js/includes/min/input-facebook-mini.js | 18 +- js/includes/min/input-phone-mini.js | 2 +- view/js/input.js | 2 +- view/js/min/input.js | 2 +- 8 files changed, 231 insertions(+), 128 deletions(-) diff --git a/js/includes/input-facebook-fiche.js b/js/includes/input-facebook-fiche.js index e06875c..3efa6b6 100644 --- a/js/includes/input-facebook-fiche.js +++ b/js/includes/input-facebook-fiche.js @@ -104,7 +104,8 @@ inputFacebookFiche.prototype.fieldsToStorage = function(){ console.log( diff(existingData, obj, ['hash', 'valid', 'timestamp']) ); console.warn('> FICHE UPDATE'); obj.timestamp = Date.now(); - } + }else if( existingData['timestamp'] == undefined ) + obj.timestamp = this.defaultData.timestamp; /* (7) On enregistre les données dans le 'localStorage' */ lsi.set('f_fiches', obj.uid, obj); @@ -352,108 +353,216 @@ inputFacebookFiche.prototype.storageToFields = function(){ inputFacebookFiche.prototype.sync = function(){ console.group('[facebook.fiche] synchronisation'); - /* (1) Initialisation - ---------------------------------------------------------*/ - /* (1) On récupère tous les CONTACTS */ - var contacts = lsi.export('f_contacts'); - /* (2) Contiendra les uids des fiches qui seront crées */ - var addedFicheUids = []; - var ficheData, contactData; + { /* (1) Initialisation + ---------------------------------------------------------*/ + /* (1) On récupère tous les CONTACTS */ + var contacts = lsi.export('f_contacts'); + /* (2) Contiendra les uids des fiches qui seront crées */ + var addedFicheUids = []; + var ficheData, contactData, miniData; - /* (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('f_contacts').length < 2*this.top_size ? lsi.keys('f_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('f_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('f_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 fiches dupliquées - ---------------------------------------------------------*/ - ficheData = lsi.export('f_fiches'); + { /* (2) Mise à jour en fonction des contacts APRÈS SAISIE + ---------------------------------------------------------*/ - for( var key in ficheData ){ + // Nombre maximum de fiches (40, sauf si moins de 40 contacts, dans ce cas, le nombre de contacts); + var nbMaxFiche = lsi.keys('f_contacts').length < 2*this.top_size ? lsi.keys('f_contacts').length : 2*this.top_size; - /* (1) On récupère le contact associé */ - var associatedContact = lsi.get('f_contacts', ficheData[key].contact); + /* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée */ + for( var uid in contacts ){ - // Si erreur, on passe au suivant - if( !associatedContact ) - continue; + /* (1) On cherche un uid de fiche non existant dans l'intervalle [0;40[ */ + ficheUid = 0; + while( addedFicheUids.indexOf(ficheUid) > -1 && ficheUid < nbMaxFiche ) + ficheUid++; - /* (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 + // On enregistre le nouvel UID dans les uid crées + addedFicheUids.push(ficheUid); - for( var i in ficheData ){ + /* (2) On récupère les informations de la FICHE (si elle existe) */ + var ficheData = lsi.get('f_fiches', ficheUid); - // si on est pas dans le bonne tranche, on passe au suivant - if( inCall && i < this.top_size || !inCall && i >= this.top_size ) - continue; + // Si la fiche n'existe pas, on la crée avec les valeurs par défaut + !ficheData && ( ficheData = this.defaultData ); - // on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement) - contactData = lsi.get('f_contacts', ficheData[i].contact); + /* (3) On met à jour la fiche ET on l'enregistre */ + ficheData.uid = ficheUid; + ficheData.contact = parseInt(uid); + lsi.set('f_fiches', ficheUid, ficheData); - if( i == key || !contactData ) - continue; - // meme pseudo - var hasSameUsername = contactData.username.length > 0 && associatedContact.username === contactData.username; - // meme lien de contact - var 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 ) + /* (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('f_fiches'); + miniData = lsi.export('f_mini-fiches'); + + // Pour chaque fiche + for( var key in ficheData ){ + + /* (1) On récupère le contact associé */ + var associatedContact = lsi.get('f_contacts', ficheData[key].contact); + + // Si erreur, on passe au suivant + if( !associatedContact ) + continue; + + /* (3) On récupère la mini-fiche clone si existe */ + var clone = null; + + // Pour chaque mini-fiche + for( var i in miniData ){ + + // on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement) + contactData = lsi.get('f_contacts', miniData[i].contact); + + if( !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 = miniData[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 mini_ts = ( clone instanceof Object && clone.hasOwnProperty('timestamp') ) ? clone.timestamp : 0; + + if( clone === null ) + continue; + + + + /* (5.1) Si clone modifiée en dernier > On copie les données de la mini (CLONE) dans la FICHE */ + var copied; + if( mini_ts > fiche_ts ){ + + // console.warn('copying mini#'+clone.uid+' to fiche#'+ficheData[key].uid, mini_ts-global_start_timestamp, fiche_ts-global_start_timestamp); + copied = ficheData[key]; + copied.age = clone.age; + copied.sexe = clone.sexe; + copied.loc = clone.loc; + copied.reltype = clone.reltype; + copied.reltypeSpecial = clone.reltypeSpecial; + copied.timestamp = Date.now(); + lsi.set('f_fiches', copied.uid, copied); + + // clone.timestamp = copied.timestamp; + // lsi.set('f_mini-fiches', clone.uid, clone); + + /* (5.2) Si fiche modifiée en dernier > On copie les données de la FICHE dans la mini (CLONE) */ + }else if( fiche_ts > mini_ts ){ + + // console.warn('copying fiche#'+ficheData[key].uid+' to mini#'+clone.uid, fiche_ts-global_start_timestamp, mini_ts-global_start_timestamp); + copied = clone; + copied.age = ficheData[key].age; + copied.sexe = ficheData[key].sexe; + copied.loc = ficheData[key].loc; + copied.reltype = ficheData[key].reltype; + copied.reltypeSpecial = ficheData[key].reltypeSpecial; + copied.timestamp = Date.now(); + lsi.set('f_mini-fiches', copied.uid, copied); + + // ficheData[key].timestamp = copied.timestamp; + // lsi.set('f_fiches', ficheData[key].uid, ficheData[key]); + + } } - /* (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; + } - /* (5) On copie les données de la FICHE dans le CLONE */ - var obj = ficheData[key]; - obj.uid = clone.uid; - obj.timestamp = Date.now(); - lsi.set('f_fiches', clone.uid, obj); + + { /* (4) Gestion des fiches dupliquées + ---------------------------------------------------------*/ + ficheData = lsi.export('f_fiches'); + + for( var key in ficheData ){ + + /* (1) On récupère le contact associé */ + var associatedContact = lsi.get('f_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 inHistory = parseInt( ficheData[key].uid ) < this.top_size; // vrai si dans l'HISTORIQUE, sinon dans MESSENGER + + for( var i in ficheData ){ + + // si on est pas dans le bonne tranche, on passe au suivant + if( inHistory && i < this.top_size || !inHistory && i >= this.top_size ) + continue; + + // on récupère le contact associé (si on est dans `history`, celui dans la tranche avec `messenger` / et inversement) + contactData = lsi.get('f_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('f_fiches', copied.uid, copied); + + // ficheData[key].timestamp = copied.timestamp; + // lsi.set('f_fiches', ficheData[key].uid, ficheData[key]); + + } } + console.groupEnd(); }; diff --git a/js/includes/input-facebook-mini.js b/js/includes/input-facebook-mini.js index 040c2a1..89b5dee 100644 --- a/js/includes/input-facebook-mini.js +++ b/js/includes/input-facebook-mini.js @@ -13,13 +13,14 @@ inputFacebookMini.prototype = { selected: null, // UID de la MINI fiche sélectionnée handler: null, // Fonction pour l'enregistrement et la synchronisation des données defaultData: { // Valeur par défaut + contact: null, sexe: '2', age: '.', studies: '0', loc: '.', reltype: '9', - unknown: false, reltypeSpecial: '', + unknown: false, timestamp: 0, valid: false } @@ -64,6 +65,7 @@ inputFacebookMini.prototype.fieldsToStorage = function(){ var obj = { uid: parseInt(deflated.uid), + contact: parseInt(deflated.uid), sexe: deflated.sexe, // [0] Homme, [1] Femme, [2] Indéterminé age: deflated.age, studies: deflated.studies, @@ -80,9 +82,10 @@ inputFacebookMini.prototype.fieldsToStorage = function(){ // 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('> MINI UPDATE'); obj.timestamp = Date.now(); - } + }else if( existingData['timestamp'] == undefined ) + obj.timestamp = this.defaultData.timestamp; /* (9) On enregistre les données dans le 'localStorage' */ @@ -137,6 +140,7 @@ inputFacebookMini.prototype.add = function(objectData){ // On récupère les données communes associatedContact.username = existingData.name; + objectData.contact = existingData.contact; objectData.age = existingData.age; objectData.sexe = existingData.sexe; objectData.loc = existingData.dist; @@ -281,49 +285,36 @@ inputFacebookMini.prototype.sync = function(){ /* (1) On récupère les clés de tous les CONTACTS */ var contactData = lsi.export('f_contacts'); + var ficheData, miniData; + /* (2) On enregistre les contacts qui ne sont pas déja dans les FICHES */ + ficheIndexes = lsi.keys('f_fiches'); - /* (2) On enregistre les contacts qui sont déja dans les FICHES */ - var fiches = lsi.export('f_fiches'); - var ignoredContacts = []; - for( var id in fiches ) - if( ignoredContacts.indexOf( fiches[id].contact ) == -1 ) - ignoredContacts.push( fiches[id].contact ); + for( var i in ficheIndexes ) + delete contactData[ ficheIndexes[i] ]; - - /* (3) Pour chaque CONTACT, on met à jour/crée la MINI fiche associée */ + /* (3) Pour chaque CONTACT restant, on met à jour/crée la MINI fiche associée */ for( var key in contactData ){ - /* (4) Si le contact est déja dans une fiche, on le retire */ - if( ignoredContacts.indexOf(parseInt(key)) > -1 ){ - // On supprime au cas ou - lsi.del('f_mini-fiches', key); - continue; - } - - /* (5) Si le contact n'a aucun nominatif, on met inconnu par défaut, mais on ne l'affiche pas */ + /* (4) Si le contact n'a aucun nominatif, on met inconnu par défaut, mais on ne l'affiche pas */ var noName = contactData[key].username.length == 0; - // On rajoute un '.' après pour dire qu'on affichera pas + // On rajoute un '-' après pour dire qu'on affichera pas var uid = noName ? key.toString()+'-' : key; /* (5) On récupère les informations de la MINI (si elle existe) */ - var miniData = lsi.get('f_mini-fiches', uid); + miniData = lsi.get('f_mini-fiches', uid); /* (6) Si la MINI fiche n'exise pas, on la crée avec les valeurs par défaut */ if( miniData == null ){ - miniData = this.defaultData; - miniData.valid = false; - - // Si aucun nom, on met 'inconnu' par défaut pour la fiche de relation - if( isNaN(uid) ) - miniData.reltype = '9'; + miniData = this.defaultData; + miniData.contact = contactData[key].uid; + miniData.valid = false; } /* (7) On met à jour la MINI fiche */ - miniData.uid = parseInt(key); - + miniData.uid = parseInt( key ); /* (8) On enregistre les modification */ lsi.set('f_mini-fiches', uid, miniData); @@ -331,7 +322,7 @@ inputFacebookMini.prototype.sync = function(){ } /* (9) On met à jour la mini-fiche en cours */ - var miniData = lsi.export('f_mini-fiches'); + miniData = lsi.export('f_mini-fiches'); // Si la clé n'existe plus if( miniData[this.selected] == null ){ @@ -486,5 +477,6 @@ inputFacebookMini.prototype.attach = function(handler){ this.handler(e.target); }.bind(this), false); + console.groupEnd(); }; diff --git a/js/includes/input-phone-mini.js b/js/includes/input-phone-mini.js index 6eb06f5..d0e309e 100644 --- a/js/includes/input-phone-mini.js +++ b/js/includes/input-phone-mini.js @@ -83,7 +83,7 @@ inputPhoneMini.prototype.fieldsToStorage = function(){ if( diff(existingData, obj, ['hash', 'valid', 'timestamp']).length > 0 ){ console.log( diff(existingData, obj, ['hash', 'valid', 'timestamp']) ); - console.warn('> FICHE UPDATE'); + console.warn('> MINI UPDATE'); obj.timestamp = Date.now(); }else if( existingData['timestamp'] == undefined ) obj.timestamp = this.defaultData.timestamp; diff --git a/js/includes/min/input-facebook-fiche.js b/js/includes/min/input-facebook-fiche.js index c7364c2..32ef721 100644 --- a/js/includes/min/input-facebook-fiche.js +++ b/js/includes/min/input-facebook-fiche.js @@ -1,6 +1,6 @@ function inputFacebookFiche(a,c){this.container=a;this.nav_container=c;this.top_size=10}inputFacebookFiche.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{sexe:"2",age:".",job:".",famsit:"0",studies:"0",reltype:"0",reltypeSpecial:"",city:"",quartier:"",cp:"",loc:"0",duration:["",""],context:"0",contextSpecial:["","",""],freq:["4","9","14","19","24"],connect:"1 3 5 7 9 11".split(" "),connectSpecial:["",""],timestamp:0,valid:!1}}; -inputFacebookFiche.prototype.fieldsToStorage=function(){console.group("[facebook.fiche] fields to storage");for(var a=$$('[data-sublink="facebook"] article.relation-panel .fiche-relation'),c=0;c FICHE UPDATE"),b.timestamp=Date.now());lsi.set("f_fiches",b.uid,b)}}console.groupEnd()}; +inputFacebookFiche.prototype.fieldsToStorage=function(){console.group("[facebook.fiche] fields to storage");for(var a=$$('[data-sublink="facebook"] article.relation-panel .fiche-relation'),c=0;c FICHE UPDATE"),b.timestamp=Date.now()):void 0==d.timestamp&&(b.timestamp=this.defaultData.timestamp);lsi.set("f_fiches",b.uid,b)}}console.groupEnd()}; inputFacebookFiche.prototype.add=function(a){if(null==a.uid||isNaN(a.uid)||null==a.contact||isNaN(a.contact))return!1;a.city=null!=a.city?a.city:this.defaultData.city;a.quartier=null!=a.quartier?a.quartier:this.defaultData.quartier;a.cp=null!=a.cp?a.cp:this.defaultData.cp;a.duration[0]=null!=a.duration[0]?a.duration[0]:this.defaultData.duration[0];a.duration[1]=null!=a.duration[1]?a.duration[1]:this.defaultData.duration[1];a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial; a.contextSpecial[0]=null!=a.contextSpecial[0]?a.contextSpecial[0]:this.defaultData.contextSpecial[0];a.contextSpecial[1]=null!=a.contextSpecial[1]?a.contextSpecial[1]:this.defaultData.contextSpecial[1];a.contextSpecial[2]=null!=a.contextSpecial[2]?a.contextSpecial[2]:this.defaultData.contextSpecial[2];a.connectSpecial[0]=null!=a.connectSpecial[0]?a.connectSpecial[0]:this.defaultData.connectSpecial[0];a.connectSpecial[1]=null!=a.connectSpecial[1]?a.connectSpecial[1]:this.defaultData.connectSpecial[1]; a.job=null!=a.job?a.job:this.defaultData.job;a.studies=null!=a.studies?a.studies:this.defaultData.studies;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.famsit=null!=a.famsit?a.famsit:this.defaultData.famsit;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.context=null!=a.context?a.context:this.defaultData.context;a.freq=null!=a.freq?a.freq:this.defaultData.freq;a.connect=null!=a.connect?a.connect: @@ -12,10 +12,12 @@ a.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');for(c=0;cinput[type="radio"][data-name="loc"]');for(c=0;cinput[type="radio"][data-name="context"]');for(c=0;cinput[type="radio"][data-name="freq"]');for(c=0;cinput[type="radio"][data-name="connect"]');for(c=0;c=d)break}var a=lsi["export"]("f_fiches"),f; -for(f in a)if(d=lsi.get("f_contacts",a[f].contact)){c=null;e=parseInt(a[f].uid)=this.top_size)&&(b=lsi.get("f_contacts",a[g].contact),g!=f&&b)){var h=0d||(d=a[f],d.uid=c.uid,d.timestamp= -Date.now(),lsi.set("f_fiches",c.uid,d))}console.groupEnd()};inputFacebookFiche.prototype.nav=function(a){if(!(a instanceof Element&&a.getData("n"))||isNaN(a.getData("n"))||"f_nav-fiche"!=a.parentNode.id)return!1;for(var c=$$('[data-sublink="facebook"] #f_nav-fiche > span.active'),b=0;bHISTORIQUE");20>d&&b'+(d%20+1)+"  ":(20==d&&(this.nav_container.innerHTML+='
MESSENGER '),this.nav_container.innerHTML+=''+(d%20+1)+"")}for(var e in a)c=$('[data-sublink="facebook"] #f_nav-fiche [data-n="'+a[e].uid+'"]'),null!=c&&(!0===a[e].valid?c.addClass("done"):c.remClass("done"));this.nav($('[data-sublink="facebook"] #f_nav-fiche [data-n="'+this.selected+'"]'))}; +inputFacebookFiche.prototype.sync=function(){console.group("[facebook.fiche] synchronisation");var a=lsi["export"]("f_contacts"),c=[],b,e;e=lsi.keys("f_contacts").length<2*this.top_size?lsi.keys("f_contacts").length:2*this.top_size;for(var d in a){for(ficheUid=0;-1=e)break}a=lsi["export"]("f_fiches");e= +lsi["export"]("f_mini-fiches");for(var f in a){var g=lsi.get("f_contacts",a[f].contact);if(g){var c=null,h;for(h in e)if(b=lsi.get("f_contacts",e[h].contact))if(d=0d?(d=a[f],d.age=c.age,d.sexe=c.sexe,d.loc=c.loc,d.reltype=c.reltype,d.reltypeSpecial= +c.reltypeSpecial,d.timestamp=Date.now(),lsi.set("f_fiches",d.uid,d)):d>g&&(d=c,d.age=a[f].age,d.sexe=a[f].sexe,d.loc=a[f].loc,d.reltype=a[f].reltype,d.reltypeSpecial=a[f].reltypeSpecial,d.timestamp=Date.now(),lsi.set("f_mini-fiches",d.uid,d)))}}a=lsi["export"]("f_fiches");for(f in a)if(g=lsi.get("f_contacts",a[f].contact)){c=null;e=parseInt(a[f].uid)=this.top_size)&&(b=lsi.get("f_contacts",a[h].contact),h!=f&&b&&(d=0d||(d=a[f],d.uid=c.uid,lsi.set("f_fiches",d.uid,d))}console.groupEnd()}; +inputFacebookFiche.prototype.nav=function(a){if(!(a instanceof Element&&a.getData("n"))||isNaN(a.getData("n"))||"f_nav-fiche"!=a.parentNode.id)return!1;for(var c=$$('[data-sublink="facebook"] #f_nav-fiche > span.active'),b=0;bHISTORIQUE");20>e&&b'+(e%20+1)+"  ":(20==e&&(this.nav_container.innerHTML+='
MESSENGER '),this.nav_container.innerHTML+=''+(e%20+1)+"")}for(var d in a)c=$('[data-sublink="facebook"] #f_nav-fiche [data-n="'+a[d].uid+'"]'),null!=c&&(!0===a[d].valid?c.addClass("done"):c.remClass("done"));this.nav($('[data-sublink="facebook"] #f_nav-fiche [data-n="'+this.selected+'"]'))}; inputFacebookFiche.prototype.check=function(a){if(2>a.city.length||isNaN(parseInt(a.duration[0]))&&0a.reltypeSpecial.length|| "11"==a.context&&2>a.contextSpecial[0].length||"12"==a.context&&2>a.contextSpecial[1].length||"13"==a.context&&2>a.contextSpecial[2].length?!1:!0};inputFacebookFiche.prototype.attach=function(a){console.group("[facebook.fiche] attaching events");lsi.createDataset("f_fiches");this.storageToFields();this.handler=a;var c=this,c=this;this.nav_container.addEventListener("click",function(a){c.nav(a.target);c.handler(a.target)},!1);console.groupEnd()}; diff --git a/js/includes/min/input-facebook-mini.js b/js/includes/min/input-facebook-mini.js index c6a565d..39c335d 100644 --- a/js/includes/min/input-facebook-mini.js +++ b/js/includes/min/input-facebook-mini.js @@ -1,13 +1,13 @@ -function inputFacebookMini(a,c){this.container=a;this.nav_container=c}inputFacebookMini.prototype={container:this.container,nav_container:this.nav_container,selected:null,handler:null,defaultData:{sexe:"2",age:".",studies:"0",loc:".",reltype:"9",unknown:!1,reltypeSpecial:"",timestamp:0,valid:!1}}; -inputFacebookMini.prototype.fieldsToStorage=function(){console.group("[facebook.mini] fields to storage");for(var a=$$('[data-sublink="facebook"] article.mini-relation-panel .mini-fiche-relation'),c=0;c MINI UPDATE");b={uid:parseInt(b.uid),sexe:b.sexe,age:b.age,studies:b.studies,reltype:b.reltype, -reltypeSpecial:b.reltypeSpecial,loc:b.loc,unknown:null!=b.unknown,hash:d};b.valid=this.check(b);0 FICHE UPDATE"),b.timestamp=Date.now());lsi.set("f_mini-fiches",b.uid,b)}}console.groupEnd()}; +function inputFacebookMini(a,c){this.container=a;this.nav_container=c}inputFacebookMini.prototype={container:this.container,nav_container:this.nav_container,selected:null,handler:null,defaultData:{contact:null,sexe:"2",age:".",studies:"0",loc:".",reltype:"9",reltypeSpecial:"",unknown:!1,timestamp:0,valid:!1}}; +inputFacebookMini.prototype.fieldsToStorage=function(){console.group("[facebook.mini] fields to storage");for(var a=$$('[data-sublink="facebook"] article.mini-relation-panel .mini-fiche-relation'),c=0;c MINI UPDATE");b={uid:parseInt(b.uid),contact:parseInt(b.uid),sexe:b.sexe,age:b.age, +studies:b.studies,reltype:b.reltype,reltypeSpecial:b.reltypeSpecial,loc:b.loc,unknown:null!=b.unknown,hash:e};b.valid=this.check(b);0 MINI UPDATE"),b.timestamp=Date.now()):void 0==d.timestamp&&(b.timestamp=this.defaultData.timestamp);lsi.set("f_mini-fiches",b.uid,b)}}console.groupEnd()}; inputFacebookMini.prototype.add=function(a){if(null==a||null==a.uid)return!1;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.studies=null!=a.studies?a.studies:this.defaultData.studies;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.unknown=null!=a.unknown?a.unknown:this.defaultData.unknown;var c=lsi.get("f_contacts", -a.uid);if(!1===c)return!1;if(!isNaN(c.existing)){var b=lsi.get("f_friends",c.existing);c.username=b.name;a.age=b.age;a.sexe=b.sexe;a.loc=b.dist;isNaN(b.reltype)?(a.reltype=10,a.reltypeSpecial=b.reltype):(a.reltype=b.reltype,a.reltypeSpecial="");null!=b.studies1&&(a.studies=b.studies1)}this.container.innerHTML+=fMiniFicheBuilder.build({name:c.username,uid:a.uid,reltypespecial:a.reltypeSpecial});c=$('[data-sublink="facebook"] article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+ -a.studies+'"]');null!=c&&c.setAttribute("selected","selected");c=$('[data-sublink="facebook"] article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+a.age+'"]');null!=c&&c.setAttribute("selected","selected");b=$$('[data-sublink="facebook"] article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');for(c=0;cinput[type="radio"][data-name="reltype"]');for(c=0;cinput[type="radio"][data-name="loc"]');for(c=0;cinput[type="checkbox"][data-name="unknown"]');null!=c&&a.unknown&&c.setAttribute("checked","checked")}; +a.uid);if(!1===c)return!1;if(!isNaN(c.existing)){var b=lsi.get("f_friends",c.existing);c.username=b.name;a.contact=b.contact;a.age=b.age;a.sexe=b.sexe;a.loc=b.dist;isNaN(b.reltype)?(a.reltype=10,a.reltypeSpecial=b.reltype):(a.reltype=b.reltype,a.reltypeSpecial="");null!=b.studies1&&(a.studies=b.studies1)}this.container.innerHTML+=fMiniFicheBuilder.build({name:c.username,uid:a.uid,reltypespecial:a.reltypeSpecial});c=$('[data-sublink="facebook"] article.mini-fiche-relation input[data-name="uid"][value="'+ +a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=c&&c.setAttribute("selected","selected");c=$('[data-sublink="facebook"] article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+a.age+'"]');null!=c&&c.setAttribute("selected","selected");b=$$('[data-sublink="facebook"] article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');for(c=0;cinput[type="radio"][data-name="reltype"]');for(c=0;cinput[type="radio"][data-name="loc"]');for(c=0;cinput[type="checkbox"][data-name="unknown"]');null!=c&&a.unknown&&c.setAttribute("checked","checked")}; inputFacebookMini.prototype.storageToFields=function(){console.group("[facebook.mini] storage to fields");var a=lsi.get("f_mini-fiches",this.selected);if(null===a){if(null===this.selected)return a=lsi.keys("f_mini-fiches"),0 span.active'),b=0;b span.active'),b=0;b'+ ++c+"");for(b in a)isNaN(b)||(c=$('[data-sublink="facebook"] #f_nav-mini [data-n="'+a[b].uid+'"]'),null!=c&&(!0===a[b].valid?c.addClass("done"):c.remClass("done")));this.nav($('[data-sublink="facebook"] #f_nav-mini [data-n="'+this.selected+'"]'))}; inputFacebookMini.prototype.check=function(a){return a.unknown?!0:""==a.sexe||"."==a.studies||"."==a.age||""==a.loc||""==a.reltype||"10"==a.reltype&&2>a.reltypeSpecial.length?!1:!0};inputFacebookMini.prototype.attach=function(a){console.group("[facebook.mini] attaching events");lsi.createDataset("f_mini-fiches");this.storageToFields();this.handler=a;this.nav_container.addEventListener("click",function(a){this.nav(a.target);this.handler(a.target)}.bind(this),!1);console.groupEnd()}; diff --git a/js/includes/min/input-phone-mini.js b/js/includes/min/input-phone-mini.js index 433a3dc..1a9cbd7 100644 --- a/js/includes/min/input-phone-mini.js +++ b/js/includes/min/input-phone-mini.js @@ -1,6 +1,6 @@ function inputPhoneMini(a,c){this.container=a;this.nav_container=c}inputPhoneMini.prototype={container:this.container,nav_container:this.nav_container,selected:null,handler:null,defaultData:{contact:null,sexe:"2",age:".",studies:"0",loc:".",reltype:"9",reltypeSpecial:"",unknown:!1,timestamp:0,valid:!1}}; inputPhoneMini.prototype.fieldsToStorage=function(){console.group("[phone.mini] fields to storage");for(var a=$$('[data-sublink="phone"] article.mini-relation-panel .mini-fiche-relation'),c=0;c MINI UPDATE");b={uid:parseInt(b.uid),contact:parseInt(b.uid),sexe:b.sexe,age:b.age,studies:b.studies, -reltype:b.reltype,reltypeSpecial:b.reltypeSpecial,loc:b.loc,unknown:null!=b.unknown,hash:e};b.valid=this.check(b);0 FICHE UPDATE"),b.timestamp=Date.now()):void 0==d.timestamp&&(b.timestamp=this.defaultData.timestamp);lsi.set("p_mini-fiches",b.uid,b)}}console.groupEnd()}; +reltype:b.reltype,reltypeSpecial:b.reltypeSpecial,loc:b.loc,unknown:null!=b.unknown,hash:e};b.valid=this.check(b);0 MINI UPDATE"),b.timestamp=Date.now()):void 0==d.timestamp&&(b.timestamp=this.defaultData.timestamp);lsi.set("p_mini-fiches",b.uid,b)}}console.groupEnd()}; inputPhoneMini.prototype.add=function(a){if(null==a||null==a.uid)return!1;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.studies=null!=a.studies?a.studies:this.defaultData.studies;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.unknown=null!=a.unknown?a.unknown:this.defaultData.unknown;var c=lsi.get("p_contacts", a.uid);if(!1===c)return!1;if(!isNaN(c.existing)){var b=lsi.get("p_friends",c.existing);c.username=b.name;a.contact=c.uid;a.age=b.age;a.sexe=b.sexe;a.loc=b.dist;isNaN(b.reltype)?(a.reltype=10,a.reltypeSpecial=b.reltype):(a.reltype=b.reltype,a.reltypeSpecial="");null!=b.studies1&&(a.studies=b.studies1)}this.container.innerHTML+=pMiniFicheBuilder.build({name:c.username,countcall:c.countcall,countsms:c.countsms,uid:a.uid,reltypespecial:a.reltypeSpecial});c=$('[data-sublink="phone"] article.mini-fiche-relation input[data-name="uid"][value="'+ a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=c&&c.setAttribute("selected","selected");c=$('[data-sublink="phone"] article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+a.age+'"]');null!=c&&c.setAttribute("selected","selected");b=$$('[data-sublink="phone"] article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');for(c=0;c) caché qui fera le téléchargement - downloadTarget.download = 'local-phone-data.json'; // Nom du fichier qui sera téléchargé + downloadTarget.download = 'local-facebook-data.json'; // Nom du fichier qui sera téléchargé downloadTarget.href = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(data)); // Contenu downloadTarget.click(); // On lance le téléchargement diff --git a/view/js/min/input.js b/view/js/min/input.js index aff08bc..9575729 100644 --- a/view/js/min/input.js +++ b/view/js/min/input.js @@ -14,7 +14,7 @@ console.log(a)},!1)},!1),console.groupEnd())};include("/js/includes/input-phone- var fAlready=0,fLoaded=[0,0,0,0,0],facebookRoutine=function(){!Math.min.apply(Math,fLoaded)|fAlready||(fAlready=1,console.groupEnd(),console.group("[facebook] Initialization"),fSubjectManager=new inputFacebookSubject($('[data-sublink="facebook"] article.subject-panel [data-name="subject_id"]'),$('[data-sublink="facebook"] article.subject-panel [data-name="submit"]')),fSubjectManager.attach(fDynamicUpdate),fContactManager=new inputFacebookContact($('[data-sublink="facebook"] article.contact-panel'), $('[data-sublink="facebook"] #f_nav-contact')),fContactManager.attach(fDynamicUpdate),fMiniManager=new inputFacebookMini($('[data-sublink="facebook"] article.mini-relation-panel'),$('[data-sublink="facebook"] #f_nav-mini')),fMiniManager.attach(fDynamicUpdate),fFicheManager=new inputFacebookFiche($('[data-sublink="facebook"] article.relation-panel'),$('[data-sublink="facebook"] #f_nav-fiche')),fFicheManager.top_size=20,fFicheManager.attach(fDynamicUpdate),fMatriceManager=new inputFacebookMatrice($('[data-sublink="facebook"] article.matrice-panel')), fMatriceManager.attach(fDynamicUpdate),$('[data-sublink="facebook"] #f_clear-all').addEventListener("click",function(a){lsi.clear("f_subject");lsi.clear("f_contacts");lsi.clear("f_mini-fiches");lsi.clear("f_fiches");lsi.clear("f_matrice");lsi.clear("f_friends");fSubjectManager.storageToFields();fContactManager.storageToFields();fMiniManager.storageToFields();fFicheManager.storageToFields();fMatriceManager.storageToFields();Notification.success("OK","Les donn\u00e9es ont \u00e9t\u00e9 supprim\u00e9es")}, -!1),$('[data-sublink="facebook"] #f_export-all').addEventListener("click",function(a){Notification.info("INFORMATION","Lancement du t\u00e9l\u00e9chargement de la sauvegarde");a={subject:lsi["export"]("f_subject")[0],contacts:lsi["export"]("f_contacts"),mini:lsi["export"]("f_mini-fiches"),fiches:lsi["export"]("f_fiches"),matrice:lsi["export"]("f_matrice")[0]};var b=$('[data-sublink="facebook"] #f_download-target');b.download="local-phone-data.json";b.href="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(a)); +!1),$('[data-sublink="facebook"] #f_export-all').addEventListener("click",function(a){Notification.info("INFORMATION","Lancement du t\u00e9l\u00e9chargement de la sauvegarde");a={subject:lsi["export"]("f_subject")[0],contacts:lsi["export"]("f_contacts"),mini:lsi["export"]("f_mini-fiches"),fiches:lsi["export"]("f_fiches"),matrice:lsi["export"]("f_matrice")[0]};var b=$('[data-sublink="facebook"] #f_download-target');b.download="local-facebook-data.json";b.href="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(a)); b.click()},!1),$('[data-sublink="facebook"] #f_import-all').addEventListener("click",function(a){$('[data-sublink="facebook"] #f_local-upload').click()},!1),$('[data-sublink="facebook"] #f_local-upload').addEventListener("click",function(a){a.target.value=null},!1),$('[data-sublink="facebook"] #f_local-upload').addEventListener("change",function(a){a={path:"upload/local_data",file:$('[data-sublink="facebook"] #f_local-upload').files[0]};api.send(a,function(a){console.log(a);if(0!=a.ModuleError)return Notification.error("Erreur", a.ModuleError),!1;lsi.set("f_subject",0,a.local_data.subject);lsi["import"]("f_contacts",a.local_data.contacts);lsi["import"]("f_mini-fiches",a.local_data.mini);lsi["import"]("f_fiches",a.local_data.fiches);lsi.set("f_matrice",0,a.local_data.matrice);pSubjectManager.storageToFields();pContactManager.storageToFields();pMatriceManager.storageToFields();pDynamicUpdate(!0)})},!1),$('[data-sublink="facebook"] #f_submit-all').addEventListener("click",function(a){console.log("> GATHERING ALL DATA");pSubjectManager.fieldsToStorage(); pContactManager.fieldsToStorage();pMiniManager.fieldsToStorage();pFicheManager.fieldsToStorage();if(!pSubjectManager.check())return Notification.warning("Attention","Vous devez saisir les informations du sujet"),!1;a=lsi["export"]("f_mini-fiches");var b=0,c;for(c in a)if(!isNaN(c)&&(b++,!a[c].valid))return Notification.warning("Attention","La fiche rapide "+b+" est incompl\u00e8te et/ou incorrecte"),!1;a=lsi["export"]("f_fiches");for(c in a)if(!a[c].valid)return Notification.warning("Attention",