Difference between revisions 3762303 and 3762304 on simplewiki

// If TwinkleConfig aint exist.
if( typeof( TwinkleConfig ) == 'undefined' ) {
	TwinkleConfig = {};
}

/**
 TwinkleConfig.defaultGroup (int)
 if true, watch the page which has been dispatched an warning or notice, if false, default applies
 */
if( typeof( TwinkleConfig.defaultWarningGroup ) == 'undefined' ) {
	TwinkleConfig.defaultWarningGroup = 1;
}

/**
 TwinkleConfig.showSharedIPNotice may take arguments:
 true: to show shared ip notice if an IP address
 false: to not print the notice
 */
if( typeof( TwinkleConfig.showSharedIPNotice ) == 'undefined' ) {
	TwinkleConfig.showSharedIPNotice = false;
}

/**
 TwinkleConfig.watchWarnings (boolean)
 if true, watch the page which has been dispatched an warning or notice, if false, default applies
 */
if( typeof( TwinkleConfig.watchWarnings ) == 'undefined' ) {
	TwinkleConfig.watchWarnings = true;
}

/**
 TwinkleConfig.blankTalkpageOnIndefBlock (boolean)
 if true, blank the talk page when issuing an indef block notice (per [[WP:UW#Indefinitely blocked users]])
 */
if( typeof( TwinkleConfig.blankTalkpageOnIndefBlock ) == 'undefined' ) {
	TwinkleConfig.blankTalkpageOnIndefBlock = false;
}

/**
 TwinkleConfig.summaryAd (string)
 If ad should be added or not to summary, default [[WP:TWINKLE|TWINKLE]]
 */
if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) {
	TwinkleConfig.summaryAd = "([[WP:TW|TW]])";
}

function twinklewarnelcome() {
	if( wgNamespaceNumber == 3 ) {
		twAddPortletLink( (twinkleConfigExists ? "javascript:twinklewarnelcome.callback()" : 'javascript:alert("Your account is too new to use Twinkle.");'), "Warnel", "tw-warn", "Warn or Notifyelcome", "Welcome user", "");
	}
}
window.TwinkleInit = (window.TwinkleInit || []).concat( twinklewarnelcome); //schedule initializer

twinklewarnelcome.callback = function twinklewarnelcomeCallback() {
	var Window = new SimpleWindow( 600, 400 );
	Window.setTitle( "Twinkle ยท warn or notifyWelcome user" );
	var form = new QuickForm( twinklewarnelcome.callback.evaluate );

	var main_select = form.append( {
			type:'field',
			label:'Choose type of warning/notice to issue',
			tooltip:'First choose a main warning group, then the specific warning to issue.'
		} );

	var main_group = main_select.append( {
			type:'select',
			name:'main_group',
			event:twinklewarnelcome.callback.change_category
		} );

	main_group.append( { type:'option', label:'General Note (1)', value:'level1', selected: ( TwinkleConfig.defaultWarningGroup == 1 || TwinkleConfig.defaultWarningGroup < 1 || ( userIsInGroup( 'sysop' ) ? TwinkleConfig.defaultWarningGroup > 8 : TwinkleConfig.defaultWarningGroup > 7 ) ) } );
(contracted; show full)
    main_group.append( { type:'option', label:'Welcome messages', value:'welcome', selected: ( TwinkleConfig.defaultWarningGroup == 9 ) } );
	if( userIsInGroup( 'sysop' ) ) {
		main_group.append( { type:'option', label:'Blocking', value:'block', selected: ( TwinkleConfig.defaultWarningGroup == 8 ) } );
	}

	main_select.append( { type:'select', name:'sub_group', event:twinklew
arnelcome.callback.change_subcategory } ); //Will be empty to begin with.

	form.append( {
			type:'input',
			name:'article',
			label:'Linked article',
			value:( QueryString.exists( 'vanarticle' ) ? QueryString.get( 'vanarticle' ) : '' ),
			tooltip:'An article might be linked to the notice, either it was a revert to said article that dispatched this notice. Leave empty for no article to be linked'
		} );


	var more = form.append( { type:'field', label:'Fill in an optional reason and hit \"Submit\"' } );
	more.append( { type:'textarea', label:'More:', name:'reason', tooltip:'Perhaps a reason, or that a more detailed notice must be appended' } );
	more.append( { type:'submit', label:'Submit' } );
	var result = form.render();
	Window.setContent( result );
	Window.display();
	result.main_group.root = result;

	// We must init the first choice (General Note);
	var evt = document.createEvent( "Event" );
	evt.initEvent( 'change', true, true );
	result.main_group.dispatchEvent( evt );

}

// This is all the messages that might be dispatched by the code
twinklewarnelcome.messages = {
	level1: {
		"uw-vandalism1": { 
			label:"Vandalism", 
			summary:"General note: Vandalism" 
		},
		"uw-test1": { 
			label:"Editing tests", 
(contracted; show full)			'label':"Open proxy",
			'summary':"You have been blocked because this IP is an [[open proxy]]"
		}
	}
};


twinklew
arnelcome.prev_block_timer = null;
twinklewarnelcome.prev_article = null;
twinklewarnelcome.prev_reason = null;

twinklewarnelcome.callback.change_category = function twinklewarnelcomeCallbackChangeCategory(e) {
	var value = e.target.value;
	var sub_group = e.target.root.sub_group;
	var messages = twinklewarnelcome.messages[ value ];
	sub_group.main_group = value;
	var old_subvalue = sub_group.value;
	if( old_subvalue ) {
		old_subvalue = old_subvalue.replace(/\d*(im)?$/, '' );
		var old_subvalue_re = new RegExp( RegExp.escape( old_subvalue ) + "(\\d*(?:im)?)$" );
	}

	while( sub_group.hasChildNodes() ){
		sub_group.removeChild( sub_group.firstChild );
	}

	for( var i in messages ) {
		var selected = false;
		if( old_subvalue && old_subvalue_re.test( i ) ) {
			selected = true;
		}
		var elem = new QuickForm.element( { type:'option', label:"[" + i + "]: " + messages[i].label, value:i, selected: selected } );
		
		sub_group.appendChild( elem.render() );
	}

	if( value == 'block' ) {
		var more = new QuickForm.element( {
				type: 'input',
				name: 'block_timer',
				label: 'Period of blocking: ',
				tooltip: 'The period the blocking is due for, for example 24 hours, 2 weeks, indefinite etc...'
			} );
		e.target.root.insertBefore( more.render(), e.target.root.lastChild );
		if(!(twinklewarnelcome.prev_block_timer === null)) {
			e.target.root.block_timer.value = twinklewarnelcome.prev_block_timer;
			twinklewarnelcome.prev_block_timer = null;
		}		
		if(twinklewarnelcome.prev_article === null) {
			twinklewarnelcome.prev_article = e.target.root.article.value;
		}
		e.target.root.article.disabled = true;
		e.target.root.article.value = '';
	} else if( e.target.root.block_timer ) {
		if(!e.target.root.block_timer.disabled && twinklewarnelcome.prev_block_timer === null) {
			twinklewarnelcome.prev_block_timer = e.target.root.block_timer.value;
		}
		e.target.root.removeChild( e.target.root.block_timer.parentNode );
		if(e.target.root.article.disabled && !(twinklewarnelcome.prev_article === null)) {
			e.target.root.article.value = twinklewarnelcome.prev_article;
			twinklewarnelcome.prev_article = null;
		}
		e.target.root.article.disabled = false;
		if(e.target.root.reason.disabled && !(twinklewarnelcome.prev_reason === null)) {
			e.target.root.reason.value = twinklewarnelcome.prev_reason;
			twinklewarnelcome.prev_reason = null;
		}
		e.target.root.reason.disabled = false;
	}
}

twinklewarnelcome.callback.change_subcategory = function twinklewarnelcomeCallbackChangeSubcategory(e) {
	var main_group = e.target.main_group;
	var value = e.target.value;

	if( main_group == 'singlewarn' ) {
		if( value == 'uw-username' ) {
			if(twinklewarnelcome.prev_article === null) {
				twinklewarnelcome.prev_article = e.target.form.article.value;
			}
			e.target.form.article.disabled = true;
			e.target.form.article.value = '';
		} else if( e.target.form.article.disabled ) {
			if(!(twinklewarnelcome.prev_article === null)) {
				e.target.form.article.value = twinklewarnelcome.prev_article;
				twinklewarnelcome.prev_article = null;
			}
			e.target.form.article.disabled = false;
		}
	} else if( main_group == 'block' ) {
		if( value == 'uw-block3' || value == 'UsernameBlocked' || value == 'UsernameHardBlocked' || value == 'openproxy') {
			if(twinklewarnelcome.prev_block_timer === null) {
				twinklewarnelcome.prev_block_timer = e.target.form.block_timer.value;
			}
			e.target.form.block_timer.disabled = true;
			e.target.form.block_timer.value = 'indef';
		} else if( e.target.form.block_timer.disabled ) {
			if(!(twinklewarnelcome.prev_block_timer === null)) {
				e.target.form.block_timer.value = twinklewarnelcome.prev_block_timer;
				twinklewarnelcome.prev_block_timer = null;
			}
			e.target.form.block_timer.disabled = false;
		}

		if( value == 'uw-3block' ) {
			if(!(twinklewarnelcome.prev_article === null)) {
				e.target.form.article.value = twinklewarnelcome.prev_article;
				twinklewarnelcome.prev_article = null;
			}
			e.target.form.article.disabled = false;
		} else if( !e.target.form.article.disabled ) {
			if(twinklewarnelcome.prev_article === null) {
				twinklewarnelcome.prev_article = e.target.form.article.value;
			}
			e.target.form.article.disabled = true;
			e.target.form.article.value = '';
		}

		if( value == 'uw-block3') {
			if(!(twinklewarnelcome.prev_reason === null)) {
				e.target.form.reason.value = twinklewarnelcome.prev_reason;
				twinklewarnelcome.prev_reason = null;
			}
			e.target.form.reason.disabled = false;
		} else if( !e.target.form.reason.disabled ) {
			if(twinklewarnelcome.prev_reason === null) {
				twinklewarnelcome.prev_reason = e.target.form.reason.value;
			}
			e.target.form.reason.disabled = true;
			e.target.form.reason.value = '';
		}
	}
}

twinklewarnelcome.callbacks = {
	main: function( self ) {
		var form = self.responseXML.getElementById( 'editform' );
		var text = form.wpTextbox1.value;

		var history_re = /\<\!\-\-\ Template\:(uw\-.*?)\ \-\-\>.*?(\d{1,2}:\d{1,2}, \d{1,2} \w+ \d{4}) \(UTC\)/g;
		var history = {};
		var latest = { date:new Date( 0 ), type:'' };
(contracted; show full)
			'wpWatchthis': (form.wpWatchthis.checked || TwinkleConfig.watchWarnings) ? 1 : undefined,
			'wpStarttime': form.wpStarttime.value,
			'wpEdittime': form.wpEdittime.value,
			'wpAutoSummary': form.wpAutoSummary.value,
			'wpEditToken': form.wpEditToken.value,
			'wpSection': '',
			'wpSummary': twinklew
arnelcome.messages[self.params.main_group][self.params.sub_group].summary + ( self.params.article ? ' on [[' + self.params.article + ']]'  : '' ) + '.' + TwinkleConfig.summaryAd,
			'wpTextbox1': text
		};

		self.post( postData );
	}
}

twinklewarnelcome.callback.evaluate = function twinklewarnelcomeCallbackEvaluate(e) {

	// First, check to make sure a reason was filled in if uw-username was selected
	
	if(e.target.sub_group.value == 'uw-username' && e.target.reason.value.trim() == '') {
		alert("You must supply a reason for the \{\{uw-username}} template");
		return;
	}

	// Then, grab all the values provided by the form
	
	var params = {
		reason: e.target.reason.value,
		main_group: e.target.main_group.value,
		sub_group: e.target.sub_group.value,
		article: e.target.article.value.replace( /^(Image|Category):/i, ':$1:' ),
		block_timer: e.target.block_timer ? e.target.block_timer.value : null
	}

	Status.init( e.target );

	var query = { 
		'title': wgPageName, 
		'action': 'submit'
	};
	Wikipedia.actionCompleted.redirect = wgPageName;
	Wikipedia.actionCompleted.notice = "Warning complete, reloading talk page in a few seconds";
	var wikipedia_wiki = new Wikipedia.wiki( 'User talk page modification', query, twinklewarnelcome.callbacks.main );
	wikipedia_wiki.params = params;
	wikipedia_wiki.followRedirect = true;
	wikipedia_wiki.get();
}