var httpGet = require('./httpGet') var ImageLoader = require('./ImageLoader') var showTimer function showImage (image, dom) { var div = document.createElement('div') div.innerHTML = '' dom.appendChild(div) } function showWikimediaImage (image, dom) { httpGet( 'https://commons.wikimedia.org/wiki/File:' + encodeURIComponent(image.id), { forceServerLoad: true }, function (err, result) { if (!result) { return } let m = result.body.match('img .* src="([^"]+)" .* data-file-width="([0-9]+)" data-file-height="([0-9]+)"') let src = m[1] var div = document.createElement('div') div.innerHTML = '' dom.appendChild(div) } ) } // feature: { id: 'File:xxx.jpg', type: 'wikimedia|url', url: 'https://...' } function show (img, options, div) { div.innerHTML = '' switch (img.type) { case 'wikimedia': showWikimediaImage(img, div) break case 'url': showImage(img, div) break default: } } register_hook('show-details', function (data, category, dom, callback) { var div = document.createElement('div') div.className = 'images loading' var imageWrapper var nextImageWrapper = document.createElement('div') dom.appendChild(div) if (showTimer) { window.clearInterval(showTimer) } var l = document.createElement('div') l.innerHTML = 'Loading...' l.className = 'loadingIndicator' div.appendChild(l) var currentLoader = new ImageLoader(data) data.detailsImageCounter = {} currentLoader.next({ counter: data.detailsImageCounter, wrap: true },function (err, img) { div.classList.remove('loading') if (!img) { return callback(err) } var h = document.createElement('h3') h.appendChild(document.createTextNode(lang('images'))) div.insertBefore(h, div.firstChild) imageWrapper = document.createElement('div') imageWrapper.className = 'imageWrapper' div.appendChild(imageWrapper) showTimer = window.setInterval(showNext, 5000) show(img, {}, imageWrapper) loadNext() }) function loadNext () { currentLoader.next({ counter: data.detailsImageCounter, wrap: true }, function (err, img) { if (err) { return console.log("Can't load next image", err) } show(img, {}, nextImageWrapper) }) } function showNext () { // when nothing was loaded, skip showing if (nextImageWrapper.firstChild) { while (imageWrapper.firstChild) { imageWrapper.removeChild(imageWrapper.firstChild) } while (nextImageWrapper.firstChild) { imageWrapper.appendChild(nextImageWrapper.firstChild) } } loadNext() } }) register_hook('hide-details', function () { if (showTimer) { window.clearInterval(showTimer) } }) register_hook('show-popup', function (data, category, dom, callback) { var div = document.createElement('div') div.className = 'images loading' var imageWrapper dom.insertBefore(div, dom.firstChild) var currentLoader = new ImageLoader(data) data.popupImageCounter = {} currentLoader.first({ counter: data.popupImageCounter },function (err, img) { div.classList.remove('loading') if (!img) { return callback(err) } imageWrapper = document.createElement('div') imageWrapper.className = 'imageWrapper' div.appendChild(imageWrapper) show(img, {}, imageWrapper) callback(null) }) })