1
+ var Vue = require ( '../../../src/vue' )
2
+ var _ = Vue . util
3
+
4
+ describe ( 'Staggering Transitions' , function ( ) {
5
+
6
+ var el
7
+ var amount = 50
8
+ beforeEach ( function ( ) {
9
+ el = document . createElement ( 'div' )
10
+ document . body . appendChild ( el )
11
+ } )
12
+
13
+ afterEach ( function ( ) {
14
+ document . body . removeChild ( el )
15
+ } )
16
+
17
+ it ( 'as attribute' , function ( done ) {
18
+ var vm = new Vue ( {
19
+ el : el ,
20
+ template : '<div v-repeat="list" v-transition="stagger" stagger="' + amount + '">{{a}}</div>' ,
21
+ data : {
22
+ list : [ ]
23
+ } ,
24
+ transitions : {
25
+ stagger : {
26
+ enter : function ( el , done ) {
27
+ _ . nextTick ( done )
28
+ } ,
29
+ leave : function ( el , done ) {
30
+ _ . nextTick ( done )
31
+ }
32
+ }
33
+ }
34
+ } )
35
+ assertStagger ( vm , done )
36
+ } )
37
+
38
+ it ( 'as hook' , function ( done ) {
39
+ var vm = new Vue ( {
40
+ el : el ,
41
+ template : '<div v-repeat="list" v-transition="stagger">{{a}}</div>' ,
42
+ data : {
43
+ list : [ ]
44
+ } ,
45
+ transitions : {
46
+ stagger : {
47
+ stagger : function ( i ) {
48
+ return i * amount
49
+ } ,
50
+ enter : function ( el , done ) {
51
+ _ . nextTick ( done )
52
+ } ,
53
+ leave : function ( el , done ) {
54
+ _ . nextTick ( done )
55
+ }
56
+ }
57
+ }
58
+ } )
59
+ assertStagger ( vm , done )
60
+ } )
61
+
62
+ it ( 'remove while staggered' , function ( done ) {
63
+ var vm = new Vue ( {
64
+ el : el ,
65
+ template : '<div v-repeat="list" v-transition="stagger" stagger="' + amount + '">{{a}}</div>' ,
66
+ data : {
67
+ list : [ ]
68
+ } ,
69
+ transitions : {
70
+ stagger : {
71
+ enter : function ( el , done ) {
72
+ _ . nextTick ( done )
73
+ } ,
74
+ leave : function ( el , done ) {
75
+ _ . nextTick ( done )
76
+ }
77
+ }
78
+ }
79
+ } )
80
+ vm . list = [ { a : 1 } , { a : 2 } ]
81
+ expect ( el . innerHTML ) . toBe ( '' )
82
+ _ . nextTick ( function ( ) {
83
+ expect ( el . innerHTML ) . toBe ( '<div class="stagger-transition stagger-enter">1</div>' )
84
+ vm . list = [ vm . list [ 0 ] ] // remove second
85
+ setTimeout ( function ( ) {
86
+ // should have only one
87
+ expect ( el . innerHTML ) . toBe ( '<div class="stagger-transition">1</div>' )
88
+ done ( )
89
+ } , amount + 10 )
90
+ } )
91
+ } )
92
+
93
+ it ( 'reorder while staggered' , function ( done ) {
94
+ var vm = new Vue ( {
95
+ el : el ,
96
+ template : '<div v-repeat="list" v-transition="stagger" stagger="' + amount + '">{{a}}</div>' ,
97
+ data : {
98
+ list : [ ]
99
+ } ,
100
+ transitions : {
101
+ stagger : {
102
+ enter : function ( el , done ) {
103
+ _ . nextTick ( done )
104
+ } ,
105
+ leave : function ( el , done ) {
106
+ _ . nextTick ( done )
107
+ }
108
+ }
109
+ }
110
+ } )
111
+ vm . list = [ { a : 1 } , { a : 2 } ]
112
+ expect ( el . innerHTML ) . toBe ( '' )
113
+ _ . nextTick ( function ( ) {
114
+ expect ( el . innerHTML ) . toBe ( '<div class="stagger-transition stagger-enter">1</div>' )
115
+ vm . list = [ vm . list [ 1 ] , vm . list [ 0 ] ] // reorder
116
+ setTimeout ( function ( ) {
117
+ // should have correct order
118
+ expect ( el . innerHTML ) . toBe (
119
+ '<div class="stagger-transition">2</div>' +
120
+ '<div class="stagger-transition">1</div>'
121
+ )
122
+ done ( )
123
+ } , amount + 10 )
124
+ } )
125
+ } )
126
+
127
+ function assertStagger ( vm , done ) {
128
+ vm . list = [ { a :1 } , { a :2 } ]
129
+ expect ( el . innerHTML ) . toBe ( '' )
130
+ _ . nextTick ( function ( ) {
131
+ expect ( el . innerHTML ) . toBe ( '<div class="stagger-transition stagger-enter">1</div>' )
132
+ _ . nextTick ( function ( ) {
133
+ expect ( el . innerHTML ) . toBe ( '<div class="stagger-transition">1</div>' )
134
+ setTimeout ( function ( ) {
135
+ expect ( el . innerHTML ) . toBe (
136
+ '<div class="stagger-transition">1</div>' +
137
+ '<div class="stagger-transition">2</div>'
138
+ )
139
+ vm . list = [ ]
140
+ _ . nextTick ( function ( ) {
141
+ expect ( el . innerHTML ) . toBe (
142
+ '<div class="stagger-transition stagger-leave">1</div>' +
143
+ '<div class="stagger-transition">2</div>'
144
+ )
145
+ _ . nextTick ( function ( ) {
146
+ expect ( el . innerHTML ) . toBe ( '<div class="stagger-transition">2</div>' )
147
+ setTimeout ( function ( ) {
148
+ expect ( el . innerHTML ) . toBe ( '' )
149
+ done ( )
150
+ } , amount + 10 )
151
+ } )
152
+ } )
153
+ } , amount + 10 )
154
+ } )
155
+ } )
156
+ }
157
+
158
+ } )
0 commit comments