@@ -6,22 +6,29 @@ function isElseIf ( node ) {
6
6
7
7
const preprocessors = {
8
8
MustacheTag : ( generator , block , node ) => {
9
- const { dependencies } = block . contextualise ( node . expression ) ;
9
+ const dependencies = block . findDependencies ( node . expression ) ;
10
10
block . addDependencies ( dependencies ) ;
11
11
} ,
12
12
13
13
IfBlock : ( generator , block , node ) => {
14
+ const blocks = [ ] ;
15
+ let dynamic = false ;
16
+
14
17
function attachBlocks ( node ) {
15
- const { dependencies } = block . contextualise ( node . expression ) ;
18
+ const dependencies = block . findDependencies ( node . expression ) ;
16
19
block . addDependencies ( dependencies ) ;
17
20
18
21
node . _block = block . child ( {
19
22
name : generator . getUniqueName ( `create_if_block` )
20
23
} ) ;
21
24
22
- generator . blocks . push ( node . _block ) ;
25
+ blocks . push ( node . _block ) ;
23
26
preprocessChildren ( generator , node . _block , node . children ) ;
24
- block . addDependencies ( node . _block . dependencies ) ;
27
+
28
+ if ( node . _block . dependencies . size > 0 ) {
29
+ dynamic = true ;
30
+ block . addDependencies ( node . _block . dependencies ) ;
31
+ }
25
32
26
33
if ( isElseIf ( node . else ) ) {
27
34
attachBlocks ( node . else . children [ 0 ] ) ;
@@ -30,17 +37,27 @@ const preprocessors = {
30
37
name : generator . getUniqueName ( `create_if_block` )
31
38
} ) ;
32
39
33
- generator . blocks . push ( node . else . _block ) ;
40
+ blocks . push ( node . else . _block ) ;
34
41
preprocessChildren ( generator , node . else . _block , node . else . children ) ;
35
- block . addDependencies ( node . else . _block . dependencies ) ;
42
+
43
+ if ( node . else . _block . dependencies . size > 0 ) {
44
+ dynamic = true ;
45
+ block . addDependencies ( node . else . _block . dependencies ) ;
46
+ }
36
47
}
37
48
}
38
49
39
50
attachBlocks ( node ) ;
51
+
52
+ blocks . forEach ( block => {
53
+ block . hasUpdateMethod = dynamic ;
54
+ } ) ;
55
+
56
+ generator . blocks . push ( ...blocks ) ;
40
57
} ,
41
58
42
59
EachBlock : ( generator , block , node ) => {
43
- const { dependencies } = block . contextualise ( node . expression ) ;
60
+ const dependencies = block . findDependencies ( node . expression ) ;
44
61
block . addDependencies ( dependencies ) ;
45
62
46
63
const indexNames = new Map ( block . indexNames ) ;
@@ -82,6 +99,7 @@ const preprocessors = {
82
99
generator . blocks . push ( node . _block ) ;
83
100
preprocessChildren ( generator , node . _block , node . children ) ;
84
101
block . addDependencies ( node . _block . dependencies ) ;
102
+ node . _block . hasUpdateMethod = node . _block . dependencies . size > 0 ;
85
103
86
104
if ( node . else ) {
87
105
node . else . _block = block . child ( {
@@ -90,6 +108,7 @@ const preprocessors = {
90
108
91
109
generator . blocks . push ( node . else . _block ) ;
92
110
preprocessChildren ( generator , node . else . _block , node . else . children ) ;
111
+ node . else . _block . hasUpdateMethod = node . else . _block . dependencies . size > 0 ;
93
112
}
94
113
} ,
95
114
@@ -98,16 +117,24 @@ const preprocessors = {
98
117
if ( attribute . type === 'Attribute' && attribute . value !== true ) {
99
118
attribute . value . forEach ( chunk => {
100
119
if ( chunk . type !== 'Text' ) {
101
- const { dependencies } = block . contextualise ( chunk . expression ) ;
120
+ const dependencies = block . findDependencies ( chunk . expression ) ;
102
121
block . addDependencies ( dependencies ) ;
103
122
}
104
123
} ) ;
105
124
}
106
125
107
126
else if ( attribute . type === 'Binding' ) {
108
- const { dependencies } = block . contextualise ( attribute . value ) ;
127
+ const dependencies = block . findDependencies ( attribute . value ) ;
109
128
block . addDependencies ( dependencies ) ;
110
129
}
130
+
131
+ // else if ( attribute.type === 'EventHandler' ) {
132
+ // // TODO is this necessary?
133
+ // attribute.expression.arguments.forEach( arg => {
134
+ // const dependencies = block.findDependencies( arg );
135
+ // block.addDependencies( dependencies );
136
+ // });
137
+ // }
111
138
} ) ;
112
139
113
140
const isComponent = generator . components . has ( node . name ) || node . name === ':Self' ;
@@ -121,6 +148,8 @@ const preprocessors = {
121
148
122
149
generator . blocks . push ( node . _block ) ;
123
150
preprocessChildren ( generator , node . _block , node . children ) ;
151
+ block . addDependencies ( node . _block . dependencies ) ;
152
+ node . _block . hasUpdateMethod = node . _block . dependencies . size > 0 ;
124
153
}
125
154
126
155
else {
@@ -156,6 +185,7 @@ export default function preprocess ( generator, children ) {
156
185
157
186
generator . blocks . push ( block ) ;
158
187
preprocessChildren ( generator , block , children ) ;
188
+ block . hasUpdateMethod = block . dependencies . size > 0 ;
159
189
160
190
return block ;
161
191
}
0 commit comments