NxTIC/view/js/input.js

569 lines
16 KiB
JavaScript

// STRUCTURE DU localStorage
// subject -> contient les données du sujet
// contacts -> contient les données de tous les contacts
// fiches -> contient les données de toutes les fiches
/* (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 et variables
=========================================================*/
/* (1) Input de type fichier pour l'import */
var importCallLog = $('input#call_log-import[type="file"]');
/* (2) Conteneur des fiches relation */
var ficheContainer = $('article.relation-panel');
/* (3) Initialisation des managers */
var subjectManager;
var contactManager;
var miniManager;
var ficheManager;
function dynamicUpdate(){
console.log('dynamic update');
/* (1) On enregistre les MINI fiches relation */
miniManager.fieldsToStorage();
/* (2) On enregister les FICHES relation */
// ficheManager.fieldsToStorage();
/* (3) On enregistre les CONTACTS */
contactManager.fieldsToStorage();
/* (4) On synchronise les MINI avec les CONTACTS */
miniManager.sync();
/* (5) On synchronise les FICHE avec les CONTACTS */
// ficheManager.sync();
/* (6) On affiche le tout */
miniManager.storageToFields();
// ficheManager.storageToFields();
contactManager.storageToFields();
}
/* [3] Gestion des formulaires du sujet
=========================================================*/
/* (0) Les input du formulaire du sujet */
// var subjectInput = {
// number: $('article.subject-panel [data-name="number"]'),
// username: $('article.subject-panel [data-name="username"]'),
// firstname: $('article.subject-panel [data-name="firstname"]'),
// lastname: $('article.subject-panel [data-name="lastname"]'),
//
// store: $('article.subject-panel [data-name="submit"]')
// };
//
// /* (1) Gestion de l'enregistrement du sujet en local ('localStorage') */
// lsi.createDataset('subject');
// function storeSubject(){
// console.log('storing subject');
//
// // {1} Vérification des champs //
// // Le numéro n'est pas vide
// var validForm = subjectInput.number.value.length > 0;
// // ET le pseudo et/ou le prénom et/ou le nom n'est pas vide
// validForm = validForm && subjectInput.username.value.length+subjectInput.firstname.value.length+subjectInput.lastname.value.length > 0;
//
// // Si le formulaire n'est pas valide, on ne l'enregistre pas
// if( !validForm ) return false;
//
// // {2} On récupère et met en forme les valeurs du deflater //
// var obj = {
// number: subjectInput.number.value,
// username: subjectInput.username.value,
// firstname: subjectInput.firstname.value,
// lastname: subjectInput.lastname.value
// };
//
// // {3} On enregistre les données dans le 'localStorage' //
// lsi.set('subject', 'form', obj);
//
// }
//
// /* (2) Gestion de l'affichage (et mise à jour) du sujet (depuis 'localStorage') */
// function restoreSubject(){
// // {1} On récupère les informations du sujet //
// var subjectData = lsi.get('subject', 'form');
//
// if( subjectData == null ) return;
//
// // {2} On restore les valeurs //
// subjectInput.number.value = subjectData.number;
// subjectInput.username.value = subjectData.username;
// subjectInput.firstname.value = subjectData.firstname;
// subjectInput.lastname.value = subjectData.lastname;
// }restoreSubject();
/* (n) On attache l'évènement d'enregistrement du formulaire du sujet */
// subjectInput.store.addEventListener('click', storeSubject, false);
/* [2] Inclusion des scripts externes et lancement
=========================================================*/
include('/js/includes/input-phone-subject.js', function(){
include('/js/includes/input-phone-contact.js', function(){
include('/js/includes/input-phone-mini.js', function(){
include('/js/includes/input-phone-fiche.js', function(){
/* [3] Gestion du formulaire du sujet
=========================================================*/
/* (1) On crée une instance du manager du sujet */
subjectManager = new inputPhoneSubject(
$('article.subject-panel [data-name="number"]'),
$('article.subject-panel [data-name="username"]'),
$('article.subject-panel [data-name="firstname"]'),
$('article.subject-panel [data-name="lastname"]'),
$('article.subject-panel [data-name="submit"]')
);
/* (2) On le démarre */
subjectManager.attach();
/* [4] Gestion des formulaires de contact
=========================================================*/
/* (1) On crée une instance du gestionnaire des CONTACTS */
contactManager = new inputPhoneContact(
$('article.contact-panel'),
$('h4.add-contact')
);
/* (2) On le démarre */
contactManager.attach(dynamicUpdate);
/* [5] Gestion des mini fiches relation
=========================================================*/
/* (1) On crée une instance du gestionnaire des mini fiches relation */
miniManager = new inputPhoneMini(
$('article.mini-relation-panel')
);
miniManager.attach();
/* [6] Gestion des fiches relation
=========================================================*/
/* (1) On crée une instance du gestionnaire des fiches relation */
}) }) }) });
// ETAPE 1 : INITIALISATION (ON RESTAURE LES DONNEES)
// 1. contact.storageToFields();
// 2. contact.add();
// 3. mini.storageToFields();
// 4. fiche.storageToFields();
// ETAPE 2 : ENREGISTREMENT + MISE À JOUR
// 1. mini.fieldsToStorage();
// 2. fiche.fieldsToStorage();
// 3. contact.fieldsToStorage();
// 4. mini.sync();
// 5. fiche.sync();
/* (1) Gestion de l'enregistrement des contacts en local ('localStorage') */
// lsi.createDataset('contacts');
// function storeContacts(){
// console.log('STORING ALL CONTACTS');
//
// // {1} Pour chaque formulaire de contact présent //
// var existingContacts = $$('article.contact-panel .new-contact');
// for( var i = 0 ; i < existingContacts.length ; i++ ){
//
// // {2} On récupère les informations relatives à l'élément courant //
// var indexInParent = existingContacts[i].parentNode.children.indexOf(existingContacts[i]);
//
// // {3} On initialise notre deflater pour récupérer les valeurs //
// var deflater = new FormDeflater(existingContacts[i], ['input'], ['data-name']);
//
// // {4} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
// var deflated = deflater.deflate();
//
// // Le numéro n'est pas vide
// var validForm = deflated.number.value.length > 0;
// // ET le pseudo et/ou le prénom et/ou le nom n'est pas vide
// validForm = validForm && deflated.username.value.length+deflated.firstname.value.length+deflated.lastname.value.length > 0;
//
// // Si le formulaire n'est pas valide, on ne l'enregistre pas
// if( !validForm ) continue;
//
// // {5} On récupère et met en forme les valeurs du deflater //
// var obj = {
// number: deflated.number.value,
// username: deflated.username.value,
// firstname: deflated.firstname.value,
// lastname: deflated.lastname.value
// };
//
// // {6} On enregistre les données dans le 'localStorage' //
// lsi.set('contacts', 'form'+indexInParent, obj);
//
//
//
// // {7} On enregistre les données des MINI fiches associées //
// var associatedMiniFiche = lsi.get('mini-fiches', 'form'+indexInParent);
//
// // Si n'existe pas, on la crée
// if( associatedMiniFiche === false ){
// lsi.set('mini-fiches', 'form'+indexInParent, {
// uid: indexInParent,
// firstname: obj.firstname,
// lastname: obj.lastname,
// username: obj.username,
// age: '',
// sexe: [true, false],
// job: '.',
// location: [true, false, false, false]
// });
//
// // Sinon, on met à jour
// }else{
//
// associatedMiniFiche.firstname = obj.firstname;
// associatedMiniFiche.lastname = obj.lastname;
// associatedMiniFiche.username = obj.username;
//
// lsi.set('mini-fiches', 'form'+indexInParent, associatedMiniFiche);
// }
//
// }
//
// // {8} On met à jour les mini-fiches //
// storeMiniFiches();
//
//
// // {9} On met à jour le rendu des contacts//
// restoreContacts();
// }
//
//
// /* (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 l'affichage (et mise à jour) des contacts (depuis 'localStorage') */
// function restoreContacts(){
// // {1} Pour chaque contact du 'localStorage' //
// var existingContacts = lsi.keys('contacts');
//
// // On réinitialise le HTML
// contactContainer.innerHTML = '';
//
// 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
// );
//
// }
//
// addNewContact('', '', '', '');
//
// // {4} On met à jour les MINI fiches //
// storeMiniFiches();
//
// }
//
//
// /* (n) On attache l'évènement d'ajout d'un formulaire de contact */
// addContact.addEventListener('click', storeContacts, false);
/* [5] Gestion des MINI fiches relation
=========================================================*/
/* (1) Gestion de l'enregistrement des contacts en local ('localStorage') */
// lsi.createDataset('mini-fiches');
// function storeMiniFiches(){
// console.log('STORING ALL MINI-FICHES');
//
// // {1} Pour chaque formulaire de contact présent //
// var existingMiniFiches = $$('article.mini-relation-panel .mini-fiche-relation ');
// for( var i = 0 ; i < existingMiniFiches.length ; i++ ){
//
// // {2} On initialise notre deflater pour récupérer les valeurs //
// var deflater = new FormDeflater(existingMiniFiches[i], ['input', 'select'], ['data-name']);
//
// // {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
// var deflated = deflater.deflate();
//
// // TODO: Condition pour que le formulaire soit valide
// var validForm = true;
//
// // Si le formulaire n'est pas valide, on ne l'enregistre pas
// if( !validForm ) continue;
//
// // {4} On récupère les données du LSI si elles existent //
// var existingData = lsi.get('mini-fiches', 'form'+deflated.uid.value);
// console.log('deflated');
// console.log(deflated);
// // Si n'existe pas, on initialise
// if( existingData === false ){
// existingData.username = 'inconnu';
// existingData.firstname = 'inconnu';
// existingData.lastname = 'inconnu';
// }
//
// // {5} On récupère et met en forme les valeurs du deflater //
// var obj = {
// uid: deflated.uid.value,
// firstname: existingData.firstname,
// lastname: existingData.lastname,
// username: existingData.username,
// sexe: [
// deflated.sexe[0].status, // VRAI SI HOMME
// deflated.sexe[1].status // VRAI SI FEMME
// ],
// age: deflated.age.value,
// job: deflated.job.value,
// location: [
// deflated.loc[0].status, // VRAI si choix 1
// deflated.loc[1].status, // VRAI si choix 2
// deflated.loc[2].status, // VRAI si choix 3
// deflated.loc[3].status // VRAI si choix 4
// ]
// };
//
// // {6} On enregistre les données dans le 'localStorage' //
// lsi.set('mini-fiches', 'form'+obj.uid, obj);
//
// }
//
// // {7} On met à jour le rendu //
// restoreMiniFiches();
// }
//
//
//
// /* (2) Fonction pour l'ajout d'un contact */
// function addNewMiniFiche(firstname, lastname, username, uid, age, sexe, job, location){
// // {1} Création physique //
// miniFicheContainer.innerHTML += miniFicheBuilder.build({
// firstname: firstname,
// lastname: lastname,
// username: username,
// uid: uid,
// age: '',
// sexe_A: sexe[0] ? 'true' : 'false',
// sexe_B: sexe[1] ? 'true' : 'false',
// job: job,
// loc_A: location[0] ? 'true' : 'false',
// loc_B: location[1] ? 'true' : 'false',
// loc_C: location[2] ? 'true' : 'false',
// loc_D: location[3] ? 'true' : 'false'
// });
//
// }
//
//
// /* (3) Gestion de l'affichage (et mise à jour) des contacts (depuis 'localStorage') */
// function restoreMiniFiches(){
// // {1} Pour chaque contact du 'localStorage' //
// var existingMiniFiches = lsi.keys('mini-fiches');
//
// // On réinitialise le HTML
// miniFicheContainer.innerHTML = '';
//
// for( var i = 0 ; i < existingMiniFiches.length ; i++ ){
// // {2} On récupère les informations du contact //
// var ficheData = lsi.get('mini-fiches', existingMiniFiches[i]);
//
// // {3} On ajoute un contact à la liste //
// addNewMiniFiche(
// ficheData.firstname,
// ficheData.lastname,
// ficheData.username,
// ficheData.uid,
// ficheData.age,
// ficheData.sexe,
// ficheData.job,
// ficheData.location
// );
// }
//
// }
// TODO : Gestion des MINI fiches relation en fonction des contacts
/* (1) Fonction pour l'ajout d'une MINI fiche relation */
// 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 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);