User:Ou0430/Friendly/friendlyvfd.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.markVfdAsMinor ( boolean )
 */
if( typeof( FriendlyConfig.markVfdAsMinor ) == 'undefined' ) {
	FriendlyConfig.markVfdAsMinor = false;
}
 
/**
 FriendlyConfig.markVfdAsPatrolled ( boolean )
 */
if( typeof( FriendlyConfig.markVfdAsPatrolled ) == 'undefined' ) {
	FriendlyConfig.markVfdAsPatrolled = true;
}

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


$(friendlyvfd);

var isRedirect = false;

function friendlyvfd() {
	if( QueryString.exists( 'redirect' ) && QueryString.get( 'redirect' ) == 'no' && !QueryString.exists( 'rcid' ) ) {
		isRedirect = true;
	}
	if( wgNamespaceNumber < 0 || wgNamespaceNumber == 6 || wgCurRevisionId == false ) {
		return;
	} else {
		twAddPortletLink( "javascript:friendlyvfd.callback()","提删", "friendly-vfd", "提交存廢討論", "");
	}
}

friendlyvfd.callback = function friendlyvfdCallback() {
	var Window = new SimpleWindow( 600, 300 );
	Window.setTitle( "提交存廢討論" );
	var form = new QuickForm( friendlyvfd.callback.evaluate );
	form.append( {
			type: 'select',
			name: 'category',
			label: "類型",
			list: [
				{
					label: "删除",
					value: 'delete'
				},
				{
					label: "合併",
					value: 'merge'
				},
				{
					label: '移動到',
					list: [
						{ label: "維基辭典", value: 'vmd' },
						{ label: "維基文庫", value: 'vms' },
						{ label: "維基教科書", value: 'vmb' },
						{ label: "維基語錄", value: 'vmq' }
					]
				}

			]
		} );
 	form.append( {
 	 	 	type: 'checkbox',
 	 	 	list: [
 	 	 	 	{
 	 	 	 	 	label: '如果可能,通知創建者',
 	 	 	 	 	value: 'notify',
 	 	 	 	 	name: 'notify',
 	 	 	 	 	checked: true
 	 	 	 	}
 	 	 	]
 	 	}
 	);

	form.append( {
			type: 'textarea',
			name: 'reason',
			label: wgULS("理由","理由")
		}
	);
 
	form.append( { type:'submit', label:wgULS("提交","提交") } );
 
	var result = form.render();
	Window.setContent( result );
	Window.display();
}

var to = "";

friendlyvfd.callbacks = {
		main: function( self ) {
			if (self.params.type == 'merge') {
				to = prompt( "合併目標" );
				if (to == '') {
					self.statelem.error( "未指定合併目標" );
					return;
				}
			}

			++Wikipedia.numberOfActionsLeft;
			var xmlDoc = self.responseXML;
			var exists = xmlDoc.evaluate( 'boolean(//pages/page[not(@missing)])', xmlDoc, null, XPathResult.BOOLEAN_TYPE, null ).booleanValue;
			if( ! exists ) {
				self.statelem.error( "頁面不存在,可能已被刪除" );
				return;
			}
			var query = { 
				'title': wgPageName, 
				'action': 'submit'
			};
 
			var wikipedia_wiki = new Wikipedia.wiki( wgULS("标记页面","標記頁面"), query, friendlyvfd.callbacks.tagPage );
			wikipedia_wiki.params = self.params;
			wikipedia_wiki.followRedirect = false;
			wikipedia_wiki.get();
		},
		tagPage: function( self ) {
			form = this.responseXML.getElementById( 'editform' );

			var text = form.wpTextbox1.value;
			if ((self.params.type == 'vmd') || (self.params.type == 'vms') || (self.params.type == 'vmq') || (self.params.type == 'vmb')) {
				text = "\{\{subst:Vfd/auto||" + self.params.type + "\}\}\n" + text;
			} else {
				text = "\{\{subst:Vfd/auto|" + self.params.reason + (isRedirect ? "|r" : "") + "\}\}\n" + text;
 			}

			if( FriendlyConfig.markVfdAsPatrolled && self.params.rcid != '' ) {
				var query = {
					'title': wgPageName,
					'action': 'markpatrolled',
					'rcid': self.params.rcid
				};
 
				var wikipedia_wiki = new Wikipedia.wiki( wgULS("标记页面为已巡查","標記頁面為已巡查"), query );
				wikipedia_wiki.post();
			}

			var query = {
				'action': 'query',
				'prop': 'revisions',
				'titles': wgPageName,
				'rvlimit': 1,
				'rvprop': 'user',
				'rvdir': 'newer'
			}
			var callback = function( self ) {
				var xmlDoc = self.responseXML;
				var user = xmlDoc.evaluate( '//rev/@user', xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;
				if( wgPageName != ( 'User talk:' + user ) ) {
					var query = {
						'title': 'User talk:' + user,
						'action': 'submit'
					};
					var wikipedia_wiki = new Wikipedia.wiki( "通知頁面創建者" + user + '', query, friendlyvfd.callbacks.userNotification );
					wikipedia_wiki.params = self.params;
					wikipedia_wiki.get();
				} else {
					Status.info( "信息", "當前頁面為創建者討論頁,取消通知" );
				}
			}
 
			if( self.params.notify ) {
				var wikipedia_api = new Wikipedia.api( "抓創建者數據", query, callback );
				wikipedia_api.params = self.params;
				wikipedia_api.post();
			}
 
			var postData = {
				'wpMinoredit': FriendlyConfig.markVfdAsMinor ? '' : undefined,
				'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,
				'wpStarttime': form.wpStarttime.value,
				'wpEdittime': form.wpEdittime.value,
				'wpAutoSummary': form.wpAutoSummary.value,
				'wpEditToken': form.wpEditToken.value,
				'wpSection': '',
				'wpSummary': "提交存废讨论" + FriendlyConfig.summaryAd,
				'wpTextbox1':  text
			};
			self.post( postData );
 
			var callback = function( self ) {
				var xmlDoc = self.responseXML;
				var user = xmlDoc.evaluate( '//rev/@user', xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;
				function twodigits(num) {
					return num < 10 ? '0' + num : num;
				}
				var date = new Date();
				if( wgPageName != ( 'Wikipedia:頁面存廢討論/記錄/' + date.getUTCFullYear() + '/' + twodigits(date.getUTCMonth() + 1) + '/' + twodigits(date.getUTCDate()) ) ) {
					var query = {
						'title': 'Wikipedia:頁面存廢討論/記錄/' + date.getUTCFullYear() + '/' + twodigits(date.getUTCMonth() + 1) + '/' + twodigits(date.getUTCDate()),
						'action': 'submit'
					};
					var wikipedia_wiki = new Wikipedia.wiki( "報告給WP:AFD", query, friendlyvfd.callbacks.reportVfd );
					wikipedia_wiki.params = self.params;
					wikipedia_wiki.get();
				} else {
					Status.info( "信息", "當前頁面為報告頁,取消報告" );
				}
			}
 
			var wikipedia_api = new Wikipedia.api( "抓報告頁數據", query, callback );
			wikipedia_api.params = self.params;
			wikipedia_api.post();
 
			var postData = {
				'wpMinoredit': FriendlyConfig.markVfdAsMinor ? '' : undefined,
				'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,
				'wpStarttime': form.wpStarttime.value,
				'wpEdittime': form.wpEdittime.value,
				'wpAutoSummary': form.wpAutoSummary.value,
				'wpEditToken': form.wpEditToken.value,
				'wpSection': '',
				'wpSummary': "提交存廢討論" + FriendlyConfig.summaryAd,
				'wpTextbox1': text
			};
			self.post( postData );
		},
 		userNotification: function( self ) {
			var form = self.responseXML.getElementById( 'editform' );
			var text = form.wpTextbox1.value;
			if( text == '\n' ) {
				text += "\{\{subst:welcome\}\}"
			}
			text += "\n\{\{subst:AFDNote|" + wgPageName + "\}\}\~\~\~\~";
			var postData = {
				'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
				'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,
				'wpStarttime': form.wpStarttime.value,
				'wpEdittime': form.wpEdittime.value,
				'wpAutoSummary': form.wpAutoSummary.value,
				'wpEditToken': form.wpEditToken.value,
				'wpSection': '',
				'wpSummary': "通知:頁面\[\[" + wgPageName + "\]\]提交存廢討論" + FriendlyConfig.summaryAd,
				'wpTextbox1': text
			};
			self.post( postData );
		},
		reportVfd: function( self ) {
			var form = self.responseXML.getElementById( 'editform' );
			var text = form.wpTextbox1.value;
			var type = ((self.params.type == 'vmd') || (self.params.type == 'vms') || (self.params.type == 'vmq') || (self.params.type == 'vmb')) ? 'vm' : self.params.type;
			if (type == 'vm') {
				to =  self.params.type;
			} else if (type != "merge") {
				to = '';
			}
			text += "\{\{subst:DRItem|Type=" + type + "|DRarticles=" + wgPageName + "|Reason=" + self.params.reason + "|To=" + to + "\}\}\~\~\~\~";
			var postData = {
				'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
				'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,
				'wpStarttime': form.wpStarttime.value,
				'wpEdittime': form.wpEdittime.value,
				'wpAutoSummary': form.wpAutoSummary.value,
				'wpEditToken': form.wpEditToken.value,
				'wpSection': '',
				'wpSummary': "頁面\[\[" + wgPageName + "\]\]提交存廢討論" + FriendlyConfig.summaryAd,
				'wpTextbox1': text
			};
			self.post( postData );
		}
}
 
friendlyvfd.callback.evaluate = function friendlyvfdCallbackEvaluate(e) {
	wgPageName = wgPageName.replace( /_/g, ' ' );
 
	var params = {
		reason: e.target.reason.value,
		rcid: QueryString.exists( 'rcid' ) ? QueryString.get( 'rcid' ) : '',
		type: e.target.category.value,
 	 	notify: e.target.notify.checked
	};
 
	Status.init( e.target );
 
	Wikipedia.actionCompleted.redirect = wgPageName;
	Wikipedia.actionCompleted.notice = wgULS("完成","完成");
 
	var query = {
		'action': 'query',
		'titles': wgPageName
	}
 
	var wikipedia_api = new Wikipedia.api( wgULS("检查页面是否存在","檢查頁面是否存在"), query, friendlyvfd.callbacks.main );
	wikipedia_api.params = params;
	wikipedia_api.post();
}