Usuari:Coet/tw09:twinklewarn.js

De la Viquipèdia, l'enciclopèdia lliure

Nota: Després de desar, heu de netejar la memòria cau del navegador per veure els canvis. En la majoria de navegadors amb Windows o Linux, premeu Ctrl+F5 o bé premeu Shift i cliqueu el botó "Actualitza" (Ctrl i "Actualitza" amb Internet Explorer). Vegeu més informació i instruccions per a cada navegador a Viquipèdia:Neteja de la memòria cau.

// 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 = true;
}

/**
 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 = twTranslate("twUsingTW");
}

function twinklewarn() {
	if( wgNamespaceNumber == 3 ) {
		mw.util.addPortletLink( 'p-cactions', (twinkleConfigExists ? "javascript:twinklewarn.callback()" : 'javascript:alert('+twTranslate("twTooNew")), "Warn", "tw-warn", "Warn/Notify user", "");
	}
}
$(twinklewarn);

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: twTranslate("twChooseW/N lbl"),
			tooltip: twTrranslate("twChooseW/N tt")
		} );

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

	main_group.append( { type:'option', label:twTranslate("twMGlbl1"), value:'level1', selected: ( TwinkleConfig.defaultWarningGroup == 1 || TwinkleConfig.defaultWarningGroup < 1 || ( userIsInGroup( 'sysop' ) ? TwinkleConfig.defaultWarningGroup > 8 : TwinkleConfig.defaultWarningGroup > 7 ) ) } );
	main_group.append( { type:'option', label:twTranslate("twMGlbl2"), value:'level2', selected: ( TwinkleConfig.defaultWarningGroup == 2 ) } );
	main_group.append( { type:'option', label:twTranslate("twMGlbl3"), value:'level3', selected: ( TwinkleConfig.defaultWarningGroup == 3 ) } );
	main_group.append( { type:'option', label:twTranslate("twMGlbl4"), value:'level4', selected: ( TwinkleConfig.defaultWarningGroup == 4 ) } );
	main_group.append( { type:'option', label:twTranslate("twMGlbl5"), value:'level4im', selected: ( TwinkleConfig.defaultWarningGroup == 5 ) } );
	main_group.append( { type:'option', label:twTranslate("twMGlbl6"), value:'singlenotice', selected: ( TwinkleConfig.defaultWarningGroup == 6 ) } );
	main_group.append( { type:'option', label:twTranslate("twMGlbl7"), value:'singlewarn', selected: ( TwinkleConfig.defaultWarningGroup == 7 ) } );
	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:twTranslate("twLnkArt lbl"),
			value:( QueryString.exists( 'vanarticle' ) ? QueryString.get( 'vanarticle' ) : '' ),
			tooltip:twTranslate("twLnkArt tt")
		} );


	var more = form.append( { type:'field', label:twTranslate("twTxtArea fld") } );
	more.append( { type:'textarea', label:twTranslate("twTxtArea lbl"), name:'reason', tooltip:twTranslate("twTxtArea tt") } );
	more.append( { type:'submit', label:twTranslate("twTextArea sbm") } );
	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: twTranslate("twUWvnd"),
			summary: twTranslate("twUWvnd", "twUWlvl1") 
		},
		"uw-test1": { 
			label: twTranslate("twUWtest"),
			summary: twTranslate("twUWtest", "twUWlvl1")
		},
		"uw-delete1": { 
			label: twTranslate("twUWdel"), 
			summary: twTranslate("twUWdel", "twUWlvl1")
		},
		"uw-redirect1": { 
			label: twTranslate("twUWrdir"),
			summary: twTranslate("twUWrdir", "twUWlvl1")
		},
		"uw-tdel1": { 
			label:twTranslate("twUWtdel"),
			summary: twTranslate("twUWtdel", "twUWlvl1")
		},
		"uw-joke1": { 
			label: twTranslate("twUWjoke"),
			summary:twTranslate("twUWjoke", "twUWlvl1")
		},
		"uw-create1": { 
			label: twTranslate("twUWcrt"),
			summary: twTranslate("twUWcrt", "twUWlvl1")
		},
		"uw-upload1": { 
			label: twTranslate("twUWupl"),
			summary: twTranslate("twUWupl", "twUWlvl1")
		},
		"uw-image1": { 
			label: twTranslate("twUWimg"),
			summary: twTranslate("twUWimg", "twUWlvl1"), 
		},
		"uw-spam1": { 
			label: twTranslate("twUWspam"),
			summary: twTranslate("twUWspam", "twUWlvl1")
		},
		"uw-advert1": { 
			label: twTranslate("twUWadv"),
			summary: twTranslate("twUWadv", "twUWlvl1")
		},
		"uw-npov1": { 
			label: twTranslate("twUWnpov"),
			summary: twTranslate("twUWnpov", "twUWlvl1")
		},
		"uw-unsourced1": { 
			label: twTranslate("twUWuns"),
			summary: twTranslate("twUWuns", "twUWlvl1")
		},
		"uw-error1": { 
			label: twTranslate("twUWerr"),
			summary: twTranslate("twUWerr", "twUWlvl1")
		},
		"uw-nor1": { 
			label: twTranslate("twUWnor"),
			summary: twTranslate("twUWnor", "twUWlvl1")
		},
		"uw-biog1": { 
			label: twTranslate("twUWbiog"),
			summary: twTranslate("twUWbiog", "twUWlvl1")
		},
		"uw-defam1": { 
			label: twTranslate("twUWdefam"),
			summary: twTranslate("twUWdefam", "twUWlvl1")
		},
		"uw-uncen1": { 
			label: twTranslate("twUWuncen"),
			summary:twTranslate("twUWuncen", "twUWlvl1")
		},
		"uw-mos1": { 
			label: twTranslate("twUWmos lbl"),
			summary: twTranslate("twUWmos sum")
		},
		"uw-move1": { 
			label: twTranslate("twUWmove"),
			summary: twTranslate("twUWmove", "twUWlvl1")
		},
		"uw-chat1": { 
			label: twTranslate("twUWchat"),
			summary: twTranslate("twUWchat", "twUWlvl1")
		},
		"uw-tpv1": { 
			label: twTranslate("twUWtpv"),
			summary: twTranslate("twUWtpv", "twUWlvl1")
		},
		"uw-afd1": { 
			label: twTranslate("twUWafd"),
			summary: twTranslate("twUWafd", "twUWlvl1")
		},
		"uw-speedy1": { 
			label:twTranslate("twUWspd"),
			summary: twTranslate("twUWspd", "twUWlvl1")
		},
		"uw-npa1": { 
			label: twTranslate("twUWnpa"),
			summary:twTranslate("twUWnpa", "twUWlvl1")
		},
		"uw-agf1": { 
			label: twTranslate("twUWagf"),
			summary: twTranslate("twUWagf", "twUWlvl1")
		},
		"uw-own1": { 
			label: twTranslate("twUWown"), 
			summary:twTranslate("twUWown", "twUWlvl1")
		},
		"uw-tempabuse1": { 
			label: twTranslate("twUWabuse"),
			summary:twTranslate("twUWabuse", "twUWlvl1")
		}
	},
	level2: {
		"uw-vandalism2": { 
			label: twTranslate("twUWvnd"),
			summary: twTranslate("twUWvnd", "twUWlvl2") 
		},
		"uw-test2": { 
			label: twTranslate("twUWtest"),
			summary: twTranslate("twUWtest", "twUWlvl2")
		},
		"uw-delete2": { 
			label: twTranslate("twUWdel"),
			summary: twTranslate("twUWdel", "twUWlvl2")
		},
		"uw-redirect2": { 
			label: twTranslate("twUWrdir"),
			summary:twTranslate("twUWrdir", "twUWlvl2")
		},
		"uw-tdel2": { 
			label: twTranslate("twUWtdel"), 
			summary: twTranslate("twUWtdel", "twUWlvl2")
		},
		"uw-joke2": { 
			label: twTranslate("twUWjoke"),
			summary:twTranslate("twUWjoke", "twUWlvl2")
		},
		"uw-create2": { 
			label: twTranslate("twUWcrt"), 
			summary: twTranslate("twUWcrt", "twUWlvl2")
		},
		"uw-upload2": { 
			label: twTranslate("twUWupl"),
			summary: twTranslate("twUWupl", "twUWlvl2")
		},
		"uw-image2": { 
			label: twTranslate("twUWimg"), 
			summary: twTranslate("twUWimg", "twUWlvl2")
		},
		"uw-spam2": { 
			label: twTranslate("twUWspam"), 
			summary: twTranslate("twUWspam", "twUWlvl2") 
		},
		"uw-advert2": { 
			label: twTranslate("twUWadv"),
			summary: twTranslate("twUWadv", "twUWlvl2")
		},
		"uw-npov2": { 
			label: twTranslate("twUWnpov"),
			summary: twTranslate("twUWnpov", "twUWlvl2")
		},
		"uw-unsourced2": { 
			label: twTranslate("twUWuns"), 
			summary: twTranslate("twUWuns", "twUWlvl2")
		},
		"uw-error2": { 
			label: twTranslate("twUWerr"),
			summary: twTranslate("twUWerr", "twUWlvl2")
		},
		"uw-nor2": { 
			label: twTranslate("twUWnor"), 
			summary: twTranslate("twUWnor", "twUWlvl2")
		},
		"uw-biog2": { 
			label: twTranslate("twUWbiog"),
			summary: twTranslate("twUWbiog", "twUWlvl2")
		},
		"uw-defam2": { 
			label: twTranslate("twUWdefam", "twUWlvl2"),
			summary: twTranslate("twUWdefam", "twUWlvl2")
		},
		"uw-uncen2": { 
			label: twTranslate("twUWuncen"), 
			summary: twTranslate("twUWuncen", "twUWlvl2")
		},
		"uw-mos2": { 
			label: twTranslate("twUWmos lbl"),
			summary: twTranslate("twUWmos sum", "twUWlvl2")
		},
		"uw-move2": { 
			label: twTranslate("twUWmove"),
			summary: twTranslate("twUWmove", "twUWlvl2")
		},
		"uw-chat2": { 
			label: twTranslate("twUWchat"),
			summary: twTranslate("twUWchat", "twUWlvl2")
		},
		"uw-tpv2": { 
			label: twTranslate("twUWtpv"),
			summary: twTranslate("twUWtpv", "twUWlvl2")
		},
		"uw-afd2": { 
			label: twTranslate("twUWafd"),
			summary: twTranslate("twUWafd", "twUWlvl2")
		},
		"uw-speedy2": { 
			label: twTranslate("twUWspd"),
			summary: twTranslate("twUWspd", "twUWlvl2")
		},
		"uw-npa2": { 
			label: twTranslate("twUWnpa"),
			summary: twTranslate("twUWnpa", "twUWlvl2")
		},
		"uw-agf2": { 
			label: twTranslate("twUWagf"),
			summary: twTranslate("twUWagf", "twUWlvl2")
		},
		"uw-own2": { 
			label: twTranslate("twUWown"),
			summary: twTranslate("twUWown", "twUWlvl2")
		},
		"uw-tempabuse2": { 
			label: twTranslate("twUWabuse"),
			summary: twTranslate("twUWabuse", "twUWlvl2"),
		}
	},
	level3: {
		"uw-vandalism3": { 
			label: twTranslate("twUWvnd"),
			summary: twTranslate("twUWvnd", "twUWlvl3")
		},
		"uw-test3": { 
			label: twTranslate("twUWtest"),
			summary: twTranslate("twUWtest", "twUWlvl3")
		},
		"uw-delete3": { 
			label: twTranslate("twUWdel"),
			summary: twTranslate("twUWdel", "twUWlvl3")
		},
		"uw-redirect3": { 
			label: twTranslate("twUWrdir"),
			summary: twTranslate("twUWrdir", "twUWlvl3")
		},
		"uw-tdel3": { 
			label: twTranslate("twUWtdel"),
			summary: twTranslate("twUWtdel"),
		},
		"uw-joke3": { 
			label: twTranslate("twUWjoke"),
			summary: twTranslate("twUWjoke", "twUWlvl3")
		},
		"uw-create3": { 
			label: twTranslate("twUWcrt"),
			summary: twTranslate("twUWcrt", "twUWlvl3")
		},
		"uw-upload3": { 
			label: twTranslate("twUWupl"),
			summary: twTranslate("twUWupl", "twUWlvl3")
		},
		"uw-image3": { 
			label: twTranslate("twUWimg"),
			summary: twTranslate("twUWimg", "twUWlvl3")
		},
		"uw-spam3": { 
			label: twTranslate("twUWspam"),
			summary: twTranslate("twUWspam", "twUWlvl3")
		},
		"uw-advert3": { 
			label: twTranslate("twUWadv"),
			summary: twTranslate("twUWadv", "twUWlvl3")
		},
		"uw-npov3": { 
			label: twTranslate("twUWadv"),
			summary: twTranslate("twUWadv", "twUWlvl3")
		},
		"uw-unsourced3": { 
			label: twTranslate("twUWuns"),
			summary: twTranslate("twUWuns", "twUWlvl3")
		},
		"uw-error3": { 
			label: twTranslate("twUWerr"),
			summary: twTranslate("twUWerr", "twUWlvl3")
		},
		"uw-nor3": { 
			label: twTranslate("twUWnor"),
			summary: twTranslate("twUWnor", "twUWlvl3")
		},
		"uw-biog3": { 
			label: twTranslate("twUWbiog"),
			summary: twTranslate("twUWbiog", "twUWlvl3")
		},
		"uw-defam3": { 
			label: twTranslate("twUWdefam"),
			summary: twTranslate("twUWdefam", "twUWlvl3")
		},
		"uw-uncen3": { 
			label: twTranslate("twUWuncen"),
			summary: twTranslate("twUWuncen", "twUWlvl3")
		},
		"uw-mos3": { 
			label: twTranslate("twUWmos lbl"),
			summary: twTranslate("twUWmos sum", "twUWlvl3")
		},
		"uw-move3": { 
			label: twTranslate("twUWmove"),
			summary: twTranslate("twUWmove", "twUWlvl3")
		},
		"uw-chat3": { 
			label: twTranslate("twUWchat"),
			summary: twTranslate("twUWchat", "twUWlvl3")
		},
		"uw-tpv3": { 
			label: twTranslate("twUWtpv"),
			summary: twTranslate("twUWtpv", "twUWlvl3")
		},
		"uw-afd3": { 
			label: twTranslate("twUWafd"),
			summary: twTranslate("twUWafd", "twUWlvl3")
		},
		"uw-speedy3": { 
			label: twTranslate("twUWafd"),
			summary: twTranslate("twUWspd", "twUWlvl3")
		},
		"uw-npa3": { 
			label: twTranslate("twUWnpa"),
			summary: twTranslate("twUWnpa", "twUWlvl3")
		},
		"uw-agf3": { 
			label: twTranslate("twUWagf"),
			summary: twTranslate("twUWagf", "twUWlvl3")
		},
		"uw-own3": { 
			label: twTranslate("twUWown"),
			summary: twTranslate("twUWown", "twUWlvl3")
		}

	},
	level4: {
		"uw-vandalism4": { 
			label: twTranslate("twUWvnd"),
			summary: twTranslate("twUWvnd", "twUWlvl4")
		},
		"uw-test4": { 
			label: twTranslate("twUWtest"),
			summary: twTranslate("twUWtest", "twUWlvl4")
		},
		"uw-delete4": { 
			label: twTranslate("twUWdel"),
			summary: twTranslate("twUWdel", "twUWlvl4")
		},
		"uw-redirect4": { 
			label: twTranslate("twUWrdir"),
			summary: twTranslate("twUWrdir", "twUWlvl4")
		},
		"uw-tdel4": { 
			label: twTranslate("twUWtdel"),
			summary: twTranslate("twUWdel", "twUWlvl4")
		},
		"uw-joke4": { 
			label: twTranslate("twUWjoke"),
			summary: twTranslate("twUWjoke", "twUWlvl4")
		},
		"uw-create4": { 
			label: twTranslate("twUWcrt"),
			summary: twTranslate("twUWcrt", "twUWlvl4")
		},
		"uw-upload4": { 
			label: twTranslate("twUWupl"),
			summary: twTranslate("twUWupl", "twUWlvl4"),
		},
		"uw-image4": { 
			label: twTranslate("twUWimg"), 
			summary: twTranslate("twUWimg", "twUWlvl4")
		},
		"uw-spam4": { 
			label: twTranslate("twUWspam"),
			summary: twTranslate("twUWspam", "twUWlvl4")
		},
		"uw-advert4": { 
			label: twTranslate("twUWadv"),
			summary: twTranslate("twUWadv", "twUWlvl4")
		},
		"uw-npov4": { 
			label: twTranslate("twUWnpov"),
			summary: twTranslate("twUWnpov", "twUWlvl4")
		},
		"uw-unsourced4": { 
			label: twTranslate("twUWuns"),
			summary: twTranslate("twUWuns", "twUWlvl4")
		},
		"uw-error4": { 
			label: twTranslate("twUWerr"),
			summary: twTranslate("twUWerr", "twUWlvl4")
		},
		"uw-nor4": { 
			label: twTranslate("twUWnor"),
			summary: twTranslate("twUWnor", "twUWlvl4")
		},
		"uw-biog4": { 
			label: twTranslate("twUWbiog"),
			summary: twTranslate("twUWbiog", "twUWlvl4")
		},
		"uw-defam4": { 
			label: twTranslate("twUWdefam"),
			summary: twTranslate("twUWdefam", "twUWlvl4"),
		},
		"uw-uncen4": { 
			label: twTranslate("twUWuncen"),
			summary: twTranslate("twUWuncen", "twUWlvl4")
		},
		"uw-move4": { 
			label: twTranslate("twUWmove"),
			summary: twTranslate("twUWmove", "twUWlvl4")
		},
		"uw-chat4": { 
			label: twTranslate("twUWchat"),
			summary: twTranslate("twUWchat", "twUWlvl4")
		},
		"uw-afd4": { 
			label: twTranslate("twUWafd"),
			summary: twTranslate("twUWafd", "twUWlvl4")
		},
		"uw-speedy4": { 
			label: twTranslate("twUWspd"),
			summary: twTranslate("twUWspd", "twUWlvl4")
		},
		"uw-npa4": { 
			label: twTranslate("twUWnpa"),
			summary: twTranslate("twUWnpa", "twUWlvl4")
		}

	},
	level4im: {
		"uw-vandalism4im": { 
			label: twTranslate("twUWvnd"),
			summary: twTranslate("twUWvnd", "twUWlvl4im")
		},
		"uw-delete4im": { 
			label: twTranslate("twUWdel"),
			summary: twTranslate("twUWdel", "twUWlvl4im")
		},
		"uw-redirect4im": { 
			label: twTranslate("twUWrdir"),
			summary: twTranslate("twUWrdir")
		},
		"uw-joke4im": { 
			label: twTranslate("twUWjoke"),
			summary: twTranslate("twUWjoke", "twUWlvl4im")
		},
		"uw-create4im": { 
			label: twTranslate("twUWcrt"),
			summary: twTranslate("twUWcrt", "twUWlvl4im")
		},
		"uw-upload4im": { 
			label: twTranslate("twUWupl"),
			summary: twTranslate("twUWupl", "twUWlvl4im")
		},
		"uw-image4im": { 
			label: twTranslate("twUWimg"),
			summary: twTranslate("twUWimg", "twUWlvl4im")
		},
		"uw-spam4im": { 
			label: twTranslate("twUWspam"),
			summary: twTranslate("twUWspam", "twUWlvl4im")
		},
		"uw-biog4im": { 
			label: twTranslate("twUWbiog"),
			summary: twTranslate("twUWbiog", "twUWlvl4im")
		},
		"uw-defam4im": { 
			label: twTranslate("twUWdefam"),
			summary: twTranslate("twUWdefam", "twUWlvl4im")
		},
		"uw-move4im": { 
			label: twTranslate("twUWmove"),
			summary: twTranslate("twUWmove", "twUWlvl4im")
		},
		"uw-npa4im": { 
			label: twTranslate("twUWnpa"),
			summary: twTranslate("twUWnpa", "twUWlvl4im")
		}

	},
	singlenotice: {
		"uw-2redirect": { 
			label: twTranslate("twSNrdir") ,
			summary: twTranslate("twSNrdir", "twSNnot"),
		},
		"uw-aiv": { 
			label: twTranslate("twSNbadAIVrpt"),
			summary: twTranslate("twSNbadAIVrpt", "twSNnot"),
		},
		"uw-articlesig": { 
			label: twTranslate("twSNartSig"),
			summary: twTranslate("twSNartSig", "twSNnot")
		},
		"uw-autobiography": { 
			label: twTranslate("twSNautobiog"),
			summary: twTranslate("twSNautobiog", "twSNnot")
		},
		"uw-badcat": { 
			label: twTranslate("twSNbadcat"),
			summary: twTranslate("twSNbadcat", "twSNnot")
		},
		"uw-bite": { 
			label: twTranslate("twSNbite"), 
			summary: twTranslate("twSNbite", "twSNnot"),
		},
		"uw-c&pmove": { 
			label: twTranslate("twSNc&pmove"),
			summary: twTranslate("twSNc&pmove", "twSNnot"),
		},
		"uw-coi": { 
			label: twTranslate("twSNcoi"),
			summary: twTranslate("twSNcoi", "twSNnot") 
		},
		"uw-date": { 
			label: twTranslate("twSNfdate"), 
			summary: twTranslate("twSNfdate", "twSNnot")
		},
		"uw-deadlink": { 
			label: twTranslate("twSNdeadlnk"),
			summary: twTranslate("twSNdeadlnk", "twSNnot")
		},
		"uw-draftfirst": { 
			label: twTranslate("twSNdraft"),
			summary: twTranslate("twSNdraft", "twSNnot")
		},
		"uw-editsummary": { 
			label: twTranslate("twSNsum"),
			summary: twTranslate("twSNsum", "twSNnot")
		},
		"uw-english": { 
			label: twTranslate("twSNcomm"),
			summary: twTranslate("twSNcomm", "twSNnot")
		},
		"uw-fuir": {
			label: twTranslate("twSNfuir"), 
			summary: twTranslate("twSNfuir", "twSNnot")
		},
		"uw-hangon": { 
			label: twTranslate("twSNhangon"),
			summary: twTranslate("twSNhangon", "twSNnot")
		},
		"uw-italicize": { 
			label: twTranslate("twSNital"),
			summary: twTranslate("twSNital", "twSNnot")
		},
		"uw-lang": { 
			label: twTranslate("twSNlang"),
			summary: twTranslate("twSNlang", "twSNnot")
		},
		"uw-linking": { 
			label: twTranslate("twSNlink"),
			summary: twTranslate("twSNlink", "twSNnot"),
		},
		"uw-minor": { 
			label: twTranslate("twSNminor"),
			summary: twTranslate("twSNminor", "twSNnot")
		},
		"uw-nonfree": { 
			label: twTranslate("twSNnfree"), 
			summary: twTranslate("twSNnfree", "twSNnot")
		},
		"uw-notaiv": { 
			label: twTranslate("twSNnoAIV"),
			summary: twTranslate("twSNnoAIV", "twSNnot")
		},
		"uw-notifysd": { 
			label: twTranslate("twSNnotifSD"),
			summary: twTranslate("twSNnotifSD", "twSNnot")
		},
		"uw-notvote": { 
			label: twTranslate("twSNnvote"), 
			summary: twTranslate("twSNnvote", "twSNnot")
		},
		"uw-patrolled": { 
			label: twTranslate("twSNpatr", "twSNnot"),
			summary: twTranslate("twSNpatr", "twSNnot")
		},
		"uw-preview": { 
			label: twTranslate("twSNprevu"),
			summary: twTranslate("twSNprevu", "twSNnot")
		},
		"uw-probation": { 
			label: twTranslate("twSNprob"),
			summary: twTranslate("twSNprob", "twSNnot"),
		},
		"uw-repost": { 
			label: twTranslate("twSNrpost lbl", "twSNnot"),
			summary: twTranslate("twSNrpost sum", "twSNnot")
                        /* twTranslate("twSN", "twSNnot"), */
		},
		"uw-samename": { 
			label:"Rename request impossible", 
			summary:"Notice: Rename request impossible"
		},
		"uw-sandbox": { 
			label:"Removal of the Sandbox header", 
			summary:"Notice: Removal of the Sandbox header" 
		},
		"uw-selfrevert": { 
			label:"Reverting self tests", 
			summary:"Notice: Reverting self tests" 
		},
		"uw-sofixit": { 
			label:"Be bold and fix things yourself",
			summary:"Notice: You can be bold and fix things yourself" 
		},
		"uw-socialnetwork": { 
			label:"Wikipedia is not a social network", 
			summary:"Notice: Wikipedia is not a social network" 
		},
		"uw-subst": { 
			label:"Remember to subst: templates", 
			summary:"Notice: Remember to subst: templates" 
		},
		"uw-talkinarticle": { 
			label:"Talk in article", 
			summary:"Notice: Talk in article" 
		},
		"uw-tilde": { 
			label:"Not signing posts", 
			summary:"Notice: Not signing posts" 
		},
		"uw-uaa": { 
			label:"Reporting of username to WP:UAA not accepted", 
			summary:"Notice: Reporting of username to WP:UAA not accepted" 
		},
		"uw-warn": { 
			label:"Warning vandals", 
			summary:"Notice: Warning vandals"
		}
	},
	singlewarn: {
		"uw-3rr": { 
			label:"Potentially violating the three revert rule", 
			summary:"Warning: Potentially violating the three revert rule" 
		},
		"uw-bv": { 
			label:"Blatant vandalism", 
			summary:"Warning: Blatant vandalism" 
		},
		"uw-canvass": { 
			label:"Canvassing", 
			summary:"Warning: Canvassing" 
		},
		"uw-copyright": { 
			label:"Copyright violation", 
			summary:"Warning: Copyright violation" 
		},
		"uw-copyright-link": { 
			label:"Linking to copyrighted works violation", 
			summary:"Warning: Linking to copyrighted works violation" 
		},
		"uw-hoax": { 
			label:"Creating hoaxes", 
			summary:"Warning: Creating hoaxes" 
		},
		"uw-legal": { 
			label:"Making legal threats", 
			summary:"Warning: Making legal threats" 
		},
		"uw-longterm": { 
			label:"Long term pattern of vandalism", 
			summary:"Warning: Long term pattern of vandalism" 
		},
		"uw-multipleIPs": { 
			label:"Usage of multiple IPs", 
			summary:"Warning: Usage of multiple IPs" 
		},
		"uw-pinfo": { 
			label:"Personal info", 
			summary:"Warning: Personal info" 
		},
		"uw-upv": { 
			label:"Userpage vandalism", 
			summary:"Warning: Userpage vandalism"
		},
		"uw-wrongsummary": { 
			label:"Using inaccurate or inappropriate edit summaries", 
			summary:"Warning: Using inaccurate or inappropriate edit summaries"
		},
		"uw-username": { 
			label:"Username is against policy", 
			summary:"Warning: Username is against policy"
		},
		"uw-userpage": { 
			label:"Userpage or subpage is against policy", 
			summary:"Warning: Userpage or subpage is against policy"
		}
	},
	block: {
		"uw-block1": {
			'label':"Block level 1 (first time)",
			'summary':"You have been temporarily blocked from editing"
		},
		"uw-block2": {
			'label':"Block level 2 (subsequent times)",
			'summary':"You have been blocked from editing"
		},
		"uw-block3": {
			'label':"Block level 3 (indefinite)",
			'summary':"You have been indefinitely blocked from editing"
        },
		"uw-ablock": {
			'label':"Anonymous block",
			'summary':"Your IP address has been blocked from editing"
		},
		"uw-adblock": {
			'label':"Advertising block",
			'summary':"You have been blocked from editing for [[WP:SOAP|advertising or self-promotion]]"
		},
		"uw-sblock": {
			'label':"Spam block",
			'summary':"You have been blocked from editing for continuing to add [[WP:SPAM|spam links]]"
		},
		"uw-soablock": {
			'label':"Spam/advertising-only account block",
			'summary':"You have been indefinitely blocked from editing because your account is being used only for [[WP:SPAM|spam, advertising, or promotion]]"
		},
		"uw-vblock": {
			'label':"Vandalism block",
			'summary':"You have been blocked from editing for persistent [[WP:VAND|vandalism]]"
		},
		"uw-voablock": {
			'label':"Vandalism-only account block",
			'summary':"You have been indefinitely blocked from editing because your account is being [[WP:VOA|used only for vandalism]]"
		},
		"uw-npblock": {
			'label':"Creating nonsense pages block",
			'summary':"You have been blocked from editing for creating [[WP:PN|nonsense pages]]"
		},
		"uw-myblock": {
			'label':"Social networking block",
			'summary':"You have been blocked from editing for using user and/or article pages as a [[WP:NOTMYSPACE|blog, web host, social networking site or forum]]"
		},
		"uw-dblock": {
			'label':"Deletion/removal of content block",
			'summary':"You have been blocked from editing for continued [[WP:VAND|removal of material]]"
		},
		"uw-afblock": {
			'label':"Abuse filter-related block",
			'summary':"You have been blocked from editing for making disruptive edits that repeatedly triggered the [[WP:EF|edit filter]]"
		},
		"uw-ewblock": {
			'label':"Edit warring block",
			'summary':"You have been blocked from editing to prevent further [[WP:DE|disruption]] caused by your engagement in an [[WP:EW|edit war]]"
		},
		"uw-3block": {
			'label':"Three-revert rule violation block",
			'summary':"You have been blocked from editing for your [[WP:DE|disruption]] caused by [[WP:EW|edit warring]] and violation of the [[WP:3RR|three-revert rule]]"
		},
		"uw-botblock": {
			'label':"Unapproved bot block",
			'summary':"You have been blocked from editing because it appears you are running a [[WP:BOT|bot script]] without [[WP:BRFA|approval]]"
		},
		"uw-ublock": {
			'label':"Username soft block",
			'summary':"You have been indefinitely blocked from editing because your username is a violation of our [[WP:U|username policy]]"
		},
		"uw-uhblock": {
			'label':"Username hard block",
			'summary':"You have been indefinitely blocked from editing because your username is a blatant violation of our [[WP:U|username policy]]"
		},
		"uw-softerblock": {
			'label':"Promotional username soft block",
			'summary':"You have been indefinitely blocked from editing because your username gives the impression that the account represents a group, organization or website in violation of our [[WP:U|username policy]]"
		},
		"uw-botublock": {
			'label':"Bot username soft block",
			'summary':"You have been indefinitely blocked from editing because your [[WP:U|username]] indicates this is a [[WP:BOT|bot]] account, which is currently not approved"
		},
		"uw-vaublock": {
			'label':"Vandalism-only account and username hard block",
			'summary':"You have been indefinitely blocked from editing because your account is being [[WP:VOA|used only for vandalism]] and your username is a blatant violation of our [[WP:U|username policy]]"
		},
		"uw-spamublock": {
			'label':"Spam/advertising-only account and promotional username hard block",
			'summary':"You have been indefinitely blocked from editing because your account is being used only for [[WP:SPAM|spam, advertising, or promotion]] and your username is a violation of our [[WP:U|username policy]]"
		},
		"uw-lblock": {
			'label':"Legal threat block",
			'summary':"You have been blocked from editing for making [[WP:NLT|legal threats or taking legal action]]"
		},
		"uw-hblock": {
			'label':"Harassment block",
			'summary':"You have been blocked from editing for attempting to [[WP:HARASS|harass]] other users"
		},
		"uw-toablock": {
			'label':"Trolling-only account block",
			'summary':"You have been indefinitely blocked from editing because your account is being used only for [[WP:DE|trolling, disruption or harassment]]"
		},
		"anonblock": {
			'label':"Anonymous (shared IP) block",
			'summary':"This shared IP address has been blocked from editing"
		},
		"schoolblock": {
			'label':"Anonymous (shared school IP) block",
			'summary':"This educational institution IP address has been blocked from editing"
		}
	}
};

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 == 'uw-soablock' || value == 'uw-voablock' || value == 'uw-ublock' || value == 'uw-uhblock' || value == 'uw-softerblock' || value == 'uw-botublock' || value == 'uw-vaublock' || value == 'uw-spamublock' || value == 'uw-lblock' || value == 'uw-toablock' || value == 'anonblock' || value == 'schoolblock' ) {
			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-ewblock' || 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-block1' || value == 'uw-block2' || value == 'uw-block3' || value == 'uw-ablock' || value == 'anonblock' || value == 'schoolblock' ) {
			if(!(twinklewarn.prev_reason === null)) {
				e.target.form.reason.value = twinklewarn.prev_reason;
				twinlewarn.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 = '', 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-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' || 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-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' || self.params.sub_group == 'anonblock' || self.params.sub_group == 'schoolblock' ) {
				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 {
				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|unconstructive]] edits, consider [[Wikipedia:Why create an account?|creating an account]] for yourself so you can avoid further irrelevant warnings.'' ";
				break;
			default:
				text +=  "\n:''If this is a shared [[IP address]], and you didn't make the edit, consider [[Wikipedia:Why create an account?|creating an account]] for yourself so you can avoid further irrelevant notices.'' ";
				break;
			}
		}
		var postData = {
			'wpMinoredit': 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.get();
}