MediaWiki:Gadget-saveandedit.js

From AnOtherWiki, the free encyclopedia written by, for, and about the Otherkin community.

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
////////////////////////////////////////////////

// To use that script add following line to your [[Special:MyPage/skin.js]] (without the //):

// importScript('User:Mabdul/saveandedit.js'); //adding a new button next to the edit field for saving and editing

////////////////////////////////////////////////

//adding a new buttom

if(document.getElementsByClassName('editButtons')[0]!='undefined')

{

	document.getElementsByClassName('editButtons')[0].innerHTML += '<input type="button" id="saveandedit_button" name="saveandedit_button" value="Save and edit" onclick="saveandedit_prompt()" />';

}




//function for returning

function saveandedit_prompt(){

	//for displaying message on fail:

	form = '<div id="saveandedit_status"></div>';

	jsMsg(form);

	var newtext = document.editform.wpTextbox1.value;

	var summary = document.editform.wpSummary.value;

	var notminor = document.editform.wpMinoredit.checked;

	summary += ' (using [[User:mabdul/saveandedit.js|Save&Edit]])'; //some advertising




	//get the token

	var req = sajax_init_object();

	req.open("GET", wgScriptPath + "/api.php?action=query&prop=info&indexpageids=1&intoken=edit&format=json&titles="+encodeURIComponent(wgPageName), false);

	req.send(null);

	var response = eval('(' + req.responseText + ')');

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

	token = response['query']['pages'][pageid]['edittoken'];

	delete req;




	//Check if only a section will be edited

	var url = String(window.location);

	var section = "no";

	if(window.location.search != ""){

		var undef = url.split("?");

		var args  = undef[1].split("&");

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

			var a = args[i].split("=");

			if(a[0] == 'section')

				section = a[1];

		}

	}




	//do the edit

	var req = sajax_init_object();

	var params = "action=edit";

	if(section!="no")

		params += "&section="+section;

	params += "&format=json&token="+encodeURIComponent(token)+"&title="+encodeURIComponent(wgPageName)+"&text="+encodeURIComponent(newtext)+"&notminor="+notminor+"&summary="+encodeURIComponent(summary);

	url = wgScriptPath + "/api.php";

	req.open("POST", url, true);

	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

	req.setRequestHeader("Content-length", params.length);

	req.setRequestHeader("Connection", "close");

	req.onreadystatechange = function() {

		if(req.readyState == 4 && req.status == 200) {

			response = eval('(' + req.responseText + ')');

			try {

				if (response['edit']['result'] == "Success") {

					//reload on the success

					window.location.reload();

				} else {

					//or handle out the error message

					document.getElementById('saveandedit_status').innerHTML = '<div style="color:red"><b>Edit failed on <a href="'+wgArticlePath.replace("$1", encodeURI(wgPageName))+'" title="'+wgPageName+'">'+wgPageName+'</a></b></div>. Best try it again (<b>Don\'t forget to copy the text</b>). Error info:' +response['error']['code'] + ' : ' + response['error']['info'];

				}

			}

			catch(err) {

				document.getElementById('saveandedit_status').innerHTML = '<div style="color:red"><b>Edit failed on <a href="'+wgArticlePath.replace("$1", encodeURI(wgPageName))+'" title="'+wgPageName+'">'+wgPageName+'</a></b></div>';

			}

			delete req;

		}

	};

	req.send(params);

}