99 lines
3.6 KiB
JavaScript
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;
|
|
};
|