Release v1.26.14: Studio-style side-by-side Magazine upload layout with Durchsuchen button
Some checks failed
Test and SonarQube / quality (push) Has been cancelled
Some checks failed
Test and SonarQube / quality (push) Has been cancelled
This commit is contained in:
parent
30e01a5cec
commit
c1a2d6dc74
@ -5,6 +5,15 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi
|
||||
|
||||
---
|
||||
|
||||
## [1.26.14] — 2026-09-10
|
||||
|
||||
### Added
|
||||
- **Studio-Style Side-by-Side Magazine Upload Layout.**
|
||||
- Re-designed the Magazine upload card to mirror Studio mode's side-by-side layout: left panel contains optional Title & Issue metadata inputs plus a prominent **Durchsuchen** button (`<span class="mdi mdi-folder-open-outline"></span> Durchsuchen`), and right panel contains the clean `.reader-dropzone`.
|
||||
- Removed the redundant `+ Add magazine` button for a clean, direct, one-action upload flow.
|
||||
|
||||
---
|
||||
|
||||
## [1.26.13] — 2026-09-10
|
||||
|
||||
### Fixed
|
||||
|
||||
@ -180,29 +180,17 @@
|
||||
color: var(--subtext);
|
||||
font-size: 12px;
|
||||
}
|
||||
#s-reader .reader-source-grid {
|
||||
#s-reader .reader-source-grid,
|
||||
#s-caststudio .reader-source-grid,
|
||||
#s-magazine .reader-source-grid {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1.4fr) minmax(260px, .8fr);
|
||||
gap: 12px;
|
||||
align-items: stretch;
|
||||
}
|
||||
#s-caststudio .reader-source-grid {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1.4fr) minmax(260px, .8fr);
|
||||
gap: 12px;
|
||||
align-items: stretch;
|
||||
}
|
||||
#s-reader .reader-paste-panel {
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
padding: 12px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 8px;
|
||||
background: var(--surface);
|
||||
}
|
||||
#s-caststudio .reader-paste-panel {
|
||||
#s-reader .reader-paste-panel,
|
||||
#s-caststudio .reader-paste-panel,
|
||||
#s-magazine .reader-paste-panel {
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@ -409,8 +397,9 @@
|
||||
}
|
||||
|
||||
@media (max-width: 860px) {
|
||||
#s-reader .reader-source-grid { grid-template-columns: 1fr; }
|
||||
#s-caststudio .reader-source-grid { grid-template-columns: 1fr; }
|
||||
#s-reader .reader-source-grid,
|
||||
#s-caststudio .reader-source-grid,
|
||||
#s-magazine .reader-source-grid { grid-template-columns: 1fr; }
|
||||
#s-reader .reader-tuning-row { grid-template-columns: 1fr; gap: 5px; }
|
||||
#s-caststudio .reader-tuning-row { grid-template-columns: 1fr; gap: 5px; }
|
||||
}
|
||||
|
||||
@ -205,7 +205,7 @@ function magShowDroppedFile(file) {
|
||||
} else {
|
||||
if (dropzone) dropzone.classList.remove('is-selected', 'is-uploading');
|
||||
if (noteEl) noteEl.textContent = MAG_DROPZONE_DEFAULT_NOTE;
|
||||
if (titleEl) titleEl.textContent = 'Drop a PDF or click to browse';
|
||||
if (titleEl) titleEl.textContent = 'Drop a PDF document';
|
||||
if (iconEl) iconEl.className = 'mdi mdi-cloud-upload-outline reader-dropzone-icon';
|
||||
}
|
||||
}
|
||||
@ -306,6 +306,7 @@ async function magCreate(droppedFile = null) {
|
||||
const issue = ($('mag-new-issue')?.value || '').trim();
|
||||
|
||||
const addBtn = $('mag-add-btn');
|
||||
const browseBtn = $('mag-browse-btn');
|
||||
const dropzone = $('mag-dropzone');
|
||||
const titleInp = $('mag-new-title');
|
||||
const issueInp = $('mag-new-issue');
|
||||
@ -325,6 +326,7 @@ async function magCreate(droppedFile = null) {
|
||||
}
|
||||
if (progress) progress.hidden = false;
|
||||
if (pickBtn) pickBtn.hidden = true;
|
||||
if (browseBtn) browseBtn.hidden = true;
|
||||
if (iconEl) iconEl.className = 'mdi mdi-loading mdi-spin reader-dropzone-icon';
|
||||
if (titleEl) titleEl.textContent = 'Uploading & Ingesting PDF...';
|
||||
if (noteEl) noteEl.textContent = `Processing "${file.name}" (${sizeMb} MB). Transferring source file and extracting layout...`;
|
||||
@ -341,6 +343,7 @@ async function magCreate(droppedFile = null) {
|
||||
}
|
||||
if (progress) progress.hidden = true;
|
||||
if (pickBtn) pickBtn.hidden = false;
|
||||
if (browseBtn) browseBtn.hidden = false;
|
||||
if (addBtn) {
|
||||
addBtn.disabled = false;
|
||||
addBtn.innerHTML = origBtnText;
|
||||
|
||||
@ -10,30 +10,39 @@
|
||||
<div id="mag-view-library">
|
||||
<div class="card mag-new">
|
||||
<h3>Add a magazine or paper</h3>
|
||||
<div class="mag-new-grid">
|
||||
<label for="mag-new-title">Title <span class="muted">(optional)</span>
|
||||
<input id="mag-new-title" type="text" placeholder="Auto-filled from PDF filename if blank" autocomplete="off">
|
||||
</label>
|
||||
<label for="mag-new-issue">Issue <span class="muted">(optional)</span>
|
||||
<input id="mag-new-issue" type="text" placeholder="September 2026" autocomplete="off">
|
||||
</label>
|
||||
</div>
|
||||
<div class="reader-dropzone" id="mag-dropzone" style="cursor: pointer;">
|
||||
<span class="mdi mdi-cloud-upload-outline reader-dropzone-icon" id="mag-dropzone-icon"></span>
|
||||
<strong id="mag-dropzone-title">Drop a PDF or click to browse</strong>
|
||||
<span class="note" id="mag-dropzone-note">Scanned issues work too — pages without selectable text are read with OCR.</span>
|
||||
<div class="mag-dropzone-progress" id="mag-dropzone-progress" hidden>
|
||||
<div class="mag-dropzone-progress-bar"></div>
|
||||
<div class="reader-source-grid">
|
||||
<div class="reader-paste-panel">
|
||||
<div class="reader-source-method">
|
||||
<span class="mdi mdi-file-document-edit-outline"></span>
|
||||
<div><strong>Import & Metadata</strong><span>Select a PDF file or configure optional title and issue details.</span></div>
|
||||
</div>
|
||||
<div class="mag-new-grid" style="margin-top: 4px; margin-bottom: 4px;">
|
||||
<label for="mag-new-title">Title <span class="muted">(optional)</span>
|
||||
<input id="mag-new-title" type="text" placeholder="Auto-filled from PDF filename if blank" autocomplete="off">
|
||||
</label>
|
||||
<label for="mag-new-issue">Issue <span class="muted">(optional)</span>
|
||||
<input id="mag-new-issue" type="text" placeholder="e.g. September 2026" autocomplete="off">
|
||||
</label>
|
||||
</div>
|
||||
<div class="reader-paste-actions" style="margin-top: auto; padding-top: 6px;">
|
||||
<label class="btn-primary btn-sm reader-file-pick" id="mag-browse-btn" title="Choose a PDF file from your computer">
|
||||
<span class="mdi mdi-folder-open-outline"></span> Durchsuchen
|
||||
<input type="file" id="mag-new-file" accept="application/pdf" style="display:none">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="reader-dropzone" id="mag-dropzone" style="cursor: pointer;">
|
||||
<span class="mdi mdi-cloud-upload-outline reader-dropzone-icon" id="mag-dropzone-icon"></span>
|
||||
<strong id="mag-dropzone-title">Drop a PDF document</strong>
|
||||
<span class="note" id="mag-dropzone-note">Scanned issues work too — pages without selectable text are read with OCR.</span>
|
||||
<div class="mag-dropzone-progress" id="mag-dropzone-progress" hidden>
|
||||
<div class="mag-dropzone-progress-bar"></div>
|
||||
</div>
|
||||
<label class="btn-secondary btn-sm reader-file-pick" id="mag-dropzone-pick-btn" title="Choose a PDF file" onclick="event.stopPropagation()">
|
||||
<span class="mdi mdi-file-upload-outline"></span> Import PDF
|
||||
</label>
|
||||
</div>
|
||||
<label class="btn-secondary btn-sm reader-file-pick" id="mag-dropzone-pick-btn" title="Choose a PDF file" onclick="event.stopPropagation()">
|
||||
<span class="mdi mdi-file-upload-outline"></span> Choose file
|
||||
<input type="file" id="mag-new-file" accept="application/pdf" style="display:none">
|
||||
</label>
|
||||
</div>
|
||||
<div class="mag-new-actions">
|
||||
<button type="button" class="btn primary" id="mag-add-btn" onclick="magCreate()">
|
||||
<span class="mdi mdi-plus"></span> Add magazine
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user