@@ -86,8 +86,7 @@ class PopoverCmp {
86
86
private _renderer : Renderer ,
87
87
private _config : Config ,
88
88
private _navParams : NavParams ,
89
- private _viewCtrl : ViewController ,
90
- private _platform : Platform
89
+ private _viewCtrl : ViewController
91
90
) {
92
91
this . d = _navParams . data . opts ;
93
92
this . created = Date . now ( ) ;
@@ -108,31 +107,55 @@ class PopoverCmp {
108
107
} ) ;
109
108
}
110
109
111
- ngOnInit ( ) {
112
- if ( this . d . event ) {
113
- this . positionView ( this . d . event ) ;
114
- }
115
- }
116
-
117
110
onPageDidEnter ( ) {
118
111
let activeElement : any = document . activeElement ;
119
112
if ( document . activeElement ) {
120
113
activeElement . blur ( ) ;
121
114
}
122
115
}
123
116
124
- positionView ( ev ) {
125
- let nativeEle = this . _elementRef . nativeElement ;
117
+ dismiss ( role ) : Promise < any > {
118
+ return this . _viewCtrl . dismiss ( null , role ) ;
119
+ }
120
+
121
+ bdClick ( ) {
122
+ if ( this . isEnabled ( ) && this . d . enableBackdropDismiss ) {
123
+ this . dismiss ( 'backdrop' ) ;
124
+ }
125
+ }
126
126
127
+ isEnabled ( ) {
128
+ let tm = this . _config . getNumber ( 'overlayCreatedDiff' , 750 ) ;
129
+ return ( this . created + tm < Date . now ( ) ) ;
130
+ }
131
+ }
132
+
133
+ export interface PopoverOptions {
134
+ cssClass ?: string ;
135
+ showBackdrop ?: boolean ;
136
+ enableBackdropDismiss ?: boolean ;
137
+ }
138
+
139
+ /**
140
+ * Animations for popover
141
+ */
142
+ class PopoverTransition extends Transition {
143
+ constructor ( opts : TransitionOptions ) {
144
+ super ( opts ) ;
145
+ }
146
+
147
+ positionView ( nativeEle : HTMLElement , ev ) {
127
148
// Popover wrapper width and height
128
- let popoverEle = nativeEle . querySelector ( '.popover-wrapper' ) ;
149
+ let popoverEle = < HTMLElement > nativeEle . querySelector ( '.popover-wrapper' ) ;
129
150
let popoverDim = popoverEle . getBoundingClientRect ( ) ;
130
151
let popoverWidth = popoverDim . width ;
131
152
let popoverHeight = popoverDim . height ;
132
153
133
154
// Window body width and height
134
- let bodyWidth = this . _platform . width ( ) ;
135
- let bodyHeight = this . _platform . height ( ) ;
155
+ // let bodyWidth = this._platform.width();
156
+ // let bodyHeight = this._platform.height();
157
+ let bodyWidth = window . innerWidth ;
158
+ let bodyHeight = window . innerHeight ;
136
159
137
160
// Target element width and height
138
161
let targetDim = ev . target . getBoundingClientRect ( ) ;
@@ -142,7 +165,7 @@ class PopoverCmp {
142
165
let targetHeight = targetDim . height ;
143
166
144
167
// The arrow that shows above the popover on iOS
145
- var arrowEle = nativeEle . querySelector ( '.popover-arrow' ) ;
168
+ var arrowEle = < HTMLElement > nativeEle . querySelector ( '.popover-arrow' ) ;
146
169
let arrowDim = arrowEle . getBoundingClientRect ( ) ;
147
170
var arrowWidth = arrowDim . width ;
148
171
var arrowHeight = arrowDim . height ;
@@ -171,166 +194,163 @@ class PopoverCmp {
171
194
if ( popoverCSS . top + POPOVER_BODY_PADDING + popoverHeight > bodyHeight && popoverCSS . top - popoverHeight > 0 ) {
172
195
arrowCSS . top = targetTop - ( arrowHeight + 1 ) ;
173
196
popoverCSS . top = targetTop - popoverHeight - ( arrowHeight - 1 ) ;
174
- this . _renderer . setElementClass ( this . _elementRef . nativeElement , ' popover-bottom', true ) ;
197
+ nativeEle . className = nativeEle . className + ' popover-bottom';
175
198
}
176
199
177
- this . _renderer . setElementStyle ( arrowEle , 'top' , arrowCSS . top + 'px' ) ;
178
- this . _renderer . setElementStyle ( arrowEle , 'left' , arrowCSS . left + 'px' ) ;
179
-
180
- this . _renderer . setElementStyle ( popoverEle , 'top' , popoverCSS . top + 'px' ) ;
181
- this . _renderer . setElementStyle ( popoverEle , 'left' , popoverCSS . left + 'px' ) ;
182
- }
183
-
184
- dismiss ( role ) : Promise < any > {
185
- return this . _viewCtrl . dismiss ( null , role ) ;
186
- }
187
-
188
- bdClick ( ) {
189
- if ( this . isEnabled ( ) && this . d . enableBackdropDismiss ) {
190
- this . dismiss ( 'backdrop' ) ;
191
- }
192
- }
200
+ arrowEle . style . top = arrowCSS . top + 'px' ;
201
+ arrowEle . style . left = arrowCSS . left + 'px' ;
193
202
194
- isEnabled ( ) {
195
- let tm = this . _config . getNumber ( 'overlayCreatedDiff' , 750 ) ;
196
- return ( this . created + tm < Date . now ( ) ) ;
203
+ popoverEle . style . top = popoverCSS . top + 'px' ;
204
+ popoverEle . style . left = popoverCSS . left + 'px' ;
197
205
}
198
206
}
199
207
200
- export interface PopoverOptions {
201
- event ?: any ;
202
- cssClass ?: string ;
203
- showBackdrop ?: boolean ;
204
- enableBackdropDismiss ?: boolean ;
205
- }
206
-
207
- /**
208
- * Animations for popover
209
- */
210
- class PopoverPopIn extends Transition {
208
+ class PopoverPopIn extends PopoverTransition {
211
209
constructor ( enteringView : ViewController , leavingView : ViewController , opts : TransitionOptions ) {
212
210
super ( opts ) ;
213
211
214
- console . log ( opts ) ;
215
-
216
212
let ele = enteringView . pageRef ( ) . nativeElement ;
213
+ this . positionView ( ele , opts . ev ) ;
214
+
217
215
let backdrop = new Animation ( ele . querySelector ( '.backdrop' ) ) ;
216
+ let arrow = new Animation ( ele . querySelector ( '.popover-arrow' ) ) ;
218
217
let wrapper = new Animation ( ele . querySelector ( '.popover-wrapper' ) ) ;
219
218
219
+ arrow . fromTo ( 'opacity' , '0.01' , '1' ) ;
220
220
wrapper . fromTo ( 'opacity' , '0.01' , '1' ) . fromTo ( 'scale' , '1.1' , '1' ) ;
221
221
backdrop . fromTo ( 'opacity' , '0.01' , '0.3' ) ;
222
222
223
223
this
224
224
. easing ( 'ease-in-out' )
225
225
. duration ( 200 )
226
226
. add ( backdrop )
227
+ . add ( arrow )
227
228
. add ( wrapper ) ;
228
229
}
229
230
}
230
231
Transition . register ( 'popover-pop-in' , PopoverPopIn ) ;
231
232
232
233
233
- class PopoverPopOut extends Transition {
234
+ class PopoverPopOut extends PopoverTransition {
234
235
constructor ( enteringView : ViewController , leavingView : ViewController , opts : TransitionOptions ) {
235
236
super ( opts ) ;
236
237
237
238
let ele = leavingView . pageRef ( ) . nativeElement ;
238
239
let backdrop = new Animation ( ele . querySelector ( '.backdrop' ) ) ;
240
+ let arrow = new Animation ( ele . querySelector ( '.popover-arrow' ) ) ;
239
241
let wrapper = new Animation ( ele . querySelector ( '.popover-wrapper' ) ) ;
240
242
243
+ arrow . fromTo ( 'opacity' , '1' , '0' ) ;
241
244
wrapper . fromTo ( 'opacity' , '1' , '0' ) . fromTo ( 'scale' , '1' , '0.9' ) ;
242
245
backdrop . fromTo ( 'opacity' , '0.3' , '0' ) ;
243
246
244
247
this
245
248
. easing ( 'ease-in-out' )
246
249
. duration ( 200 )
247
250
. add ( backdrop )
251
+ . add ( arrow )
248
252
. add ( wrapper ) ;
249
253
}
250
254
}
251
255
Transition . register ( 'popover-pop-out' , PopoverPopOut ) ;
252
256
253
257
254
- class PopoverMdPopIn extends Transition {
258
+ class PopoverMdPopIn extends PopoverTransition {
255
259
constructor ( enteringView : ViewController , leavingView : ViewController , opts : TransitionOptions ) {
256
260
super ( opts ) ;
257
261
258
262
let ele = enteringView . pageRef ( ) . nativeElement ;
263
+ this . positionView ( ele , opts . ev ) ;
264
+
259
265
let backdrop = new Animation ( ele . querySelector ( '.backdrop' ) ) ;
266
+ let arrow = new Animation ( ele . querySelector ( '.popover-arrow' ) ) ;
260
267
let wrapper = new Animation ( ele . querySelector ( '.popover-wrapper' ) ) ;
261
268
269
+ arrow . fromTo ( 'opacity' , '0.01' , '1' ) . fromTo ( 'scale' , '1.1' , '1' ) ;
262
270
wrapper . fromTo ( 'opacity' , '0.01' , '1' ) . fromTo ( 'scale' , '1.1' , '1' ) ;
263
271
backdrop . fromTo ( 'opacity' , '0.01' , '0.5' ) ;
264
272
265
273
this
266
274
. easing ( 'ease-in-out' )
267
275
. duration ( 200 )
268
276
. add ( backdrop )
269
- . add ( wrapper ) ;
277
+ . add ( wrapper )
278
+ . add ( arrow ) ;
270
279
}
271
280
}
272
281
Transition . register ( 'popover-md-pop-in' , PopoverMdPopIn ) ;
273
282
274
283
275
- class PopoverMdPopOut extends Transition {
284
+ class PopoverMdPopOut extends PopoverTransition {
276
285
constructor ( enteringView : ViewController , leavingView : ViewController , opts : TransitionOptions ) {
277
286
super ( opts ) ;
278
287
279
288
let ele = leavingView . pageRef ( ) . nativeElement ;
280
289
let backdrop = new Animation ( ele . querySelector ( '.backdrop' ) ) ;
290
+ let arrow = new Animation ( ele . querySelector ( '.popover-arrow' ) ) ;
281
291
let wrapper = new Animation ( ele . querySelector ( '.popover-wrapper' ) ) ;
282
292
293
+ arrow . fromTo ( 'opacity' , '1' , '0' ) . fromTo ( 'scale' , '1' , '0.9' ) ;
283
294
wrapper . fromTo ( 'opacity' , '1' , '0' ) . fromTo ( 'scale' , '1' , '0.9' ) ;
284
295
backdrop . fromTo ( 'opacity' , '0.5' , '0' ) ;
285
296
286
297
this
287
298
. easing ( 'ease-in-out' )
288
299
. duration ( 200 )
289
300
. add ( backdrop )
290
- . add ( wrapper ) ;
301
+ . add ( wrapper )
302
+ . add ( arrow ) ;
291
303
}
292
304
}
293
305
Transition . register ( 'popover-md-pop-out' , PopoverMdPopOut ) ;
294
306
295
307
296
308
297
- class PopoverWpPopIn extends Transition {
309
+ class PopoverWpPopIn extends PopoverTransition {
298
310
constructor ( enteringView : ViewController , leavingView : ViewController , opts : TransitionOptions ) {
299
311
super ( opts ) ;
300
312
301
313
let ele = enteringView . pageRef ( ) . nativeElement ;
314
+ this . positionView ( ele , opts . ev ) ;
315
+
302
316
let backdrop = new Animation ( ele . querySelector ( '.backdrop' ) ) ;
317
+ let arrow = new Animation ( ele . querySelector ( '.popover-arrow' ) ) ;
303
318
let wrapper = new Animation ( ele . querySelector ( '.popover-wrapper' ) ) ;
304
319
320
+ arrow . fromTo ( 'opacity' , '0.01' , '1' ) . fromTo ( 'scale' , '1.3' , '1' ) ;
305
321
wrapper . fromTo ( 'opacity' , '0.01' , '1' ) . fromTo ( 'scale' , '1.3' , '1' ) ;
306
322
backdrop . fromTo ( 'opacity' , '0.01' , '0.5' ) ;
307
323
308
324
this
309
325
. easing ( 'cubic-bezier(0,0 0.05,1)' )
310
326
. duration ( 200 )
311
327
. add ( backdrop )
312
- . add ( wrapper ) ;
328
+ . add ( wrapper )
329
+ . add ( arrow ) ;
313
330
}
314
331
}
315
332
Transition . register ( 'popover-wp-pop-in' , PopoverWpPopIn ) ;
316
333
317
334
318
- class PopoverWpPopOut extends Transition {
335
+ class PopoverWpPopOut extends PopoverTransition {
319
336
constructor ( enteringView : ViewController , leavingView : ViewController , opts : TransitionOptions ) {
320
337
super ( opts ) ;
321
338
322
339
let ele = leavingView . pageRef ( ) . nativeElement ;
323
340
let backdrop = new Animation ( ele . querySelector ( '.backdrop' ) ) ;
341
+ let arrow = new Animation ( ele . querySelector ( '.popover-arrow' ) ) ;
324
342
let wrapper = new Animation ( ele . querySelector ( '.popover-wrapper' ) ) ;
325
343
344
+ arrow . fromTo ( 'opacity' , '1' , '0' ) . fromTo ( 'scale' , '1' , '1.3' ) ;
326
345
wrapper . fromTo ( 'opacity' , '1' , '0' ) . fromTo ( 'scale' , '1' , '1.3' ) ;
327
346
backdrop . fromTo ( 'opacity' , '0.5' , '0' ) ;
328
347
329
348
this
330
349
. easing ( 'ease-out' )
331
350
. duration ( 150 )
332
351
. add ( backdrop )
333
- . add ( wrapper ) ;
352
+ . add ( wrapper )
353
+ . add ( arrow ) ;
334
354
}
335
355
}
336
356
Transition . register ( 'popover-wp-pop-out' , PopoverWpPopOut ) ;
0 commit comments