UNPKG

ng2-bs3-modal

Version:

Angular Boostrap 3 Modal Component

88 lines (87 loc) 8.96 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { fromEvent } from 'rxjs'; import { filter, map, share, tap } from 'rxjs/operators'; import { BsModalHideType } from './models'; /** @type {?} */ const EVENT_SUFFIX = 'ng2-bs3-modal'; /** @type {?} */ const KEYUP_EVENT_NAME = `keyup.${EVENT_SUFFIX}`; /** @type {?} */ const CLICK_EVENT_NAME = `click.${EVENT_SUFFIX}`; /** @type {?} */ const SHOW_EVENT_NAME = `show.bs.modal.${EVENT_SUFFIX}`; export class BsModalService { constructor() { this.modals = []; this.$body = jQuery(document.body); this.onBackdropClose$ = fromEvent(this.$body, CLICK_EVENT_NAME).pipe(filter((e) => jQuery(e.target).is('.modal')), map(() => BsModalHideType.Backdrop), share()); this.onKeyboardClose$ = fromEvent(this.$body, KEYUP_EVENT_NAME).pipe(filter((e) => e.which === 27), map(() => BsModalHideType.Keyboard), share()); this.onModalStack$ = fromEvent(this.$body, SHOW_EVENT_NAME).pipe(tap(() => { /** @type {?} */ const zIndex = 1040 + (10 * jQuery('.modal:visible').length); jQuery(this).css('z-index', zIndex); setTimeout(function () { jQuery('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack'); }, 0); }), share()); } /** * @param {?} modal * @return {?} */ add(modal) { this.modals.push(modal); } /** * @param {?} modal * @return {?} */ remove(modal) { /** @type {?} */ const index = this.modals.indexOf(modal); if (index > -1) { this.modals.splice(index, 1); } } /** * @return {?} */ focusNext() { /** @type {?} */ const visible = this.modals.filter(m => m.visible); if (visible.length) { this.$body.addClass('modal-open'); visible[visible.length - 1].focus(); } } /** * @return {?} */ dismissAll() { return Promise.all(this.modals.map((m) => { return m.dismiss(); })); } } BsModalService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ BsModalService.ctorParameters = () => []; if (false) { /** @type {?} */ BsModalService.prototype.modals; /** @type {?} */ BsModalService.prototype.$body; /** @type {?} */ BsModalService.prototype.onBackdropClose$; /** @type {?} */ BsModalService.prototype.onKeyboardClose$; /** @type {?} */ BsModalService.prototype.onModalStack$; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nMi1iczMtbW9kYWwvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRTNDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQzs7QUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLFlBQVksRUFBRSxDQUFDOztBQUNqRCxNQUFNLGdCQUFnQixHQUFHLFNBQVMsWUFBWSxFQUFFLENBQUM7O0FBQ2pELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixZQUFZLEVBQUUsQ0FBQztBQUd4RCxNQUFNO0lBU0Y7c0JBUHFDLEVBQUU7UUFRbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FDaEUsTUFBTSxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUN4RCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUNuQyxLQUFLLEVBQUUsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUNoRSxNQUFNLENBQUMsQ0FBQyxDQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUM1QyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUNuQyxLQUFLLEVBQUUsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQ25FLEdBQUcsQ0FBQyxHQUFHLEVBQUU7O1lBQ0wsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLFVBQVUsQ0FBQztnQkFDUCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3BHLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDVCxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1YsQ0FBQztLQUNMOzs7OztJQUVELEdBQUcsQ0FBQyxLQUF1QjtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMzQjs7Ozs7SUFFRCxNQUFNLENBQUMsS0FBdUI7O1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDaEM7S0FDSjs7OztJQUVELFNBQVM7O1FBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdkM7S0FDSjs7OztJQUVELFVBQVU7UUFDTixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdEIsQ0FBQyxDQUFDLENBQUM7S0FDUDs7O1lBNURKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzaGFyZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCc01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNNb2RhbEhpZGVUeXBlIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5jb25zdCBFVkVOVF9TVUZGSVggPSAnbmcyLWJzMy1tb2RhbCc7XG5jb25zdCBLRVlVUF9FVkVOVF9OQU1FID0gYGtleXVwLiR7RVZFTlRfU1VGRklYfWA7XG5jb25zdCBDTElDS19FVkVOVF9OQU1FID0gYGNsaWNrLiR7RVZFTlRfU1VGRklYfWA7XG5jb25zdCBTSE9XX0VWRU5UX05BTUUgPSBgc2hvdy5icy5tb2RhbC4ke0VWRU5UX1NVRkZJWH1gO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQnNNb2RhbFNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBtb2RhbHM6IEJzTW9kYWxDb21wb25lbnRbXSA9IFtdO1xuICAgIHByaXZhdGUgJGJvZHk6IEpRdWVyeTtcblxuICAgIG9uQmFja2Ryb3BDbG9zZSQ6IE9ic2VydmFibGU8QnNNb2RhbEhpZGVUeXBlPjtcbiAgICBvbktleWJvYXJkQ2xvc2UkOiBPYnNlcnZhYmxlPEJzTW9kYWxIaWRlVHlwZT47XG4gICAgb25Nb2RhbFN0YWNrJDogT2JzZXJ2YWJsZTxFdmVudD47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy4kYm9keSA9IGpRdWVyeShkb2N1bWVudC5ib2R5KTtcblxuICAgICAgICB0aGlzLm9uQmFja2Ryb3BDbG9zZSQgPSBmcm9tRXZlbnQodGhpcy4kYm9keSwgQ0xJQ0tfRVZFTlRfTkFNRSkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoZTogTW91c2VFdmVudCkgPT4galF1ZXJ5KGUudGFyZ2V0KS5pcygnLm1vZGFsJykpLFxuICAgICAgICAgICAgbWFwKCgpID0+IEJzTW9kYWxIaWRlVHlwZS5CYWNrZHJvcCksXG4gICAgICAgICAgICBzaGFyZSgpLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub25LZXlib2FyZENsb3NlJCA9IGZyb21FdmVudCh0aGlzLiRib2R5LCBLRVlVUF9FVkVOVF9OQU1FKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChlOiBLZXlib2FyZEV2ZW50KSA9PiBlLndoaWNoID09PSAyNyksXG4gICAgICAgICAgICBtYXAoKCkgPT4gQnNNb2RhbEhpZGVUeXBlLktleWJvYXJkKSxcbiAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm9uTW9kYWxTdGFjayQgPSBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuJGJvZHksIFNIT1dfRVZFTlRfTkFNRSkucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgekluZGV4ID0gMTA0MCArICgxMCAqIGpRdWVyeSgnLm1vZGFsOnZpc2libGUnKS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5jc3MoJ3otaW5kZXgnLCB6SW5kZXgpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLm1vZGFsLWJhY2tkcm9wJykubm90KCcubW9kYWwtc3RhY2snKS5jc3MoJ3otaW5kZXgnLCB6SW5kZXggLSAxKS5hZGRDbGFzcygnbW9kYWwtc3RhY2snKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZChtb2RhbDogQnNNb2RhbENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLm1vZGFscy5wdXNoKG1vZGFsKTtcbiAgICB9XG5cbiAgICByZW1vdmUobW9kYWw6IEJzTW9kYWxDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1c05leHQoKSB7XG4gICAgICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLm1vZGFscy5maWx0ZXIobSA9PiBtLnZpc2libGUpO1xuICAgICAgICBpZiAodmlzaWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuJGJvZHkuYWRkQ2xhc3MoJ21vZGFsLW9wZW4nKTtcbiAgICAgICAgICAgIHZpc2libGVbdmlzaWJsZS5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzbWlzc0FsbCgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMubW9kYWxzLm1hcCgobSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG0uZGlzbWlzcygpO1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuIl19