Harden admin modal button handling
Some checks failed
Build / release (macos-latest) (push) Has been cancelled
Build / release (ubuntu-latest) (push) Has been cancelled
Build / release (windows-latest) (push) Has been cancelled
Windows Smoke Test / windows-smoke (push) Has been cancelled

This commit is contained in:
2026-05-05 23:04:42 +09:00
parent 9391a7639b
commit 7c7357e44e
2 changed files with 33 additions and 34 deletions

View File

@@ -396,12 +396,14 @@ async function uploadIntoField(targetField, accept){
function openDistributionEditorModal(){ function openDistributionEditorModal(){
distributionEditorModal.hidden = false distributionEditorModal.hidden = false
distributionEditorModal.style.display = 'flex'
document.body.style.overflow = 'hidden' document.body.style.overflow = 'hidden'
clearDistributionEditorStatus() clearDistributionEditorStatus()
} }
function closeDistributionEditorModal(){ function closeDistributionEditorModal(){
distributionEditorModal.hidden = true distributionEditorModal.hidden = true
distributionEditorModal.style.display = 'none'
document.body.style.overflow = '' document.body.style.overflow = ''
clearDistributionEditorStatus() clearDistributionEditorStatus()
} }
@@ -513,35 +515,6 @@ async function saveDistributionFile(){
} }
function bindDistributionEditor(){ function bindDistributionEditor(){
editDistributionButton.addEventListener('click', async () => {
await openDistributionEditor('edit')
})
createDistributionButton.addEventListener('click', async () => {
await openDistributionEditor('create')
})
closeDistributionEditorButton.addEventListener('click', () => {
closeDistributionEditorModal()
})
loadDistributionTemplateButton.addEventListener('click', async () => {
try {
await loadDistributionTemplate()
updateDistributionEditorHint(getSelectedProfile(), '')
showStatus('distribution 템플릿을 다시 불러왔습니다.', 'success')
showDistributionEditorStatus('샘플을 다시 불러왔습니다.', 'success')
} catch (error) {
console.error(error)
showStatus(error instanceof Error ? error.message : 'distribution 템플릿을 불러오지 못했습니다.', 'error')
showDistributionEditorStatus(error instanceof Error ? error.message : 'distribution 템플릿을 불러오지 못했습니다.', 'error')
}
})
saveDistributionFileButton.addEventListener('click', async () => {
await saveDistributionFile()
})
distributionEditorModal.addEventListener('click', (event) => { distributionEditorModal.addEventListener('click', (event) => {
if(event.target === distributionEditorModal){ if(event.target === distributionEditorModal){
closeDistributionEditorModal() closeDistributionEditorModal()
@@ -555,6 +528,31 @@ function bindDistributionEditor(){
}) })
} }
window.__launcherAdminOpenDistributionEditor = async (mode) => {
await openDistributionEditor(mode)
}
window.__launcherAdminCloseDistributionEditor = () => {
closeDistributionEditorModal()
}
window.__launcherAdminLoadDistributionTemplate = async () => {
try {
await loadDistributionTemplate()
updateDistributionEditorHint(getSelectedProfile(), '')
showStatus('distribution 템플릿을 다시 불러왔습니다.', 'success')
showDistributionEditorStatus('샘플을 다시 불러왔습니다.', 'success')
} catch (error) {
console.error(error)
showStatus(error instanceof Error ? error.message : 'distribution 템플릿을 불러오지 못했습니다.', 'error')
showDistributionEditorStatus(error instanceof Error ? error.message : 'distribution 템플릿을 불러오지 못했습니다.', 'error')
}
}
window.__launcherAdminSaveDistributionFile = async () => {
await saveDistributionFile()
}
async function loadMeta(){ async function loadMeta(){
const response = await fetch('/api/meta') const response = await fetch('/api/meta')
const meta = await response.json() const meta = await response.json()
@@ -694,6 +692,7 @@ function bindTopLevelActions(){
} }
async function bootstrap(){ async function bootstrap(){
closeDistributionEditorModal()
bindProfileForm() bindProfileForm()
bindDistributionEditor() bindDistributionEditor()
bindTopLevelActions() bindTopLevelActions()

View File

@@ -116,8 +116,8 @@
<div class="uploadField"> <div class="uploadField">
<input id="field-distributionUrl" type="text" autocomplete="off"> <input id="field-distributionUrl" type="text" autocomplete="off">
<button type="button" class="secondaryAction uploadButton" data-upload-target="distributionUrl" data-upload-accept=".json,application/json">JSON 업로드</button> <button type="button" class="secondaryAction uploadButton" data-upload-target="distributionUrl" data-upload-accept=".json,application/json">JSON 업로드</button>
<button type="button" id="editDistributionButton" class="secondaryAction">JSON 편집</button> <button type="button" id="editDistributionButton" class="secondaryAction" onclick="window.__launcherAdminOpenDistributionEditor && window.__launcherAdminOpenDistributionEditor('edit')">JSON 편집</button>
<button type="button" id="createDistributionButton" class="secondaryAction">새로 만들기</button> <button type="button" id="createDistributionButton" class="secondaryAction" onclick="window.__launcherAdminOpenDistributionEditor && window.__launcherAdminOpenDistributionEditor('create')">새로 만들기</button>
</div> </div>
</label> </label>
<div class="fieldHelpText fieldBlockFull"> <div class="fieldHelpText fieldBlockFull">
@@ -197,13 +197,13 @@
<h3>distribution.json 편집</h3> <h3>distribution.json 편집</h3>
<p id="distributionEditorHint">프로필에 연결할 distribution.json 내용을 사이트 안에서 직접 관리합니다.</p> <p id="distributionEditorHint">프로필에 연결할 distribution.json 내용을 사이트 안에서 직접 관리합니다.</p>
</div> </div>
<button type="button" id="closeDistributionEditorButton" class="secondaryAction">닫기</button> <button type="button" id="closeDistributionEditorButton" class="secondaryAction" onclick="window.__launcherAdminCloseDistributionEditor && window.__launcherAdminCloseDistributionEditor()">닫기</button>
</div> </div>
<div id="distributionEditorStatus" class="statusBanner" hidden></div> <div id="distributionEditorStatus" class="statusBanner" hidden></div>
<textarea id="distributionEditorTextarea" class="distributionTextarea" spellcheck="false"></textarea> <textarea id="distributionEditorTextarea" class="distributionTextarea" spellcheck="false"></textarea>
<div class="modalActions"> <div class="modalActions">
<button type="button" id="loadDistributionTemplateButton" class="secondaryAction">샘플 불러오기</button> <button type="button" id="loadDistributionTemplateButton" class="secondaryAction" onclick="window.__launcherAdminLoadDistributionTemplate && window.__launcherAdminLoadDistributionTemplate()">샘플 불러오기</button>
<button type="button" id="saveDistributionFileButton" class="primaryAction">distribution 저장</button> <button type="button" id="saveDistributionFileButton" class="primaryAction" onclick="window.__launcherAdminSaveDistributionFile && window.__launcherAdminSaveDistributionFile()">distribution 저장</button>
</div> </div>
</div> </div>
</div> </div>