MediaWiki:Gadget-DRW.js

/* _____________________________________________________________________________

* | |

* | === WARNING: GLOBAL GADGET FILE === |

* | Changes to this page affect many users. |

* | Please discuss changes on the talk page or on WT:Gadget before editing. |

* |_____________________________________________________________________________|

*

* Imported from version XXXX as of July 24 2012 from User:Steven_Zhang/DRW.js

* Gadget to file DRN (UNDER TRIAL), see User:Steven_Zhang/DRW.js

*/

/**

* This is the main object that holds the state for everything

*/

function drw() {

//Keep track of what step we are on

this.wizard_step = 0;

//Has the admin attempted to resolve this on the talk page

this.talkpage = false;

//Title of Article

this.article_title = '';

//Description of dispute

this.dispute_description = '';

//Involved users

this.involved_users = '';

//Previous forums

this.previous_forums = '';

//Desired Outcome

this.desired_outcome = '';

//Page where the report will be posted

this.post_link = '';

// Draw text box

this.drawTitleInput = function() {

//Appends to $("#drwContent1")

$("#drwContent1").append("

Location of dispute

");

$("#drwContent1").append("

What is the location of this dispute? If there are multiple forums, separate them with commas.

");

var inputbox = $( document.createElement('input') );

inputbox.attr({

type: "text",

name: "article_title",

onChange: "updateTitle(this)",

value: this.article_title

});

$("#drwContent1").append( inputbox );

}

// Draw description textarea

this.drawDescriptionInput = function() {

//Appends to $("#drwContent1")

$("#drwContent1").append("

Opening statement by filing editor

");

$("#drwContent1").append("

Can you give us a quick explanation of what is going on? What is the issue you are bringing to dispute resolution? What is your position on the dispute?

");

var desc = $( document.createElement('textarea') );

desc.attr({

rows: 6,

cols: 60,

maxlength: 1250,

onChange: "updateDescription(this)",

onkeyup: "updateDescriptionCount(this)"

});

desc.text( this.dispute_description );

$("#drwContent1").append( desc );

$("#drwContent1").append( $("

"+this.dispute_description.length+"/1250

") );

}

// Involved users

this.drawUserInput = function() {

//Appends to $("#drwContent1")

$("#drwContent1").append("

Users involved

");

$("#drwContent1").append("

Who else is involved in the dispute? Enter them into the below box, without the User:, separated by commas: e.g. Example, Example2. (Please remember to notify them of this discussion)

");

var inputbox = $( document.createElement('input') );

inputbox.attr({

type: "text",

name: "involved_users",

onChange: "updateUsers(this)",

value: this.involved_users

});

$("#drwContent1").append( inputbox );

}

// Draw previous forums

this.drawPreviousInput = function() {

//Appends to $("#drwContent1")

$("#drwContent1").append("

Resolving the dispute

");

$("#drwContent1").append("

What other steps, if any, have you tried to resolve this dispute?

");

var desc = $( document.createElement('textarea') );

desc.attr({

rows: 3,

cols: 60,

maxlength: 250,

onChange: "updatePrevious(this)",

onkeyup: "updatePreviousCount(this)"

});

desc.text( this.previous_forums );

$("#drwContent1").append( desc );

$("#drwContent1").append( $("

"+this.previous_forums.length+"/250

") );

}

// Draw outcome textarea

this.drawOutcomeInput = function() {

//Appends to $("#drwContent1")

$("#drwContent1").append("

How do you think we can help?

");

var desc = $( document.createElement('textarea') );

desc.attr({

rows: 5,

cols: 60,

maxlength: 500,

onChange: "updateOutcome(this)",

onkeyup: "updateOutcomeCount(this)"

});

desc.text( this.desired_outcome );

$("#drwContent1").append( desc );

$("#drwContent1").append( $("

"+this.desired_outcome.length+"/500

") );

}

// Draw the summary content

this.drawDRWSummary = function() {

//Appends to $("#drwContent1")

//$("#drwContent1").append(list);

//Article Title

$("#drwContent1").append("

Location of dispute

");

$("#drwContent1").append( $("

").text(this.article_title) );

//Dispute Description

$("#drwContent1").append("

Opening statement by filing editor

");

$("#drwContent1").append( $("

").text(this.dispute_description) );

//Users involved

$("#drwContent1").append("

Users involved

");

$("#drwContent1").append( $("

").text(this.involved_users) );

//Previous forums

$("#drwContent1").append("

Resolving the dispute

");

$("#drwContent1").append("

Other steps if any, you have tried to resolve this dispute

");

$("#drwContent1").append( $("

").text(this.previous_forums) );

//Desired Outcome

$("#drwContent1").append("

How you think we can help

");

$("#drwContent1").append( $("

").text(this.desired_outcome) );

}

// Generate a WikiText string, representing the report.

// Returns a string of wikitext

this.getWikitextReport = function() {

//Returns string of wikitext for submission to DR page

var report = "{{DR case status}}\n{{drn filing editor|{{subst:" + "REVISIONUSER}}|~~" + "~~" + "~}}\n\n";

//On Talk Page

report += "Have you discussed this on a talk page?\n";

report += "\n"+( (this.talkpage)?'Yes, I have discussed this issue on a talk page already.':'no' )+"\n\n";

//Article Title

report += "Location of dispute\n";

var articleArray = this.article_title.split(',');

for (var articleIndex = 0; articleIndex < articleArray.length; articleIndex++)

{

report += "* {{pagelinks|" + articleArray[articleIndex]+"}}\n";

}

//Involved users

report += "Users involved\n";

var userArray = this.involved_users.split(',');

for (var userIndex = 0; userIndex < userArray.length; userIndex++)

{

report += "* {{User|" + userArray[userIndex]+"}}\n";

}

//Dispute Description

report += "Opening statement by filing editor\n";

report += "\n"+ this.dispute_description+"\n\n";

//Previous forums

report += "Have you tried to resolve this previously?\n";

report += "\n"+ this.previous_forums+"\n\n";

//Desired Outcome

report += "How do you think we can help?\n";

report += "\n" + this.desired_outcome+"\n";

//User statements

for (var userIndex = 0; userIndex < userArray.length; userIndex++)

{

report += "==== Statmement by " + userArray[userIndex]+"====\n";

}

//Discussion

report += "=== " + this.article_title + " discussion===\n";

return report;

}

// Returns an html string, representing the progress bar, based on the

// objects state.

this.getProgressBar = function() {

var s1_active =( this.wizard_step==1 )?' pr-active':'';

var s2_active =( this.wizard_step==2 )?' pr-active':'';

var s3_active =( this.wizard_step==3 )?' pr-active':'';

var signupbox = '

    ';

    signupbox += '

  • 1Preliminary
  • ';

    signupbox += '

  • ';

    signupbox += '

  • 2Description
  • ';

    signupbox += '

  • ';

    signupbox += '

  • 3Summary
  • ';

    signupbox += '

  • ';

    signupbox += '

';

return signupbox;

}

this.getArticleTitle = function() {

return this.article_title;

}

this.getDisputeDescription = function() {

return this.dispute_description;

}

}

/**

* The various "show...()" functions display each of the 'screens' in the wizard

*/

function showStep1() {

gDRW.wizard_step = 1;

$("#drwProgressBar").html( gDRW.getProgressBar() );

$("#drwContent1").html('

Request dispute resolution

Hi there. This form can be used to file a request at the Dispute Resolution Noticeboard. - a process for resolving a dispute over article content between two or more editors. It is unable to address disputes primarily concerning user conduct - they should be discussed with the users involved first, and failing that directed here. If you have any questions please ask one of our volunteers for guidance.\

\

\

In brief: dispute resolution should be used when you:

\

\

    \

  • Have a dispute with another editor and need help resolving it
  • \

  • Are willing to discuss the issues in a calm and civil manner
  • \

  • Are open to the idea of compromising with the other editors to resolve the dispute
  • \

\

\

This process can:

\

    \

  • Help provide suggestions on content
  • \

  • Frame discussions and offer support for parties that want to work towards a compromise
  • \

\

\

This process cannot:

\

    \

  • Block other users from editing (either everywhere or specific pages)
  • \

  • Remove content that you don\'t like from articles
  • \

  • Force another editor to do something
  • \

  • Address disputes that are currently under discussion somewhere else (such as Requests for Comment, Mediation or Arbitration).
  • \

    \


    Has this issue been discussed extensively on the article talk page? (If you don\'t know what an article talk page is, answer "Not yet".

    ');

    var buttons = 'Yes, it has.';

    buttons += ' Not yet.';

    $("#drwButtons").html(buttons);

    }

    function showStep2() {

    gDRW.wizard_step = 2;

    $("#drwProgressBar").html( gDRW.getProgressBar() );

    $("#drwContent1").html('

    Here, briefly describe the current situation - where the dispute is happening, what is the dispute and what are you hoping to get out of dispute resolution. (Basically, how can we help resolve the issue?)

    Take note of the character limits as they are there to help focus the discussion.

    ');

    gDRW.drawTitleInput();

    gDRW.drawDescriptionInput();

    gDRW.drawUserInput();

    gDRW.drawPreviousInput();

    gDRW.drawOutcomeInput();

    var buttons = 'Back';

    buttons += ' Cancel';

    buttons += ' Next';

    $("#drwButtons").html(buttons);

    }

    function showStep3() {

    gDRW.wizard_step = 3;

    $("#drwProgressBar").html( gDRW.getProgressBar() );

    $("#drwContent1").html('

    Here\'s a summary of what you\'ve told us. Quickly check that it\'s all correct before you submit your request, and we will file the dispute for you and give you a link to the discussion.

    ');

    gDRW.drawDRWSummary();

    var buttons = 'Edit';

    buttons += ' Cancel';

    buttons += ' Save';

    $("#drwButtons").html(buttons);

    }

    function showResult( status ) {

    $("#drwProgressBar").text('');

    if ( status == 'ok' ) {

    //Show thankyou

    $("#drwContent1").html('

    Success!

    Thank you for filing a request for dispute resolution

    ');

    $("#drwContent1").append( $("Click here to go view your request.").attr({ href: mw.config.get('wgArticlePath').replace('$1', gDRW.post_link) }) );

    $("#drwButtons").html('');

    } else if ( status == 'error' ) {

    //Show error

    $("#drwContent1").html('

    Error

    Sorry, there was an error attaching your request. Maybe try it again?

    ');

    $("#drwButtons").html('Back to Summary');

    } else {

    $("#drwContent1").html('

    Error

    Something went wrong!

    ');

    $("#drwButtons").html('');

    }

    }

    function showCancel() {

    gDRW.wizard_step = 0;

    $("#drwProgressBar").html( gDRW.getProgressBar() );

    $("#drwContent1").html('

    It\'s best to discuss your concerns with the other users on the talk page of the article before seeking dispute resolution. You can find instructions on how to do this at this page,\ or you can place {{helpme}} on your own talk page, and a volunteer will come by your page to help.

    If you have already tried to discuss this issue already and have received no response from others, you may go back to the previous page and file a request - but this must only be done if you have attempted to discuss the issue first.\

    ');

    $("#drwButtons").html('Start Over');

    }

    /**

    * Do the final step of the DRW and post the report to the appropriate page

    */

    function doSubmit() {

    //Notify user that we are doing the update

    $("#drwProgressBar").html( '

    saving report
    ' );

    $("#drwContent1").html('

    Posting Report....

    ');

    //Decide on the page to update

    var DRPage = 'Template:NewDRNsubmission/testboard'; //The default page to post this

    /**

    * Decide where to post this dispute resolution report. In the end, DRPage needs to hold

    * the title of the page where we post the report.

    *

    * gDRW.dispute_type is set the short name (index) of the user-selected dispute type

    * gDRW.previous_forums['xxx'] will be true if the use ticked the 'xxx' checkbox in the previous forums

    */

    //Set the post-page on the DRW object

    gDRW.post_link = DRPage + "#" + gDRW.article_title.replace(' ', '_');

    //Compose Report

    var report = gDRW.getWikitextReport();

    //Add new section to designated page

    var edittoken = mw.user.tokens.get( 'csrfToken' );

    var date=new Date();

    var dateString=date.toLocaleDateString();

    var summary = gDRW.article_title;

    addNewSection( DRPage, summary, report, edittoken );

    }

    /**

    * Event handler functions

    */

    function setDisputeForum( box ) {

    //alert("Setting "+gDRW.forum_labels[box.value]+" to true");

    gDRW.previous_forums[box.value] = box.checked;

    var linkboxid = "link_"+box.value;

    if ( box.checked ) {

    $("#"+linkboxid).show();

    } else {

    $("#"+linkboxid).hide();

    }

    }

    function updateTitle( textbox ) {

    gDRW.article_title = textbox.value;

    }

    function updateDescription( textbox ) {

    gDRW.dispute_description = textbox.value;

    }

    function updateUsers( textbox ) {

    gDRW.involved_users = textbox.value;

    }

    function updatePrevious( textbox ) {

    gDRW.previous_forums = textbox.value;

    }

    function updateOutcome( textbox ) {

    gDRW.desired_outcome = textbox.value;

    }

    function updateDescriptionCount( textbox ) {

    $("#taCount").text(""+textbox.value.length+" / 1250");

    }

    function updatePreviousCount( textbox ) {

    $("#pcCount").text(""+textbox.value.length+" / 250");

    }

    function updateOutcomeCount( textbox ) {

    $("#ocCount").text(""+textbox.value.length+" / 500");

    }

    function updateLink( box ) {

    gDRW.forum_links[box.name] = box.value;

    }

    function yesClick() {

    gDRW.talkpage = true;

    showStep2();

    }

    /**

    * Taken almost verbatim from http://www.mediawiki.org/wiki/API:Edit

    */

    function addNewSection( pagetitle, summary, content, editToken ) {

    $.ajax({

    url: mw.util.wikiScript( 'api' ),

    data: {

    format: 'json',

    action: 'edit',

    title: pagetitle,

    section: 'new',

    summary: summary,

    text: content,

    token: editToken

    },

    dataType: 'json',

    type: 'POST',

    success: function( data ) {

    if ( data && data.edit && data.edit.result == 'Success' ) {

    //window.location.reload(); // reload page if edit was successful

    showResult( 'ok' );

    } else if ( data && data.error ) {

    alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );

    showResult( 'error' );

    } else {

    alert( 'Error: Unknown result from API.' );

    showResult( 'error2' );

    }

    },

    error: function( xhr ) {

    alert( 'Error: Request failed.' );

    }

    });

    }

    /**

    * Initialization function. Test if we should place the DRW on the current page.

    * Looks for a

    on the page.

    */

    function runDRW() {

    if ($('#myDRW').length){

    importStylesheet('User:Steven Zhang/DRW.css'); //CSS Styles for the DRW

    //Setup the App's workspace

    $("#myDRW").append($('

    '));

    $("#drw_main").css('height', '1000px');

    $("#drw_main").append('

    ');

    $("#drw_main").append('

    ');

    $("#drw_main").append('

    ');

    showStep1(); //Show the first page

    }

    };

    var gDRW = new drw();

    $( document ).ready( runDRW() );

    // JavaScript Document