Files
cv/claude-arabic-voice/popup.js

84 lines
4.1 KiB
JavaScript

// popup.js — Settings UI for Claude Arabic Voice
document.addEventListener('DOMContentLoaded', () => {
// ─── Load Settings ───────────────────────────────────────────────────────
chrome.storage.sync.get(
['language', 'autoSend', 'useGemini', 'geminiApiKey', 'geminiModel'],
(data) => {
if (data.language) document.getElementById('language').value = data.language;
if (data.autoSend) document.getElementById('autoSend').checked = data.autoSend;
if (data.useGemini) {
document.getElementById('useGemini').checked = data.useGemini;
document.getElementById('geminiSettings').style.display = 'block';
}
if (data.geminiApiKey) document.getElementById('geminiApiKey').value = data.geminiApiKey;
}
);
// ─── Toggle Gemini Settings ──────────────────────────────────────────────
document.getElementById('useGemini').addEventListener('change', (e) => {
document.getElementById('geminiSettings').style.display = e.target.checked ? 'block' : 'none';
});
// ─── Save Settings ───────────────────────────────────────────────────────
document.getElementById('saveBtn').addEventListener('click', () => {
const settings = {
language: document.getElementById('language').value,
autoSend: document.getElementById('autoSend').checked,
useGemini: document.getElementById('useGemini').checked,
geminiApiKey: document.getElementById('geminiApiKey').value.trim(),
geminiModel: 'gemini-flash-lite-latest'
};
chrome.storage.sync.set(settings, () => {
const message = document.getElementById('saveMessage');
message.textContent = '✅ تم حفظ الإعدادات بنجاح!';
message.style.color = '#00c853';
setTimeout(() => {
message.textContent = '';
}, 2500);
// Notify content script of settings change
chrome.tabs.query({ url: 'https://claude.ai/*' }, (tabs) => {
tabs.forEach(tab => {
chrome.tabs.sendMessage(tab.id, {
type: 'SETTINGS_UPDATED',
payload: settings
}).catch(() => { /* tab may not have content script */ });
});
});
});
});
// ─── Update Status ──────────────────────────────────────────────────────
function updateStatus() {
const statusDot = document.getElementById('statusDot');
const statusText = document.getElementById('statusText');
chrome.tabs.query({ url: 'https://claude.ai/*' }, (tabs) => {
if (tabs.length === 0) {
statusDot.className = 'status-dot offline';
statusText.textContent = '🔴 Claude.ai غير مفتوح';
return;
}
// Check if content script is loaded
chrome.tabs.sendMessage(tabs[0].id, { type: 'GET_STATUS' }, (response) => {
if (chrome.runtime.lastError) {
statusDot.className = 'status-dot offline';
statusText.textContent = '🔴 الإضافة غير نشطة - أعد تحميل الصفحة';
} else if (response && response.isListening) {
statusDot.className = 'status-dot listening';
statusText.textContent = '🔴 جارٍ الاستماع...';
} else {
statusDot.className = 'status-dot online';
statusText.textContent = '✅ جاهز للاستخدام';
}
});
});
}
updateStatus();
setInterval(updateStatus, 3000);
});