User:DannyS712/EasyGAReview.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | Documentation for this user script can be added at User:DannyS712/EasyGAReview. |
// <nowiki>
// Quick script to simplify reviewing Good Article nominations
// @author DannyS712
$(() => {
const EasyGAReview = {};
window.EasyGAReview = EasyGAReview;
EasyGAReview.init = function () {
window.document.title = 'EasyGAReview';
$( '#firstHeading' ).text( 'EasyGAReview' );
mw.loader.using(
[ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows', 'mediawiki.util', 'mediawiki.api' ],
EasyGAReview.run
);
};
EasyGAReview.elements = {};
EasyGAReview.getCheck = function () {
// Represents input for {{GAList/check}} in different parameters
// to {{GAList}}
return new OO.ui.RadioSelectInputWidget( {
options: [
{ data: 'unreviewed', label: 'unreviewed' },
{ data: 'pass', label: 'pass' },
{ data: 'fail', label: 'fail' },
{ data: 'hold', label: 'on hold' },
{ data: 'nuetral', label: 'neutral' }
]
} );
};
EasyGAReview.createElements = function () {
// Using {{GAList}}, matching template inputs
// TODO add links to the text (labels can be jQuery)
var e = {};
e.overallComment = new OO.ui.TextInputWidget();
e.overallCommentLayout = new OO.ui.FieldLayout( e.overallComment, { label: 'Overall comment' } );
e.criteria1 = new OO.ui.LabelWidget( { label: 'Criteria #1: It is reasonably well written' } );
e.criteria1Layout = new OO.ui.FieldLayout( e.criteria1 );
e.criteria1a = EasyGAReview.getCheck();
e.criteria1aLayout = new OO.ui.FieldLayout( e.criteria1a, { label: 'Criteria #1a: prose, spelling, and grammar' } );
e.criteria1b = EasyGAReview.getCheck();
e.criteria1bLayout = new OO.ui.FieldLayout( e.criteria1b, { label: 'Criteria #1b: MoS for lead, layout, word choice, fiction, and lists' } );
e.criteria1Comment = new OO.ui.TextInputWidget();
e.criteria1CommentLayout = new OO.ui.FieldLayout( e.criteria1Comment, { label: 'Criteria #1: comment' } );
e.criteria2 = new OO.ui.LabelWidget( { label: 'Criteria #2: It is factually accurate and verifiable' } );
e.criteria2Layout = new OO.ui.FieldLayout( e.criteria2 );
e.criteria2a = EasyGAReview.getCheck();
e.criteria2aLayout = new OO.ui.FieldLayout( e.criteria2a, { label: 'Criteria #2a: reference section' } );
e.criteria2b = EasyGAReview.getCheck();
e.criteria2bLayout = new OO.ui.FieldLayout( e.criteria2b, { label: 'Criteria #2b: citations to reliable sources' } );
e.criteria2c = EasyGAReview.getCheck();
e.criteria2cLayout = new OO.ui.FieldLayout( e.criteria2c, { label: 'Criteria #2c: original research' } );
e.criteria2d = EasyGAReview.getCheck();
e.criteria2dLayout = new OO.ui.FieldLayout( e.criteria2d, { label: 'Criteria #2d: copyvio and plagiarist' } );
e.criteria2Comment = new OO.ui.TextInputWidget();
e.criteria2CommentLayout = new OO.ui.FieldLayout( e.criteria2Comment, { label: 'Criteria #2: comment' } );
e.criteria3 = new OO.ui.LabelWidget( { label: 'Criteria #3: It is broad in its coverage' } );
e.criteria3Layout = new OO.ui.FieldLayout( e.criteria3 );
e.criteria3a = EasyGAReview.getCheck();
e.criteria3aLayout = new OO.ui.FieldLayout( e.criteria3a, { label: 'Criteria #3a: major aspects' } );
e.criteria3b = EasyGAReview.getCheck();
e.criteria3bLayout = new OO.ui.FieldLayout( e.criteria3b, { label: 'Criteria #3b: focused' } );
e.criteria3Comment = new OO.ui.TextInputWidget();
e.criteria3CommentLayout = new OO.ui.FieldLayout( e.criteria3Comment, { label: 'Criteria #3: comment' } );
e.criteria4 = EasyGAReview.getCheck();
e.criteria4Layout = new OO.ui.FieldLayout( e.criteria4, { label: 'Criteria #4: It follows the neutral point of view policy' } );
e.criteria4Comment = new OO.ui.TextInputWidget();
e.criteria4CommentLayout = new OO.ui.FieldLayout( e.criteria4Comment, { label: 'Criteria #4: comment' } );
e.criteria5 = EasyGAReview.getCheck();
e.criteria5Layout = new OO.ui.FieldLayout( e.criteria5, { label: 'Criteria #5: It is stable' } );
e.criteria5Comment = new OO.ui.TextInputWidget();
e.criteria5CommentLayout = new OO.ui.FieldLayout( e.criteria5Comment, { label: 'Criteria #5: comment' } );
e.criteria6 = new OO.ui.LabelWidget( { label: 'Criteria #6: It is illustrated by images and other media, where possible and appropriate' } );
e.criteria6Layout = new OO.ui.FieldLayout( e.criteria6 );
e.criteria6a = EasyGAReview.getCheck();
e.criteria6aLayout = new OO.ui.FieldLayout( e.criteria6a, { label: 'Criteria #6a: images are tagged and non-free content have fair use rationales' } );
e.criteria6b = EasyGAReview.getCheck();
e.criteria6bLayout = new OO.ui.FieldLayout( e.criteria6b, { label: 'Criteria #6b: appropriate use with suitable captions' } );
e.criteria6Comment = new OO.ui.TextInputWidget();
e.criteria6CommentLayout = new OO.ui.FieldLayout( e.criteria6Comment, { label: 'Criteria #6: comment' } );
e.result = EasyGAReview.getCheck();
e.resultLayout = new OO.ui.FieldLayout( e.result, { label: 'Result' } );
e.resultComment = new OO.ui.TextInputWidget();
e.resultCommentLayout = new OO.ui.FieldLayout( e.resultComment, { label: 'Result comment' } );
EasyGAReview.elements = e;
};
EasyGAReview.getExtraSpace = function () {
return new OO.ui.FieldLayout( new OO.ui.LabelWidget( { label: '' } ) );
};
EasyGAReview.run = function () {
mw.util.addCSS(`
.oo-ui-fieldLayout.oo-ui-labelElement {
margin-top: 0;
}
.oo-ui-radioOptionWidget {
display: inline;
padding-right: 5px;
}
`);
var submit = new OO.ui.ButtonInputWidget( {
label: 'Generate review',
flags: [ 'primary', 'progressive' ]
} );
submit.on( 'click', function () {
EasyGAReview.onSubmit();
} );
$( window ).on( 'keypress', function ( e ) {
// press enter to start
if ( e.which == 13 ) {
submit.simulateLabelClick();
}
} );
var fieldSet = new OO.ui.FieldsetLayout( {
label: 'Easily go through the GA review checklist'
} );
EasyGAReview.createElements();
var e = EasyGAReview.elements;
fieldSet.addItems( [
e.overallCommentLayout,
e.criteria1Layout,
e.criteria1aLayout,
e.criteria1bLayout,
e.criteria1CommentLayout,
e.criteria2Layout,
e.criteria2aLayout,
e.criteria2bLayout,
e.criteria2cLayout,
e.criteria2dLayout,
e.criteria2CommentLayout,
e.criteria3Layout,
e.criteria3aLayout,
e.criteria3bLayout,
e.criteria3CommentLayout,
EasyGAReview.getExtraSpace(),
e.criteria4Layout,
e.criteria4CommentLayout,
EasyGAReview.getExtraSpace(),
e.criteria5Layout,
e.criteria5CommentLayout,
e.criteria6Layout,
e.criteria6aLayout,
e.criteria6bLayout,
e.criteria6CommentLayout,
EasyGAReview.getExtraSpace(),
e.resultLayout,
e.resultCommentLayout,
new OO.ui.FieldLayout( submit )
] );
var $results = $( '<div>' )
.attr( 'id', 'EasyGAReview-results' );
$( '#mw-content-text' ).empty().append(
fieldSet.$element,
$( '<hr>' ),
$results
);
};
EasyGAReview.onSubmit = function () {
var $res = $( '#EasyGAReview-results' );
$res.empty();
console.log( 'Submitted' );
var generatedTemplate = EasyGAReview.getTemplate();
$res.append(
$( '<pre>' ).text( generatedTemplate ),
$( '<div>' )
.attr( 'id', 'EasyGAReview-preview' )
.text( 'Loading preview' )
);
EasyGAReview.showPreview( generatedTemplate );
};
EasyGAReview.getTemplate = function () {
var e = EasyGAReview.elements;
return '{{subst:GAList' +
'|overcom=' + e.overallComment.getValue() +
'|1a=' + e.criteria1a.getValue() +
'|1b=' + e.criteria1b.getValue() +
'|1com=' + e.criteria1Comment.getValue() +
'|2a=' + e.criteria2a.getValue() +
'|2b=' + e.criteria2b.getValue() +
'|2c=' + e.criteria2c.getValue() +
'|2d=' + e.criteria2d.getValue() +
'|2com=' + e.criteria2Comment.getValue() +
'|3a=' + e.criteria3a.getValue() +
'|3b=' + e.criteria3b.getValue() +
'|3com=' + e.criteria3Comment.getValue() +
'|4=' + e.criteria4.getValue() +
'|4com=' + e.criteria4Comment.getValue() +
'|5=' + e.criteria5.getValue() +
'|5com=' + e.criteria5Comment.getValue() +
'|6a=' + e.criteria6a.getValue() +
'|6b=' + e.criteria6b.getValue() +
'|7=' + e.result.getValue() +
'|7com=' + e.resultComment.getValue() +
'}}';
};
EasyGAReview.onErrHandler = function () {
// Shared error handler
alert( 'Something went wrong' );
console.log( arguments );
};
EasyGAReview.showPreview = function ( generatedTemplate ) {
new mw.Api().get( {
action: 'parse',
text: generatedTemplate,
prop: 'text',
pst: true,
contentmodel: 'wikitext',
formatversion: 2
} ).then(
function ( response ) {
console.log( response );
$( '#EasyGAReview-preview' )
.empty()
.html( response.parse.text );
},
EasyGAReview.onErrHandler
);
};
});
$( document ).ready( () => {
mw.loader.using(
[ 'mediawiki.util' ],
function () {
mw.util.addPortletLink(
'p-tb',
'/wiki/Special:BlankPage/EasyGAReview',
'EasyGAReview'
);
}
);
if ( mw.config.get( 'wgNamespaceNumber' ) === -1 ) {
const page = mw.config.get( 'wgCanonicalSpecialPageName' );
if ( page === 'Blankpage' ) {
const page2 = mw.config.get( 'wgTitle' ).split( '/' );
if ( page2[1] && page2[1] === 'EasyGAReview' ) {
window.EasyGAReview.init();
}
}
}
});
// </nowiki>