convert admin entrypoint to module

This commit is contained in:
Daniel 2026-05-08 06:19:51 +02:00
parent e575d34387
commit d91611947e
3 changed files with 29 additions and 28 deletions

View file

@ -510,7 +510,7 @@
<script type="module" src="/js/calculators.js"></script> <script type="module" src="/js/calculators.js"></script>
<script type="module" src="/js/bedside/index.js"></script> <script type="module" src="/js/bedside/index.js"></script>
<script defer src="/js/learningHub.js"></script> <script defer src="/js/learningHub.js"></script>
<script defer src="/js/admin.js?v=7.1.3"></script> <script type="module" src="/js/admin.js?v=7.1.3"></script>
<!-- ═══════════ IMAGE LIGHTBOX (global overlay — triggered by any <!-- ═══════════ IMAGE LIGHTBOX (global overlay — triggered by any
[data-img-src] button in any tab; lives here so it exists in the [data-img-src] button in any tab; lives here so it exists in the

View file

@ -29,9 +29,9 @@ function adminFlashButtonBackground(btn, color) {
setTimeout(function() { if (btn) btn.style.background = ''; }, 2000); setTimeout(function() { if (btn) btn.style.background = ''; }, 2000);
} }
(function() { {
var loaded = false; let loaded = false;
// Load admin panel when admin tab is activated // Load admin panel when admin tab is activated
document.addEventListener('tabChanged', function(e) { document.addEventListener('tabChanged', function(e) {
@ -280,16 +280,16 @@ function adminFlashButtonBackground(btn, color) {
.catch(function() { showToast('Request failed', 'error'); }); .catch(function() { showToast('Request failed', 'error'); });
} }
var esc = adminEscapeHtml; const esc = adminEscapeHtml;
})(); }
// ============================================================ // ============================================================
// ADMIN CMS — Announcements, Feature Flags, Email, AI Prompts // ADMIN CMS — Announcements, Feature Flags, Email, AI Prompts
// ============================================================ // ============================================================
(function() { {
var cmsLoaded = false; let cmsLoaded = false;
// Load CMS when admin tab is opened (via tabChanged event or click) // Load CMS when admin tab is opened (via tabChanged event or click)
document.addEventListener('tabChanged', function(e) { document.addEventListener('tabChanged', function(e) {
@ -681,14 +681,14 @@ function adminFlashButtonBackground(btn, color) {
}); });
} }
})(); }
// ============================================================ // ============================================================
// ADMIN CLINICAL ASSISTANT SETTINGS // ADMIN CLINICAL ASSISTANT SETTINGS
// ============================================================ // ============================================================
(function() { {
var loaded = false; let loaded = false;
var defaults = { const defaults = {
behavior: 'You are a concise pediatric clinical assistant. Use retrieved context only for factual claims. If the user input is a greeting or too vague, answer briefly and ask what they want to look up. Synthesize across sources and cite factual claims with the exact provided source numbers like [1]. Do not invent, renumber, merge, or move citations.' behavior: 'You are a concise pediatric clinical assistant. Use retrieved context only for factual claims. If the user input is a greeting or too vague, answer briefly and ask what they want to look up. Synthesize across sources and cite factual claims with the exact provided source numbers like [1]. Do not invent, renumber, merge, or move citations.'
}; };
@ -854,13 +854,13 @@ function adminFlashButtonBackground(btn, color) {
} }
function getValue(id) { var el = document.getElementById(id); return el ? el.value.trim() : ''; } function getValue(id) { var el = document.getElementById(id); return el ? el.value.trim() : ''; }
function setValue(id, value) { var el = document.getElementById(id); if (el) el.value = value; } function setValue(id, value) { var el = document.getElementById(id); if (el) el.value = value; }
var escAssistant = adminEscapeHtml; const escAssistant = adminEscapeHtml;
})(); }
// ============================================================ // ============================================================
// ADMIN MODEL MANAGEMENT — Discover, search, enable/disable, custom models // ADMIN MODEL MANAGEMENT — Discover, search, enable/disable, custom models
// ============================================================ // ============================================================
(function() { {
document.addEventListener('tabChanged', function(e) { document.addEventListener('tabChanged', function(e) {
if (e.detail && e.detail.tab === 'admin') { if (e.detail && e.detail.tab === 'admin') {
@ -887,7 +887,7 @@ function adminFlashButtonBackground(btn, color) {
} }
}); });
var esc = adminEscapeHtml; const esc = adminEscapeHtml;
function loadAdminModels() { function loadAdminModels() {
fetch('/api/admin/config/models', { headers: getAuthHeaders() }) fetch('/api/admin/config/models', { headers: getAuthHeaders() })
@ -1194,12 +1194,12 @@ function adminFlashButtonBackground(btn, color) {
}); });
} }
})(); }
// ============================================================ // ============================================================
// ADMIN TTS MANAGEMENT // ADMIN TTS MANAGEMENT
// ============================================================ // ============================================================
(function() { {
document.addEventListener('tabChanged', function(e) { document.addEventListener('tabChanged', function(e) {
if (e.detail && e.detail.tab === 'admin') loadTTSConfig(); if (e.detail && e.detail.tab === 'admin') loadTTSConfig();
}); });
@ -1215,7 +1215,7 @@ function adminFlashButtonBackground(btn, color) {
if (e.target.id === 'admin-tts-search' && e.key === 'Enter') { e.preventDefault(); discoverTTS(); } if (e.target.id === 'admin-tts-search' && e.key === 'Enter') { e.preventDefault(); discoverTTS(); }
}); });
var esc = adminEscapeHtml; const esc = adminEscapeHtml;
function loadTTSConfig() { function loadTTSConfig() {
fetch('/api/admin/config/tts', { headers: getAuthHeaders() }) fetch('/api/admin/config/tts', { headers: getAuthHeaders() })
@ -1376,15 +1376,15 @@ function adminFlashButtonBackground(btn, color) {
return new Blob([bytes], { type: type }); return new Blob([bytes], { type: type });
} }
})(); }
// ============================================================ // ============================================================
// ADMIN STT MANAGEMENT // ADMIN STT MANAGEMENT
// ============================================================ // ============================================================
(function() { {
var mediaRecorder = null; let mediaRecorder = null;
var audioChunks = []; let audioChunks = [];
var recording = false; let recording = false;
document.addEventListener('tabChanged', function(e) { document.addEventListener('tabChanged', function(e) {
if (e.detail && e.detail.tab === 'admin') loadSTTConfig(); if (e.detail && e.detail.tab === 'admin') loadSTTConfig();
@ -1401,7 +1401,7 @@ function adminFlashButtonBackground(btn, color) {
if (e.target.id === 'admin-stt-search' && e.key === 'Enter') { e.preventDefault(); discoverSTT(); } if (e.target.id === 'admin-stt-search' && e.key === 'Enter') { e.preventDefault(); discoverSTT(); }
}); });
var esc = adminEscapeHtml; const esc = adminEscapeHtml;
function loadSTTConfig() { function loadSTTConfig() {
fetch('/api/admin/config/stt', { headers: getAuthHeaders() }) fetch('/api/admin/config/stt', { headers: getAuthHeaders() })
@ -1564,12 +1564,12 @@ function adminFlashButtonBackground(btn, color) {
reader.readAsDataURL(blob); reader.readAsDataURL(blob);
} }
})(); }
// ============================================================ // ============================================================
// ADMIN EMBEDDING MODELS MANAGEMENT // ADMIN EMBEDDING MODELS MANAGEMENT
// ============================================================ // ============================================================
(function() { {
document.addEventListener('tabChanged', function(e) { document.addEventListener('tabChanged', function(e) {
if (e.detail && e.detail.tab === 'admin') loadEmbeddingConfig(); if (e.detail && e.detail.tab === 'admin') loadEmbeddingConfig();
}); });
@ -1585,7 +1585,7 @@ function adminFlashButtonBackground(btn, color) {
if (e.target.id === 'admin-embed-search' && e.key === 'Enter') { e.preventDefault(); discoverEmbeddings(); } if (e.target.id === 'admin-embed-search' && e.key === 'Enter') { e.preventDefault(); discoverEmbeddings(); }
}); });
var esc = adminEscapeHtml; const esc = adminEscapeHtml;
function loadEmbeddingConfig() { function loadEmbeddingConfig() {
fetch('/api/admin/config/embeddings', { headers: getAuthHeaders() }) fetch('/api/admin/config/embeddings', { headers: getAuthHeaders() })
@ -1719,4 +1719,4 @@ function adminFlashButtonBackground(btn, color) {
}); });
} }
})(); }

View file

@ -6,6 +6,7 @@ const path = require('node:path');
const moduleEntrypoints = [ const moduleEntrypoints = [
'public/js/calculators.js', 'public/js/calculators.js',
'public/js/clinicalAssistant.js', 'public/js/clinicalAssistant.js',
'public/js/admin.js',
'public/js/notes.js', 'public/js/notes.js',
'public/js/wellVisit.js' 'public/js/wellVisit.js'
]; ];