168 lines
6.5 KiB
JavaScript
168 lines
6.5 KiB
JavaScript
// prompts-module.js
|
|
(function() {
|
|
// DOM-Elemente
|
|
let addPromptBtn, promptsList;
|
|
|
|
// Initialisierungsfunktion für das Prompts-Modul
|
|
function initPromptsModule(globalState) {
|
|
// DOM-Elemente referenzieren
|
|
addPromptBtn = document.getElementById('add-prompt-btn');
|
|
promptsList = document.getElementById('prompts-list');
|
|
|
|
// Event-Listener hinzufügen
|
|
setupEventListeners(globalState);
|
|
|
|
// Initialdaten rendern
|
|
renderMyPrompts(globalState);
|
|
}
|
|
|
|
// Event-Listener einrichten
|
|
function setupEventListeners(globalState) {
|
|
// Neuen Prompt hinzufügen
|
|
addPromptBtn.addEventListener('click', () => {
|
|
const newPrompt = prompt('Geben Sie den neuen Prompt ein:');
|
|
if (newPrompt && newPrompt.trim()) {
|
|
const promptData = {
|
|
id: `prompt_${Date.now()}`,
|
|
content: newPrompt.trim(),
|
|
created_at: new Date().toISOString()
|
|
};
|
|
|
|
// Prompt zur globalen Liste hinzufügen
|
|
globalState.availablePrompts.push(promptData);
|
|
|
|
// UI aktualisieren
|
|
renderMyPrompts(globalState);
|
|
|
|
// Optional: Prompt speichern
|
|
savePrompt(promptData, globalState);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Meine Prompts rendern
|
|
function renderMyPrompts(globalState) {
|
|
if (!promptsList) return;
|
|
|
|
promptsList.innerHTML = '';
|
|
|
|
if (globalState.availablePrompts.length === 0) {
|
|
promptsList.innerHTML = '<div class="empty-state">Keine Prompts vorhanden.</div>';
|
|
return;
|
|
}
|
|
|
|
globalState.availablePrompts.forEach(prompt => {
|
|
const promptItem = document.createElement('div');
|
|
promptItem.className = 'prompt-item';
|
|
promptItem.innerHTML = `
|
|
<div class="prompt-content">${prompt.content}</div>
|
|
<div class="prompt-meta">Erstellt am: ${new Date(prompt.created_at).toLocaleString()}</div>
|
|
<div class="prompt-actions">
|
|
<button class="use-prompt-btn" data-id="${prompt.id}">
|
|
<i class="fas fa-play"></i> Verwenden
|
|
</button>
|
|
<button class="delete-prompt-btn" data-id="${prompt.id}">
|
|
<i class="fas fa-trash"></i>
|
|
</button>
|
|
</div>
|
|
`;
|
|
promptsList.appendChild(promptItem);
|
|
});
|
|
|
|
// Event-Listener für Prompt-Aktionen einrichten
|
|
setupPromptActionListeners(globalState);
|
|
}
|
|
|
|
// Event-Listener für Prompt-Aktionen
|
|
function setupPromptActionListeners(globalState) {
|
|
// "Verwenden"-Button
|
|
document.querySelectorAll('.use-prompt-btn').forEach(btn => {
|
|
btn.addEventListener('click', () => {
|
|
const promptId = btn.getAttribute('data-id');
|
|
const selectedPrompt = globalState.availablePrompts.find(p => p.id === promptId);
|
|
|
|
if (selectedPrompt) {
|
|
// Workflow-Modul aktivieren und Prompt übernehmen
|
|
document.querySelector('a[href="#workflow"]').click();
|
|
|
|
// Prompt in Workflow-Eingabefeld setzen
|
|
const promptInput = document.getElementById('prompt-input');
|
|
const promptSelect = document.getElementById('prompt-select');
|
|
|
|
if (promptInput) {
|
|
promptInput.value = selectedPrompt.content;
|
|
}
|
|
|
|
if (promptSelect) {
|
|
// Wenn der Prompt bereits existiert, ihn in der Dropdown auswählen
|
|
const existingOption = Array.from(promptSelect.options).find(
|
|
option => option.textContent.includes(selectedPrompt.content.substring(0, 50))
|
|
);
|
|
|
|
if (existingOption) {
|
|
promptSelect.value = existingOption.value;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
// "Löschen"-Button
|
|
document.querySelectorAll('.delete-prompt-btn').forEach(btn => {
|
|
btn.addEventListener('click', async () => {
|
|
const promptId = btn.getAttribute('data-id');
|
|
|
|
if (confirm('Möchten Sie diesen Prompt wirklich löschen?')) {
|
|
try {
|
|
// Aus dem globalen State entfernen
|
|
globalState.availablePrompts = globalState.availablePrompts.filter(p => p.id !== promptId);
|
|
|
|
// UI aktualisieren
|
|
renderMyPrompts(globalState);
|
|
|
|
// Optional: Prompt vom Server löschen
|
|
await deletePrompt(promptId);
|
|
} catch (error) {
|
|
console.error("Fehler beim Löschen des Prompts:", error);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
// Prompt speichern
|
|
async function savePrompt(promptData, globalState) {
|
|
try {
|
|
// Prompt auf dem Server speichern
|
|
const response = await window.globalUtils.postData('/api/prompts/save', promptData);
|
|
|
|
// Rückmeldung vom Server verarbeiten
|
|
if (response && response.id) {
|
|
// Wenn der Server eine ID zurückgibt, diese aktualisieren
|
|
const index = globalState.availablePrompts.findIndex(p => p.id === promptData.id);
|
|
if (index !== -1) {
|
|
globalState.availablePrompts[index].id = response.id;
|
|
}
|
|
|
|
// UI aktualisieren
|
|
renderMyPrompts(globalState);
|
|
}
|
|
} catch (error) {
|
|
console.error("Fehler beim Speichern des Prompts:", error);
|
|
}
|
|
}
|
|
|
|
// Prompt löschen
|
|
async function deletePrompt(promptId) {
|
|
try {
|
|
// Prompt vom Server löschen
|
|
await window.globalUtils.postData('/api/prompts/delete', { id: promptId });
|
|
} catch (error) {
|
|
console.error("Fehler beim Löschen des Prompts:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// Modul-Initialisierung exportieren
|
|
window.initPromptsModule = initPromptsModule;
|
|
})();
|