2016-04-22 12:44:23 +00:00
|
|
|
// STRUCTURE DU localStorage
|
2016-04-22 12:58:32 +00:00
|
|
|
// subject-data -> contient
|
2016-04-22 12:44:23 +00:00
|
|
|
// contacts-data
|
|
|
|
// fiches-relation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-21 14:41:11 +00:00
|
|
|
/* [0] Gestion des constantes et fonctions
|
2016-04-21 09:46:24 +00:00
|
|
|
=========================================================*/
|
2016-04-22 13:17:39 +00:00
|
|
|
var contactBuilder = new HTMLBuilder();
|
2016-04-22 13:51:17 +00:00
|
|
|
contactBuilder.setLayout(
|
|
|
|
"<h4 data-icon='p' class='new-contact'> "+
|
|
|
|
"<input type='text' data-name='number' placeholder='Numéro de téléphone' value='@number' > "+
|
|
|
|
"<input type='text' data-name='username' placeholder='Pseudo' value='@username' > "+
|
|
|
|
"<input type='text' data-name='firstname' placeholder='Prénom' value='@firstname' > "+
|
|
|
|
"<input type='text' data-name='lastname' placeholder='Nom' value='@lastname' > "+
|
|
|
|
"<input type='submit' class='primary sub-number' value='Enregistrer'>"+
|
|
|
|
"</h4>");
|
2016-04-21 15:14:50 +00:00
|
|
|
|
2016-04-21 09:46:24 +00:00
|
|
|
|
|
|
|
/* (2) TODO: Contiendra la fiche relation complète */
|
2016-04-22 13:51:17 +00:00
|
|
|
var ficheBuilder = new HTMLBuilder();
|
|
|
|
ficheBuilder.setLayout(
|
|
|
|
"<h4 data-icon='p' class='new-contact'> "+
|
|
|
|
"<input type='text' data-name='number' placeholder='Numéro de téléphone' value='@number' > "+
|
|
|
|
"<input type='text' data-name='username' placeholder='Pseudo' value='@username' > "+
|
|
|
|
"<input type='text' data-name='firstname' placeholder='Prénom' value='@firstname' > "+
|
|
|
|
"<input type='text' data-name='lastname' placeholder='Nom' value='@lastname' > "+
|
|
|
|
"<input type='submit' class='primary sub-number' value='Enregistrer'>"+
|
|
|
|
"</h4>");
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
|
2016-04-22 14:40:06 +00:00
|
|
|
/* (3) Fonction qui met à jour un élément et son listener */
|
|
|
|
function updateListener(element, eventType, handler){
|
2016-04-21 15:14:50 +00:00
|
|
|
element.removeEventListener(eventType, handler);
|
2016-04-22 14:40:06 +00:00
|
|
|
element.addEventListener(eventType, handler);
|
2016-04-21 15:14:50 +00:00
|
|
|
}
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-21 09:46:24 +00:00
|
|
|
|
2016-04-21 13:22:43 +00:00
|
|
|
/* [1] Initialisation des utilitaires
|
2016-04-21 09:46:24 +00:00
|
|
|
=========================================================*/
|
2016-04-21 13:22:43 +00:00
|
|
|
/* (1) Instanciation de inputChecker */
|
2016-04-21 09:26:21 +00:00
|
|
|
var ic = new inputChecker();
|
2016-04-20 13:21:01 +00:00
|
|
|
|
2016-04-21 13:22:43 +00:00
|
|
|
/* (2) Paramètres de FormDeflater */
|
|
|
|
var FormDeflaterP = { tags: ['input'], attr: ['data-name'] };
|
|
|
|
|
2016-04-20 13:21:01 +00:00
|
|
|
|
2016-04-21 09:46:24 +00:00
|
|
|
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-22 13:51:17 +00:00
|
|
|
|
2016-04-21 09:46:24 +00:00
|
|
|
/* [2] Indexation des inputs
|
|
|
|
=========================================================*/
|
|
|
|
/* (1) Input de type fichier pour l'import */
|
2016-04-22 08:27:58 +00:00
|
|
|
var importCallLog = $('input#call_log-import[type="file"]');
|
2016-04-21 09:46:24 +00:00
|
|
|
|
2016-04-21 14:41:11 +00:00
|
|
|
|
2016-04-21 09:46:24 +00:00
|
|
|
/* (2) Contiendra les formulaires des contacts ajoutés */
|
2016-04-21 14:41:11 +00:00
|
|
|
var contactDeflaters = []; // Contiendra les deflaters de chaque formulaire d'ajout de contact
|
|
|
|
function contactForms(){
|
|
|
|
// {1} On récupère les formulaires //
|
2016-04-22 08:27:58 +00:00
|
|
|
var contactForms = $$('h4.new-contact');
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
// {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;
|
|
|
|
}
|
|
|
|
|
2016-04-21 09:46:24 +00:00
|
|
|
/* (3) Bouton d'ajout de contact */
|
2016-04-22 08:27:58 +00:00
|
|
|
var addContact = $('h4.add-contact');
|
2016-04-21 09:46:24 +00:00
|
|
|
|
2016-04-22 13:51:17 +00:00
|
|
|
/* (4) Bouton d'ajout de fiche */
|
|
|
|
var addFiche = $('h4.add-fiche');
|
|
|
|
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
|
2016-04-22 14:40:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-22 13:51:17 +00:00
|
|
|
/* [3] Gestion des formulaires de contact
|
|
|
|
=========================================================*/
|
|
|
|
/* (0) Conteneur de tous les formulaires */
|
2016-04-22 08:27:58 +00:00
|
|
|
var contactContainer = $('article.contact-panel');
|
2016-04-21 14:41:11 +00:00
|
|
|
|
2016-04-22 14:40:06 +00:00
|
|
|
/* (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 */
|
2016-04-22 13:51:17 +00:00
|
|
|
function addNewContact(number, username, firstname, lastname){
|
2016-04-22 14:40:06 +00:00
|
|
|
// {1} On ajoute le HTML //
|
2016-04-22 13:51:17 +00:00
|
|
|
contactContainer.innerHTML += contactBuilder.build({
|
|
|
|
number: (typeof number != 'string') ? '' : number,
|
|
|
|
username: (typeof username != 'string') ? '' : username,
|
|
|
|
firstname: (typeof firstname != 'string') ? '' : firstname,
|
|
|
|
lastname: (typeof lastname != 'string') ? '' : lastname
|
|
|
|
});
|
2016-04-22 14:40:06 +00:00
|
|
|
|
|
|
|
// {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);
|
|
|
|
|
2016-04-22 13:51:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-04-22 14:40:06 +00:00
|
|
|
/* (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 */
|
2016-04-22 13:51:17 +00:00
|
|
|
addContact.addEventListener('click', addNewContact, false);
|
2016-04-21 14:41:11 +00:00
|
|
|
|
2016-04-21 15:14:50 +00:00
|
|
|
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
|
2016-04-22 14:40:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-22 13:51:17 +00:00
|
|
|
/* [4] Gestion des fiches relation
|
|
|
|
=========================================================*/
|
|
|
|
/* (0) Conteneur de tous les formulaires */
|
|
|
|
var ficheContainer = $('article.contact-panel');
|
2016-04-21 14:41:11 +00:00
|
|
|
|
2016-04-22 13:51:17 +00:00
|
|
|
/* (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
|
|
|
|
});
|
2016-04-21 14:41:11 +00:00
|
|
|
}
|
|
|
|
|
2016-04-22 13:51:17 +00:00
|
|
|
// On ajoute la première
|
|
|
|
// addNewFiche();
|
|
|
|
|
|
|
|
// Puis on attache l'évènement pour en ajouter d'autres manuellement
|
|
|
|
// addContact.addEventListener('click', addNewFiche, false);
|
|
|
|
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-22 13:51:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [5] Gestion des deflaters (formulaires) de contact
|
|
|
|
=========================================================*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [6] Gestion des deflaters (formulaires) de fiches
|
|
|
|
=========================================================*/
|
2016-04-21 09:46:24 +00:00
|
|
|
/* (4) Contiendra les formulaires de fiche relation */
|
2016-04-22 13:51:17 +00:00
|
|
|
var ficheDeflaters = []; // Contiendra les deflaters de chaque formulaire de fiche de fiche
|
|
|
|
function ficheForms(){
|
2016-04-21 14:41:11 +00:00
|
|
|
// {1} On récupère les formulaires //
|
2016-04-22 13:51:17 +00:00
|
|
|
var ficheForms = $$('h4.fiche-fiche');
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
// {2} Mise à jour des deflaters //
|
2016-04-22 13:51:17 +00:00
|
|
|
ficheDeflaters = [];
|
|
|
|
for( var i = 0 ; i < ficheForms.length ; i++ )
|
|
|
|
ficheDeflaters.push( new FormDeflater( ficheForms[i], FormDeflaterP.tags, FormDeflaterP.attr ));
|
2016-04-21 14:41:11 +00:00
|
|
|
|
|
|
|
// {3} On retourne la liste des formulaires //
|
2016-04-22 13:51:17 +00:00
|
|
|
return ficheForms;
|
2016-04-21 14:41:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-21 09:26:21 +00:00
|
|
|
|
2016-04-20 13:21:01 +00:00
|
|
|
|
2016-04-21 09:46:24 +00:00
|
|
|
/* [3] Gestion de l'import du fichier
|
|
|
|
=========================================================*/
|
|
|
|
importCallLog.addEventListener('change', function(e){
|
2016-04-20 13:21:01 +00:00
|
|
|
/* (1) On rédige la requête */
|
2016-04-20 13:46:19 +00:00
|
|
|
var uploadRequest = {
|
2016-04-20 13:21:01 +00:00
|
|
|
path: 'upload/call_log',
|
2016-04-21 09:46:24 +00:00
|
|
|
file: importCallLog.files[0]
|
2016-04-20 13:21:01 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* (2) On effectue l'upload (import) */
|
2016-04-20 13:46:19 +00:00
|
|
|
api.send(uploadRequest, function(response){
|
2016-04-20 13:21:01 +00:00
|
|
|
console.log( response );
|
2016-04-21 14:41:11 +00:00
|
|
|
// Si tout est bon, on met l'input en bleu
|
|
|
|
if( response.ModuleError == 0 )
|
|
|
|
importCallLog.addClass('active');
|
|
|
|
|
2016-04-21 09:46:24 +00:00
|
|
|
// TODO: Gestion de l'ajout des fiches relation
|
2016-04-20 13:21:01 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
}, false);
|
2016-04-21 09:26:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-22 08:27:58 +00:00
|
|
|
// var number = $('input.number[type="text"]');
|
2016-04-21 13:22:43 +00:00
|
|
|
// 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);
|