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(/\[\]\|\{\}]+?(&amp;action\=edit&amp;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(/\[\]\|\{\}]+?(&amp;action\=edit&amp;redlink\=1)?\" class\=\"(new )?mw-userlink\"/) !== -1 ) { abuse_log_contribs_link.setAttribute("className", "new"); };     };    };  }; };