You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 lines
3.5 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. var ImageLoader = require('./ImageLoader')
  2. var showTimer
  3. function showImage (image, dom) {
  4. var div = document.createElement('div')
  5. div.innerHTML = '<a target="_blank" href="' + image.url + '"><img src="' + image.url + '"></a>'
  6. dom.appendChild(div)
  7. }
  8. function showWikimediaImage (image, dom) {
  9. var size = 400
  10. if ('width' in image && image.width < size) {
  11. size = image.width
  12. }
  13. var url = 'https://commons.wikimedia.org/w/thumb.php?f=' + encodeURIComponent(image.id) + '&w=' + size
  14. var div = document.createElement('div')
  15. div.innerHTML = '<a target="_blank" href="https://commons.wikimedia.org/wiki/File:' + encodeURIComponent(image.id) + '"><img src="' + url + '"/></a>'
  16. dom.appendChild(div)
  17. }
  18. // feature: { id: 'File:xxx.jpg', type: 'wikimedia|url', url: 'https://...' }
  19. function show (img, options, div) {
  20. div.innerHTML = ''
  21. switch (img.type) {
  22. case 'wikimedia':
  23. showWikimediaImage(img, div)
  24. break
  25. case 'url':
  26. showImage(img, div)
  27. break
  28. default:
  29. }
  30. }
  31. register_hook('show-details', function (data, category, dom, callback) {
  32. var div = document.createElement('div')
  33. div.className = 'images loading'
  34. var imageWrapper
  35. var nextImageWrapper = document.createElement('div')
  36. dom.appendChild(div)
  37. if (showTimer) {
  38. window.clearInterval(showTimer)
  39. }
  40. var l = document.createElement('div')
  41. l.innerHTML = '<i class="fa fa-spinner fa-pulse fa-fw"></i><span class="sr-only">Loading...</span>'
  42. l.className = 'loadingIndicator'
  43. div.appendChild(l)
  44. var currentLoader = new ImageLoader(data)
  45. data.detailsImageCounter = {}
  46. currentLoader.next({
  47. counter: data.detailsImageCounter,
  48. wrap: true
  49. },function (err, img) {
  50. div.classList.remove('loading')
  51. if (!img) {
  52. return callback(err)
  53. }
  54. var h = document.createElement('h3')
  55. h.appendChild(document.createTextNode(lang('images')))
  56. div.insertBefore(h, div.firstChild)
  57. imageWrapper = document.createElement('div')
  58. imageWrapper.className = 'imageWrapper'
  59. div.appendChild(imageWrapper)
  60. showTimer = window.setInterval(showNext, 5000)
  61. show(img, {}, imageWrapper)
  62. loadNext()
  63. })
  64. function loadNext () {
  65. currentLoader.next({
  66. counter: data.detailsImageCounter,
  67. wrap: true
  68. }, function (err, img) {
  69. if (err) {
  70. return console.log("Can't load next image", err)
  71. }
  72. show(img, {}, nextImageWrapper)
  73. })
  74. }
  75. function showNext () {
  76. // when nothing was loaded, skip showing
  77. if (nextImageWrapper.firstChild) {
  78. while (imageWrapper.firstChild) {
  79. imageWrapper.removeChild(imageWrapper.firstChild)
  80. }
  81. while (nextImageWrapper.firstChild) {
  82. imageWrapper.appendChild(nextImageWrapper.firstChild)
  83. }
  84. }
  85. loadNext()
  86. }
  87. })
  88. register_hook('hide-details', function () {
  89. if (showTimer) {
  90. window.clearInterval(showTimer)
  91. }
  92. })
  93. register_hook('show-popup', function (data, category, dom, callback) {
  94. var div = document.createElement('div')
  95. div.className = 'images loading'
  96. var imageWrapper
  97. dom.insertBefore(div, dom.firstChild)
  98. var currentLoader = new ImageLoader(data)
  99. data.popupImageCounter = {}
  100. currentLoader.first({
  101. counter: data.popupImageCounter
  102. },function (err, img) {
  103. div.classList.remove('loading')
  104. if (!img) {
  105. return callback(err)
  106. }
  107. imageWrapper = document.createElement('div')
  108. imageWrapper.className = 'imageWrapper'
  109. div.appendChild(imageWrapper)
  110. show(img, {}, imageWrapper)
  111. callback(null)
  112. })
  113. })