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

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
/**  * Rename Wizard Tools  */     var wvRenameWizardPhrases = { 	'current-info-anonymous': 'Login to view, or enter a name below', 	'input-username': 'Username: ', 	'input-username-from': 'Merge from (old username): ', 	'input-username-to': 'Merge to (new username): ', 	'input-wikilist': 'On Wikis: ', 	'merge-status-notavailable': 'Global Name is Taken', 	'merge-status-merged': 'Your Account is Merged', 	'info-status': 'Status: ', 	'info-gid': 'Global Id: ', 	'info-date': 'Merge Date: ', 	'info-homewiki': 'Home Wiki: ', 	'mergestatus-dne': 'User does not exist', 	'mergestatus-attached': 'Attached', 	'mergestatus-unattached': 'Unattached', 	'result-label-username': 'Result for Username: ', 	'result-label-confirmpost': 'Your request will be submitted as follows', 	'result-label-status-ok': 'Request Submitted', 	'result-label-status-error': 'There was an error submitting your request', 	'result-username-available': 'This name is available!', 	'result-username-unavailable': 'Sorry, this name is already taken.', 	'result-username-nonexist': '(no matching global name)', 	'action-link-createaccount': 'Create Account Now', 	'action-link-confirm': 'Confirm', 	'action-link-request': 'Make Request', 	'label-section-rename': 'Request Rename', 	'req-text-title': 'Request for Rename', 	'req-text-user': 'User "', 	'req-text-action1': '" is requesting that username "', 	'req-text-action2': '" is renamed and merged with the username "', 	'req-text-wikilist': '"', 	'icon-ok': '<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Approve_icon.svg/30px-Approve_icon.svg.png"></img>', 	'icon-bad': '<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/42/Stop_x_nuvola.svg/30px-Stop_x_nuvola.svg.png"></img>', 	'icon-loading': '<div style="text-align: center"><img alt="saving report" src="https://upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif"></img></div>', }     function wvRenameWizard() {   	this.requestFromName = ''; 	this.requestToName = ''; 	this.requestWikis = {}; 	this.requestText = '';   	this.allWikis = { 		'enwikivoyage':'en.wikivoyage.org', 		'dewikivoyage':'de.wikivoyage.org', 		'itwikivoyage':'it.wikivoyage.org', 		'frwikivoyage':'fr.wikivoyage.org', 		'svwikivoyage':'sv.wikivoyage.org', 		'nlwikivoyage':'nl.wikivoyage.org', 		'ruwikivoyage':'ru.wikivoyage.org', 	};   	this.setupCurrentInfo = function( divid ) { 		var currentSite = mw.config.get( 'wgSiteName' ); 		var currentUser =  mw.config.get( 'wgUserName' ); 		if ( currentUser == null ) { 			var infobox = $( "#"+divid ); 			infobox.html( '' ); 			infobox.append( $('<p></p>').text( wvRenameWizardPhrases['current-info-anonymous'] ) ); 		} else { 			this.getGlobalInfo( currentUser, divid, this.fillGlobalInfo ); 		} 	}     	this.fillGlobalInfo = function( divid, username, guid, regDate, homeWiki, attachedWikis, unatachedWikis ) {   		var currentSite = mw.config.get( 'wgSiteName' ); 		var infobox = $( "#"+divid ); 		var attachedMsg = '';   		infobox.html( '' ); 		infobox.append( $('<h3></h3>').text( wvRenameWizardPhrases['input-username'] + username ) );     		if ( guid > 0 ) { 			if ( attachedWikis[currentSite] == null ) { 				// Global account exists, but is not attached here so we assume this user cannot use it 				attachedMsg = wvRenameWizardPhrases['merge-status-notavailable']; 			} else { 				// Global account exists, and it's attached here, so we assume it belongs to this user 				attachedMsg = wvRenameWizardPhrases['merge-status-merged']; 			}   			var userdata = $('<ul></ul>'); 			userdata.append( $('<li></li>').text( wvRenameWizardPhrases['info-status'] + attachedMsg ) ); 			userdata.append( $('<li></li>').text( wvRenameWizardPhrases['info-gid'] + guid ) ); 			userdata.append( $('<li></li>').text( wvRenameWizardPhrases['info-date'] + regDate ) ); 			//userdata.append( $('<li></li>').text( wvRenameWizardPhrases['info-homewiki'] + homeWiki ) ); 			infobox.append( userdata );   			var currentWikiStatus = { 				'enwikivoyage': wvRenameWizardPhrases['mergestatus-dne'], 				'dewikivoyage':wvRenameWizardPhrases['mergestatus-dne'], 				'itwikivoyage':wvRenameWizardPhrases['mergestatus-dne'], 				'svwikivoyage':wvRenameWizardPhrases['mergestatus-dne'], 				'nlwikivoyage':wvRenameWizardPhrases['mergestatus-dne'], 				'enwiki83':wvRenameWizardPhrases['mergestatus-dne'], 				'dewiki83':wvRenameWizardPhrases['mergestatus-dne'] 			};   			var allWikis = window.gRW.allWikis;   			for ( var ndx = 0; ndx < attachedWikis.length; ++ndx ) { 				currentWikiStatus[ attachedWikis[ndx]['wiki'] ] = wvRenameWizardPhrases['mergestatus-attached']; 			}   			for ( var ndx = 0; ndx < unatachedWikis.length; ++ndx ) { 				currentWikiStatus[ unatachedWikis[ndx]['wiki'] ] = wvRenameWizardPhrases['mergestatus-unattached']; 			}   			var wikistatus = $('<ul></ul>');   			for (var wiki in allWikis) { 				wikistatus.append( $('<li></li>').text( allWikis[wiki] + ": " + currentWikiStatus[wiki] ) ); 			} 			infobox.append( $('<p></p>').text('Wikis') ); 			infobox.append( wikistatus ); 		} else { 			infobox.append( $('<p></p>').text( wvRenameWizardPhrases['result-username-nonexist'] ) ); 		}   	}   	this.showSearchResult = function( divid, username, guid, regDate, homeWiki, attachedWikis, unatachedWikis ) {   		var searchbox = $( "#"+divid ); 		searchbox.html( '' ); 		searchbox.append( $('<h3></h3>').text( wvRenameWizardPhrases['result-label-username'] + username ) );   		if ( guid == 0 ) { 			searchbox.append( $( wvRenameWizardPhrases['icon-ok'] ) ); 			searchbox.append( $( '<p></p>' ).text( wvRenameWizardPhrases['result-username-available'] ) );   			var createLink = $( '<a></a>' ); 			createLink.attr( 'href', "index.php?title=Special:UserLogin&type=signup&wpName=" + username ); 			createLink.text( wvRenameWizardPhrases['action-link-createaccount'] ); 			searchbox.append( createLink );   		} else { 			searchbox.append( $( wvRenameWizardPhrases['icon-bad'] ) ); 			searchbox.append( $( '<p></p>' ).text( wvRenameWizardPhrases['result-username-unavailable'] ) ); 		}   	}   	this.fillRequest = function( divid, username, guid, regDate, homeWiki, attachedWikis, unatachedWikis ) {   		window.gRW.requestFromName = username; 		window.gRW.requestWikis = unatachedWikis; 		window.gRW.requestText = window.gRW.createRequestText( username, window.gRW.requestToName, unatachedWikis );   		var reqbox = $( "#"+divid ); 		reqbox.html( '' );   		reqbox.append( $('<p></p>').text( wvRenameWizardPhrases['result-label-confirmpost'] ) );   		var requestLines = window.gRW.requestText.split("\n");   		for ( var ndx = 0; ndx < requestLines.length; ++ndx ) { 			reqbox.append( $('<p></p>').text( requestLines[ndx] ) ); 		}   		var confLink = $( '<a></a>' ); 		confLink.attr('href', 'javascript:postRenameRequest( "renameWizardMergeConfirm" )' ); 		confLink.text( wvRenameWizardPhrases['action-link-confirm'] );   		reqbox.append( confLink ); 	}   	this.createRequestText = function (  fromname, toname, wikis ) { 		var currUser = mw.user.getName(); 		var ret = "== " + wvRenameWizardPhrases['req-text-title'] + " '"+fromname+"' > '"+toname+"' ==\n"; 		ret += wvRenameWizardPhrases['req-text-user'] + currUser + wvRenameWizardPhrases['req-text-action1'] + fromname + wvRenameWizardPhrases['req-text-action2'] + toname;   		ret += wvRenameWizardPhrases['req-text-wikilist'] + "\n"; 		/* for ( ndx = 0; ndx < wikis.length; ++ndx ) { 			ret += '* ' + wikis[ndx]['wiki'] + "\n"; 		} */   		return ret; 	}     	/** 	 * Get data about the CentralAuth (global) user 	 */ 	this.getGlobalInfo = function ( username, divid, callback ) {   	    //api.php?action=query&meta=globaluserinfo&guiuser=User1&guiprop=groups|merged|unattached&format=json   	    $.ajax({ 		url: mw.util.wikiScript( 'api' ), 		data: { 		    format: 'json', 		    action: 'query', 		    meta: 'globaluserinfo', 		    guiuser: username, 		    guiprop: 'merged|unattached', 		}, 		dataType: 'json', 		type: 'GET', 		success: function( data ) { 		    if ( data && data.query && data.query.globaluserinfo ) { 			var guid = 0; 			var regdate = ''; 			var homewiki = ''; 			var merged = false; 			var unattached = false;   			if ( data.query.globaluserinfo.missing == null ) { 				guid = data.query.globaluserinfo.id; 				regdate = data.query.globaluserinfo.registration; 				homewiki = data.query.globaluserinfo.home; 				merged = data.query.globaluserinfo.merged; 				unattached = data.query.globaluserinfo.unattached; 			}   		        callback ( 				divid, 				username, 				guid, 				regdate, 				homewiki, 				merged, 				unattached 			); 		    } else { 		        alert( 'Error: Unknown result from API.' ); 		    } 		}, 		error: function( xhr ) { 		    alert( 'Error: Request failed.' ); 		} 	    });   	}     	/** 	 * Taken almost verbatim from http://www.mediawiki.org/wiki/API:Edit 	 */ 	this.addNewSection = function( divid, pagetitle, summary, content, editToken ) { 	    $.ajax({ 		url: mw.util.wikiScript( 'api' ), 		data: { 		    format: 'json', 		    action: 'edit', 		    title: pagetitle, 		    section: 'new', 		    summary: summary, 		    text: content, 		    token: editToken 		}, 		dataType: 'json', 		type: 'POST', 		success: function( data ) { 		    if ( data && data.edit && data.edit.result == 'Success' ) { 			showStatus( divid, wvRenameWizardPhrases['result-label-status-ok'] ); 		    } else if ( data && data.error ) { 		        alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info ); 			showStatus( divid, wvRenameWizardPhrases['result-label-status-error'] ); 		    } else { 		        alert( 'Error: Unknown result from API.' ); 			showStatus( divid, 'error2' ); 		    } 		}, 		error: function( xhr ) { 		    alert( 'Error: Request failed.' ); 		} 	    }); 	}   }       function doSearch( divid ) { 	var searchbox = $( "#"+divid ); 	searchbox.html( wvRenameWizardPhrases['icon-loading'] ); 	window.gRW.getGlobalInfo( $('#searchName').attr('value'), divid, window.gRW.showSearchResult ) }   function showUserInfo( divid ) { 	var userbox = $( "#"+divid ); 	userbox.html( wvRenameWizardPhrases['icon-loading'] ); 	window.gRW.getGlobalInfo( $('#altName').attr('value'), divid, window.gRW.fillGlobalInfo ) }   function makeRenameRequest( divid ) { 	var reqbox = $( "#"+divid ); 	reqbox.html( wvRenameWizardPhrases['icon-loading'] ); 	window.gRW.requestToName = $('#toname').attr('value'); 	window.gRW.getGlobalInfo( $('#fromname').attr('value'), divid, window.gRW.fillRequest ); }   function postRenameRequest( divid ) { 	var reqbox = $( "#"+divid ); 	reqbox.html( wvRenameWizardPhrases['icon-loading'] );   	var reqLines = window.gRW.requestText.split("\n"); 	window.gRW.addNewSection( divid, 'Обсуждение_Wikivoyage:User_account_migration', reqLines[0], reqLines.slice(1).join("\n"),  mw.user.tokens.get( 'csrfToken' ) ); }   function showStatus( divid, message ) { 	var reqbox = $( "#"+divid ); 	reqbox.html( $('<h3></h3>').text( message ) ); }           /**  * Initialization function. Test if we should place the DRW on the current page.  * Looks for a <div id="myDRW"></div> on the page.  */   function runRenameWizard() {     	if ( $('#renameWizardCurrentInfo').length 		|| $('#renameWizardSearchGlobal').length 		|| $('#renameWizardSearchGlobal').length 	) {   		window.gRW = new wvRenameWizard();   		//importStylesheet('User:Steven Zhang/DRW.css'); //shared css   		if ( $('#renameWizardCurrentInfo').length ){   		        $("#renameWizardCurrentInfo").html(''); 			$("#renameWizardCurrentInfo").css( 'width', '300px' ); 			$("#renameWizardCurrentInfo").css( 'border', '1px black solid' ); 			$("#renameWizardCurrentInfo").css( 'padding', '10px' ); 			$("#renameWizardCurrentInfo").css( 'margin', '10px' );   			$("#renameWizardCurrentInfo").append( $('<div id="renameWizardCurrentInfoBox"></div>') );   			var searchBox = $('<div id=""></div>'); 			searchBox.append( $('<hr width="60%"></hr>') ); 			searchBox.append( $('<p>Or search for Username</p>') );   			var searchname = $( document.createElement('input') ); 			searchname.attr({ 				type: 'text', 				size: 25, 				name: 'altName', 				id: 'altName' 			});   			searchBox.append( searchname ); 			searchBox.append( $('<a href="javascript:showUserInfo(\'renameWizardCurrentInfoBox\')"></a>').text('Search') ); 			$("#renameWizardCurrentInfo").append( searchBox );   			window.gRW.setupCurrentInfo( "renameWizardCurrentInfoBox" );   		}   		if ( $('#renameWizardSearchGlobal').length ){   		        $("#renameWizardSearchGlobal").html(''); 			$("#renameWizardSearchGlobal").css( 'width', '300px' ); 			$("#renameWizardSearchGlobal").css( 'border', '1px black solid' ); 			$("#renameWizardSearchGlobal").css( 'padding', '10px' ); 			$("#renameWizardSearchGlobal").css( 'margin', '10px' );   			$("#renameWizardSearchGlobal").append( $('<h3>Search</h3>') );   			var searchname = $( document.createElement('input') ); 			searchname.attr({ 				type: 'text', 				size: 25, 				name: 'searchName', 				id: 'searchName' 			});   			$("#renameWizardSearchGlobal").append( searchname ); 			$("#renameWizardSearchGlobal").append( $('<a href="javascript:doSearch(\'renameWizardSearchResult\')"></a>').text('Search') ); 			$("#renameWizardSearchGlobal").append( $('<div id="renameWizardSearchResult"></div>') ); 		}   		if ( $('#renameWizardRequestMerge').length ){   		        $("#renameWizardRequestMerge").html(''); 			$("#renameWizardRequestMerge").css( 'width', '600px' ); 			$("#renameWizardRequestMerge").css( 'border', '1px black solid' ); 			$("#renameWizardRequestMerge").css( 'padding', '10px' ); 			$("#renameWizardRequestMerge").css( 'margin', '10px' );   			var requestForm = $('<div id="renameWizardMergeForm"></div>');   			var fromname = $( document.createElement('input') ); 			fromname.attr({ 				type: 'text', 				size: 25, 				name: 'fromname', 				id: 'fromname' 			});   			var toname = $( document.createElement('input') ); 			toname.attr({ 				type: 'text', 				size: 25, 				name: 'toname', 				id: 'toname' 			});   			$("#renameWizardRequestMerge").append( $('<p></p>').text( wvRenameWizardPhrases['input-username-from'] ) ); 			$("#renameWizardRequestMerge").append( fromname );   			$("#renameWizardRequestMerge").append( $('<p></p>').text( wvRenameWizardPhrases['input-username-to'] ) ); 			$("#renameWizardRequestMerge").append( toname );   			$("#renameWizardRequestMerge").append( $('<a href="javascript:makeRenameRequest(\'renameWizardMergeConfirm\')"></a>').text( wvRenameWizardPhrases['action-link-request'] ) ); 			$("#renameWizardRequestMerge").append( $('<div id="renameWizardMergeConfirm"></div>') );   		} 	} };       $( document ).ready( runRenameWizard() ); // JavaScript Document