pediatric-ai-scribe-v3/public/js/transcriptionSettings.js
2026-05-08 07:54:08 +02:00

96 lines
3.6 KiB
JavaScript

// ============================================================
// TRANSCRIPTION SETTINGS — Web Speech API
// ============================================================
var _inited = false;
document.addEventListener('tabChanged', function(e) {
if (e.detail.tab !== 'settings' || _inited) return;
_inited = true;
initTranscriptionSettings();
});
// Also init on direct page load
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
setTimeout(function() {
if (!_inited && document.getElementById('web-speech-enabled')) {
_inited = true;
initTranscriptionSettings();
}
}, 500);
});
} else {
setTimeout(function() {
if (!_inited && document.getElementById('web-speech-enabled')) {
_inited = true;
initTranscriptionSettings();
}
}, 500);
}
function initTranscriptionSettings() {
console.log('[TranscriptionSettings] Initializing...');
// ── Web Speech Recognition ───────────────────────────────
var speechCheckbox = document.getElementById('web-speech-enabled');
var speechStatus = document.getElementById('web-speech-status');
var speechBrowserInfo = document.getElementById('web-speech-browser-info');
if (speechCheckbox && window.WebSpeechRecognition) {
speechCheckbox.checked = WebSpeechRecognition.isEnabled();
speechStatus.textContent = WebSpeechRecognition.isEnabled() ? 'On — real-time streaming' : 'Off';
// Show privacy info
if (speechBrowserInfo) {
var privacyInfo = WebSpeechRecognition.getPrivacyInfo();
speechBrowserInfo.textContent = '';
appendPrivacyLine(speechBrowserInfo, 'Provider: ', privacyInfo.provider);
appendPrivacyLine(speechBrowserInfo, 'Privacy: ', privacyInfo.privacy);
appendPrivacyLine(speechBrowserInfo, 'Warning: ', privacyInfo.warning, true);
}
speechCheckbox.addEventListener('change', function() {
if (speechCheckbox.checked) {
// Show confirmation for privacy warning
showConfirm(
'WARNING: Real-time streaming uses your browser\'s speech recognition, ' +
'which may send audio to cloud servers (e.g., Google). ' +
'This is NOT HIPAA-compliant. ' +
'Only enable if you understand and accept this privacy trade-off.',
function() {
WebSpeechRecognition.setEnabled(true);
speechStatus.textContent = 'On — real-time streaming';
},
{ danger: true, confirmText: 'Enable' }
);
// Revert checkbox until confirmed
speechCheckbox.checked = false;
return;
}
WebSpeechRecognition.setEnabled(false);
speechStatus.textContent = 'Off';
});
// If not supported, disable and show message
if (!WebSpeechRecognition.isSupported()) {
speechCheckbox.disabled = true;
speechStatus.textContent = 'Not supported in this browser';
if (speechBrowserInfo) {
speechBrowserInfo.textContent = 'Not supported - Web Speech API not available in this browser.';
}
}
}
console.log('✅ Transcription settings initialized');
}
function appendPrivacyLine(container, label, value, warning) {
var strong = document.createElement('strong');
strong.textContent = label;
if (warning) strong.style.color = 'var(--orange)';
container.appendChild(strong);
container.appendChild(document.createTextNode(value));
container.appendChild(document.createElement('br'));
}