ng2-bs3-modal
Version:
Angular Boostrap 3 Modal Component
88 lines (87 loc) • 8.96 kB
JavaScript
/**
* @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