2016-09-17 15:14:41 +00:00
var FormBuilder = function ( a , d ) { this . parent _element = a ; this . form _object = d } ; FormBuilder . prototype = { form _object : this . form _object , defs _object : { } , parent _element : this . parent _element , built _form : null } ; FormBuilder . regex = { regex _input _key : /^\/\^(.+)\$\/$/ , regex _ouput _value : /\{(\$[1-9])\}/ , primitive _ouput _value : /\{([a-z-]+)\}/g , primitive _input _key : /^\$([a-z-]+)$/ , array _output _set : /^\{\{([a-z-]+)\}\}$/ , array _output _value : /\{([a-z-]+)\.([a-z-]+)\}/g , array _input _key : /^\$\$([a-z-]+)$/ } ;
FormBuilder . spread _attr = [ "children" , "next_nodes" , "prev_nodes" , "attributes" ] ; FormBuilder . allowed _attr = "node node_type next_nodes prev_nodes attributes children text repeat" . split ( " " ) ; FormBuilder . no _recursion = [ "parent" , "scope" , "received" ] ; FormBuilder . prototype . add _definition = function ( a ) { for ( var d in a ) this . defs _object [ d ] = a [ d ] } ;
2016-09-17 14:04:03 +00:00
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-17 15:14:41 +00:00
FormBuilder . formatFormObject = function ( a , d ) { if ( a . hasOwnProperty ( "node" ) && "string" == typeof a . node ) { var b = FormBuilder . fetchNodeDefinition ( a . node , d ) ; null !== b && ( a . node _link = b . def , b . hasOwnProperty ( "scope" ) && ( a . scope = b . scope ) ) } if ( a . hasOwnProperty ( "children" ) ) for ( var f in a . children ) a . children [ f ] . parent = a , FormBuilder . formatFormObject ( a . children [ f ] , d ) ; return a } ;
FormBuilder . fetchNodeDefinition = function ( a , d ) { var b , f ; r = FormBuilder . regex . regex _input _key ; if ( null != d && d . hasOwnProperty ( a ) ) return { def : d . node , scope : null } ; for ( b in d ) if ( r . test ( b ) && ( f = new RegExp ( b . slice ( 1 , - 1 ) ) , f . test ( a ) ) ) { matches = { } ; for ( f = 1 ; f < RegExp . length && 10 > f ; f ++ ) matches [ "$" + f ] = RegExp [ "$" + f ] ; return { def : d [ b ] , scope : matches } } return null } ;
FormBuilder . replaceStatements = function ( a , d ) { a = a instanceof Object ? a : { } ; d = d instanceof Object ? d : { } ; var b , f , c , g = { } ; for ( b in a ) if ( "string" == typeof a [ b ] ) { f = FormBuilder . regex . array _output _set ; var e = [ ] ; ( c = f . exec ( a [ b ] ) ) && e . push ( c [ 1 ] ) ; for ( c in e ) d . hasOwnProperty ( e [ c ] ) || ( d [ e [ c ] ] = [ ] ) , a [ b ] = d [ e [ c ] ] ; if ( ! ( 0 < e . length ) ) { f = FormBuilder . regex . primitive _ouput _value ; for ( e = [ ] ; null !== ( c = f . exec ( a [ b ] ) ) ; ) e . push ( c [ 1 ] ) ; for ( c in e ) d . hasOwnProperty ( e [ c ] ) || ( d [ e [ c ] ] = "" ) , f = new RegExp ( "{" + e [ c ] + "}" , "g" ) , a [ b ] = a [ b ] . replace ( f , d [ e [ c ] ] ) ;
if ( ! ( 0 < e . length ) ) { f = FormBuilder . regex . regex _ouput _value ; lasti = - 1 ; for ( e = [ ] ; null !== ( c = f . exec ( a [ b ] ) ) && ! ( lasti >= f . lastIndex ) ; ) lasti = f . lastIndex , e . push ( c [ 1 ] ) ; for ( c in e ) d . hasOwnProperty ( e [ c ] ) || ( d [ e [ c ] ] = "" ) , f = new RegExp ( "{\\$" + e [ c ] [ 1 ] + "}" , "g" ) , a [ b ] = a [ b ] . replace ( f , d [ e [ c ] ] ) ; if ( ! ( 0 < e . length ) ) { f = FormBuilder . regex . array _output _value ; for ( e = [ ] ; null !== ( c = f . exec ( a [ b ] ) ) ; ) e . push ( c [ 1 ] ) ; for ( c in e ) d . hasOwnProperty ( e [ c ] ) || ( d [ e [ c ] ] = "" ) , f = new RegExp ( "/{" + e [ c ] + "}/" , "g" ) , a [ b ] . replace ( f , d [ e [ c ] ] ) } } } } for ( b in a ) FormBuilder . regex . primitive _input _key . test ( b ) ?
g [ b . substring ( 1 ) ] = a [ b ] : FormBuilder . regex . array _input _key . test ( b ) && ( g [ b . substring ( 2 ) ] = a [ b ] ) ; for ( b in a ) if ( - 1 < FormBuilder . spread _attr . indexOf ( b ) ) if ( c = [ JSON . stringify ( d ) . slice ( 0 , - 1 ) , JSON . stringify ( g ) . slice ( 1 ) ] , 2 < c [ 0 ] . length && 2 < c [ 1 ] . length && ( c [ 1 ] = "," + c [ 1 ] ) , g = JSON . parse ( c [ 0 ] + "" + c [ 1 ] ) , a [ b ] instanceof Array ) for ( var h in a [ b ] ) console . log ( a , b + "[" + h + "]" , d ) , FormBuilder . replaceStatements ( a [ b ] [ h ] , g ) ; else a [ b ] instanceof Object && ( console . log ( a , b , d ) , FormBuilder . replaceStatements ( a [ b ] , g ) ) ; return a } ;