/* [0] Constructeur -> définit le conteneur et le bouton d'ajout =========================================================*/ function inputFacebookSubject(iSubjectId, iCoords, store_button){ this.subject_id = iSubjectId; this.coords = iCoords; this.store_button = store_button; } /* [1] Attributs =========================================================*/ inputFacebookSubject.prototype = { store_button: this.store_button, // Bouton d'ajout d'un formulaire subject_id: this.subject_id, coords: this.coords, handler: null }; /* [2] Vérification d'un formulaire =========================================================*/ inputFacebookSubject.prototype.check = function(){ // On renvoie la validité du formulaire return this.subject_id.value.length > 0 && !isNaN(this.subject_id.value); }; /* [3] Gestion de l'enregistrement des formulaires de contact =========================================================*/ inputFacebookSubject.prototype.fieldsToStorage = function(onlyCoords){ console.group('[facebook.subject] fields to storage'); ( typeof onlyCoords != 'boolean' ) ? false : onlyCoords; // {1} Si le formulaire n'est pas valide, on ne l'enregistre pas // if( !onlyCoords ) if( !this.check() ) return false; // {2} Si on a déja saisie 1+ contact, on ne l'enregistre pas // // et si on modifie le sujet if( lsi.keys('f_subject').length === 1 && this.subject_id.value != lsi.get('f_subject',0).subject_id && lsi.keys('f_contacts').length > 0 ){ Notification.warning('Attention', 'Vous devez effacer le formulaire pour changer de sujet'); return false; } // {3} On récupère et met en forme les valeurs du deflater // var obj = { subject_id: this.subject_id.value, coords: this.coords.value }; // {4} On enregistre les données dans le 'localStorage' // lsi.set('f_subject', 0, obj); console.groupEnd(); }; /* [4] Gestion de l'affichage depuis le 'localStorage' =========================================================*/ inputFacebookSubject.prototype.storageToFields = function(){ console.group('[facebook.subject] storage to fields'); // {1} On récupère les informations du sujet // var subjectData = lsi.get('f_subject', 0); subjectData = subjectData || { subject_id: '', coords: '' }; // {2} On restore les valeurs // this.subject_id.value = subjectData.subject_id; this.coords.value = subjectData.coords; console.groupEnd(); }; /* [5] Point d'amorçage de la gestion des contacts =========================================================*/ inputFacebookSubject.prototype.attach = function(handler){ console.group('[facebook.subject] attaching events'); /* (1) On initialise le jeu de données */ lsi.createDataset('f_subject'); lsi.createDataset('f_friends'); // Pointeur pour les scopes des addEventListener() this.handler = handler; // Handler de mise à jour quand les champs sont bons function fts(e){ this.fieldsToStorage(); this.handler(true); this.storageToFields(); }; function fts2(e){ this.fieldsToStorage(true); this.storageToFields(); }; /* (2) On attache l'évènement sur le bouton d'enregistrement */ this.store_button.addEventListener('click', fts.bind(this), false); /* (3) On attache un évènement de 'blur' sur chaque '' */ this.subject_id.addEventListener('blur', fts.bind(this), false); /* (4) On attache un évènement pour le champ coord */ this.coords.addEventListener('blur', fts2.bind(this), false); /* (4) On charge le sujet depuis la mémoire ('localStorage') */ this.storageToFields(); console.groupEnd(); };