MediaWiki:Gadget/Twinkle/twinklewarn.js

From OpenWetWare
Jump to navigationJump to search

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: 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 = 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 = " using [[WP:TW|TW]]";
}

function twinklewarn() {
    if( wgNamespaceNumber == 3 ) {
        addPortletLink( 'p-cactions', (twinkleConfigExists ? "javascript:twinklewarn.callback()" : 'javascript:alert("Your account is too new to use Twinkle.");'), "Warn", "tw-warn", "Warn/Notify user", "");
    }
}
addOnloadHook(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:'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 ) } );
    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", 
            summary:"General note: Page blanking, removal of content" 
        },
        "uw-redirect1": { 
            label:"Creating malicious redirects", 
            summary:"General note: Creating malicious redirects" 
        },
        "uw-tdel1": { 
            label:"Removal of maintenance templates", 
            summary:"General note: Removal of maintenance templates" 
        },
        "uw-joke1": { 
            label:"Using improper humor", 
            summary:"General note: Using improper humor" 
        },
        "uw-create1": { 
            label:"Creating inappropriate pages", 
            summary:"General note: Creating inappropriate pages" 
        },
        "uw-upload1": { 
            label:"Uploading inappropriate images", 
            summary:"General note: Uploading inappropriate images" 
        },
        "uw-image1": { 
            label:"Image-related vandalism", 
            summary:"General note: Image-related vandalism" 
        },
        "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 adhering to neutral point of view", 
            summary:"General note: Not adhering to neutral point of view" 
        },
        "uw-unsourced1": { 
            label:"Addition of unsourced or improperly cited material", 
            summary:"General note: Addition of unsourced or improperly cited material" 
        },
        "uw-error1": { 
            label:"Introducing deliberate factual errors", 
            summary:"General note: Introducing factual errors" 
        },
        "uw-nor1": { 
            label:"Adding original research, including unpublished syntheses of sourced material", 
            summary:"General note: Adding original research, including unpublished syntheses of sourced material" 
        },
        "uw-biog1": { 
            label:"Adding unreferenced controversial information about living persons", 
            summary:"General note: Adding unreferenced controversial information about living persons" 
        },
        "uw-defam1": { 
            label:"Defamation not specifically directed", 
            summary:"General note: Defamation not specifically directed" 
        },
        "uw-uncen1": { 
            label:"Censorship of material", 
            summary:"General note: Censorship of material" 
        },
        "uw-mos1": { 
            label:"Manual of style", 
            summary:"General note: Formatting, date, language, etc (Manual of style)" 
        },
        "uw-move1": { 
            label:"Page moves", 
            summary:"General note: Page moves" 
        },
        "uw-chat1": { 
            label:"Using talk page as forum", 
            summary:"General note: Using talk page as forum" 
        },
        "uw-tpv1": { 
            label:"Refactoring others' talk page comments", 
            summary:"General note: Refactoring others' talk page comments" 
        },
        "uw-afd1": { 
            label:"Removing \{\{afd\}\} templates", 
            summary:"General note: Removing \{\{afd\}\} templates" 
        },
        "uw-speedy1": { 
            label:"Removing \{\{speedy deletion\}\} templates", 
            summary:"General note: Removing \{\{speedy deletion\}\} templates" 
        },
        "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-own1": { 
            label:"Ownership of articles", 
            summary:"General note: Ownership of articles"
        },
        "uw-tempabuse1": { 
            label:"Improper use of warning or blocking template", 
            summary:"Warning: Improper use of warning or blocking template"
        }
    },
    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", 
            summary:"Caution: Page blanking, removal of content" 
        },
        "uw-redirect2": { 
            label:"Creating malicious redirects", 
            summary:"Caution: Creating malicious redirects" 
        },
        "uw-tdel2": { 
            label:"Removal of maintenance templates", 
            summary:"Caution: Removal of maintenance templates" 
        },
        "uw-joke2": { 
            label:"Using improper humor", 
            summary:"Caution: Using improper humor" 
        },
        "uw-create2": { 
            label:"Creating inappropriate pages", 
            summary:"Caution: Creating inappropriate pages" 
        },
        "uw-upload2": { 
            label:"Uploading inappropriate images", 
            summary:"Caution: Uploading inappropriate images" 
        },
        "uw-image2": { 
            label:"Image-related vandalism", 
            summary:"Caution: Image-related vandalism" 
        },
        "uw-spam2": { 
            label:"Adding spam links", 
            summary:"Caution: Adding spam links" 
        },
        "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-unsourced2": { 
            label:"Addition of unsourced or improperly cited material", 
            summary:"Caution: Addition of unsourced or improperly cited material" 
        },
        "uw-error2": { 
            label:"Introducing deliberate factual errors", 
            summary:"Caution: Introducing factual errors" 
        },
        "uw-nor2": { 
            label:"Adding original research, including unpublished syntheses of sourced material", 
            summary:"Caution: Adding original research, including unpublished syntheses of sourced material"
        },
        "uw-biog2": { 
            label:"Adding unreferenced controversial information about living persons", 
            summary:"Caution: Adding unreferenced controversial information about living persons" 
        },
        "uw-defam2": { 
            label:"Defamation not specifically directed", 
            summary:"Caution: Defamation not specifically directed" 
        },
        "uw-uncen2": { 
            label:"Censorship of material", 
            summary:"Caution: Censorship of material" 
        },
        "uw-mos2": { 
            label:"Manual of style", 
            summary:"Caution: Formatting, date, language, etc (Manual of style)" 
        },
        "uw-move2": { 
            label:"Page moves", 
            summary:"Caution: Page moves" 
        },
        "uw-chat2": { 
            label:"Using talk page as forum", 
            summary:"Caution: Using talk page as forum" 
        },
        "uw-tpv2": { 
            label:"Refactoring others' talk page comments", 
            summary:"Caution: Refactoring others' talk page comments" 
        },
        "uw-afd2": { 
            label:"Removing \{\{afd\}\} templates", 
            summary:"Caution: Removing \{\{afd\}\} templates" 
        },
        "uw-speedy2": { 
            label:"Removing \{\{speedy deletion\}\} templates", 
            summary:"Caution: Removing \{\{speedy deletion\}\} templates" 
        },
        "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-own2": { 
            label:"Ownership of articles", 
            summary:"Caution: Ownership of articles"
        },
        "uw-tempabuse2": { 
            label:"Improper use of warning or blocking template", 
            summary:"Warning: Improper use of warning or blocking template"
        }
    },
    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", 
            summary:"Warning: Page blanking, removal of content" 
        },
        "uw-redirect3": { 
            label:"Creating malicious redirects", 
            summary:"Warning: Creating malicious redirects" 
        },
        "uw-tdel3": { 
            label:"Removal of maintenance templates", 
            summary:"Warning: Removal of maintenance templates" 
        },
        "uw-joke3": { 
            label:"Using improper humor", 
            summary:"Warning: Using improper humor" 
        },
        "uw-create3": { 
            label:"Creating inappropriate pages", 
            summary:"Warning: Creating inappropriate pages" 
        },
        "uw-upload3": { 
            label:"Uploading inappropriate images", 
            summary:"Warning: Uploading inappropriate images" 
        },
        "uw-image3": { 
            label:"Image-related vandalism", 
            summary:"Warning: Image-related vandalism" 
        },
        "uw-spam3": { 
            label:"Adding spam links", 
            summary:"Warning: Adding spam links" 
        },
        "uw-advert3": { 
            label:"Using Wikipedia for advertising or promotion", 
            summary:"Warning: Using Wikipedia for advertising or promotion" 
        },
        "uw-npov3": { 
            label:"Not adhering to neutral point of view", 
            summary:"Warning: Not adhering to neutral point of view" 
        },
        "uw-unsourced3": { 
            label:"Addition of unsourced or improperly cited material", 
            summary:"Warning: Addition of unsourced or improperly cited material" 
        },
        "uw-error3": { 
            label:"Introducing deliberate factual errors", 
            summary:"Warning: Introducing deliberate factual errors" 
        },
        "uw-nor3": { 
            label:"Adding original research, including unpublished syntheses of sourced material", 
            summary:"Warning: Adding original research, including unpublished syntheses of sourced material"
        },
        "uw-biog3": { 
            label:"Adding unreferenced controversial or defamatory information about living persons", 
            summary:"Warning: Adding unreferenced controversial information about living persons" 
        },
        "uw-defam3": { 
            label:"Defamation not specifically directed", 
            summary:"Warning: Defamation not specifically directed" 
        },
        "uw-uncen3": { 
            label:"Censorship of material", 
            summary:"Warning: Censorship of material" 
        },
        "uw-mos3": { 
            label:"Manual of style", 
            summary:"Warning: Formatting, date, language, etc (Manual of style)" 
        },
        "uw-move3": { 
            label:"Page moves", 
            summary:"Warning: Page moves" 
        },
        "uw-chat3": { 
            label:"Using talk page as forum", 
            summary:"Warning: Using talk page as forum" 
        },
        "uw-tpv3": { 
            label:"Refactoring others' talk page comments", 
            summary:"Warning: Refactoring others' talk page comments" 
        },
        "uw-afd3": { 
            label:"Removing \{\{afd\}\} templates", 
            summary:"Warning: Removing \{\{afd\}\} templates" 
        },
        "uw-speedy3": { 
            label:"Removing \{\{speedy deletion\}\} templates", 
            summary:"Warning: Removing \{\{speedy deletion\}\} templates" 
        },
        "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" 
        },
        "uw-own3": { 
            label:"Ownership of articles", 
            summary:"Warning: Ownership of articles"
        },
        "uw-tempabuse3": { 
            label:"Improper use of warning or blocking template", 
            summary:"Warning: Improper use of warning or blocking template"
        }

    },
    level4: {
        "uw-vandalism4": { 
            label:"Vandalism", 
            summary:"Final warning: Vandalism" 
        },
        "uw-test4": { 
            label:"Editing tests", 
            summary:"Final warning: Editing tests" 
        },
        "uw-delete4": { 
            label:"Page blanking, removal of content", 
            summary:"Final warning: Page blanking, removal of content" 
        },
        "uw-redirect4": { 
            label:"Creating malicious redirects", 
            summary:"Final warning: Creating malicious redirects" 
        },
        "uw-tdel4": { 
            label:"Removal of maintenance templates", 
            summary:"Final warning: Removal of maintenance templates" 
        },
        "uw-joke4": { 
            label:"Using improper humor", 
            summary:"Final warning: Using improper humor" 
        },
        "uw-create4": { 
            label:"Creating inappropriate pages", 
            summary:"Final warning: Creating inappropriate pages" 
        },
        "uw-upload4": { 
            label:"Uploading inappropriate images", 
            summary:"Final warning: Uploading inappropriate images" 
        },
        "uw-image4": { 
            label:"Image-related vandalism", 
            summary:"Final warning: Image-related vandalism" 
        },
        "uw-spam4": { 
            label:"Adding spam links", 
            summary:"Final warning: Adding spam links" 
        },
        "uw-advert4": { 
            label:"Using Wikipedia for advertising or promotion", 
            summary:"Final warning: Using Wikipedia for advertising or promotion" 
        },
        "uw-npov4": { 
            label:"Not adhering to neutral point of view", 
            summary:"Final warning: Not adhering to neutral point of view" 
        },
        "uw-unsourced4": { 
            label:"Addition of unsourced or improperly cited material", 
            summary:"Final warning: Addition of unsourced or improperly cited material" 
        },
        "uw-error4": { 
            label:"Introducing deliberate factual errors", 
            summary:"Final Warning: Introducing deliberate factual errors"
        },
        "uw-nor4": { 
            label:"Adding original research, including unpublished syntheses of sourced material", 
            summary:"Final Warning: Adding original research, including unpublished syntheses of sourced material"
        },
        "uw-biog4": { 
            label:"Adding unreferenced defamatory information about living persons", 
            summary:"Final warning: Adding unreferenced controversial information about living persons" 
        },
        "uw-defam4": { 
            label:"Defamation not specifically directed", 
            summary:"Final warning: Defamation not specifically directed" 
        },
        "uw-uncen4": { 
            label:"Censorship of material", 
            summary:"Final warning: Censorship of material" 
        },
        "uw-move4": { 
            label:"Page moves", 
            summary:"Final warning: Page moves" 
        },
        "uw-chat4": { 
            label:"Using talk page as forum", 
            summary:"Final warning: Using talk page as forum" 
        },
        "uw-afd4": { 
            label:"Removing \{\{afd\}\} templates", 
            summary:"Final warning: Removing \{\{afd\}\} templates" 
        },
        "uw-speedy4": { 
            label:"Removing \{\{speedy deletion\}\} templates", 
            summary:"Final warning: Removing \{\{speedy deletion\}\} templates" 
        },
        "uw-npa4": { 
            label:"Personal attack directed at a specific editor", 
            summary:"Final warning: Personal attack directed at a specific editor"
        },
        "uw-tempabuse4": { 
            label:"Improper use of warning or blocking template", 
            summary:"Warning: Improper use of warning or blocking template"
        }

    },
    level4im: {
        "uw-vandalism4im": { 
            label:"Vandalism", 
            summary:"Only warning: Vandalism" 
        },
        "uw-delete4im": { 
            label:"Page blanking, removal of content", 
            summary:"Only warning: Page blanking, removal of content" 
        },
        "uw-redirect4im": { 
            label:"Creating malicious redirects", 
            summary:"Only warning: Creating malicious redirects" 
        },
        "uw-joke4im": { 
            label:"Using improper humor", 
            summary:"Only warning: Using improper humor" 
        },
        "uw-create4im": { 
            label:"Creating inappropriate pages", 
            summary:"Only warning: Creating inappropriate pages" 
        },
        "uw-upload4im": { 
            label:"Uploading inappropriate images", 
            summary:"Only warning: Uploading inappropriate images" 
        },
        "uw-image4im": { 
            label:"Image-related vandalism", 
            summary:"Only warning: Image-related vandalism" 
        },
        "uw-spam4im": { 
            label:"Adding spam links", 
            summary:"Only warning: Adding spam links" 
        },
        "uw-biog4im": { 
            label:"Adding unreferenced defamatory information about living persons", 
            summary:"Only warning: Adding unreferenced controversial information about living persons" 
        },
        "uw-defam4im": { 
            label:"Defamation not specifically directed", 
            summary:"Only warning: Defamation not specifically directed" 
        },
        "uw-move4im": { 
            label:"Page moves", 
            summary:"Only warning: Page moves" 
        },
        "uw-npa4im": { 
            label:"Personal attack directed at a specific editor", 
            summary:"Only warning: Personal attack directed at a specific editor"
        },
        "uw-tempabuse4im": { 
            label:"Improper use of warning or blocking template", 
            summary:"Warning: Improper use of warning or blocking template"
        }

    },
    singlenotice: {
        "uw-2redirect": { 
            label:"Creating double redirects through bad page moves", 
            summary:"Notice: Creating double redirects through bad page moves" 
        },
        "uw-aiv": { 
            label:"Bad AIV report", 
            summary:"Notice: Bad AIV report" 
        },
        "uw-articlesig": { 
            label:"Adding signatures to article space", 
            summary:"Notice: Adding signatures to article space" 
        },
        "uw-autobiography": { 
            label:"Creating autobiographies", 
            summary:"Notice: Creating autobiographies" 
        },
        "uw-badcat": { 
            label:"Adding incorrect categories", 
            summary:"Notice: Adding incorrect categories" 
        },
        "uw-bite": { 
            label:"\"Biting\" newcomers", 
            summary:"Notice: \"Biting\" newcomers" 
        },
        "uw-c&pmove": { 
            label:"Cut and paste moves", 
            summary:"notice: Cut and paste moves" 
        },
        "uw-coi": { 
            label:"Conflict of Interest", 
            summary:"Notice: Conflict of Interest" 
        },
        "uw-date": { 
            label:"Unnecessarily changing date formats", 
            summary:"Notice: Unnecessarily changing date formats" 
        },
        "uw-deadlink": { 
            label:"Removing proper sources containing dead links", 
            summary:"Notice: Removing proper sources containing dead links" 
        },
        "uw-editsummary": { 
            label:"Not using edit summary", 
            summary:"Notice: Not using edit summary" 
        },
        "uw-english": { 
            label:"Not communicating in English", 
            summary:"Notice: Not communicating in English" 
        },
        "uw-fuir": { 
            label:"Fair use image has been removed from your userpage", 
            summary:"Notice: A fair use image has been removed from your userpage" 
        },
        "uw-hangon": { 
            label:"User forgets to place a hang-on reasoning to the talk page", 
            summary:"Notice: User forgets to place a hang-on reasoning to the talk page" 
        },
        "uw-italicize": { 
            label:"Italicize books, films, albums, magazines, TV series, etc within articles", 
            summary:"Notice: Italicize books, films, albums, magazines, TV series, etc within articles" 
        },
        "uw-lang": { 
            label:"Unnecessarily changing between British and American English", 
            summary:"Notice: Unnecessarily changing between British and American English" 
        },
        "uw-linking": { 
            label:"For excessive addition of redlinks or repeated blue links", 
            summary:"Notice: For excessive addition of redlinks or repeated blue links" 
        },
        "uw-minor": { 
            label:"Incorrect use of minor edits check box", 
            summary:"Notice: Incorrect use of minor edits check box" 
        },
        "uw-nonfree": { 
            label:"Uploading replaceable non-free images", 
            summary:"Notice: Uploading replaceable non-free images" 
        },
        "uw-notaiv": { 
            label:"Do not report complex abuse to AIV", 
            summary:"Notice: Do not report complex abuse to AIV" 
        },
        "uw-notvote": { 
            label:"We use consensus, not voting", 
            summary:"Notice: We use consensus, not voting" 
        },
        "uw-patrolled": { 
            label:"Mark newpages as patrolled when patrolling", 
            summary:"Notice: Mark newpages as patrolled when patrolling" 
        },
        "uw-preview": { 
            label:"Use preview button to avoid mistakes", 
            summary:"Notice: Use preview button to avoid mistakes" 
        },
        "uw-probation": { 
            label:"Article is on probation", 
            summary:"Notice: Article is on probation" 
        },
        "uw-repost": { 
            label:"Recreating material previously deleted via XfD process", 
            summary:"Notice: Recreating previously deleted material" 
        },
        "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-spellcheck": { 
            label:"Review spelling, etc.", 
            summary:"Notice: Review spelling, etc." 
        },
        "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"
        },
        "uw-block2": {
            'label':"Block level 2 (subsequent times)",
            'summary':"You have been blocked"
        },
        "uw-block3": {
            'label':"Block level 3 (indefinite)",
            'summary':"You have been indefinitely blocked"
                },
        "uw-afblock": {
            'label':"Abuse filter-related block",
            'summary':"You have been blocked"
        },
        "uw-ablock": {
            'label':"Anonymous block",
            'summary':"Your IP address has been blocked"
        },
        "uw-adblock": {
            'label':"Advertising block",
            'summary':"You have been blocked for advertising"
        },
        "anonblock": {
            'label':"Anonymous (shared IP) block",
            'summary':"This shared IP address has been blocked"
        },
        "uw-sblock": {
            'label':"Spam block",
            'summary':"You have been blocked for spamming"
        },
        "schoolblock": {
            'label':"Anonymous (shared school IP) block",
            'summary':"This school IP address has been blocked"
        },
        "uw-spamublock": {
            'label':"Spam and username violation block",
            'summary':"You have been blocked for spamming and a [[WP:U|username policy]] violation"
        },
        "uw-soablock": {
            'label':"Spam/advertising-only account",
            'summary':"You have been blocked for using a spam/advertising-only account"
        },
        "uw-vblock": {
            'label':"Vandalism",
            'summary':"You have been blocked for vandalism"
        },
        "uw-vaublock": {
            'label':"Vandalism-only account and blatant username violation",
            'summary':"You have been blocked for using a vandalism-only account and a blatant [[WP:U|username policy]] violation"
        },
        "uw-voablock": {
            'label':"Vandalism-only account",
            'summary':"You have been blocked for using a vandalism-only account"
        },
        "uw-npblock": {
            'label':"Creating nonsense pages block",
            'summary':"You have been blocked for creating nonsense pages"
        },
        "uw-dblock": {
            'label':"Delete block",
            'summary':"You have been blocked for continued deletion of material"
        },
        "uw-3block": {
            'label':"3RR block",
            'summary':"You have been blocked for violation of the [[WP:3RR|3RR]] rule"
        },
        "uw-ewblock": {
            'label':"Edit warring block",
            'summary':"You have been blocked for [[WP:EW|edit warring]]"
        },
        "uw-ublock": {
            'label':"Username block",
            'summary':"You have been blocked for a violation of the [[WP:U|username policy]]"
        },
        "uw-uhblock": {
            'label':"Username hard block",
            'summary':"You have been blocked for a blatant violation of the [[WP:U|username policy]]"
        },
        "uw-lblock": {
            'label':"Legal threat block",
            'summary':"You have been blocked for [[WP:LEGAL|making legal threats]]"
        },
        "uw-hblock": {
            'label':"Harassment block",
            'summary':"You have been blocked for attempting to [[WP:HARASS|harass]] other users"
        },
        "uw-botblock": {
            'label':"Unapproved bot scripts block",
            'summary':"You have been blocked for running unapproved [[WP:BOT|bot]] scripts"
        }
    }
};


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 );
        e.target.root.article.disabled = true;
    } else if( e.target.root.block_timer ) {
        e.target.root.removeChild( e.target.root.block_timer.parentNode );
        e.target.root.article.disabled = false;
        e.target.root.reason.disabled = false;
    }
}

twinklewarn.callback.change_subcategory = function twinklewarnCallbackChangeSubcategory(e) {
    var value = e.target.value;
    var main_group = e.target.main_group;

    if( main_group == 'block' ) {
        if( value == 'uw-block3' || value == 'uw-spamublock' || value == 'uw-soablock' || value == 'uw-vaublock' || value == 'uw-voablock' || value == 'uw-ublock' || value == 'uw-uhblock' || value == 'uw-lblock' || value == 'anonblock' || value == 'schoolblock' ) {
            e.target.form.block_timer.disabled = true;
        } else if( e.target.form.block_timer.disabled ) {
            e.target.form.block_timer.disabled = false;
        }

        if( value == 'uw-3block' || value == 'uw-afblock' || value == 'uw-ewblock' ) {
            e.target.form.article.disabled = false;
        } else if ( value == 'anonblock' || value == 'schoolblock' ) {
            e.target.form.article.disabled = true;
        } else if( !e.target.form.article.disabled ) {
            e.target.form.article.disabled = true;
        }

        if( value == 'uw-block1' || value == 'uw-block2' || value == 'uw-block3' || value == 'uw-ablock' || value == 'anonblock' || value == 'schoolblock' ) {
            e.target.form.reason.disabled = false;
        } else if( !e.target.form.reason.disabled ) {
            e.target.form.reason.disabled = true;
        }
    }
}

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-spamublock' || self.params.sub_group == 'uw-soablock' || self.params.sub_group == 'uw-vaublock' || self.params.sub_group == 'uw-voablock' || self.params.sub_group == 'uw-ublock' || self.params.sub_group == 'uw-uhblock' || self.params.sub_group == 'uw-lblock' ) ) {
                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-3block' || self.params.sub_group == 'uw-ewblock' ) && self.params.article ) {
                article = '|1=' + self.params.article;
            }
            else self.params.article = ""; //Unless an article-related block messages is placed, don't mention the article in the edit summary - it probably was filled in by mistake. [[WP:TW/BUGS#273]]
            
            if( /te?mp|^\s*$|min/.exec( self.params.block_timer ) ) {
                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\}\}";                
            }
        } 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 : '' ) + "\}\} \~\~\~\~";
            } else {
                text += "\{\{subst:" + self.params.sub_group + ( self.params.article ? '|1=' + self.params.article : '' ) + "\}\}" + (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, 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();
}