@ayonli/jsext
Version:
A JavaScript extension package for building strong and modern applications.
79 lines (75 loc) • 3.08 kB
JavaScript
;
var dialog_browser_CancelButton = require('./CancelButton.js');
var dialog_browser_Dialog = require('./Dialog.js');
var dialog_browser_Footer = require('./Footer.js');
var dialog_browser_Input = require('./Input.js');
var dialog_browser_OkButton = require('./OkButton.js');
var dialog_browser_Progress = require('./Progress.js');
var dialog_browser_Text = require('./Text.js');
async function alertInBrowser(message) {
await new Promise(resolve => {
document.body.appendChild(dialog_browser_Dialog.default({
onCancel: () => resolve(),
onOk: () => resolve(),
}, dialog_browser_Text.default(message), dialog_browser_Footer.default(dialog_browser_OkButton.default())));
});
}
async function confirmInBrowser(message) {
return new Promise(resolve => {
document.body.appendChild(dialog_browser_Dialog.default({
onCancel: () => resolve(false),
onOk: () => resolve(true),
}, dialog_browser_Text.default(message), dialog_browser_Footer.default(dialog_browser_CancelButton.default(), dialog_browser_OkButton.default())));
});
}
async function promptInBrowser(message, options) {
const { type, defaultValue } = options;
return new Promise(resolve => {
document.body.appendChild(dialog_browser_Dialog.default({
onCancel: () => resolve(null),
onOk: (dialog) => {
const input = dialog.querySelector("input");
resolve(input.value);
},
}, dialog_browser_Text.default(message), dialog_browser_Input.default({ type, value: defaultValue }), dialog_browser_Footer.default(dialog_browser_CancelButton.default(), dialog_browser_OkButton.default())));
});
}
async function progressInBrowser(message, fn, options) {
const { signal, abort, listenForAbort } = options;
const text = dialog_browser_Text.default(message);
const { element: progressBar, setValue } = dialog_browser_Progress.default();
const dialog = dialog_browser_Dialog.default({ onCancel: abort }, text);
const set = (state) => {
if (signal.aborted) {
return;
}
if (state.message) {
text.innerHTML = state.message.replace(/ /g, " ").replace(/\n/g, "<br />");
}
if (state.percent !== undefined) {
setValue(state.percent);
}
};
if (abort) {
dialog.appendChild(dialog_browser_Footer.default(progressBar, dialog_browser_CancelButton.default()));
}
else {
dialog.appendChild(progressBar);
}
document.body.appendChild(dialog);
let job = fn(set, signal);
if (listenForAbort) {
job = Promise.race([job, listenForAbort()]);
}
try {
return await job;
}
finally {
signal.aborted || dialog_browser_Dialog.closeDialog(dialog, "OK");
}
}
exports.alertInBrowser = alertInBrowser;
exports.confirmInBrowser = confirmInBrowser;
exports.progressInBrowser = progressInBrowser;
exports.promptInBrowser = promptInBrowser;
//# sourceMappingURL=index.js.map