User:Wikidudeman/project.js
From Wikipedia, the free encyclopedia
If a message on your talk page led you here, please be wary of who left it. Code that you insert on this page could contain malicious content capable of compromising your account. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. If this is a .js page, the code will be executed when previewing the page.
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
// If TwinkleConfig aint exist. if( typeof( TwinkleConfig ) == 'undefined' ) { TwinkleConfig = function() {}; } /** TwinkleConfig.summaryAd (string) If ad should be added or not to summary, default [[WP:TWINKLE|TWINKLE]] */ if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) { TwinkleConfig.summaryAd = " using [[WP:TWINKLE|TW]]"; } /** TwinkleConfig.protectionSummaryAd (string) If ad should be added or not to protection summary, default [[WP:TWINKLE|TWINKLE]] */ if( typeof( TwinkleConfig.protectionSummaryAd ) == 'undefined' ) { TwinkleConfig.protectionSummaryAd = " using [[WP:TWINKLE|TW]]"; } function twinkleprotect() { if( wgNamespaceNumber < 0 || wgCurRevisionId == false ) { return; } if( userIsInGroup( 'sysop' ) ) { addPortletLink( 'p-cactions', "javascript:twinkleprotect.callback()", "pp", "tw-rpp", "Protect page", ""); } else { addPortletLink( 'p-cactions', "javascript:twinkleprotect.callback()", "rpp", "tw-rpp", "Request page protection", ""); } } addOnloadHook(twinkleprotect); twinkleprotect.callback = function twinkleprotectCallback() { var Window = new SimpleWindow( 600, 400 ); Window.setTitle( "Protection of pages" ); var form = new QuickForm( twinkleprotect.callback.evaluate ); form.append( { type: 'select', name: 'category', label: 'Type of protection: ', event: twinkleprotect.callback.disabledefaults, list: [ { label: 'Full protection', list: [ { label: 'Generic', value: 'pp-protect' }, { label: 'Dispute', selected: true, value: 'pp-dispute' }, { label: 'Vandalism', value: 'pp-vandalism' }, { label: 'High visible template', value: 'pp-template' }, { label: 'User talk of banned user', value: 'pp-usertalk' } ] }, { label: 'Semi-protection', list: [ { label: 'Generic', value: 'pp-semi-protect' }, { label: 'Vandalism', value: 'pp-semi-vandalism' }, { label: 'High visible template', value: 'pp-semi-template' }, { label: 'User talk of banned user', value: 'pp-semi-usertalk' }, { label: 'Spambot target', value: 'pp-semi-spambot' } ] }, { label: 'Other', list: [ { label: 'Move-protection', value: 'pp-move' }, { label: 'Unprotection', value: 'unprotect' } ] } ] } ); var flags = form.append( { type: 'field', label: 'Options' } ); flags.append( { type: 'checkbox', list: [ { name: 'noinclude', label: 'Wrap <noinclude>', tooltip: 'Will wrap the template in <noinclude> tags, so that it won\'t transclude', checked:(wgNamespaceNumber==10), adminonly: true }, { name: 'small', label: 'Iconify', tooltip: 'Will use the |small=yes feature of the template, and only render it as a keylock', adminonly: true }, { name: 'cascade', label: 'Cascade protection', tooltip: 'Cascade protection will protect all pages that is transcluded into said page' } ] } ); form.append( { type: 'select', name: 'expiry', label: 'Expiration: ', event: function(event) { var value = event.target.value; event.target.form.small.disabled = value != 'indefinite'; }, list: [ { label: '1 hour', value: '1 hour' }, { label: '2 hours', value: '2 hours' }, { label: '3 hours', value: '3 hours' }, { label: '6 hours', value: '6 hours' }, { label: '12 hours', value: '12 hours' }, { label: '1 day', value: '1 day' }, { label: '2 days', value: '2 days' }, { label: '3 days', value: '3 days' }, { label: '4 days', value: '4 days' }, { label: '5 days', value: '5 days' }, { label: '6 days', value: '6 days' }, { label: '1 week', value: '1 week' }, { label: '2 weeks', value: '2 weeks' }, { label: '1 month', value: '1 month' }, { label: '2 months', value: '2 months' }, { label: '3 months', value: '3 months' }, { label: '6 months', value: '6 months' }, { label: '1 year', value: '1 year' }, { label: 'indefinite', selected: true, value:'indefinite' } ] } ); form.append( { type: 'textarea', name: 'reason', label: 'Reason: ' } ); form.append( { type:'submit' } ); var result = form.render(); Window.setContent( result ); Window.display(); } twinkleprotect.callback.disabledefaults = function twinkleprotectCallbackDisableDefaults(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 = false; } if( /template/.test( e.target.value ) ) { root.noinclude.checked = true; root.expiry.disabled = true; } else { root.noinclude.checked = false; } } twinkleprotect.callback.evaluate = function twinkleprotectCallbackEvaluate(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 } Status.init( form ); if( userIsInGroup( 'sysop' ) ) { var edit, move, tag = params.type, reason; switch( tag ) { case 'pp-dispute': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: Dispute'; break; case 'pp-vandalism': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: Vandalism'; break; case 'pp-template': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: High-visible template'; break; case 'pp-usertalk': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: User talk of banned user'; break; case 'pp-protected': edit = 'sysop'; move = 'sysop'; if( params.reason ) { tag += '|reason=' + params.reason; params.reason = undefined; } reason = 'Full protection'; break; case 'pp-semi-vandalism': edit = 'autoconfirmed'; move = 'autoconfirmed'; reason = 'Semi-protection: Vandalism'; break; case 'pp-semi-usertalk': edit = 'autoconfirmed'; move = 'autoconfirmed'; reason = 'Semi-protection: User talk of banned user'; break; case 'pp-semi-template': edit = 'autoconfirmed'; move = 'autoconfirmed'; reason = 'Semi-protection: High-visible template'; break; case 'pp-semi-spambot': edit = 'autoconfirmed'; move = 'autoconfirmed'; reason = 'Semi-protection: Spambot target'; break; case 'pp-semi-protected': edit = 'autoconfirmed'; move = 'autoconfirmed'; if( params.reason ) { tag += '|reason=' + params.reason; params.reason = undefined; } reason = 'Semi-protection'; break; case 'pp-move': edit = ''; move = 'sysop'; reason = 'Move-protection'; break; case 'unprotect': default: edit = ''; move = ''; reason = 'Unprotection'; break; } if( params.reason ) { reason += ', ' + params.reason; } reason += '.'; params.reason = reason; params.tag = tag; params.edit = edit; params.move = move; var query = { 'title': wgPageName, 'action': 'submit' }; // Updating data for the action completed event Wikipedia.actionCompleted.redirect = query['title']; Wikipedia.actionCompleted.notice = "Done..."; var wikipedia_wiki = new Wikipedia.wiki( 'Tagging page', query, twinkleprotect.callbacks.sysop.taggingPage ); wikipedia_wiki.params = params; wikipedia_wiki.get(); var query = { 'title': wgPageName, 'action': 'protect' }; var wikipedia_wiki = new Wikipedia.wiki( 'Protecting page', query, twinkleprotect.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 = 'full protection'; break; case 'pp-semi-vandalism': case 'pp-semi-usertalk': case 'pp-semi-template': case 'pp-semi-spambot': case 'pp-semi-protected': typename = 'semi-protection'; break; case 'pp-move': typename = 'move-protection'; break; case 'unprotect': default: typename = 'unprotection'; break; } switch( tag ) { case 'pp-dispute': reason = 'Full protection: Dispute'; break; case 'pp-vandalism': reason = 'Full protection: Vandalism'; break; case 'pp-template': reason = 'Full protection: High-visible template'; break; case 'pp-usertalk': reason = 'Full protection: User talk of banned user'; break; case 'pp-protected': reason = 'Full protection'; break; case 'pp-semi-vandalism': reason = 'Semi-protection: Vandalism'; break; case 'pp-semi-usertalk': reason = 'Semi-protection: User talk of banned user'; break; case 'pp-semi-template': reason = 'Semi-protection: High-visible template'; break; case 'pp-semi-spambot': reason = 'Semi-protection: Spambot target'; break; case 'pp-semi-protected': reason = 'Semi-protection'; break; case 'pp-move': reason = 'Move-protection'; break; case 'unprotect': default: reason = 'Unprotection'; break; } if( params.reason ) { reason += ', ' + params.reason; } reason += '.'; params.reason = reason; params.typename = typename; var query = { 'title': 'Wikipedia:Requests for page protection', 'action': 'submit' }; // Updating data for the action completed event Wikipedia.actionCompleted.redirect = query['title']; Wikipedia.actionCompleted.notice = "Nomination completed, redirecting now to the discussion page"; var wikipedia_wiki = new Wikipedia.wiki( 'Requesting protection of page', query, twinkleprotect.callbacks.user ); wikipedia_wiki.params = params; wikipedia_wiki.get(); } } twinkleprotect.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:F j, Y|+' + self.params.expiry +'}}'; if( this.params.small ) { self.params.tag += '|small=yes'; } } var summary; if( self.params.type == 'unprotect' ) { summary = 'removing protection template' + TwinkleConfig.summaryAd; } else { if( self.params.noinclude ) { text = "<noinclude>\{\{" + self.params.tag + "\}\}</noinclude>" + text; } else { text = "\{\{" + self.params.tag + "\}\}\n" + text; } summary = "adding \{\{" + self.params.tag + "\}\}" + TwinkleConfig.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 = { 'wpEditToken': form.wpEditToken.value, 'mwProtectWatch': form.mwProtectWatch.checked ? '' : undefined, 'mwProtectCascade': self.params.cascade ? '' : undefined, 'mwProtect-expiry': self.params.expiry != 'indefinite' ? self.params.expiry : undefined, 'mwProtect-level-edit': self.params.edit, 'mwProtect-level-move': self.params.move, 'mwProtect-reason': self.params.reason + TwinkleConfig.protectionSummaryAd }; self.post( postData ); } }, user: function( self ) { var form = self.responseXML.getElementById( 'editform' ); var text = form.wpTextbox1.value; var rppRe = new RegExp( '====.*?' + RegExp.escape( wgPageName, true ) + '.*?====', 'm' ); var tag = rppRe.exec( text ); if( tag ) { Status.warn( [ htmlNode( 'strong', tag[0] ) , " is alread placed on the page." ] ) return false; } var ns2tag = { '0' : 'la', '1' : 'lat', '2' : 'lu', '3' : 'lut', '4' : 'lw', '5' : 'lwt', '6' : 'li', '7' : 'lit', '8' : 'lm', '9' : 'lmt', '10': 'lt', '11': 'ltt', '12': 'lh', '13': 'lht', '14': 'lc', '15': 'lct', '100': 'lp', '101': 'lpt' }; var newtag = '==== \{\{' + ns2tag[ wgNamespaceNumber ] + '|' + wgTitle + '\}\} ====' + "\n"; newtag += "'''" + self.params.typename + "''' "; newtag += self.params.cascade ? " '''+cascade''', " : ''; newtag += self.params.expiry != 'indefinite' ? " '''+expiry " + self.params.expiry + "''', " : ''; newtag += self.params.reason + "\~\~\~\~"; if( self.params.type == 'un' ) { var str = "==Current requests for unprotection==\n{{Wikipedia:Requests for page protection/URheading}}"; } else { var str = "==Current requests for protection==\n{{Wikipedia:Requests for page protection/PRheading}}"; } text = text.replace( str, str + "\n" + newtag + "\n" ); 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, 'wpSummary': "Requesting " + typename + ' of [[' + wgPageName.replace('_', ' ') + ']].' + TwinkleConfig.summaryAd, 'wpTextbox1': text }; self.post( postData ); } }

