Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
//Mass rollback function
//Written by John254 and modified/rewritten by Writ Keeper with modifications by TheDJ; original is at https://en.wikipedia.org/wiki/User:John254/mass_rollback.js
//Adapted from User:Mr.Z-man/rollbackSummary.js
//Instructions: Selecting the "rollback all" tab when viewing a user's contributions history
//will open all rollback links displayed there. (Use with caution)
if(typeof wkContribsCheckboxInit === "undefined")
{
	wkContribsCheckboxInit = false;
}

function rollbackEverythingWKMR(editSummary) 
{
	if(editSummary === null)
	{
		return false;
	}
	mw.loader.using( 'mediawiki.api' ).done( function()
	{
		var rbMetadata = {};
		rbMetadata.api = new mw.Api();
		rbMetadata.userName = mw.config.get("wgRelevantUserName");
		rbMetadata.ipRange = (rbMetadata.userName === null);
		rbMetadata.titleRegex = /title=([^&]+)/;
		rbMetadata.editSummary = editSummary;
		$("a[href*='action=rollback']").each(function(ind, el)
		{
			rollbackOneThingWKMR(el, rbMetadata);
		} );
	} );
	return false;
}
function rollbackSomeThingsWKMR(editSummary)
{
	if(editSummary === null)
	{
		return false;
	}
	mw.loader.using( 'mediawiki.api' ).done( function()
	{
		var rbMetadata = {};
		rbMetadata.api = new mw.Api();
		rbMetadata.userName = mw.config.get("wgRelevantUserName");
		rbMetadata.titleRegex = /title=([^&]+)/;
		rbMetadata.editSummary = editSummary;
		var rollbackList = $("input.revdelIds:checked").parents("li.mw-contributions-current").find("a[href*='action=rollback']");
		if(rollbackList.length <= 0)
		{
			mw.notify("You didn't select any edits that could be rolled back!");
			return;
		}
		$("input.revdelIds:checked").parents("li.mw-contributions-current").find("a[href*='action=rollback']").each(function(ind, el)
		{
			rollbackOneThingWKMR(el, rbMetadata);
		} );
	} );
}
function rollbackOneThingWKMR(edit, rbMetadata)
{
	var userName;
	//if we're in an anonymous IP range, we have to figure out each username on its own, since they might be different for each edit.
	if(rbMetadata.userName === null)
	{
		//the not clause is probably not necessary, but I'm including it just to be sure.
		userName = $(edit).parents("li:first").children("a.mw-anonuserlink").not(".mw-contributions-title").text();
	}
	else
	{
		userName = rbMetadata.userName;
	}
	var params = {};
	if( rbMetadata.editSummary != '' )
	{
		params.summary = rbMetadata.editSummary;
	}
	rbMetadata.api.rollback( decodeURIComponent(rbMetadata.titleRegex.exec(edit.href)[1]), userName, params).done( function()
	{
		$(edit).after("reverted");
		$(edit).remove();
	} );
}
$(document).ready(function()
{
	if(mw.config.get("wgCanonicalSpecialPageName") == "Contributions" && $("span.mw-rollback-link").length > 0)
	{
		mw.loader.using("mediawiki.util").done( function ()
		{
			mw.util.addPortletLink('p-cactions', '#', "rollback all", "ca-rollbackeverything", "rollback all edits displayed here");
			if(!wkContribsCheckboxInit)
			{
				if($("ul.mw-contributions-list .mw-revdelundel-link").length > 0)
				{
					$("ul.mw-contributions-list .mw-revdelundel-link").each(function(ind,el){
						if($(this).children("a").length > 0)
						{
							var revId = /ids=(\d+)/.exec($(this).children("a").attr("href"))[1];
							var pageTitle = /target=([^&]+)/.exec($(this).children("a").attr("href"))[1];
							$(el).prepend("<input type='checkbox' name='"+decodeURIComponent(pageTitle)+"' class='revdelIds' value='"+revId+"'>&nbsp;");
							$(el).children(".revdelIds").data("index", ind);
						}
					});
				}
				else
				{
					$("ul.mw-contributions-list a.mw-changeslist-date").each(function(ind,el){
						$(el).before("<input type='checkbox' class='revdelIds'>&nbsp;");
					});
				}
				wkContribsCheckboxInit = true;
			}
			mw.util.addPortletLink('p-cactions', '#', "rollback selected", "ca-rollbacksome", "rollback selected edits");
			$("#ca-rollbackeverything").click( function(event)
			{
				event.preventDefault();
				mw.loader.load( 'mediawiki.api' ); //start loading, while the user is in the prompt	
				return rollbackEverythingWKMR(prompt("Rollback all edits: Enter an edit summary, or leave blank to use the default (or hit Cancel to cancel the rollback entirely)"));
			});
			$("#ca-rollbacksome").click( function(event)
			{
				event.preventDefault();
				mw.loader.load( 'mediawiki.api' ); //start loading, while the user is in the prompt	
				return rollbackSomeThingsWKMR(prompt("Rollback selected edits: Enter an edit summary, or leave blank to use the default (or hit Cancel to cancel the rollback entirely)"));
			});
			$("#ca-rollbacksome").data("lastSelectedIndex", -1);

			$("input.revdelIds").off("click").click(
				function(ev)
				{
					var lastSelectedRevdel = $("#ca-rollbacksome").data("lastSelectedIndex");
					var newIndex = $(this).data("index");
					if(ev.shiftKey && lastSelectedRevdel >= 0)
					{
						var checkboxArray = $("input.revdelIds");
						var start = lastSelectedRevdel;
						var stop = newIndex;
						if(start < stop)
						{
							for(var i = start; i < stop; i++)
							{
								if(i != lastSelectedRevdel)
								{
									$(checkboxArray[i]).prop("checked", !($(checkboxArray[i]).prop("checked")));
								}
							}
						}
						else
						{
							for(var i = start; i > stop; i--)
							{
								if(i != lastSelectedRevdel)
								{
									$(checkboxArray[i]).prop("checked", !($(checkboxArray[i]).prop("checked")));
								}
							}
						}
					}
					 $("#ca-rollbacksome").data("lastSelectedIndex", newIndex);
				});

		});
	}
});


/**
 * Extra buttons in toolbar
 * @stats [[File:Krinkle_InsertWikiEditorButton.js]]
 */
$.ajax({ dataType: 'script', cache: true,
	url: 'https://meta.wikimedia.org/w/index.php?title=User:Krinkle/Scripts/InsertWikiEditorButton.js&action=raw&ctype=text/javascript'
}).then(function () {
 
	krInsertWikiEditorButton({
		id: "mw-customeditbutton-myspecialbutton0",
		icon: "//upload.wikimedia.org/wikipedia/commons/thumb/7/76/Edit_add_nobg.svg/20px-Edit_add_nobg.svg.png",
		label: 'сущ-ru',
		insertBefore: '\{\{подст:У:Cinemantique/сущ|',
		insertAfter: '|з=|def=|morf={{морфо-ru|}}|biblio=|cat=|}}',
		sampleText: ''
	});
 
	krInsertWikiEditorButton({
		id: "mw-customeditbutton-myspecialbutton01",
		icon: "//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Add.svg/20px-Add.svg.png",
		label: '? ru',
		insertBefore: '\{\{подст:У:Cinemantique/RU|',
		insertAfter: '|p=|def=|morf={{морфо-ru|}}|biblio=|cat=|}}',
		sampleText: ''
	});
 
	krInsertWikiEditorButton({
		id: "mw-customeditbutton-myspecialbutton02",
		icon: "//upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Artsbuilderexecute.svg/20px-Artsbuilderexecute.svg.png",
		label: 'ПОМЕТА',
		insertBefore: '{{',
		insertAfter: '.|ru}}',
		sampleText: 'устар'
	});
 
	krInsertWikiEditorButton({
		id: "mw-customeditbutton-myspecialbutton03",
		icon: "//upload.wikimedia.org/wikipedia/commons/thumb/2/29/Bottom.svg/20px-Bottom.svg.png",
		label: 'библио',
		insertBefore: '{{Леонтьева, Щетинина}}',
		insertAfter: '',
		sampleText: ''
	});
 
	krInsertWikiEditorButton({
		id: "mw-customeditbutton-myspecialbutton04",
		icon: "//upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Clock.svg/20px-Clock.svg.png",
		label: 'дат',
		insertBefore: 'Фиксируется с {{дат|',
		insertAfter: '|ru}} года.',
		sampleText: '2020'
	});
 
	krInsertWikiEditorButton({
		id: "mw-customeditbutton-myspecialbutton05",
		icon: "//upload.wikimedia.org/wikipedia/commons/thumb/5/52/Oxygen480-status-audio-volume-high.svg/20px-Oxygen480-status-audio-volume-high.svg.png",
		label: 'pron',
		insertBefore: 'LL-Q7737 (rus)-Cinemantique-{{subst:',
		insertAfter: 'PAGENAME}}.wav',
		sampleText: ''
	});
 
 	krInsertWikiEditorButton({
		id: "mw-customeditbutton-myspecialbutton1",
		icon: "//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Parentesi_Tonde.svg/20px-Parentesi_Tonde.svg.png",
		label: 'Добавить скобки',
		insertBefore: '(',
		insertAfter: ')',
		sampleText: ''
	});
 
});

//
function wikify()
{
	wpTextbox1 = document.editform.wpTextbox1;
	var txt = wpTextbox1.value;
	// var words = wgTitle.split(/[ .,;:!?—]+/);


	r(/\{\{сущ ru[^|]*(.+)(\|основа=)(\|основа1=)\|основа2=\}\}/gm, '{{сущ-ru||$1}}');
	r(/\{\{сущ ru[^|]*\n\|основа=.*\n\|основа1=\n(.*)\n\}\}/gm, '{{сущ-ru||$1}}');

	wpTextbox1.value = txt;

	function r(regExp, replaceTo) {
		txt = txt.replace(regExp, replaceTo);
	}
	
	function findall(regExp, func) {
		var matches = txt.match(regExp);
		if (matches) {
			for (var i = 0; i < matches.length; i++) {
				func(matches[i]);
			}
		}
	}
	
}

function addMyButton (){
  prependFuncButton("//upload.wikimedia.org/wikipedia/commons/f/f9/Button_fett.png",
   'Форматирование', wikify);
}

// Служебная функция, добавляет к тулбару кнопку спереди
function prependFuncButton(img, tip, func){
 var toolbar = document.getElementById('toolbar') || document.getElementById('wikiEditor-ui-toolbar');
 if (!toolbar) return
 first = toolbar.firstChild;
 var i=document.createElement('img')
 i.src=img; i.alt=tip;  i.title=tip; i.onclick=func; i.style.cursor='pointer'
 toolbar.insertBefore(i, first);
}

var customizeToolbar = function() {
    $( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
        'section': 'main',
        'groups': {
            'user' : {
                'tools': {
                    'format': {
                        label: 'Format', // or use labelMsg for a localized label, see above
                        filters: [ 'body.ns-0' ],
                        type: 'button',
                        icon: '//upload.wikimedia.org/wikipedia/commons/a/a0/Toolbaricon_bold_F-1.png',
                        action: {
                            'type': 'callback',
                            'execute': wikify // FormatEdit
                        }
                    }
                }
            }
        }
    } );
};
 
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar . . . */
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
        mw.loader.using( 'user.options', function () {
                if ( mw.user.options.get('usebetatoolbar') ) {
                        mw.loader.using( 'ext.wikiEditor', function () {
                                $(document).ready( customizeToolbar );
                        } );
                } else {
                    $(document).ready( addMyButton );                    
                }
        } );
}