Files
2015-11-19 09:10:39 -06:00

88 lines
1.9 KiB
TypeScript

import {Menu} from './menu';
import {SlideEdgeGesture} from '../../gestures/slide-edge-gesture';
import * as util from 'ionic/util';
class MenuContentGesture extends SlideEdgeGesture {
constructor(menu: Menu, targetEl: Element, options = {}) {
super(targetEl, util.extend({
direction: (menu.side === 'left' || menu.side === 'right') ? 'x' : 'y',
edge: menu.side,
threshold: 75
}, options));
this.menu = menu;
this.listen();
}
canStart(ev) {
return this.menu.isOpen && this.menu.isEnabled ? true : super.canStart(ev);
}
// Set CSS, then wait one frame for it to apply before sliding starts
onSlideBeforeStart(slide, ev) {
this.menu.setProgressStart();
}
onSlide(slide, ev) {
this.menu.setProgess(slide.distance / slide.max);
}
onSlideEnd(slide, ev) {
let shouldComplete = (Math.abs(ev.velocityX) > 0.2 || Math.abs(slide.delta) > Math.abs(slide.max) * 0.5);
this.menu.setProgressEnd(shouldComplete);
}
getElementStartPos(slide, ev) {
return this.menu.isOpen ? slide.max : slide.min;
}
getSlideBoundaries() {
return {
min: 0,
max: this.menu.width()
};
}
}
/**
* Support dragging the target menu as well as the content.
*/
export class TargetGesture extends MenuContentGesture {
constructor(menu: Menu) {
super(menu, menu.getNativeElement(), {
threshold: 0
});
}
}
export class LeftMenuGesture extends MenuContentGesture {
constructor(menu: Menu) {
super(menu, menu.getContentElement());
}
}
export class RightMenuGesture extends MenuContentGesture {
constructor(menu: Menu) {
super(menu, menu.getContentElement());
}
onSlide(slide, ev) {
this.menu.setProgess(slide.distance / slide.min);
}
getElementStartPos(slide, ev) {
return this.menu.isOpen ? slide.min : slide.max;
}
getSlideBoundaries() {
return {
min: -this.menu.width(),
max: 0
};
}
}