gemini_prompter / control.js
SenY's picture
Upload 6 files
7eff197 verified
updateHistoryList();
loadFromUserStorage();
setInterval(() => {
saveToUserStorage();
}, 60000);
// 入力フォームの内容を保存する
document.querySelectorAll('input, textarea').forEach(input => {
input.addEventListener('input', saveToUserStorage);
});
// Ctrl+Enterでプロンプト生成を実行する
document.addEventListener('keydown', function (event) {
if (event.ctrlKey && event.key === 'Enter') {
event.preventDefault(); // デフォルトの動作を防ぐ
generatePrompt(); // プロンプト生成関数を呼び出す
}
});
// サイドバーの切り替え機能を修正
document.getElementById('sidebarToggle').addEventListener('click', function () {
const sidebarContainer = document.getElementById('sidebar-container');
const content = document.getElementById('content');
const isActive = sidebarContainer.classList.toggle('active');
if (isActive) {
// サイドバーを開く
sidebarContainer.style.width = '250px';
content.style.marginLeft = '250px';
} else {
// サイドバーを閉じる
sidebarContainer.style.width = '0';
content.style.marginLeft = '0';
}
});
// サイドバーのリサイズ機能を修正
function initSidebarResize() {
const sidebarContainer = document.getElementById('sidebar-container');
const content = document.getElementById('content');
const resizer = document.getElementById('sidebar-resizer');
let isResizing = false;
resizer.addEventListener('mousedown', (e) => {
isResizing = true;
document.addEventListener('mousemove', resize);
document.addEventListener('mouseup', stopResize);
});
function resize(e) {
if (!isResizing) return;
const newWidth = e.clientX;
const minWidth = 250;
const maxWidth = 500;
const sidebarWidth = Math.min(Math.max(minWidth, newWidth), maxWidth);
sidebarContainer.style.width = `${sidebarWidth}px`;
content.style.marginLeft = `${sidebarWidth}px`;
sidebarContainer.classList.add('active'); // サイドバーを開いた状態にする
}
function stopResize() {
isResizing = false;
document.removeEventListener('mousemove', resize);
document.removeEventListener('mouseup', stopResize);
}
}
// localStorageをクリアする機能を追加
function initClearStorageButton() {
const clearStorageButton = document.getElementById('clearStorageButton');
clearStorageButton.addEventListener('click', () => {
const userInput = prompt('全てのデータを削除します。よろしければ「YES」と入力してください。');
if (userInput === 'YES') {
localStorage.clear();
alert('全てのデータが削除されました。ページを再読み込みします。');
location.reload();
} else {
alert('削除がキャンセルされました。');
}
});
}
function resizeMain() {
if (window.innerWidth >= 768) {
document.querySelector("main").style.height = `calc(100vh - ${document.querySelector("main").offsetTop}px)`
}
}
// DOMContentLoadedイベントリスナーを更新
document.addEventListener('DOMContentLoaded', function () {
resizeMain();
initSidebarResize();
initClearStorageButton();
updateModelList(); // 新しい関数を呼び出し
});
window.addEventListener("resize", resizeMain);
async function updateModelList() {
try {
const models = await getModelList();
const endpointSelect = document.getElementById('endpointSelect');
const currentOptions = Array.from(endpointSelect.options).map(option => option.value);
models.forEach(model => {
const modelPath = `models/${model.name.split('/').pop()}`;
if (!currentOptions.includes(modelPath)) {
const option = document.createElement('option');
option.value = modelPath;
option.textContent = model.name.split('/').pop();
endpointSelect.appendChild(option);
}
});
} catch (error) {
console.error('モデルリストの更新中にエラーが発生しました:', error);
}
}