Jump to content

User:Amanda Atom/vector.js

From Simple English Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// 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 twinklewarn() {
	if( wgNamespaceNumber == 3 ) {
		twAddPortletLink( (twinkleConfigExists ? "javascript:twinklewarn.callback()" : 'javascript:alert("Your account is too new to use Twinkle.");'), "Warn", "tw-warn", "Warn/Notify user", "");
	}
}
window.TwinkleInit = (window.TwinkleInit || []).concat( twinklewarn); //schedule initializer
 
twinklewarn.callback = function twinklewarnCallback() {
	var Window = new SimpleWindow( 600, 400 );
	Window.setTitle( "Warn/Notify user" );
	var form = new QuickForm( twinklewarn.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:twinklewarn.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 ) ) } );
	main_group.append( { type:'option', label:'Caution (2)', value:'level2', selected: ( TwinkleConfig.defaultWarningGroup == 2 ) } );
	main_group.append( { type:'option', label:'Warning (3)', value:'level3', selected: ( TwinkleConfig.defaultWarningGroup == 3 ) } );
	main_group.append( { type:'option', label:'Final warning (4)', value:'level4', selected: ( TwinkleConfig.defaultWarningGroup == 4 ) } );
	main_group.append( { type:'option', label:'Only warning (4im)', value:'level4im', selected: ( TwinkleConfig.defaultWarningGroup == 5 ) } );
	main_group.append( { type:'option', label:'Single issue notices', value:'singlenotice', selected: ( TwinkleConfig.defaultWarningGroup == 6 ) } );
	main_group.append( { type:'option', label:'Single issue warnings', value:'singlewarn', selected: ( TwinkleConfig.defaultWarningGroup == 7 ) } );
    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:twinklewarn.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
twinklewarn.messages = {
	level1: {
		"uw-vandalism1": { 
			label:"Vandalism", 
			summary:"General note: Vandalism" 
		},
		"uw-test1": { 
			label:"Editing tests", 
			summary:"General note: Editing tests" 
		},
		"uw-delete1": { 
			label:"Page blanking, removal of content or templates", 
			summary:"General note: Page blanking, removal of content or templates" 
		},
		"uw-create1": { 
			label:"Creating inappropriate pages", 
			summary:"General note: Creating inappropriate pages" 
		},
		"uw-spam1": { 
			label:"Adding spam links", 
			summary:"General note: Adding spam links" 
		},
		"uw-advert1": { 
			label:"Using Wikipedia for advertising or promotion", 
			summary:"General note: Using Wikipedia for advertising or promotion" 
		},
		"uw-npov1": { 
			label:"Not writing from a neutral point of view", 
			summary:"General note: Not adhering to neutral point of view" 
		},
		"uw-mos1": { 
			label:"Manual of style", 
			summary:"General note: Formatting, date, language, etc (Manual of style)" 
		},
		"uw-npa1": { 
			label:"Personal attack directed at a specific editor", 
			summary:"General note: Personal attack directed at a specific editor" 
		},
		"uw-agf1": { 
			label:"Not assuming good faith", 
			summary:"General note: Not assuming good faith" 
		},
		"uw-copyright1": { 
			label:"Copyright violation", 
			summary:"General note: Violating copyright" 
		},
		"uw-error1": { 
			label:"Adding incorrect information", 
			summary:"General note: Adding incorrect information" 
		}
 
	},
	level2: {
		"uw-vandalism2": { 
			label:"Vandalism", 
			summary:"Caution: Vandalism" 
		},
		"uw-test2": { 
			label:"Editing tests", 
			summary:"Caution: Editing tests" 
		},
		"uw-delete2": { 
			label:"Page blanking, removal of content or templates", 
			summary:"Caution: Page blanking, removal of content or templates" 
		},
		"uw-create2": { 
			label:"Creating inappropriate pages", 
			summary:"Caution: Creating inappropriate pages" 
		},
		"uw-advert2": { 
			label:"Using Wikipedia for advertising or promotion", 
			summary:"Caution: Using Wikipedia for advertising or promotion" 
		},
		"uw-npov2": { 
			label:"Not adhering to neutral point of view", 
			summary:"Caution: Not adhering to neutral point of view" 
		},
		"uw-mos2": { 
			label:"Manual of style", 
			summary:"Caution: Formatting, date, language, etc (Manual of style)" 
		},
		"uw-npa2": { 
			label:"Personal attack directed at a specific editor", 
			summary:"Caution: Personal attack directed at a specific editor" 
		},
		"uw-agf2": { 
			label:"Not assuming good faith", 
			summary:"Caution: Not assuming good faith" 
		},
		"uw-copyright2": { 
			label:"Copyright violation", 
			summary:"Caution: Violating copyright" 
		},
		"uw-error2": { 
			label:"Adding incorrect information", 
			summary:"Caution: Adding incorrect information" 
		}
 
	},
	level3: {
		"uw-vandalism3": { 
			label:"Vandalism", 
			summary:"Warning: Vandalism" 
		},
		"uw-test3": { 
			label:"Editing tests", 
			summary:"Warning: Editing tests" 
		},
		"uw-delete3": { 
			label:"Page blanking, removal of content or templates", 
			summary:"Warning: Page blanking, removal of content or templates" 
		},
		"uw-create3": { 
			label:"Creating inappropriate pages", 
			summary:"Warning: Creating inappropriate pages" 
		},
		"uw-npov3": { 
			label:"Not adhering to neutral point of view", 
			summary:"Warning: Not adhering to neutral point of view" 
		},
		"uw-mos3": { 
			label:"Manual of style", 
			summary:"Warning: Formatting, date, language, etc (Manual of style)" 
		},
		"uw-npa3": { 
			label:"Personal attack directed at a specific editor", 
			summary:"Warning: Personal attack directed at a specific editor" 
		},
		"uw-agf3": { 
			label:"Not assuming good faith", 
			summary:"Warning: Not assuming good faith" 
		}
	},
	level4: {
		"uw-vandalism4": { 
			label:"Vandalism", 
			summary:"Final warning: Vandalism" 
		},
		"uw-test4": { 
			label:"Editing tests", 
			summary:"Final warning: Editing tests" 
		},
		"uw-create4": { 
			label:"Creating inappropriate pages", 
			summary:"Final warning: Creating inappropriate pages" 
		},
		"uw-npov4": { 
			label:"Not adhering to neutral point of view", 
			summary:"Final warning: Not adhering to neutral point of view" 
		},
		"uw-mos4": { 
			label:"Manual of style", 
			summary:"Final warning: Formatting, date, language, etc (Manual of style)" 
		},
		"uw-npa4": { 
			label:"Personal attack directed at a specific editor", 
			summary:"Final warning: Personal attack directed at a specific editor"
		}
	},
	level4im: {
		"uw-vandalism4im": { 
			label:"Vandalism", 
			summary:"Only warning: Vandalism" 
		},
		"uw-test4im": { 
			label:"Editing tests", 
			summary:"Only warning: Editing tests" 
		},
		"uw-npov4im": { 
			label:"Not adhering to neutral point of view", 
			summary:"Only warning: Not adhering to neutral point of view" 
		},
		"uw-mos4im": { 
			label:"Manual of style", 
			summary:"Only warning: Formatting, date, language, etc (Manual of style)" 
		},
		"uw-npa4im": { 
			label:"Personal attack directed at a specific editor", 
			summary:"Only warning: Personal attack directed at a specific editor"
		}
	},
	welcome: {
		"anon": { 
			label:"Welcomes and suggests getting username", 
			summary:"Welcome to the Simple English Wikipedia" 
		},
		"welcome": { 
			label:"Plain text welcome", 
			summary:"Welcome to the Simple English Wikipedia" 
		},
		"welcome2": { 
			label:"Welcome with graphic and orange background", 
			summary:"Welcome to the Simple English Wikipedia" 
		},
		"welcomeg": { 
			label:"Welcome with blue background", 
			summary:"Welcome to the Simple English Wikipedia" 
		},
		"welcomeq": { 
			label:"Like welcomeg but shorter", 
			summary:"Welcome to the Simple English Wikipedia" 
		},
		"welcome-en": { 
			label:"Welcome from English Wikipedia", 
			summary:"Welcome to the Simple English Wikipedia" 
		},
		"welcome-iw": { 
			label:"Welcome from another Wikipedia", 
			summary:"Welcome to the Simple English Wikipedia" 
		},
		"welcomevandal": { 
			label:"Welcome with information about vandalism", 
			summary:"Welcome to the Simple English Wikipedia" 
		}
	},
	singlenotice: {
		"uw-badcat": { 
			label:"Adding incorrect categories", 
			summary:"Notice: Adding incorrect categories" 
		},
		"uw-bite": { 
			label:"\"Biting\" newcomers", 
			summary:"Notice: \"Biting\" newcomers" 
		},
		"uw-emptycat": { 
			label:"Category created does not contain enough pages", 
			summary:"Notice: Creating empty categories" 
		},
		"uw-encopypaste": { 
			label:"Direct copying of article from English Wikipedia", 
			summary:"Notice: Direct copying of article from English Wikipedia" 
		},
		"uw-lang": { 
			label:"Changing between types of English without a good reason", 
			summary:"Notice: Unnecessarily changing between British and American English" 
		},
		"uw-newarticle": { 
			label:"Tips on creating new articles", 
			summary:"Notice: How to make your articles better" 
		},
		"uw-otherweb": { 
			label:"Use \"Other websites\", not \"External links\"", 
			summary:"Notice: Use \"Other websites\", not \"External links\"" 
		},
		"uw-selfrevert": { 
			label:"Undoing recent test", 
			summary:"Notice: Undoing recent test" 
		},
		"uw-simple": { 
			label:"Not making changes in simple English", 
			summary:"Notice: Not making changes in simple English" 
		},
		"uw-spellcheck": { 
			label:"Review spelling, etc.", 
			summary:"Notice: Review spelling, etc." 
		},
		"uw-subst": { 
			label:"Remember to subst: templates", 
			summary:"Notice: Remember to subst: templates" 
		},
		"uw-tilde": { 
			label:"Not signing posts", 
			summary:"Notice: Not signing posts" 
		},
		"uw-upload": { 
			label:"Image uploads not allowed in Simple English Wikipedia", 
			summary:"Notice: Image uploads not allowed in Simple English Wikipedia"
		}
	},
	singlewarn: {
		"uw-attack": { 
			label:"Creating attack pages", 
			summary:"Warning: Creating attack pages" 
		},
                "uw-disruption": { 
			label:"Project disruption", 
			summary:"Warning: Project disruption" 
		},
		"uw-qd": { 
			label:"Removing quick deletion templates from articles", 
			summary:"Warning: Removing quick deletion templates from articles"
		},
		"uw-userpage": { 
			label:"Userpage or subpage is against policy", 
			summary:"Warning: Userpage or subpage is against policy"
		},
		"cyberbully warning": { 
			label:"Cyberbullying", 
			summary:"Warning: Cyberbullying"
		}
	},
	block: {
		"uw-block1": {
			'label':"Block level 1",
			'summary':"You have been temporarily blocked"
		},
		"uw-block2": {
			'label':"Block level 2",
			'summary':"You have been blocked"
		},
		"uw-block3": {
			'label':"Block level 3",
			'summary':"You have been indefinitely blocked"
		},
		"UsernameBlocked": {
			'label':"Username block",
			'summary':"You have been blocked for violation of the [[WP:U|username policy]]"
		},
		"UsernameHardBlocked": {
			'label':"Username hard block",
			'summary':"You have been blocked for a blatant violation of the [[WP:U|username policy]]"
		},
                "openproxy": {
			'label':"Open proxy",
			'summary':"You have been blocked because this IP is an [[open proxy]]"
		}
	}
};
 
 
twinklewarn.prev_block_timer = null;
twinklewarn.prev_article = null;
twinklewarn.prev_reason = null;
 
twinklewarn.callback.change_category = function twinklewarnCallbackChangeCategory(e) {
	var value = e.target.value;
	var sub_group = e.target.root.sub_group;
	var messages = twinklewarn.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(!(twinklewarn.prev_block_timer === null)) {
			e.target.root.block_timer.value = twinklewarn.prev_block_timer;
			twinklewarn.prev_block_timer = null;
		}		
		if(twinklewarn.prev_article === null) {
			twinklewarn.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 && twinklewarn.prev_block_timer === null) {
			twinklewarn.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 && !(twinklewarn.prev_article === null)) {
			e.target.root.article.value = twinklewarn.prev_article;
			twinklewarn.prev_article = null;
		}
		e.target.root.article.disabled = false;
		if(e.target.root.reason.disabled && !(twinklewarn.prev_reason === null)) {
			e.target.root.reason.value = twinklewarn.prev_reason;
			twinklewarn.prev_reason = null;
		}
		e.target.root.reason.disabled = false;
	}
}
 
twinklewarn.callback.change_subcategory = function twinklewarnCallbackChangeSubcategory(e) {
	var main_group = e.target.main_group;
	var value = e.target.value;
 
	if( main_group == 'singlewarn' ) {
		if( value == 'uw-username' ) {
			if(twinklewarn.prev_article === null) {
				twinklewarn.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(!(twinklewarn.prev_article === null)) {
				e.target.form.article.value = twinklewarn.prev_article;
				twinklewarn.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(twinklewarn.prev_block_timer === null) {
				twinklewarn.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(!(twinklewarn.prev_block_timer === null)) {
				e.target.form.block_timer.value = twinklewarn.prev_block_timer;
				twinklewarn.prev_block_timer = null;
			}
			e.target.form.block_timer.disabled = false;
		}
 
		if( value == 'uw-3block' ) {
			if(!(twinklewarn.prev_article === null)) {
				e.target.form.article.value = twinklewarn.prev_article;
				twinklewarn.prev_article = null;
			}
			e.target.form.article.disabled = false;
		} else if( !e.target.form.article.disabled ) {
			if(twinklewarn.prev_article === null) {
				twinklewarn.prev_article = e.target.form.article.value;
			}
			e.target.form.article.disabled = true;
			e.target.form.article.value = '';
		}
 
		if( value == 'uw-block3') {
			if(!(twinklewarn.prev_reason === null)) {
				e.target.form.reason.value = twinklewarn.prev_reason;
				twinklewarn.prev_reason = null;
			}
			e.target.form.reason.disabled = false;
		} else if( !e.target.form.reason.disabled ) {
			if(twinklewarn.prev_reason === null) {
				twinklewarn.prev_reason = e.target.form.reason.value;
			}
			e.target.form.reason.disabled = true;
			e.target.form.reason.value = '';
		}
	}
}
 
twinklewarn.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:'' };
		var current;
 
		while( ( current = history_re.exec( text ) ) != undefined ) {
			var current_date = new Date( current[2] + ' UTC' );
			if( !( current[1] in history ) ||  history[ current[1] ] < current_date ) {
				history[ current[1] ] = current_date;
			}
			if( current_date > latest.date ) {
				latest.date = current_date;
				latest.type = current[1];
			}
		}
 
		var date = new Date();
 
		if( self.params.sub_group in history ) {
			var temp_time = new Date( history[ self.params.sub_group ] );
			temp_time.setUTCHours( temp_time.getUTCHours() + 24 );
 
			if( temp_time > date ) {
				Status.info( 'Info', "an identical " + self.params.sub_group + " has been issued in the last 24 hours" );
				if( !confirm( "Would you still like to add a warning/notice?" ) ) {
					self.statelem.info( 'aborted per user request' );
					return;
				}
			}
		}
 
		latest.date.setUTCMinutes( latest.date.getUTCMinutes() + 1 ); // after long debate, one minute is max
 
		if( latest.date > date ) {
			Status.info('Info', "a " + latest.type + " has been issued in the last minute" );
				if( !confirm( "Would you still like to add a warning/notice?" ) ) {
					self.statelem.info( 'aborted per user request' );
					return;
				}
		}
 
		var mainheaderRe = /==+\\s*Warnings\\s*==+/;
		var headerRe = new RegExp( "^==+\\s*(?:" + date.getUTCMonthName() + '|' + date.getUTCMonthNameAbbrev() +  ")\\s+" + date.getUTCFullYear() + "\\s*==+", 'm' );
 
		if( text.length > 0 ) {
			text += "\n";
		}
 
		if( self.params.main_group == 'block' ) {
			var article = '', reason = '', time = null;
 
			if( TwinkleConfig.blankTalkpageOnIndefBlock && ( /indef|\*|max/.exec( self.params.block_timer ) || self.params.sub_group == 'uw-block3' || self.params.sub_group == 'uw-soablock' || self.params.sub_group == 'uw-voablock' || self.params.sub_group == 'uw-ublock' || self.params.sub_group == 'uw-uhblock' || self.params.sub_group == 'uw-softerblock' || self.params.sub_group == 'uw-causeblock' || self.params.sub_group == 'uw-botublock' || self.params.sub_group == 'uw-vaublock' || self.params.sub_group == 'uw-spamublock' || self.params.sub_group == 'uw-lblock' || self.params.sub_group == 'uw-toablock' ) ) {
				Status.info( 'Info', 'Blanking talk page per preferences and createing a new level 2 heading for the date' );
				text = "== " + date.getUTCMonthName() + " " + date.getUTCFullYear() + " ==\n";
			} else if( !headerRe.exec( text ) ) {
				Status.info( 'Info', 'Will create a new level 2 heading for the date, as none was found for this month' );
				text += "== " + date.getUTCMonthName() + " " + date.getUTCFullYear() + " ==\n";
			}
 
			if( ( self.params.sub_group == 'uw-ewblock' || self.params.sub_group == 'uw-3block' ) && self.params.article ) {
				article = '|1=' + self.params.article;
			}
 
			if( /te?mp|^\s*$|min/.exec( self.params.block_timer ) || self.params.sub_group == 'uw-block3' ) {
				time = '';
			} else if( /indef|\*|max/.exec( self.params.block_timer ) ) {
				time = '|indef=yes';
			} else {
				time = '|time=' + self.params.block_timer;
			}
 
			if( self.params.sub_group == 'schoolblock' || self.params.sub_group == 'anonblock' ) {
				text += "\{\{" + self.params.sub_group + (self.params.reason ? '|1=' + self.params.reason : '' ) + "|sig=\~\~\~\~\}\}";
			} else {
				text += "\{\{subst:" + self.params.sub_group + article + time + (self.params.reason ? '|reason=' + self.params.reason : '' ) + "|sig=true|subst=subst:\}\}";				
			}
		} else {
			if( !headerRe.exec( text ) ) {
				Status.info( 'Info', 'Will create a new level 2 heading for the date, as none was found for this month' );
				text += "== " + date.getUTCMonthName() + " " + date.getUTCFullYear() + " ==\n";
			}
 
			if( self.params.sub_group == 'uw-username' ) {
				// ugly hack
				text += "\{\{subst:" + self.params.sub_group + ( self.params.reason ? '|1=' + self.params.reason : '' ) + "|subst=subst:\}\} \~\~\~\~";
			} else if( self.params.sub_group == 'welcomeg'||self.params.sub_group == 'welcomeq' ) { 
                                text += "\{\{subst:" + self.params.sub_group + ( self.params.article ? '|1=' + self.params.article : '' ) + "|subst=subst:\}\}" + (self.params.reason ? " ''" + self.params.reason + "'' ": ' ' );
                        } else {
				text += "\{\{subst:" + self.params.sub_group + ( self.params.article ? '|1=' + self.params.article : '' ) + "|subst=subst:\}\}" + (self.params.reason ? " ''" + self.params.reason + "'' ": ' ' ) + "\~\~\~\~";
			}
		}
 
		if ( TwinkleConfig.showSharedIPNotice && isIPAddress( wgTitle ) ) {
			Status.info( 'Info', 'Adding a shared ip notice' );
			switch( QueryString.get( 'type' ) ) {
			case 'vand':
				text +=  "\n:''If this is a shared [[IP address]], and you didn't make any [[Wikipedia:vandalism|bad]] changes, you should think about [[Wikipedia:Why create an account?|making an account]] for yourself so you do not get future warnings meant for other people.'' ";
				break;
			default:
				text +=  "\n:''If this is a shared [[IP address]], and you didn't make the change, you should think about [[Wikipedia:Why create an account?|making an account]] for yourself so you can do not get future messages meant for other people.'' ";
				break;
			}
		}
		var postData = {
			'wpMinoredit': (typeof form.wpMinoredit == "undefined") ? undefined : (form.wpMinoredit.checked ? 1 : undefined),
			'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': twinklewarn.messages[self.params.main_group][self.params.sub_group].summary + ( self.params.article ? ' on [[' + self.params.article + ']]'  : '' ) + '.' + TwinkleConfig.summaryAd,
			'wpTextbox1': text
		};
 
		self.post( postData );
	}
}
 
twinklewarn.callback.evaluate = function twinklewarnCallbackEvaluate(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, twinklewarn.callbacks.main );
	wikipedia_wiki.params = params;
	wikipedia_wiki.followRedirect = true;
	wikipedia_wiki.get();
}