From 74676f7c58492f78d8d21e68efb3158cef77361e Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 22 Apr 2016 16:40:06 +0200 Subject: [PATCH] =?UTF-8?q?Gestion=20de=20l'enregistrement=20local=20+=20d?= =?UTF-8?q?e=20la=20restauration=20au=20chargement=20(erreur=20quand=20on?= =?UTF-8?q?=20ajoute=20un=20formulaire=20de=20contact,=20ceux=20qui=20ont?= =?UTF-8?q?=20=C3=A9t=C3=A9=20charg=C3=A9s=20dynamiquement=20se=20'reset')?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/lib/html-builder-min.js | 2 +- js/lib/html-builder.js | 1 - js/lib/local-storage-interface-min.js | 4 +- js/lib/local-storage-interface.js | 10 ++-- view/js/input-min.js | 9 +-- view/js/input.js | 81 ++++++++++++++++++++++++--- 6 files changed, 87 insertions(+), 20 deletions(-) diff --git a/js/lib/html-builder-min.js b/js/lib/html-builder-min.js index 85092fe..0c66381 100644 --- a/js/lib/html-builder-min.js +++ b/js/lib/html-builder-min.js @@ -1 +1 @@ -function HTMLBuilder(){}HTMLBuilder.prototype={layout:null,default_params:{},setLayout:function(a){this.layout=a},build:function(a){var b=this.layout,c;for(c in a){var d=new RegExp("@"+c,"g");console.log(d);b=b.replace(d,a[c])}return b}}; +function HTMLBuilder(){}HTMLBuilder.prototype={layout:null,default_params:{},setLayout:function(a){this.layout=a},build:function(a){var b=this.layout,c;for(c in a)b=b.replace(new RegExp("@"+c,"g"),a[c]);return b}}; diff --git a/js/lib/html-builder.js b/js/lib/html-builder.js index fe48f25..2797ea7 100644 --- a/js/lib/html-builder.js +++ b/js/lib/html-builder.js @@ -19,7 +19,6 @@ HTMLBuilder.prototype = { for( var name in parameters ){ // Contiendra l'expression régulière pour remplacer le paramètre var regex = new RegExp('@'+name, 'g'); - console.log(regex); render = render.replace(regex, parameters[name]); } diff --git a/js/lib/local-storage-interface-min.js b/js/lib/local-storage-interface-min.js index cac0941..51a780a 100644 --- a/js/lib/local-storage-interface-min.js +++ b/js/lib/local-storage-interface-min.js @@ -1,3 +1,3 @@ function localStorageInterface(){} -localStorageInterface.prototype={dataset:[],dataset_keys:[],set:function(a,b,d){var c=this.dataset.indexOf(a);if(-1==c)return!1;this.dataset_keys[c].push(b);localStorage.setItem(a,JSON.stringify(this.dataset_keys[c]));localStorage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){return-1==this.dataset.indexOf(a)?!1:JSON.parse(localStorage.getItem(a+"_"+b))},createDataset:function(a){if(null==a||"string"!=typeof a)return!1;if(-1 "+b);-1==this.dataset_keys[c].indexOf(b)&&(this.dataset_keys[c].push(b),localStorage.setItem(a,JSON.stringify(this.dataset_keys[c])));localStorage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){return-1==this.dataset.indexOf(a)?!1:JSON.parse(localStorage.getItem(a+"_"+b))},createDataset:function(a){if(null==a||"string"!= +typeof a)return!1;if(-1 "); var ficheBuilder=new HTMLBuilder;ficheBuilder.setLayout("

"); -function updateListener(b,a,c,d){b.removeEventListener(a,c);d.addEventListener(a,c);return d}var ic=new inputChecker,FormDeflaterP={tags:["input"],attr:["data-name"]},importCallLog=$('input#call_log-import[type="file"]'),contactDeflaters=[];function contactForms(){var b=$$("h4.new-contact");contactDeflaters=[];for(var a=0;a"); -// Fonction qui met à jour un élément et son listener -function updateListener(element, eventType, handler, newElement){ +/* (3) Fonction qui met à jour un élément et son listener */ +function updateListener(element, eventType, handler){ element.removeEventListener(eventType, handler); - newElement.addEventListener(eventType, handler); - return newElement; + element.addEventListener(eventType, handler); } @@ -105,30 +104,96 @@ var addFiche = $('h4.add-fiche'); + + + + + /* [3] Gestion des formulaires de contact =========================================================*/ /* (0) Conteneur de tous les formulaires */ var contactContainer = $('article.contact-panel'); -/* (1) Fonction pour l'ajout d'un contact */ +/* (1) Gestion de l'enregistrement des contacts en local ('localStorage') */ +lsi.createDataset('contacts'); +function storeContacts(e){ + console.log('storing'); + // {1} On récupère les informations relatives à l'élément courant // + var form = e.target.parentNode; + var indexInParent = form.parentNode.children.indexOf(form); + + // {2} On initialise notre deflater pour récupérer les valeurs // + var deflater = new FormDeflater(form, ['input'], ['data-name']); + + // {3} On récupère et met en forme les valeurs du deflater // + var deflated = deflater.deflate(); + var obj = { + number: deflated.number.value, + username: deflated.username.value, + firstname: deflated.firstname.value, + lastname: deflated.lastname.value + }; + + // {4} On enregistre les données dans le 'localStorage' // + lsi.set('contacts', 'form'+indexInParent, obj); +} + + +/* (2) Fonction pour l'ajout d'un contact */ function addNewContact(number, username, firstname, lastname){ + // {1} On ajoute le HTML // contactContainer.innerHTML += contactBuilder.build({ number: (typeof number != 'string') ? '' : number, username: (typeof username != 'string') ? '' : username, firstname: (typeof firstname != 'string') ? '' : firstname, lastname: (typeof lastname != 'string') ? '' : lastname }); + + // {2} On attache les évènements sur les boutons 'Enregistrer' // + var contactSubmits = $$('article.contact-panel .new-contact input[type="submit"]'); + for( var i = 0 ; i < contactSubmits.length ; i++ ) + updateListener(contactSubmits[i], 'click', storeContacts); + } -// On ajoute le premier -addNewContact(); -// Puis on attache l'évènement pour en ajouter d'autres manuellement +/* (3) Gestion de la récupération des contacts (depuis 'localStorage') */ +function restoreContacts(){ + // {1} Pour chaque contact du 'localStorage' // + var existingContacts = lsi.keys('contacts'); + + for( var i = 0 ; i < existingContacts.length ; i++ ){ + // {2} On récupère les informations du contact // + var contactData = lsi.get('contacts', existingContacts[i]); + + // {3} On ajoute un contact à la liste // + addNewContact( + contactData.number, + contactData.username, + contactData.firstname, + contactData.lastname + ); + } + +}restoreContacts(); + +// Si on a aucun contact, on en ajoute 1 +if( ('article.contact-panel .new-contact input[type="submit"]') == null ) + addNewContact(); + + + + +/* (n) On attache tous les évènements */ addContact.addEventListener('click', addNewContact, false); + + + + /* [4] Gestion des fiches relation =========================================================*/ /* (0) Conteneur de tous les formulaires */