Merge "ApiSandbox: Indicate when login is suppressed"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 20 Jun 2017 21:02:30 +0000 (21:02 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 20 Jun 2017 21:02:30 +0000 (21:02 +0000)
1  2 
languages/i18n/en.json
languages/i18n/qqq.json
resources/Resources.php
resources/src/mediawiki.special/mediawiki.special.apisandbox.js

diff --combined languages/i18n/en.json
        "anontalk": "Talk",
        "navigation": "Navigation",
        "and": "&#32;and",
 -      "qbfind": "Find",
 -      "qbbrowse": "Browse",
 -      "qbedit": "Edit",
 -      "qbpageoptions": "This page",
 -      "qbmyoptions": "My pages",
        "faq": "FAQ",
 -      "faqpage": "Project:FAQ",
        "sitetitle": "{{SITENAME}}",
        "sitesubtitle": "",
        "actions": "Actions",
        "edit-local": "Edit local description",
        "create": "Create",
        "create-local": "Add local description",
 -      "editthispage": "Edit this page",
 -      "create-this-page": "Create this page",
        "delete": "Delete",
 -      "deletethispage": "Delete this page",
 -      "undeletethispage": "Undelete this page",
        "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
        "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
        "protect": "Protect",
        "protect_change": "change",
 -      "protectthispage": "Protect this page",
        "unprotect": "Change protection",
 -      "unprotectthispage": "Change protection of this page",
        "newpage": "New page",
 -      "talkpage": "Discuss this page",
        "talkpagelinktext": "talk",
        "specialpage": "Special page",
        "personaltools": "Personal tools",
        "addsection": "+",
 -      "articlepage": "View content page",
        "talk": "Discussion",
        "views": "Views",
        "toolbox": "Tools",
        "tool-link-userrights": "Change {{GENDER:$1|user}} groups",
        "tool-link-userrights-readonly": "View {{GENDER:$1|user}} groups",
        "tool-link-emailuser": "Email this {{GENDER:$1|user}}",
 -      "userpage": "View user page",
 -      "projectpage": "View project page",
        "imagepage": "View file page",
        "mediawikipage": "View message page",
        "templatepage": "View template page",
        "action-deletechangetags": "delete tags from the database",
        "action-purge": "purge this page",
        "nchanges": "$1 {{PLURAL:$1|change|changes}}",
 +      "ntimes": "$1×",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|since last visit}}",
        "enhancedrc-history": "history",
        "recentchanges": "Recent changes",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Show",
        "rcfilters-activefilters": "Active filters",
 -      "rcfilters-quickfilters": "Quick links",
 -      "rcfilters-quickfilters-placeholder": "Save your favorite tool settings to re-use them later.",
 +      "rcfilters-quickfilters": "Saved filter settings",
 +      "rcfilters-quickfilters-placeholder-title": "No links saved yet",
 +      "rcfilters-quickfilters-placeholder-description": "To save your filter settings and reuse them later, click the bookmark icon in the Active Filter area, below.",
        "rcfilters-savedqueries-defaultlabel": "Saved filters",
        "rcfilters-savedqueries-rename": "Rename",
        "rcfilters-savedqueries-setdefault": "Set as default",
        "rcfilters-savedqueries-unsetdefault": "Remove as default",
        "rcfilters-savedqueries-remove": "Remove",
        "rcfilters-savedqueries-new-name-label": "Name",
 -      "rcfilters-savedqueries-apply-label": "Create quick link",
 +      "rcfilters-savedqueries-apply-label": "Save settings",
        "rcfilters-savedqueries-cancel-label": "Cancel",
 -      "rcfilters-savedqueries-add-new-title": "Save filters as a quick link",
 +      "rcfilters-savedqueries-add-new-title": "Save current filter settings",
        "rcfilters-restore-default-filters": "Restore default filters",
        "rcfilters-clear-all-filters": "Clear all filters",
        "rcfilters-search-placeholder": "Filter recent changes (browse or start typing)",
        "rcfilters-filter-watchlist-notwatched-description": "Everything except changes to your Watchlisted pages.",
        "rcfilters-filtergroup-changetype": "Type of change",
        "rcfilters-filter-pageedits-label": "Page edits",
 -      "rcfilters-filter-pageedits-description": "Edits to wiki content, discussions, category descriptions....",
 +      "rcfilters-filter-pageedits-description": "Edits to wiki content, discussions, category descriptions",
        "rcfilters-filter-newpages-label": "Page creations",
        "rcfilters-filter-newpages-description": "Edits that make new pages.",
        "rcfilters-filter-categorization-label": "Category changes",
        "rcfilters-filter-categorization-description": "Records of pages being added or removed from categories.",
        "rcfilters-filter-logactions-label": "Logged actions",
 -      "rcfilters-filter-logactions-description": "Administrative actions, account creations, page deletions, uploads....",
 -      "rcfilters-hideminor-conflicts-typeofchange-global": "The \"Minor edits\" filter conflicts with one or more Type of Change filters, because certain types of change cannot be designated as \"minor.\" The conflicting filters are marked in the Active Filters area, above.",
 -      "rcfilters-hideminor-conflicts-typeofchange": "Certain types of change cannot be designated as \"minor,\" so this filter conflicts with the following Type of Change filters: $1",
 -      "rcfilters-typeofchange-conflicts-hideminor": "This Type of Change filter conflicts with the \"Minor Edits\" filter. Certain types of change cannot be designated as \"minor.\"",
 +      "rcfilters-filter-logactions-description": "Administrative actions, account creations, page deletions, uploads",
 +      "rcfilters-hideminor-conflicts-typeofchange-global": "The \"Minor edits\" filter conflicts with one or more Type of change filters, because certain types of change cannot be designated as \"minor\". The conflicting filters are marked in the Active filters area, above.",
 +      "rcfilters-hideminor-conflicts-typeofchange": "Certain types of change cannot be designated as \"minor\", so this filter conflicts with the following Type of Change filters: $1",
 +      "rcfilters-typeofchange-conflicts-hideminor": "This Type of change filter conflicts with the \"Minor edits\" filter. Certain types of change cannot be designated as \"minor\".",
        "rcfilters-filtergroup-lastRevision": "Last revision",
        "rcfilters-filter-lastrevision-label": "Last revision",
        "rcfilters-filter-lastrevision-description": "The most recent change to a page.",
        "rcfilters-filter-previousrevision-label": "Earlier revisions",
        "rcfilters-filter-previousrevision-description": "All changes that are not the most recent change to a page.",
 +      "rcfilters-filter-excluded": "Excluded",
 +      "rcfilters-tag-prefix-namespace": ":$1",
 +      "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
 +      "rcfilters-tag-prefix-tags": "#$1",
 +      "rcfilters-view-tags": "Tags",
        "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfromreset": "Reset date selection",
        "rclistfrom": "Show new changes starting from $2, $3",
        "apisandbox-sending-request": "Sending API request...",
        "apisandbox-loading-results": "Receiving API results...",
        "apisandbox-results-error": "An error occurred while loading the API query response: $1.",
+       "apisandbox-results-login-suppressed": "This request has been processed as a logged-out user as it could be used to bypass browser Same-Origin security. Note that the API sandbox's automatic token handling does not work properly with such requests, please fill them in manually.",
        "apisandbox-request-selectformat-label": "Show request data as:",
        "apisandbox-request-format-url-label": "URL query string",
        "apisandbox-request-url-label": "Request URL:",
        "autoblocklist-submit": "Search",
        "autoblocklist-legend": "List autoblocks",
        "autoblocklist-localblocks": "Local {{PLURAL:$1|autoblock|autoblocks}}",
 +      "autoblocklist-total-autoblocks": "Total number of autoblocks: $1",
        "autoblocklist-empty": "The autoblock list is empty.",
        "autoblocklist-otherblocks": "Other {{PLURAL:$1|autoblock|autoblocks}}",
        "ipblocklist": "Blocked users",
        "newimages-legend": "Filter",
        "newimages-label": "Filename (or a part of it):",
        "newimages-user": "IP address or username",
 +      "newimages-newbies": "Show contributions of new accounts only",
        "newimages-showbots": "Show uploads by bots",
        "newimages-hidepatrolled": "Hide patrolled uploads",
 +      "newimages-mediatype": "Media type:",
        "noimages": "Nothing to see.",
        "gallery-slideshow-toggle": "Toggle thumbnails",
        "ilsubmit": "Search",
        "tags-create-reason": "Reason:",
        "tags-create-submit": "Create",
        "tags-create-no-name": "You must specify a tag name.",
 -      "tags-create-invalid-chars": "Tag names must not contain commas (<code>,</code>) or forward slashes (<code>/</code>).",
 +      "tags-create-invalid-chars": "Tag names must not contain commas (<code>,</code>), pipes (<code>|</code>), or forward slashes (<code>/</code>).",
        "tags-create-invalid-title-chars": "Tag names must not contain characters that cannot be used in page titles.",
        "tags-create-already-exists": "The tag \"$1\" already exists.",
        "tags-create-warnings-above": "The following {{PLURAL:$2|warning was|warnings were}} encountered when attempting to create the tag \"$1\":",
        "pageid": "page ID $1",
        "rawhtml-notallowed": "&lt;html&gt; tags cannot be used outside of normal pages.",
        "gotointerwiki": "Leaving {{SITENAME}}",
 -      "gotointerwiki-invalid": "The specified title was invalid.",
 -      "gotointerwiki-external": "You are about to leave {{SITENAME}} to visit [[$2]] which is a separate website.\n\n[$1 Click here to continue on to $1].",
 +      "gotointerwiki-invalid": "The specified title is invalid.",
 +      "gotointerwiki-external": "You are about to leave {{SITENAME}} to visit [[$2]], which is a separate website.\n\n'''[$1 Continue to $1]'''",
        "undelete-cantedit": "You cannot undelete this page as you are not allowed to edit this page.",
 -      "undelete-cantcreate": "You cannot undelete this page as there is no existing page with this name and you are not allowed to create this page."
 +      "undelete-cantcreate": "You cannot undelete this page as there is no existing page with this name and you are not allowed to create this page.",
 +      "pagedata-title": "Page data",
 +      "pagedata-text": "This page provides a data interface to pages. Please provide the page title in the URL, using subpage syntax.\n* Content negotiation applies based on you client's Accept header. This means that the page data will be provided in the format preferred by your client.",
 +      "pagedata-not-acceptable": "No matching format found. Supported MIME types: $1",
 +      "pagedata-bad-title": "Invalid title: $1."
  }
diff --combined languages/i18n/qqq.json
                        "Joao Xavier",
                        "Winstonyin",
                        "Jhertel",
 -                      "Stryn"
 +                      "Stryn",
 +                      "Mazab IZW",
 +                      "Mainframe98"
                ]
        },
        "sidebar": "{{notranslate}}",
        "anontalk": "Same as {{msg-mw|mytalk}} but used for non-logged-in users.\n{{Identical|Talk}}\n\nSee also:\n* {{msg-mw|Accesskey-pt-anontalk}}\n* {{msg-mw|Tooltip-pt-anontalk}}",
        "navigation": "This is shown as a section header in the sidebar of most skins.\n\n{{Identical|Navigation}}",
        "and": "The translation for \"and\" appears in the [[Special:Version]] page, between the last two items of a list. If a comma is needed, add it at the beginning without a gap between it and the \"&\". &amp;#32; is a blank space, one character long. Please leave it as it is.\n\nThis can also appear in the credits page if the credits feature is enabled,for example [{{canonicalurl:Support|action=credits}} the credits of the support page]. (To view any credits page type <nowiki>&action=credits</nowiki> at the end of any URL in the address bar.)\n{{Identical|And}}",
 -      "qbfind": "Alternative for \"search\" as used in Cologne Blue skin.\n{{Identical|Find}}",
 -      "qbbrowse": "Heading in sidebar menu in CologneBlue skin as seen in [[File:CologneBlue sidebar qqx.png]]\n{{Identical|Browse}}",
 -      "qbedit": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|Edit}}",
 -      "qbpageoptions": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|This page}}",
 -      "qbmyoptions": "Heading in the Cologne Blue skin user menu containing links to user (talk) page, preferences, watchlist, etc.\n{{Identical|My pages}}",
        "faq": "FAQ is short for ''frequently asked questions''.\n{{Identical|FAQ}}",
 -      "faqpage": "{{doc-important|Do not translate <code>Project:</code> part.}}\n\"FAQ\" is short for \"frequently asked questions\".\n\nThis page is only linked in CologneBlue (an old skin), not in Monobook or Vector.",
        "sitetitle": "{{Ignore}}",
        "sitesubtitle": "{{Ignore}}",
        "actions": "{{Identical|Action}}",
        "edit-local": "The text on the tab going to the edit form for the local description page of a file from a foreign file repository (e.g. Wikimedia Commons). Should be in the infinitive mood.\n\nSee also:\n* {{msg-mw|Edit}}\n* {{msg-mw|Create-local}}",
        "create": "The text on the tab of the edit form on unexisting pages starts editing them. Should be in the infinitive mood.\n\n{{Identical|Create}}",
        "create-local": "The text on the tab going to the creation form for the (not yet existing) local description page of a file from a foreign file repository (e.g. Wikimedia Commons). Should be in the infinitive mood.\n\nSee also:\n* {{msg-mw|Create}}\n* {{msg-mw|Edit-local}}",
 -      "editthispage": "This is the \"edit\" link as used in the Cologne Blue skin, at the bottom of the page.\n\nSee {{msg-mw|Create-this-page}} for when the page does not exist.\n{{Identical|Edit this page}}",
 -      "create-this-page": "In the Cologne Blue skin this is the text for the link leading to the edit form on pages that have not yet been created, at the bottom of the page. See {{msg-mw|editthispage}} for when the page already exists.\n{{Identical|Createpage}}",
        "delete": "Name of the Delete tab shown for admins. Should be in the infinitive mood.\n\nSee also:\n* {{msg-mw|Delete}}\n* {{msg-mw|Accesskey-ca-delete}}\n* {{msg-mw|Tooltip-ca-delete}}\n{{Identical|Delete}}",
 -      "deletethispage": "In the Cologne Blue skin this is the text for link to delete the page in admin view, at the bottom of the page.\n{{Identical|Delete this page}}",
 -      "undeletethispage": "In the Cologne Blue skin this is the text for link to undelete the page in admin view, at the bottom of the page.",
        "undelete_short": "It is tab label. It's really can be named ''nstab-undelete''. Parameters:\n* $1 - number of edits",
        "viewdeleted_short": "Tab label for the undelete button when the user has permission to view the deleted history but not undelete.\n\nParameters:\n* $1 - number of edits",
        "protect": "Name of protect tab displayed for admins. Should be in the infinitive mood.\n\nSee also:\n* {{msg-mw|Protect}}\n* {{msg-mw|Accesskey-ca-protect}}\n* {{msg-mw|Tooltip-ca-protect}}\n{{Identical|Protect}}",
        "protect_change": "Text on links for each entry in [[Special:ProtectedPages]] to change the protection of pages (only displayed to admins).\n{{Identical|Change}}",
 -      "protectthispage": "In this Cologne Blue skin this is the text for link to protect the page in admin view, at the bottom of the page.\n{{Identical|Protect this page}}",
        "unprotect": "Name of unprotect tab displayed for admins\n\nSee also:\n* {{msg-mw|Unprotect}}\n* {{msg-mw|Accesskey-ca-unprotect}}\n* {{msg-mw|Tooltip-ca-unprotect}}\n{{Identical|Change protection}}",
 -      "unprotectthispage": "In this Cologne Blue skin this is the anchor text for the link to unprotect the page in admin view, at the bottom of the page.\n{{Identical|Unprotect this page}}",
        "newpage": "{{Identical|New page}}",
 -      "talkpage": "In the Cologne Blue skin this is the text for link to discuss the page, at the bottom of the page.",
        "talkpagelinktext": "Used as name of links going to talk page in some places, like in [[Special:RecentChanges]], [[Special:Allmessages]], [[Special:Logs]], and [[Special:Watchlist/edit]].\n\n{{Identical|Talk}}",
        "specialpage": "{{Identical|Special page}}",
        "personaltools": "Heading for a group of links to your user page, talk page, preferences, watchlist, and contributions. This heading is visible in the sidebar in some skins. For an example, see [{{canonicalurl:Main_Page|useskin=simple}} Main Page using simple skin].",
        "addsection": "{{notranslate}}\nText of the new section tab (the one next to the \"edit\" tab on non-Vector skins).\n\nSee also:\n* {{msg-mw|Addsection}}\n* {{msg-mw|Accesskey-ca-addsection}}\n* {{msg-mw|Tooltip-ca-addsection}}",
 -      "articlepage": "'Content page' is used for NS_MAIN and any other non-standard namespaces. Only used in the Cologne Blue skin in the bottomLinks part.\n\n{{Identical|Content page}}",
        "talk": "Used as display name for the tab to all {{msg-mw|Talk}} pages. These pages accompany all content pages and can be used for discussing the content page. Example: [[Talk:Example]].\n\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}\n{{Identical|Discussion}}",
        "views": "Subtitle for the list of available views, for the current page. In \"monobook\" skin the list of views are shown as tabs, so this sub-title is not shown. For an example, see [{{canonicalurl:Main_Page|useskin=simple}} Main Page using simple skin].\n\n'''Note:''' This is \"views\" as in \"appearances\"/\"representations\", '''not''' as in \"visits\"/\"accesses\".\n{{Identical|View}}",
        "toolbox": "The title of the toolbox below the search menu.\n{{Identical|Tool}}",
        "tool-link-userrights": "Link to [[Special:UserRights]] (user rights management) in the sidebar toolbox, shown if the current user is allowed to change given user's groups.\n\nParameters:\n* $1 - Name of user for the user group management (usable for GENDER)",
        "tool-link-userrights-readonly": "Link to [[Special:UserRights]] (user rights management) in the sidebar toolbox, shown if the current user is '''not''' allowed to change given user's groups.\n\nParameters:\n* $1 - Name of user for the user group management (usable for GENDER)",
        "tool-link-emailuser": "Link to [[Special:EmailUser]] (email user tool) in the sidebar toolbox.\n\nParameters:\n* $1 - Name of user who would receive the email\n\nSee also:\n* {{msg-mw|Emailuser-title-target}}",
 -      "userpage": "Used in user talk pages as the text of the link to the user page, with the Cologne Blue skin.",
 -      "projectpage": "Used as link text in Talk page of project page with the Cologne Blue skin.",
        "imagepage": "Used as link text in Talk page of file page.",
        "mediawikipage": "Used as link text in Talk page of MediaWiki message page.",
        "templatepage": "Used as link text in Talk page of template page.",
        "action-deletechangetags": "{{doc-action|deletechangetags}}",
        "action-purge": "{{doc-action|purge}}",
        "nchanges": "Appears on enhanced watchlist and recent changes when page has more than one change on given date, linking to a diff of the changes.\n\nParameters:\n* $1 - the number of changes on that day (2 or more)\nThree messages are shown side-by-side: ({{msg-mw|Nchanges}} | {{msg-mw|Enhancedrc-since-last-visit}} | {{msg-mw|Enhancedrc-history}}).",
 +      "ntimes": "Used to indicate how many times an event occurred (eg. on enhanced recent change when a user did more than one change to the page). Parameters:\n* $1 - number (integer)",
        "enhancedrc-since-last-visit": "Appears on enhanced watchlist and recent changes when page has more than one change on given date and at least one that the user hasn't seen yet, linking to a diff of the unviewed changes.\n\nParameters:\n* $1 - the number of unviewed changes (1 or more)\nThree messages are shown side-by-side: ({{msg-mw|nchanges}} | {{msg-mw|enhancedrc-since-last-visit}} | {{msg-mw|enhancedrc-history}}).",
        "enhancedrc-history": "Appears on enhanced watchlist and recent changes when page has more than one change on given date, linking to its history.\n\nThis is the same as {{msg-mw|hist}}, but not abbreviated.\n\nThree messages are shown side-by-side: ({{msg-mw|nchanges}} | {{msg-mw|enhancedrc-since-last-visit}} | {{msg-mw|enhancedrc-history}}).\n{{Identical|History}}",
        "recentchanges": "The text of the link in sidebar going to the special page [[Special:RecentChanges]]. Also the page title of that special page.\n\nSee also:\n* {{msg-mw|Recentchanges}}\n* {{msg-mw|Accesskey-n-recentchanges}}\n* {{msg-mw|Tooltip-n-recentchanges}}\n{{Identical|Recent changes}}",
        "recentchanges-legend-plusminus": "{{optional}}\nA plus/minus sign with a number for the legend.",
        "recentchanges-submit": "Label for submit button in [[Special:RecentChanges]]\n{{Identical|Show}}",
        "rcfilters-activefilters": "Title for the filters selection showing the active filters.",
 -      "rcfilters-quickfilters": "Label for the button that opens the quick filters menu in [[Special:RecentChanges]]",
 -      "rcfilters-quickfilters-placeholder": "Text shown in the quick filters menu on [[Special:RecentChanges]] if the user has not saved any quick filters.",
 +      "rcfilters-quickfilters": "Label for the button that opens the saved filter settings menu in [[Special:RecentChanges]]",
 +      "rcfilters-quickfilters-placeholder-title": "Title for the text shown in the quick filters menu on [[Special:RecentChanges]] if the user has not saved any quick filters.",
 +      "rcfilters-quickfilters-placeholder-description": "Description for the text shown in the quick filters menu on [[Special:RecentChanges]] if the user has not saved any quick filters.",
        "rcfilters-savedqueries-defaultlabel": "Default name for saving a new set of quick filters [[Special:RecentChanges]]",
        "rcfilters-savedqueries-rename": "Label for the menu option that edits a quick filter in [[Special:RecentChanges]]\n{{Identical|Rename}}",
        "rcfilters-savedqueries-setdefault": "Label for the menu option that sets a quick filter as default in [[Special:RecentChanges]]",
        "rcfilters-savedqueries-unsetdefault": "Label for the menu option that unsets a quick filter as default in [[Special:RecentChanges]]",
        "rcfilters-savedqueries-remove": "Label for the menu option that removes a quick filter as default in [[Special:RecentChanges]]\n{{Identical|Remove}}",
        "rcfilters-savedqueries-new-name-label": "Label for the input that holds the name of the new saved filters in [[Special:RecentChanges]]\n{{Identical|Name}}",
 -      "rcfilters-savedqueries-apply-label": "Label for the button to apply saving a new quick link in [[Special:RecentChanges]]",
 +      "rcfilters-savedqueries-apply-label": "Label for the button to apply saving a new filter setting in [[Special:RecentChanges]]",
        "rcfilters-savedqueries-cancel-label": "Label for the button to cancel the saving of a new quick link in [[Special:RecentChanges]]\n{{Identical|Cancel}}",
        "rcfilters-savedqueries-add-new-title": "Title for the popup to add new quick link in [[Special:RecentChanges]]",
        "rcfilters-restore-default-filters": "Label for the button that resets filters to defaults",
        "rcfilters-filter-unregistered-label": "Label for the filter for showing edits made by logged-out users.",
        "rcfilters-filter-unregistered-description": "Description for the filter for showing edits made by logged-out users.",
        "rcfilters-filter-unregistered-conflicts-user-experience-level": "Tooltip shown when hovering over a Unregistered filter tag, when a User Experience Level filter is also selected.\n\n\"Unregistered\" is {{msg-mw|Rcfilters-filter-unregistered-label}}.\n\n\"Experience\" is based on {{msg-mw|Rcfilters-filtergroup-userExpLevel}}.\n\nThis indicates that no results will be shown, because users matched by the User Experience Level groups are never unregistered.  Parameters:\n* $1 - Comma-separated string of selected User Experience Level filters, e.g. \"Newcomer, Experienced\"\n* $2 - Count of selected User Experience Level filters, for PLURAL",
 -      "rcfilters-filtergroup-authorship": "Title for the filter group for edit authorship. This filter group allows the user to choose between \"Your own edits\" and \"Edits by others\". More info: https://phabricator.wikimedia.org/T149859\n\n{{doc-important|This is another typical example of ambiguity in the English language. Only the documentation will reveal that this message means \"(filter by) authorship of these edits\", not \"edit the authorship\". That is, \"edit\" is a modifying noun, not a verb.}}",
 +      "rcfilters-filtergroup-authorship": "Title for the filter group for edit authorship. This filter group allows the user to choose between \"Your own edits\" and \"Edits by others\". More info: https://phabricator.wikimedia.org/T149859",
        "rcfilters-filter-editsbyself-label": "Label for the filter for showing edits made by the current user.",
        "rcfilters-filter-editsbyself-description": "Description for the filter for showing edits made by the current user.",
        "rcfilters-filter-editsbyother-label": "Label for the filter for showing edits made by anyone other than the current user.",
        "rcfilters-filter-lastrevision-description": "Description for the filter for showing changes on last revision of a page.",
        "rcfilters-filter-previousrevision-label": "Title for the filter for showing changes on previous revisions of a page.",
        "rcfilters-filter-previousrevision-description": "Description for the filter for showing changes on previous revisions of a page.",
 +      "rcfilters-filter-excluded": "Label for a menu item in [[Special:RecentChanges]] noting that the item is being excluded from the results.",
 +      "rcfilters-tag-prefix-namespace": "Prefix for the namespace tags in [[Special:RecentChanges]]. Namespace tags use a colon (:) as prefix. Please keep this format.\n\nParameters:\n* $1 - Filter name.",
 +      "rcfilters-tag-prefix-namespace-inverted": "Prefix for the namespace inverted tags in [[Special:RecentChanges]]. Namespace tags use a colon (:) as prefix. Please keep this format.\n\nParameters:\n* $1 - Filter name.",
 +      "rcfilters-tag-prefix-tags": "Prefix for the edit tags in [[Special:RecentChanges]]. Edit tags use a hash (#) as prefix. Please keep this format.\n\nParameters:\n* $1 - Tag display name.",
 +      "rcfilters-view-tags": "Title for the tags view in [[Special:RecentChanges]]",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.\n\nThe corresponding message is {{msg-mw|Rclistfrom}}.\n\nParameters:\n* $1 - the maximum number of changes that are displayed\n* $2 - (Optional) a date and time\n* $3 - a date\n* $4 - a time\n* $5 - Number of changes are displayed, for use with PLURAL",
        "rclistfromreset": "Used on [[Special:RecentChanges]] to reset a selection of a certain date range.",
        "rclistfrom": "Used on [[Special:RecentChanges]]. Parameters:\n* $1 - (Currently not use) date and time. The date and the time adds to the rclistfrom description.\n* $2 - time. The time adds to the rclistfrom link description (with split of date and time).\n* $3 - date. The date adds to the rclistfrom link description (with split of date and time).\n\nThe corresponding message is {{msg-mw|Rcnotefrom}}.",
        "unusedcategoriestext": "Used as page header in [[Special:UnusedCategories]].",
        "notargettitle": "Used as title of error message.\n\nSee also:\n* {{msg-mw|Notargettitle|title}}\n* {{msg-mw|Notargettext|text}}",
        "notargettext": "Used as error message in [[Special:MovePage]].\n\nSee also:\n* {{msg-mw|Notargettitle|title}}\n* {{msg-mw|Notargettext|text}}",
 -      "nopagetitle": "Used as title on special pages like [[Special:MovePage]] (when the oldtitle does not exist) or [[Special:PermaLink]].\n\nThe text is {{msg-mw|nopagetext}}.\n\nSee also:\n* {{msg-mw|Nopagetitle|title}}\n* {{msg-mw|Nopagetext|text}}",
 +      "nopagetitle": "Used as title on special pages like [[Special:MovePage]] (when the oldtitle does not exist), [[Special:Diff]] or [[Special:PermaLink]].\n\nThe text is {{msg-mw|nopagetext}}.\n\nSee also:\n* {{msg-mw|Nopagetitle|title}}\n* {{msg-mw|Nopagetext|text}}",
        "nopagetext": "Used as text on special pages like [[Special:MovePage]] (when the oldtitle does not exist) or [[Special:PermaLink]].\n\nThe title is {{msg-mw|nopagetitle}}.\n\nSee also:\n* {{msg-mw|Nopagetitle|title}}\n* {{msg-mw|Nopagetext|text}}",
        "pager-newer-n": "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the second argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.\n{{Identical|Newer}}",
        "pager-older-n": "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the first argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
        "apisandbox-sending-request": "JavaScript message displayed while the request is being sent.",
        "apisandbox-loading-results": "JavaScript message displayed while the response is being read.",
        "apisandbox-results-error": "Displayed as an error message from JavaScript when the request failed.\n\nParameters:\n* $1 - Error message",
+       "apisandbox-results-login-suppressed": "Displayed as a warning when a request was processed as a logged-out user to avoid Same-Origin security bypass.",
        "apisandbox-request-selectformat-label": "Label for the format selector on the results page.",
        "apisandbox-request-format-url-label": "Label for the menu item to select URL format.\n\nSee also:\n* {{msg-mw|apisandbox-request-selectformat-label}}\n* {{msg-mw|apisandbox-request-url-label}}",
        "apisandbox-request-url-label": "Label for the text field displaying the URL used to make this request.\n\nSee also:\n* {{msg-mw|apisandbox-request-format-url-label}}",
        "autoblocklist-submit": "Used as Submit button text in the form on [[Special:AutoblockList]].\n\nSee also:\n* {{msg-mw|Ipblocklist-legend}}\n* {{msg-mw|Autoblocklist-submit}}\n{{Identical|Search}}",
        "autoblocklist-legend": "Used as legend of the form in [[Special:AutoblockList]].\n\nSee also:\n* {{msg-mw|Autoblocklist-legend}}\n* {{msg-mw|Autoblocklist-submit}}",
        "autoblocklist-localblocks": "[[File:Special AutoBlockList new.png|thumb|Example]]\nUsed on [[Special:AutoblockList]] as header when global autoblocks exists too.",
 +      "autoblocklist-total-autoblocks": "Shows the total number of active autoblocks on [[Special:AutoblockList]]. Parameters:\n* $1 - number of autoblocks",
        "autoblocklist-empty": "Used in [[Special:AutoblockList]].",
        "autoblocklist-otherblocks": "[[File:Special AutoBlockList new.png|thumb|Example]]\nUsed on [[Special:AutoblockList]] as header for other blocks, i.e. from GlobalBlocking or TorBlocks.\n\nParameters:\n* $1 - number of blocks",
        "ipblocklist": "Title of [[Special:Ipblocklist]].",
        "pageinfo-category-pages": "See also:\n* {{msg-mw|Pageinfo-category-subcats}}\n* {{msg-mw|Pageinfo-category-files}}\n{{Identical|Number of pages}}",
        "pageinfo-category-subcats": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-files}}",
        "pageinfo-category-files": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-subcats}}",
 -      "pageinfo-user-id": "The numeric ID for a user",
 +      "pageinfo-user-id": "The numeric ID for a user\n{{Identical|User ID}}",
        "markaspatrolleddiff": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolledtext}}\n{{Identical|Mark as patrolled}}",
        "markaspatrolledlink": "{{notranslate}}\nParameters:\n* $1 - link which has text {{msg-mw|Markaspatrolledtext}}",
        "markaspatrolledtext": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolleddiff}}",
        "newimages-legend": "Caption of the fieldset for the filter on [[Special:NewImages]]\n\n{{Identical|Filter}}",
        "newimages-label": "Caption of the filter editbox on [[Special:NewImages]]",
        "newimages-user": "Caption of the username/IP address editbox on [[Special:NewImages]]",
 +      "newimages-newbies": "Used as label for a checkbox. When checked, [[Special:NewImages]] will only display uploads by new users.",
        "newimages-showbots": "Used as label for a checkbox. When checked, [[Special:NewImages]] will also display uploads by users in the bots group.",
        "newimages-hidepatrolled": "Used as label for a checkbox. When checked, [[Special:NewImages]] will not display patrolled uploads.\n\nCf. {{msg-mw|tog-hidepatrolled}} and {{msg-mw|apihelp-feedrecentchanges-param-hidepatrolled}}.",
 +      "newimages-mediatype": "Used as label for a multiselect where users can select the media types to display.",
        "noimages": "This is shown on the special page [[Special:NewImages]], when there aren't any recently uploaded files.",
        "gallery-slideshow-toggle": "Tooltip for the icon that toggles thumbnails on a slideshow  gallery.",
        "ilsubmit": "Search button in [[Special:MIMESearch]].\n\nStrings on the page:\n* {{msg-mw|Mimesearch|page title, legend of input form, link in special pages}}\n* {{msg-mw|Mimesearch-summary|page summary}}\n* {{msg-mw|Mimetype|label for input box}}\n* {{msg-mw|Ilsubmit|search button}}\n\nCheck [[mw:Manual:MIME_type_detection]] for MIME types.\n\n{{Identical|Search}}",
        "action-pagelang": "{{Doc-action|pagelang}}",
        "log-name-pagelang": "Display entry for log name for changes in page language in Special:Log.",
        "log-description-pagelang": "Display description for log name for changes in page language in Special:Log.",
 -      "logentry-pagelang-pagelang": "{{Logentry}}\nAdditional parameters:\n* $4 - old language code, or \"[def]\" (hard-coded)\n* $5 - new language code, or \"[def]\" (hard-coded)",
 +      "logentry-pagelang-pagelang": "[[mw:Page language]] explains what this feature is about.\n----\n{{Logentry}}\nAdditional parameters:\n* $4 - old language code, or \"[def]\" (hard-coded)\n* $5 - new language code, or \"[def]\" (hard-coded)",
        "default-skin-not-found": "Message shown when the default skin for this MediaWiki installation can not be found.\n\nParameters:\n* $1: skin identifier for the default skin\n* $2: list of installed skins, composed using {{msg-mw|default-skin-not-found-row-enabled}} and {{msg-mw|default-skin-not-found-row-disabled}}\n* $3: code snippet to use to enable installed skins\n* $4: Number of items in list $2\n* $5: Number of lines in $3, one per skin",
        "default-skin-not-found-no-skins": "Message shown when the default skin for this MediaWiki installation can not be found and the installation has no skins at all.\n\nParameters:\n* $1: name of the default skin",
        "default-skin-not-found-row-enabled": "One row of the list of installed skins shown as a part of the following message (for an enabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-disabled}}",
        "mw-widgets-categoryselector-add-category-placeholder": "Placeholder displayed in the category selector widget after the capsules of already added categories.",
        "mw-widgets-usersmultiselect-placeholder": "Placeholder displayed in the input field, where new usernames are entered",
        "date-range-from": "Label for an input field that specifies the start date of a date range filter.",
 -      "date-range-to": " Label for an input field that specifies the end date of a date range filter.",
 +      "date-range-to": "Label for an input field that specifies the end date of a date range filter.",
        "sessionmanager-tie": "Used as an error message when multiple session sources are tied in priority.\n\nParameters:\n* $1 - List of dession type descriptions, from messages like {{msg-mw|sessionprovider-mediawiki-session-cookiesessionprovider}}.",
        "sessionprovider-generic": "Used to create a generic session type description when one isn't provided via the proper message. Should be phrased to make sense when added to a message such as {{msg-mw|cannotloginnow-text}}.\n\nParameters:\n* $1 - PHP classname.",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "Description of the sessions provided by the CookieSessionProvider class, which use HTTP cookies. Should be phrased to make sense when added to a message such as {{msg-mw|cannotloginnow-text}}.",
        "revid": "Used to format a revision ID number in text. Parameters:\n* $1 - Revision ID number.\n{{Identical|Revision}}",
        "pageid": "Used to format a page ID number in text. Parameters:\n* $1 - Page ID number.",
        "rawhtml-notallowed": "Error message given when $wgRawHtml = true; is set and a user uses an &lt;html&gt; tag in a system message or somewhere other than a normal page.",
 -      "gotointerwiki": "{{doc-special|GoToInterwiki}}\n\nSpecial:GoToInterwiki is a warning page displayed before redirecting users to external interwiki links. Its triggered by people going to something like [[Special:Search/google:foo]].",
 +      "gotointerwiki": "{{doc-special|GoToInterwiki}}\n\nSpecial:GoToInterwiki is a warning page displayed before redirecting users to external interwiki links. Its triggered by people going to something like [[Special:Search/google:foo]].\n{{Identical|Leaving}}",
        "gotointerwiki-invalid": "Message shown on Special:GoToInterwiki if given an invalid title.",
        "gotointerwiki-external": "Message shown on Special:GoToInterwiki if given a external interwiki link (e.g. [[Special:GoToInterwiki/Google:Foo]]). $1 is the full url the user is trying to get to. $2 is the text of the interwiki link (e.g. \"Google:foo\").",
        "undelete-cantedit": "Shown if the user tries to undelete a page that they cannot edit",
 -      "undelete-cantcreate": "Shown if the user tries to undelete a page which currently does not exist, and they are not allowed to create it. This could for example happen on a wiki with custom protection levels where the page name has been create-protected and the user has the right to undelete but not the right to edit protected pages."
 +      "undelete-cantcreate": "Shown if the user tries to undelete a page which currently does not exist, and they are not allowed to create it. This could for example happen on a wiki with custom protection levels where the page name has been create-protected and the user has the right to undelete but not the right to edit protected pages.",
 +      "pagedata-title": "Title shown on the special page when a form or text is presented",
 +      "pagedata-text": "Error shown when none of the formats acceptable to the client is supported (HTTP error 406). Parameters:\n* $1 - the list of supported MIME types",
 +      "pagedata-not-acceptable": "No matching format found. Supported MIME types: $1",
 +      "pagedata-bad-title": "Error shown when the requested title is invalid. Parameters:\n* $1: the malformed ID"
  }
diff --combined resources/Resources.php
@@@ -1028,7 -1028,6 +1028,7 @@@ return 
                'styles' => 'resources/src/mediawiki/mediawiki.filewarning.less',
                'dependencies' => [
                        'oojs-ui-core',
 +                      'oojs-ui.styles.icons-alerts',
                ],
        ],
        'mediawiki.ForeignApi' => [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.hlist' => [
 -              'styles' => 'resources/src/mediawiki/mediawiki.hlist.css',
 +              'skinStyles' => [
 +                      'default' => 'resources/src/mediawiki/mediawiki.hlist.css',
 +              ],
        ],
        'mediawiki.htmlform' => [
                'scripts' => [
                ],
                'scripts' => 'resources/src/mediawiki/mediawiki.notification.js',
                'dependencies' => [
 -                      'mediawiki.page.startup',
                        'mediawiki.util',
                ],
                'targets' => [ 'desktop', 'mobile' ],
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.css',
                'dependencies' => [
                        'mediawiki.action.edit.styles',
 +                      'jquery.accessKeyLabel',
                        'jquery.textSelection',
                        'jquery.byteLimit',
                        'mediawiki.api',
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js',
                'dependencies' => [
                        'mediawiki.util',
 -                      'mediawiki.page.startup',
                        'user.options',
                ],
        ],
                        'oojs',
                        'oojs-ui-core',
                        'oojs-ui-widgets',
 -                      'oojs-ui.styles.icons-media'
 +                      'oojs-ui.styles.icons-media',
 +                      'oojs-ui.styles.icons-movement'
                ],
                'messages' => [
                        'gallery-slideshow-toggle'
        ],
        'mediawiki.page.startup' => [
                'scripts' => 'resources/src/mediawiki/page/startup.js',
 -              'dependencies' => 'mediawiki.util',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.page.patrol.ajax' => [
                'scripts' => 'resources/src/mediawiki/page/patrol.ajax.js',
                'dependencies' => [
 -                      'mediawiki.page.startup',
                        'mediawiki.api',
                        'mediawiki.util',
                        'mediawiki.Title',
                        'resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js',
                        'resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ChangesListViewModel.js',
                        'resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js',
 +                      'resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js',
                ],
                'dependencies' => [
                        'oojs',
 +                      'mediawiki.api',
 +                      'mediawiki.api.options',
                        'mediawiki.Uri',
                        'mediawiki.user',
                ],
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.TagItemWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagItemWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js',
 -                      'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FloatingMenuSelectWidget.js',
 +                      'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuSectionOptionWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.TagItemWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuHeaderWidget.less',
 -                      'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FloatingMenuSelectWidget.less',
 +                      'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.MenuSelectWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.HighlightColorPickerWidget.less',
                        'monobook' => [
                                'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.Overlay.monobook.less',
                                'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.CapsuleItemWidget.monobook.less',
 +                              'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuOptionWidget.monobook.less',
                        ],
                ],
                'messages' => [
                        'rcfilters-activefilters',
                        'rcfilters-quickfilters',
 -                      'rcfilters-quickfilters-placeholder',
 +                      'rcfilters-quickfilters-placeholder-title',
 +                      'rcfilters-quickfilters-placeholder-description',
                        'rcfilters-savedqueries-defaultlabel',
                        'rcfilters-savedqueries-rename',
                        'rcfilters-savedqueries-setdefault',
                        'rcfilters-noresults-conflict',
                        'rcfilters-state-message-subset',
                        'rcfilters-state-message-fullcoverage',
 +                      'rcfilters-filter-excluded',
 +                      'rcfilters-tag-prefix-namespace',
 +                      'rcfilters-tag-prefix-namespace-inverted',
 +                      'rcfilters-tag-prefix-tags',
 +                      'rcfilters-view-tags',
 +                      'blanknamespace',
 +                      'namespaces',
 +                      'invert',
                        'recentchanges-noresult',
                        'quotation-marks',
                ],
                        'mediawiki.language',
                        'mediawiki.user',
                        'mediawiki.rcfilters.filters.dm',
 +                      'oojs-ui.styles.icons-content',
                        'oojs-ui.styles.icons-moderation',
                        'oojs-ui.styles.icons-editing-core',
                        'oojs-ui.styles.icons-editing-styling',
                        'oojs-ui.styles.icons-interactions',
 +                      'oojs-ui.styles.icons-content',
                ],
        ],
        'mediawiki.special' => [
                        'mediawiki.jqueryMsg',
                        'mediawiki.util',
                        'oojs-ui',
 +                      'oojs-ui.styles.icons-content',
 +                      'oojs-ui.styles.icons-editing-advanced',
 +                      'oojs-ui.styles.icons-interactions',
 +                      'oojs-ui.styles.icons-moderation',
                        'mediawiki.widgets.datetime',
                ],
                'messages' => [
                        'apisandbox-sending-request',
                        'apisandbox-loading-results',
                        'apisandbox-results-error',
+                       'apisandbox-results-login-suppressed',
                        'apisandbox-request-selectformat-label',
                        'apisandbox-request-format-url-label',
                        'apisandbox-request-url-label',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css',
                'targets' => [ 'desktop', 'mobile' ],
        ],
 +      'mediawiki.special.changeslist.enhanced' => [
 +              'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
 +      ],
        'mediawiki.special.changeslist.legend' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css',
                'targets' => [ 'desktop', 'mobile' ],
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
 -      'mediawiki.special.changeslist.enhanced' => [
 -              'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
 -      ],
        'mediawiki.special.changeslist.visitedstatus' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.visitedstatus.js',
        ],
        'mediawiki.special.comparepages.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.comparepages.styles.less',
        ],
 +      'mediawiki.special.contributions' => [
 +              'scripts' => 'resources/src/mediawiki.special/mediawiki.special.contributions.js',
 +              'dependencies' => [
 +                      'mediawiki.widgets.DateInputWidget',
 +                      'mediawiki.jqueryMsg',
 +              ]
 +      ],
        'mediawiki.special.edittags' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.edittags.js',
                'dependencies' => [
        'mediawiki.special.movePage.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css',
        ],
 +      'mediawiki.special.newFiles' => [
 +              'scripts' => 'resources/src/mediawiki.special/mediawiki.special.newFiles.js',
 +              'dependencies' => [
 +                      'mediawiki.widgets.datetime',
 +              ],
 +      ],
        'mediawiki.special.pageLanguage' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
                'dependencies' => [
                        'mediawiki.notification.convertmessagebox',
                ],
        ],
 -      'mediawiki.special.userrights' => [
 -              'styles' => 'resources/src/mediawiki.special/mediawiki.special.userrights.css',
 -              'scripts' => 'resources/src/mediawiki.special/mediawiki.special.userrights.js',
 -              'dependencies' => [
 -                      'mediawiki.notification.convertmessagebox',
 -              ],
 -      ],
        'mediawiki.special.preferences.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.styles.css',
        ],
                        'powersearch-togglenone',
                ],
        ],
 -      'mediawiki.special.search.styles' => [
 -              'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.styles.css',
 -              'targets' => [ 'desktop', 'mobile' ],
 -      ],
 -      'mediawiki.special.search.interwikiwidget.styles' => [
 -              'styles' => 'resources/src/mediawiki.special/'
 -                      . 'mediawiki.special.search.interwikiwidget.styles.less',
 -              'targets' => [ 'desktop', 'mobile' ]
 -      ],
        'mediawiki.special.search.commonsInterwikiWidget' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js',
                'dependencies' => [
 +                      'mediawiki.api',
                        'mediawiki.Uri',
                        'mediawiki.jqueryMsg'
                ],
                        'searchprofile-images'
                ],
        ],
 +      'mediawiki.special.search.interwikiwidget.styles' => [
 +              'styles' => 'resources/src/mediawiki.special/'
 +                      . 'mediawiki.special.search.interwikiwidget.styles.less',
 +              'targets' => [ 'desktop', 'mobile' ]
 +      ],
 +      'mediawiki.special.search.styles' => [
 +              'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.styles.css',
 +              'targets' => [ 'desktop', 'mobile' ],
 +      ],
        'mediawiki.special.undelete' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.undelete.js',
        ],
 +      'mediawiki.special.unwatchedPages' => [
 +              'scripts' => 'resources/src/mediawiki.special/mediawiki.special.unwatchedPages.js',
 +              'styles' => 'resources/src/mediawiki.special/mediawiki.special.unwatchedPages.css',
 +              'messages' => [
 +                      'addedwatchtext-short',
 +                      'removedwatchtext-short',
 +                      'unwatch',
 +                      'unwatching',
 +                      'watch',
 +                      'watcherrortext',
 +                      'watching',
 +              ],
 +              'dependencies' => [
 +                      'mediawiki.api',
 +                      'mediawiki.api.watch',
 +                      'mediawiki.notify',
 +                      'mediawiki.Title',
 +                      'mediawiki.util',
 +              ],
 +      ],
        'mediawiki.special.upload' => [
                'templates' => [
                        'thumbnail.html' => 'resources/src/mediawiki.special/templates/thumbnail.html',
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.common.css',
                ],
        ],
 -      'mediawiki.special.userlogin.signup.styles' => [
 -              'styles' => [
 -                      'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.css',
 -              ],
 -      ],
        'mediawiki.special.userlogin.login.styles' => [
                'styles' => [
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css',
                        'mediawiki.htmlform.checker',
                ],
        ],
 -      'mediawiki.special.unwatchedPages' => [
 -              'scripts' => 'resources/src/mediawiki.special/mediawiki.special.unwatchedPages.js',
 -              'styles' => 'resources/src/mediawiki.special/mediawiki.special.unwatchedPages.css',
 -              'messages' => [
 -                      'addedwatchtext-short',
 -                      'removedwatchtext-short',
 -                      'unwatch',
 -                      'unwatching',
 -                      'watch',
 -                      'watcherrortext',
 -                      'watching',
 +      'mediawiki.special.userlogin.signup.styles' => [
 +              'styles' => [
 +                      'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.css',
                ],
 +      ],
 +      'mediawiki.special.userrights' => [
 +              'styles' => 'resources/src/mediawiki.special/mediawiki.special.userrights.css',
 +              'scripts' => 'resources/src/mediawiki.special/mediawiki.special.userrights.js',
                'dependencies' => [
 -                      'mediawiki.api',
 -                      'mediawiki.api.watch',
 -                      'mediawiki.notify',
 -                      'mediawiki.Title',
 -                      'mediawiki.util',
 +                      'mediawiki.notification.convertmessagebox',
                ],
        ],
        'mediawiki.special.watchlist' => [
                ],
                'dependencies' => [
                        'oojs-ui-widgets',
 +                      'oojs-ui.styles.icons-movement',
                        'moment',
 +                      'mediawiki.widgets.DateInputWidget.styles',
 +              ],
 +              'targets' => [ 'desktop', 'mobile' ],
 +      ],
 +      'mediawiki.widgets.DateInputWidget.styles' => [
 +              'skinStyles' => [
 +                      'default' => [
 +                              'resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.styles.less',
 +                      ],
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
                ],
                'dependencies' => [
                        'oojs-ui-core',
 +                      'oojs-ui.styles.icons-moderation',
 +                      'oojs-ui.styles.icons-movement',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
                        'resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js',
                ],
                'dependencies' => [
 +                      'mediawiki.api',
                        'oojs-ui-widgets',
                ],
                'targets' => [ 'desktop', 'mobile' ],
                        'resources/src/mediawiki.widgets/mw.widgets.UsersMultiselectWidget.js',
                ],
                'dependencies' => [
 +                      'mediawiki.api',
                        'oojs-ui-widgets',
                ],
                'targets' => [ 'desktop', 'mobile' ],
                ],
                'dependencies' => [
                        'mediawiki.searchSuggest',
 +                      'oojs-ui.styles.icons-interactions',
                        // FIXME: Needs TitleInputWidget only
                        'mediawiki.widgets',
                ],
                        ],
                ],
                'dependencies' => [
 +                      'mediawiki.api',
                        'oojs-ui-core',
                ],
        ],
        ],
  
        /* OOjs UI */
 -      // @see ResourcesOOUI.php
 +
 +      // Omnibus module.
 +      'oojs-ui' => [
 +              'dependencies' => [
 +                      'oojs-ui-core',
 +                      'oojs-ui-widgets',
 +                      'oojs-ui-toolbars',
 +                      'oojs-ui-windows',
 +              ],
 +              'targets' => [ 'desktop', 'mobile' ],
 +      ],
 +
 +      // The core JavaScript library.
 +      'oojs-ui-core' => [
 +              'class' => 'ResourceLoaderOOUIFileModule',
 +              'scripts' => [
 +                      'resources/lib/oojs-ui/oojs-ui-core.js',
 +                      'resources/src/oojs-ui-local.js',
 +              ],
 +              'themeScripts' => 'core',
 +              'dependencies' => [
 +                      'oojs',
 +                      'oojs-ui-core.styles',
 +                      'oojs-ui.styles.indicators',
 +                      'oojs-ui.styles.textures',
 +                      'mediawiki.language',
 +                      'oojs-ui.styles.icons-content',
 +                      'oojs-ui.styles.icons-alerts',
 +                      'oojs-ui.styles.icons-interactions',
 +              ],
 +              'targets' => [ 'desktop', 'mobile' ],
 +      ],
 +      // This contains only the styles required by core widgets.
 +      'oojs-ui-core.styles' => [
 +              'class' => 'ResourceLoaderOOUIFileModule',
 +              'styles' => 'resources/src/oojs-ui-local.css', // HACK, see inside the file
 +              'themeStyles' => 'core',
 +              'targets' => [ 'desktop', 'mobile' ],
 +      ],
 +      // Additional widgets and layouts module.
 +      'oojs-ui-widgets' => [
 +              'class' => 'ResourceLoaderOOUIFileModule',
 +              'scripts' => 'resources/lib/oojs-ui/oojs-ui-widgets.js',
 +              'themeStyles' => 'widgets',
 +              'dependencies' => [
 +                      'oojs-ui-core',
 +                      'oojs-ui.styles.icons-interactions',
 +                      'oojs-ui.styles.icons-content',
 +                      'oojs-ui.styles.icons-editing-advanced',
 +                      'oojs-ui.styles.icons-movement',
 +                      'oojs-ui.styles.icons-moderation',
 +              ],
 +              'messages' => [
 +                      'ooui-outline-control-move-down',
 +                      'ooui-outline-control-move-up',
 +                      'ooui-outline-control-remove',
 +                      'ooui-selectfile-button-select',
 +                      'ooui-selectfile-dragdrop-placeholder',
 +                      'ooui-selectfile-not-supported',
 +                      'ooui-selectfile-placeholder',
 +              ],
 +              'targets' => [ 'desktop', 'mobile' ],
 +      ],
 +      // Toolbar and tools module.
 +      'oojs-ui-toolbars' => [
 +              'class' => 'ResourceLoaderOOUIFileModule',
 +              'scripts' => 'resources/lib/oojs-ui/oojs-ui-toolbars.js',
 +              'themeStyles' => 'toolbars',
 +              'dependencies' => [
 +                      'oojs-ui-core',
 +                      'oojs-ui.styles.icons-movement',
 +              ],
 +              'messages' => [
 +                      'ooui-toolbar-more',
 +                      'ooui-toolgroup-collapse',
 +                      'ooui-toolgroup-expand',
 +              ],
 +              'targets' => [ 'desktop', 'mobile' ],
 +      ],
 +      // Windows and dialogs module.
 +      'oojs-ui-windows' => [
 +              'class' => 'ResourceLoaderOOUIFileModule',
 +              'scripts' => 'resources/lib/oojs-ui/oojs-ui-windows.js',
 +              'themeStyles' => 'windows',
 +              'dependencies' => [
 +                      'oojs-ui-core',
 +                      'oojs-ui.styles.icons-movement',
 +              ],
 +              'messages' => [
 +                      'ooui-dialog-message-accept',
 +                      'ooui-dialog-message-reject',
 +                      'ooui-dialog-process-continue',
 +                      'ooui-dialog-process-dismiss',
 +                      'ooui-dialog-process-error',
 +                      'ooui-dialog-process-retry',
 +              ],
 +              'targets' => [ 'desktop', 'mobile' ],
 +      ],
 +
 +      'oojs-ui.styles.indicators' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'indicators',
 +      ],
 +      'oojs-ui.styles.textures' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'textures',
 +      ],
 +      'oojs-ui.styles.icons-accessibility' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-accessibility',
 +      ],
 +      'oojs-ui.styles.icons-alerts' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-alerts',
 +      ],
 +      'oojs-ui.styles.icons-content' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-content',
 +      ],
 +      'oojs-ui.styles.icons-editing-advanced' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-editing-advanced',
 +      ],
 +      'oojs-ui.styles.icons-editing-core' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-editing-core',
 +      ],
 +      'oojs-ui.styles.icons-editing-list' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-editing-list',
 +      ],
 +      'oojs-ui.styles.icons-editing-styling' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-editing-styling',
 +      ],
 +      'oojs-ui.styles.icons-interactions' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-interactions',
 +      ],
 +      'oojs-ui.styles.icons-layout' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-layout',
 +      ],
 +      'oojs-ui.styles.icons-location' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-location',
 +      ],
 +      'oojs-ui.styles.icons-media' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-media',
 +      ],
 +      'oojs-ui.styles.icons-moderation' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-moderation',
 +      ],
 +      'oojs-ui.styles.icons-movement' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-movement',
 +      ],
 +      'oojs-ui.styles.icons-user' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-user',
 +      ],
 +      'oojs-ui.styles.icons-wikimedia' => [
 +              'class' => 'ResourceLoaderOOUIImageModule',
 +              'themeImages' => 'icons-wikimedia',
 +      ],
  ];
                                this.setIcon( ok ? null : 'alert' );
                                this.setIconTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
                                return $.Deferred().resolve( ok ).promise();
 +                      },
 +                      createItemWidget: function ( data, label ) {
 +                              var item = OO.ui.CapsuleMultiselectWidget.prototype.createItemWidget.call( this, data, label );
 +                              if ( this.paramInfo.deprecatedvalues &&
 +                                      this.paramInfo.deprecatedvalues.indexOf( data ) >= 0
 +                              ) {
 +                                      item.$element.addClass( 'apihelp-deprecated-value' );
 +                              }
 +                              return item;
                        }
                },
  
                                        }
  
                                        items = $.map( pi.type, function ( v ) {
 -                                              return new OO.ui.MenuOptionWidget( { data: String( v ), label: String( v ) } );
 +                                              var config = {
 +                                                      data: String( v ),
 +                                                      label: String( v ),
 +                                                      classes: []
 +                                              };
 +                                              if ( pi.deprecatedvalues && pi.deprecatedvalues.indexOf( v ) >= 0 ) {
 +                                                      config.classes.push( 'apihelp-deprecated-value' );
 +                                              }
 +                                              return new OO.ui.MenuOptionWidget( config );
                                        } );
                                        if ( Util.apiBool( pi.multi ) ) {
                                                if ( pi.allspecifier !== undefined ) {
                                                $.extend( widget, WidgetMethods.dropdownWidget );
                                                if ( Util.apiBool( pi.submodules ) ) {
                                                        widget.getSubmodules = WidgetMethods.submoduleWidget.single;
 -                                                      widget.getMenu().on( 'choose', ApiSandbox.updateUI );
 +                                                      widget.getMenu().on( 'select', ApiSandbox.updateUI );
 +                                              }
 +                                              if ( pi.deprecatedvalues ) {
 +                                                      widget.getMenu().on( 'select', function ( item ) {
 +                                                              this.$element.toggleClass(
 +                                                                      'apihelp-deprecated-value',
 +                                                                      pi.deprecatedvalues.indexOf( item.data ) >= 0
 +                                                              );
 +                                                      }, [], widget );
                                                }
                                        }
  
                                                menu: { items: [] },
                                                $overlay: $( '#mw-apisandbox-ui' )
                                        } );
 -                                      formatDropdown.getMenu().on( 'choose', Util.onFormatDropdownChange );
 +                                      formatDropdown.getMenu().on( 'select', Util.onFormatDropdownChange );
                                }
  
                                menu = formatDropdown.getMenu();
                                        }
                                } )
                                        .then( null, function ( code, data, result, jqXHR ) {
 +                                              var deferred = $.Deferred();
 +
                                                if ( code !== 'http' ) {
                                                        // Not really an error, work around mw.Api thinking it is.
 -                                                      return $.Deferred()
 -                                                              .resolve( result, jqXHR )
 -                                                              .promise();
 +                                                      deferred.resolve( result, jqXHR );
 +                                              } else {
 +                                                      // Just forward it.
 +                                                      deferred.reject.apply( deferred, arguments );
                                                }
 -                                              return this;
 +                                              return deferred.promise();
                                        } )
 -                                      .fail( function ( code, data ) {
 -                                              var details = 'HTTP error: ' + data.exception;
 -                                              $result.empty()
 -                                                      .append(
 -                                                              new OO.ui.LabelWidget( {
 -                                                                      label: mw.message( 'apisandbox-results-error', details ).text(),
 -                                                                      classes: [ 'error' ]
 -                                                              } ).$element
 -                                                      );
 -                                      } )
 -                                      .done( function ( data, jqXHR ) {
 +                                      .then( function ( data, jqXHR ) {
                                                var m, loadTime, button, clear,
-                                                       ct = jqXHR.getResponseHeader( 'Content-Type' );
+                                                       ct = jqXHR.getResponseHeader( 'Content-Type' ),
+                                                       loginSuppressed = jqXHR.getResponseHeader( 'MediaWiki-Login-Suppressed' ) || 'false';
  
                                                $result.empty();
+                                               if ( loginSuppressed !== 'false' ) {
+                                                       $( '<div>' )
+                                                               .addClass( 'warning' )
+                                                               .append( Util.parseMsg( 'apisandbox-results-login-suppressed' ) )
+                                                               .appendTo( $result );
+                                               }
                                                if ( /^text\/mediawiki-api-prettyprint-wrapped(?:;|$)/.test( ct ) ) {
                                                        data = JSON.parse( data );
                                                        if ( data.modules.length ) {
                                                                .on( 'click', button.setDisabled, [ true ], button )
                                                                .$element.appendTo( $result );
                                                }
 +                                      }, function ( code, data ) {
 +                                              var details = 'HTTP error: ' + data.exception;
 +                                              $result.empty()
 +                                                      .append(
 +                                                              new OO.ui.LabelWidget( {
 +                                                                      label: mw.message( 'apisandbox-results-error', details ).text(),
 +                                                                      classes: [ 'error' ]
 +                                                              } ).$element
 +                                                      );
                                        } );
                        } );
                },
                                        nooptional: true
                                } );
                                button = new OO.ui.ButtonWidget( {
 -                                      icon: 'remove',
 +                                      icon: 'trash',
                                        flags: 'destructive'
                                } );
                                layout = new OO.ui.ActionFieldLayout(