MoreMenu

From Meta, a Wikimedia project coordination wiki
Jump to navigation Jump to search
MoreMenu
Screenshot of MoreMenu script.png
Analyzing Jimbo's contributions
DescriptionUseful links to common tasks, user and page analytic tools and logs
AuthorsMusikAnimal
Updated2019-12-07 (4 days ago)
Version5.0.8
SourceGitHub
Skin supportAll
Browser supportAll "modern" browsers, see mw:Compatibility#Browsers

MoreMenu is a script that adds "Page" and, if applicable, "User" dropdown menus to the toolbar. It is the successor to Haza-w's Drop-down menus gadget and was heavily influenced by it.

Overview[edit]

This gadget adds up to two dropdown menus to the menu bar containing links to useful common tasks, user/page logs, analytic tools/statistics, and tools for administrators. For all but special pages the Page menu is visible. The User menu is visible only on pages pertaining to a user, including contributions pages.

Screenshot of the Analytics menu of the Page dropdown.

Some links are only available if you have certain rights (block for block links, for example). Additionally, menu items in the User menu may appear based on conditions of the user you are viewing, such as their user rights, or if they've have current or previous blocks, etc. For example the Block log item in the Blocks submenu only appears if that user has been blocked in the past. Some links are also visible only in certain namespaces and on certain projects.

Installation[edit]

Installing globally (recommended)[edit]

Add the following to your m:Special:MyPage/global.js:

mw.loader.load('https://meta.wikimedia.org/w/index.php?action=raw&ctype=text/javascript&title=MediaWiki:MoreMenu.import.js');

This will import all the core modules and give you a functioning script and make it available on all wikis.

Menus jumping on page load[edit]

If you use the Vector skin, you prevent the tabs at the top ("Edit", "View history", etc.) from jumping around. For English users, add the following to the top of your Special:MyPage/global.css:

@import url('https://meta.wikimedia.org/w/index.php?title=MediaWiki:Gadget-MoreMenu-pagestyles.en.css&action=raw&ctype=text/css');

For non-English, replace the .en in the path to your desired language. See Special:PrefixIndex/MediaWiki:Gadget-MoreMenu-pagestyles for a list of supported languages. If your language is missing, let the maintainers know on the talk page.

English Wikipedia extension[edit]

If you are a user of the English Wikipedia, browse to your common.js and import the enwiki extension, which adds menu items for RfAs/RfBs and XfDs, where applicable.

mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () {
	mw.loader.load('//en.wikipedia.org/w/?title=MediaWiki:Gadget-MoreMenu.enwiki.js&action=raw&ctype=text/javascript');
});

Similar extensions can be added for any wiki, or may already exist on your wiki. See #Customization below for more.

Installing as a gadget[edit]

Your local wiki may have MoreMenu available in the gadget preferences. Installing globally is recommended, however, so that MoreMenu is available on all wikis.

If you are an interface administrator and would like to install MoreMenu as a gadget on your wiki, follow these steps:

  1. Create MediaWiki:Gadget-MoreMenu-local.js with the following:
    mw.loader.load('https://meta.wikimedia.org/w/load.php?modules=ext.gadget.MoreMenu');
    
  2. Add the following to MediaWiki:Gadgets-definition:
    MoreMenu-local[ResourceLoader|dependencies=mediawiki.api,mediawiki.util,user.options]|MoreMenu-local.js
  3. Optional: You can setup a peer gadget that prevents the menus from "jumping" on page load in the Vector skin. See #Peer gadget for more information.
  4. Optional: Extend MoreMenu by adding links that specific to your wiki, for example links to a user's Request for Adminship. Create MediaWiki:Gadget-MoreMenu.extension.js with the your extension code, and modify your MediaWiki:Gadgets-definition to use it:
    MoreMenu-local[ResourceLoader|dependencies=mediawiki.api,mediawiki.util,user.options]|MoreMenu-local.js|MoreMenu.extension

Localization[edit]

Translations are pulled from MediaWiki:Gadget-MoreMenu.messages.lang.js, with MediaWiki:Gadget-MoreMenu.messages.en.js as the fallback. To add new translations, make a protected edit request on the talk page, listing the key/value pairs of the messages. See Special:PrefixIndex/MediaWiki:Gadget-MoreMenu.messages for a list of currently supported languages.

Please submit changes to the English translations as a pull request on the GitHub repository.

Customization[edit]

MoreMenu can be extended with custom links and functionality. Links should be added only after the moremenu.ready hook has been fired. See the examples below.

Adding custom links[edit]

  • MoreMenu.addLink(menu, name, url, insertAfter)Adds the link to the given menu.
  • MoreMenu.addSubmenuLink(menu, submenu, name, url, insertAfter)Adds the link to the given submenu.

Here are the descriptions for each parameter:

  • menu — The ID of the top-level menu under which to place the link. Either "user" or "page".
  • submenu — The ID of the submenu under which to place the link. For example "analysis" or "page-logs".
  • name — The title for the link. This can be either a raw string or a message key.
  • url — The URL for the link. Use mw.util.getUrl() for internal links.
  • insertAfter (optional) — The ID of an existing link after which to place the link. You can use false to force the link to be put at the top, and true to force it to the bottom. Otherwise, if no link with the given ID is found, or this parameter is omitted entirely, the link will be placed into the menu alphabetically.

Examples[edit]

Add a link to https://example.org under the "Page" menu:

mw.hook('moremenu.ready').add(function (config) {
    MoreMenu.addLink(
        'user',
        'Example',
        'https://www.example.org'
    );
    
    // add more links here...
    
});

The config object contains a lot of data. In most cases you want your link contain the target user name (config.targetUser.name) or the page name (config.page.name). If these are external links, you may need to use the encoded names, as with config.targetUser.encodedName and config.page.encodedName. See #Configuration values for a list of all the available data.

Say you wanted to show link to the user's "Requests for Adminship" pages:

mw.hook('moremenu.ready').add(function (config) {
    MoreMenu.addSubmenuLink(
        'user',
        'analysis',
        'AfD stats',
        mw.util.getUrl('Special:PrefixIndex/Wikipedia:Requests for Adminship/' + config.user.name),
        'analysis'
    );
    
    // add more links here...
    
});

Now let's say you wanted to add a "RfXs" submenu, with links to RfAs, request for bureaucratship, etc., and only show these links if those pages exist. See /Advanced#Links to pages matching a pattern for how to do this!

Advanced[edit]

Main article: MoreMenu/Advanced

In addition to MoreMenu.addLink() and MoreMenu.addSubmenuLink(), you can take advantage of the logic MoreMenu provides you in constructing your link based on some parameters, such as the user's permissions, or adding an entirely new submenu of links.

See /Advanced for more information.

Peer gadget[edit]

This documentation is for setting up MoreMenu as a gadget on your local wiki. See #Menus jumping on page load for user installation.

When top-level menus are added in the Vector skin, the "Read", "Edit", and "View history" tabs will shift. This means that if you are working very quickly, you might accidentally click in the wrong place before MoreMenu finishes loading. To prevent this, you can use a peer gadget to keep the space available.

First check Special:PrefixIndex/MediaWiki:Gadget-MoreMenu-pagestyles to see if there is CSS code for your language already that you can copy to your wiki. If there isn't, you'll need to calculate the widths. Once the gadget is enabled, you can run $('.mm-page').outerWidth() and $('.mm-user').outerWidth() to get the widths in pixels.

Once you have the widths, create MediaWiki:Gadget-MoreMenu-local-pagestyles.css with the following (in this case for English, and using em instead of px):

/*** VECTOR ***/

/* User menu */
.client-js .skin-vector.ns-2 #p-views,
.client-js .skin-vector.ns-3 #p-views,
.client-js > .skin-vector.mw-special-Contributions #p-views,
.client-js > .skin-vector.mw-special-DeletedContributions #p-views,
.client-js > .skin-vector.mw-special-Block #p-views {
    padding-right: 3.68em;
}

/* Page menu */
.client-js .skin-vector:not(.ns-special) #p-views::after {
    content: '';
    display: inline-block;
    width: 3.85em;
}

Then update your gadget configuration accordingly:

MoreMenu-local[ResourceLoader|dependencies=mediawiki.api,mediawiki.util,user.options|peers=MoreMenu-local-pagestyles]]|MoreMenu-local.js
MoreMenu-local-pagestyles[hidden]|MoreMenu-local-pagestyles.css

Bugs/feature requests[edit]

Ask/request anything you'd like on the talk page.