Files
AriWeb-Suite/modules/webmaker/public/modules-ui.js

23 lines
2.5 KiB
JavaScript

'use strict';
/* 빌더 관리 탭 "사이트 기능 모듈" 카드 (v1.0.3)
* 모듈 켜기/끄기와 사이트 관리자 페이지 열기(새 창). 세부 설정·데이터 관리는 사이트 관리자 페이지에서 한다.
* v1.4.14: 카드 안에 내장하던 iframe("여기서 관리")은 없앴다 — 관리 탭의 오른쪽 창(public/manage-ui.js)이 관리자 페이지를 항상 보여 준다. */
(() => {
let data = null;
const el = (tag, cls, text) => { const e = document.createElement(tag); if (cls) e.className = cls; if (text !== undefined) e.textContent = text; return e; };
async function load() {
if (!current) return; $('moduleCard').classList.remove('hidden');
try { data = await api(`/api/sites/${current.id}/modules`); } catch (e) { $('moduleList').textContent = '모듈 정보를 불러오지 못했습니다: ' + e.message; return; }
const list = $('moduleList'); list.innerHTML = '';
for (const c of data.catalog) {
const row = el('div', 'module-row'); const sw = el('button', 'switch' + (data.enabled[c.id] ? ' on' : '')); sw.type = 'button'; sw.title = data.enabled[c.id] ? '끄기' : '켜기';
sw.onclick = async () => { try { const r = await api(`/api/sites/${current.id}/modules/enabled`, { method: 'PUT', body: JSON.stringify({ module: c.id, on: !data.enabled[c.id] }) }); data.enabled = r.enabled; sw.classList.toggle('on', !!data.enabled[c.id]); if (data.enabled[c.id]) logLine({ level: 'warn', text: `${c.label} 모듈을 켰습니다. 수정 지시에 "${c.label}을(를) 추가해 주세요"라고 요청하면 페이지에 들어갑니다. 세부 설정은 사이트 관리자 페이지에서 합니다.` }); } catch (e) { alert(e.message); } };
const t = el('div'); t.appendChild(el('div', 'mt', T(c.label) + (data.counts && c.collections && Object.keys(c.collections).length ? ` · ${Object.keys(c.collections).map((k) => `${T(c.collections[k].label)} ${data.counts[k] || 0}`).join(', ')}` : ''))); t.appendChild(el('div', 'md', c.desc));
row.appendChild(sw); row.appendChild(t); const open = el('a', 'ghost small-btn', '관리'); open.href = `/site-admin/${current.id}/`; open.target = '_blank'; open.rel = 'noopener'; open.style.visibility = data.enabled[c.id] ? '' : 'hidden'; row.appendChild(open); list.appendChild(row);
}
$('btnSiteAdmin').href = `/site-admin/${current.id}/`;
}
$('btnModuleReload').onclick = load;
window.ModulesUI = { onSiteOpened: (site) => { if (site && (site.mode !== 'import' || site.source)) load(); } };
})();