function saveToHistory() { const historyItem = { query: document.getElementById('query').value, promptEn: document.getElementById('promptEn').value, promptMyLanguage: document.getElementById('promptMyLanguage').value, danbooruTags: document.getElementById('danbooruTags').value, timestamp: new Date().toISOString() }; let history = JSON.parse(localStorage.getItem('gemini_prompt_history') || '[]'); history.unshift(historyItem); history = history.slice(0, 10); // 最新の10件のみを保持 localStorage.setItem('gemini_prompt_history', JSON.stringify(history)); updateHistoryList(); } function updateHistoryList() { const historyList = document.getElementById('historyList'); const noHistoryMessage = document.getElementById('noHistoryMessage'); historyList.innerHTML = ''; const history = JSON.parse(localStorage.getItem('gemini_prompt_history') || '[]'); if (history.length === 0) { noHistoryMessage.classList.remove('d-none'); historyList.classList.add('d-none'); } else { noHistoryMessage.classList.add('d-none'); historyList.classList.remove('d-none'); history.forEach((item, index) => { const li = document.createElement('li'); li.className = 'list-group-item list-group-item-action d-flex justify-content-between align-items-start'; const contentDiv = document.createElement('div'); contentDiv.className = 'ms-2 me-auto'; contentDiv.style.width = 'calc(100% - 40px)'; contentDiv.style.cursor = 'pointer'; contentDiv.onclick = () => loadHistoryItem(index); const queryDiv = document.createElement('div'); queryDiv.className = 'text-truncate'; queryDiv.textContent = item.query; const dateDiv = document.createElement('div'); dateDiv.className = 'small text-muted'; dateDiv.textContent = new Date(item.timestamp).toLocaleString(); contentDiv.appendChild(queryDiv); contentDiv.appendChild(dateDiv); const deleteButton = document.createElement('button'); deleteButton.className = 'btn btn-danger btn-sm'; deleteButton.innerHTML = ''; deleteButton.onclick = (e) => { e.stopPropagation(); deleteHistoryItem(index); }; li.appendChild(contentDiv); li.appendChild(deleteButton); historyList.appendChild(li); }); } } function deleteHistoryItem(index) { if (confirm('この履歴項目を削除してもよろしいですか?')) { let history = JSON.parse(localStorage.getItem('gemini_prompt_history') || '[]'); history.splice(index, 1); localStorage.setItem('gemini_prompt_history', JSON.stringify(history)); updateHistoryList(); } } function loadHistoryItem(index) { const history = JSON.parse(localStorage.getItem('gemini_prompt_history') || '[]'); const item = history[index]; document.getElementById('query').value = item.query; document.getElementById('promptEn').value = item.promptEn; document.getElementById('promptMyLanguage').value = item.promptMyLanguage; document.getElementById('danbooruTags').value = item.danbooruTags; saveToUserStorage(true); } function clearHistory() { if (confirm('本当に履歴をすべて削除してもよろしいですか?')) { localStorage.removeItem('gemini_prompt_history'); updateHistoryList(); } } function createHistoryItem(item, index) { const li = document.createElement('li'); li.className = 'list-group-item d-flex justify-content-between align-items-center'; li.textContent = item.query; const buttonsContainer = document.createElement('div'); const useButton = document.createElement('button'); useButton.className = 'btn btn-sm btn-primary me-2'; useButton.innerHTML = ''; useButton.onclick = () => useHistoryItem(index); const deleteButton = document.createElement('button'); deleteButton.className = 'btn btn-sm btn-danger'; deleteButton.innerHTML = ''; deleteButton.onclick = () => { // 個別の履歴項目削除時にも確認ポップアップを表示 if (confirm('この履歴項目を削除してもよろしいですか?')) { deleteHistoryItem(index); } }; buttonsContainer.appendChild(useButton); buttonsContainer.appendChild(deleteButton); li.appendChild(buttonsContainer); return li; }