54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
import Service from '@ember/service';
|
|
import { getOwner } from '@ember/application';
|
|
import { bind } from '@ember/runloop';
|
|
import { Promise, resolve } from 'rsvp';
|
|
import config from '../config/environment';
|
|
|
|
export default class ConfirmService extends Service {
|
|
|
|
// =attributes
|
|
|
|
/**
|
|
* When the confirm service is disabled, it always returns resolving promises.
|
|
* @type {boolean}
|
|
*/
|
|
enabled = config.enableConfirmService;
|
|
|
|
/**
|
|
* The window's confirm function, bound to the window scope.
|
|
* @type {Function}
|
|
*/
|
|
get confirmFn() {
|
|
// The Ember way of accessing globals...
|
|
const document =
|
|
getOwner(this).lookup('service:-document').documentElement;
|
|
// defaultView === window, but without using globals directly
|
|
const windowRef = document.parentNode.defaultView;
|
|
const { confirm } = windowRef;
|
|
return bind(windowRef, confirm);
|
|
}
|
|
|
|
// =methods
|
|
|
|
/**
|
|
* When the service is enabled, returns a promise that resolves if the user
|
|
* accepts the confirmation, otherwise rejects. If the service is disabled,
|
|
* this method always returns a resolving promise.
|
|
* @param {string} text
|
|
* @return {Promise}
|
|
*/
|
|
confirm(text) {
|
|
if (this.enabled) {
|
|
return new Promise((resolve, reject) => {
|
|
if (this.confirmFn(text)) {
|
|
return resolve();
|
|
} else {
|
|
return reject();
|
|
}
|
|
});
|
|
} else {
|
|
return resolve();
|
|
}
|
|
}
|
|
}
|