103 lines
3.9 KiB
JavaScript
103 lines
3.9 KiB
JavaScript
import { getJson } from './api.js';
|
|
|
|
export function createAiPanelController(deps) {
|
|
function open() {
|
|
var panel = document.getElementById('lh-ai-panel');
|
|
if (!panel) return;
|
|
panel.classList.remove('hidden');
|
|
populateModelSelect();
|
|
|
|
var editorType = deps.getEditorType() || 'article';
|
|
var ctype = document.getElementById('lh-ai-ctype');
|
|
if (ctype) ctype.value = editorType;
|
|
updateOptions(editorType);
|
|
|
|
getJson('/api/auth/me')
|
|
.then(function(d) {
|
|
var tab = document.getElementById('lh-ai-tab-webdav');
|
|
if (tab) tab.style.display = (d.user && d.user.nextcloud_url) ? '' : 'none';
|
|
if (d.user && d.user.webdav_learning_path) deps.setWebdavPath(d.user.webdav_learning_path || '/');
|
|
});
|
|
|
|
wireOptionControls();
|
|
panel.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
}
|
|
|
|
function close() {
|
|
var panel = document.getElementById('lh-ai-panel');
|
|
if (panel) panel.classList.add('hidden');
|
|
}
|
|
|
|
function populateModelSelect() {
|
|
var sel = document.getElementById('lh-ai-model');
|
|
if (!sel || sel.options.length > 1) return;
|
|
if (typeof window._buildModelOptions === 'function') window._buildModelOptions(sel);
|
|
}
|
|
|
|
function switchTab(tabName) {
|
|
document.querySelectorAll('.lh-ai-tab').forEach(function(t) {
|
|
t.classList.toggle('active', t.dataset.aitab === tabName);
|
|
});
|
|
document.querySelectorAll('.lh-ai-tabpanel').forEach(function(p) { p.classList.add('hidden'); });
|
|
var tp = document.getElementById('lh-ai-tp-' + tabName);
|
|
if (tp) tp.classList.remove('hidden');
|
|
if (tabName === 'webdav' && !document.querySelector('#lh-ai-webdav-list .lh-webdav-item')) {
|
|
deps.browseWebdav(deps.getWebdavPath());
|
|
}
|
|
}
|
|
|
|
function updateOptions(type) {
|
|
applyAiOptionState(type, {
|
|
wordsField: document.getElementById('lh-ai-words-field'),
|
|
slidesField: document.getElementById('lh-ai-slides-field'),
|
|
quizRow: document.getElementById('lh-ai-quiz-row'),
|
|
cardTitle: document.getElementById('lh-ai-quiz-card-title'),
|
|
toggleLabel: document.getElementById('lh-ai-q-toggle-label'),
|
|
toggleCb: document.getElementById('lh-ai-q-toggle'),
|
|
countWrap: document.getElementById('lh-ai-q-count-wrap')
|
|
});
|
|
}
|
|
|
|
function wireOptionControls() {
|
|
var ctypeEl = document.getElementById('lh-ai-ctype');
|
|
var toggleEl = document.getElementById('lh-ai-q-toggle');
|
|
if (ctypeEl && !ctypeEl._wired) {
|
|
ctypeEl.addEventListener('change', function() { updateOptions(ctypeEl.value); });
|
|
ctypeEl._wired = true;
|
|
}
|
|
if (toggleEl && !toggleEl._wired) {
|
|
toggleEl.addEventListener('change', function() {
|
|
updateOptions((document.getElementById('lh-ai-ctype') || {}).value);
|
|
});
|
|
toggleEl._wired = true;
|
|
}
|
|
}
|
|
|
|
return {
|
|
close: close,
|
|
open: open,
|
|
switchTab: switchTab,
|
|
updateOptions: updateOptions
|
|
};
|
|
}
|
|
|
|
export function applyAiOptionState(type, els) {
|
|
if (els.wordsField) els.wordsField.style.display = (type === 'quiz' || type === 'presentation') ? 'none' : 'flex';
|
|
if (els.slidesField) els.slidesField.style.display = type === 'presentation' ? 'flex' : 'none';
|
|
|
|
if (type === 'quiz') {
|
|
if (els.quizRow) els.quizRow.style.display = 'block';
|
|
if (els.cardTitle) els.cardTitle.textContent = 'Quiz Questions';
|
|
if (els.toggleLabel) els.toggleLabel.style.display = 'none';
|
|
if (els.toggleCb) { els.toggleCb.checked = true; els.toggleCb.disabled = true; }
|
|
if (els.countWrap) els.countWrap.style.display = 'flex';
|
|
return;
|
|
}
|
|
|
|
if (els.quizRow) els.quizRow.style.display = 'block';
|
|
if (els.cardTitle) els.cardTitle.textContent = 'Quiz Questions (optional)';
|
|
if (els.toggleLabel) els.toggleLabel.style.display = 'flex';
|
|
if (els.toggleCb) els.toggleCb.disabled = false;
|
|
var checked = els.toggleCb ? els.toggleCb.checked : false;
|
|
if (els.countWrap) els.countWrap.style.display = checked ? 'flex' : 'none';
|
|
}
|