2016-09-19 06:37:35 +00:00
var ref = function ( a , b ) { for ( var d = null ; null == d || a . hasOwnProperty ( d ) ; ) d = "$" + ( 1048576 + Math . floor ( 15728639 * Math . random ( ) ) ) . toString ( 16 ) + "$" ; a [ d ] = b ; return d } , 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 , ref _table : { } } ;
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-]+)$/ , ref _pri : /^\$[a-f0-9]{6}\$$/ } ; 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 b in a ) this . defs _object [ b ] = a [ b ] } ; FormBuilder . prototype . build = function ( a ) { a = null == a ? { } : a ; for ( var b in a ) a [ b ] = ref ( this . ref _table , a [ b ] ) ; 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 , this . ref _table ) } ;
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 , b ) { if ( a . hasOwnProperty ( "children" ) ) for ( var d in a . children ) a . children [ d ] . parent = a , FormBuilder . formatFormObject ( a . children [ d ] , b ) ; return a } ;
FormBuilder . fetchNodeDefinition = function ( a , b ) { var d , e ; r = FormBuilder . regex . reg _in _key ; if ( "undefined" != typeof b && b . hasOwnProperty ( a ) ) return { def : b [ a ] } ; for ( d in b ) if ( r . test ( d ) && ( e = new RegExp ( d . slice ( 1 , - 1 ) ) , e . test ( a ) ) ) { matches = { } ; for ( e = 1 ; e < RegExp . length && 10 > e ; e ++ ) matches [ "$" + e ] = RegExp [ "$" + e ] ; return { def : b [ d ] , scope : matches } } return { } } ;
FormBuilder . replaceStatements = function ( a , b , d , e ) { a = a instanceof Object ? a : { } ; b = b instanceof Object ? JSON . parse ( JSON . stringify ( b ) ) : { } ; var c , h , f , g , n , k , l ; if ( a . hasOwnProperty ( "scope" ) && a . scope instanceof Object ) for ( c in a . scope ) b [ c ] = a . scope [ c ] ; if ( a . hasOwnProperty ( "node" ) && "string" == typeof a . node && ( f = FormBuilder . fetchNodeDefinition ( a . node , d ) , f . hasOwnProperty ( "def" ) && ( a . node _link = JSON . parse ( JSON . stringify ( f . def ) ) , f . hasOwnProperty ( "scope" ) ) ) ) for ( c in f . scope ) b [ c ] = f . scope [ c ] ; for ( c in a ) if ( "string" == typeof a [ c ] ) if ( a [ c ] =
[ a [ c ] ] , f = FormBuilder . replaceStatementsArray ( a [ c ] [ 0 ] , b ) , ! 1 !== f ) a [ c ] [ 0 ] = f ; else { h = FormBuilder . regex . reg _out _val ; g = - 1 ; for ( k = [ ] ; null !== ( f = h . exec ( a [ c ] [ 0 ] ) ) && ! ( g >= h . lastIndex ) ; ) g = h . lastIndex , k . push ( f [ 1 ] ) ; for ( f in k ) b . hasOwnProperty ( k [ f ] ) || ( b [ k [ f ] ] = "" ) , h = new RegExp ( "{\\$" + k [ f ] [ 1 ] + "}" , "g" ) , a [ c ] [ 0 ] = a [ c ] [ 0 ] . replace ( h , b [ k [ f ] ] ) ; if ( ! ( 0 < k . length ) ) for ( n in a [ c ] = FormBuilder . replaceStatementsPrimary ( a [ c ] , b ) , h = FormBuilder . regex . arr _out _val , a [ c ] ) if ( null != a [ c ] [ n ] ) { for ( l = [ ] ; null !== ( f = h . exec ( a [ c ] [ n ] ) ) ; ) l . push ( f ) ; g = 0 ; k =
[ ] ; for ( f in l ) ( 0 < g || 0 < l [ f ] . index ) && k . push ( a [ c ] [ n ] . substr ( g , l [ f ] . index ) ) , b . hasOwnProperty ( l [ f ] [ 1 ] ) || ( b [ l [ f ] [ 1 ] ] = "" ) , k . push ( b [ l [ f ] [ 1 ] ] ) , g = l [ f ] . index + l [ f ] [ 0 ] . length ; g < a [ c ] [ n ] . length && k . push ( a [ c ] [ n ] . substr ( g , a [ c ] [ n ] . length ) ) ; 0 < l . length && ( a [ c ] = a [ c ] . slice ( 0 , n ) . concat ( k ) . concat ( a [ c ] . slice ( n + 1 ) ) ) } } for ( c in a ) FormBuilder . regex . pri _in _key . test ( c ) ? b [ c . substring ( 1 ) ] = ref ( e , a [ c ] ) : FormBuilder . regex . arr _in _key . test ( c ) && ( b [ c . substring ( 2 ) ] = ref ( e , a [ c ] ) ) ; b = JSON . parse ( JSON . stringify ( b ) ) ; for ( c in a ) if ( - 1 < FormBuilder . spread _attr . indexOf ( c ) ) if ( a [ c ] instanceof
Array ) for ( var p in a [ c ] ) FormBuilder . replaceStatements ( a [ c ] [ p ] , b , d , e ) ; else a [ c ] instanceof Object && FormBuilder . replaceStatements ( a [ c ] , b , d , e ) ; return a } ; FormBuilder . replaceStatementsArray = function ( a , b ) { var d = null , d = FormBuilder . regex . arr _out _set . exec ( a ) ; if ( null === d ) return ! 1 ; b . hasOwnProperty ( d [ 1 ] ) || ( b [ d [ 1 ] ] = [ ] ) ; return b [ d [ 1 ] ] } ;
FormBuilder . replaceStatementsPrimary = function ( a , b ) { var d = FormBuilder . regex . pri _out _val , e = null , c = [ ] , h , f , g ; for ( g = 0 ; g < a . length ; g ++ ) { m = null ; c = [ ] ; h = 0 ; for ( f = [ ] ; null !== ( e = d . exec ( a [ g ] ) ) ; ) c . push ( e ) ; for ( e = 0 ; e < c . length ; e ++ ) ( 0 < h || 0 < c [ e ] . index ) && f . push ( a [ g ] . substr ( h , c [ e ] . index ) ) , b . hasOwnProperty ( c [ e ] [ 1 ] ) || ( b [ c [ e ] [ 1 ] ] = "" ) , f . push ( b [ c [ e ] [ 1 ] ] ) , h = c [ e ] . index + c [ e ] [ 0 ] . length ; h < a [ g ] . length && f . push ( a [ g ] . substr ( h , a [ g ] . length ) ) ; 0 < c . length && ( a = a . slice ( 0 , g ) . concat ( f ) . concat ( a . slice ( g + 1 ) ) ) } return a } ;
FormBuilder . buildString = function ( a , b ) { var d , e = "" ; if ( "string" == typeof b && FormBuilder . regex . ref _pri . test ( b ) ) return a [ b ] ; for ( d in b ) e = FormBuilder . regex . ref _pri . test ( b [ d ] ) && a . hasOwnProperty ( b [ d ] ) ? a [ b [ d ] ] instanceof Array ? e + ( "" + FormBuilder . buildString ( a , a [ b [ d ] ] ) ) : e + ( "" + a [ b [ d ] ] ) : e + ( "" + b [ d ] . toString ( ) ) ; return e } ;