diff --git a/template/admin.tpl b/template/admin.tpl index e1c236b..b5a0fc2 100644 --- a/template/admin.tpl +++ b/template/admin.tpl @@ -49,12 +49,15 @@ .bratonien-muted { color:#a9a9a9; } .bratonien-main-cache { margin-top:16px; padding-top:14px; border-top:1px solid rgba(255,255,255,.1); } .bratonien-main-cache__warning { margin:10px 0; color:#d6ae62; font-size:12px; line-height:1.45; } +.bratonien-main-cache__controls { display:flex; flex-wrap:wrap; gap:8px; align-items:center; } +.bratonien-main-cache__cancel { display:none; } .bratonien-main-cache__progress { display:none; margin-top:14px; } .bratonien-main-cache__head { display:flex; justify-content:space-between; gap:12px; margin-bottom:7px; } .bratonien-main-cache__track { height:18px; overflow:hidden; border:1px solid rgba(255,255,255,.16); border-radius:4px; background:rgba(0,0,0,.25); } .bratonien-main-cache__bar { width:0; height:100%; background:#66a845; transition:width .25s ease; } .bratonien-main-cache__progress.is-error .bratonien-main-cache__bar { background:#c95b5b; } .bratonien-main-cache__progress.is-queued .bratonien-main-cache__bar { background:#a7834d; } +.bratonien-main-cache__progress.is-cancelling .bratonien-main-cache__bar { background:#d6ae62; } .bratonien-main-cache__details { margin-top:8px; color:#a9a9a9; line-height:1.45; } .bratonien-main-cache__current { margin-top:4px; font-size:12px; color:#8f8f8f; overflow-wrap:anywhere; } @media (max-width:850px) { @@ -107,7 +110,7 @@ %Mindestgröße ×
Größe & Vorschau
Originalgröße{if $profile.original_width}{$profile.original_width} × {$profile.original_height} px{else}Keine Datei gewählt{/if} % px pxSeitenverhältnis🔒 gesperrt
{if $profile.preview_url}Vorschau{else}Keine Wasserzeichendatei gewähltVorschau{/if}
{/foreach} -
+ Neues Profil
PositionX Y WiederholenX Y %Mindestgröße ×
Größe & Vorschau
OriginalgrößeKeine Datei gewählt % px pxSeitenverhältnis🔒 gesperrt
Keine Wasserzeichendatei gewähltVorschau
+
+ Neues Profil
PositionX Y WiederholenX Y %Mindestgröße ×
Größe & Vorschau
OriginalgrößeKeine Datei gewählt % px pxSeitenverhältnis🔒 gesperrt
Keine Wasserzeichendatei gewähltVorschau{/if}
@@ -117,13 +120,16 @@

Wartung

Werkzeuge, die nicht zur täglichen Konfiguration gehören.

Bildcache

-

Löscht alle erzeugten Piwigo- und Bratonien-Bildderivate. Originalbilder bleiben erhalten. Benötigte Varianten werden beim nächsten Aufruf automatisch neu erzeugt.

-
+

Löscht alle erzeugten Piwigo- und Bratonien-Bildderivate. Originalbilder bleiben erhalten. Ein laufender manueller Cache-Aufbau wird vorher beendet.

+

Piwigo-Bildcache vorbereiten

Erzeugt die normalen Piwigo-Bildgrößen vorab. Bratonien-Wasserzeichen werden weiterhin nur bei Bedarf erzeugt.

-

Experimentell: Der manuelle Cache-Aufbau nutzt vier parallele Worker und kann CPU, Arbeitsspeicher und Datenträger des LXC deutlich belasten. Diese Warnung wird entfernt, sobald der Ablauf im Dauerbetrieb stabil ist.

-
+

Experimentell: Der manuelle Cache-Aufbau nutzt sechs parallele Worker und kann CPU, Arbeitsspeicher und Datenträger des LXC deutlich belasten. Diese Warnung wird entfernt, sobald der Ablauf im Dauerbetrieb stabil ist.

+
+
+
+
Cache-Aufbau0 %
@@ -154,15 +160,16 @@ document.querySelectorAll('[data-watermark-editor]').forEach(initWatermarkEditor function initMainCacheProgress(){ var box=document.querySelector('[data-main-cache-progress]');if(!box)return; - var url=box.getAttribute('data-status-url'),title=box.querySelector('[data-cache-title]'),percentEl=box.querySelector('[data-cache-percent]'),details=box.querySelector('[data-cache-details]'),current=box.querySelector('[data-cache-current]'),bar=box.querySelector('[data-cache-bar]'),track=box.querySelector('[data-cache-track]'),timer=null,hideTimer=null; + var url=box.getAttribute('data-status-url'),title=box.querySelector('[data-cache-title]'),percentEl=box.querySelector('[data-cache-percent]'),details=box.querySelector('[data-cache-details]'),current=box.querySelector('[data-cache-current]'),bar=box.querySelector('[data-cache-bar]'),track=box.querySelector('[data-cache-track]'),cancelForm=document.querySelector('[data-cache-cancel-form]'),timer=null,hideTimer=null; function schedule(ms){if(timer)clearTimeout(timer);timer=setTimeout(load,ms);} function render(data){ var state=data.state||'idle',total=Math.max(0,parseInt(data.total,10)||0),completed=Math.max(0,parseInt(data.completed,10)||0),percent=total>0?Math.min(100,Math.round(completed/total*100)):(state==='complete'?100:0); - box.classList.toggle('is-error',state==='error');box.classList.toggle('is-queued',state==='queued');bar.style.width=percent+'%';track.setAttribute('aria-valuenow',String(percent));percentEl.textContent=percent+' %'; - var labels={queued:'Cache-Aufbau wartet',running:'Cache-Aufbau läuft',complete:'Cache-Aufbau fertig',error:'Cache-Aufbau mit Fehlern'};title.textContent=labels[state]||'Cache-Aufbau'; + box.classList.toggle('is-error',state==='error');box.classList.toggle('is-queued',state==='queued');box.classList.toggle('is-cancelling',state==='cancelling');bar.style.width=percent+'%';track.setAttribute('aria-valuenow',String(percent));percentEl.textContent=percent+' %'; + var labels={queued:'Cache-Aufbau wartet',running:'Cache-Aufbau läuft',cancelling:'Cache-Aufbau wird abgebrochen',cancelled:'Cache-Aufbau abgebrochen',complete:'Cache-Aufbau fertig',error:'Cache-Aufbau mit Fehlern'};title.textContent=labels[state]||'Cache-Aufbau'; details.textContent=(data.message||'')+(total>0?' · '+completed+' / '+total+' Varianten · '+(parseInt(data.generated,10)||0)+' neu · '+(parseInt(data.cached,10)||0)+' vorhanden · '+(parseInt(data.skipped,10)||0)+' übersprungen · '+(parseInt(data.errors,10)||0)+' Fehler':'');current.textContent=data.current?('Aktuell: '+data.current):''; - if(state==='queued'||state==='running'||state==='error'){if(hideTimer){clearTimeout(hideTimer);hideTimer=null;}box.style.display='block';} - if(state==='queued'||state==='running'){schedule(1000);}else if(state==='complete'){box.style.display='block';if(hideTimer)clearTimeout(hideTimer);hideTimer=setTimeout(function(){box.style.display='none';},5000);}else if(state==='idle'){box.style.display='none';} + if(cancelForm)cancelForm.style.display=(state==='queued'||state==='running'||state==='cancelling')?'block':'none'; + if(state==='queued'||state==='running'||state==='cancelling'||state==='error'){if(hideTimer){clearTimeout(hideTimer);hideTimer=null;}box.style.display='block';} + if(state==='queued'||state==='running'||state==='cancelling'){schedule(1000);}else if(state==='complete'||state==='cancelled'){box.style.display='block';if(hideTimer)clearTimeout(hideTimer);hideTimer=setTimeout(function(){box.style.display='none';},5000);}else if(state==='idle'){box.style.display='none';} } function load(){fetch(url+(url.indexOf('?')===-1?'?':'&')+'_='+(Date.now()),{credentials:'same-origin',cache:'no-store'}).then(function(r){if(!r.ok)throw new Error('HTTP '+r.status);return r.json();}).then(render).catch(function(){box.style.display='block';box.classList.add('is-error');details.textContent='Cache-Status konnte nicht geladen werden.';});} load();