Skip to content

Commit 44a7da8

Browse files
committed
feat(popover): change MD animation and use for WP also
references #5420
1 parent c944ffd commit 44a7da8

File tree

5 files changed

+27
-58
lines changed

5 files changed

+27
-58
lines changed

src/components/popover/popover.md.scss

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ $popover-md-box-shadow: 0 3px 12px 2px $popover-md-box-shadow-col
1414

1515
$popover-md-item-background: $popover-md-background !default;
1616

17-
.popover-wrapper {
18-
opacity: 1;
19-
}
2017

2118
.popover-content {
2219
width: $popover-md-width;
@@ -38,4 +35,5 @@ $popover-md-item-background: $popover-md-background !default;
3835

3936
.popover-viewport {
4037
opacity: 0;
38+
transition-delay: 100ms;
4139
}

src/components/popover/popover.ts

Lines changed: 11 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {Config} from '../../config/config';
77
import {NavParams} from '../nav/nav-params';
88
import {Platform} from '../../platform/platform';
99
import {isPresent, isUndefined, isDefined} from '../../util/util';
10-
import {nativeRaf} from '../../util/dom';
10+
import {nativeRaf, CSS} from '../../util/dom';
1111
import {ViewController} from '../nav/view-controller';
1212

1313
const POPOVER_BODY_PADDING = 2;
@@ -245,6 +245,8 @@ class PopoverTransition extends Transition {
245245
let originY = 'top';
246246
let originX = 'left';
247247

248+
let popoverWrapperEle = <HTMLElement>nativeEle.querySelector('.popover-wrapper');
249+
248250
// Popover content width and height
249251
let popoverEle = <HTMLElement>nativeEle.querySelector('.popover-content');
250252
let popoverDim = popoverEle.getBoundingClientRect();
@@ -313,7 +315,11 @@ class PopoverTransition extends Transition {
313315
popoverEle.style.top = popoverCSS.top + 'px';
314316
popoverEle.style.left = popoverCSS.left + 'px';
315317

316-
popoverEle.style.transformOrigin = originY + " " + originX;
318+
popoverEle.style[CSS.transformOrigin] = originY + " " + originX;
319+
320+
// Since the transition starts before styling is done we
321+
// want to wait for the styles to apply before showing the wrapper
322+
popoverWrapperEle.style.opacity = '1';
317323
}
318324
}
319325

@@ -373,16 +379,15 @@ class PopoverMdPopIn extends PopoverTransition {
373379

374380
let ele = enteringView.pageRef().nativeElement;
375381

376-
let wrapper = new Animation(ele.querySelector('.popover-wrapper'));
377382
let content = new Animation(ele.querySelector('.popover-content'));
378383
let viewport = new Animation(ele.querySelector('.popover-viewport'));
379384

380-
content.fromTo('scale', '0', '1');
385+
content.fromTo('scale', '0.001', '1');
381386
viewport.fromTo('opacity', '0', '1');
382387

383388
this
384-
.easing('cubic-bezier(.55,0,.55,.2)')
385-
.duration(500)
389+
.easing('cubic-bezier(0.36,0.66,0.04,1)')
390+
.duration(300)
386391
.add(content)
387392
.add(viewport);
388393
}
@@ -416,50 +421,4 @@ class PopoverMdPopOut extends PopoverTransition {
416421
Transition.register('popover-md-pop-out', PopoverMdPopOut);
417422

418423

419-
420-
class PopoverWpPopIn extends PopoverTransition {
421-
constructor(private enteringView: ViewController, private leavingView: ViewController, private opts: TransitionOptions) {
422-
super(opts);
423-
424-
let ele = enteringView.pageRef().nativeElement;
425-
426-
let wrapper = new Animation(ele.querySelector('.popover-wrapper'));
427-
428-
wrapper.fromTo('opacity', '0.01', '1');
429-
430-
this
431-
.easing('ease')
432-
.duration(100)
433-
.fadeIn()
434-
.add(wrapper);
435-
}
436-
437-
play() {
438-
nativeRaf(() => {
439-
this.positionView(this.enteringView.pageRef().nativeElement, this.opts.ev);
440-
super.play();
441-
});
442-
}
443-
}
444-
Transition.register('popover-wp-pop-in', PopoverWpPopIn);
445-
446-
447-
class PopoverWpPopOut extends PopoverTransition {
448-
constructor(private enteringView: ViewController, private leavingView: ViewController, private opts: TransitionOptions) {
449-
super(opts);
450-
451-
let ele = leavingView.pageRef().nativeElement;
452-
let wrapper = new Animation(ele.querySelector('.popover-wrapper'));
453-
454-
wrapper.fromTo('opacity', '1', '0');
455-
456-
this
457-
.easing('ease')
458-
.duration(500)
459-
.fadeIn()
460-
.add(wrapper);
461-
}
462-
}
463-
Transition.register('popover-wp-pop-out', PopoverWpPopOut);
464-
465424
let popoverIds = -1;

src/components/popover/popover.wp.scss

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,23 @@ $popover-wp-item-background: $popover-wp-background !default;
1616

1717
.popover-content {
1818
width: $popover-wp-width;
19-
19+
min-width: 0;
20+
min-height: 0;
2021
max-height: $popover-wp-max-height;
2122

2223
border: $popover-wp-border;
2324
border-radius: $popover-wp-border-radius;
2425
color: $popover-wp-text-color;
2526
background: $popover-wp-background;
27+
28+
transform-origin: top left;
2629
}
2730

2831
.popover-content .item {
2932
background-color: $popover-wp-item-background;
3033
}
34+
35+
.popover-viewport {
36+
opacity: 0;
37+
transition-delay: 100ms;
38+
}

src/config/modes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ Config.setModeConfig('wp', {
117117
pickerEnter: 'picker-slide-in',
118118
pickerLeave: 'picker-slide-out',
119119

120-
popoverEnter: 'popover-wp-pop-in',
121-
popoverLeave: 'popover-wp-pop-out',
120+
popoverEnter: 'popover-md-pop-in',
121+
popoverLeave: 'popover-md-pop-out',
122122

123123
spinner: 'circles',
124124

src/util/dom.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export let CSS: {
5757
transitionTimingFn?: string,
5858
transitionStart?: string,
5959
transitionEnd?: string,
60+
transformOrigin?: string
6061
} = {};
6162

6263
(function() {
@@ -94,6 +95,9 @@ export let CSS: {
9495

9596
// To be sure transitionend works everywhere, include *both* the webkit and non-webkit events
9697
CSS.transitionEnd = (isWebkit ? 'webkitTransitionEnd ' : '') + 'transitionend';
98+
99+
// transform origin
100+
CSS.transformOrigin = (isWebkit ? '-webkit-' : '') + 'transform-origin';
97101
})();
98102

99103

0 commit comments

Comments
 (0)