NxTIC/js/lib/form-builder.js

99 lines
3.6 KiB
JavaScript

/* CONSTRUCTEUR -> INITIALISE UNE L'INSTANCE
*
* @parent_element<Element> Element qui contiendra le formulaire
* @form_object<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<Object> Objet dans lequel remplacer les valeurs
* @scope<Object> Ensemble des variables permettant le remplacement
*
* @return replaced<Object> 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;
};