MediaWiki:DRN-wizard.js: Difference between revisions
Content deleted Content added
tweak |
per tper |
||
(43 intermediate revisions by 14 users not shown) | |||
Line 1:
// <nowiki>
// 2020-03-09 - deconverted from Gadget, is only used on 1 page and is now being called direct from [[Wikipedia:Dispute resolution noticeboard/request]]
/**
* This is the main object that holds the state for everything
*/
function drw() {
}
gDRW.article_title = this.value.replace( } );
$( '#drwContent1' ).append( inputbox );
};
// Draw description textarea
this.drawDescriptionInput = function() {
//Appends to $( '#drwContent1' )
$( '#drwContent1' ).append( '<h3>Dispute overview</h3>'
$( }
gDRW.dispute_description = this.value; } ); $( } ); };
}
gDRW.involved_users = this.value.split( ',' ).map( function ( involved_user ) { return involved_user.trim(); } );
} );
$( '#drwContent1' ).append( inputbox );
};
// Draw previous forums
this.drawPreviousInput = function() {
//Appends
$( '#drwContent1' ).append( '<h3>Resolving the dispute</h3>' );
$( '#drwContent1' ).append( '<p>What other steps have you tried to resolve the dispute so far. Please provide a link to where these discussions have occurred, separated by a comma or new line. For example:<br>' );
$( '#drwContent1' ).append('<ul>' +
'<li><nowiki>[[Talk:Australia#Removal_of_Chief_Justice_from_Infobox]]</li>' +
'<li><nowiki>[https://en.wikipedia.org/wiki/Talk:Australia#Removal_of_Chief_Justice_from_Infobox Talk:Australia]</li>' +
'</ul>' );+
$( '#drwContent1' ).append( '<u>At a minimum, recent extensive discussion needs to have taken place on the talk page of the page in question.</u><br><font color="red"><b>Note: If a suitable discussion link is not provided, your request may be automatically closed.</b></font></p>' );
var desc = $( document.createElement( 'textarea' ) );
desc.attr( {
rows: 3,
cols: 60,
maxlength: 500
} );
desc.change( function() {
gDRW.previous_forums = this.value;
} );
desc.on( 'keyup', function() {
$( '#pcCount' ).text( '' + this.value.length + ' / 500' );
} );
$( '#drwContent1' ).append( desc );
$( '#drwContent1' ).append( $( '<p id="pcCount">' + this.previous_forums.length + ' / 500</p>' ) );
};
// Draw outcome textarea
this.drawOutcomeInput = function() {
//Appends to $( '#drwContent1' )
$( '#drwContent1' ).append( '<p>How do you think we can help resolve the dispute?</p>' );
var desc = $( document.createElement( 'textarea' ) );
desc.attr( {
rows: 5,
cols: 60,
maxlength: 500
} );
desc.text( this.desired_outcome );
desc.change( function() {
gDRW.desired_outcome = this.value;
} );
desc.on( 'keyup', function() {
} );
};
// Draw the summary content
this.drawDRWSummary = function() {
//Appends to $( '#drwContent1' )
//Article Title
$( '#drwContent1' ).append( '<h3>Location of dispute</h3>' );
$( '#drwContent1' ).append( $( '<p></p>' ).text( this.article_title ) );
//Dispute Description
$( '#drwContent1' ).append( '<h3>Dispute overview</h3>' );
$( '#drwContent1' ).append( $( '<p></p>' ).text( this.dispute_description ) );
//Users involved
$( '#drwContent1' ).append( '<h3>Users involved</h3>' );
$( '#drwContent1' ).append( $( '<p></p>' ).text( this.involved_users.join(', ') ) );
//Previous forums
$( '#drwContent1' ).append( '<h3>Resolving the dispute</h3>' );
$( '#drwContent1' ).append( '<h4>Previous steps to resolve the dispute</h4>' );
$( '#drwContent1' ).append( $( '<p></p>' ).text( this.previous_forums ) );
//Desired Outcome
$( '#drwContent1' ).append( '<h4>How you think we can help resolve the dispute?</h4>' );
$( '#drwContent1' ).append( $( '<p></p>' ).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{{subst:DNAU|28}}<!-- REMEMBER TO REMOVE THE PREVIOUS COMMENT WHEN CLOSING THIS THREAD! -->\n{{drn filing editor|{{subst:REVISIONUSER}}|~~~~~}}\n\n";
//On Talk Page
report += "<span style=\"font-size:110%\">'''Have you discussed this on a talk page?'''</span>\n";
report += '\n' + ( ( this.talkpage ) ? 'Yes, I have discussed this issue on a talk page already.' : 'no' ) + '\n\n';
//Article Title
report += "<span style=\"font-size:110%\">'''Location of dispute'''</span>\n";
var articleArray = this.article_title.split( ',' );
for ( var articleIndex = 0; articleIndex < articleArray.length; articleIndex++ )
{
report += '* {{pagelinks|' + articleArray[ articleIndex ] + '}}\n';
}
//Involved users
report += "<span style=\"font-size:110%\">'''Users involved'''</span>\n";
var userIndex;
for ( userIndex = 0; userIndex < this.involved_users.length; userIndex++ )
{
var user = this.involved_users[ userIndex ];
user = user.trim();
if ( user ) {
report += '* {{User|' + user + '}}\n';
}
}
//Dispute Description
report += "<span style=\"font-size:110%\">'''Dispute overview'''</span>\n";
report += '\n'+ this.dispute_description + '\n\n';
//Previous forums
report += "<span style=\"font-size:110%\">'''How have you tried to resolve this dispute before coming here?'''</span>\n";
report += '\n'+ this.previous_forums + '\n\n';
//Desired Outcome
report += "<span style=\"font-size:110%\">'''How do you think we can help resolve the dispute?'''</span>\n";
report += '\n' + this.desired_outcome + '\n\n';
//User statements
var currentUser = mw.config.get( 'wgUserName' );
for ( userIndex = 0; userIndex < this.involved_users.length; userIndex++ ) {
var user = this.involved_users[ userIndex ];
if ( user != currentUser ) {
report += '==== Summary of dispute by ' + user + " ====\n<div style=\"font-size:smaller\">Please keep it brief - less than 2000 characters if possible, it helps us help you quicker.</div>\n\n";
}
}
//Discussion
report += '=== ' + this.article_title + " discussion ===\n<div style=\"font-size:smaller\">Please keep discussion to a minimum before being opened by a volunteer. Continue on article talk page if necessary.</div>";
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 s4_active = ( this.wizard_step == 4 ) ? ' pr-active' : '';
var signupbox = '<ul id="signuptopbox">';
signupbox += '<li class="s1' + s1_active + '"><span class="pr-number">1</span><span>Preliminary</span></li>';
signupbox += '<li class="pr-spacer' + s1_active + '"><div></div></li>';
signupbox += '<li class="s2' + s2_active + '"><span class="pr-number">2</span><span>Type of dispute</span></li>';
signupbox += '<li class="pr-spacer' + s2_active + '"><div></div></li>';
signupbox += '<li class="s2' + s3_active + '"><span class="pr-number">3</span><span>Description</span></li>';
signupbox += '<li class="pr-spacer' + s3_active + '"><div></div></li>';
signupbox += '<li class="s4' + s4_active + '"><span class="pr-number">4</span><span>Summary</span></li>';
signupbox += '<li class="pr-spacer' + s4_active + '"><div></div></li>';
signupbox += '</ul>';
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() {
$( '#drwContent1' ).html(
'<h2>Request dispute resolution</h2>' +
'<p>' +
'Hi there. This form can be used to file a request at the dispute resolution noticeboard, a venue for resolving disputes 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 <a href="https://en.wikipedia.org/wiki/WP:ANI">here</a>. ' +
'If you have any questions please ask one of our <a href="https://en.wikipedia.org/wiki/WP:DRVOLUNTEERS">volunteers</a> for guidance.' +
'<h3>In brief: dispute resolution should be used when you:</h3>' +
'<ul>' +
'<li>Have a dispute with another editor and need help resolving it</li>' +
'<li>Are willing to discuss the issues in a calm and civil manner</li>' +
'<li>Are open to the idea of compromising with the other editors to resolve the dispute</li>' +
'</ul>
'<h3>This process
'<ul>' +
'<li>Help provide suggestions on content</li>' +
'<li>Provide editors with guidance on applicable policies and guidelines to the dispute </li>' +
'<li>Mediate discussions and assist editors work towards a consensus on the disputed content</li>' +
'<li>Provide a structured environment with oversight, to allow editors to work together with experienced input</li>' +
'</ul>' +
'<h3>This process cannot:</h3>' +
'<ul>' +
'<li>Block other users from editing (either everywhere or specific pages)</li>' +
'<li>Remove content that you don\'t like from articles</li>' +
'<li>Force another editor to do something</li>' +
'<li>Address disputes that are currently under discussion somewhere else (such as <a href="https://en.wikipedia.org/wiki/WP:RFC">Requests for Comment</a> or <a href="https://en.wikipedia.org/wiki/WP:RFAR">Arbitration</a>)</li>' +
'</p>' +
'<p>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".)</p>'
);
var buttons = '<a href="#top" class="button1" id="yesContentClickButton">Yes, it has.</a>';
buttons += ' <a href="#top" class="button1" id="showCancelButton">Not yet.</a>';
$( '#drwButtons' ).html( buttons );
$( '#yesContentClickButton' ).click( yesContentClick );
$( '#showCancelButton' ).click( showCancel );
}
function showStep2() {
gDRW.wizard_step = 2;
$( '#drwContent1' ).html(
'<h2>Types of dispute</h2>' +
'<p>This forum is designed to only assist with issues regarding the content of articles and isn\'t able to assist with concerns about other editors\' behaviour. Is this an issue only about another editor\'s behaviour?.</p>'
);
var buttons = '<a href="#top" class="button1" id="yesConductClickButton">Yes, it is about another user.</a>';
buttons += ' <a href="#top" class="button1" id="showContentDisputeForm">No, it is not.</a>';
$( '#yesConductClickButton' ).click( showConductCancel );
$( '#showContentDisputeForm' ).click( showStep3 );
}
function showStep3( errorMsg ) {
gDRW.wizard_step = 3;
$( '#drwProgressBar' ).html( gDRW.getProgressBar() );
var intro = '';
if ( typeof errorMsg === 'string' ) {
intro = '<p class="warning">' + errorMsg + '</p>';
}
intro +=
'<p>' +
'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?)' +
'</p>' +
'<p>' +
'Take note of the character limits as they are there to help focus the discussion.' +
'</p>';
$( '#drwContent1' ).html( intro );
gDRW.drawTitleInput();
gDRW.drawDescriptionInput();
gDRW.drawPreviousInput();
gDRW.drawOutcomeInput();
var buttons = '<a href="#top" class="button1" id="showStep1Button">Back</a>';
buttons += ' <a href="#top" class="button1" id="showCancelButton">Cancel</a>';
buttons += ' <a href="#top" class="button1" id="showStep4Button">Next</a>';
$( '#drwButtons' ).html( buttons );
$( '#showStep1Button' ).click( showStep1 );
$( '#showCancelButton' ).click( showCancel );
$( '#showStep4Button' ).click( showStep4 );
}
function showStep4() {
var inputErrors = [];
//Check that vars were filled
if ( gDRW.article_title === '' ) {
inputErrors.push( 'Location of dispute' );
}
if ( gDRW.dispute_description === '' ) {
inputErrors.push( 'Dispute overview' );
}
if ( gDRW.previous_forums === '' ) {
inputErrors.push( 'Previous steps' );
}
if ( gDRW.desired_outcome === '' ) {
inputErrors.push( 'Desired outcome' );
}
if ( inputErrors.length > 0 ) {
return showStep3( 'All fields are required. Missing values for: ' + inputErrors.join( ', ' ) );
}
gDRW.wizard_step = 4;
$( '#drwProgressBar' ).html( gDRW.getProgressBar() );
$( '#drwContent1' ).html( '<p>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.</p>' );
gDRW.drawDRWSummary();
var buttons = '<a href="#top" class="button1" id="showStep3Button">Edit</a>';
buttons += ' <a href="#top" class="button1" id="showCancelButton">Cancel</a>';
buttons += ' <a href="#top" class="button1" id="doSubmitButton">Save</a>';
$( '#drwButtons' ).html( buttons );
$( '#showStep3Button' ).click( showStep3 );
$( '#showCancelButton' ).click( showCancel );
$( '#doSubmitButton' ).click( doSubmit );
}
function showResult( status ) {
$( '#showStep4Button' ).click( showStep4 );
} else {
$( '#drwContent1' ).html( '<h2>Error</p><p>Something went wrong!</p>' );
$( '#drwButtons' ).html( '' );
}
}
function showCancel() {
$( '#drwContent1' ).html(
'<p>' +
'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 <a href="https://en.wikipedia.org/wiki/WP:DISCUSSIT">this page,</a> or you can place <code>{{helpme}}</code> on <a href="https://en.wikipedia.org/wiki/Special:MyTalk">your own talk page</a>, and a volunteer will come by your page to help.' +
'</p>'
);
$( '#drwButtons' ).html( '<a href="#top" class="button1" id="showStep1Button">Start Over</a>' );
$( '#showStep1Button' ).click( showStep1 );
}
function showConductCancel() {
gDRW.wizard_step = 0;
$( '#drwProgressBar' ).html( gDRW.getProgressBar() );
$( '#drwContent1' ).html(
'<p>' +
'We can only assist with content disputes. If you have concerns about the conduct of another editor, you will need to bring this to the <a href="https://en.wikipedia.org/wiki/WP:AN">Administrator\'s Noticeboard.</a>' +
'</p>'
);
$( '#drwButtons' ).html( '<a href="#top" class="button1" id="showStep1Button">Start Over</a>' );
$( '#showStep1Button' ).click( showStep1 );
}
/**
* Do the final step of the DRW and post the report to the appropriate page
*/
function doSubmit() {
//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
var summary = gDRW.article_title;
addNewSection( DRPage, summary, report, edittoken );
}
/**
* Event handler functions
*/
function setDisputeForum( box ) {
}
}
function updateLink( box ) {
}
function
}
/**
* Taken almost verbatim from
*/
function
section: 'new',
summary: summary,
text: content,
token: editToken
},
type: 'POST',
success: function( data )
if ( data && data.edit && data.edit.result == 'Success' ) { }
},
}
}
}
/**
* Initialization function. Test if we should place the DRW on the current page.
* Looks for a <div id="myDRW"></div> on the page.
*/
function runDRW() {
$( '#drw_main' ).append( '<div id="drwProgressBar" style="width: 950px; padding: 20px 25px; height: 30px; text-align: center"></div>' );
showStep1(); //Show the first page
}
}
var gDRW = new drw();
$( document ).ready( runDRW
// JavaScript Document
// </nowiki>
|