From c053ebd1553838615715461389171a78b238ff0f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 28 Apr 2016 18:49:49 +0200 Subject: [PATCH] Optimisation, on ne charge qu'une fois les contacts --- js/includes/input-phone-contact-min.js | 7 ++-- js/includes/input-phone-contact.js | 5 ++- js/includes/input-phone-mini-min.js | 9 +++-- js/includes/input-phone-mini.js | 48 +++++++++++--------------- js/lib/crc32-min.js | 1 + js/lib/crc32.js | 23 ++++++++++++ view.php | 1 + view/js/input-min.js | 4 +-- view/js/input.js | 4 +-- 9 files changed, 61 insertions(+), 41 deletions(-) create mode 100644 js/lib/crc32-min.js create mode 100644 js/lib/crc32.js diff --git a/js/includes/input-phone-contact-min.js b/js/includes/input-phone-contact-min.js index efc1de9..c074ffa 100644 --- a/js/includes/input-phone-contact-min.js +++ b/js/includes/input-phone-contact-min.js @@ -1,4 +1,5 @@ function inputPhoneContact(a){this.container=a}inputPhoneContact.prototype={container:this.container,handler:null}; -inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$("article.contact-panel .new-contact"),b=0;bspan>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;binput[type="radio"][data-name="loc"]');for(b=0;binput[type="radio"][data-name="loc"]');for(b=0;b span.active"),c=0;c"+(parseInt(a[b])+1)+""}a=lsi["export"]("mini-fiches");for(var c in a)!0===a[c].valid?this.nav_container.children[a[c].uid].addClass("done"):this.nav_container.children[a[c].uid].remClass("done");this.nav(this.nav_container.children[this.selected])}; +inputPhoneMini.prototype.updateNavBar=function(){var a=lsi["export"]("mini-fiches"),a=Object.keys(a).length;if(this.nav_container.children.length!=a){this.nav_container.innerHTML="";for(var b=0;b"}var a=lsi["export"]("mini-fiches"),c;for(c in a)b=this.nav_container.children[a[c].uid],b.innerHTML=a[c].uid+1,!0===a[c].valid?b.addClass("done"):b.remClass("done");this.nav(this.nav_container.children[this.selected])}; inputPhoneMini.prototype.check=function(a){return!isNaN(parseInt(a.age))&&checkRadioValue(a.sexe)&&"."!=a.job&&checkRadioValue(a.loc)?!0:!1};inputPhoneMini.prototype.attach=function(a){console.log("MINI FICHE: ATTACH");lsi.createDataset("mini-fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)}; diff --git a/js/includes/input-phone-mini.js b/js/includes/input-phone-mini.js index babb62e..dc176b0 100644 --- a/js/includes/input-phone-mini.js +++ b/js/includes/input-phone-mini.js @@ -65,11 +65,11 @@ inputPhoneMini.prototype.fieldsToStorage = function(){ loc: deflated.loc // [0] Choix 1 -> [3] Choix 4 }; - /* (6) On vérifie la validité des données et on l'enregistre dans l'objet */ + /* (8) On vérifie la validité des données et on l'enregistre dans l'objet */ obj.valid = this.check(obj); - // {7} On enregistre les données dans le 'localStorage' // + /* (9) On enregistre les données dans le 'localStorage' */ lsi.set('mini-fiches', 'form'+obj.uid, obj); } @@ -94,7 +94,7 @@ inputPhoneMini.prototype.add = function(objectData){ console.log('MINI FICHE: ADD'); // Si pas d'UID, on retourne une erreur - if( objectData.uid == null ) + if( objectData == null || objectData.uid == null ) return false; /* (0) Gestion du formattage des valeur */ @@ -157,24 +157,11 @@ inputPhoneMini.prototype.storageToFields = function(){ // On réinitialise le HTML this.container.innerHTML = ''; - // On récupère les UIDS - var UIDs = []; + // {2} On affiche la MINI fiche sélectionnée // + this.add(miniData['form'+this.selected]); - for( var key in miniData ){ - var uid = miniData[key].uid; - - // {3} On affiche la MINI fiche sélectionnée // - if( uid == this.selected ) - this.add(miniData[key]); - - // {4} On enregistre l'UID // - UIDs.push(uid); - } - - - - // {4} On met à jour la navigation // - this.updateNavBar(UIDs); + // {3} On met à jour la navigation // + this.updateNavBar(); }; @@ -209,8 +196,6 @@ inputPhoneMini.prototype.sync = function(){ miniData.valid = false; } - console.log(contactData[key]); - /* (5) On met à jour la MINI fiche */ miniData.uid = contactData[key].uid; miniData.firstname = contactData[key].firstname; @@ -259,26 +244,33 @@ inputPhoneMini.prototype.nav = function(element){ /* [7] Mise à jour de la navigation =========================================================*/ -inputPhoneMini.prototype.updateNavBar = function(uid_list){ +inputPhoneMini.prototype.updateNavBar = function(){ + var miniData = lsi.export('mini-fiches'); + var len = Object.keys(miniData).length; + /* (1) On vérifie si la barre de navigation est à jour */ - var navBarUpToDate = this.nav_container.children.length == uid_list.length; + var navBarUpToDate = this.nav_container.children.length == len; /* (1) 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 < uid_list.length ; i++ ) - this.nav_container.innerHTML += ''+( parseInt(uid_list[i])+1 )+''; + for( var i = 0 ; i < len ; i++ ) + this.nav_container.innerHTML += ''; } /* (3) On montre les MINI fiches qui sont correctes dans la navbar */ var miniData = lsi.export('mini-fiches'); for( var key in miniData ){ + var currentElement = this.nav_container.children[miniData[key].uid]; + + currentElement.innerHTML = miniData[key].uid+1; + // Si la MINI fiche est valide - if( miniData[key].valid === true ) this.nav_container.children[miniData[key].uid].addClass('done'); + if( miniData[key].valid === true ) currentElement.addClass('done'); // Si elle est invalide - else this.nav_container.children[miniData[key].uid].remClass('done'); + else currentElement.remClass('done'); } diff --git a/js/lib/crc32-min.js b/js/lib/crc32-min.js new file mode 100644 index 0000000..4ce6c6d --- /dev/null +++ b/js/lib/crc32-min.js @@ -0,0 +1 @@ +var makeCRCTable=function(){for(var a,d=[],b=0;256>b;b++){a=b;for(var c=0;8>c;c++)a=a&1?3988292384^a>>>1:a>>>1;d[b]=a}return d},crc32=function(a){for(var d=window.crcTable||(window.crcTable=makeCRCTable()),b=-1,c=0;c>>8^d[(b^a.charCodeAt(c))&255];return(b^-1)>>>0}; diff --git a/js/lib/crc32.js b/js/lib/crc32.js new file mode 100644 index 0000000..77b8a06 --- /dev/null +++ b/js/lib/crc32.js @@ -0,0 +1,23 @@ +var makeCRCTable = function(){ + var c; + var crcTable = []; + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + crcTable[n] = c; + } + return crcTable; +} + +var crc32 = function(str) { + var crcTable = window.crcTable || (window.crcTable = makeCRCTable()); + var crc = 0 ^ (-1); + + for (var i = 0; i < str.length; i++ ) { + crc = (crc >>> 8) ^ crcTable[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)) >>> 0; +}; diff --git a/view.php b/view.php index bfa14e4..2802acd 100755 --- a/view.php +++ b/view.php @@ -25,6 +25,7 @@ + diff --git a/view/js/input-min.js b/view/js/input-min.js index 4959a67..f3c4735 100644 --- a/view/js/input-min.js +++ b/view/js/input-min.js @@ -1,7 +1,7 @@ var clearAllButton=$("#clear-all"),importCallLog=$('input#call_log-import[type="file"]'),subjectManager,contactManager,miniManager,ficheManager; function dynamicUpdate(a){var c=a instanceof Element,b=c&&"SPAN"==a.tagName&&"switch-left"==a.className,d=c&&"SPAN"==a.tagName&&"switch-both"==a.className,e=c&&"INPUT"==a.tagName&&"submit"==a.type,c=c&&"SPAN"==a.tagName&&("nav-mini"==a.parentNode.id||"nav-fiche"==a.parentNode.id);if(!(d||b||e||c)&&!0!==a)return!1;d?(console.log("> switch firstname <-> lastname"),b=a.parentNode,a=b.children[3],b=b.children[5],d=a.value,a.value=b.value,b.value=d):b?(console.log("> switch firstname+lastname -> username"), -b=a.parentNode,d=b.children[1],a=b.children[3],b=b.children[5],d.value=a.value+" "+b.value,a.value="",b.value=""):(console.log("> dynamic update"),miniManager.fieldsToStorage(),ficheManager.fieldsToStorage(),contactManager.fieldsToStorage(),miniManager.sync(),ficheManager.sync(),miniManager.storageToFields(),ficheManager.storageToFields(),contactManager.storageToFields())}function checkRadioValue(a){for(var c=0,b=0;b dynamic update"),miniManager.fieldsToStorage(),ficheManager.fieldsToStorage(),contactManager.fieldsToStorage(),miniManager.sync(),ficheManager.sync(),miniManager.storageToFields(),ficheManager.storageToFields())}function checkRadioValue(a){for(var c=0,b=0;b