Difference between revisions of "User:CRLF/common.js"

Explain xkcd: It's 'cause you're dumb.
Jump to: navigation, search
(for debugging)
(Undo revision 273529 by CRLF (talk))
 
(26 intermediate revisions by the same user not shown)
Line 1: Line 1:
function rvt( undop, undoafterp ) {
+
function rvt(undop, undoafterp, c, tl) { // Implements one-click undo
 
     $.ajax({
 
     $.ajax({
 
         url: 'https://www.explainxkcd.com/wiki/api.php',
 
         url: 'https://www.explainxkcd.com/wiki/api.php',
Line 5: Line 5:
 
             format: 'json',
 
             format: 'json',
 
             action: 'edit',
 
             action: 'edit',
             title: mw.config.get( 'wgPageName' ),
+
             title: atob(tl),
 
             undo: undop,
 
             undo: undop,
 
             undoafter: undoafterp,
 
             undoafter: undoafterp,
             summary: "Reverted vandalism with [[User:CRLF/common.js]]",
+
             summary: "Reverted vandalism with [[User:CRLF/OneClickUndo.js]]",
             token: mw.user.tokens.get( 'csrfToken' )
+
             token: mw.user.tokens.get('csrfToken')
 
         },
 
         },
 
         dataType: 'json',
 
         dataType: 'json',
 
         type: 'POST',
 
         type: 'POST',
         success: function( data ) {
+
         success: function () { if (c) { $('.mw-diff-undo > a').text("success"); $('.mw-diff-undo > a').removeAttr("onclick"); } else { $('#link' + undop).text("success"); $('.mw-diff-undo > a').removeAttr("onclick"); } }
            if ( data && data.edit && data.edit.result == 'Success' ) {
+
    });
                window.location.reload(); // reload page if edit was successful
+
}
            } else if ( data && data.error ) {
+
try {
                 alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
+
    var href = $('.mw-diff-undo > a').attr('href').split("=");
            } else {
+
    var undop = href[4];
                 alert( 'Error: Unknown result from API.' );
+
    var undoafterp = href[3].substr(0, href[3].length - 5);
 +
    $('.mw-diff-undo > a').removeAttr('href');
 +
    $('.mw-diff-undo > a').attr('onclick', 'rvt(' + undop + ',' + undoafterp + ',1,"'+btoa($("#firstHeading").text().substr(33, $("#firstHeading").text().length - 34))+'")');
 +
}
 +
catch (e) { console.log(e); console.log("assumed not undoable"); }
 +
 
 +
 
 +
function makeLinks(str, titles) { // Implements undo links on contribs page
 +
    $.ajax({
 +
        url: 'https://www.explainxkcd.com/wiki/api.php',
 +
        type: 'GET',
 +
        dataType: 'json',
 +
        data: { format: 'json', action: 'query', prop: 'revisions', titles: str, rvprop: 'ids', formatversion: 2 },
 +
        success: function (data) {
 +
            for (var i = 0; i < data["query"]["pages"].length; i++) {
 +
                 ob = data["query"]["pages"][i]
 +
                pg = ob["title"];
 +
                if (titles[pg] == "done") continue;
 +
                el = titles[pg];
 +
                $('<span id="span' + ob["revisions"][0]["revid"] + '"></span>').insertAfter(el);
 +
                 $("#span" + ob["revisions"][0]["revid"]).html(' <strong>[<a id="link' + ob["revisions"][0]["revid"] + '" onclick=\'rvt(' + ob["revisions"][0]["revid"] + ',' + ob["revisions"][0]["parentid"] + ',0,"'+btoa(pg)+'")\'>revert</a>]</strong>');
 +
                titles[pg] = "done";
 
             }
 
             }
         },
+
         }
        error: function( xhr ) {
+
    })
            alert( 'Error: Request failed.' );
+
}
        }});
+
 
}
+
cs = $('.mw-contributions-title');
var href = $('.mw-diff-undo > a').attr('href').split("=");
+
titles = {};
var undop = href[4];
+
str = "";
var undoafterp = href[3].substr(0,href[3].length-5);
+
for (var i = 0; i < cs.length; i++) {
$('.mw-diff-undo > a').removeAttr('href');
+
    titles[cs[i].getAttribute("title")] = cs[i];
$('.mw-diff-undo > a').attr('onclick','rvt('+undop+','+undoafterp+')');
+
    str += cs[i].getAttribute("title") + '|'
 +
    makeLinks(str.slice(0, -1), titles);
 +
}

Latest revision as of 03:06, 21 May 2022

function rvt(undop, undoafterp, c, tl) { // Implements one-click undo
    $.ajax({
        url: 'https://www.explainxkcd.com/wiki/api.php',
        data: {
            format: 'json',
            action: 'edit',
            title: atob(tl),
            undo: undop,
            undoafter: undoafterp,
            summary: "Reverted vandalism with [[User:CRLF/OneClickUndo.js]]",
            token: mw.user.tokens.get('csrfToken')
        },
        dataType: 'json',
        type: 'POST',
        success: function () { if (c) { $('.mw-diff-undo > a').text("success"); $('.mw-diff-undo > a').removeAttr("onclick"); } else { $('#link' + undop).text("success"); $('.mw-diff-undo > a').removeAttr("onclick"); } }
    });
}
try {
    var href = $('.mw-diff-undo > a').attr('href').split("=");
    var undop = href[4];
    var undoafterp = href[3].substr(0, href[3].length - 5);
    $('.mw-diff-undo > a').removeAttr('href');
    $('.mw-diff-undo > a').attr('onclick', 'rvt(' + undop + ',' + undoafterp + ',1,"'+btoa($("#firstHeading").text().substr(33, $("#firstHeading").text().length - 34))+'")');
}
catch (e) { console.log(e); console.log("assumed not undoable"); }


function makeLinks(str, titles) { // Implements undo links on contribs page
    $.ajax({
        url: 'https://www.explainxkcd.com/wiki/api.php',
        type: 'GET',
        dataType: 'json',
        data: { format: 'json', action: 'query', prop: 'revisions', titles: str, rvprop: 'ids', formatversion: 2 },
        success: function (data) {
            for (var i = 0; i < data["query"]["pages"].length; i++) {
                ob = data["query"]["pages"][i]
                pg = ob["title"];
                if (titles[pg] == "done") continue;
                el = titles[pg];
                $('<span id="span' + ob["revisions"][0]["revid"] + '"></span>').insertAfter(el);
                $("#span" + ob["revisions"][0]["revid"]).html(' <strong>[<a id="link' + ob["revisions"][0]["revid"] + '" onclick=\'rvt(' + ob["revisions"][0]["revid"] + ',' + ob["revisions"][0]["parentid"] + ',0,"'+btoa(pg)+'")\'>revert</a>]</strong>');
                titles[pg] = "done";
            }
        }
    })
}

cs = $('.mw-contributions-title');
titles = {};
str = "";
for (var i = 0; i < cs.length; i++) {
    titles[cs[i].getAttribute("title")] = cs[i];
    str += cs[i].getAttribute("title") + '|'
    makeLinks(str.slice(0, -1), titles);
}