Merge "Add top help link to MediaWiki.org in several pages via indicator"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 4 Mar 2015 16:15:53 +0000 (16:15 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 4 Mar 2015 16:15:53 +0000 (16:15 +0000)
1  2 
includes/OutputPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialMovepage.php
languages/i18n/en.json
languages/i18n/qqq.json
resources/Resources.php

diff --combined includes/OutputPage.php
@@@ -196,6 -196,12 +196,6 @@@ class OutputPage extends ContextSource 
  
        // Parser related.
  
 -      /**
 -       * @var int
 -       * @todo Unused?
 -       */
 -      private $mContainsOldMagic = 0;
 -
        /** @var int */
        protected $mContainsNewMagic = 0;
  
        }
  
        /**
-        * Add an array of indicators, with their identifiers as array keys and HTML contents as values.
+        * Add an array of indicators, with their identifiers as array
+        * keys and HTML contents as values.
         *
         * In case of duplicate keys, existing values are overwritten.
         *
                return $this->mIndicators;
        }
  
+       /**
+        * Adds help link with an icon via page indicators.
+        * @param string $to
+        * @param bool $overrideBaseUrl
+        * @since 1.25
+        */
+       public function addHelpLink( $to, $overrideBaseUrl = false ) {
+               $this->addModules( 'mediawiki.helplink' );
+               $text = wfMessage( 'helppage-top-gethelp' )->escaped();
+               if ( $overrideBaseUrl ) {
+                       $helpUrl = $to;
+               } else {
+                       $helpUrl = "//www.mediawiki.org/wiki/Special:MyLanguage/$to";
+               }
+               $link = Html::rawElement(
+                       'a',
+                       array(
+                               'href' => $helpUrl,
+                               'target' => '_blank',
+                               'class' => 'mw-helplink',
+                       ),
+                       $text
+               );
+               $this->setIndicators( array( 'mw-helplink' => $link ) );
+       }
        /**
         * Do not allow scripts which can be modified by wiki users to load on this page;
         * only allow scripts bundled with, or generated by, the software.
@@@ -103,6 -103,8 +103,8 @@@ class SpecialBlock extends FormSpecialP
                $msg = $this->alreadyBlocked ? 'ipb-change-block' : 'ipbsubmit';
                $form->setSubmitTextMsg( $msg );
  
+               $this->getOutput()->addHelpLink( 'Help:Blocking users' );
                # Don't need to do anything if the form has been posted
                if ( !$this->getRequest()->wasPosted() && $this->preErrors ) {
                        $s = $form->formatErrors( $this->preErrors );
                # This will be overwritten by request data
                $fields['Target']['default'] = (string)$this->target;
  
 +              if ( $this->target ) {
 +                      $status = self::validateTarget( $this->target, $this->getUser() );
 +                      if ( !$status->isOK() ) {
 +                              $errors = $status->getErrorsArray();
 +                              $this->preErrors = array_merge( $this->preErrors, $errors );
 +                      }
 +              }
 +
                # This won't be
                $fields['PreviousTarget']['default'] = (string)$this->target;
  
  
                # Prepare log parameters
                $logParams = array();
 -              $logParams[] = $data['Expiry'];
 -              $logParams[] = self::blockLogFlags( $data, $type );
 +              $logParams['5::duration'] = $data['Expiry'];
 +              $logParams['6::flags'] = self::blockLogFlags( $data, $type );
  
                # Make log entry, if the name is hidden, put it in the oversight log
                $log_type = $data['HideUser'] ? 'suppress' : 'block';
 -              $log = new LogPage( $log_type );
 -              $log_id = $log->addEntry(
 -                      $logaction,
 -                      Title::makeTitle( NS_USER, $target ),
 -                      $data['Reason'][0],
 -                      $logParams,
 -                      $performer
 -              );
 +              $logEntry = new ManualLogEntry( $log_type, $logaction );
 +              $logEntry->setTarget( Title::makeTitle( NS_USER, $target ) );
 +              $logEntry->setComment( $data['Reason'][0] );
 +              $logEntry->setPerformer( $performer );
 +              $logEntry->setParameters( $logParams );
                # Relate log ID to block IDs (bug 25763)
                $blockIds = array_merge( array( $status['id'] ), $status['autoIds'] );
 -              $log->addRelations( 'ipb_id', $blockIds, $log_id );
 +              $logEntry->setRelations( array( 'ipb_id' => $blockIds ) );
 +              $logId = $logEntry->insert();
 +              $logEntry->publish( $logId );
  
                # Report to the user
                return true;
@@@ -140,6 -140,7 +140,7 @@@ class MovePageForm extends UnlistedSpec
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'move-page', $this->oldTitle->getPrefixedText() ) );
                $out->addModules( 'mediawiki.special.movePage' );
+               $out->addHelpLink( 'Help:Moving a page' );
  
                $newTitle = $this->newTitle;
  
                        if ( $nt->getNamespace() == NS_FILE ) {
                                $file = wfLocalFile( $nt );
                                if ( $file->exists() ) {
 -                                      $file->delete( $reason, false );
 +                                      $file->delete( $reason, false, $user );
                                }
                        }
  
diff --combined languages/i18n/en.json
        "edithelp": "Editing help",
        "edithelppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages",
        "helppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents",
+       "helppage-top-gethelp": "Help",
        "mainpage": "Main Page",
        "mainpage-description": "Main page",
        "policy-url": "Project:Policy",
        "readonly_lag": "The database has been automatically locked while the slave database servers catch up to the master",
        "internalerror": "Internal error",
        "internalerror_info": "Internal error: $1",
 +      "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
        "filecopyerror": "Could not copy file \"$1\" to \"$2\".",
        "filerenameerror": "Could not rename file \"$1\" to \"$2\".",
        "filedeleteerror": "Could not delete file \"$1\".",
        "wantedcategories": "Wanted categories",
        "wantedcategories-summary": "",
        "wantedpages": "Wanted pages",
 -      "wantedpages-summary": "",
 +      "wantedpages-summary": "List of non-existing pages with the most links to them, excluding pages which only have redirects linking to them. For a list of non-existent pages that have redirects linking to them, see [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Invalid title in result set: $1",
        "wantedfiles": "Wanted files",
        "wantedfiles-summary": "",
        "thumbnail_image-failure-limit": "There have been too many recent failed attempts ($1 or more) to render this thumbnail. Please try again later.",
        "import": "Import pages",
        "import-summary": "",
 -      "importinterwiki": "Transwiki import",
 -      "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll transwiki import actions are logged at the [[Special:Log/import|import log]].",
 +      "importinterwiki": "Import from another wiki",
 +      "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll imports from other wikis are logged at the [[Special:Log/import|import log]].",
        "import-interwiki-sourcewiki": "Source wiki:",
        "import-interwiki-sourcepage": "Source page:",
        "import-interwiki-history": "Copy all history revisions for this page",
        "importcantopen": "Could not open import file",
        "importbadinterwiki": "Bad interwiki link",
        "importsuccess": "Import finished!",
 -      "importnosources": "No transwiki import sources have been defined and direct history uploads are disabled.",
 +      "importnosources": "No wikis from which to import have been defined and direct history uploads are disabled.",
        "importnofile": "No import file was uploaded.",
        "importuploaderrorsize": "Upload of import file failed.\nThe file is bigger than the allowed upload size.",
        "importuploaderrorpartial": "Upload of import file failed.\nThe file was only partially uploaded.",
        "revdelete-uname-unhid": "username unhidden",
        "revdelete-restricted": "applied restrictions to administrators",
        "revdelete-unrestricted": "removed restrictions for administrators",
 +      "logentry-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
 +      "logentry-block-unblock": "$1 {{GENDER:$2|unblocked}} {{GENDER:$4|$3}}",
 +      "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiry time of $5 $6",
 +      "logentry-suppress-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
 +      "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiry time of $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 into $4 (revisions up to $5)",
        "logentry-move-move": "$1 {{GENDER:$2|moved}} page $3 to $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect",
        "newuserlog-autocreate-entry": "Account created automatically",
        "rightslogentry": "changed group membership for $1 from $2 to $3",
        "rightslogentry-autopromote": "was automatically promoted from $2 to $3",
 +      "feedback-adding": "Adding feedback to page...",
 +      "feedback-back": "Back",
 +      "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].",
 +      "feedback-bugnew": "I checked. Report a new bug",
        "feedback-bugornote": "If you are ready to describe a technical problem in detail please [$1 report a bug].\nOtherwise, you can use the easy form below. Your comment will be added to the page \"[$3 $2]\", along with your username.",
 -      "feedback-subject": "Subject:",
 -      "feedback-message": "Message:",
        "feedback-cancel": "Cancel",
 -      "feedback-submit": "Submit Feedback",
 -      "feedback-adding": "Adding feedback to page...",
 +      "feedback-close": "Done",
 +      "feedback-external-bug-report-button": "File a technical task",
 +      "feedback-dialog-title": "Submit feedback",
 +      "feedback-dialog-intro": "You can use the easy form below to submit your feedback. Your comment will be added to the page \"$1\", along with your username.",
 +      "feedback-error-title": "Error",
        "feedback-error1": "Error: Unrecognized result from API",
        "feedback-error2": "Error: Edit failed",
        "feedback-error3": "Error: No response from API",
 +      "feedback-message": "Message:",
 +      "feedback-subject": "Subject:",
 +      "feedback-submit": "Submit",
 +      "feedback-terms": "I understand that my user agent information includes information about my exact browser and operating system version and will be shared publicly alongside my feedback.",
 +      "feedback-termsofuse": "I agree to provide feedback in accordance with the Terms of Use.",
        "feedback-thanks": "Thanks! Your feedback has been posted to the page \"[$2 $1]\".",
 -      "feedback-close": "Done",
 -      "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].",
 -      "feedback-bugnew": "I checked. Report a new bug",
 +      "feedback-thanks-title": "Thank you!",
 +      "feedback-useragent": "User agent:",
        "searchsuggest-search": "Search",
        "searchsuggest-containing": "containing...",
        "api-error-badaccess-groups": "You are not permitted to upload files to this wiki.",
        "json-error-utf8": "Malformed UTF-8 characters, possibly incorrectly encoded",
        "json-error-recursion": "One or more recursive references in the value to be encoded",
        "json-error-inf-or-nan": "One or more NAN or INF values in the value to be encoded",
 -      "json-error-unsupported-type": "A value of a type that cannot be encoded was given"
 +      "json-error-unsupported-type": "A value of a type that cannot be encoded was given",
 +      "headline-anchor-title": "Link to this section",
 +      "section-symbol": "§"
  }
diff --combined languages/i18n/qqq.json
        "edithelp": "This is the text that appears on the editing help link that is near the bottom of the editing page",
        "edithelppage": "The help page displayed when a user clicks on editing help link which is present on the right of Show changes button.\n{{doc-important|Do not change the \"<tt>Help:</tt>\" part.}}",
        "helppage": "{{ignored}}\nThe link destination used by default in the sidebar, and in {{msg-mw|Noarticletext}}.",
+       "helppage-top-gethelp": "Link to some MediaWiki.org help page or tutorial.\n{{Identical|Help}}",
        "mainpage": "Defines the link and display name of the main page of the wiki. Shown as the top link in the navigation part of the interface. Please do not change it too often, that could break things!\n\nSee also:\n* {{msg-mw|Mainpage}}\n* {{msg-mw|Accesskey-n-mainpage}}\n* {{msg-mw|Tooltip-n-mainpage}}\n{{Identical|Main page}}",
        "mainpage-description": "The same as {{msg-mw|mainpage}}, used as link text on [[MediaWiki:Sidebar]].\n\nThis makes it possible to the change the link destination (the message \"mainpage\") without changing the link text or without disabling translations.\n\nSee also:\n* {{msg-mw|Mainpage-description}}\n* {{msg-mw|Accesskey-n-mainpage-description}}\n* {{msg-mw|Tooltip-n-mainpage-description}}\n{{Identical|Main page}}",
        "policy-url": "{{doc-important|Do not change the <code>Project:</code> part.}}\nThe URL of the project page describing the policies of the wiki.\n\nThis is shown below every page (the left link).",
        "readonly_lag": "Error message displayed when the database is locked.",
        "internalerror": "{{Identical|Internal error}}",
        "internalerror_info": "Parameters:\n* $1 - error message",
 +      "internalerror-fatal-exception": "Error message displayed by MediaWiki itself when the request failed, inside an error box which also contains a code, a timestamp and a colon before this message.\nParameters:\n* $1 - proper name of the kind of error\n* $2 - alphanumeric code identifying the error in the server logs\n* $3 - URL which resulted in the error\n$2 and $3 are not used by default and only available for wiki customisations, because they are useful for communication to the wiki system administrator.",
        "filecopyerror": "Parameters:\n* $1 - source file name\n* $2 - destination file name",
        "filerenameerror": "Parameters:\n* $1 - old file name\n* $2 - new file name",
        "filedeleteerror": "Parameters:\n* $1 - file name",
        "textmatches": "When displaying search results",
        "notextmatches": "Error message when there are no results",
        "prevn": "This is part of the navigation message on the top and bottom of Special pages (lists of things in alphabetical order, i.e. the '[[Special:Categories]]' page), where it is used as the first argument of {{msg-mw|Viewprevnext}}.\nIt is also used by Category pages (which do ''not'' use {{msg-mw|Viewprevnext}}).\n{{PLURAL:$1|$1}} is the number of items shown per page. It is not used when {{PLURAL:$1|$1}} is zero; not sure what happens when {{PLURAL:$1|$1}} is one.\n[[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-prev}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\n{{Identical|Previous}}",
 -      "nextn": "This is part of the navigation message on the top and bottom of Special pages (lists of things in alphabetical order, i.e. the '[[Special:Categories]]' page), where it is used as the second argument of {{msg-mw|Viewprevnext}}.\n\nIt is also used by Category pages (which do ''not'' use {{msg-mw|Viewprevnext}}).\n\nParameters:\n* $1 - the number of items shown per page. It is not used when $1 is zero; not sure what happens when $1 is one.\n[[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-next}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\n{{Identical|Next $1}}",
 +      "nextn": "This is part of the navigation message on the top and bottom of Special pages (lists of things in alphabetical order, i.e. the '[[Special:Categories]]' page), where it is used as the second argument of {{msg-mw|Viewprevnext}}.\n\nIt is also used by Category pages (which do ''not'' use {{msg-mw|Viewprevnext}}).\n\nParameters:\n* $1 - the number of items shown per page. It is not used when $1 is zero; not sure what happens when $1 is one.\n[[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-next}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\n{{Identical|Next}}",
        "prevn-title": "Parameters:\n* $1 - number of search results\nSee also:\n* {{msg-mw|Viewprevnext}}",
        "nextn-title": "Parameters:\n* $1 - number of search results\nSee also:\n* {{msg-mw|Viewprevnext}}",
        "shown-title": "Parameters:\n* $1 - number of search results",
        "usermessage-summary": "This message is used as an edit summary for any message that is posted because of a system event. Translate \"leaving a message\" in the sense of: to give a message to someone; to deliver a message somewhere; to deposit.",
        "usermessage-editor": "The user name for the user that is the editor of system messages. See [{{canonicalurl:Thread:Support/Message_info_please}} discussion on Support].",
        "usermessage-template": "{{optional}}",
 -      "watchlist": "{{Identical|Watchlist}}",
 +      "watchlist": "Title of the Special:Watchlist page.\n\n{{Identical|Watchlist}}",
        "watchlist-summary": "{{doc-specialpagesummary|watchlist}}",
        "mywatchlist": "Link at the upper right corner of the screen.\n\nSee also:\n* {{msg-mw|Mywatchlist}}\n* {{msg-mw|Accesskey-pt-watchlist}}\n* {{msg-mw|Tooltip-pt-watchlist}}\n{{Identical|Watchlist}}",
        "watchlistfor2": "Subtitle on [[Special:Watchlist]].\nParameters:\n* $1 - Username of current user\n* $2 - Tool links (View relevant changes | View and edit watchlist | Edit raw watchlist)\n{{Identical|For $1}}",
        "blockipsuccesstext": "Used in [[Special:Block]].\nThe title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.\n\nParameters:\n* $1 - username, can be used for GENDER",
        "ipb-blockingself": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-confirmhideuser}}",
        "ipb-confirmhideuser": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-blockingself}}",
 -      "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.",
 +      "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.\n\n<code>to check</code> refers here to a check box with the text \"{{int:ipb-confirm}}\"",
        "ipb-edit-dropdown": "Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.\n\nSee also:\n* {{msg-mw|Delete-edit-reasonlist}}\n* {{msg-mw|Protect-edit-reasonlist}}",
        "ipb-unblock-addr": "Used as page title in [[Special:Block]], if the target user is specified.\n\nParameters:\n* $1 - target username\n\nSee also:\n* {{msg-mw|Ipb-unblock}}\n{{Identical|Unblock}}",
        "ipb-unblock": "Used as page title in [[Special:Block]], if the target user is not specified.\n\nSee also:\n* {{msg-mw|Ipb-unblock-addr}}",
        "blocklogpage": "{{doc-logpage}}\n\nThe page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\n{{Identical|Block log}}",
        "blocklog-showlog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER\nSee also:\n* {{msg-mw|Blocklog-showsuppresslog}}\n* {{msg-mw|Globalblocking-showlog}}",
        "blocklog-showsuppresslog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER",
 -      "blocklogentry": "This is the text of an entry in the Block log, and recent changes, after hour (and date, only in the Block log) and sysop name:\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
 -      "reblock-logentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
 +      "blocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
 +      "reblock-logentry": "This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
        "blocklogtext": "Appears on top of [[Special:Log/block]].",
 -      "unblocklogentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name:\n* $1 is the user being unblocked",
 +      "unblocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 is the user being unblocked",
        "block-log-flags-anononly": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Anononlyblock}}\n{{Related|Block-log-flags}}",
        "block-log-flags-nocreate": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Createaccountblock}}\n{{Related|Block-log-flags}}",
        "block-log-flags-noautoblock": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n{{Related|Block-log-flags}}\n{{Identical|Autoblock disabled}}",
        "revdelete-uname-unhid": "Used on\n* {{msg-mw|logentry-delete-event}}\n* {{msg-mw|logentry-delete-revision}}\n* {{msg-mw|logentry-suppress-event}}\n* {{msg-mw|logentry-suppress-event}}",
        "revdelete-restricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
        "revdelete-unrestricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
 +      "logentry-block-block": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Blocklogentry}}",
 +      "logentry-block-unblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n\nCf. {{msg-mw|Unblocklogentry}}",
 +      "logentry-block-reblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Reblock-logentry}}",
 +      "logentry-suppress-block": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
 +      "logentry-suppress-reblock": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
        "logentry-merge-merge": "{{Logentry|[[Special:Log/merge]]}}\n* $4 - the page into which the content is merged\n* $5 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
        "logentry-move-move": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "newuserlog-autocreate-entry": "This message is used in the [[:mw:Extension:Newuserlog|new user log]] to mark an account that was created by MediaWiki as part of a [[:mw:Extension:CentralAuth|CentralAuth]] global account.",
        "rightslogentry": "This message is displayed in the [[Special:Log/rights|User Rights Log]] when a bureaucrat changes the user groups for a user.\n\nParameters:\n* $1 - the username\n* $2 - list of user groups or {{msg-mw|Rightsnone}}\n* $3 - list of user groups or {{msg-mw|Rightsnone}}\n\nThe name of the bureaucrat who did this task appears before this message.\n\nSimilar to {{msg-mw|Gur-rightslog-entry}}",
        "rightslogentry-autopromote": "This message is displayed in the [[Special:Log/rights|User Rights Log]] when a user is automatically promoted to a user group.\n\nParameters:\n* $1 - (Unused)\n* $2 - a comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $3 - a comma separated list of new user groups",
 +      "feedback-adding": "Progress notice",
 +      "feedback-back": "Button to go back to the previous action in the feedback dialog.",
 +      "feedback-bugcheck": "Message that appears before the user submits a bug, reminding them to check for known bugs.\n\nParameters:\n* $1 - bug list page URL",
 +      "feedback-bugnew": "Button label - asserts that the user has checked for existing bugs. When clicked will launch an external form to add a new bug in a new tab or window",
        "feedback-bugornote": "When feedback dialog box is opened, this introductory message in small print explains the options to report a bug or add simple feedback.\n\nWe expect that people in a hurry will not read this.\n\nParameters:\n* $1 - Bug note URL\n* $2 - \"Feedback\"\n* $3 - Feedback page URL",
 -      "feedback-subject": "Label for a text input\n{{Identical|Subject}}",
 -      "feedback-message": "Label for a textarea; signature referrs to a Wikitext signature.\n{{Identical|Message}}",
 +      "feedback-external-bug-report-button": "A button for submitting an external technical bug report.",
        "feedback-cancel": "Button label\n{{Identical|Cancel}}",
 -      "feedback-submit": "Button label\n{{Identical|Submit}}",
 -      "feedback-adding": "Progress notice",
 +      "feedback-close": "Button label\n{{Identical|Done}}",
 +      "feedback-dialog-title": "Title of the feedback dialog",
        "feedback-error1": "Error message, appears when an unknown error occurs submitting feedback",
        "feedback-error2": "Error message, appears when we could not add feedback",
        "feedback-error3": "Error message, appears when we lose our connection to the wiki",
 +      "feedback-dialog-intro": "An introduction at the top of the feedback dialog. $1 - Feedback page link",
 +      "feedback-message": "Label for a textarea; signature refers to a Wikitext signature.\n{{Identical|Message}}",
 +      "feedback-subject": "Label for a text input\n{{Identical|Subject}}",
 +      "feedback-submit": "Button label\n{{Identical|Submit}}",
 +      "feedback-terms": "Label for a checkbox asking for permissions to submit browser information.",
 +      "feedback-termsofuse": "Label with an agreement about the terms of use.",
        "feedback-thanks": "Thanks message, appears if feedback was successful. Parameters:\n* $1 - \"Feedback\"\n* $2 - Feedback page URL",
 -      "feedback-close": "Button label\n{{Identical|Done}}",
 -      "feedback-bugcheck": "Message that appears before the user submits a bug, reminding them to check for known bugs.\n\nParameters:\n* $1 - bug list page URL",
 -      "feedback-bugnew": "Button label - asserts that the user has checked for existing bugs. When clicked will launch a bugzilla form to add a new bug in a new tab or window",
 +      "feedback-thanks-title": "The title of the message dialog at the end of the submission process that shows error in submitting the feedback.",
 +      "feedback-thanks-title": "The title of the thank you dialog at the end of the submission process.",
 +      "feedback-useragent": "A label denoting the user agent in the feedback that is posted to the feedback page.",
        "searchsuggest-search": "Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)\n\n{{Identical|Search}}",
        "searchsuggest-containing": "Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.",
        "api-error-badaccess-groups": "API error message that can be used for client side localisation of API errors.",
diff --combined resources/Resources.php
@@@ -29,19 -29,12 +29,19 @@@ return array
        /**
         * Special modules who have their own classes
         */
 +      'startup' => array( 'class' => 'ResourceLoaderStartUpModule' ),
  
        // Scripts managed by the local wiki (stored in the MediaWiki namespace)
        'site' => array( 'class' => 'ResourceLoaderSiteModule' ),
 -      'noscript' => array( 'class' => 'ResourceLoaderNoscriptModule' ),
 -      'startup' => array( 'class' => 'ResourceLoaderStartUpModule' ),
 -      'filepage' => array( 'class' => 'ResourceLoaderFilePageModule' ),
 +      'noscript' => array(
 +              'class' => 'ResourceLoaderWikiModule',
 +              'styles' => array( 'MediaWiki:Noscript.css' ),
 +              'group' => 'noscript',
 +      ),
 +      'filepage' => array(
 +              'class' => 'ResourceLoaderWikiModule',
 +              'styles' => array( 'MediaWiki:Filepage.css' ),
 +      ),
        'user.groups' => array( 'class' => 'ResourceLoaderUserGroupsModule' ),
  
        // Scripts managed by the current user (stored in their user space)
        'mediawiki.apihelp' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apihelp.css',
                'targets' => array( 'desktop' ),
 -              'dependencies' => array(
 -                      'mediawiki.hlist',
 -              ),
 +              'dependencies' => 'mediawiki.hlist',
                'position' => 'top',
        ),
        'mediawiki.template' => array(
        ),
        'mediawiki.api.login' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.login.js',
 -              'dependencies' => array(
 -                      'mediawiki.api',
 -              ),
 +              'dependencies' => 'mediawiki.api',
        ),
        'mediawiki.api.parse' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.parse.js',
                'position' => 'bottom',
        ),
        'mediawiki.feedback' => array(
 -              'templates' => array(
 -                      'dialog.html' => 'resources/src/mediawiki/templates/dialog.html',
 -              ),
                'scripts' => 'resources/src/mediawiki/mediawiki.feedback.js',
                'styles' => 'resources/src/mediawiki/mediawiki.feedback.css',
                'dependencies' => array(
                        'mediawiki.api.edit',
                        'mediawiki.Title',
 -                      'mediawiki.jqueryMsg',
 -                      'jquery.ui.dialog',
 +                      'oojs-ui',
                ),
                'messages' => array(
 +                      'feedback-adding',
 +                      'feedback-back',
 +                      'feedback-bugcheck',
 +                      'feedback-dialog-intro',
 +                      'feedback-external-bug-report-button',
 +                      'feedback-bugnew',
                        'feedback-bugornote',
 -                      'feedback-subject',
 -                      'feedback-message',
                        'feedback-cancel',
 -                      'feedback-submit',
 -                      'feedback-adding',
 +                      'feedback-close',
 +                      'feedback-dialog-title',
 +                      'feedback-error-title',
                        'feedback-error1',
                        'feedback-error2',
                        'feedback-error3',
 +                      'feedback-message',
 +                      'feedback-subject',
 +                      'feedback-submit',
 +                      'feedback-terms',
 +                      'feedback-termsofuse',
                        'feedback-thanks',
 -                      'feedback-close',
 -                      'feedback-bugcheck',
 -                      'feedback-bugnew',
 +                      'feedback-thanks-title',
 +                      'feedback-useragent'
                ),
        ),
+       'mediawiki.helplink' => array(
+               'styles' => array(
+                       'resources/src/mediawiki/mediawiki.helplink.css',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.hidpi' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.hidpi.js',
 -              'dependencies' => array(
 -                      'jquery.hidpi',
 -              ),
 +              'dependencies' => 'jquery.hidpi',
                'skipFunction' => 'resources/src/mediawiki.hidpi-skip.js',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.hlist' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.hlist.css',
                'scripts' => 'resources/src/mediawiki/mediawiki.hlist.js',
 -              'dependencies' => array(
 -                      'jquery.client',
 -              ),
 +              'dependencies' => 'jquery.client',
        ),
        'mediawiki.htmlform' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.htmlform.js',
                                => array( 'media' => 'print' ),
                ),
                'scripts' => 'resources/src/mediawiki/mediawiki.notification.js',
 -              'dependencies' => array(
 -                      'mediawiki.page.startup',
 -              ),
 +              'dependencies' => 'mediawiki.page.startup',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.notify' => array(
                        'mediawiki.api',
                ),
        ),
 +      'mediawiki.sectionAnchor' => array(
 +              'skinStyles' => array(
 +                      'default' => array(
 +                              'resources/src/mediawiki/mediawiki.sectionAnchor.css' =>
 +                                      array( 'media' => 'screen'),
 +                              'resources/src/mediawiki/mediawiki.sectionAnchor.hide.css' =>
 +                                      array( 'media' => 'print' ),
 +                      ),
 +              ),
 +              'targets' => array( 'desktop', 'mobile' ),
 +      ),
        'mediawiki.Title' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.Title.js',
                'dependencies' => array(
        ),
        'mediawiki.toc' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.toc.js',
 -              'dependencies' => array(
 -                      'jquery.cookie',
 -              ),
 +              'dependencies' => 'jquery.cookie',
                'messages' => array( 'showtoc', 'hidetoc' ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
        ),
        'mediawiki.cookie' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.cookie.js',
 -              'dependencies' => array(
 -                      'jquery.cookie',
 -              ),
 +              'dependencies' => 'jquery.cookie',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.toolbar' => array(
                        'metadata-collapse',
                ),
        ),
 +      'mediawiki.action.view.categoryPage.styles' => array(
 +              'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
 +              'targets' => array( 'desktop', 'mobile' )
 +      ),
        'mediawiki.action.view.postEdit' => array(
                'templates' => array(
                        'postEdit.html' => 'resources/src/mediawiki.action/templates/postEdit.html',
        ),
        'mediawiki.action.view.redirect' => array(
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.redirect.js',
 -              'dependencies' => array(
 -                      'jquery.client',
 -              ),
 +              'dependencies' => 'jquery.client',
                'position' => 'top',
        ),
        'mediawiki.action.view.redirectPage' => array(
        ),
        'mediawiki.page.startup' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.startup.js',
 -              'dependencies' => array(
 -                      'mediawiki.util',
 -              ),
 +              'dependencies' => 'mediawiki.util',
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.special.block' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.block.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.block.css',
 -              'dependencies' => array(
 -                      'mediawiki.util',
 -              ),
 +              'dependencies' => 'mediawiki.util',
        ),
        'mediawiki.special.changeemail' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeemail.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeemail.css',
 -              'dependencies' => array(
 -                      'mediawiki.util',
 -              ),
 +              'dependencies' => 'mediawiki.util',
                'messages' => array(
                        'email-address-validity-valid',
                        'email-address-validity-invalid',
                ),
                'dependencies' => array(
                        'mediawiki.language',
 +                      'mediawiki.confirmCloseWindow',
                ),
        ),
        'mediawiki.special.recentchanges' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.recentchanges.js',
 -              'dependencies' => array( 'mediawiki.special' ),
 +              'dependencies' => 'mediawiki.special',
                'position' => 'top',
        ),
        'mediawiki.special.search' => array(
                        'colon-separator',
                        'javascripttest-pagetext-skins',
                ) ),
 -              'dependencies' => array(
 -                      'mediawiki.Uri',
 -              ),
 +              'dependencies' => 'mediawiki.Uri',
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        ),
        'mediawiki.legacy.protect' => array(
                'scripts' => 'resources/src/mediawiki.legacy/protect.js',
 -              'dependencies' => array(
 -                      'jquery.byteLimit',
 -              ),
 +              'dependencies' => 'jquery.byteLimit',
                'messages' => array( 'protect-unchain-permissions' )
        ),
        'mediawiki.legacy.shared' => array(
        ),
        'mediawiki.legacy.wikibits' => array(
                'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
 -              'dependencies' => array(
 -                      'mediawiki.util',
 -              ),
 +              'dependencies' => 'mediawiki.util',
                'position' => 'top',
        ),
  
        'oojs-ui.styles' => array(
                'position' => 'top',
                'skinStyles' => array(
 -                      'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css',
 +                      'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.css',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),