User:Jfd34/filterlog.js
if ( mw.config.get("wgPageName") === "Special:AbuseLog" ) {
var abuse_log_entries = document.getElementById("bodyContent").getElementsByTagName("ul")[0].getElementsByTagName("li");
// The list of log entries has no class or id, so the only way is to detect its position
// Currently, the filter log is the first
- element of bodyContent
// This may change with updates to the interface or a newer version of MediaWiki
// Such changes may cause the script to stop working or even cause unexpcted results
// Should anything unexpected happen in the filter log, disable this script (remove it from your common.js/skin.js subpage) and see if this fixes the problem
var i;
var abuse_log_user_name;
var abuse_log_user_tools;
var abuse_log_page_name;
var abuse_log_page_link;
var abuse_log_contribs_link;
var user_editcount_request;
var user_editcount_xml;
var user_editcount;
function target_page_link_position(x) {
var default_target_page_link_position = 3;
if ( abuse_log_entries[x].innerHTML.search(/
default_target_page_link_position += 1; }; if ( abuse_log_entries[x].innerHTML.search(/\[\]\|\{\}]+?(&action\=edit&redlink\=1)?\" class\=\"(new )?mw-userlink\"/) !== -1 ) { default_target_page_link_position += 1; }; return default_target_page_link_position; }; for ( i = 0; i < abuse_log_entries.length; i++ ) { // Adds an edit filter log link after the talk and contribs links of each user abuse_log_user_name = abuse_log_entries[i].getElementsByClassName("mw-userlink")[0].getAttribute("href").replace(/.*?(Special\:Contributions\/|User\:)([^#<>\[\]\|\{\}\/]+?)(&action\=edit&redlink\=1)?$/, "$2"); // User links are to contribs page (for IP) or to user page (for account) // Usernames cannot contain # < > [ ] | { } / (from WP:NCTR) // For accounts without a user page, &action=edit&redlink=1 appears at the end of the username abuse_log_user_tools = abuse_log_entries[i].getElementsByClassName("mw-usertoollinks")[0]; abuse_log_user_tools.innerHTML = abuse_log_user_tools.innerHTML.replace(/\)$/, " | filter log)"); // Adds a history link after the page name // The target page name has no class or id on it, so again, it must be found by position // For users who can see private filters, links to all filters are displayed // For others, only links to public filters are displayed, so for private filter hits there is one less from the start of the log entry to the target page // This also depends on whether the user who triggered the filter is an IP or not, is IPs don't have a "contribs" link abuse_log_page_name = abuse_log_entries[i].getElementsByTagName("a")[target_page_link_position(i)].getAttribute("href").replace(/^\/wiki\/([^#<>\[\]\|\{\}]+?)$/, "$1"); // Uses the target_page_link_position() function defined earlier to get the position of the link abuse_log_page_link = abuse_log_entries[i].getElementsByTagName("a")[target_page_link_position(i)]; abuse_log_page_link.outerHTML = abuse_log_page_link.outerHTML + " (history)"; // Shows the user's contributions as a red link if there are no edits // This can't be done for IPs as MediaWiki does not record their edit counts (API queries return the invalid=""attribute) // Determine the user contributions link abuse_log_contribs_link = abuse_log_user_tools.getElementsByTagName("a")[1]; // Since user edit counts are not displayed in the log itself, they need to be retrieved using the API if ( window.XMLHttpRequest ) { // For compatibility with IE 6 and earlier user_editcount_request = new XMLHttpRequest(); } else { user_editcount_request = new ActiveXObject("Microsoft.XMLHTTP"); }; // Get the user's edit count from the API user_editcount_request.open( "GET", "/w/api.php?format=xml&action=query&list=users&usprop=editcount&ususers=" + abuse_log_user_name, true); user_editcount_request.send(); user_editcount_request.onreadystatechange = function() { if ( user_editcount_request.readyState === 4 && user_editcount_request.status === 200 ) { user_editcount_xml = user_editcount_request.responseXML; user_editcount = user_editcount_xml.getElementsByTagName("user")[0].getAttribute("editcount"); user_editcount = new Number(user_editcount); if ( user_editcount === 0 && abuse_log_entries[i].innerHTML.search(/\[\]\|\{\}]+?(&action\=edit&redlink\=1)?\" class\=\"(new )?mw-userlink\"/) !== -1 ) { abuse_log_contribs_link.setAttribute("className", "new"); }; }; }; }; };