Χρήστης:P.a.a/wiki2html.user.js

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Μετά την αποθήκευση πρέπει να καθαρίσετε την κρυφή μνήμη (cache) του browser σας για να δείτε τις αλλαγές: Σε Chrome, Firefox, Safari, Internet Explorer και Edge: Κρατήστε πατημένο το Shift και κάντε κλικ στο κουμπί Ανανέωση στην μπάρα εργαλείων.

// ==UserScript==
// @id          wikipedia.org-b68c13a6-22a3-492a-b79b-4d405e8f572d@el.wikipedia.org/wiki/%CE%A7%CF%81%CE%AE%CF%83%CF%84%CE%B7%CF%82:P.a.a
// @name        wiki2html
// @namespace   el.wikipedia.org/wiki/%CE%A7%CF%81%CE%AE%CF%83%CF%84%CE%B7%CF%82:P.a.a
// @version     0.1
// @description Turn a diff's wikitext to html
// @include     *.wikipedia.org/*
// @copyright   Once upon a time
// @run-at      document-end
// ==/UserScript==

var css = ".wiki2htmlparent {position: relative;} " +
          ".wiki2htmlchild {opacity: 0; color: black; background-color: white; position: absolute; top: 0px; right: 0px;} " +
          ".wiki2htmlparent:hover .wiki2htmlchild{opacity: 1;} " +
          ".wiki2htmlchild:hover {cursor: pointer;}";

var blocks = [].filter.call(document.querySelectorAll("td[class^='diff-']"), function (el) {
  return /(?:deletedline|addedline)$/.test(el.className);
});

if(blocks.length){
  unsafeWindow.mw.util.addCSS(css);
}
else{
  return;
}

blocks.forEach(function(el){
  var cont = el.childNodes[0];

  if(cont === undefined){ // empty diff?
    return;
  }
  
  cont.className = "wiki2htmlparent";
  var btn = document.createElement("div");
  
  btn.className = "wiki2htmlchild";
  btn.innerHTML = "☯";
  btn.addEventListener("click", function(evt){
    var parent = evt.target.parentNode;
    var wikitext = "";
    for(var i=0; i < parent.childNodes.length - 1; i++){
      wikitext += parent.childNodes[i].textContent;
    }
    gethtml(parent, wikitext);
  });
  cont.appendChild(btn);
});

function gethtml(parent, wikitext){
  var mw = unsafeWindow.mw;
  var title = encodeURIComponent(mw.config.get("wgPageName"));
  var xhr = new XMLHttpRequest();
  xhr.onload = function(){
    var apires = JSON.parse(this.responseText);
    parent.innerHTML = apires.parse.text["*"];
  }
  var url = mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/api.php?" +
            "action=parse&"+
            "text=" + encodeURIComponent(wikitext) + "&" +
            "title=" + title + "&" +
            "prop=text&contentmodel=wikitext&format=json&disablepp=true";
  xhr.open("get", url, true);
  xhr.send();
}