Inhaltsverzeichnis
keine Gliederung
(function() {
/* Letzten uninitialisierten Wrapper finden */
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 && els.length) ? els[0] : null;
}
var loadBtn = q('galleryLoadBtn');
var prevBtn = q('galleryPrevBtn');
var nextBtn = q('galleryNextBtn');
var playBtn = q('galleryPlayBtn');
var stopBtn = q('galleryStopBtn');
var counter = q('galleryCounter');
var statusEl = q('galleryStatus');
var stage = q('galleryStage');
var mainImg = q('galleryMainImg');
var imgName = q('galleryImgName');
var thumbRow = q('galleryThumbRow');
var imgDesc = q('galleryImgDesc');
if (!loadBtn || !stage || !mainImg) { 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 setText(el, txt) { if (el) { el.textContent = txt; } }
function setStatus(msg, color) { setText(statusEl, msg); if (statusEl) { statusEl.style.color = color || '#888'; } }
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 forceHttps(url) {
if (url && url.indexOf('http://') === 0) {
return 'https://' + url.substring(7);
}
return url;
}
function loadImages() {
var pageId = getPageId();
if (!pageId) { setStatus('Page-ID nicht gefunden!', '#ff4444'); return; }
loadBtn.disabled = true;
setStatus('Lade...', '#7ecfff');
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'); 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');
var dNodes = nodes[j].getElementsByTagName('description');
if (!cNodes.length) continue;
var url = forceHttps(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 desc = (dNodes.length && dNodes[0].textContent) ? dNodes[0].textContent : '';
var item = new Object();
item.url = url; item.name = name; item.desc = desc;
images.push(item);
}
if (images.length === 0) { setStatus('Keine Bilder gefunden.', '#ff8c69'); return; }
setStatus('');
loadBtn.style.display = 'none';
stage.style.display = 'block';
if (thumbRow) { thumbRow.style.display = 'flex'; }
if (prevBtn) { prevBtn.style.display = 'inline-block'; }
if (nextBtn) { nextBtn.style.display = 'inline-block'; }
if (playBtn) { playBtn.style.display = 'inline-block'; }
buildThumbs();
showImage(0);
};
xhr.onerror = function() { setStatus('API Fehler', '#ff4444'); loadBtn.disabled = false; };
xhr.send();
}
function showImage(idx) {
currentIdx = idx;
if (mainImg) {
mainImg.src = ''; mainImg.src = images[idx].url;
mainImg.style.cursor = 'pointer';
mainImg.onclick = function() { window.open(images[idx].url, '_blank'); };
}
setText(imgName, images[idx].name);
setText(imgDesc, images[idx].desc ? images[idx].desc : 'Keine Beschreibung');
setText(counter, (idx + 1) + ' / ' + images.length);
if (thumbRow) {
var thumbs = thumbRow.getElementsByTagName('img');
var j;
for (j = 0; j < thumbs.length; j++) {
thumbs[j].className = j === idx ? 'gThumb gThumbActive' : 'gThumb';
}
}
}
function buildThumbs() {
if (!thumbRow) { return; }
thumbRow.innerHTML = '';
var j;
for (j = 0; j < images.length; j++) {
var t = document.createElement('img');
t.className = 'gThumb';
t.src = images[j].url;
t.alt = images[j].name;
t.title = images[j].name;
(function(idx) { t.onclick = function() { showImage(idx); }; })(j);
thumbRow.appendChild(t);
}
}
function showNext() { showImage((currentIdx + 1) % images.length); }
function showPrev() { showImage((currentIdx - 1 + images.length) % images.length); }
function startSlideshow() {
if (playBtn) { playBtn.style.display = 'none'; }
if (stopBtn) { stopBtn.style.display = 'inline-block'; }
slideTimer = setInterval(function() { showNext(); }, DELAY);
}
function stopSlideshow() {
if (slideTimer) { clearInterval(slideTimer); slideTimer = null; }
if (stopBtn) { stopBtn.style.display = 'none'; }
if (playBtn) { playBtn.style.display = 'inline-block'; }
}
if (loadBtn) { loadBtn.onclick = function() { loadImages(); }; }
if (prevBtn) { prevBtn.onclick = function() { showPrev(); }; }
if (nextBtn) { nextBtn.onclick = function() { showNext(); }; }
if (playBtn) { playBtn.onclick = function() { startSlideshow(); }; }
if (stopBtn) { stopBtn.onclick = function() { stopSlideshow(); }; }
document.onkeydown = function(e) {
if (!stage || stage.style.display === 'none') return;
var k = e.keyCode;
if (k === 37) { showPrev(); }
else if (k === 39) { showNext(); }
else if (k === 32) { if (slideTimer) { stopSlideshow(); } else { startSlideshow(); } }
};
})();
NoElements {}