92 lines
3.6 KiB
JavaScript
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');
|
|
}
|
|
}
|
|
|