2016-09-18 10:37:21 +00:00
var refObject = function ( a ) { this . value = a } ; refObject . prototype = { value : this . value , get : function ( ) { return this . value } , set : function ( a ) { this . value = a } , valueOf : function ( ) { return this . get ( ) } } ; var ref = function ( a ) { return new refObject ( a ) } , FormBuilder = function ( a ) { this . form _object = a } ; FormBuilder . prototype = { form _object : this . form _object , defs _object : { } , parent _element : null , built _form : null , root _element : 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 = JSON . parse ( JSON . stringify ( this . form _object ) ) ; this . built _form = FormBuilder . formatFormObject ( this . built _form , this . defs _object ) ; this . built _form = FormBuilder . replaceStatements ( this . built _form , a , this . defs _object ) } ;
FormBuilder . prototype . attach = function ( a ) { if ( ! ( a instanceof Element ) && null == this . parent _element ) return ! 1 ; this . parent _element = a instanceof Element ? a : this . parent _element } ; FormBuilder . formatFormObject = function ( a , c ) { if ( a . hasOwnProperty ( "children" ) ) for ( var h in a . children ) a . children [ h ] . parent = a , FormBuilder . formatFormObject ( a . children [ h ] , c ) ; return a } ;
FormBuilder . fetchNodeDefinition = function ( a , c ) { var h , b ; r = FormBuilder . regex . reg _in _key ; if ( "undefined" != typeof c && c . hasOwnProperty ( a ) ) return { def : c [ a ] } ; for ( h in c ) if ( r . test ( h ) && ( b = new RegExp ( h . slice ( 1 , - 1 ) ) , b . test ( a ) ) ) { matches = { } ; for ( b = 1 ; b < RegExp . length && 10 > b ; b ++ ) matches [ "$" + b ] = RegExp [ "$" + b ] ; return { def : c [ h ] , scope : matches } } return { } } ;
FormBuilder . replaceStatements = function ( a , c , h ) { a = a instanceof Object ? a : { } ; c = c instanceof Object ? JSON . parse ( JSON . stringify ( c ) ) : { } ; var b , e , d , f , k ; if ( a . hasOwnProperty ( "scope" ) && a . scope instanceof Object ) for ( b in a . scope ) c [ b ] = a . scope [ b ] ; if ( a . hasOwnProperty ( "node" ) && "string" == typeof a . node && ( e = FormBuilder . fetchNodeDefinition ( a . node , h ) , e . hasOwnProperty ( "def" ) && ( a . node _link = JSON . parse ( JSON . stringify ( e . def ) ) , e . hasOwnProperty ( "scope" ) ) ) ) for ( b in e . scope ) c [ b ] = e . scope [ b ] ; for ( b in a ) if ( "string" == typeof a [ b ] ) { e =
FormBuilder . regex . arr _out _set ; f = [ ] ; ( d = e . exec ( a [ b ] ) ) && f . push ( d [ 1 ] ) ; for ( d in f ) c . hasOwnProperty ( f [ d ] ) || ( c [ f [ d ] ] = [ ] ) , a [ b ] = c [ f [ d ] ] ; if ( ! ( 0 < f . length ) ) { e = FormBuilder . regex . pri _out _val ; for ( var g = [ ] ; null !== ( d = e . exec ( a [ b ] ) ) ; ) g . push ( d ) ; f = 0 ; k = [ ] ; for ( d in g ) k . push ( a [ b ] . substring ( f , g [ d ] . index ) ) , e = a [ b ] . substring ( g [ d ] . index + 1 , g [ d ] . index + g [ d ] [ 0 ] . length - 1 ) , c . hasOwnProperty ( e ) || k . push ( c [ e ] ) , f = g [ d ] . index + g [ d ] [ 0 ] . length ; a [ b ] = FormBuilder . buildString ( k ) ; if ( ! ( 0 < g . length ) ) { e = FormBuilder . regex . reg _out _val ; f = - 1 ; for ( g = [ ] ; null !==
( d = e . exec ( a [ b ] ) ) && ! ( f >= e . lastIndex ) ; ) f = e . lastIndex , g . push ( d [ 1 ] ) ; for ( d in g ) c . hasOwnProperty ( g [ d ] ) || ( c [ g [ d ] ] = "" ) , e = new RegExp ( "{\\$" + g [ d ] [ 1 ] + "}" , "g" ) , a [ b ] = a [ b ] . replace ( e , c [ g [ d ] ] ) ; if ( ! ( 0 < g . length ) ) { e = FormBuilder . regex . arr _out _val ; for ( f = [ ] ; null !== ( d = e . exec ( a [ b ] ) ) ; ) f . push ( d [ 1 ] ) ; for ( d in f ) c . hasOwnProperty ( f [ d ] ) || ( c [ f [ d ] ] = "" ) , e = new RegExp ( "/{" + f [ d ] + "}/" , "g" ) , a [ b ] . replace ( e , c [ f [ d ] ] ) } } } } 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 l in a [ b ] ) FormBuilder . replaceStatements ( a [ b ] [ l ] , c , h ) ; else a [ b ] instanceof Object && FormBuilder . replaceStatements ( a [ b ] , c , h ) ; return a } ; FormBuilder . buildString = function ( a ) { var c , h = "" ; for ( c in a ) console . log ( a [ c ] ) , h = a [ c ] instanceof refObject ? h + ( "" + a [ c ] . get ( ) ) : h + ( "" + a [ c ] . toString ( ) ) ; return h } ;