User:Cscen/Friendly/friendlytalkback.js
外观
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// <nowiki>
// If FriendlyConfig aint exist.
if( typeof( FriendlyConfig ) == 'undefined' ) {
FriendlyConfig = {};
}
/**
FriendlyConfig.summaryAd ( string )
If ad should be added or not to summary, default [[WP:FRIENDLY|Friendly]]
*/
if( typeof( FriendlyConfig.summaryAd ) == 'undefined' ) {
FriendlyConfig.summaryAd = " using [[WP:FRIENDLY|Friendly]]";
}
/**
FriendlyConfig.topWelcomes ( boolean )
*/
if( typeof( FriendlyConfig.topWelcomes ) == 'undefined' ) {
FriendlyConfig.topWelcomes = true;
}
/**
FriendlyConfig.watchWelcomes ( boolean )
*/
if( typeof( FriendlyConfig.watchWelcomes ) == 'undefined' ) {
FriendlyConfig.watchWelcomes = false;
}
/**
FriendlyConfig.insertHeadings ( boolean )
*/
if( typeof( FriendlyConfig.insertHeadings ) == 'undefined' ) {
FriendlyConfig.insertHeadings = false;
}
/**
FriendlyConfig.welcomeHeading ( string )
*/
if( typeof( FriendlyConfig.welcomeHeading ) == 'undefined' ) {
FriendlyConfig.welcomeHeading = "== Welcome ==";
}
/**
FriendlyConfig.insertUsername ( boolean )
*/
if( typeof( FriendlyConfig.insertUsername ) == 'undefined' ) {
FriendlyConfig.insertUsername = false;
}
/**
FriendlyConfig.insertSignature ( boolean )
*/
if( typeof( FriendlyConfig.insertSignature ) == 'undefined' ) {
FriendlyConfig.insertSignature = true;
}
/**
FriendlyConfig.markWelcomesAsMinor ( boolean )
*/
if( typeof( FriendlyConfig.markWelcomesAsMinor ) == 'undefined' ) {
FriendlyConfig.markWelcomesAsMinor = true;
}
/**
FriendlyConfig.quickWelcomeMode ( String )
*/
if( typeof( FriendlyConfig.quickWelcomeMode ) == 'undefined' ) {
FriendlyConfig.quickWelcomeMode = "auto";
}
/**
FriendlyConfig.quickWelcomeTemplate ( String )
*/
if( typeof( FriendlyConfig.quickWelcomeTemplate ) == 'undefined' ) {
FriendlyConfig.quickWelcomeTemplate = "Welcome";
}
/**
FriendlyConfig.maskTemplateInSummary ( boolean )
*/
if( typeof( FriendlyConfig.maskTemplateInSummary ) == 'undefined' ) {
FriendlyConfig.maskTemplateInSummary = false;
}
friendlywelcome = {
auto: function() {
if( QueryString.get( 'action' ) != 'edit' ) {
// userpage not empty, aborting auto-welcome
return;
}
return friendlywelcome.welcome();
},
semiauto: function() {
friendlywelcome.callback( wgTitle.split( '/' )[0].replace( /\"/, "\\\"") );
},
normal: function() {
if( QueryString.exists( 'diff' ) ) {
var oXPath = '//div[@id="mw-diff-otitle2"]/span[@class="mw-usertoollinks"]/a[1][@class="new"]';
var nXPath = '//div[@id="mw-diff-ntitle2"]/span[@class="mw-usertoollinks"]/a[1][@class="new"]';
var oList = document.evaluate( oXPath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
var nList = document.evaluate( nXPath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
if( oList.snapshotLength > 0 || nList.snapshotLength > 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', 'welcome' ) );
welcomeLink.appendChild( spanTag( 'Black', ']' ) );
welcomeNode.appendChild(welcomeLink);
if( oList.snapshotLength > 0 ) {
var oTalkNode = oList.snapshotItem(0);
var oHref = document.evaluate( '@href', oTalkNode, null, XPathResult.STRING_TYPE, null ).stringValue;
var oWelcomeNode = welcomeNode.cloneNode( true );
oWelcomeNode.firstChild.setAttribute( 'href', oHref + '&' + QueryString.create( { 'friendlywelcome': 'norm' } ) + '&' + QueryString.create( { 'vanarticle': wgPageName.replace(/_/g, ' ') } ) );
oTalkNode.parentNode.parentNode.appendChild( document.createTextNode( ' ' ) );
oTalkNode.parentNode.parentNode.appendChild( oWelcomeNode );
}
if( nList.snapshotLength > 0 ) {
var nTalkNode = nList.snapshotItem(0);
var nHref = document.evaluate( '@href', nTalkNode, null, XPathResult.STRING_TYPE, null ).stringValue;
var nWelcomeNode = welcomeNode.cloneNode( true );
nWelcomeNode.firstChild.setAttribute( 'href', nHref + '&' + QueryString.create( { 'friendlywelcome': 'norm' } ) + '&' + QueryString.create( { 'vanarticle': wgPageName.replace(/_/g, ' ') } ) );
nTalkNode.parentNode.parentNode.appendChild( document.createTextNode( ' ' ) );
nTalkNode.parentNode.parentNode.appendChild( nWelcomeNode );
}
}
}
if( wgNamespaceNumber == 3 ) {
var username = wgTitle.split( '/' )[0].replace( /\"/, "\\\""); // only first part before any slashes
twAddPortletLink( "javascript:friendlywelcome.callback(\"" + username + "\")", wgULS("欢迎","歡迎"), "friendly-welcome", wgULS("欢迎新用户","歡迎新用戶"), "");
}
}
}
friendlywelcome.welcome = function welcomeUser() {
Status.init( document.getElementById('bodyContent') );
var params = {
value: FriendlyConfig.quickWelcomeTemplate,
article: QueryString.exists( 'vanarticle' ) ? QueryString.get( 'vanarticle' ) : '',
mode: 'auto'
};
var query = {
'title': wgPageName,
'action': 'submit'
};
Wikipedia.actionCompleted.redirect = wgPageName;
Wikipedia.actionCompleted.notice = "Welcoming complete, reloading talk page in some seconds";
var wikipedia_wiki = new Wikipedia.wiki( 'User talk page modification', query, friendlywelcome.callbacks.main );
wikipedia_wiki.params = params;
wikipedia_wiki.get();
}
friendlywelcome.callback = function friendlywelcomeCallback( uid ) {
var Window = new SimpleWindow( 600, 400 );
Window.setTitle( "选择欢迎模板" );
var form = new QuickForm( friendlywelcome.callback.evaluate, 'change' );
form.append( {
type: 'input',
name: 'article',
label: '相关条目',
value:( QueryString.exists( 'vanarticle' ) ? QueryString.get( 'vanarticle' ) : '' ),
event: function( event ) {
event.stopPropagation();
}
}
);
form.append( { type:'header', label:'简单模板' } );
form.append( { type: 'radio', name: 'simple', list: friendlywelcome.standardList } );
if( typeof( FriendlyConfig.customWelcomeList ) == 'object' ) {
form.append( { type:'header', label:'自定义模板' } );
form.append( { type: 'radio', name: 'custom', list: FriendlyConfig.customWelcomeList } );
}
//form.append( { type:'header', label:'Welcoming committee templates' } );
//form.append( { type: 'radio', name: 'welcomingCommittee', list: friendlywelcome.welcomingCommitteeList } );
form.append( { type:'header', label:'问题模板' } );
form.append( { type: 'radio', name: 'problem', list: friendlywelcome.problemList } );
form.append( { type:'header', label:'匿名用户模板' } );
form.append( { type: 'radio', name: 'anonymous', list: friendlywelcome.anonymousList } );
form.append( { type:'header', label:'专题模板' } );
form.append( { type: 'radio', name: 'project', list: friendlywelcome.projectList} );
form.append( { type:'header', label:'地区模板' } );
form.append( { type: 'radio', name: 'region', list: friendlywelcome.regionList} );
var result = form.render();
Window.setContent( result );
Window.display();
}
friendlywelcome.standardList = [
{
label: '{{Welcome}}: 标准欢迎模板',
value: 'Welcome' },
{
label: '{{subst:Welcome2}}: 欢迎模板2',
value: 'Welcome plain' }
{
label: '{{subst:Welcome plain}}: 标准欢迎模板',
value: 'Welcome' },
]
friendlywelcome.problemList = [
{
label: '{{Firstarticle}}: 用户的第一篇条目不符合方针',
value: 'Firstarticle' },
{
label: '{{Welcomevandal}}: 用户的初始动作像是破坏',
value: 'Welcomevandal' },
{
label: '{{Welcomeipvandal}}: 匿名用户的初始动作像是破坏',
value: 'Welcomeipvandal' }
]
friendlywelcome.anonymousList = [
{
label: '{{Welcome-anon}}: 匿名用户',
value: 'Welcome-anon' }
]
friendlywelcome.projectList = [
{
label: '{{WelcomeACG}}: ACG',
value: 'WelcomeACG' },
{
label: '{{WelcomeBIO}}: 生物学',
value: 'WelcomeBIO' },
{
label: '{{WelcomeCHEM}}: 化学',
value: 'WelcomeCHEM' },
{
label: '{{WelcomeCVG}}: 电子游戏',
value: 'WelcomeCVG' },
{
label: '{{WelcomeFootball}}: 足球',
value: 'WelcomeFootball' },
{
label: '{{WelcomeMED}}: 医药',
value: 'WelcomeMED' },
{
label: '{{Welcomefl}}: 电影',
value: 'Welcomefl' },
{
label: '{{Welcomepl}}: 心理学',
value: 'Welcomepl' }
]
friendlywelcome.regionList = [
{
label: '{{WelcomeTW}}: 台湾',
value: 'WelcomeTW' },
{
label: '{{Welcomegd}}: 广东',
value: 'Welcomegd' },
{
label: '{{Welcomegx}}: 广西',
value: 'Welcomegx' },
{
label: '{{Welcomehk}}: 香港',
value: 'Welcomehk' },
{
label: '{{WelcomePRC}}: 中华人民共和国',
value: 'WelcomePRC' },
{
label: '{{Welcomeshanxi}}: 山西',
value: 'Welcomeshanxi' },
{
label: '{{Welcomexa}}: 西安',
value: 'Welcomexa' },
{
label: '{{Welcomesx}}: 陝西',
value: 'Welcomesx' }
]
// Set to true if template does not already have heading
// FIXME: Need an eye here!
friendlywelcome.headingHash = {
'Welcome': true,
'Welcome plain': true,
'Firstarticle': true,
'Welcomevandal': false,
'Welcomeipvandal': false,
'Welcome-anon': true,
'WelcomeACG': true,
'WelcomeBIO': true,
'WelcomeCHEM': true,
'WelcomeCVG': true,
'WelcomeFootball': true,
'WelcomeMED': true,
'Welcomefl': true,
'Welcomepl': true,
'WelcomeTW': true,
'Welcomegd': true,
'Welcomegx': true,
'Welcomehk': true,
'Welcomeshanxi': true,
'Welcomexa': true,
'Welcomesx': true
}
// Set to true if template already has signature
friendlywelcome.signatureHash = {
'Welcome': true,
'Welcome plain': true,
'Firstarticle': true,
'Welcomevandal': true,
'Welcomeipvandal': true,
'Welcome-anon': true,
'WelcomeACG': true,
'WelcomeBIO': true,
'WelcomeCHEM': true,
'WelcomeCVG': true,
'WelcomeFootball': true,
'WelcomeMED': true,
'Welcomefl': true,
'Welcomepl': true,
'WelcomeTW': true,
'Welcomegd': true,
'Welcomegx': true,
'Welcomehk': true,
'Welcomeshanxi': true,
'Welcomexa': true,
'Welcomesx': true
}
/* Set to true if template supports article
* name from art template parameter
*/
friendlywelcome.artHash = {
'Welcome': false,
'Welcome plain': false,
'Firstarticle': true,
'Welcomevandal': true,
'Welcomeipvandal': true,
'Welcome-anon': false,
'WelcomeACG': false,
'WelcomeBIO': false,
'WelcomeCHEM': false,
'WelcomeCVG': false,
'WelcomeFootball': false,
'WelcomeMED': false,
'Welcomefl': false,
'Welcomepl': false,
'WelcomeTW': false,
'Welcomegd': false,
'Welcomegx': false,
'Welcomehk': false,
'Welcomeshanxi': false,
'Welcomexa': false,
'Welcomesx': false
}
/* Set to true if template supports article
* name from vanarticle template parameter
*/
friendlywelcome.vandalHash = {
'Welcome': false,
'Welcome plain': false,
'Firstarticle': true,
'Welcomevandal': true,
'Welcomeipvandal': true,
'Welcome-anon': false,
'WelcomeACG': false,
'WelcomeBIO': false,
'WelcomeCHEM': false,
'WelcomeCVG': false,
'WelcomeFootball': false,
'WelcomeMED': false,
'Welcomefl': false,
'Welcomepl': false,
'WelcomeTW': false,
'Welcomegd': false,
'Welcomegx': false,
'Welcomehk': false,
'Welcomeshanxi': false,
'Welcomexa': false,
'Welcomesx': false
}
friendlywelcome.callbacks = {
main: function( self ) {
var form = self.responseXML.getElementById( 'editform' );
// abort if mode is auto and form is not empty
if( form.wpTextbox1.value != '\n' && self.params.mode == 'auto' ) {
Status.info( '警告', '用户讨论页不为空,取消操作' );
Wikipedia.actionCompleted.event();
return;
}
var text = '';
Status.info( '信息', '将会添加欢迎模板到用户讨论页'
+ ( FriendlyConfig.topWelcomes ? '顶部' : '底部' ));
if( !FriendlyConfig.topWelcomes ) {
text += form.wpTextbox1.value + '\n';
}
Status.info( '信息', '将会替换引用{{' + self.params.value + '}}模板' );
text += '\{\{subst:' + self.params.value;
if( friendlywelcome.artHash[ self.params.value ] ) {
if( FriendlyConfig.insertUsername && self.params.value.substring(2,0) != 'W-' ) {
Status.info( '信息', '将添加您的用户名到模板' );
text += '|' + wgUserName;
}
if( self.params.article != '' ) {
Status.info( '信息', '将添加条目名到模板' );
text += '|art=' + self.params.article;
}
} else if( friendlywelcome.vandalHash[ self.params.value ] ) {
if( self.params.article != '' ) {
Status.info( '信息', '将添加被破坏条目名到模板' );
}
text += '|' + self.params.article;
if( FriendlyConfig.insertUsername ) {
Status.info( '信息', '将添加您的用户名到模板' );
text += '|' + wgUserName;
}
} else if( FriendlyConfig.insertUsername ) {
Status.info( '信息', '将添加您的用户名到模板' );
text += '|' + wgUserName;
}
text += '\}\}';
if( !friendlywelcome.signatureHash[ self.params.value ] && FriendlyConfig.insertSignature ) {
Status.info( '信息', '将添加签名' );
text += ' \n\~\~\~\~';
}
if( FriendlyConfig.topWelcomes ) {
text += '\n\n' + form.wpTextbox1.value;
}
var postData = {
'wpMinoredit': FriendlyConfig.markWelcomesAsMinor ? 1 : undefined,
'wpWatchthis': form.wpWatchthis.checked ? 1 : (FriendlyConfig.watchWelcomes ? 1 : undefined),
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSummary': '添加' + ( FriendlyConfig.maskTemplateInSummary ? '欢迎' : ( '\{\{[[Template:' + self.params.value + '|' + self.params.value + ']]\}\}' ) )
+ '模板到用户讨论页' + FriendlyConfig.summaryAd,
'wpTextbox1': text
};
self.post( postData );
}
}
friendlywelcome.callback.evaluate = function friendlywelcomeCallbackEvaluate(e) {
// Ignore if a change to the text field triggered this event
if( e.target.name == 'article' ) {
return;
}
var params = {
value: e.target.value,
article: e.target.form.article.value,
mode: 'manual'
};
Status.init( e.target.form );
var query = {
'title': wgPageName,
'action': 'submit'
};
Wikipedia.actionCompleted.redirect = wgPageName;
Wikipedia.actionCompleted.notice = "完成";
var wikipedia_wiki = new Wikipedia.wiki( '用户讨论页修改', query, friendlywelcome.callbacks.main );
wikipedia_wiki.params = params;
wikipedia_wiki.get();
}
$( function() {
if( QueryString.exists( 'friendlywelcome' ) ) {
if( QueryString.get( 'friendlywelcome' == 'auto' ) ) {
friendlywelcome.auto();
} else {
friendlywelcome.semiauto();
}
} else {
friendlywelcome.normal();
}
}
);
// </nowiki>