МедияУики:Gadget-Mwbot.js

от Уикипедия, свободната енциклопедия

Забележка: За да се видят промените, необходимо е след съхраняване на страницата, кешът на браузъра да бъде изтрит.

  • Firefox / Safari: Задържа се клавиш Shift и се щраква върху Презареждане (Reload) или чрез клавишната комбинация Ctrl-Shift-R (⌘-Shift-R за Mac);
  • Google Chrome: клавишна комбинация Ctrl-Shift-R (⌘-Shift-R за Mac)
  • Internet Explorer: Задържа се клавиш Ctrl и се щраква върху Refresh или чрез клавишната комбинация CTRL-F5;
  • Opera: кешът се изчиства през менюто Tools → Preferences.


/**
 * Extends the functionality of an inputbox in a div.mwbot element.
 * Appends { { MAINPAGE/SUBPAGE } } to MAINPAGE upon creation of MAINPAGE/SUBPAGE
 */
var Memory = {
	memoryTtl: 86400, // last this many seconds
	allowedActions: ["transcludeSubpage"],
	delim1: "::",
	delim2: ";;",

	memorize: function(jsAction, jsArgs, mwPage, mwAction) {
		mw.cookie.set(
			Memory.getCookieName(mwPage, mwAction),
			jsAction + Memory.delim1 + jsArgs.join(Memory.delim2),
			new Date(Date.now() + Memory.memoryTtl*1000));
	},

	executeCurrentAction: function() {
		var cookieName = Memory.getCookieName(mw.config.get('wgPageName'), mw.config.get('wgAction'));
		var rawData = mw.cookie.get(cookieName);
		if (rawData) {
			mw.cookie.set(cookieName, null);
			var p = rawData.split(Memory.delim1);
			if ( $.inArray(p[0], Memory.allowedActions) !== -1 ) {
				eval(p[0] + '("'
					+ p[1].replace(/"/g, '\\"').split(Memory.delim2).join('", "')
					+ '")');
			}
		}
	},

	getCookieName: function (mwPage, mwAction) {
		return "on" + mwAction + "_" + mwPage;
	}
};


function attachMemorizers() {
	$('.mwbot').find('form[name="createbox"]').each(function() {
		attachMemorizer(this, false);
	});
	$('.mwbot-root').find('form[name="createbox"]').each(function() {
		attachMemorizer(this, true);
	});
}

function attachMemorizer(form, mainIsRoot) {
	var mainpage;
	var subpath = '';
	if (mainIsRoot) {
		var titleElements = form.title.value.split('/');
		mainpage = titleElements[0];
		subpath = (titleElements.length > 2) ?
			titleElements.slice(1, -1).join('/') + '/' :
			'';
	} else {
		mainpage = form.title.value.replace(/\/+$/g, '');
	}
	if ( mainpage == "" ) {
		mainpage = mw.config.get('wgPageName');
	}
	form.title.value = "";
	jQuery(form).submit(function() {
		if ( $.trim(this.title.value) == "" ) {
			alert( mw.msg("ta-emptyfield") );
			return false;
		}
		var subpage = this.title.value;
		var prefix = mainpage + "/" + subpath;
		var prefindex = subpage.indexOf(prefix);
		if ( prefindex == 0 ) { // the prefix is already there, remove it
			subpage = subpage.substr(prefix.length);
		}
		var fullpage = prefix + subpage;
		this.title.value = fullpage;
		// allow summary prefilling by new section
		$('<input>', {type: 'hidden', name: "preloadtitle", value: subpath + subpage}).appendTo(this);
		Memory.memorize("transcludeSubpage",
			[mainpage, subpath, subpage],
			fullpage.replace(/ /g, "_"), "view");
		return true;
	});
}

function transcludeSubpage(mainpage, subpath, subpage) {
	// subpath is okay to be empty.
	if ( $.trim(mainpage) == "" || $.trim(subpage) == "" ) {
		return;
	}
	var api = new mw.Api();
	var fullpage = mainpage + "/" + subpath + subpage;
	api.postWithToken("edit", {
		action: "edit",
		title: mainpage,
		summary: mw.msg("ta-summary", fullpage),
		appendtext: "\n{"+"{" + fullpage + "}}"
	});
}

$( function( $ ) {
	attachMemorizers();
	$(".done-by-script").hide();
	$(".showme").show();
	Memory.executeCurrentAction();
} );