User:SD0001/GAR-helper.js: Difference between revisions

Content deleted Content added
automatically add signature in nomination text if not included
don't lose nomination text in case of failure
 
(3 intermediate revisions by the same user not shown)
Line 25:
if (e) e.preventDefault();
 
var Window = new Morebits.simpleWindow(600, 450600);
Window.setTitle( "Nominate article for GAR" );
Window.setScriptName('GAR-helper');
Line 31:
 
var form = new Morebits.quickForm(gar.evaluate);
 
mw.util.addCSS('.quickform * { font-size: 12px; }');
 
Line 47:
tooltip: 'You can expand the rationale after the page has been saved as well.'
});
 
var previewlink = Morebits.htmlNode('a', 'Preview');
previewlink.style.cursor = "pointer";
$(previewlink).click(function() {
// |result| is defined below
gar.preview(result);
gar.tasks.getNumber().then(function () {
gar.preview(result);
});
});
form.append( { type: 'div', id: 'garpreview', label: [ previewlink ] } );
Line 64 ⟶ 62:
Window.setContent(result);
Window.display();
resultgar.previewerpreviewbox = new Morebits.wiki.preview(document.getElementById('gar-previewbox'));
result.previewer = new Morebits.wiki.preview(gar.previewbox);
 
};
 
gar.previewinitParams = function (form) {
gar.params = {
reason: form.reason.value
};
var title_obj = new mw.Title.newFromText(Morebits.pageNameNorm);
gar.title = title_obj.getSubjectPage().toText();
gar.talktitle = title_obj.getTalkPage().toText();
 
gar.garpage = 'Wikipedia:Good article reassessment/' + gar.title + '/' + gar.num;
gar.usersToNotify = [];
form.previewer.beginRender(gar.tasks.getNomPageText(), gar.garpage);
};
 
gar.preview = function(form) {
gar.initParams(form);
 
Morebits.status.init(gar.previewbox);
$(gar.previewbox).show();
 
var tm = new Morebits.taskManager();
tm.add(gar.tasks.getNumber, []);
tm.add(gar.tasks.getCreator, []);
tm.add(gar.tasks.getLastGanNominator, []);
tm.add(gar.tasks.getOtherEditors, []);
gar tm.tasks.getNumberexecute().then(function () {
gar.garpage = 'Wikipedia:Good article reassessment/' + gar.title + '/' + gar.num;
 
var previewText =
'<i>Preview of ' + gar.garpage + ':</i>\n'
+ '----\n'
+ gar.tasks.getNomPageText()
+ '\n----\n'
+ '<i>Notifications will be automatically delivered to the following pages. Uncheck to prevent notification:</i>\n\n'
+ (gar.tasks.getNotificationTargets().length > 0 ?
gar.tasks.getNotificationTargets()
.map(p => '*<span class=gar-user-to-notify>[[User talk:' + p + ']]</span>').join('\n') :
'*<i>None</i>');
 
form.previewer.beginRender(previewText, gar.garpage).then(function () {
$(gar.previewbox).find('.gar-user-to-notify').each(function (_, e) {
$(e).prepend(
$('<input>')
.attr('type', 'checkbox')
.attr('value', mw.Title.newFromText($(e).text()).getMainText())
.prop('checked', true)
);
});
});
}, function () {
form.previewer.beginRender(gar.tasks.getNomPageText()"Unable to render preview", gar.garpage);
});
};
 
gar.evaluate = function(e) {
var form = e.target;
gar.params = {initParams(form);
 
reason: form.reason.value
gar.usersNotToNotify = new Set($(gar.previewbox)
};
.find('.gar-user-to-notify input:not(:checked)')
.get()
.map(e => e.value));
 
Morebits.simpleWindow.setButtonsEnabled(false);
Morebits.status.init(form);
 
var title_obj = new mw.Title.newFromText(Morebits.pageNameNorm);
gar.title = title_obj.getSubjectPage().toText();
gar.talktitle = title_obj.getTalkPage().toText();
 
gar.usersToNotify = [];
 
var tm = new Morebits.taskManager();
tm.add(gar.tasks.getNumber, []);
tm.add(gar.tasks.editTalkPage, [ gar.tasks.getNumber ]);
tm.add(gar.tasks.createNomPage, [ gar.tasks.editTalkPage ], function (); {
Morebits.status.printUserText(gar.tasks.getNomPageText(),
'Your nomination text is provided below, with which you can manually create the page [[' + gar.garpage + ']].');
});
tm.add(gar.tasks.getCreator, []);
tm.add(gar.tasks.getLastGanNominator, []);
Line 107 ⟶ 146:
new Morebits.status('Notifications', ['The script has notified the the reviewer and page creator. ' +
'Please consider manually notifying other involved editors and WikiProjects using ',
Morebits.htmlNode('code', '{{subst:GARMessage|' + gar.title + '|GARpage=' + gar.num + '}} ~~~~') ], 'warn');
});
 
Line 121 ⟶ 160:
formatversion: '2',
list: 'allpages',
query. apnamespace =: '4', // WP
query. apprefix =: 'Good article reassessment/' + gar.title + '/';,
aplimit: 'max'
};
query.apnamespace = '4', // WP
query.apprefix = 'Good article reassessment/' + gar.title + '/';
var api = new Morebits.wiki.api('Getting numbering', query);
api.post().then(function(apiobj) {
Line 133 ⟶ 173:
return def;
},
 
getNomPageText: function() {
return '{{subst:GAR/header}}\n' + gar.params.reason.trim() +
(gar.params.reason.trim().endsWith('~~~~') ? '' : ' ~~~~');
},
Line 160 ⟶ 200:
text = '{{subst:GAR}}\n' + text;
// append transclusion:
text += '\n\n==GA Reassessment==\n' +
'{{' + gar.garpage + '}}';
talkpage.setPageText(text);
Line 181 ⟶ 221:
return def;
},
 
getLastGanNominator: function () {
return $.get({
Line 202 ⟶ 242:
"formatversion": "2",
"list": "allpages",
"aplimit": "max"
};
var api_gan = new Morebits.wiki.api('Getting previous GAN reviewers', $.extend(query, {
Line 229 ⟶ 270:
},
 
notifygetNotificationTargets: function() {
var users =return Morebits.array.uniq(gar.usersToNotify).filter(function (user) {
return user !== mw.config.get('wgUserName');
});
},
 
notify: function() {
var usersToNotify = gar.tasks.getNotificationTargets().filter(name => !gar.usersNotToNotify.has(name));
var appendtext = '\n\n' +
'{{subst:GARMessage|' + gar.title + '|GARpage=' + gar.num + '}} ~~~~';
var editsummary = '[[' + gar.title + ']] listed for good article reassessment' + gar.advert;
var defs = usersusersToNotify.map(function(user, idx) {
var def = $.Deferred();
var usertalk = new Morebits.wiki.page('User talk:' + user, 'Notifying ' + user);