User:DannyS712/EFFPRH.js

//

//Largely based on User:Enterprisey/AFCFFU.js

//Copied from User:Abelmoschus Esculentus/EFFPRH.js

//Includes contributions from User:EpicPupper

var EFFPRH_config = {

name: 'EFFPRH',

version: "1.3.1",

debug: false

};

var effp_ending = ' (' + EFFPRH_config.name + ' v.' + EFFPRH_config.version + ')';

var effp_effpPageName = mw.config.get('wgPageName').replace(/_/g, ' ');

var effp_effpSubmissions = new Array();

var effp_effpSections = new Array();

var effp_numTotal = 0;

var effp_AJAXnumber = 0;

var effp_Submissions = new Array();

var wgArticlePath = mw.config.get( 'wgArticlePath' );

function effp_editPage(title, newtext, summary, createonly, nopatrol) {

var edittoken = mw.user.tokens.get('csrfToken');

summary += effp_ending;

$("#effp_finished_wrapper").html('');

var func_id = effp_AJAXnumber;

effp_AJAXnumber++;

$('#effp_status').html($('#effp_status').html() + '

  • Editing ' + title + '
  • ');

    var request = {

    'action': 'edit',

    'title': title,

    'text': newtext,

    'summary': summary,

    'token': edittoken

    };

    if (createonly) request.createonly = true;

    var api = new mw.Api();

    api.post(request)

    .done(function ( data ) {

    if ( data && data.edit && data.edit.result && data.edit.result == 'Success' ) {

    $('#effp_edit' + jqEsc(title)).html('Saved ' + title + '');

    } else {

    $('#effp_edit' + jqEsc(title)).html('Edit failed on ' + title + '. Error info: ' + JSON.stringify(data));

    window.console && console.error('Edit failed on %s (%s). Error info: %s', wgArticlePath.replace("$1", encodeURI(title)), title, JSON.stringify(data));

    }

    } )

    .fail( function ( error ) {

    if (createonly && error == "articleexists")

    $('#effp_edit' + jqEsc(title)).html('Edit failed on ' + title + '. Error info: The article already exists!');

    else

    $('#effp_edit' + jqEsc(title)).html('Edit failed on ' + title + '. Error info: ' + error);

    })

    .always( function () {

    $("#effp_AJAX_finished_" + func_id).css("display", '');

    });

    if (!nopatrol) {

    if ($('.patrollink').length) {

    var patrolhref = $('.patrollink a').attr('href');

    var rcid = mw.util.getParamValue('rcid', patrolhref);

    if (rcid) {

    $('#effp_status').html($('#effp_status').html() + '

  • Marking ' + title + ' as patrolled
  • ');

    var patrolrequest = {

    'action': 'patrol',

    'format': 'json',

    'token': mw.user.tokens.get('patrolToken'),

    'rcid': rcid

    };

    api.post(patrolrequest)

    .done(function ( data ) {

    if ( data ) {

    $('#effp_patrol' + jqEsc(title)).html('Marked ' + title + ' as patrolled');

    } else {

    $('#effp_patrol' + jqEsc(title)).html('Patrolling failed on ' + title + ' with an unknown error');

    window.console && console.error('Patrolling failed on %s (%s) with an unknown error.', wgArticlePath.replace("$1", encodeURI(title)), title);

    }

    } )

    .fail( function ( error ) {

    $('#effp_patrol' + jqEsc(title)).html('Patrolling failed on ' + title + '. Error info: ' + error);

    });

    }

    }

    }

    }

    function effp_escapeHtmlChars(original) {

    return original.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'");

    }

    function jqEsc(expression) {

    return expression.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~ ]/g, '');

    }

    function effp_generateSelect(title, options, onchange) {

    var text = '";

    return text;

    }

    function effp_getPageText(title, show, redirectcheck, timestamp) {

    if (show) $('#effp_status').html($('#effp_status').html() + '

  • Getting ' + title + '
  • ');

    var request = {

    'action': 'query',

    'prop': 'revisions',

    'rvprop': 'content',

    'format': 'json',

    'indexpageids': true,

    'titles' : title

    };

    if (redirectcheck) request.redirects = true;

    if (timestamp) request.rvprop = 'content|timestamp';

    var response = JSON.parse(

    $.ajax({

    url: mw.util.wikiScript('api'),

    data: request,

    async: false

    })

    .responseText

    );

    pageid = response['query']['pageids'][0];

    if (pageid === "-1") {

    if (show) $('#effp_get' +jqEsc(title)).html('The page ' + title + ' does not exist');

    return '';

    }

    var newtext = response['query']['pages'][pageid]['revisions'][0]['*'];

    if (redirectcheck && response['query']['redirects'] /* If &redirects if specified but there is no redirect, this stops us from getting an error */){

    var oldusername = response['query']['redirects'][0]['from'];

    var newusername = response['query']['redirects'][0]['to'];

    if ((typeof(oldusername) !== 'undefined') && (typeof(newusername) !== 'undefined') && (oldusername != newusername)){

    usertalkpage = newusername;

    if (show) {

    $('#effp_status').html($('#effp_status').html() + '

  • Got ' + newusername + ' (page was renamed from ' + oldusername + ')
  • ');

    }

    } else {

    redirectcheck = false;

    }

    } else {

    redirectcheck = false;

    }

    if (show && !redirectcheck) $('#effp_status').html($('#effp_status').html() + '

  • Got ' + title + '
  • ');

    if (!timestamp) return newtext;

    else return {'pagetext':newtext,'timestamp':response['query']['pages'][pageid]['revisions'][0]['timestamp']};

    }

    function effp_init() {

    var pagetext = effp_getPageText(effp_effpPageName, false);

    var section_re = /==[^=]*==/;

    pagetext = pagetext.substring(pagetext.search(section_re));

    section_re = /==[^=]*==/g;

    var section_headers = pagetext.match(section_re);

    for (var i = 0; i < section_headers.length; i++) {

    var section_start = pagetext.indexOf(section_headers[i]);

    var section_text = pagetext.substring(section_start);

    if (i < section_headers.length - 1) {

    var section_end = section_text.substring(section_headers[i].length).indexOf(section_headers[i + 1]) + section_headers[i].length;

    section_text = section_text.substring(0, section_end);

    }

    effp_effpSections.push(section_text);

    }

    for (var i = 0; i < effp_effpSections.length; i++) {

    var header = effp_effpSections[i].match(section_re)[0];

    header = header.slice(2, (header.length - 2));

    var submission = {

    type: 'effp',

    from: new Array(),

    section: i,

    blockeduser: '',

    admin: '',

    cmt: '',

    filteruser: '',

    user: '',

    title: header,

    action: 'none',

    blockuser : false,

    expiry : '',

    blockreason: '',

    blockacc: false,

    blockemail: false,

    blocktalk: false,

    blockauto: false,

    anononly: false,

    watch: false,

    comment: ''

    };

    effp_effpSubmissions.push(submission);

    effp_numTotal++;

    }

    for (var k = 0; k < effp_effpSubmissions.length; k++) {

    var text = '

      ';

      text += '

    • Response: ';

      selectoptions = [

      { label: 'None', selected: true, value: 'none' },

      { label: 'Done (no change to filter)', value: 'done' },

      { label: 'Done (may need a change to filter)', value: 'defm' },

      { label: 'Not Done (filter working properly)', value: 'notdone' },

      { label: 'Not Done (may need a change to filter)', value: 'ndefm' },

      { label: 'Not Done (notable people)', value: 'r' },

      { label: 'Already Done', value: 'alreadydone' },

      { label: 'Decline (edits are vandalism)', value: 'denied' },

      { label: 'Checking', value: 'checking' },

      { label: 'User blocked', value: 'blocked' },

      { label: 'Request on article talk page', value: 'talk' },

      { label: 'Fixed filter', value: 'fixed' },

      { label: 'Question', value: 'question' },

      { label: 'Note', value: 'note' },

      { label: 'Private filter', value: 'private' }

      ];

      text += '
      ' + effp_generateSelect('effp_effp_action_'+k, selectoptions, 'effp_effp_onActionChange(' + k + ')') + '

    • ';

      text += '

    ';

    text += '';

    text += '';

    displayMessage_inline(text, 'effp-review-' + effp_effpSubmissions[k].section);

    }

    }

    function effp_effp_performActions(sectionNumber) {

    for (var i = 0; i < effp_effpSubmissions.length; i++) {

    var action = $("#effp_effp_action_" + i).val();

    effp_effpSubmissions[i].action = action;

    if (action == 'none') continue;

    if (action == 'blocked') {

    effp_effpSubmissions[i].blockeduser = $.trim($("#effp_effp_blockeduser_" + i).val());

    effp_effpSubmissions[i].admin = $.trim($("#effp_effp_admin_" + i).val());

    effp_effpSubmissions[i].cmt = $.trim($("#effp_effp_cmt_" + i).val());

    if (document.getElementById('effp_effp_blockuser_'+i).checked) {

    effp_effpSubmissions[i].blockuser = true;

    if ($('#effp_effp_blockreason_'+i).val() == 'custom') {

    effp_effpSubmissions[i].blockreason = $.trim($('#effp_effp_customblockreason_'+i).val());

    }

    else effp_effpSubmissions[i].blockreason = $.trim($('#effp_effp_blockreason_'+i).val());

    effp_effpSubmissions[i].expiry = $.trim($('#effp_effp_blockexpiry_'+i).val());

    effp_effpSubmissions[i].blockacc = document.getElementById('effp_effp_blockacc_'+i).checked;

    effp_effpSubmissions[i].blockemail = document.getElementById('effp_effp_blockemail_'+i).checked;

    effp_effpSubmissions[i].blocktalk = document.getElementById('effp_effp_blocktalk_'+i).checked;

    effp_effpSubmissions[i].anononly = document.getElementById('effp_effp_anononly_'+i).checked;

    effp_effpSubmissions[i].watch = document.getElementById('effp_effp_watch_'+i).checked;

    }

    }

    if (action == 'fixed') {

    effp_effpSubmissions[i].filteruser = $.trim($("#effp_effp_filteruser_" + i).val());

    effp_effpSubmissions[i].cmt = $.trim($("#effp_effp_cmt_" + i).val());

    }

    if (action == 'alreadydone') {

    effp_effpSubmissions[i].user = $.trim($("#effp_effp_user_" + i).val());

    effp_effpSubmissions[i].cmt = $.trim($("#effp_effp_cmt_" + i).val());

    }

    if (action == 'talk') {

    effp_effpSubmissions[i].talk = $.trim($("#effp_effp_talk_" + i).val());

    effp_effpSubmissions[i].cmt = $.trim($("#effp_effp_cmt_" + i).val());

    }

    if (action != 'none' && action != 'blocked' && action != 'fixed' && action != 'alreadydone') {

    effp_effpSubmissions[i].cmt = $.trim($("#effp_effp_cmt_" + i).val());

    }

    }

    displayMessage_inline('

    • Now processing...
        ', 'effp-review-' + sectionNumber);

        $('#effp_finish').html('

      • Done (Reload page)
      • ');

        pagetext = effp_getPageText(effp_effpPageName, true);

        var effp_total = 0;

        for (var i = 0; i < effp_effpSubmissions.length; i++) {

        var sub = effp_effpSubmissions[i];

        if (pagetext.indexOf(effp_effpSections[sub.section]) == -1) {

        var $error = $('

      • ').text( 'Skipping ' + sub.title + ': Cannot find section. Perhaps it was modified in the mean time?');

        $('#effp_status').append( $error );

        continue;

        }

        var origtext = effp_effpSections[sub.section];

        var text = effp_effpSections[sub.section];

        var startindex = pagetext.indexOf(effp_effpSections[sub.section]);

        var endindex = startindex + text.length;

        if (text === origtext) {

        var sub_m = effp_effpSubmissions[i];

        if (sub_m.blockuser == true) {

        var match = /\[\[(?:User[_ ]talk:|User:|Special:Contributions\/)([^\||\]\]]*)([^\]]*?)\]\]/i.exec(text);

        if (match) {

        var vandal = match[1];

        var API = new mw.Api();

        API.postWithToken("block", {

        'action': 'block',

        'expiry': sub_m.expiry,

        'allowusertalk': !sub_m.blocktalk,

        'noemail': sub_m.blockemail,

        'anononly': sub_m.anononly,

        'autoblock': sub_m.blockauto,

        'nocreate': sub_m.blockacc,

        'reason': sub_m.blockreason,

        'watchuser': sub_m.watch,

        'user': vandal

        }).done(function(blockData) {

        $('#effp_status').html($('#effp_status').html()+'

      • Blocked '+vandal+' succesfully
      • ');

        effp_effp_templateUser(sub_m.expiry, vandal);

        }).fail(function(error) {

        $("#effp_status").html(

        $('#effp_status').html()+"

      • Error blocking "+vandal+": "+error+"
      • "

        );

        effp_effp_templateUser(sub_m.expiry, vandal);

        });

        }

        }

        if (sub_m.action == 'blocked') {

        text += '\n*\{\{effp|blocked|'+sub_m.blockeduser+'|'+sub_m.admin+'\}\} '+sub_m.cmt+' \~\~\~\~\n';

        effp_total++;

        }

        if (sub_m.action == 'fixed') {

        text += '\n*\{\{effp|fixed|'+sub_m.filteruser+'\}\} '+sub_m.cmt+' \~\~\~\~\n';

        effp_total++;

        }

        if (sub_m.action == 'alreadydone') {

        text += '\n*\{\{effp|alreadydone|'+sub_m.user+'\}\} '+sub_m.cmt+' \~\~\~\~\n';

        effp_total++;

        }

        if (sub_m.action == 'talk') {

        text += '\n*\{\{effp|talk|'+sub_m.talk+'\}\} '+sub_m.cmt+' \~\~\~\~\n';

        effp_total++;

        }

        if (sub_m.action == undefined) {

        // Something went wrong...

        continue;

        }

        if (sub_m.action != 'none' && sub_m.action != 'blocked' && sub_m.action != 'talk' && sub_m.action != 'fixed' && sub_m.action != 'alreadydone') {

        text += '\n*\{\{effp|'+sub_m.action+'\}\} '+sub_m.cmt+' \~\~\~\~\n';

        effp_total++;

        }

        pagetext = pagetext.substring(0, startindex) + text + pagetext.substring(endindex);

        }

        }

        var summary;

        if (effp_total==1) summary = "Responding to "+effp_total+" report";

        else summary = "Responding to "+effp_total+" reports";

        pagetext = pagetext.replace(/[\n\r]{3,}/g,"\n\n");

        pagetext = pagetext.replace(/[\n\r]+==/g,"\n\n==");

        effp_editPage(effp_effpPageName, pagetext, summary, false);

        $(document).ajaxStop(function () {

        $("#effp_finished_main").css("display", "");

        });

        }

        function effp_effp_templateUser(duration, vandal) {

        var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],

        d = new Date();

        var ApI = new mw.Api();

        ApI.postWithToken( "edit", {

        action: "edit",

        section: 'new',

        watchlist: "nochange",

        sectiontitle: monthNames[d.getMonth()] + ' ' + d.getFullYear(),

        summary: "You have been blocked from editing for abuse of editing privileges."+effp_ending,

        text: "\n{{subst:uw-block|time="+duration+"|sig=yes}}",

        title: "User talk:"+vandal

        }).done(function(editData) {

        $('#effp_status').html($('#effp_status').html()+'

      • Successfully posted block notice on User talk:'+vandal+'
      • ');

        }).fail(function(error) {

        $('#effp_status').html($('#effp_status').html()+'

      • Error posting block notice on User talk:'+vandal+'
      • ');

        });

        }

        function effp_effp_onActionChange(id) {

        var extra = $("#effp_effp_extra_" + id);

        var selectValue = $("#effp_effp_action_" + id).val();

        if (selectValue == 'none') extra.html('');

        if (selectValue == 'blocked' && !Morebits.userIsInGroup('sysop')) {

        extra.html('

        ');

        }

        if (selectValue == 'fixed') {

        extra.html('
        ');

        }

        if (selectValue == 'alreadydone') {

        extra.html('
        ');

        }

        if (selectValue == 'talk') {

        extra.html('
        ');

        }

        if (selectValue != 'none' && selectValue != 'blocked' && selectValue != 'fixed' && selectValue != 'talk' && selectValue != 'alreadydone') {

        extra.html('');

        }

        if (Morebits.userIsInGroup('sysop')) {

        if (selectValue == 'blocked') {

        extra.html('



        ');

        }

        }

        }

        function effp_effp_onActionChange2(id) {

        var blockuserdiv = $("#effp_effp_blockuserdiv_"+id);

        if (!document.getElementById('effp_effp_blockuser_'+id).checked) {

        blockuserdiv.html('');

        }

        else {

        var blockreasons = [

        { label: 'None', selected: true, value: '' },

        { label: 'Vandalism', value: 'Vandalism' },

        { label: 'Deliberately triggering the edit filter', value: 'Deliberately triggering the edit filter' },

        { label: 'Disruptive editing', value: 'Disruptive editing' },

        { label: 'Clearly not here to contribute to the encyclopedia', value: 'Clearly not here to contribute to the encyclopedia' },

        { label: 'Custom', value: 'custom' }

        ];

        var blockexpiration = [

        { label: '31 hours', selected: true, value: '31 hours' },

        { label: 'indefinite', value: 'indefinite' },

        { label: '24 hours', value: '24 hours' },

        { label: '48 hours', value: '48 hours' },

        { label: '72 hours', value: '72 hours' },

        { label: '1 week', value: '1 week' },

        { label: '2 weeks', value: '2 weeks' },

        { label: '3 weeks', value: '3 weeks' },

        { label: '1 month', value: '1 month' },

        { label: '2 months', value: '2 months' },

        { label: '3 months', value: '3 months' },

        { label: '6 months', value: '6 months' },

        { label: '1 year', value: '1 year' },

        { label: '2 years', value: '2 years' }

        ];

        blockuserdiv.html(''+effp_generateSelect('effp_effp_blockreason_'+id, blockreasons)+'
        '+effp_generateSelect('effp_effp_blockexpiry_'+id, blockexpiration)+'





        ');

        }

        }

        function displayMessage_inline(message, div, className) {

        var divtitle = '#' + div;

        if (message === '' || message === null) {

        $(divtitle).empty().hide();

        return true;

        } else {

        var $messageDiv = $(divtitle);

        $messageDiv.attr('style', "margin:1em;padding:0.5em 2.5%;border:solid 1px #ddd;background-color:#fcfcfc");

        if (!$messageDiv.length) {

        if (mw.util.$content.length) {

        mw.util.$content.prepend($messageDiv);

        } else {

        return false;

        }

        }

        if (typeof message === 'object') {

        $messageDiv.empty();

        $messageDiv.append(message);

        } else {

        $messageDiv.html(message);

        }

        $messageDiv.slideDown();

        return true;

        }

        }

        function effp_links() {

        var sectionHeaders = $("#mw-content-text h2");

        var offset = 1;

        sectionHeaders.each(function(index, element) {

        var not_archived = !$(element).next().length || $(element).next().html().indexOf('This is an archived discussion.') == -1;

        if (index > 0)

        var idtitle = "effp-review-" + (index - 1);

        $('

        ').insertAfter(element);

        var editSectionLink = $(element).children(".mw-editsection");

        if ((editSectionLink.length > 0) && (not_archived)) {

        editSectionLink = editSectionLink[0];

        var reviewlink = document.createElement("a");

        reviewlink.href = "#" + idtitle;

        $(reviewlink).attr("sectionIndex", index + offset);

        reviewlink.innerHTML = "Review report";

        var editSectionContents = $(editSectionLink).html();

        editSectionLink.innerHTML = "[";

        editSectionLink.appendChild(reviewlink);

        editSectionLink.innerHTML = editSectionLink.innerHTML + "] " + editSectionContents;

        reviewlink.onclick = (function() {

        $(reviewlink).remove();

        effp_init();

        });

        } else {

        offset = offset - 1;

        }

        });

        $('body [sectionIndex]').click((function() {

        $('body [sectionIndex]').each(function(i) {

        $(this).html("Reviewing reports...").contents().unwrap();

        });

        effp_init();

        }));

        }

        mw.loader.using(['ext.gadget.Twinkle', 'mediawiki.util', 'mediawiki.api', 'mediawiki.Title'], function() {

        $(document).ready( function () {

        setTimeout(function (){

        if ( mw.config.get( "wgPageName" ) === "Wikipedia:Edit_filter/False_positives/Reports" || mw.config.get( "wgPageName" ) === "User:DannyS712/EFFPRH/sandbox" ) {

        effp_links();

        }

        }, 1000);

        } );

        });

        //