User:Xiplus/js/APIedit.js

From Meta, a Wikimedia project coordination wiki

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.
function APIedit (pagename, summary, editfunc, minoredit = false, finish = undefined, testmode = false) {
	content = "";
	revisions = "";
	if (finish === undefined) {
		finish = function(){location.reload()};
	} else if (finish === false) {
		finish = function(){};
	}
    function getPageContent() {
		$.ajax({
			type: 'GET',
			url: mw.config.get("wgServer")+mw.config.get("wgScriptPath")+'/index.php?title='+encodeURIComponent(pagename)+'&action=raw',
			success: function success(data) {
				content = data;
				console.log(data);
				console.log("getPageContent Success");
				getPageRevision();
			},
			error: function error(e) {
				content = "";
				revisions = "";
				console.log("getPageContent Error!");
				editPage();
			}
		});
	}
	function getPageRevision() {
		$.ajax({
			type: 'POST',
			url: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php',
			data: {
				'action': 'query',
				'format': 'json',
				'prop': 'revisions',
				'rvprop': 'timestamp',
				'titles': pagename
			},
			success: function success(data) {
				console.log("getPageRevision Success");
				console.log(data);
				var info = data.query.pages;
				for (var key in info) {
					revisions = info[key].revisions[0].timestamp;
					break;
				}
				editPage();
			},
			error: function error(e) {
				alert("getPageRevision Error!");
			}
		});
	}
	function editPage() {
		content = editfunc(content);
		if (testmode) {
			console.log(content);
			return ;
		}
		temp = {
			type: 'POST',
			url: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php',
			data: {
				'action': 'edit',
				'format': 'json',
				'title': pagename,
				'summary': summary,
				'basetimestamp': revisions,
				'text': content,
				'token': mw.user.tokens.get('editToken')
			},
			success: function success(data) {
				console.log(data);
				console.log("editPage Success");
				finish();
			},
			error: function error(e) {
				alert("editPage Error!");
			}
		};
		if (minoredit) {
			temp.data.minor = "";
		}
		$.ajax(temp);
	}
	getPageContent();
}