MediaWiki:Common.js

Aus Klimaschutz4All App Wiki
Version vom 14. Februar 2020, 16:23 Uhr von Wikiadmin (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Gehe zu Menü → Einstellungen (Opera → Einstellungen auf dem Mac) und dann auf Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien.
const apiBaseUrl = "https://k4all.dastreibendewerk.de/app/api/sync"
const apiKey = "secret" //TODO replace with something from the wiki config 

// use on start page to display warnings
$(function() {
    var nodeGetWarnings = document.getElementById('node-get-warnings');
    if(!nodeGetWarnings) return;

    const warnUrl = apiBaseUrl + "/pagesWithWarnings/" + apiKey; 
    console.log("load all page warnings here");

    $.getJSON(warnUrl)
        .done(function (res) {
            var warnings = JSON.parse(res.warnings);
            $('#node-get-warnings a').each(function(idx, a) {
                var pageId = getUrlParam($(a).attr('href'), "dpl_id");
                console.log(pageId);
                console.log(warnings);
                var pageWarnings = warnings.filter(function (data) {
                    return data.pageId == pageId;
                });
                console.log(pageWarnings);
                if(pageWarnings && pageWarnings.length > 0) {

                    $(a).append("<span style=\"background-color: yellow;\">❕</span>")
                }
            });
        })
        .fail(function (err) { console.error(err) })

}());

// stolen from https://stackoverflow.com/a/15780907
function getUrlParam(url, name) {
    return (RegExp(name + '=' + '(.+?)(&|$)').exec(url)||[,null])[1];
}

// get status of page
$(function() {    
    var nodeGetPageStatus = document.getElementById('node-get-page-status');
    if(!nodeGetPageStatus) return;

    const pageId = mw.config.values.wgArticleId;
    console.log("Page integration for pageId " + pageId + " loaded!");

    resyncPage(pageId, nodeGetPageStatus)
}());

function resyncPage(pageId, parentDiv) {

    parentDiv.innerHTML = '';

    var warningContainer = document.createElement("div");
    parentDiv.append(warningContainer);
    refreshWarnings(pageId, warningContainer)
}

function refreshWarnings(pageId, parentDiv) {
    const articleWarnUrl = apiBaseUrl + "/warnings/" + apiKey + "/" + pageId;
    $.getJSON( articleWarnUrl)
        .done(function(res) {

            if(res.lastSyncedRevId == mw.config.values.wgRevisionId ){
                $(parentDiv).append("<div class=\"synced-bubble\">App ist auf dem aktuellen Stand</div>")
            } else {
                makeRefreshButton(pageId, parentDiv);
            }

            const warnings = res.warnings.split('|');
            if (warnings[0] === "") return; 
            warnings.forEach(function(element) {
                console.log(element); 
                parentDiv.append(toWarningBubble(element));
            });

            
        })
        .fail(function(err) {
            this.innerHTML = "Ein Fehler ist aufgetreten: " + err.message;
            makeRefreshButton(pageId, parentDiv);
            console.log(err)
        });
}

function makeRefreshButton(pageId, parentDiv) {
    var refreshButton = document.createElement("button");
    refreshButton.setAttribute('class', 'btn');
    refreshButton.innerHTML = "<strong>Wiki Artikel zur App übertragen</strong"
    refreshButton.onclick = function(e) {
        this.disabled = true;
        this.innerHTML = "Warte auf Server..."
        const articlePushUrl = apiBaseUrl + "/" + apiKey + "/" + pageId;
        $.post(articlePushUrl)
        .done(function(res) {
            setTimeout(function() {
                resyncPage(pageId, parentDiv)
             }, 250);
        })
        .fail(function(err) {
            this.innerHTML = "Ein Fehler ist aufgetreten: " + err.message 
            console.log(err)
        });
    };
    parentDiv.append(refreshButton);
} 

function toWarningBubble(warning) {
    switch(warning) {
        case "NoTopic":
        return warningBubbleTemplate("Keine Themenwoche gefunden!");
        case "NoChallenges":
        return warningBubbleTemplate("Keine Herausforderungen gefunden!");
        case "NoSpareChallenges":
        return warningBubbleTemplate("Keine Ersatzherausforderungen gefunden!");
        case "NotEnoughDefaultChallenges":
        return warningBubbleTemplate("Weniger als 4 normale Herausforderungen gefunden!");
        case "TooManyDefaultChallenges":
        return warningBubbleTemplate("Mehr als 4 normale Herausforderungen gefunden!");
        case "EmptyText":
        return warningBubbleTemplate("Keine Wochenbeschreibung gefunden!");
        case "NoHeaderImage":
        return warningBubbleTemplate("Keine Bild gefunden!");
        case "TemplateParsingError":
        return warningBubbleTemplate("Seite kann nicht parsiert werden!");
    }
}

function warningBubbleTemplate(text) {
    var bubble = document.createElement("div");
    bubble.setAttribute("class", "warning-bubble");
    bubble.innerHTML = text;
    return bubble;
}