Bilder-Download: Mehrfach-Auswahl + Ordner-ZIP

- Selection-Mode: Bilder in Galerie per Klick auswaehlen
- 1-3 Bilder: einzeln herunterladen, 4+: als ZIP
- Ordner-Download: ganzen zugewiesenen Ordner als ZIP
- Sicherheit: Zugriffspruefung + Path-Traversal-Schutz
- archiver Package fuer Streaming-ZIP-Erstellung

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kroonk
2026-04-16 22:47:58 +02:00
parent 43539fa1a3
commit 159071a814
9 changed files with 1542 additions and 24 deletions

View File

@@ -6,6 +6,85 @@
color: _palette(fg);
}
/* ==================== Selection Mode ==================== */
#selection-toolbar {
position: fixed;
bottom: _size(header);
left: 0;
width: 100%;
background: rgba(31, 34, 36, 0.95);
padding: 0.75em 1.5em;
display: flex;
align-items: center;
gap: 1em;
z-index: _misc(z-index-base) + 3;
transform: translateY(100%);
transition: transform 0.3s ease;
box-sizing: border-box;
&.visible {
transform: translateY(0);
}
#sel-count {
color: _palette(fg-bold);
font-weight: _font(weight-extrabold);
margin-right: auto;
white-space: nowrap;
}
button {
white-space: nowrap;
}
}
body.selection-mode {
#main .thumb {
cursor: pointer;
position: relative;
&::before {
content: '';
position: absolute;
top: 0.6em;
left: 0.6em;
width: 1.4em;
height: 1.4em;
border: 2px solid rgba(255, 255, 255, 0.7);
border-radius: 3px;
background: rgba(0, 0, 0, 0.4);
z-index: 2;
transition: all 0.2s ease;
pointer-events: none;
}
&.selected {
&::before {
background: _palette(accent1);
border-color: _palette(accent1);
}
.image {
outline: 3px solid _palette(accent1);
outline-offset: -3px;
}
}
}
}
@media screen and (max-width: 736px) {
#selection-toolbar {
bottom: auto;
top: _size(header);
transform: translateY(-200%);
&.visible {
transform: translateY(0);
}
}
}
/* Footer */
#footer {
.presentify {