From d6ad5b15d495ae886fe1e43492ce23e27a937e66 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 21 Apr 2016 14:56:28 +0200 Subject: [PATCH] =?UTF-8?q?FormDeflater=20op=C3=A9rationnel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/lib/form-deflater-min.js | 4 +- js/lib/form-deflater.js | 183 ++++++++++++++++++++++++++++++++++++ view/analytics.php | 27 +++++- view/js/analytics-min.js | 1 + view/js/analytics.js | 8 ++ 5 files changed, 218 insertions(+), 5 deletions(-) create mode 100644 view/js/analytics-min.js diff --git a/js/lib/form-deflater-min.js b/js/lib/form-deflater-min.js index 8b13789..faf9a27 100644 --- a/js/lib/form-deflater-min.js +++ b/js/lib/form-deflater-min.js @@ -1 +1,3 @@ - +function FormDeflater(b,c,a){for(var d=0;d Formulaire ou autre élément contenant les champs +* @tags Tableau contenant les éléments à prendre en compte +* @attr Tableau contenant les attributs à prendre pour le nom (par ordre de priorité) +* +*/ +function FormDeflater(container, tags, attr){ + /* [0] Vérification des INPUT + =========================================================*/ + var correctParams = container instanceof Element; + correctParams = correctParams && tags instanceof Array; + correctParams = correctParams && attr instanceof Array; + + + /* [1] On formatte les données + =========================================================*/ + // On met les tags en minuscule + for( var i = 0 ; i < tags.length ; i++ ) + tags[i] = tags[i].toLowerCase(); + + // On met les attributs en minuscule + for( var i = 0 ; i < attr.length ; i++ ) + attr[i] = attr[i].toLowerCase(); + + /* [2] On enregistre les attributs + =========================================================*/ + this.container = container; + this.tags = tags; + this.attr = attr; +} + + +FormDeflater.prototype = { + container: this.container, // Contiendra le 'formulaire' (
ou autre) + tags: this.tags, // Contiendra les balises HTML à ne pas prendre en compte + attr: this.attr, // Contiendra la liste des attributs à prendre pour nom (par ordre de priorité) + + + + + /* RETOURNE UN OBJET CONTENANT LES DONNÉES DU FORMULAIRE + * + * @return form Objet correspondant aux données du formulaire + * + */ + deflate: function(){ + /* [1] On récupère tous les enfants + =========================================================*/ + var children = this.getChildren( this.container ); + + /* [2] On filtre les éléments qui ont pas le bon tag + =========================================================*/ + children = this.filterElements( children ); + + + /* [3] On essaie de trouver les attributs primants (non vides et en premier dans la liste @this.attr) + =========================================================*/ + /* (0) On initialise l'objet de retour */ + var object = {}; + + /* (1) Pour chacun des éléments */ + for( var c = 0 ; c < children.length ; c++ ){ + + /* (2) Pour chacun des attributs par ordre de priorité */ + for( var a = 0 ; a < this.attr.length ; a++ ){ + // On récupère l'attribut + var attr = children[c].getAttribute(this.attr[a]); + + /* (3) Si l'attribut n'est pas null ni vide */ + if( attr !== null && attr.length > 0 ){ + + /* (4) Si on a pas déja un champ de même nom */ + if( object.hasOwnProperty(attr) ){ + var existing = object[attr]; + + // {1} Si l'existant est un tableau, on ajoute notre valeur // + if( existing instanceof Array ) + object[attr].push(children[c].value); + + // {2} Sinon, si c'est une valeur seule, on crée un tableau // + else + object[attr] = [ object[attr], children[c].value ]; + + /* (5) Si c'est le premier champ avec ce nom, on le crée */ + }else{ + object[attr] = children[c].value; + } + + // On en a fini pour cet élément + break; + } + + } + + + } + + + return object; + }, + + + + + /* RETOURNE LA LISTE DE TOUS LES ÉLÉMENTS QUEL QUE SOIT LE NIVEAU HIÉRARCHIQUE + * + * @parent Parent duquel on veut les enfants + * + * @return children Tableau contenant tous les enfants + * + */ + getChildren: function(parent){ + // Si le parent n'est pas un élément, on retourne aucun enfant + if( !(parent instanceof Element) ) return []; + + /* [1] Initialisation des variables + =========================================================*/ + // Contient la liste des enfants directs + var children = [].slice.call(parent.children); + + // Contiendra la liste des enfants directs et indirects + var allChildren = children; + + /* [2] On parcourt tous les enfants + =========================================================*/ + for( var i = 0 ; i < children.length ; i++ ){ + // On relance la fonction récursivement sur tous les enfants + allChildren = allChildren.concat( [].slice.call(this.getChildren(children[i])) ); + } + + /* [3] On retourne le résultat + =========================================================*/ + return allChildren; + }, + + + + /* FILTRE LES éléments en fonction de @this.tags et @this.attr + * + * @elements Le tableau contenant les éléments à trier + * + * @return filtered Retourne le tableau des éléments filtrés + * + */ + filterElements: function(elements){ + // Contiendra les éléments correspondants aux critères + var filtered = []; + + /* [1] On parcourt tous les éléments + =========================================================*/ + for( var i = 0 ; i < elements.length ; i++ ){ + /* (1) Si l'élément a le bon tag, on le garde */ + if( this.tags.indexOf( elements[i].tagName.toLowerCase() ) > -1 ) + filtered.push(elements[i]); + } + + /* [3] On retourne les éléments filtržés + =========================================================*/ + return filtered; + } + +}; + + + + +/************/ +/* USE CASE */ +/************/ +/* (1) Instanciation */ +/*HIDDEN*/// var instance = new FormDeflater( +/*HIDDEN*/// document.getElementById('myform'), +/*HIDDEN*/// ['br', 'li'], // éléments à prendre en compte (tagName) +/*HIDDEN*/// ['id', 'name', 'data-elementname'] // Attributs par ordre de priorité +/*HIDDEN*/// ); +/*HIDDEN*/// +/* (2) On récupère l'objet */ +/*HIDDEN*/// +/*HIDDEN*/// var object = instance.deflate(); +/*HIDDEN*/// diff --git a/view/analytics.php b/view/analytics.php index af3e312..2a969f7 100755 --- a/view/analytics.php +++ b/view/analytics.php @@ -19,7 +19,26 @@ $pers = $request->answer(); -
-
RECHERCHE DE PERSONNE PAR ID
- -
\ No newline at end of file +
+ + + + + + + +
+ + +

Some text

+
+
+ + + + + + + + +
diff --git a/view/js/analytics-min.js b/view/js/analytics-min.js new file mode 100644 index 0000000..c02d67a --- /dev/null +++ b/view/js/analytics-min.js @@ -0,0 +1 @@ +var instance=new FormDeflater(document.getElementById("myform"),["input"],["name","data-name"]);console.log(instance.deflate()); diff --git a/view/js/analytics.js b/view/js/analytics.js index e69de29..441aed4 100644 --- a/view/js/analytics.js +++ b/view/js/analytics.js @@ -0,0 +1,8 @@ +var instance = new FormDeflater( + document.getElementById('myform'), + ['input'], // éléments à éviter (tagName) + ['name', 'data-name'] // Attributs par ordre de priorité +); + +/* (2) On récupère l'objet */ +console.log( instance.deflate() );