Files
drawNET/static/js/modules/graph/io/index.js
T

117 lines
4.3 KiB
JavaScript

import { state } from '../../state.js';
import { getProjectData, restoreProjectData } from './json_handler.js';
import { exportToPPTX } from './pptx_exporter.js';
import { logger } from '../../utils/logger.js';
/**
* initGraphIO - 그래프 관련 I/O 이벤트 리스너 초기화
*/
export function initGraphIO() {
// Export JSON (.dnet)
const exportBtn = document.getElementById('export-json');
if (exportBtn) {
exportBtn.addEventListener('click', () => {
const projectData = getProjectData();
if (!projectData) return;
const dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(projectData, null, 2));
const safeName = (state.projectName || "project").replace(/[^a-z0-9]/gi, '_').toLowerCase();
const dlAnchorElem = document.createElement('a');
dlAnchorElem.setAttribute("href", dataStr);
dlAnchorElem.setAttribute("download", `${safeName}_${Date.now()}.dnet`);
dlAnchorElem.click();
logger.high("Project exported (.dnet v3.0).");
});
}
// Export PPTX
const exportPptxBtn = document.getElementById('export-pptx');
if (exportPptxBtn) {
exportPptxBtn.addEventListener('click', () => {
if (state.license.level === 'Trial') return;
exportToPPTX();
});
}
// Export Excel
const exportExcelBtn = document.getElementById('export-excel');
if (exportExcelBtn) {
exportExcelBtn.addEventListener('click', () => {
if (state.license.level === 'Trial') return;
import('./excel_exporter.js').then(m => m.exportToExcel());
});
}
// Export PNG (Allowed for Trial)
const exportPngBtn = document.getElementById('export-png');
if (exportPngBtn) {
import('./image_exporter.js').then(m => {
exportPngBtn.addEventListener('click', () => m.exportToPNG());
});
}
// Export SVG
const exportSvgBtn = document.getElementById('export-svg');
if (exportSvgBtn) {
import('./image_exporter.js').then(m => {
exportSvgBtn.addEventListener('click', () => {
if (state.license.level === 'Trial') return;
m.exportToSVG();
});
});
}
// Export PDF (Allowed for Trial)
const exportPdfBtn = document.getElementById('export-pdf');
if (exportPdfBtn) {
import('./image_exporter.js').then(m => {
exportPdfBtn.addEventListener('click', () => m.exportToPDF());
});
}
// Import
const importInput = document.getElementById('import-json-input');
if (importInput) {
importInput.setAttribute('accept', '.dnet,.json');
}
const importBtn = document.getElementById('import-json');
if (importBtn && importInput) {
importBtn.addEventListener('click', () => importInput.click());
importInput.addEventListener('change', (e) => {
const file = e.target.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = async (event) => {
try {
const data = JSON.parse(event.target.result);
if (!state.graph) return;
const isDrawNET = data.header?.app === "drawNET Premium";
if (!isDrawNET) {
alert("지원하지 않는 파일 형식입니다.");
return;
}
if (data.graphJson) {
const ok = restoreProjectData(data);
if (ok) {
logger.high("Import complete (v3.0 JSON).");
}
} else {
alert("이 파일은 구버전(v2.x) 형식입니다. 현재 버전에서는 지원되지 않습니다.\n새로 작성 후 저장해 주세요.");
}
} catch (err) {
logger.critical("Failed to parse project file.", err);
alert("프로젝트 파일을 읽을 수 없습니다.");
}
};
reader.readAsText(file);
e.target.value = '';
});
}
}
// Re-export for compatibility
export { getProjectData, restoreProjectData, exportToPPTX };