1/** 2 * JavaScript for DokuWiki plugin NewsFeed 3 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4 * @author Michal Červeňák <miso@fykos.cz> 5 */ 6/* global DOKU_BASE, JSINFO */ 7window.addEventListener('DOMContentLoaded', () => { 8 'use strict'; 9 10 const fetchNews = (stream, offset, length, callback) => { 11 fetch(DOKU_BASE + 'lib/exe/ajax.php?call=plugin_newsfeed', { 12 method: 'POST', 13 headers: { 14 'Accept': 'application/json', 15 'Content-Type': 'application/json' 16 }, 17 body: JSON.stringify({ 18 call: 'plugin_newsfeed', 19 target: 'feed', 20 news: { 21 stream, 22 offset, 23 length, 24 }, 25 page_id: JSINFO.id, 26 }) 27 }).then((response) => { 28 return response.json(); 29 }).then((data) => { 30 callback(data); 31 }); 32 }; 33 34 document.querySelectorAll('.news-stream').forEach((stream) => { 35 let index = 0; 36 const newsContainer = stream.querySelector('.stream'); 37 const streamName = newsContainer.getAttribute('data-stream'); 38 const numberFeed = newsContainer.getAttribute('data-feed'); 39 const loadBar = stream.querySelector('.load-bar'); 40 const moreButton = stream.querySelector('.more-news'); 41 42 const renderNext = (data) => { 43 loadBar.style.display = 'none'; 44 moreButton.disabled = false; 45 index += data.html.news.length; 46 if (!data.html.news.length) { 47 moreButton.disabled = true; 48 } 49 data.html.news.forEach((news) => { 50 newsContainer.innerHTML += news; 51 }); 52 }; 53 fetchNews(streamName, index, numberFeed, renderNext); 54 moreButton.addEventListener('click', () => { 55 loadBar.style.display = ''; 56 moreButton.disabled = true; 57 fetchNews(streamName, index, 3, renderNext); 58 }); 59 }); 60 return true; 61}); 62