/* CONSTRUCTEUR -> INITIALISE UNE L'INSTANCE * * @parent_element Element qui contiendra le formulaire * @form_object Objet définissant le formulaire * */ var FormBuilder = function(parent_element, form_object){ /* (1) On définit le parent */ this.parent_element = parent_element; /* (2) On définit le formulaire (sous forme de description formelle) */ this.form_object = form_object; /* (3) On formatte l'objet (référence des 'children' vers le 'parent') */ FormBuilder.formatFormObject(this.form_object); }; /* DEFINITION DES ATTRIBUTS * */ FormBuilder.prototype = { form_object: this.form_object, // objet permettant la construction du formulaire defs_object: {}, // objet des définitions des éléments parent_element: this.parent_element, // element qui contiendra le formulaire allowed_attr: [ // Liste des attributs fixes autorisés 'node', /* nom du modèle à utiliser (dans @defs_object) */ 'node_type', /* nom réel de l'élément */ 'node_attr', /* tableau des attrbuts réels de l'élément */ 'node_children', /* tableau des enfants (innerHTML) du noeud courant */ 'next_nodes', /* tableau des enfants à ajouter à la suite de l'élément */ 'prev_nodes', /* tableau des enfants à ajouter à avant l'élément */ 'attributes', /* tableau des attributs à passer au niveau inférieur */ 'children', /* tableau des enfants à passer au niveau inférieur */ 'text', /* texte à insérer (innerHTML), REMPLACE 'children' */ 'repeat' /* nombre/tableau déterminant qu'il faut répéter @n fois ou en fonction de la taille du tableau */ ], built_form: null, // Element correspondant au formulaire construit regex: { 'primitive_ouput_value': /\{([a-z-]+)\}/g, 'primitive_input_key': /^\$([a-z-]+)$/, 'array_output_set': /\{\{([a-z-]+)\}\}/g, 'array_output_value': /\{([a-z-]+)\.([a-z-]+)\}/g, 'array_input_key': /^\$\$([a-z-]+)$/ } }; /* FORMATTE L'OBJET DE DESCRIPTION DU FORMULAIRE * */ FormBuilder.formatFormObject = function(object){ /* (1) Si a un enfant */ if( object.hasOwnProperty('children') ) /* (2) Pour chaque enfant */ for( var child in object.children ){ /* (1) On ajoute le parent + on lance récursivement */ object.children[child].parent = object; FormBuilder.formatFormObject(object.children[child]); } return object; }; /* REMPLACE RECURSIVEMENT LES VALEURS DE @OBJECT AVEC LE @SCOPE -> RECURSIF * * @object Objet dans lequel remplacer les valeurs * @scope Ensemble des variables permettant le remplacement * * @return replaced Objet avec les remplacements effectués * */ FormBuilder.replaceStatements = function(object, scope){ /* [1] Pour chaque attribut (value is string) =========================================================*/ for( var key in object ){ /* (1) Si la valeur est une string */ if( typeof object[key] == 'string' ){ /* (2) On cherche toutes les variables à remplacer */ var matches = []; /a/.exec(object[key]); console.log(RegExp.$0); } } return object; };