Inhaltsverzeichnis
keine Gliederung
(function() {
/* Finde den letzten noch nicht initialisierten Wrapper */
var allWraps = document.getElementsByClassName('galleryWrap');
var wrap = null;
var i;
for (i = 0; i < allWraps.length; i++) {
if (!allWraps[i].getAttribute('data-ginit')) {
wrap = allWraps[i];
}
}
if (!wrap) { return; }
wrap.setAttribute('data-ginit', '1');
function q(cls) {
var els = wrap.getElementsByClassName(cls);
return els.length ? els[0] : null;
}
var loadBtn = q('galleryLoadBtn');
var playBtn = q('galleryPlayBtn');
var stopBtn = q('galleryStopBtn');
var statusEl = q('galleryStatus');
var debugEl = q('galleryDebug');
var grid = q('galleryGrid');
var lightbox = q('galleryLightbox');
var bigImg = q('galleryBig');
var caption = q('galleryCaption');
var prevBtn = q('galleryPrev');
var nextBtn = q('galleryNext');
var closeBtn = q('galleryClose');
var overlay = q('galleryOverlay');
/* Sicherheitscheck */
if (!loadBtn || !grid || !lightbox) { return; }
var images = new Array();
var currentIdx = 0;
var slideTimer = null;
var DELAY = 3000;
var IMG_EXTS = 'jpg jpeg png gif bmp webp svg';
function setStatus(msg, color) {
if (!statusEl) return;
statusEl.textContent = msg;
statusEl.style.color = color || '#888';
}
function setDebug(msg) {
if (!debugEl) return;
debugEl.textContent = msg;
}
function getPageId() {
var pid = 0;
if (typeof Deki !== 'undefined') {
if (Deki.PageId) { pid = Deki.PageId; }
else if (Deki.Page && Deki.Page.Id) { pid = Deki.Page.Id; }
}
return pid;
}
function loadImages() {
var pageId = getPageId();
setDebug('Page-ID: ' + (pageId ? pageId : 'NICHT GEFUNDEN'));
if (!pageId) { setStatus('Page-ID nicht gefunden!', '#ff4444'); return; }
loadBtn.disabled = true;
setStatus('Lade...', '#7ecfff');
grid.innerHTML = '';
images = new Array();
var xhr = new XMLHttpRequest();
xhr.open('GET', '/@api/deki/pages/' + pageId + '/files?dream.out.format=xml', true);
xhr.onload = function() {
loadBtn.disabled = false;
if (xhr.status !== 200) {
setStatus('HTTP ' + xhr.status, '#ff4444');
setDebug('HTTP ' + xhr.status + ' bei Page-ID ' + pageId);
return;
}
var parser = new DOMParser();
var xml = parser.parseFromString(xhr.responseText, 'text/xml');
var nodes = xml.getElementsByTagName('file');
var j;
for (j = 0; j < nodes.length; j++) {
var cNodes = nodes[j].getElementsByTagName('contents');
var nNodes = nodes[j].getElementsByTagName('filename');
if (!cNodes.length) continue;
var url = cNodes[0].getAttribute('href') || '';
var name = nNodes.length ? nNodes[0].textContent : url;
var ext = name.split('.').pop().toLowerCase();
if (IMG_EXTS.indexOf(ext) === -1) continue;
var item = new Object();
item.url = url; item.name = name;
images.push(item);
}
setDebug('Dateien: ' + nodes.length + ' | Bilder: ' + images.length + ' | Page: ' + pageId);
if (images.length === 0) { setStatus('Keine Bilder auf dieser Seite.', '#ff8c69'); return; }
setStatus(images.length + ' Bild(er)', '#7fffb0');
renderGrid();
playBtn.style.display = 'inline-block';
};
xhr.onerror = function() {
setStatus('API Fehler', '#ff4444');
loadBtn.disabled = false;
};
xhr.send();
}
function renderGrid() {
grid.innerHTML = '';
var j;
for (j = 0; j < images.length; j++) {
var img = document.createElement('img');
img.className = 'galleryThumb';
img.alt = images[j].name;
img.src = images[j].url;
(function(idx) { img.onclick = function() { openLightbox(idx); }; })(j);
grid.appendChild(img);
}
}
function openLightbox(idx) { currentIdx = idx; updateLightbox(); lightbox.style.display = 'block'; }
function updateLightbox() {
bigImg.src = ''; bigImg.src = images[currentIdx].url;
caption.textContent = (currentIdx + 1) + ' / ' + images.length + ' -- ' + images[currentIdx].name;
var thumbs = grid.getElementsByTagName('img');
var j;
for (j = 0; j < thumbs.length; j++) {
thumbs[j].className = j === currentIdx ? 'galleryThumb gActive' : 'galleryThumb';
}
}
function closeLightbox() {
stopSlideshow();
lightbox.style.display = 'none';
if (images.length) { playBtn.style.display = 'inline-block'; }
stopBtn.style.display = 'none';
}
function showNext() { currentIdx = (currentIdx + 1) % images.length; updateLightbox(); }
function showPrev() { currentIdx = (currentIdx - 1 + images.length) % images.length; updateLightbox(); }
function startSlideshow() {
if (lightbox.style.display !== 'block') { openLightbox(0); }
playBtn.style.display = 'none';
stopBtn.style.display = 'inline-block';
slideTimer = setInterval(function() { showNext(); }, DELAY);
}
function stopSlideshow() {
if (slideTimer) { clearInterval(slideTimer); slideTimer = null; }
stopBtn.style.display = 'none';
if (images.length) { playBtn.style.display = 'inline-block'; }
}
loadBtn.onclick = function() { loadImages(); };
playBtn.onclick = function() { startSlideshow(); };
stopBtn.onclick = function() { stopSlideshow(); };
closeBtn.onclick = function() { closeLightbox(); };
overlay.onclick = function() { closeLightbox(); };
prevBtn.onclick = function() { showPrev(); };
nextBtn.onclick = function() { showNext(); };
document.onkeydown = function(e) {
if (lightbox.style.display !== 'block') return;
var k = e.keyCode;
if (k === 37) { showPrev(); }
else if (k === 39) { showNext(); }
else if (k === 27) { closeLightbox(); }
};
})();
NoElements {}