feat(ui): prefix/suffix에서 \n \t \r 이스케이프 시퀀스 지원

unesc(): 입력값 \n→실제줄바꿈, \t→탭, \r→CR
reesc(): 상태값을 표시용 이스케이프 문자열로 역변환
renderSetting 입력 필드에 적용, placeholder에 사용법 표시.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
gm
2026-06-03 02:01:24 +09:00
parent 309c45886e
commit 8b0842eb80

View File

@@ -473,6 +473,9 @@ function removeAttr(nid, key){
function refresh(){ rebuildMaps(); renderPanel(); updatePreview(); save(); } function refresh(){ rebuildMaps(); renderPanel(); updatePreview(); save(); }
function focusNew(sel){ setTimeout(()=>{ const els=document.querySelectorAll(sel); if(els.length) els[els.length-1].focus(); },40); } function focusNew(sel){ setTimeout(()=>{ const els=document.querySelectorAll(sel); if(els.length) els[els.length-1].focus(); },40); }
function esc(s){ return String(s??'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;') } function esc(s){ return String(s??'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;') }
// 입력값의 \n \t → 실제 문자 / 실제 문자 → 표시용 이스케이프
function unesc(s){ return s.replace(/\\n/g,'\n').replace(/\\t/g,'\t').replace(/\\r/g,'\r') }
function reesc(s){ return s.replace(/\r/g,'\\r').replace(/\n/g,'\\n').replace(/\t/g,'\\t') }
// ════════════════════════════════════════════════════════ // ════════════════════════════════════════════════════════
// 렌더링 // 렌더링
@@ -616,8 +619,8 @@ function renderSetting(nid, key, val){
return ` return `
<div class="setting-row"> <div class="setting-row">
<span class="setting-lbl">${key}</span> <span class="setting-lbl">${key}</span>
<input class="setting-inp" placeholder="${key}" value="${esc(String(val??''))}" <input class="setting-inp" placeholder="\\n \\t 사용 가능" value="${esc(reesc(String(val??'')))}"
oninput="setSettingVal('${nid}','${key}',this.value)"> oninput="setSettingVal('${nid}','${key}',unesc(this.value))">
<button class="iBtn" onclick="removeSetting('${nid}','${key}')">✕</button> <button class="iBtn" onclick="removeSetting('${nid}','${key}')">✕</button>
</div>`; </div>`;
} }