Files
_Geulbeot/03. Code/geulbeot_10th/static/js/ui.js

92 lines
3.6 KiB
JavaScript

// ===== 상태 표시 =====
function setStatus(msg, connected = false) {
document.getElementById('statusMessage').textContent = msg;
document.getElementById('statusDot').classList.toggle('connected', connected);
}
// ===== 입력 상태 업데이트 =====
function updateInputStatus() {
const hasFolder = folderPath.length > 0;
const hasLinks = referenceLinks.length > 0;
const hasHtml = inputContent.length > 0;
const pathEl = document.getElementById('folderPathDisplay');
if (hasFolder) {
pathEl.textContent = folderPath;
pathEl.classList.remove('empty');
} else {
pathEl.textContent = '폴더 경로가 설정되지 않음';
pathEl.classList.add('empty');
}
document.getElementById('linkCount').textContent = referenceLinks.length + '개';
const htmlStatus = document.getElementById('htmlInputStatus');
if (hasHtml) {
htmlStatus.textContent = '✓ 입력됨';
htmlStatus.classList.add('ok');
} else {
htmlStatus.textContent = '없음';
htmlStatus.classList.remove('ok');
}
const canGenerate = hasHtml || hasFolder || hasLinks;
document.getElementById('generateBtn').disabled = !canGenerate;
// 버튼 텍스트: 폴더/링크 있으면 목차 확인, 아니면 생성하기
const btnText = document.getElementById('generateBtnText');
if (btnText) {
if (hasFolder || (hasLinks && hasHtml)) {
btnText.textContent = '📋 목차 확인하기';
} else {
btnText.textContent = '🚀 생성하기';
}
}
if (canGenerate) {
updateStep(0, 'done');
} else {
updateStep(0, 'pending');
}
}
// ===== 진행 상태 =====
function updateStep(num, status) {
const item = document.querySelector(`.step-item[data-step="${num}"]`);
if (!item) return;
item.classList.remove('pending', 'running', 'done', 'error');
item.classList.add(status);
item.querySelector('.status').textContent =
status === 'pending' ? '○' :
status === 'running' ? '◐' :
status === 'done' ? '●' : '✕';
}
function resetSteps() {
for (let i = 0; i <= 9; i++) {
updateStep(i, 'pending');
}
}
// ===== 줌 =====
function setZoom(value) {
currentZoom = parseInt(value);
document.getElementById('a4Wrapper').style.transform = `scale(${currentZoom / 100})`;
}
// ===== 작성 방식 선택 =====
function selectWriteMode(mode) {
currentWriteMode = mode;
document.querySelectorAll('.write-mode-tab').forEach(tab => {
tab.classList.remove('selected');
tab.querySelector('input[type="radio"]').checked = false;
});
const selectedTab = document.querySelector(`.write-mode-tab input[value="${mode}"]`);
if (selectedTab) {
selectedTab.checked = true;
selectedTab.closest('.write-mode-tab').classList.add('selected');
}
}