10
10
}
11
11
} ) ( this , function ( ) {
12
12
'use strict' ;
13
- return function dom ( nodeData ) {
14
- // string -> text node
15
- if ( typeof nodeData === 'string' )
16
- return document . createTextNode ( nodeData ) ;
17
13
18
- // DOM node -> DOM node
19
- if ( nodeData instanceof Node ) return nodeData ;
20
-
21
- // array -> document fragment
22
- if ( Array . isArray ( nodeData ) ) {
23
- // build each node and stick in docFrag
24
- var docFrag = document . createDocumentFragment ( ) ;
25
- nodeData . forEach ( function ( nodeData ) {
26
- docFrag . appendChild ( dom ( nodeData ) ) ;
27
- } ) ;
14
+ function createDocFrag ( array ) {
15
+ // build each node and stick in docFrag
16
+ var docFrag = document . createDocumentFragment ( ) ;
17
+ array . forEach ( function ( nodeData , i ) {
18
+ docFrag . appendChild ( dom ( nodeData ) ) ;
19
+ } ) ;
28
20
29
- return docFrag ;
30
- }
21
+ return docFrag ;
22
+ }
31
23
32
- // object -> element
33
- var el = document . createElement ( nodeData . el || 'div' ) ;
24
+ function createEl ( elData ) {
25
+ var el = document . createElement ( elData . el || 'div' ) ;
34
26
35
- for ( var attr in nodeData ) {
36
- if ( [ 'el' , 'kid ' , 'kids' ] . indexOf ( attr ) === - 1 ) {
27
+ Object . keys ( elData ) . forEach ( function ( key ) {
28
+ if ( [ 'el' , 'text ' , 'kids' ] . indexOf ( key ) === - 1 ) {
37
29
// set JS properties
38
- if ( attr [ 0 ] === '_' ) el [ attr . slice ( 1 ) ] = nodeData [ attr ] ;
30
+ if ( key [ 0 ] === '_' ) {
31
+ el [ key . slice ( 1 ) ] = elData [ key ] ;
32
+ }
39
33
40
- // add event listeners
41
- else if ( attr . slice ( 0 , 3 ) === 'on_' ) {
42
- var eventName = attr . slice ( 3 ) ;
43
- var handlers = nodeData [ attr ] ;
34
+ // add event listener(s)
35
+ else if ( key . slice ( 0 , 3 ) === 'on_' ) {
36
+ var eventName = key . slice ( 3 ) ;
37
+ var handlers = elData [ key ] ;
44
38
45
39
// accept a function
46
40
if ( typeof handlers === 'function' ) handlers = [ handlers ] ;
47
41
48
42
// or an array of functions
49
- for ( var i = 0 ; i < handlers . length ; i ++ ) el . addEventListener ( eventName , handlers [ i ] , false ) ;
43
+ for ( var i = 0 ; i < handlers . length ; i ++ ) {
44
+ el . addEventListener ( eventName , handlers [ i ] , false ) ;
45
+ }
50
46
}
51
47
52
48
// add html attributes
53
- else el . setAttribute ( attr , nodeData [ attr ] ) ;
49
+ else el . setAttribute ( key , elData [ key ] ) ;
54
50
}
55
- }
51
+ } ) ;
56
52
57
- // add child nodes
58
- if ( nodeData . text ) el . textContent = nodeData . text ;
59
- else if ( nodeData . kids ) el . appendChild ( dom ( nodeData . kids ) ) ;
53
+ // set text
54
+ if ( elData . text ) el . textContent = elData . text ;
55
+
56
+ // otherwise add child nodes
57
+ else if ( elData . kids ) el . appendChild ( createDocFrag ( elData . kids ) ) ;
60
58
61
59
return el ;
60
+ }
61
+
62
+ return function dom ( nodeData ) {
63
+ var type = typeof nodeData ;
64
+
65
+ // string -> text node
66
+ return type === 'string' || type === 'number' ?
67
+ document . createTextNode ( nodeData ) :
68
+
69
+ // DOM node -> DOM node
70
+ nodeData instanceof Node ? nodeData :
71
+
72
+ // array -> document fragment
73
+ Array . isArray ( nodeData ) ? createDocFrag ( nodeData ) :
74
+
75
+ // object -> element
76
+ createEl ( nodeData ) ;
62
77
} ;
63
- } ) ;
78
+ } ) ;
0 commit comments