User:Ou0430/Friendly/friendlyrpp.js
< User:Ou0430 | Friendly
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-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 = function() {};
}
/**
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.protectionSummaryAd (string)
If ad should be added or not to protection summary, default [[WP:FRIENDLY|Friendly]]
*/
if( typeof( FriendlyConfig.protectionSummaryAd ) == 'undefined' ) {
FriendlyConfig.protectionSummaryAd = " using [[WP:FRIENDLY|Friendly]]";
}
function friendlyrpp() {
if( wgNamespaceNumber < 0 ) {
return;
}
if( userIsInGroup( 'sysop' ) ) {
twAddPortletLink( "javascript:friendlyrpp.callback()", wgULS("保护","保護"), "friendly-rpp", wgULS("保护页面","保護頁面"), "");
} else if( userIsInGroup( 'autoconfirmed' ) ){
twAddPortletLink( "javascript:friendlyrpp.callback()", wgULS("保护","保護"), "friendly-rpp", wgULS("请求保护页面","請求保護頁面"), "");
}
else
{
twAddPortletLink( 'javascript:alert("您必须达到自动确认");', wgULS("保护","保護"), "friendly-rpp", wgULS("请求保护页面","請求保護頁面"), '');
}
}
$(friendlyrpp);
friendlyrpp.callback = function friendlyrppCallback() {
var Window = new SimpleWindow( 600, 400 );
Window.setTitle( wgULS("保护页面","保護頁面") );
var form = new QuickForm( friendlyrpp.callback.evaluate );
if( userIsInGroup( 'sysop' ) ) {
form.append( {
type: 'checkbox',
name: 'request_only',
event: friendlyrpp.callback.disabledefaults,
list: [
{
label: wgULS("仅请求保护","僅請求保護"),
value: 'request_only',
}
]
} );
}
form.append( {
type: 'select',
name: 'category',
label: wgULS("保护类型","保護類型"),
event: friendlyrpp.callback.disabledefaults,
list: [
{
label: wgULS("全保护","全保護"),
list: [
{ label: wgULS("常规","常規"), value: 'pp-protected' },
{ label: wgULS("争议","爭議"), selected: wgCurRevisionId != false, value: 'pp-dispute' },
{ label: wgULS("破坏","破壞"), value: 'pp-vandalism' },
{ label: wgULS("高风险模板","高風險模板"), value: 'pp-template' },
{ label: wgULS("已封禁用户讨论页","已封禁用戶討論頁"), value: 'pp-usertalk' }
]
},
{
label: wgULS("半保护","半保護"),
list: [
{ label: wgULS("常规","常規"), value: 'pp-semi-protected' },
{ label: wgULS("破坏","破壞"), value: 'pp-semi-vandalism' },
{ label: wgULS("高风险模板","高風險模板"), value: 'pp-semi-template' },
{ label: wgULS("已封禁用户讨论页","已封禁用戶討論頁"), value: 'pp-semi-usertalk' }
]
},
{
label: '其他',
list: [
{ label: wgULS("移动保护","移動保護"), value: 'pp-move' },
{ label: wgULS("白纸保护","白紙保護"), selected: wgCurRevisionId == false , value: 'pp-create' },
{ label: wgULS("解除保护","解除保護"), value: 'unprotect' }
]
}
]
} );
var flags = form.append( {
type: 'field',
label: wgULS("选项","選項")
} );
flags.append( {
type: 'checkbox',
list: [
{
name: 'noinclude',
label: '使用<noinclude>',
checked:(wgNamespaceNumber==10),
adminonly: true
},
{
name: 'small',
label: wgULS("使用图标","使用圖標"),
adminonly: true
},
{
name: 'cascade',
label: wgULS("连锁保护","連鎖保護"),
}
]
} );
if( userIsInGroup( 'sysop' ) ) {
form.append( {
type: 'select',
name: 'expiry',
label: wgULS("期限","期限"),
event: function(event) {
var value = event.target.value;
event.target.form.small.disabled = value != 'indefinite';
},
list: [
{ label: wgULS("12 小时","12 小時"), value: '12 hours' },
{ label: '1 天', value: '1 day' },
{ label: '3 天', value: '3 days' },
{ label: wgULS("1 周","1 週"), value: '1 week' },
{ label: wgULS("2 周","2 週"), value: '2 weeks' },
{ label: '1 月', value: '1 month' },
{ label: '3 月', value: '3 months' },
{ label: '6 月', value: '6 months' },
{ label: '1 年', value: '1 year' },
{ label: wgULS("无限期","永久"), selected: true, value:'indefinite' }
]
} );
} else {
form.append( {
type: 'select',
name: 'expiry',
label: '期限',
event: function(event) {
var value = event.target.value;
event.target.form.small.disabled = value != 'indefinite';
},
list: [
{ label: wgULS("临时","臨時"), value: 'temporary' },
{ label: wgULS("无限期","無限期"), value: 'indefinite' },
{ label: '', selected: true, value:'' }
]
} );
}
form.append( {
type: 'textarea',
name: 'reason',
label: '原因'
} );
form.append( { type:'submit' } );
var result = form.render();
Window.setContent( result );
Window.display();
}
friendlyrpp.callback.disabledefaults = function friendlyrppCallbackDisableDefaults(e) {
var root = e.target.form;
if( e.target.value == 'unprotect' ) {
root.noinclude.disabled = true;
root.cascade.disabled = true;
root.expiry.disabled = true;
root.small.disabled = true;
} else {
root.noinclude.disabled = false;
root.cascade.disabled = false;
root.expiry.disabled = false;
root.small.disabled = ( root.expiry.value == 'indefinite' ? false : true );
if( userIsInGroup( 'sysop' ) && root.request_only.checked ){
root.small.disabled = true;
root.noinclude.disabled = true;
}
}
if( /template/.test( e.target.value ) ) {
root.noinclude.checked = true;
root.expiry.disabled = true;
} else {
root.noinclude.checked = false;
}
}
friendlyrpp.callback.evaluate = function friendlyrppCallbackEvaluate(e) {
var form = e.target;
var params = {
noinclude: form.noinclude.checked,
cascade: form.cascade.checked,
small: form.small.checked,
reason: form.reason.value,
expiry: form.expiry.value,
type: form.category.value
}
if( userIsInGroup( 'sysop') ) {
var request_only = form.request_only.checked;
if( request_only && params.expiry != 'indefinite' ) {
params.expiry = 'temporary';
}
}
Status.init( form );
if( userIsInGroup( 'sysop' ) && ! request_only ) {
var edit, move, tag = params.type, reason, create = '';
switch( tag ) {
case 'pp-dispute':
edit = 'sysop';
move = 'sysop';
reason = '全保護: 爭議';
break;
case 'pp-vandalism':
edit = 'sysop';
move = 'sysop';
reason = '全保護: 破壞';
break;
case 'pp-template':
edit = 'sysop';
move = 'sysop';
reason = '全保護: 高風險模板';
break;
case 'pp-usertalk':
edit = 'sysop';
move = 'sysop';
reason = '全保護: 已封禁用戶討論頁';
break;
case 'pp-protected':
edit = 'sysop';
move = 'sysop';
if( params.reason ) {
tag += '|reason=' + params.reason;
params.reason = undefined;
}
reason = '全保護';
break;
case 'pp-semi-vandalism':
edit = 'autoconfirmed';
move = 'autoconfirmed';
reason = '半保護: 破壞';
break;
case 'pp-semi-usertalk':
edit = 'autoconfirmed';
move = 'autoconfirmed';
reason = '半保護: 已封禁用戶討論頁';
break;
case 'pp-semi-template':
edit = 'autoconfirmed';
move = 'autoconfirmed';
reason = '半保護: 高風險模板';
break;
case 'pp-semi-protected':
edit = 'autoconfirmed';
move = 'autoconfirmed';
if( params.reason ) {
tag += '|reason=' + params.reason;
params.reason = undefined;
}
reason = '半保護';
break;
case 'pp-move':
edit = '';
move = 'sysop';
reason = '移動保護';
break;
case 'pp-create':
edit = '';
move = '';
create = 'sysop';
reason = '白紙保護';
break;
case 'unprotect':
default:
edit = '';
move = '';
reason = '解除保護';
break;
}
if( params.reason ) {
reason += ',' + params.reason;
}
params.reason = reason;
params.tag = tag;
params.edit = edit;
params.move = move;
params.create = create;
var query = {
'title': wgPageName,
'action': 'protect'
};
// Updating data for the action completed event
Wikipedia.actionCompleted.redirect = query['title'];
Wikipedia.actionCompleted.notice = "完成";
var wikipedia_wiki = new Wikipedia.wiki( '保護頁面', query, friendlyrpp.callbacks.sysop.protectingPage );
wikipedia_wiki.params = params;
wikipedia_wiki.get();
} else {
var typename, reason;
switch( params.type ) {
case 'pp-dispute':
case 'pp-vandalism':
case 'pp-template':
case 'pp-usertalk':
case 'pp-protected':
typename = '全保護';
break;
case 'pp-semi-vandalism':
case 'pp-semi-usertalk':
case 'pp-semi-template':
case 'pp-semi-spambot':
case 'pp-semi-protected':
typename = '半保護';
break;
case 'pp-move':
typename = '移動保護';
break;
case 'pp-create':
typename = '白紙保護';
break;
case 'unprotect':
default:
typename = '解除保護';
break;
}
switch( params.type ) {
case 'pp-dispute':
reason = ':爭議';
break;
case 'pp-vandalism':
case 'pp-semi-vandalism':
reason = ':破壞';
break;
case 'pp-template':
case 'pp-semi-template':
reason = ':高風險模板';
break;
case 'pp-usertalk':
case 'pp-semi-usertalk':
reason = ':已封禁用戶討論頁';
break;
case 'pp-protected':
case 'pp-semi-protected':
case 'pp-move':
case 'pp-create':
case 'unprotect':
default:
reason = '';
break;
}
if( params.reason ) {
reason += ',原因:' + params.reason;
}
params.reason = reason;
params.typename = typename;
var query = {
'title': 'Wikipedia:請求保護頁面',
'action': 'submit'
};
// Updating data for the action completed event
Wikipedia.actionCompleted.redirect = query['title'];
Wikipedia.actionCompleted.notice = "請求完成,重定向到請求頁";
var wikipedia_wiki = new Wikipedia.wiki( '請求保護頁面', query, friendlyrpp.callbacks.user );
wikipedia_wiki.params = params;
wikipedia_wiki.get();
}
}
friendlyrpp.callbacks = {
sysop: {
taggingPage: function( self ) {
var form = self.responseXML.getElementById( 'editform' );
var oldtag_re = /\s*(?:<noinclude>)?\s*\{\{\s*(pp-[^{}]*?|protected|(?:t|v|s|p-|usertalk-v|usertalk-s|sb|move)protected(?:2)?|protected template|privacy protection)\s*?\}\}\s*(?:<\/noinclude>)?\s*/gi;
var text = form.wpTextbox1.value;
text = text.replace( oldtag_re, '' );
if( self.params.type != 'unprotect' && self.params.expiry != 'indefinite' ) {
self.params.tag += '|expiry={{' + 'subst:#time:c|+' + self.params.expiry +'}}';
}
if( self.params.type != 'unprotect' && self.params.small ) {
self.params.tag += '|small=yes';
}
var summary;
if( self.params.type == 'unprotect' ) {
summary = '移除保護模板' + FriendlyConfig.summaryAd;
} else {
if( self.params.noinclude ) {
text = "<noinclude>\{\{" + self.params.tag + "\}\}</noinclude>" + text;
} else {
text = "\{\{" + self.params.tag + "\}\}\n" + text;
}
summary = "加入\{\{" + self.params.tag + "\}\}" + FriendlyConfig.summaryAd;
}
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,
'wpSummary': summary,
'wpTextbox1': text
};
self.post( postData );
},
protectingPage: function( self ){
var form = self.responseXML.getElementById( 'mw-Protect-Form' );
var postData;
if( self.params.type == 'pp-move' ) {
postData = {
'wpEditToken': form.wpEditToken.value,
'mwProtect-level-move': self.params.move,
'wpProtectExpirySelection-move': self.params.expiry != 'indefinite' ? 'othertime' : 'indefinite',
'mwProtect-expiry-move': self.params.expiry != 'indefinite' ? self.params.expiry : undefined,
'mwProtect-cascade': self.params.cascade ? '' : undefined,
'mwProtectWatch': form.mwProtectWatch.checked ? '' : undefined,
'wpProtectReasonSelection': 'other',
'mwProtect-reason': self.params.reason + FriendlyConfig.protectionSummaryAd
};
} else if( self.params.type == 'pp-create' ) {
postData = {
'wpEditToken': form.wpEditToken.value,
'mwProtect-level-create': self.params.create,
'wpProtectExpirySelection-create': self.params.expiry != 'indefinite' ? 'othertime' : 'indefinite',
'mwProtect-expiry-create': self.params.expiry != 'indefinite' ? self.params.expiry : undefined,
'mwProtect-cascade': self.params.cascade ? '' : undefined,
'mwProtectWatch': form.mwProtectWatch.checked ? '' : undefined,
'wpProtectReasonSelection': 'other',
'mwProtect-reason': self.params.reason + FriendlyConfig.protectionSummaryAd
};
} else if( self.params.type == 'unprotect' ) {
postData = {
'wpEditToken': form.wpEditToken.value,
'mwProtect-level-edit': self.params.edit,
'wpProtectExpirySelection-edit': 'indefinite',
'mwProtect-level-move': self.params.move,
'wpProtectExpirySelection-move': 'indefinite',
'mwProtect-level-create': self.params.create,
'wpProtectExpirySelection-create': 'indefinite',
'mwProtect-cascade': self.params.cascade ? '' : undefined,
'mwProtectWatch': form.mwProtectWatch.checked ? '' : undefined,
'wpProtectReasonSelection': 'other',
'mwProtect-reason': self.params.reason + FriendlyConfig.protectionSummaryAd
};
} else {
postData = {
'wpEditToken': form.wpEditToken.value,
'mwProtect-level-edit': self.params.edit,
'wpProtectExpirySelection-edit': self.params.expiry != 'indefinite' ? 'othertime' : 'indefinite',
'mwProtect-expiry-edit': self.params.expiry != 'indefinite' ? self.params.expiry : undefined,
'mwProtect-level-move': self.params.move,
'wpProtectExpirySelection-move': self.params.expiry != 'indefinite' ? 'othertime' : 'indefinite',
'mwProtect-expiry-move': self.params.expiry != 'indefinite' ? self.params.expiry : undefined,
'mwProtect-cascade': self.params.cascade ? '' : undefined,
'mwProtectWatch': form.mwProtectWatch.checked ? '' : undefined,
'wpProtectReasonSelection': 'other',
'mwProtect-reason': self.params.reason + FriendlyConfig.protectionSummaryAd
};
}
self.post( postData );
var query = {
'title': wgPageName,
'action': 'submit'
};
if( self.params.create == '' ) {
var wikipedia_wiki = new Wikipedia.wiki( '標記頁面', query, friendlyrpp.callbacks.sysop.taggingPage );
wikipedia_wiki.params = self.params;
wikipedia_wiki.get();
}
}
},
user: function( self ) {
var form = self.responseXML.getElementById( 'editform' );
var text = form.wpTextbox1.value;
var rppRe = new RegExp( '===\\s*' + RegExp.escape( wgPageName, true ) + '\\s*===', 'm' );
var tag = rppRe.exec( text );
if( tag ) {
self.statelem.warn( [ htmlNode( 'strong', tag[0] ) , "已經存在" ] )
return false;
}
var newtag = '=== [[' + wgPageName + ']] ===' + "\n";
if( ( new RegExp( '^' + RegExp.escape( newtag ).replace( /\s+/g, '\\s*' ), 'm' ) ).test( text ) ) {
self.statelem.error( '已有請求保護項目,取消' );
return;
}
newtag += '* ';
var words = [];
switch( self.params.expiry ) {
case 'temporary':
words.push( "臨時" );
break;
case 'indefinite':
words.push( "永久" );
break;
}
if( self.params.cascade ) {
words.push( "連鎖" );
}
words.push( self.params.typename );
newtag += words.join( '' ) + ( self.params.reason != '' ? self.params.reason : '' ) + "--\~\~\~\~";
if( self.params.type == 'unprotect' ) {
var str = '<span id="friendly-rpp-u" />';
} else {
var str = '<span id="friendly-rpp" />';
}
var originalTextLength= text.length;
text = text.replace( str, str + "\n" + newtag );
if (text.length==originalTextLength)
{
self.statelem.error( '無法找到位點標識符,取消' );
return;
}
var postData = {
'wpMinoredit': undefined,
'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSection': '',
'wpSummary': "請求" + self.params.typename + ',[[' + wgPageName.replace(/_/g, ' ') + ']]' + FriendlyConfig.summaryAd,
'wpTextbox1': text
};
self.post( postData );
}
}