UNPKG

@ayonli/jsext

Version:

A JavaScript extension package for building strong and modern applications.

79 lines (75 loc) 3.08 kB
'use strict'; 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, "&nbsp;").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