Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/*
 
* Usage :Include a call to <code>addForceSummary()</code> in your page load function</s>
* Possible improvements :Make any form submission force a summary. Note that requiring an edit summary on preview or diff is not useful since "save" still needs to gain focus or be clicked before a commit can occur.
 
A heavily modified and expanded version of this code is now in use across the entire [[SourceWatch]] wiki. Here's a [http://www.sourcewatch.org/index.php?title=MediaWiki:Monobook.js#Edit_summary_stuff direct link to the code]. A particular enhancement in the SourceWatch code is that it provides a dropdown next to the edit summary textfield containing common edit summaries. Selecting one of these automatically inserts that summary into the textfield. The code also examines which subproject of SourceWatch the page belongs to, and adds an appropriate prefix to the edit summary.
 
<source lang=javascript> */
 
importScript('User:Porchcrop/rollback.js');
rollbackSummaryDefault = "Reverted edit $3 by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) to last version by $1 using [[WP:ROLL|rollback]]"

var whatHref; 


function locateHref(arraynum){ 
var arraynum; 
whatHref = document.links[arraynum].href;
if(document.links[arraynum].innerHTML== "diff"){ 
//alert(whatHref); 
document.links[arraynum].id="linky";
document.links[arraynum].innerHTML="HAI <iframe src='" + whatHref + "' id='frame'></iframe>";
var div = document.createElement("iframe");
//div.setAttribute("position","absolute");
//div.setAttribute("name", "MouseX);
//div.setAttribute("id","frame");
//div.setAttribute("width","40px");
//div.setAttribute("height","10px");
//div.setAttribute("src",whatHref);
//document.body.appendChild(div);
} else {
//alert("lol, beans");
document.links[arraynum].id="frame";
}
} 

function doodledoodle(){
 for (i=0;i<10;i++){
  locateHref(i);
 }
}
var d=new Date();
 
var isCtrl = false;
document.onkeyup=function(e){
	if(e.which == 17) isCtrl=false;
}
document.onkeydown=function(e){
	if(e.which == 17) isCtrl=true;
	if(e.which == 86 && isCtrl == true) {
		    document.editform.wpSummary.value = "Reverting possible vandalism";
    document.editform. wpMinoredit.checked = true;
    document.editform.submit();
 
		return false;
	}
	if(e.which == 90 && isCtrl == true) {
		    document.editform.wpSummary.value = "Reverting definite vandalism";
    document.editform. wpMinoredit.checked = true;
    document.editform.submit();
 
		return false;
	}
	if(e.which == 87 && isCtrl == true) {
		    document.editform.wpSummary.value = "Warning of unhelpful edits";
    document.editform. wpMinoredit.checked = true;
    document.editform.submit();
 
		return false;
	}
};
function addTab(url, name, id, title, key) {
    return mw.util.addPortletLink('p-cactions', url, name, id, title, key);
};


addOnloadHook(
    function () {
        if (wgPageName.indexOf("alk:") > 0) 
        {
        addTab("javascript:doQtwelcome()", "hi", "ca-wikify", "Mark for wikification");
        }
        else
        {
        addTab("javascript:doQwikify()", "wikify", "ca-wikify", "Mark for wikification");
        addTab("javascript:doQnonsense()", "wtf", "ca-wikify", "Mark for wikification");
        addTab("javascript:doQtag('db-nn')", "nn", "ca-wikify", "Mark for wikification");
        addTab("javascript:doQspam()", "spam", "ca-wikify", "Mark for wikification");
         addTab("http://en.wikipedia.org/wiki/Special:Random/user", "surf", "ca-wikify", "Mark for wikification");

        }
    }
);

function doQtag(wut) {
    window.parent.location = "http://en.wikipedia.org/w/index.php?title=" + wgPageName + "&action=edit";
    document.editform.wpTextbox1.value = "{" +"{" + wut + "|date=" + d+ "}}\n\n" + document.editform.wpTextbox1.value;
    document.editform.wpSummary.value = "Auto-Tagging {{" + wut + "}} using Javascript";
    document.editform. wpMinoredit.checked = true;
    document.editform.submit();
};
 
function doQwikify() {
    window.parent.location = "http://en.wikipedia.org/w/index.php?title=" + wgPageName + "&action=edit";
    document.editform.wpTextbox1.value = "{" + "{wikify|date=" + d+ "}}\n\n" + document.editform.wpTextbox1.value;
    document.editform.wpSummary.value = "Auto-Tagging {{Wikify}} using Javascript";
    document.editform. wpMinoredit.checked = true;
    document.editform.submit();
};
function doQnonsense() {
    window.parent.location = "http://en.wikipedia.org/w/index.php?title=" + wgPageName + "&action=edit";
    document.editform.wpTextbox1.value = "{" + "{db-nonsense}}\n\n" + document.editform.wpTextbox1.value;
    document.editform.wpSummary.value = "/*meaningless garbage*/ Auto-Tagging using Javascript";
    document.editform. wpMinoredit.checked = true;
    document.editform.submit();
};
 
function doQspam() {
    window.parent.location = "http://en.wikipedia.org/w/index.php?title=" + wgPageName + "&action=edit";
    document.editform.wpTextbox1.value = "{" + "{db-spam}}\n\n" + document.editform.wpTextbox1.value;
    document.editform.wpSummary.value = "Auto-Tagging /*blatant ad*/ using Javascript";
    document.editform. wpMinoredit.checked = true;
    document.editform.submit();
};
 
function doQtwelcome() {
    window.parent.location = "http://en.wikipedia.org/w/index.php?title=" + wgPageName + "&action=edit";
    document.editform.wpTextbox1.value = "{" + "{subst:welcome}}\n\n" + document.editform.wpTextbox1.value;
    document.editform.wpSummary.value = "Hi!";
    document.editform. wpMinoredit.checked = true;
    document.editform.submit();
};
 
function addForceSummary()
{
    if(!/&action=edit/.test(window.location.href) && !/&action=submit/.test(window.location.href)) return;
    if(/&section=new/.test(window.location.href)) return;
    if(!document.forms.editform) return;
    document.forms.editform.wpSave.onclick = forceSummary;
    // The second invocation of this will cause extra annoyance if there is no edit summary present. If there *is* an edit summary, the dialog box will not appear.
    document.forms.editform.wpSave.onfocus = forceSummary;
};
 
function forceSummary()
{
    if(!document.forms.editform.wpSummary.value.replace(/^(?:\/\\*.*\\*\/)? *(.*) *$/,'$1'))
    {
        var r = prompt('Are you sure you want to submit without adding a summary?\nTo add a summary, type it in the box below:','[[User Talk:Flyingidiot|(fi)]]');
        if(r == null) { return false; }
        document.forms.editform.wpSummary.value = r;
    }
    return true;
};
 
$(addForceSummary);
/*split user warnings and deletions <nowiki>*/
 
function getUserName() {
  switch (wgCanonicalNamespace) {
    case 'User': 
/*<![CDATA[*/
addButton('http://upload.wikimedia.org/wikipedia/commons/3/33/Button_exclamation.png','delete your own user page','{{','}}','subst:user:flyingidiot/2','mw-editbutton-media');
/*]]>*/;
break
case 'User_talk': 
/*<![CDATA[*/
addButton('http://upload.wikimedia.org/wikipedia/commons/f/fc/Important-2.svg','autobio','{{subst:User:Flyingidiot/wb1|','}}','Article','mw-editbutton-media');
addButton('http://upload.wikimedia.org/wikipedia/commons/4/44/Warn1.png','First User Warning Vandal','{{subst:uw-vandalism1|','|--~~~~}}','Article','mw-editbutton-media');
addButton('http://upload.wikimedia.org/wikipedia/commons/e/e4/Warn2.png','Second User Warning Vandal','{{subst:uw-vandalism2|','|--~~~~}}','article','mw-editbutton-math');
addButton('http://upload.wikimedia.org/wikipedia/commons/8/84/Warn3.png','Third User Warning Vandal','{{subst:uw-vandalism3|','|--~~~~}}','Article','mw-editbutton-nowiki');
addButton('http://upload.wikimedia.org/wikipedia/commons/b/bd/Warn4.png','Final User Warning Vandal','{{subst:uw-vandalism4|','|--~~~~}}','article','mw-editbutton-nowiki');
addButton('http://upload.wikimedia.org/wikipedia/commons/7/76/Testwarn1.png','testpage userwarn 1','{{subst:Uw-test1|','|--~~~~}}','Article','mw-editbutton-signature');
addButton('http://upload.wikimedia.org/wikipedia/commons/0/03/Testwarn2.png','testpage userwarn 2','{{subst:uw-test2|','|--~~~~}}','Article','mw-editbutton-signature');
addButton('http://upload.wikimedia.org/wikipedia/commons/7/72/Testwarn3.png','testpage userwarn 3','{{subst:Uw-test3|','|--~~~~}}','Article','mw-editbutton-signature');
addButton('http://upload.wikimedia.org/wikipedia/commons/9/9d/Testwarn4.png','testpage userwarn 4','{{subst:uw-test4|','|--~~~~}}','Article','mw-editbutton-signature');
addButton('http://upload.wikimedia.org/wikipedia/commons/4/48/Deletewarn1.png','Userwarn delete 1','{{subst:uw-delete1|','|--~~~~}}','Article','mw-editbutton-table');
addButton('http://upload.wikimedia.org/wikipedia/commons/7/7d/Deletewarn2.png','Userwarn delete 2','{{subst:uw-delete2|','|--~~~~}}','Article','mw-editbutton-table');
addButton('http://upload.wikimedia.org/wikipedia/commons/0/07/Deletewarn3.png','Userwarn delete 3','{{subst:uw-delete3|','|--~~~~}}','Article','mw-editbutton-table');
addButton('http://upload.wikimedia.org/wikipedia/commons/f/f4/Deletewarn4.png','Userwarn delete 4','{{subst:uw-delete4|','|--~~~~}}','Article','mw-editbutton-table');
addButton('http://upload.wikimedia.org/wikipedia/commons/c/cd/Warncreate1.png','Userwarn create nonsense 1','{{subst:Uw-create1|','| --~~~~}}','Article','mw-editbutton-table');
addButton('http://upload.wikimedia.org/wikipedia/commons/0/01/Warncreate2.png','Userwarn create nonsense 2','{{subst:Uw-create2|','| --~~~~}}','Article','mw-editbutton-table');
addButton('http://upload.wikimedia.org/wikipedia/commons/0/09/Warncreate3.png','Userwarn create nonsense 3','{{subst:Uw-create3|','|--~~~~}}','Article','mw-editbutton-link');
addButton('http://upload.wikimedia.org/wikipedia/commons/0/00/Warncreate4.png','Userwarn create nonsense 4','{{subst:Uw-create4|','|--~~~~}}','Article','mw-editbutton-link');/*]]>*/;
addButton('http://upload.wikimedia.org/wikipedia/commons/a/a4/Spam1.png','spam userwarn 1','{{subst:Uw-spam1|','|--~~~~}}','Article','mw-editbutton-signature');
addButton('http://upload.wikimedia.org/wikipedia/commons/2/27/Spam2.png','spam userwarn 2','{{subst:Uw-spam2|','|--~~~~}}','Article','mw-editbutton-signature');
addButton('http://upload.wikimedia.org/wikipedia/commons/0/02/Spam3.png','spam userwarn 3','{{subst:Uw-spam3|','|--~~~~}}','Article','mw-editbutton-signature');
addButton('http://upload.wikimedia.org/wikipedia/commons/f/fb/Spam4.png','spam userwarn 4','{{subst:Uw-spam4|','|--~~~~}}','Article','mw-editbutton-signature');
break
    default:
/*<![CDATA[*/
addButton('http://upload.wikimedia.org/wikipedia/commons/3/33/Button_exclamation.png','FIdeletion','{{user:Flyingidiot/del|','}}','|','mw-editbutton-media');
addButton('http://upload.wikimedia.org/wikipedia/commons/3/3d/ButtonSpam.png','Delete spam','{{','}}','Db-spam','mw-editbutton-bold');
addButton('http://upload.wikimedia.org/wikipedia/commons/c/ca/NonsenseDelete.png','Delete nonsense','{{','}}','Db-nonsense','mw-editbutton-italic');
addButton('http://upload.wikimedia.org/wikipedia/commons/2/28/Nonnotable.png','Delete unnotable','{{','}}','db-bio','mw-editbutton-link');
addButton('http://upload.wikimedia.org/wikipedia/commons/6/62/Button_stop.png','Delete for a special reason','{{db','}}','|','Reason','mw-editbutton-extlink');
addButton('http://upload.wikimedia.org/wikipedia/commons/e/e2/Button_contexto.png','Delete empty or no context','{{','}}','db-nocontext','mw-editbutton-headline');
addButton('http://upload.wikimedia.org/wikipedia/commons/3/3b/Button_crocs.png','Delete attack page','{{','}}','db-attack','mw-editbutton-image');
addButton('http://upload.wikimedia.org/wikipedia/commons/c/cc/Bouton_Vandale2.png','Delete blanked','{{','}}','db-blankcsd','mw-editbutton-image');
addButton('http://commons.wikimedia.org/wiki/Image:Wiki_test.GIF','Delete test','{{','}}','db-test','mw-editbutton-image');
addButton('http://upload.wikimedia.org/wikipedia/commons/6/62/Button_desambig.png','Disambiguate the page','{{disambig','}}','','mw-editbutton-hr');
/*]]>*/;
  }
};
 
function urldecode (str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // +      input by: Ratheous
    // +   improved by: Orlando
    // %        note 1: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin van Zonneveld!'
    // *     example 2: urldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F');
    // *     returns 2: 'http://kevin.vanzonneveld.net/'
    // *     example 3: urldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a');
    // *     returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'
 
    var hash_map = {}, ret = str.toString(), unicodeStr='', hexEscStr='';
 
    var replacer = function (search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
 
    // The hash_map is identical to the one in urlencode.
    hash_map["'"]   = '%27';
    hash_map['(']   = '%28';
    hash_map[')']   = '%29';
    hash_map['*']   = '%2A';
    hash_map['~']   = '%7E';
    hash_map['!']   = '%21';
    hash_map['%20'] = '+';
    hash_map['\u00DC'] = '%DC';
    hash_map['\u00FC'] = '%FC';
    hash_map['\u00C4'] = '%D4';
    hash_map['\u00E4'] = '%E4';
    hash_map['\u00D6'] = '%D6';
    hash_map['\u00F6'] = '%F6';
    hash_map['\u00DF'] = '%DF';
    hash_map['\u20AC'] = '%80';
    hash_map['\u0081'] = '%81';
    hash_map['\u201A'] = '%82';
    hash_map['\u0192'] = '%83';
    hash_map['\u201E'] = '%84';
    hash_map['\u2026'] = '%85';
    hash_map['\u2020'] = '%86';
    hash_map['\u2021'] = '%87';
    hash_map['\u02C6'] = '%88';
    hash_map['\u2030'] = '%89';
    hash_map['\u0160'] = '%8A';
    hash_map['\u2039'] = '%8B';
    hash_map['\u0152'] = '%8C';
    hash_map['\u008D'] = '%8D';
    hash_map['\u017D'] = '%8E';
    hash_map['\u008F'] = '%8F';
    hash_map['\u0090'] = '%90';
    hash_map['\u2018'] = '%91';
    hash_map['\u2019'] = '%92';
    hash_map['\u201C'] = '%93';
    hash_map['\u201D'] = '%94';
    hash_map['\u2022'] = '%95';
    hash_map['\u2013'] = '%96';
    hash_map['\u2014'] = '%97';
    hash_map['\u02DC'] = '%98';
    hash_map['\u2122'] = '%99';
    hash_map['\u0161'] = '%9A';
    hash_map['\u203A'] = '%9B';
    hash_map['\u0153'] = '%9C';
    hash_map['\u009D'] = '%9D';
    hash_map['\u017E'] = '%9E';
    hash_map['\u0178'] = '%9F';
    hash_map['\u00C6'] = '%C3%86';
    hash_map['\u00D8'] = '%C3%98';
    hash_map['\u00C5'] = '%C3%85';
 
    for (unicodeStr in hash_map) {
        hexEscStr = hash_map[unicodeStr]; // Switch order when decoding
        ret = replacer(hexEscStr, unicodeStr, ret); // Custom replace. No regexing
    }
 
    // End with decodeURIComponent, which most resembles PHP's encoding functions
    ret = decodeURIComponent(ret);
 
    return ret;
};
 
function getValue(varname)
{
  // First, we load the URL into a variable
  var url = window.location.href;
 
  // Next, split the url by the ?
  var qparts = url.split("?");
 
  // Check that there is a querystring, return "" if not
  if (qparts.length == 0)
  {
    return "";
  }
 
  // Then find the querystring, everything after the ?
  var query = qparts[1];
 
  // Split the query string into variables (separates by &s)
  var vars = query.split("&");
 
  // Initialize the value with "" as default
  var value = "";
 
  // Iterate through vars, checking each one for varname
  for (i=0;i<vars.length;i++)
  {
    // Split the variable by =, which splits name and value
    var parts = vars[i].split("=");
 
    // Check if the correct variable
    if (parts[0] == varname)
    {
      // Load value into variable
      value = parts[1];
 
      // End the loop
      break;
    }
  }
 
  // Convert escape code
  value = unescape(value);
 
  // Convert "+"s to " "s
  value.replace(/\+/g," ");
  value = urldecode(value);
  // Return the value
  return value;
};
 
 
$(getUserName());
$(doodledoodle());

/* </source> */