fix #557: guide permission-driven VPD flow
This commit is contained in:
@@ -115,6 +115,44 @@ function initPersistentMenus() {
|
||||
});
|
||||
}
|
||||
|
||||
function initQuestionPresets(root = document) {
|
||||
root.querySelectorAll('.question-preset[data-target]').forEach((button) => {
|
||||
if (button.dataset.presetReady === 'true') {
|
||||
return;
|
||||
}
|
||||
button.dataset.presetReady = 'true';
|
||||
button.addEventListener('click', () => {
|
||||
const target = document.getElementById(button.dataset.target || '');
|
||||
if (target) {
|
||||
target.value = button.dataset.question || '';
|
||||
target.focus();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function initCopyButtons(root = document) {
|
||||
root.querySelectorAll('[data-copy-source]').forEach((button) => {
|
||||
if (button.dataset.copyReady === 'true') {
|
||||
return;
|
||||
}
|
||||
button.dataset.copyReady = 'true';
|
||||
button.addEventListener('click', async () => {
|
||||
const source = document.getElementById(button.dataset.copySource || '');
|
||||
const value = source?.textContent?.trim();
|
||||
if (!value) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await navigator.clipboard.writeText(value);
|
||||
button.textContent = '복사했습니다';
|
||||
} catch (error) {
|
||||
button.textContent = '복사 실패 · 직접 선택하세요';
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function escapeHtml(value) {
|
||||
return value
|
||||
.replaceAll('&', '&')
|
||||
@@ -811,6 +849,8 @@ function initVpdTargetFilters() {
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
initPersistentMenus();
|
||||
initQuestionPresets();
|
||||
initCopyButtons();
|
||||
renderMarkdownViews();
|
||||
initVpdTargetFilters();
|
||||
const master = document.getElementById('userRoleMaster');
|
||||
|
||||
Reference in New Issue
Block a user