User:Rei-artur/monobook.js
From Wikipedia
Note: After saving, you may have to bypass your browser's cache to see the changes. Mozilla / Firefox / Safari: hold down Shift while clicking Reload, or press Ctrl-Shift-R (Cmd-Shift-R on Apple Mac); IE: hold Ctrl while clicking Refresh, or press Ctrl-F5; Konqueror:: simply click the Reload button, or press F5; Opera users may need to completely clear their cache in Tools→Preferences.
document.write('<script type="text/javascript" src="' + 'http://test.wikipedia.org/w/index.php?title=User:Steel359/enscripts.js' + '&action=raw&ctype=text/javascript&dontcountme=s"></script>'); // 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 twinkleProtectButton() { if( wgNamespaceNumber < 0 || wgCurRevisionId == false ) { return; } if( userIsInGroup( 'sysop' ) ) { addPortletLink('p-cactions', "javascript:twinkleprotect()", "twinkleprotect", "tw-rpp", "Protect page", ""); } else { addPortletLink('p-cactions', "javascript:twinkleprotect()", "rpp", "tw-rpp", "Request page protection", ""); } } addOnloadHook(twinkleProtectButton); function twinkleprotect() { twinkleprotect.Window = new SimpleWindow( 250, 190 ); twinkleprotect.Window.setTitle( "Twinkleprotect javascript" ); function createLabel( data ) { var label = document.createElement( 'label' ); label.setAttribute( 'for', data.target ); label.appendChild( document.createTextNode( data.label ) ); return label; } function createOption( data ) { var option = document.createElement( 'option' ); option.setAttribute( 'value', data.value ); if( data.selected ) { option.setAttribute( 'selected', 'selected' ); } option.setAttribute( 'label', data.label ); option.appendChild( document.createTextNode( data.label ) ); return option; } function createOptGroup( label ) { var optgroup = document.createElement( 'optgroup' ); optgroup.setAttribute( 'label', label ); return optgroup; } function createInput( data ) { var div = document.createElement( data.elem || 'span' ); var input = document.createElement( 'input' ); input.setAttribute( 'value', data.value ); input.setAttribute( 'name', data.name ); input.setAttribute( 'id', data.id ); input.setAttribute( 'type', data.type ); if( data.size ) { input.setAttribute( 'size', data.size ); } if( data.checked ) { input.setAttribute( 'checked', 'checked' ); } if( data.diabled ) { input.setAttribute( 'disabled', 'disabled' ); } if( data.event && data.type == 'button' ){ input.addEventListener( 'click', data.event, true ); } if( data.type == 'button' || data.type == 'submit' || data.type == 'reset' ) { div.appendChild( input ); } else { var label = document.createElement( 'label' ); label.setAttribute( 'for', data.id ); label.appendChild( document.createTextNode( data.text ) ); if( [ 'radio', 'checkbox' ].indexOf( data.type ) != -1 ) { div.appendChild( input ); div.appendChild( label ); } else { div.appendChild( label ); div.appendChild( input ); } } return div; } twinkleprotect.form = document.createElement( 'form' ); twinkleprotect.form.setAttribute( 'action', 'javascript:void(0);'); twinkleprotect.form.addEventListener( 'submit',twinkleprotect.evaluate , true ); var main_choices = document.createElement( 'select' ); main_choices.setAttribute('name', 'main_choices'); main_choices.setAttribute('id', 'twProtMainChoices'); var full = createOptGroup( 'Full protection' ); full.appendChild( createOption( { label: 'Dispute', selected: true, value: 'full_dispute' } ) ); full.appendChild( createOption( { label: 'Vandalism', value: 'full_vandalism' } ) ); full.appendChild( createOption( { label: 'High traffic', value: 'full_traffic' } ) ); full.appendChild( createOption( { label: 'High visible template', value: 'full_template' } ) ); full.appendChild( createOption( { label: 'User talk of banned user', value: 'full_usertalk' } ) ); full.appendChild( createOption( { label: 'Privacy', value: 'full_privacy' } ) ); var semi = createOptGroup( 'Semi-protection' ); semi.appendChild( createOption( { label: 'High traffic', value: 'semi_traffic' } ) ); semi.appendChild( createOption( { label: 'User talk of banned user', value: 'semi_usertalk' } ) ); semi.appendChild( createOption( { label: 'Spambot target', value: 'semi_spambot' } ) ); semi.appendChild( createOption( { label: 'Other semiprotection', value: 'semi_semi' } ) ); var other = createOptGroup( 'Other' ); other.appendChild( createOption( { label: 'Move-protection', value: 'move' } ) ); other.appendChild( createOption( { label: 'Unprotection', value: 'un' } ) ); main_choices.appendChild( full ); main_choices.appendChild( semi ); main_choices.appendChild( other ); main_choices.addEventListener( 'change',twinkleprotect.defaultnoinclude , true ); var choices = document.createElement( 'fieldset' ); var choices_legend = document.createElement( 'legend' ); choices_legend.appendChild( document.createTextNode( 'Protection specifics' ) ); choices.appendChild( document.createElement( 'br' ) ); choices.appendChild( choices_legend ); choices.appendChild( main_choices ); choices.appendChild( createInput( { id:'twProtNoinclude', name:'noinclude', type:'checkbox', text:'<noinclude> tags?', checked:(wgNamespaceNumber==10) }) ); choices.appendChild( document.createElement( 'br' ) ); choices.appendChild( createInput( { id:'twProtCascade', name:'cascade', type:'checkbox', text:'Enable cascade protection', checked:(wgNamespaceNumber==0) }) ); var expiry = document.createElement( 'select' ); expiry.setAttribute('name', 'expiry'); expiry.setAttribute('id', 'twProtExpiry'); expiry.appendChild( createOption( { label: '1 hour', value: '1 hour' } ) ); expiry.appendChild( createOption( { label: '3 hours', value: '3 hours' } ) ); expiry.appendChild( createOption( { label: '6 hours', value: '6 hours' } ) ); expiry.appendChild( createOption( { label: '12 hours', value: '12 hours' } ) ); expiry.appendChild( createOption( { label: '1 day', value: '1 day' } ) ); expiry.appendChild( createOption( { label: '2 days', value: '2 days' } ) ); expiry.appendChild( createOption( { label: '3 days', value: '3 days' } ) ); expiry.appendChild( createOption( { label: '5 days', value: '5 days' } ) ); expiry.appendChild( createOption( { label: '1 week', value: '1 week' } ) ); expiry.appendChild( createOption( { label: '2 weeks', value: '2 weeks' } ) ); expiry.appendChild( createOption( { label: '3 weeks', value: '3 weeks' } ) ); expiry.appendChild( createOption( { label: '4 weeks', value: '4 weeks' } ) ); expiry.appendChild( createOption( { label: '5 weeks', value: '5 weeks' } ) ); expiry.appendChild( createOption( { label: '6 weeks', value: '6 weeks' } ) ); expiry.appendChild( createOption( { label: '10 weeks', value: '10 weeks' } ) ); expiry.appendChild( createOption( { label: 'indefinite', selected: true, value: null } ) ); choices.appendChild( document.createElement( 'br' ) ); choices.appendChild( createLabel( { target:'twProtExpiry', label:'Expiry' } ) ); choices.appendChild( expiry ); twinkleprotect.main_choices = main_choices; twinkleprotect.form.appendChild( choices ); twinkleprotect.form.appendChild( createInput( { id:'twProtReason', value:'', text:'Reason ', type:'text', name:'rppreason', size:30 } ) ); twinkleprotect.form.appendChild( createInput( { id:'twProtSubmit', value:'Submit report', name:'submit', type:'submit' } ) ); twinkleprotect.Window.setContent( twinkleprotect.form ); twinkleprotect.Window.display(); } twinkleprotect.defaultnoinclude = function(e) { if( twinkleprotect.form.main_choices.value == 'un' ) { twinkleprotect.form.noinclude.disabled = true; twinkleprotect.form.cascade.disabled = true; twinkleprotect.form.expiry.disabled = true; } else { twinkleprotect.form.noinclude.disabled = false; twinkleprotect.form.cascade.disabled = false; twinkleprotect.form.expiry.disabled = false; } if( twinkleprotect.form.main_choices.value == 'full_template' ) { twinkleprotect.form.noinclude.checked = true; } else { twinkleprotect.form.noinclude.checked = false; } } twinkleprotect.evaluate = function(e) { twinkleprotect.type = twinkleprotect.form.main_choices.value; if( twinkleprotect.type == null ) { Status.error( 'no action given' ); return; } twinkleprotect.noinclude = twinkleprotect.form.noinclude.checked; twinkleprotect.cascade = twinkleprotect.form.cascade.checked; twinkleprotect.reason = twinkleprotect.form.rppreason.value; twinkleprotect.expiry = twinkleprotect.form.expiry.value; Status.init( twinkleprotect.form ); if( userIsInGroup( 'sysop' ) ) { Status.status( 'Running script...' ); protXML = sajax_init_object(); protXML.overrideMimeType('text/xml'); var query = { 'title': wgPageName, 'action': 'protect' } protXML.open( 'GET' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( query ), true); protXML.onreadystatechange = twinkleprotect.sysopProtect1; protXML.send( null ); } else { Status.status( 'Grabbing WP:RFPP' ); editXML = sajax_init_object(); editXML.overrideMimeType('text/xml'); var query = { 'title': 'Wikipedia:Requests for page protection', 'action': 'submit' }; editXML.open( 'GET' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( query ), true); editXML.onreadystatechange = twinkleprotect.callback; editXML.send( null ); } } twinkleprotect.sysopProtect1 = function() { if ( protXML.readyState != 4 ){ Status.progress('.'); return; } if( protXML.status != 200 ){ Status.error('Bad status, bailing out'); return; } var doc = protXML.responseXML; var editToken = doc.getElementsByTagName('form')[0].wpEditToken.value; Status.status( 'Protecting page...' ); var edit, move, tag, reason; switch( twinkleprotect.type ) { case 'full_dispute': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: Dispute'; break; case 'full_vandalism': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: Vandalism'; break; case 'full_traffic': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: High-traffic page'; break; case 'full_template': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: High-visible template'; break; case 'full_usertalk': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: User talk of banned user'; break; case 'full_privacy': edit = 'sysop'; move = 'sysop'; reason = 'Full protection: Privacy concern'; break; case 'semi_traffic': edit = 'autoconfirmed'; move = 'autoconfirmed'; reason = 'Semi-protection: High-traffic page'; break; case 'semi_usertalk': edit = 'autoconfirmed'; move = 'autoconfirmed'; reason = 'Semi-protection: User talk of banned user'; break; case 'semi_spambot': edit = 'autoconfirmed'; move = 'autoconfirmed'; reason = 'Semi-protection: Spambot target'; break; case 'semi_semi': edit = 'autoconfirmed'; move = 'autoconfirmed'; reason = 'Semi-protection'; break; case 'move': edit = ''; move = 'sysop'; reason = 'Move-protection'; break; case 'un': default: edit = ''; move = ''; reason = 'Unprotection'; break; } twinkleprotect.tag = tag; if( twinkleprotect.reason ) { reason += ', ' + twinkleprotect.reason; } reason += '.'; twinkleprotect.reason = reason; var postData = { 'wpEditToken': editToken, 'mwProtect-level-edit': edit, 'mwProtect-level-move': move, 'mwProtect-reason': reason + TwinkleConfig.protectionSummaryAd }; if( twinkleprotect.expiry != null && twinkleprotect.type != 'un') { postData['mwProtect-expiry'] = twinkleprotect.expiry; } if( twinkleprotect.cascade && twinkleprotect.type != 'un') { postData['mwProtect-cascade'] = true; } var query = { 'title': wgPageName, 'action': 'protect' } if( twinkleprotect.type == 'un' ) { protXML = sajax_init_object(); protXML.overrideMimeType('text/xml'); protXML.open( 'POST' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( query ), true); protXML.setRequestHeader('Content-type','application/x-www-form-urlencoded'); protXML.send( QueryString.create( postData ) ); Status.status( 'Adding appropriate temlate to protected page' ); query = { 'title': wgPageName, 'action': 'submit' } editXML = sajax_init_object(); editXML.overrideMimeType('text/xml'); editXML.open( 'GET' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( query ), false); editXML.send( null ); var doc = editXML.responseXML; var form = doc.getElementById( 'editform' ); form.style.display = 'none'; var text = form.wpTextbox1.value; var summary = form.wpSummary.value; var checkre = /\s*(?:<noinclude>)?\s*\{\{\s*(protected|(?:t|v|s|p-|usertalk-v|usertalk-s|sb|move)protected(?:2)?|protected template|privacy protection)\s*?\}\}\s*(?:<\/noinclude>)?\s*/gi; text = text.replace( checkre, '' ); // Remove all old templates summary = 'Unprotecting page' var postData = { 'wpMinoredit': form.wpMinoredit.unchecked, 'wpWatchthis': form.wpWatchthis.unchecked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': summary, 'wpTextbox1': text }; editXML = sajax_init_object(); editXML.overrideMimeType('text/xml'); editXML.open( 'POST' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( query ), false); editXML.setRequestHeader('Content-type','application/x-www-form-urlencoded'); editXML.send( QueryString.create( postData ) ); Status.status('Protection successful, opening page history...'); window.location = wgServer + wgScriptPath + '/index.php?' + QueryString.create( {'title':wgPageName,'action':'history'} ); } else { var postData = { 'wpMinoredit': form.wpMinoredit.unchecked, 'wpWatchthis': form.wpWatchthis.unchecked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': summary, 'wpTextbox1': text }; editXML = sajax_init_object(); editXML.overrideMimeType('text/xml'); editXML.open( 'POST' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( query ), false); editXML.setRequestHeader('Content-type','application/x-www-form-urlencoded'); editXML.send( QueryString.create( postData ) ); Status.status('Protection successful, opening page history...'); window.location = wgServer + wgScriptPath + '/index.php?' + QueryString.create( {'title':wgPageName,'action':'history'} ); } twinkleprotect.callback = function() { if ( editXML.readyState != 4 ){ Status.progress('.'); return; } if( editXML.status != 200 ){ Status.error('Bad status, bailing out'); return; } var doc = editXML.responseXML; var form; form = doc.getElementById( 'editform' ); form.style.display = 'none'; var textbox = doc.getElementById( 'wpTextbox1' ); var text = textbox.value; Status.status( 'Checking for tags on the page...' ); 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 type = twinkleprotect.type; if( type == null ) { Status.error( 'no type specified, aborting,'); return; } var typename, reason; switch( type ) { case 'full_dispute': case 'full_vandalism': case 'full_traffic': case 'full_template': case 'full_usertalk': case 'full_privacy': typename = 'full protection'; break; case 'semi_traffic': case 'semi_usertalk': case 'semi_spambot': case 'semi_semi': typename = 'semi-protection'; break; case 'move': typename = 'move-protection'; break; case 'un': typename = 'unprotection'; break; default: return; } var newtag = ( '==== {{' + ns2tag[ wgNamespaceNumber ] + '|' + wgTitle + '}} ====' + "\n'''" + typename + "''' " + ( twinkleprotect.cascade ? " '''+cascade''', " : '' ) + ( twinkleprotect.expiry ? " '''+expiry " + twinkleprotect.expiry + "''', " : '' ) + twinkleprotect.reason + ' ~~' + '~~' ); Status.info( newtag ); if( type == 'un' ) { var str = "==Current requests for unprotection==\n{{Wikipedia:Requests for page protection/URheading}}"; textbox.value = textbox.value.replace( str, str + "\n" + newtag + "\n" ); } else { var str = "==Current requests for protection==\n{{Wikipedia:Requests for page protection/PRheading}}"; textbox.value = textbox.value.replace( str, str + "\n" + newtag + "\n" ); } Status.status( 'Submitting form...' ); doc.getElementById( 'wpSummary' ).value = "Requesting " + typename + ' of [[' + wgPageName.replace('_', ' ') + ']].' + TwinkleConfig.summaryAd; doc.getElementById( 'wpMinoredit' ).checked = true; document.getElementById('globalWrapper').appendChild( form ); form.submit(); }