/** * @ngdoc service * @name ActionMenu * @module ionic * @description * The ActionMenu is a modal menu with options to select based on an action. */ import {View, Injectable, NgFor, NgIf} from 'angular2/angular2'; import {IonicApp} from '../app/app'; import {Overlay} from '../overlay/overlay'; import {Animation} from '../../animations/animation'; import * as util from 'ionic/util'; @View({ template: `
`, directives: [NgFor, NgIf] }) class ActionMenuDirective { _cancel() { this.cancel && this.cancel(); return this.overlayRef.close(); } _destructive() { let shouldClose = this.destructiveButtonClicked(); if (shouldClose === true) { return this.overlayRef.close(); } } _buttonClicked(index) { let shouldClose = this.buttonClicked(index); if (shouldClose === true) { return this.overlayRef.close(); } } } @Injectable() export class ActionMenu extends Overlay { constructor(app: IonicApp) { super(app); } /** * Create and open a new Action Menu. This is the * public API, and most often you will only use ActionMenu.open() * * @return Promise that resolves when the action menu is open. */ open(opts={}) { let defaults = { enterAnimation: 'action-menu-slide-in', leaveAnimation: 'action-menu-slide-out' }; return this.create(OVERLAY_TYPE, ActionMenuDirective, util.extend(defaults, opts), opts); } get() { return Modal.getByType(OVERLAY_TYPE); } } const OVERLAY_TYPE = 'action-menu'; /** * Animations for action sheet */ class ActionMenuAnimation extends Animation { constructor(element) { super(element); this.easing('cubic-bezier(.36, .66, .04, 1)').duration(400); this.backdrop = new Animation(element.querySelector('.action-menu-backdrop')); this.wrapper = new Animation(element.querySelector('.action-menu-wrapper')); this.add(this.backdrop, this.wrapper); } } class ActionMenuSlideIn extends ActionMenuAnimation { constructor(element) { super(element); this.backdrop.fromTo('opacity', 0, 0.4); this.wrapper.fromTo('translateY', '100%', '0%'); } } Animation.register('action-menu-slide-in', ActionMenuSlideIn); class ActionMenuSlideOut extends ActionMenuAnimation { constructor(element) { super(element); this.backdrop.fromTo('opacity', 0.4, 0); this.wrapper.fromTo('translateY', '0%', '100%'); } } Animation.register('action-menu-slide-out', ActionMenuSlideOut);