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