User:Anerisys/contribution shortcuts
This user script adds "edit" and "info" links to each row in the user contributions for convenience, so that the links appear like "(diff | hist | edit | info)". In page histories, it adds a "source" shortcut to each revision, like "(cur | prev | source)".
Compatibility
[edit]The script works with all skins, including Minerva since its contribution page was redesigned to become more similar to the other skins. It is backwards-compatible to MediaWiki versions starting approximately 2019.
Code
[edit]/* user contribution links – adds "edit" and "info" links: (diff|hist|edit|info) */ /* page history links – adds "source" link: (cur|prev|source) */ /* backwards compatible to MediaWiki ~2019 */
// initialize var c_shortcuts = {}; // localization c_shortcuts.l10n_base = { en: { 'source': 'source', 'edit': 'edit', 'info': 'info' }, de: { 'source': 'Quelltext', 'edit': 'Bearbeiten', 'info': 'Informationen' } }; c_shortcuts.language = "en"; // fallback if loading configuration fails if (typeof mw != "undefined") c_shortcuts.language = mw.config.values.wgUserLanguage; // get language setting if ( ! c_shortcuts.l10n_base[c_shortcuts.language] ) language="en"; // fallback if untranslated function l10n(msg) { return c_shortcuts.l10n_base[c_shortcuts.language][msg]; }
// functions c_shortcuts.addHistoryShortcut = function(action,label,class_name,parent_element,shortcut_URL_source_class) { // generate shortcut URL if (! label) label=action; if (contribution.querySelector("."+shortcut_URL_source_class)) { shortcut_URL=parent_element.querySelector("."+shortcut_URL_source_class).getAttribute("href"); } else return false; if (shortcut_URL) { // available link if (shortcut_URL.toString().indexOf("&action") > 0) shortcut_URL=shortcut_URL.replace(/&action.*?(&|$)/,""); shortcut_URL+="&action="+action;
parent_element.querySelector(".mw-changeslist-links").appendChild(document.createElement("span")); parent_element.querySelector(".mw-changeslist-links").lastElementChild.classList.add(class_name); parent_element.querySelector(".mw-changeslist-links").lastElementChild.innerHTML=' <a>'+l10n(label)+'</a>'; } else { // missing link parent_element.querySelector(".mw-changeslist-links").appendChild(document.createElement("span")); parent_element.querySelector(".mw-changeslist-links").lastElementChild.classList.add(class_name); parent_element.querySelector(".mw-changeslist-links").lastElementChild.innerHTML=' '+l10n(label); } };
// main
if (document.getElementsByClassName("mw-contributions-list").length == 0 && ! document.getElementById("pagehistory") ) {
console.debug("no page history found");
} else {
c_shortcuts.contribution_count = 0; c_shortcuts.day_count = 0;
// determine whether the page is a page history or user contribution list if (document.getElementById("pagehistory") ) { // is page history c_shortcuts.history_type="pagehistory"; console.debug("page history detected"); c_shortcuts.history_container = document.getElementById("pagehistory"); } else { // user contributions c_shortcuts.history_type="contributions"; console.debug("user contributions detected"); c_shortcuts.history_container = document.getElementsByClassName("mw-contributions-list")[0].parentElement; }
// select history items on page if (c_shortcuts.history_type == "pagehistory") { c_shortcuts.contribution_list = document.getElementById("pagehistory").getElementsByTagName("li"); } else if (c_shortcuts.history_type == "contributions") { c_shortcuts.contribution_list = document.getElementsByClassName("mw-contributions-list")[0].parentElement.getElementsByTagName("li"); }
c_shortcuts.number_of_days = c_shortcuts.history_container.getElementsByTagName("h4").length; if (c_shortcuts.number_of_days == 0) c_shortcuts.number_of_days=1; // backwards compatibility
for ( c_shortcuts.contribution_count = 0; c_shortcuts.contribution_count < c_shortcuts.contribution_list.length; c_shortcuts.contribution_count++ ) { var contribution=c_shortcuts.contribution_list[c_shortcuts.contribution_count]; if (c_shortcuts.history_type == "pagehistory") { // add "source" shortcut c_shortcuts.addHistoryShortcut("edit","source","mw-changeslist-source",contribution,"mw-changeslist-date" ); } else { // add "edit" and "info" shortcuts c_shortcuts.addHistoryShortcut("edit","edit","mw-changeslist-edit",contribution,"mw-changeslist-history" ); c_shortcuts.addHistoryShortcut("info","info","mw-changeslist-info",contribution,"mw-changeslist-history" ); } }
}