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