drop zone, and remove beta tag from mraid checker

This commit is contained in:
2026-05-29 13:20:33 +08:00
parent a1d3fde774
commit 5625d94106
21 changed files with 632 additions and 48 deletions

View File

@@ -26,10 +26,13 @@ func PlecPage(w http.ResponseWriter, r *http.Request) {
<div class="panel-header"><h3 class="panel-title">Inputs</h3></div>
<div class="panel-body">
<div class="control-group">
<div class="file-row">
<button id="pickFolder" class="secondary">Select Folder</button>
<button id="pickFiles" class="secondary">Select File(s)</button>
<button id="clear" class="secondary">Clear</button>
<div id="dropZone" class="drop-zone">
<div class="file-row">
<button id="pickFolder" class="secondary">Select Folder</button>
<button id="pickFiles" class="secondary">Select File(s)</button>
<button id="clear" class="secondary">Clear</button>
</div>
<div class="drop-zone-text">or drop HTML files or folders here</div>
</div>
<div id="emptySelection" class="file-name" style="margin-top:8px;">(no files selected)</div>
<div id="rowsPanel" class="results-panel is-hidden" style="margin-top:8px;">
@@ -138,6 +141,10 @@ function setPreview(url) {
openResultBtn.disabled = !previewUrl;
copyResultBtn.disabled = !previewUrl;
}
setupDropZone('dropZone', statusEl, (j) => {
addFiles(j.files || []);
if (j.skipped) statusEl.textContent = 'Skipped ' + j.skipped + ' non-HTML or unavailable item(s).';
});
document.getElementById('pickFolder').addEventListener('click', async () => {
const res = await fetch('/api/plec/pickFolder', { method: 'POST' });
@@ -154,6 +161,7 @@ document.getElementById('clear').addEventListener('click', () => {
page = 0;
setPreview('');
statusEl.textContent = '';
statusEl.classList.remove('is-busy');
renderRows();
});
openResultBtn.addEventListener('click', () => {
@@ -167,12 +175,14 @@ document.getElementById('upload').addEventListener('click', async () => {
rows.forEach(row => row.error = '');
renderRows();
statusEl.textContent = '';
statusEl.classList.remove('is-busy');
setPreview('');
if (rows.length === 0) {
statusEl.innerHTML = '<span class="err">Select at least one file.</span>';
return;
}
statusEl.textContent = 'Uploading...';
statusEl.classList.add('is-busy');
const res = await fetch('/api/plec/upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -180,6 +190,7 @@ document.getElementById('upload').addEventListener('click', async () => {
});
const j = await res.json();
if (j.rowErrors) {
statusEl.classList.remove('is-busy');
for (const re of j.rowErrors) {
const row = rows.find(r => r.id === re.id);
if (row) row.error = re.message;
@@ -189,9 +200,11 @@ document.getElementById('upload').addEventListener('click', async () => {
return;
}
if (j.error) {
statusEl.classList.remove('is-busy');
statusEl.innerHTML = '<span class="err">' + j.error + '</span>';
return;
}
statusEl.classList.remove('is-busy');
statusEl.innerHTML = '<span class="ok">Upload complete.</span>';
setPreview(j.preview);
});