User:Ou0430/Friendly/friendlytalkback.js

维基新闻,自由的新闻源

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

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
// 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.markTalkbackAsMinor ( boolean )
 */
if( typeof( FriendlyConfig.markTalkbackAsMinor ) == 'undefined' ) {
	FriendlyConfig.markTalkbackAsMinor = true;
}

/**
 FriendlyConfig.insertHeadings ( boolean )
 */
if( typeof( FriendlyConfig.insertHeadings ) == 'undefined' ) {
	FriendlyConfig.insertHeadings = true;
}

/**
 FriendlyConfig.insertSignature ( boolean )
 */
if( typeof( FriendlyConfig.insertSignature ) == 'undefined' ) {
	FriendlyConfig.insertSignature = true;
}

/**
 FriendlyConfig.talkbackHeading ( String )
 */
if( typeof( FriendlyConfig.talkbackHeading ) == 'undefined' ) {
	FriendlyConfig.talkbackHeading = '回复通告'
}

$(friendlytalkback);

function friendlytalkback() {
	if( wgNamespaceNumber == 3 ) {
		var username = wgTitle.split( '/' )[0].replace( /\"/, "\\\""); // only first part before any slashes

		twAddPortletLink( "javascript:friendlytalkback.callback(\"" + username + "\")", wgULS("回复","回覆"), "friendly-talkback", wgULS("新回复通告","新回覆通告"), "");
	}
}

friendlytalkback.callback = function friendlytalkbackCallback( uid ) {
	if( uid == wgUserName ){
		alert( '請不要回覆自己。' );
		return;
	}

	var Window = new SimpleWindow( 600, 350 );
	Window.setTitle( "Talkback" ); 
	var form = new QuickForm( friendlytalkback.callback.evaluate );

	form.append( { type: 'radio', name: 'tbtarget',
				list: [ {
						label: '我的討論頁',
						value: 'mytalk',
						checked: 'true' },
					{
						label: '其他用戶的討論頁',
						value: 'usertalk' },
					{
						label: '其他討論頁',
						value: 'other' } ],
				event: friendlytalkback.callback.change_target
			} );

	form.append( {
			type: 'field',
			label: 'Work area',
			name: 'work_area'
		} );

	var result = form.render();
	Window.setContent( result );
	Window.display();

	// We must init the
	var evt = document.createEvent( "Event" );
	evt.initEvent( 'change', true, true );
	result.tbtarget[0].dispatchEvent( evt );
}

friendlytalkback.callback.change_target = function friendlytagCallbackChangeTarget(e) {
	var value = e.target.value;
	var root = e.target.form;
	var old_area;
	for( var i = 0; i < root.childNodes.length; ++i ) {
		var node = root.childNodes[i];
		if( 
			node instanceof Element &&
			node.getAttribute( 'name' ) == 'work_area' 
		) {
			old_area = node;
			break;
		}
	}
	var work_area = new QuickForm.element( { 
			type: 'field',
			label: '回覆信息',
			name: 'work_area'
		} );
	
	switch( value ) {
		default:
		case 'mytalk':
			work_area.append( { 
					type:'input',
					name:'section',
					label:'鏈接章節(可選)'
				} );
			break;
		case 'usertalk':
			work_area.append( { 
					type:'input',
					name:'page',
					label:'用户'
				} );
			
			work_area.append( { 
					type:'input',
					name:'section',
					label:'鏈接章節(可選)'
				} );
			break;
		case 'other':
			work_area.append( { 
					type:'input',
					name:'page',
					label:'完整頁面名稱'
				} );
			
			work_area.append( { 
					type:'input',
					name:'section',
					label:'鏈接章節(可選)'
				} );
			break;
	}
	
	work_area.append( { type:'textarea', label:'附加信息(可選):', name:'message' } );
	
	work_area.append( { type:'submit' } );
	work_area = work_area.render();
	old_area.parentNode.replaceChild( work_area, old_area );
}

friendlytalkback.callbacks = {
	main: function( self ) {
		self.statelem.status( '抓編輯令牌...' );
		var xmlDoc = self.responseXML;
		var editToken = xmlDoc.evaluate( '//page/@edittoken', xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;
		
		var text = '{\{talkback|';

		if( self.params.tbtarget == 'usertalk' || self.params.tbtarget == 'other' ) {
			text += self.params.page;
		} else {
			text += wgUserName;
		}

		if( self.params.section != '' ) {
			text += '|' + self.params.section;
		}

		text += '\}\}';
		
		if( self.params.message != '' ) {
			text += '\n' + self.params.message + '--\~\~\~\~';
		} else if( FriendlyConfig.insertSignature ) {
			text += '\n--\~\~\~\~';
		}

		var query = {
			'action': 'edit',
			'title': wgPageName,
			'section': 'new',
			'text': text,
			'token': editToken,
			'summary': FriendlyConfig.talkbackHeading,
			'minor': FriendlyConfig.markTalkbackAsMinor ? 1 : undefined
		};

		var wikipedia_api = new Wikipedia.api( '添加回覆通告到用戶討論頁...', query, null, self.statelem );
		wikipedia_api.post();
	}
}

friendlytalkback.callback.evaluate = function friendlytalkbackCallbackEvaluate(e) {
	var tbtarget = e.target.getChecked( 'tbtarget' )[0];
	var page = null;
	var section = e.target.section.value;
	if( tbtarget == 'usertalk' || tbtarget == 'other' ) {
		page = e.target.page.value;
		
		if( tbtarget == 'usertalk' ) {
			if( page == '' ) {
				alert( '您必須指定用戶名' );
				return;
			}
		} else {
			if( page == '' ) {
				alert( '您必須指定頁面名稱' );
				return;
			}			
		}
	}
	
	var params = {
		tbtarget: tbtarget,
		page: page,
		section: section,
		message: e.target.message.value
	};

	Status.init( e.target );

	Wikipedia.actionCompleted.redirect = wgPageName;
	Wikipedia.actionCompleted.notice = "完成";
	
	var query = {
		'action': 'query',
		'prop': 'info',
		'intoken': 'edit',
		'titles': wgPageName
	};

	var wikipedia_api = new Wikipedia.api( '狀態', query, friendlytalkback.callbacks.main );
	wikipedia_api.params = params;
	wikipedia_api.post();
}