/*
* Pages Created -- finds all the pages created by a user
* see [[User:Jfmantis/pagesCreated]]
*/
(function() {
/*
* create <li> list item for one article
* right now, just a link to the page & the date
*/
function makeCreatedPageItem(contrib) {
var item = document.createElement("li");
var link = document.createElement("a");
link.href = mw.util.getUrl(contrib.title);
link.innerHTML = contrib.title;
item.appendChild(link);
item.innerHTML += " . . " + new Date(contrib.timestamp).toDateString();
return item;
}
/*
* looks through all of a user's non-minor namespace 0 edits,
* looking for edits tagged as "new"
*
* the arguments all in one object so that it can be expanded
* in the future without having to add a bunch more parameters
*/
function findPagesCreated(bundle) {
bundle.api.get({
action: "query",
rawcontinue: '',
list: "usercontribs",
ucuser: bundle.user,
ucstart: bundle.start,
ucprop: "flags|title|timestamp",
ucshow: "!minor",
uclimit: 500,
ucnamespace: 0
}).done( function(data) {
$.each(data.query.usercontribs, function(index, contrib) {
if (contrib.new != undefined) {
bundle.list.appendChild(makeCreatedPageItem(contrib));
bundle.count++;
}
});
if (data["query-continue"]) { // more contributions
bundle.start = data["query-continue"].usercontribs.ucstart
setTimeout(function() { findPagesCreated(bundle); }, 3000);
} else { // done
$("#pc-status")[0].innerHTML = "<br />" + bundle.user + " has created " + bundle.count + " articles";
}
}).fail( function(error) {
alert(error);
});
}
/*
* change title, clear content area, etc.
*/
function setupPagesCreated(user) {
// set new title
mw.util.$content.find("#firstHeading")[0].innerHTML = "Pages created by " + user;
// status bar (text + waiting gif)
var status = document.createElement("span");
status.id = "pc-status";
status.innerHTML = "<br />Fetching user data...";
// heading for results
var heading = document.createElement("h3");
heading.innerHTML = "Articles";
// list of results
var articles = document.createElement("ul");
articles.id = "pc-articles";
var body = mw.util.$content.find("#bodyContent")[0];
body.innerHTML = "";
body.appendChild(status);
body.appendChild(heading);
body.appendChild(articles);
var api = new mw.Api();
api.get({
action: "query",
list: "users",
ususers: user,
usprop: "editcount"
}).done(function(data) {
// 500 results per request, 1 request every 3 seconds
var count = data.query.users[0].editcount;
status.innerHTML = "<br />User has " + count + " edits, this should take less than ";
status.innerHTML += (3 * Math.round(count / 500)) + " seconds ";
var waitgif = document.createElement("img");
waitgif.src = "https://up.wiki.x.io/wikipedia/commons/4/42/Loading.gif";
status.appendChild(waitgif);
findPagesCreated(
{"api": api,
"user": user,
"list": articles,
"start": "",
"count": 0}
);
}).fail(function(error) {
alert(error);
});
return false;
}
mw.loader.using("mediawiki.util", function() {
// add portlet when page is User or User_talk, but not on subpages
if ((mw.config.get('wgNamespaceNumber') == 2 || mw.config.get('wgNamespaceNumber') == 3) && (mw.config.get('wgTitle').indexOf("/") == -1)) {
if (mw.util.getParamValue("pagesCreated")) {
setupPagesCreated(mw.config.get('wgTitle'));
} else {
mw.util.addPortletLink("p-tb",
document.location.toString() + "?pagesCreated=true",
"Pages created", "pc-pages",
"Get a list of all pages created by this user"
);
}
}
});
})();