From 2dc3bc0aedf5993b4ff76709ec07fb298a2f6b45 Mon Sep 17 00:00:00 2001 From: claude-bot Date: Sun, 10 May 2026 21:10:01 +0900 Subject: [PATCH] Step 4: replace stacked sub-steps with single-slot wizard flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - renderStep4 now renders 4-1/4-2/4-3 into one #subHost slot, replacing instead of stacking when 다음 is clicked - 4-2 shows "다음" only after install completes so success message stays visible (previously auto-advanced and the message flashed) - Drop the duplicate section-level "5단계로" button; 4-3's confirm button advances to step 5 Co-Authored-By: Claude Opus 4.7 --- installer/renderer.js | 49 ++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/installer/renderer.js b/installer/renderer.js index 6057e70..2d4a642 100644 --- a/installer/renderer.js +++ b/installer/renderer.js @@ -402,29 +402,30 @@ function renderStep4() { section.className = 'page' section.innerHTML = '

4단계. 유저 클라이언트 설정

' + - '
' + - '' + - '' + - '
' + '
' + + '
' pageHost.appendChild(section) + var subHost = section.querySelector('#subHost') section.querySelector('#back').addEventListener('click', function () { if (state.mode === 'multi') renderStep3(); else renderStep2() }) - renderSubStep41(section.querySelector('#sub41'), pack, function () { - section.querySelector('#sub42').hidden = false - renderSubStep42(section.querySelector('#sub42'), function () { - section.querySelector('#sub43').hidden = false - renderSubStep43(section.querySelector('#sub43'), function () { - var nextBtn = section.querySelector('#next') - nextBtn.hidden = false - nextBtn.addEventListener('click', function () { - state.stepDone[4] = true - renderStep5() - }) - }) + function show41() { + subHost.innerHTML = '' + renderSubStep41(subHost, pack, show42) + } + function show42() { + subHost.innerHTML = '' + renderSubStep42(subHost, show43) + } + function show43() { + subHost.innerHTML = '' + renderSubStep43(subHost, function () { + state.stepDone[4] = true + renderStep5() }) - }) + } + show41() } function renderSubStep41(host, pack, done) { @@ -479,9 +480,13 @@ function renderSubStep42(host, done) { '

4-2. 모드/리소스팩 다운로드 및 launcher_profiles 갱신

' + '

%appdata%\\.mc_custom 에 모드와 리소스팩을 설치하고, launcher_profiles.json에 프로필을 등록합니다.

' + '' + - '
' - host.querySelector('#run').addEventListener('click', async function () { - var msg = host.querySelector('#msg') + '
' + + '
' + var runBtn = host.querySelector('#run') + var msg = host.querySelector('#msg') + var nextBtn = host.querySelector('#next') + runBtn.addEventListener('click', async function () { + runBtn.disabled = true msg.textContent = '설치 중...' msg.classList.remove('error', 'success') try { @@ -491,12 +496,14 @@ function renderSubStep42(host, done) { }) msg.textContent = '클라이언트 설치 완료.' msg.classList.add('success') - done() + nextBtn.hidden = false } catch (err) { msg.textContent = '설치 실패: ' + err.message msg.classList.add('error') + runBtn.disabled = false } }) + nextBtn.addEventListener('click', done) } function renderSubStep43(host, done) {