2016-09-17 16:58:18 +00:00
var FormBuilder = function ( a , c ) { this . parent _element = a ; this . form _object = c } ; FormBuilder . prototype = { form _object : this . form _object , defs _object : { } , parent _element : this . parent _element , built _form : null } ; FormBuilder . regex = { reg _in _key : /^\/\^(.+)\$\/$/ , reg _out _val : /\{(\$[1-9])\}/ , pri _out _val : /\{([a-z-]+)\}/g , pri _in _key : /^\$([a-z-]+)$/ , arr _out _set : /^\{\{([a-z-]+)\}\}$/ , arr _out _val : /\{([a-z-]+)\.([a-z-]+)\}/g , arr _in _key : /^\$\$([a-z-]+)$/ } ;
FormBuilder . spread _attr = [ "children" , "next_nodes" , "prev_nodes" , "attributes" , "node_link" ] ; FormBuilder . allowed _attr = "node node_type next_nodes prev_nodes attributes children text repeat" . split ( " " ) ; FormBuilder . prototype . add _definition = function ( a ) { for ( var c in a ) this . defs _object [ c ] = a [ c ] } ; FormBuilder . prototype . build = function ( a ) { a = null == a ? { } : a ; this . built _form = FormBuilder . formatFormObject ( this . form _object , this . defs _object ) ; this . built _form = FormBuilder . replaceStatements ( this . form _object , a ) } ;
2016-09-18 08:44:21 +00:00
FormBuilder . formatFormObject = function ( a , c ) { if ( a . hasOwnProperty ( "node" ) && "string" == typeof a . node ) { var f = FormBuilder . fetchNodeDefinition ( a . node , c ) ; "undefined" != typeof f . def && ( a . node _link = JSON . parse ( JSON . stringify ( f . def ) ) , f . hasOwnProperty ( "scope" ) && ( a . scope = f . scope ) ) } if ( a . hasOwnProperty ( "children" ) ) for ( var b in a . children ) a . children [ b ] . parent = a , FormBuilder . formatFormObject ( a . children [ b ] , c ) ; return a } ;
FormBuilder . fetchNodeDefinition = function ( a , c ) { var f , b ; r = FormBuilder . regex . reg _in _key ; if ( null != c && c . hasOwnProperty ( a ) ) return { def : c . node } ; for ( f in c ) if ( r . test ( f ) && ( b = new RegExp ( f . slice ( 1 , - 1 ) ) , b . test ( a ) ) ) { matches = { } ; for ( b = 1 ; b < RegExp . length && 10 > b ; b ++ ) matches [ "$" + b ] = RegExp [ "$" + b ] ; return { def : c [ f ] , scope : matches } } return { } } ;
FormBuilder . replaceStatements = function ( a , c , f ) { a = a instanceof Object ? a : { } ; c = c instanceof Object ? JSON . parse ( JSON . stringify ( c ) ) : { } ; f = null == f ? "" : f + " " ; var b , g , e ; if ( a . hasOwnProperty ( "scope" ) && a . scope instanceof Object ) for ( b in a . scope ) c [ b ] = a . scope [ b ] ; a . received = JSON . parse ( JSON . stringify ( c ) ) ; for ( b in a ) if ( "string" == typeof a [ b ] ) { g = FormBuilder . regex . arr _out _set ; var d = [ ] ; ( e = g . exec ( a [ b ] ) ) && d . push ( e [ 1 ] ) ; for ( e in d ) c . hasOwnProperty ( d [ e ] ) || ( c [ d [ e ] ] = [ ] ) , a [ b ] = c [ d [ e ] ] ; if ( ! ( 0 < d . length ) ) { g = FormBuilder . regex . pri _out _val ;
for ( d = [ ] ; null !== ( e = g . exec ( a [ b ] ) ) ; ) d . push ( e [ 1 ] ) ; for ( e in d ) c . hasOwnProperty ( d [ e ] ) || ( c [ d [ e ] ] = "" ) , g = new RegExp ( "{" + d [ e ] + "}" , "g" ) , a [ b ] = a [ b ] . replace ( g , c [ d [ e ] ] ) ; if ( ! ( 0 < d . length ) ) { g = FormBuilder . regex . reg _out _val ; lasti = - 1 ; for ( d = [ ] ; null !== ( e = g . exec ( a [ b ] ) ) && ! ( lasti >= g . lastIndex ) ; ) lasti = g . lastIndex , d . push ( e [ 1 ] ) ; for ( e in d ) c . hasOwnProperty ( d [ e ] ) || ( c [ d [ e ] ] = "" ) , g = new RegExp ( "{\\$" + d [ e ] [ 1 ] + "}" , "g" ) , a [ b ] = a [ b ] . replace ( g , c [ d [ e ] ] ) ; if ( ! ( 0 < d . length ) ) { g = FormBuilder . regex . arr _out _val ; for ( d = [ ] ; null !== ( e = g . exec ( a [ b ] ) ) ; ) d . push ( e [ 1 ] ) ;
for ( e in d ) c . hasOwnProperty ( d [ e ] ) || ( c [ d [ e ] ] = "" ) , g = new RegExp ( "/{" + d [ e ] + "}/" , "g" ) , a [ b ] . replace ( g , c [ d [ e ] ] ) } } } } for ( b in a ) FormBuilder . regex . pri _in _key . test ( b ) ? c [ b . substring ( 1 ) ] = a [ b ] : FormBuilder . regex . arr _in _key . test ( b ) && ( c [ b . substring ( 2 ) ] = a [ b ] ) ; c = JSON . parse ( JSON . stringify ( c ) ) ; for ( b in a ) if ( - 1 < FormBuilder . spread _attr . indexOf ( b ) ) if ( a [ b ] instanceof Array ) for ( var h in a [ b ] ) console . log ( f + "" + a . node , b + "[" + h + "]" ) , FormBuilder . replaceStatements ( a [ b ] [ h ] , c , f ) ; else a [ b ] instanceof Object && ( console . log ( f + "" + a . node ,
b ) , FormBuilder . replaceStatements ( a [ b ] , c , f ) ) ; return a } ;