注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
// <nowiki>   (function($) {   /*  * vim: set noet sts=0 sw=8:  ****************************************  *** friendlywelcome.js: Welcome module  ****************************************  * Mode of invocation:     Tab ("Wel"), or from links on diff pages  * Active on:              Existing user talk pages, diff pages  * Config directives in:   FriendlyConfig  */  Twinkle.welcome = function friendlywelcome() { 	if (mw.util.getParamValue('friendlywelcome')) { 		if (mw.util.getParamValue('friendlywelcome') === 'auto') { 			Twinkle.welcome.auto(); 		} else { 			Twinkle.welcome.semiauto(); 		} 	} else { 		Twinkle.welcome.normal(); 	} };  Twinkle.welcome.auto = function() { 	if (mw.util.getParamValue('action') !== 'edit') { 		// userpage not empty, aborting auto-welcome 		return; 	}  	Twinkle.welcome.welcomeUser(); };  Twinkle.welcome.semiauto = function() { 	Twinkle.welcome.callback(mw.config.get('wgTitle').split('/')[0].replace(/"/, '\\"')); };  Twinkle.welcome.normal = function() { 	if (mw.util.getParamValue('diff')) { 		// check whether the contributors' talk pages exist yet 		var $oList = $('#mw-diff-otitle2').find('span.mw-usertoollinks a.new:contains(讨论)').first(); 		var $nList = $('#mw-diff-ntitle2').find('span.mw-usertoollinks a.new:contains(讨论)').first();  		if ($oList.length > 0 || $nList.length > 0) { 			var spanTag = function(color, content) { 				var span = document.createElement('span'); 				span.style.color = color; 				span.appendChild(document.createTextNode(content)); 				return span; 			};  			var welcomeNode = document.createElement('strong'); 			var welcomeLink = document.createElement('a'); 			welcomeLink.appendChild(spanTag('Black', '[')); 			welcomeLink.appendChild(spanTag('Goldenrod', wgULS('欢迎', '歡迎'))); 			welcomeLink.appendChild(spanTag('Black', ']')); 			welcomeNode.appendChild(welcomeLink);  			if ($oList.length > 0) { 				var oHref = $oList.attr('href');  				var oWelcomeNode = welcomeNode.cloneNode(true); 				oWelcomeNode.firstChild.setAttribute('href', oHref + '&' + $.param({ 					'friendlywelcome': Twinkle.getFriendlyPref('quickWelcomeMode') === 'auto' ? 'auto' : 'norm', 					'vanarticle': Morebits.pageNameNorm 				})); 				$oList[0].parentNode.parentNode.appendChild(document.createTextNode(' ')); 				$oList[0].parentNode.parentNode.appendChild(oWelcomeNode); 			}  			if ($nList.length > 0) { 				var nHref = $nList.attr('href');  				var nWelcomeNode = welcomeNode.cloneNode(true); 				nWelcomeNode.firstChild.setAttribute('href', nHref + '&' + $.param({ 					'friendlywelcome': Twinkle.getFriendlyPref('quickWelcomeMode') === 'auto' ? 'auto' : 'norm', 					'vanarticle': Morebits.pageNameNorm 				})); 				$nList[0].parentNode.parentNode.appendChild(document.createTextNode(' ')); 				$nList[0].parentNode.parentNode.appendChild(nWelcomeNode); 			} 		} 	} 	if (mw.config.get('wgNamespaceNumber') === 3) { 		var username = mw.config.get('wgTitle').split('/')[0].replace(/"/, '\\"'); // only first part before any slashes 		Twinkle.addPortletLink(function() { 			Twinkle.welcome.callback(username); 		}, wgULS('欢迎', '歡迎'), 'friendly-welcome', wgULS('欢迎用户', '歡迎用戶')); 	} };  Twinkle.welcome.welcomeUser = function welcomeUser() { 	Morebits.status.init(document.getElementById('bodyContent'));  	var params = { 		value: Twinkle.getFriendlyPref('quickWelcomeTemplate'), 		article: mw.util.getParamValue('vanarticle') || '', 		mode: 'auto' 	};  	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName'); 	Morebits.wiki.actionCompleted.notice = wgULS('欢迎完成,将在几秒钟后刷新', '歡迎完成,將在幾秒鐘後更新') ;  	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), wgULS('用户讨论页修改', '用戶討論頁修改')); 	wikipedia_page.setFollowRedirect(true); 	wikipedia_page.setCallbackParameters(params); 	wikipedia_page.load(Twinkle.welcome.callbacks.main); };  Twinkle.welcome.callback = function friendlywelcomeCallback(uid) { 	if (uid === mw.config.get('wgUserName') && !confirm(wgULS('您确定要欢迎自己吗?…', '您確定要歡迎自己嗎?…'))) { 		return; 	}  	var Window = new Morebits.simpleWindow(600, 420); 	Window.setTitle(wgULS('欢迎用户', '歡迎用戶')); 	Window.setScriptName('Twinkle'); 	// Window.addFooterLink( "Welcoming Committee", "WP:WC" ); 	Window.addFooterLink(wgULS('Twinkle帮助', 'Twinkle幫助'), 'W:WP:TW/DOC#welcome');  	var form = new Morebits.quickForm(Twinkle.welcome.callback.evaluate);  	form.append({ 		type: 'select', 		name: 'type', 		label: wgULS('欢迎的类型:', '歡迎的類型:'), 		event: Twinkle.welcome.populateWelcomeList, 		list: [ 			{ type: 'option', value: 'standard', label: wgULS('常规欢迎模板', '正規歡迎模板'), selected: !mw.util.isIPAddress(mw.config.get('wgTitle')) }, 			{ type: 'option', value: 'anonymous', label: wgULS('匿名用户欢迎模板', '匿名用户歡迎模板'), selected: mw.util.isIPAddress(mw.config.get('wgTitle')) }, 			{ type: 'option', value: 'nonChinese', label: wgULS('非中文欢迎模板', '非中文歡迎模板') } 		] 	});  	form.append({ type: 'div', id: 'welcomeWorkArea' });  	form.append({ 		type: 'input', 		name: 'article', 		label: wgULS('* 条目名(如模板支持)', '* 條目名(如模板支援)'), 		value: mw.util.getParamValue('vanarticle') || '', 		tooltip: wgULS('如果模板支持,您可在此处加入一个条目名。支持的模板已用星号标记出来。', '如果模板支援,您可在此處加入一個條目名。支援的模板已用星號標記出來。') 	});  	var previewlink = document.createElement('a'); 	$(previewlink).click(function() { 		Twinkle.welcome.callbacks.preview(result);  // |result| is defined below 	}); 	previewlink.style.cursor = 'pointer'; 	previewlink.textContent = wgULS('预览', '預覽'); 	form.append({ type: 'div', name: 'welcomepreview', label: [ previewlink ] });  	form.append({ type: 'submit' });  	var result = form.render(); 	Window.setContent(result); 	Window.display();  	// initialize the welcome list 	var evt = document.createEvent('Event'); 	evt.initEvent('change', true, true); 	result.type.dispatchEvent(evt); };  Twinkle.welcome.populateWelcomeList = function(e) { 	var type = e.target.value;  	var container = new Morebits.quickForm.element({ type: 'fragment' });  	if ((type === 'standard' || type === 'anonymous') && Twinkle.getFriendlyPref('customWelcomeList').length) { 		container.append({ type: 'header', label: wgULS('自定义欢迎模板', '自定義歡迎模板') }); 		container.append({ 			type: 'radio', 			name: 'template', 			list: Twinkle.getFriendlyPref('customWelcomeList'), 			event: Twinkle.welcome.selectTemplate 		}); 	}  	var appendTemplates = function(list) { 		container.append({ 			type: 'radio', 			name: 'template', 			list: list.map(function(obj) { 				var properties = Twinkle.welcome.templates[obj]; 				var result = properties ? { 					value: obj, 					label: '{{' + obj + '}}: ' + properties.description + (properties.linkedArticle ? '\u00A0*' : ''),  // U+00A0 NO-BREAK SPACE 					tooltip: properties.tooltip  // may be undefined 				} : { 					value: obj, 					label: '{{' + obj + '}}' 				}; 				return result; 			}), 			event: Twinkle.welcome.selectTemplate 		}); 	};  	switch (type) { 		case 'standard': 			container.append({ type: 'header', label: wgULS('常规欢迎模板', '正規歡迎模板') }); 			appendTemplates([ 				'welcome', 				'wikipedian' 			]); 			break; 		case 'anonymous': 			container.append({ type: 'header', label: wgULS('匿名用户欢迎模板', '匿名用戶歡迎模板') }); 			appendTemplates([ 				'welcomeanon' 			]); 			break; 		case 'nonChinese': 			container.append({ type: 'header', label: wgULS('非中文欢迎模板', '非中文歡迎模板') }); 			appendTemplates([ 				'welcome-en' 			]); 			break; 		default: 			container.append({ type: 'div', label: wgULS('Twinkle.welcome.populateWelcomeList: 哪里出问题了', 'Twinkle.welcome.populateWelcomeList: 哪裡出問題了') }); 			break; 	}  	var rendered = container.render(); 	$(e.target.form).find('div#welcomeWorkArea').empty().append(rendered);  	var firstRadio = e.target.form.template[0] || e.target.form.template; 	firstRadio.checked = true; 	Twinkle.welcome.selectTemplate({ target: firstRadio }); };  Twinkle.welcome.selectTemplate = function(e) { 	var properties = Twinkle.welcome.templates[e.target.values]; 	e.target.form.article.disabled = properties ? !properties.linkedArticle : false; };   // A list of welcome templates and their properties and syntax  // The four fields that are available are "description", "linkedArticle", "syntax", and "tooltip". // The three magic words that can be used in the "syntax" field are: //   - $USERNAME$  - replaced by the welcomer's username, depending on user's preferences //   - $ARTICLE$   - replaced by an article name, if "linkedArticle" is true //   - $HEADER$    - adds a level 2 header (most templates already include this)  Twinkle.welcome.templates = { 	// GENERAL WELCOMES  	'welcome': { 		description: wgULS('一般欢迎', '一般歡迎'), 		linkedArticle: false, 		syntax: '{{subst:welcome}}' 	},  	'wikipedian': { 		description: wgULS('欢迎维基百科人', '歡迎維基百科人'), 		linkedArticle: false, 		syntax: '{{subst:wikipedian}}' 	},  	'welcomeanon': { 		description: wgULS('欢迎匿名用户;鼓励注册账户', '歡迎匿名用戶;鼓勵註冊帳戶'), 		linkedArticle: false, 		syntax: '{{subst:welcomeanon}}' 	},  	'nonChinese': { 		description: wgULS('非中文欢迎', '非中文歡迎'), 		linkedArticle: false, 		syntax: '{{subst:welcome-en}}' 	} };  Twinkle.welcome.getTemplateWikitext = function(template, article) { 	var properties = Twinkle.welcome.templates[template]; 	if (properties) { 		return properties.syntax. 			replace('$USERNAME$', Twinkle.getFriendlyPref('insertUsername') ? mw.config.get('wgUserName') : ''). 			replace('$ARTICLE$', article ? article : ''). 			replace(/\$HEADER\$\s*/, wgULS('== 欢迎 ==\n\n', '== 歡迎 ==\n\n')). 			replace('$EXTRA$', '');  // EXTRA is not implemented yet 	} 	return '{{subst:' + template + (article ? '|art=' + article : '') + '}} ~~~~';  };  Twinkle.welcome.callbacks = { 	preview: function(form) { 		var previewDialog = new Morebits.simpleWindow(750, 400); 		previewDialog.setTitle(wgULS('欢迎模板预览', '歡迎模板預覽')); 		previewDialog.setScriptName(wgULS('欢迎用户', '歡迎用戶')); 		previewDialog.setModality(true);  		var previewdiv = document.createElement('div'); 		previewdiv.style.marginLeft = previewdiv.style.marginRight = '0.5em'; 		previewdiv.style.fontSize = 'small'; 		previewDialog.setContent(previewdiv);  		var previewer = new Morebits.wiki.preview(previewdiv); 		previewer.beginRender(Twinkle.welcome.getTemplateWikitext(form.getChecked('template'), form.article.value));  		var submit = document.createElement('input'); 		submit.setAttribute('type', 'submit'); 		submit.setAttribute('value', wgULS('关闭', '關閉')); 		previewDialog.addContent(submit);  		previewDialog.display();  		$(submit).click(function(e) { 			previewDialog.close(); 		}); 	}, 	main: function(pageobj) { 		var params = pageobj.getCallbackParameters(); 		var text = pageobj.getPageText();  		// abort if mode is auto and form is not empty 		if (pageobj.exists() && params.mode === 'auto') { 			Morebits.status.info(wgULS('警告', '用户对话页非空,取消自动欢迎', '警告', '用戶對話頁非空,取消自動歡迎')); 			Morebits.wiki.actionCompleted.event(); 			return; 		}  		var welcomeText = Twinkle.welcome.getTemplateWikitext(params.value, params.article);  		if (Twinkle.getFriendlyPref('topWelcomes')) { 			text = welcomeText + '\n\n' + text; 		} else { 			text += '\n' + welcomeText; 		}  		var summaryText = wgULS('欢迎来到维基导游!', '歡迎來到維基導遊!'); 		pageobj.setPageText(text); 		pageobj.setEditSummary(summaryText + Twinkle.getPref('summaryAd')); 		pageobj.setWatchlist(Twinkle.getFriendlyPref('watchWelcomes')); 		pageobj.setCreateOption('recreate'); 		pageobj.save(); 	} };  Twinkle.welcome.callback.evaluate = function friendlywelcomeCallbackEvaluate(e) { 	var form = e.target;  	var params = { 		value: form.getChecked('template'), 		article: form.article.value, 		mode: 'manual' 	};  	Morebits.simpleWindow.setButtonsEnabled(false); 	Morebits.status.init(form);  	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName'); 	Morebits.wiki.actionCompleted.notice = wgULS('欢迎完成,将在几秒钟后刷新', '歡迎完成,將在幾秒鐘後更新');  	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), wgULS('用户对话页修改', '用戶對話頁修改')); 	wikipedia_page.setFollowRedirect(true); 	wikipedia_page.setCallbackParameters(params); 	wikipedia_page.load(Twinkle.welcome.callbacks.main); }; })(jQuery);   // </nowiki>