// STRUCTURE DU localStorage // subject-data -> contient // contacts-data // fiches-relation /* [0] Gestion des constantes et fonctions =========================================================*/ var contactBuilder = new HTMLBuilder(); contactBuilder.setLayout( "

"+ " "+ " "+ " "+ " "+ ""+ "

"); /* (2) TODO: Contiendra la fiche relation complète */ var ficheBuilder = new HTMLBuilder(); ficheBuilder.setLayout( "

"+ " "+ " "+ " "+ " "+ ""+ "

"); /* (3) Fonction qui met à jour un élément et son listener */ function updateListener(element, eventType, handler){ element.removeEventListener(eventType, handler); element.addEventListener(eventType, handler); } /* [1] Initialisation des utilitaires =========================================================*/ /* (1) Instanciation de inputChecker */ var ic = new inputChecker(); /* (2) Paramètres de FormDeflater */ var FormDeflaterP = { tags: ['input'], attr: ['data-name'] }; /* [2] Indexation des inputs =========================================================*/ /* (1) Input de type fichier pour l'import */ var importCallLog = $('input#call_log-import[type="file"]'); /* (2) Contiendra les formulaires des contacts ajoutés */ var contactDeflaters = []; // Contiendra les deflaters de chaque formulaire d'ajout de contact function contactForms(){ // {1} On récupère les formulaires // var contactForms = $$('h4.new-contact'); // {2} Mise à jour des deflaters // contactDeflaters = []; for( var i = 0 ; i < contactForms.length ; i++ ) contactDeflaters.push( new FormDeflater( contactForms[i], FormDeflaterP.tags, FormDeflaterP.attr )); // {3} On retourne la liste des formulaires // return contactForms; } /* (3) Bouton d'ajout de contact */ var addContact = $('h4.add-contact'); /* (4) Bouton d'ajout de fiche */ var addFiche = $('h4.add-fiche'); /* [3] Gestion des formulaires de contact =========================================================*/ /* (0) Conteneur de tous les formulaires */ var contactContainer = $('article.contact-panel'); /* (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); } /* (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 */ var ficheContainer = $('article.contact-panel'); /* (1) Fonction pour l'ajout d'un contact */ function addNewFiche(number, username, firstname, lastname){ ficheContainer.innerHTML += contactBuilder.build({ number: (typeof number != 'string') ? '' : number, username: (typeof username != 'string') ? '' : username, firstname: (typeof firstname != 'string') ? '' : firstname, lastname: (typeof lastname != 'string') ? '' : lastname }); } // On ajoute la première // addNewFiche(); // Puis on attache l'évènement pour en ajouter d'autres manuellement // addContact.addEventListener('click', addNewFiche, false); /* [5] Gestion des deflaters (formulaires) de contact =========================================================*/ /* [6] Gestion des deflaters (formulaires) de fiches =========================================================*/ /* (4) Contiendra les formulaires de fiche relation */ var ficheDeflaters = []; // Contiendra les deflaters de chaque formulaire de fiche de fiche function ficheForms(){ // {1} On récupère les formulaires // var ficheForms = $$('h4.fiche-fiche'); // {2} Mise à jour des deflaters // ficheDeflaters = []; for( var i = 0 ; i < ficheForms.length ; i++ ) ficheDeflaters.push( new FormDeflater( ficheForms[i], FormDeflaterP.tags, FormDeflaterP.attr )); // {3} On retourne la liste des formulaires // return ficheForms; } /* [3] Gestion de l'import du fichier =========================================================*/ importCallLog.addEventListener('change', function(e){ /* (1) On rédige la requête */ var uploadRequest = { path: 'upload/call_log', file: importCallLog.files[0] }; /* (2) On effectue l'upload (import) */ api.send(uploadRequest, function(response){ console.log( response ); // Si tout est bon, on met l'input en bleu if( response.ModuleError == 0 ) importCallLog.addClass('active'); // TODO: Gestion de l'ajout des fiches relation }); }, false); // var number = $('input.number[type="text"]'); // ic.append(number, format_number, '06 06 06 06 06'); // // format_number -> format pour les numéros de téléphones // // number.addEventListener('keyup', function(e){ // ic.correct(number, false); // }, false);