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

Content deleted Content added
reset timeout to sane value
also notify any previous GAR nominators and GAN reviewers
Line 18:
$('#gar-portlet').click(gar.callback);
}
loadTaskManager();
});
 
Line 23 ⟶ 24:
 
gar.callback = function garCallback(e) {
if (e) {e.preventDefault();
e.preventDefault();
}
 
var Window = new Morebits.simpleWindow(600, 450);
Line 109 ⟶ 108:
gar.talktitle = title_obj.getTalkPage().toText();
 
gar.usersToNotify = [];
gar.tasks.getNumber().then(function() {
 
return gar.tasks.createNomPage();
var tm = new Morebits.taskManagerXXX();
}).then(function() {
return tm.add(gar.tasks.editTalkPage(getNumber, []);
tm.add(gar.tasks.createNomPage, [ gar.tasks.getNumber ]);
}).then(function() {
return tm.add(gar.tasks.editTalkPage, [ gar.tasks.getCreator(createNomPage ]);
tm.add(gar.tasks.getCreator, []);
}).then(function() {
return tm.add(gar.tasks.notifyAuthor(getOtherEditors, []);
tm.add(gar.tasks.notify, [ gar.tasks.getCreator, gar.tasks.getOtherEditors ]);
}).then(function() {
 
tm.execute().then(function() {
Morebits.status.actionCompleted('Nomination completed. Redirecting to nomination page in 3 seconds...');
setTimeout(function() {
___location.href = mw.util.getUrl(gar.garpage);
}, 3000300000);
});
 
Line 202 ⟶ 203:
page.setLookupNonRedirectCreator(true);
page.lookupCreation(function() {
gar.pageauthorvar author = page.getCreator();
page.getStatusElement().info('Got ' + gar.pageauthorauthor);
gar.usersToNotify.push(author);
def.resolve();
}, def.reject);
Line 209 ⟶ 211:
},
 
notifyAuthorgetOtherEditors: function() {
var def = $.Deferred();
var query = {
var usertalk = new Morebits.wiki.page('User talk:' + gar.pageauthor, 'Notifying article creator');
"action": "query",
usertalk.setAppendText(
"format": "json",
'\n\n' +
"formatversion": "2",
"list": "allpages",
};
var api_gan = new Morebits.wiki.api('Getting previous GAN reviewers', $.extend(query, {
"apprefix": gar.title + '/GA',
"apnamespace": "1"
})).post();
var api_gar = new Morebits.wiki.api('Getting previous GAR nominators', $.extend(query, {
"apprefix": 'Good article reassessment/' + gar.title + '/',
"apnamespace": "4"
})).post();
 
$.when(api_gar, api_gan).then(function(result_gan, result_gar) {
var pages = result_gar.response.query.allpages
.concat(result_gan.response.query.allpages);
var lookupsDone = 0;
pages.forEach(function(page) {
var p = new Morebits.wiki.page(page.title, 'Looking up creator of ' + page.title);
p.lookupCreation(function() {
gar.usersToNotify.push(p.getCreator());
p.getStatusElement().info('found ' + p.getCreator());
if (++lookupsDone === pages.length) { // Hack: #911
def.resolve();
}
});
});
});
return def;
},
 
notify: function() {
var def = $.Deferred();
var users = Morebits.array.uniq(gar.usersToNotify);
var appendtext = '\n\n' +
(gar.garc ?
'{{subst:GARMessage|' + gar.title + '|GARpage=' + gar.num + '}} ~~~~' :
'{{subst:GARMessage|' + gar.title + '|page=' + gar.num + '}} ~~~~');
var editsummary = '[[' + gar.title + ']] listed for Good article reassessment' + gar.advert;
);
users.forEach(function(user, idx) {
usertalk.setEditSummary('[[' + gar.title + ']] listed for Good article reassessment' + gar.advert);
var usertalk = new Morebits.wiki.page('User talk:' + user, 'Notifying ' + user);
usertalk.append(def.resolve, def.reject);
usertalk.setAppendText(appendtext);
usertalk.setEditSummary(editsummary);
usertalk.append(function() {
if (idx === users.length - 1) { // Hack: till .append() is promisified (#911)
def.resolve();
}
});
});
return def;
}
 
};
 
function loadTaskManager() {
Morebits.taskManagerXXX = function() { // named so to avoid naming conflict with real one
this.taskDependencyMap = new Map();
this.deferreds = new Map();
this.allDeferreds = []; // Hack: IE doesn't support Map.prototype.values
 
/**
* Register a task along with its dependencies (tasks which should have
* finished execution before we can begin this one).
* Each task is a function that must return a promise.
* @param {function} func - a task
* @param {function[]} deps - its dependencies
*/
this.add = function(func, deps) {
this.taskDependencyMap.set(func, deps);
var deferred = $.Deferred();
this.deferreds.set(func, deferred);
this.allDeferreds.push(deferred);
};
 
/**
* Run all the tasks in correct sequence. Multiple tasks may be run at once.
*/
this.execute = function() {
var self = this; // proxy for `this` for use inside functions where `this` is something else
this.taskDependencyMap.forEach(function(deps, task) {
var depsPromisesArray = deps.map(function(dep) {
return self.deferreds.get(dep);
});
 
$.when.apply(null, depsPromisesArray).then(function() {
console.log('Executing ' + task.name);
task().then(function() {
console.log(task.name + ' is resolved');
self.deferreds.get(task).resolve();
});
});
 
});
 
return $.when.apply(null, this.allDeferreds); // resolved when eveything is done!
};
};
}
 
/* </nowiki> */