-
🌐 async-utils.jsWeb, 3.69 kB⬇
-
🌐 auth-storage.jsWeb, 735 B⬇
-
🌐 chat-helpers.jsWeb, 8.85 kB⬇
-
🌐 chat-renderer.jsWeb, 70.00 kB⬇
-
🌐 code-overlay.jsWeb, 21.77 kB⬇
-
🌐 confirm-dialog.jsWeb, 3.17 kB⬇
-
🌐 conversation-format-utils.jsWeb, 21.51 kB⬇
-
🌐 diagram-overlay.jsWeb, 7.93 kB⬇
-
🌐 dialog.jsWeb, 2.50 kB⬇
-
🌐 dom-utils.jsWeb, 8.33 kB⬇
-
🌐 drag-reorder.jsWeb, 4.82 kB⬇
-
🌐 elements.jsWeb, 11.06 kB⬇
-
🌐 export-utils.jsWeb, 1.53 kB⬇
-
🌐 format-utils.jsWeb, 29.60 kB⬇
-
🌐 history-navigation.jsWeb, 1.95 kB⬇
-
🌐 hljs-yaml.jsWeb, 5.07 kB⬇
-
🌐 inline-format.jsWeb, 7.35 kB⬇
-
🌐 instant-answer.jsWeb, 19.82 kB⬇
-
🌐 interactive-tools.jsWeb, 38.77 kB⬇
-
🌐 mermaid-fixes.jsWeb, 4.60 kB⬇
-
🌐 mermaid-render.jsWeb, 5.10 kB⬇
-
🌐 mermaid.jsWeb, 195 B⬇
-
🌐 migrations.jsWeb, 12.11 kB⬇
-
🌐 multi-choice-dialog.jsWeb, 1.33 kB⬇
-
🌐 notification-stack.jsWeb, 2.50 kB⬇
-
🌐 options-manager.jsWeb, 45.56 kB⬇
-
🌐 overlay-utils.jsWeb, 4.14 kB⬇
-
🌐 pdf-export.jsWeb, 23.59 kB⬇
-
🌐 pinch-zoom.jsWeb, 3.21 kB⬇
-
🌐 plugin-dialog.jsWeb, 2.17 kB⬇
-
🌐 read-aloud.jsWeb, 33.84 kB⬇
-
🌐 response-pipeline.jsWeb, 55.19 kB⬇
-
🌐 scratchpad-editor.jsWeb, 8.64 kB⬇
-
🌐 scratchpad-export.jsWeb, 3.56 kB⬇
-
🌐 scrollbars.jsWeb, 3.12 kB⬇
-
🌐 selection-manager.jsWeb, 3.76 kB⬇
-
🌐 settings-utils.jsWeb, 31.08 kB⬇
-
🌐 share.jsWeb, 10.75 kB⬇
-
🌐 side-drawer.jsWeb, 9.37 kB⬇
-
🌐 speech-text.jsWeb, 6.60 kB⬇
-
🌐 swipe-navigation.jsWeb, 6.16 kB⬇
-
🌐 table-overlay.jsWeb, 8.10 kB⬇
-
🌐 theme-utils.jsWeb, 8.34 kB⬇
-
🌐 thinking-panel-base.jsWeb, 14.88 kB⬇
-
🌐 ui-sets.jsWeb, 1.00 kB⬇
-
🌐 version-overlay.jsWeb, 4.63 kB⬇
/**
* Generic reusable modal dialog container for plugins and interactive tools.
* Callers provide a title and a content element, wire up the content themselves,
* and the container clears the content when the dialog closes.
*/
import { getEl } from './dom-utils.js';
import { openModal } from './overlay-utils.js';
/**
* Handle returned by openPluginDialog.
* @typedef {Object} PluginDialogHandle
* @property {function(): void} close - Closes the dialog programmatically.
* @property {HTMLElement|null} content - The mounted content element, or null if the dialog is unavailable.
* @property {HTMLElement|null} meta - Header slot element (e.g. for a countdown), or null if unavailable.
*/
/**
* Opens the generic plugin dialog with the given title and content.
* The content element is mounted into the dialog and cleared when it closes.
* The dialog closes via the x button, Escape, or clicking outside it.
* @param {string} title - Dialog title.
* @param {HTMLElement} content - Content element to mount; wiring is up to the caller.
* @param {function(void): void} [onClose] - Called when the dialog closes (by user or close()).
* @returns {PluginDialogHandle} Handle with close(), the mounted content element, and the meta slot.
*/
export function openPluginDialog(title, content, onClose = null) {
const overlay = getEl('id-plugin-dialog-overlay');
const titleEl = getEl('id-plugin-dialog-title');
const contentEl = getEl('id-div-plugin-dialog-content');
const metaEl = getEl('id-plugin-dialog-meta');
const closeBtn = getEl('btn-plugin-dialog-close');
if (!overlay || !titleEl || !contentEl || !metaEl || !closeBtn) {
console.warn('Plugin dialog markup missing from index.php');
return { close: () => {}, content: null, meta: null };
}
titleEl.textContent = title || '';
contentEl.innerHTML = '';
if (content) {
contentEl.appendChild(content);
}
const close = openModal(overlay, {
click_outside: true,
on_close: () => {
closeBtn.onclick = null;
contentEl.innerHTML = '';
metaEl.innerHTML = '';
if (typeof onClose === 'function') {
onClose();
}
}
});
closeBtn.onclick = close;
return {
close: close,
content: content,
meta: metaEl
};
}
plugin-dialog.js
×
Type: Web, text/x-java
2.17 Kilobytes
Last Modified 2026-11-04 09:48:28
⬇ Download File
Type: Web, text/x-java
2.17 Kilobytes
Last Modified 2026-11-04 09:48:28
⬇ Download File