export hpgl load from folder

This commit is contained in:
Lukas Cremer
2026-02-05 22:50:36 +01:00
parent 82e5ef4b73
commit 235365063f
6 changed files with 174 additions and 29 deletions

View File

@@ -23,7 +23,8 @@
scaleToBounds: document.getElementById('btnScaleToBounds'),
print: document.getElementById('btnPrint'),
checkPlotter: document.getElementById('btnCheckPlotter'),
generateHpgl: document.getElementById('btnGenerateHpgl')
generateHpgl: document.getElementById('btnGenerateHpgl'),
exportHpgl: document.getElementById('btnExportHpgl')
};
const tabFile = document.getElementById('tabFile');
const tabText = document.getElementById('tabText');
@@ -33,6 +34,7 @@
const fontSelect = document.getElementById('fontSelect');
const textSize = document.getElementById('textSize');
const textMessage = document.getElementById('textMessage');
const hpglFolderSelect = document.getElementById('hpglFolderSelect');
function setMessage(el, text, type) {
el.textContent = text || '';
@@ -93,7 +95,7 @@
});
}
var transformPrintButtons = ['flip', 'rotate90', 'rotate180', 'scaleUp', 'scaleDown', 'centralize', 'scaleToBounds', 'print'];
var transformPrintButtons = ['flip', 'rotate90', 'rotate180', 'scaleUp', 'scaleDown', 'centralize', 'scaleToBounds', 'print', 'exportHpgl'];
function setLoaded(loaded) {
if (loaded) {
@@ -264,9 +266,52 @@
tabText.classList.toggle('active', !isFile);
if (panelFile) panelFile.classList.toggle('hidden', !isFile);
if (panelText) panelText.classList.toggle('hidden', isFile);
if (isFile && hpglFolderSelect && hpglFolderSelect.options.length <= 1) loadHpglFiles();
if (!isFile && fontSelect && fontSelect.options.length <= 1) loadFonts();
}
function loadHpglFiles() {
if (!hpglFolderSelect) return;
fetch('/api/hpgl_files')
.then(function (r) { return r.json(); })
.then(function (d) {
var opts = hpglFolderSelect.querySelectorAll('option');
for (var i = opts.length - 1; i >= 1; i--) opts[i].remove();
(d.files || []).forEach(function (f) {
var o = document.createElement('option');
o.value = f;
o.textContent = f;
hpglFolderSelect.appendChild(o);
});
})
.catch(function () {});
}
if (hpglFolderSelect) {
hpglFolderSelect.addEventListener('change', function () {
var filename = (this.value || '').trim();
if (!filename) return;
setMessage(printMessage, '');
fetch('/api/load_hpgl', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ filename: filename })
})
.then(function (r) {
return r.json().then(function (d) {
if (!r.ok) throw new Error(d.error || 'Load failed');
return d;
});
})
.then(function () {
refreshStatus();
})
.catch(function (e) {
setMessage(printMessage, e.message || 'Load failed', 'error');
});
});
}
function loadFonts() {
if (!fontSelect) return;
fetch('/api/fonts')
@@ -287,6 +332,12 @@
if (tabFile) tabFile.addEventListener('click', function () { showTab('file'); });
if (tabText) tabText.addEventListener('click', function () { showTab('text'); });
if (buttons.exportHpgl) {
buttons.exportHpgl.addEventListener('click', function () {
window.location.href = '/api/download_hpgl';
});
}
if (buttons.generateHpgl && textInput && fontSelect) {
buttons.generateHpgl.addEventListener('click', function () {
var text = (textInput.value || '').trim();
@@ -324,6 +375,7 @@
}
refreshStatus();
loadHpglFiles();
updatePlotterInfo();
setInterval(updatePlotterInfo, 10000);
})();

View File

@@ -155,6 +155,23 @@ body {
background: var(--accent-hover);
}
.btn-export-hpgl {
width: 100%;
margin-top: 0.5rem;
padding: 0.5rem 0.75rem;
font-size: 0.875rem;
background: var(--surface);
border: 1px solid var(--border);
border-radius: 6px;
color: var(--text);
cursor: pointer;
}
.btn-export-hpgl:hover:not(:disabled) {
background: var(--border);
border-color: var(--accent);
}
.status {
display: flex;
gap: 1rem;