API: Internationalize all remaining core API modules
authorBrad Jorsch <bjorsch@wikimedia.org>
Thu, 18 Sep 2014 17:38:23 +0000 (13:38 -0400)
committerBrad Jorsch <bjorsch@wikimedia.org>
Mon, 20 Oct 2014 20:56:35 +0000 (16:56 -0400)
This also adds some new ApiBase::PARAM_* constants to generate more
helpful help, and a method to override the default description message
for the use of ApiDisabled and ApiQueryDisabled.

Bug: 71638
Change-Id: Ic0c3d232e0498d58a043037e2e0c6f0b1c3edad3

92 files changed:
RELEASE-NOTES-1.25
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiClearHasMsg.php
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php
includes/api/ApiDelete.php
includes/api/ApiDisabled.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedRecentChanges.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiHelp.php
includes/api/ApiImageRotate.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryContributors.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDisabled.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryORM.php
includes/api/ApiQueryPagePropNames.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryTokens.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiRevisionDelete.php
includes/api/ApiRollback.php
includes/api/ApiRsd.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiTokens.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php
includes/api/ApiWatch.php
includes/api/i18n/en.json
includes/api/i18n/qqq.json

index 2180022..2d7273d 100644 (file)
@@ -102,6 +102,7 @@ production.
   * ApiMain::setHelp
   * ApiMain::reallyMakeHelpMsg
   * ApiMain::makeHelpMsgHeader
+  * ApiQueryImageInfo::getPropertyDescriptions
 
 === Languages updated in 1.25 ===
 
index a214f2e..58bd68d 100644 (file)
@@ -74,6 +74,17 @@ abstract class ApiBase extends ContextSource {
        // is an array of any of strings giving the message key, arrays giving key and
        // parameters, or Message objects.
        const PARAM_HELP_MSG_APPEND = 11;
+       /// @since 1.25
+       // Specify additional information tags for the parameter. Value is an array
+       // of arrays, with the first member being the 'tag' for the info and the
+       // remaining members being the values. In the help, this is formatted using
+       // apihelp-{$path}-paraminfo-{$tag}, which is passed $1 = count, $2 =
+       // comma-joined list of values.
+       const PARAM_HELP_MSG_INFO = 12;
+       /// @since 1.25
+       // When PARAM_DFLT is an array, this may be an array mapping those values
+       // to page titles which will be linked in the help.
+       const PARAM_VALUE_LINKS = 13;
 
        const LIMIT_BIG1 = 500; // Fast query, std user limit
        const LIMIT_BIG2 = 5000; // Fast query, bot/sysop limit
@@ -1923,6 +1934,15 @@ abstract class ApiBase extends ContextSource {
         * @{
         */
 
+       /**
+        * Return the description message.
+        *
+        * @return string|array|Message
+        */
+       protected function getDescriptionMessage() {
+               return "apihelp-{$this->getModulePath()}-description";
+       }
+
        /**
         * Get final module description, after hooks have had a chance to tweak it as
         * needed.
@@ -1940,7 +1960,7 @@ abstract class ApiBase extends ContextSource {
                        $desc = (string)$desc;
                }
 
-               $msg = $this->msg( "apihelp-{$this->getModulePath()}-description", array(
+               $msg = ApiBase::makeMessage( $this->getDescriptionMessage(), $this->getContext(), array(
                        $this->getModulePrefix(),
                        $this->getModuleName(),
                        $this->getModulePath(),
@@ -2424,7 +2444,7 @@ abstract class ApiBase extends ContextSource {
         * @return array|bool False on no parameter descriptions
         */
        protected function getParamDescription() {
-               return false;
+               return array();
        }
 
        /**
index 07f62c6..44565a8 100644 (file)
@@ -165,38 +165,16 @@ class ApiBlock extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'user' => 'Username, IP address or IP range you want to block',
-                       'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. ' .
-                               'If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
-                       'reason' => 'Reason for block',
-                       'anononly' => 'Block anonymous users only (i.e. disable anonymous edits for this IP)',
-                       'nocreate' => 'Prevent account creation',
-                       'autoblock' => 'Automatically block the last used IP address, and ' .
-                               'any subsequent IP addresses they try to login from',
-                       'noemail'
-                               => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
-                       'hidename' => 'Hide the username from the block log. (Requires the "hideuser" right.)',
-                       'allowusertalk'
-                               => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
-                       'reblock' => 'If the user is already blocked, overwrite the existing block',
-                       'watchuser' => 'Watch the user/IP\'s user and talk pages',
-               );
-       }
-
-       public function getDescription() {
-               return 'Block a user.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=block&user=123.5.5.12&expiry=3%20days&reason=First%20strike&token=123ABC',
-                       'api.php?action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
+                       'action=block&user=192.0.2.5&expiry=3%20days&reason=First%20strike&token=123ABC'
+                               => 'apihelp-block-example-ip-simple',
+                       'action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
+                               => 'apihelp-block-example-user-complex',
                );
        }
 
index 32e20e8..8667a67 100644 (file)
@@ -42,13 +42,10 @@ class ApiClearHasMsg extends ApiBase {
                return false;
        }
 
-       public function getDescription() {
-               return array( 'Clears the hasmsg flag for current user.' );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=clearhasmsg' => 'Clears the hasmsg flag for current user',
+                       'action=clearhasmsg'
+                               => 'apihelp-clearhasmsg-example-1',
                );
        }
 
index 4855926..a2f33ea 100644 (file)
@@ -126,27 +126,10 @@ class ApiComparePages extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'fromtitle' => 'First title to compare',
-                       'fromid' => 'First page ID to compare',
-                       'fromrev' => 'First revision to compare',
-                       'totitle' => 'Second title to compare',
-                       'toid' => 'Second page ID to compare',
-                       'torev' => 'Second revision to compare',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Get the difference between 2 pages.',
-                       'You must pass a revision number or a page title or a page ID id for each part (1 and 2).'
-               );
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=compare&fromrev=1&torev=2' => 'Create a diff between revision 1 and 2',
+                       'action=compare&fromrev=1&torev=2'
+                               => 'apihelp-compare-example-1',
                );
        }
 }
index 2ce532b..cfb6dab 100644 (file)
@@ -165,10 +165,6 @@ class ApiCreateAccount extends ApiBase {
                $apiResult->addValue( null, 'createaccount', $result );
        }
 
-       public function getDescription() {
-               return 'Create a new user account.';
-       }
-
        public function mustBePosted() {
                return true;
        }
@@ -204,27 +200,12 @@ class ApiCreateAccount extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'name' => 'Username',
-                       'password' => "Password (ignored if {$p}mailpassword is set)",
-                       'domain' => 'Domain for external authentication (optional)',
-                       'token' => 'Account creation token obtained in first request',
-                       'email' => 'Email address of user (optional)',
-                       'realname' => 'Real name of user (optional)',
-                       'mailpassword' => 'If set to any value, a random password will be emailed to the user',
-                       'reason' => 'Optional reason for creating the account to be put in the logs',
-                       'language'
-                               => 'Language code to set as default for the user (optional, defaults to content language)'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=createaccount&name=testuser&password=test123',
-                       'api.php?action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason',
+                       'action=createaccount&name=testuser&password=test123'
+                               => 'apihelp-createaccount-example-pass',
+                       'action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason'
+                               => 'apihelp-createaccount-example-mail',
                );
        }
 
index abca824..e455f71 100644 (file)
@@ -210,35 +210,16 @@ class ApiDelete extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title",
-                       'reason'
-                               => 'Reason for the deletion. If not set, an automatically generated reason will be used',
-                       'watch' => 'Add the page to your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'unwatch' => 'Remove the page from your watchlist',
-                       'oldimage' => 'The name of the old image to delete as provided by iiprop=archivename'
-               );
-       }
-
-       public function getDescription() {
-               return 'Delete a page.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=delete&title=Main%20Page&token=123ABC' => 'Delete the Main Page',
-                       'api.php?action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
-                               => 'Delete the Main Page with the reason "Preparing for move"',
+                       'action=delete&title=Main%20Page&token=123ABC'
+                               => 'apihelp-delete-example-simple',
+                       'action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
+                               => 'apihelp-delete-example-reason',
                );
        }
 
index 6ea5d20..fc97522 100644 (file)
@@ -44,19 +44,7 @@ class ApiDisabled extends ApiBase {
                return false;
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'This module has been disabled.';
-       }
-
-       public function getExamples() {
-               return array();
+       protected function getDescriptionMessage() {
+               return 'apihelp-disabled-description';
        }
 }
index 8a76271..f2bb273 100644 (file)
@@ -496,10 +496,6 @@ class ApiEditPage extends ApiBase {
                return true;
        }
 
-       public function getDescription() {
-               return 'Create and edit pages.';
-       }
-
        public function getAllowedParams() {
                return array(
                        'title' => array(
@@ -557,58 +553,11 @@ class ApiEditPage extends ApiBase {
                        ),
                        'contentmodel' => array(
                                ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to edit. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title",
-                       'section' => 'Section number. 0 for the top section, \'new\' for a new section',
-                       'sectiontitle' => 'The title for a new section',
-                       'text' => 'Page content',
-                       'token' => array(
-                               /* Standard description is automatically prepended */
-                               'The token should always be sent as the last parameter, or at ' .
-                                       "least, after the {$p}text parameter"
-                       ),
-                       'summary'
-                               => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
-                       'minor' => 'Minor edit',
-                       'notminor' => 'Non-minor edit',
-                       'bot' => 'Mark this edit as bot',
-                       'basetimestamp' => array(
-                               'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
-                               'Used to detect edit conflicts; leave unset to ignore conflicts'
                        ),
-                       'starttimestamp' => array(
-                               'Timestamp when you began the editing process, e.g. when the current page content ' .
-                                       'was loaded for editing.',
-                               'Used to detect edit conflicts; leave unset to ignore conflicts'
-                       ),
-                       'recreate' => 'Override any errors about the article having been deleted in the meantime',
-                       'createonly' => 'Don\'t edit the page if it exists already',
-                       'nocreate' => 'Throw an error if the page doesn\'t exist',
-                       'watch' => 'Add the page to your watchlist',
-                       'unwatch' => 'Remove the page from your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'md5' => array(
-                               "The MD5 hash of the {$p}text parameter, or the {$p}prependtext " .
-                                       "and {$p}appendtext parameters concatenated.",
-                               'If set, the edit won\'t be done unless the hash is correct'
+                       'token' => array(
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'apihelp-edit-param-token' ),
                        ),
-                       'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
-                       'appendtext' => array( "Add this text to the end of the page. Overrides {$p}text.",
-                               "Use {$p}section=new to append a new section" ),
-                       'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
-                       'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
-                       'redirect' => 'Automatically resolve redirects',
-                       'contentformat' => 'Content serialization format used for the input text',
-                       'contentmodel' => 'Content model of the new content',
                );
        }
 
@@ -616,17 +565,17 @@ class ApiEditPage extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=edit&title=Test&summary=test%20summary&' .
-                       'text=article%20content&basetimestamp=20070824123454&token=%2B\\'
-                               => 'Edit a page (anonymous user)',
-                       'api.php?action=edit&title=Test&summary=NOTOC&minor=&' .
-                               'prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\'
-                               => 'Prepend __NOTOC__ to a page (anonymous user)',
-                       'api.php?action=edit&title=Test&undo=13585&undoafter=13579&' .
-                               'basetimestamp=20070824123454&token=%2B\\'
-                               => 'Undo r13579 through r13585 with autosummary (anonymous user)',
+                       'action=edit&title=Test&summary=test%20summary&' .
+                               'text=article%20content&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-edit',
+                       'action=edit&title=Test&summary=NOTOC&minor=&' .
+                               'prependtext=__NOTOC__%0A&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-prepend',
+                       'action=edit&title=Test&undo=13585&undoafter=13579&' .
+                               'basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-undo',
                );
        }
 
index 9870b2d..911f454 100644 (file)
@@ -102,27 +102,14 @@ class ApiEmailUser extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'target' => 'User to send email to',
-                       'subject' => 'Subject header',
-                       'text' => 'Mail body',
-                       'ccme' => 'Send a copy of this mail to me',
-               );
-       }
-
-       public function getDescription() {
-               return 'Email a user.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=emailuser&target=WikiSysop&text=Content&token=123ABC'
-                               => 'Send an email to the User "WikiSysop" with the text "Content"',
+                       'action=emailuser&target=WikiSysop&text=Content&token=123ABC'
+                               => 'apihelp-emailuser-example-email',
                );
        }
 
index 8a3b534..93903b5 100644 (file)
@@ -159,35 +159,10 @@ class ApiExpandTemplates extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'text' => 'Wikitext to convert',
-                       'title' => 'Title of page',
-                       'prop' => array(
-                               'Which pieces of information to get',
-                               ' wikitext   - The expanded wikitext',
-                               ' categories - Any categories present in the input that are not represented in ' .
-                                       'the wikitext output',
-                               ' volatile   - Whether the output is volatile and should not be reused ' .
-                                       'elsewhere within the page',
-                               ' ttl        - The maximum time after which caches of the result should be ' .
-                                       'invalidated',
-                               ' parsetree  - The XML parse tree of the input',
-                               'Note that if no values are selected, the result will contain the wikitext,',
-                               'but the output will be in a deprecated format.',
-                       ),
-                       'includecomments' => 'Whether to include HTML comments in the output',
-                       'generatexml' => 'Generate XML parse tree (replaced by prop=parsetree)',
-               );
-       }
-
-       public function getDescription() {
-               return 'Expands all templates in wikitext.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=expandtemplates&text={{Project:Sandbox}}'
+                       'action=expandtemplates&text={{Project:Sandbox}}'
+                               => 'apihelp-expandtemplates-example-simple',
                );
        }
 
index 374203e..20f4d3d 100644 (file)
@@ -161,7 +161,7 @@ class ApiFeedContributions extends ApiBase {
        public function getAllowedParams() {
                $feedFormatNames = array_keys( $this->getConfig()->get( 'FeedClasses' ) );
 
-               return array(
+               $ret = array(
                        'feedformat' => array(
                                ApiBase::PARAM_DFLT => 'rss',
                                ApiBase::PARAM_TYPE => $feedFormatNames
@@ -187,32 +187,22 @@ class ApiFeedContributions extends ApiBase {
                        'deletedonly' => false,
                        'toponly' => false,
                        'newonly' => false,
-                       'showsizediff' => false,
+                       'showsizediff' => array(
+                               ApiBase::PARAM_DFLT => false,
+                       ),
                );
-       }
 
-       public function getParamDescription() {
-               return array(
-                       'feedformat' => 'The format of the feed',
-                       'user' => 'What users to get the contributions for',
-                       'namespace' => 'What namespace to filter the contributions by',
-                       'year' => 'From year (and earlier)',
-                       'month' => 'From month (and earlier)',
-                       'tagfilter' => 'Filter contributions that have these tags',
-                       'deletedonly' => 'Show only deleted contributions',
-                       'toponly' => 'Only show edits that are latest revisions',
-                       'newonly' => 'Only show edits that are page creations',
-                       'showsizediff' => 'Show the size difference between revisions. Disabled in Miser Mode',
-               );
-       }
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['showsizediff'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
 
-       public function getDescription() {
-               return 'Returns a user contributions feed.';
+               return $ret;
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=feedcontributions&user=Reedy',
+                       'action=feedcontributions&user=Example'
+                               => 'apihelp-feedcontributions-example-simple',
                );
        }
 }
index 7239a29..0d2fca6 100644 (file)
@@ -171,37 +171,12 @@ class ApiFeedRecentChanges extends ApiBase {
                return $ret;
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'feedformat' => 'The format of the feed',
-                       'namespace' => 'Namespace to limit the results to',
-                       'invert' => 'All namespaces but the selected one',
-                       'associated' => 'Include associated (talk or main) namespace',
-                       'days' => 'Days to limit the results to',
-                       'limit' => 'Maximum number of results to return',
-                       'from' => 'Show changes since then',
-                       'hideminor' => 'Hide minor changes',
-                       'hidebots' => 'Hide changes made by bots',
-                       'hideanons' => 'Hide changes made by anonymous users',
-                       'hideliu' => 'Hide changes made by registered users',
-                       'hidepatrolled' => 'Hide patrolled changes',
-                       'hidemyself' => 'Hide changes made by yourself',
-                       'tagfilter' => 'Filter by tag',
-                       'target' => 'Show only changes on pages linked from this page',
-                       'showlinkedto' => 'Show changes on pages linked to the selected page instead',
-                       'categories' => 'Show only changes on pages in all of these categories',
-                       'categories_any' => 'Show only changes on pages in any of the categories instead',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns a recent changes feed';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=feedrecentchanges',
-                       'api.php?action=feedrecentchanges&days=30'
+                       'action=feedrecentchanges'
+                               => 'apihelp-feedrecentchanges-example-simple',
+                       'action=feedrecentchanges&days=30'
+                               => 'apihelp-feedrecentchanges-example-30days',
                );
        }
 }
index 6aef8fc..84ee228 100644 (file)
@@ -219,50 +219,42 @@ class ApiFeedWatchlist extends ApiBase {
                        ),
                        'linktosections' => false,
                );
+
+               $copyParams = array(
+                       'allrev' => 'allrev',
+                       'owner' => 'wlowner',
+                       'token' => 'wltoken',
+                       'show' => 'wlshow',
+                       'type' => 'wltype',
+                       'excludeuser' => 'wlexcludeuser',
+               );
                if ( $flags ) {
                        $wlparams = $this->getWatchlistModule()->getAllowedParams( $flags );
-                       $ret['allrev'] = $wlparams['allrev'];
-                       $ret['wlowner'] = $wlparams['owner'];
-                       $ret['wltoken'] = $wlparams['token'];
-                       $ret['wlshow'] = $wlparams['show'];
-                       $ret['wltype'] = $wlparams['type'];
-                       $ret['wlexcludeuser'] = $wlparams['excludeuser'];
+                       foreach ( $copyParams as $from => $to ) {
+                               $p = $wlparams[$from];
+                               if ( !is_array( $p ) ) {
+                                       $p = array( ApiBase::PARAM_DFLT => $p );
+                               }
+                               if ( !isset( $p[ApiBase::PARAM_HELP_MSG] ) ) {
+                                       $p[ApiBase::PARAM_HELP_MSG] = "apihelp-query+watchlist-param-$from";
+                               }
+                               $ret[$to] = $p;
+                       }
                } else {
-                       $ret['allrev'] = null;
-                       $ret['wlowner'] = null;
-                       $ret['wltoken'] = null;
-                       $ret['wlshow'] = null;
-                       $ret['wltype'] = null;
-                       $ret['wlexcludeuser'] = null;
+                       foreach ( $copyParams as $from => $to ) {
+                               $ret[$to] = null;
+                       }
                }
 
                return $ret;
        }
 
-       public function getParamDescription() {
-               $wldescr = $this->getWatchlistModule()->getParamDescription();
-
-               return array(
-                       'feedformat' => 'The format of the feed',
-                       'hours' => 'List pages modified within this many hours from now',
-                       'linktosections' => 'Link directly to changed sections if possible',
-                       'allrev' => $wldescr['allrev'],
-                       'wlowner' => $wldescr['owner'],
-                       'wltoken' => $wldescr['token'],
-                       'wlshow' => $wldescr['show'],
-                       'wltype' => $wldescr['type'],
-                       'wlexcludeuser' => $wldescr['excludeuser'],
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns a watchlist feed.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=feedwatchlist',
-                       'api.php?action=feedwatchlist&allrev=&hours=6'
+                       'action=feedwatchlist'
+                               => 'apihelp-feedwatchlist-example-default',
+                       'action=feedwatchlist&allrev=&hours=6'
+                               => 'apihelp-feedwatchlist-example-all6hrs',
                );
        }
 
index f518e17..02147fa 100644 (file)
@@ -135,29 +135,15 @@ class ApiFileRevert extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'filename' => 'Target filename without the File: prefix',
-                       'comment' => 'Upload comment',
-                       'archivename' => 'Archive name of the revision to revert to',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Revert a file to an old version.'
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=filerevert&filename=Wiki.png&comment=Revert&' .
+                       'action=filerevert&filename=Wiki.png&comment=Revert&' .
                                'archivename=20110305152740!Wiki.png&token=123ABC'
-                               => 'Revert Wiki.png to the version of 20110305152740',
+                               => 'apihelp-filerevert-example-revert',
                );
        }
 }
index 8ae05e0..9be2d92 100644 (file)
@@ -369,6 +369,17 @@ class ApiHelp extends ApiBase {
                                                $info[] = $context->msg( 'api-help-param-required' )->parse();
                                        }
 
+                                       // Custom info?
+                                       if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+                                               foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+                                                       $tag = array_shift( $i );
+                                                       $info[] = $context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+                                                               ->numParams( count( $i ) )
+                                                               ->params( $context->getLanguage()->commaList( $i ) )
+                                                               ->parse();
+                                               }
+                                       }
+
                                        // Type documentation
                                        if ( !isset( $settings[ApiBase::PARAM_TYPE] ) ) {
                                                $dflt = isset( $settings[ApiBase::PARAM_DFLT] )
@@ -390,7 +401,16 @@ class ApiHelp extends ApiBase {
 
                                                if ( is_array( $type ) ) {
                                                        $count = count( $type );
-                                                       $type = array_map( 'wfEscapeWikiText', $type );
+                                                       $links = isset( $settings[ApiBase::PARAM_VALUE_LINKS] )
+                                                               ? $settings[ApiBase::PARAM_VALUE_LINKS]
+                                                               : array();
+                                                       $type = array_map( function ( $v ) use ( $links ) {
+                                                               $ret = wfEscapeWikiText( $v );
+                                                               if ( isset( $links[$v] ) ) {
+                                                                       $ret = "[[{$links[$v]}|$ret]]";
+                                                               }
+                                                               return $ret;
+                                                       }, $type );
                                                        $i = array_search( '', $type, true );
                                                        if ( $i === false ) {
                                                                $type = $context->getLanguage()->commaList( $type );
@@ -632,10 +652,14 @@ class ApiHelp extends ApiBase {
 
        public function getExamplesMessages() {
                return array(
-                       'action=help' => 'apihelp-help-example-main',
-                       'action=help&recursivesubmodules=1' => 'apihelp-help-example-recursive',
-                       'action=help&modules=help' => 'apihelp-help-example-help',
-                       'action=help&modules=query+info|query+categorymembers' => 'apihelp-help-example-query',
+                       'action=help'
+                               => 'apihelp-help-example-main',
+                       'action=help&recursivesubmodules=1'
+                               => 'apihelp-help-example-recursive',
+                       'action=help&modules=help'
+                               => 'apihelp-help-example-help',
+                       'action=help&modules=query+info|query+categorymembers'
+                               => 'apihelp-help-example-query',
                );
        }
 
index 20396dd..6aa9c22 100644 (file)
@@ -184,7 +184,9 @@ class ApiImageRotate extends ApiBase {
                                ApiBase::PARAM_TYPE => array( '90', '180', '270' ),
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -193,26 +195,17 @@ class ApiImageRotate extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               $pageSet = $this->getPageSet();
-
-               return $pageSet->getFinalParamDescription() + array(
-                       'rotation' => 'Degrees to rotate image clockwise',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return 'Rotate one or more images.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=imagerotate&titles=Example.jpg&rotation=90&token=123ABC',
+                       'action=imagerotate&titles=File:Example.jpg&rotation=90&token=123ABC'
+                               => 'apihelp-imagerotate-example-simple',
+                       'action=imagerotate&generator=categorymembers&gcmtitle=Category:Flip&gcmtype=file&' .
+                               'rotation=180&token=123ABC'
+                               => 'apihelp-imagerotate-example-generator',
                );
        }
 }
index b11348e..8b7802c 100644 (file)
@@ -116,36 +116,15 @@ class ApiImport extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'summary' => 'Import summary',
-                       'xml' => 'Uploaded XML file',
-                       'interwikisource' => 'For interwiki imports: wiki to import from',
-                       'interwikipage' => 'For interwiki imports: page to import',
-                       'fullhistory' => 'For interwiki imports: import the full history, not just the current version',
-                       'templates' => 'For interwiki imports: import all included templates as well',
-                       'namespace' => 'For interwiki imports: import to this namespace',
-                       'rootpage' => 'Import as subpage of this page',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Import a page from another wiki, or an XML file.',
-                       'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
-                       'sending a file for the "xml" parameter.'
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
+                       'action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
                                'namespace=100&fullhistory=&token=123ABC'
-                               => 'Import [[meta:Help:Parserfunctions]] to namespace 100 with full history',
+                               => 'apihelp-import-example-import',
                );
        }
 
index 976f4c1..eae8ebc 100644 (file)
@@ -184,28 +184,12 @@ class ApiLogin extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'name' => 'User Name',
-                       'password' => 'Password',
-                       'domain' => 'Domain (optional)',
-                       'token' => 'Login token obtained in first request',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Log in and get the authentication tokens.',
-                       'In the event of a successful log-in, a cookie will be attached to your session.',
-                       'In the event of a failed log-in, you will not be able to attempt another log-in',
-                       'through this method for 5 seconds. This is to prevent password guessing by',
-                       'automated password crackers.'
-               );
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=login&lgname=user&lgpassword=password'
+                       'action=login&lgname=user&lgpassword=password'
+                               => 'apihelp-login-example-gettoken',
+                       'action=login&lgname=user&lgpassword=password&lgtoken=123ABC'
+                               => 'apihelp-login-example-login',
                );
        }
 
index 324f4b2..bfdad34 100644 (file)
@@ -46,21 +46,10 @@ class ApiLogout extends ApiBase {
                return false;
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'Log out and clear session data.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=logout' => 'Log the current user out',
+                       'action=logout'
+                               => 'apihelp-logout-example-logout',
                );
        }
 
index a759c11..c9e898c 100644 (file)
@@ -1158,8 +1158,10 @@ class ApiMain extends ApiBase {
        /** @see ApiBase::getExamplesMessages() */
        public function getExamplesMessages() {
                return array(
-                       'action=help' => 'apihelp-help-example-main',
-                       'action=help&recursivesubmodules=1' => 'apihelp-help-example-recursive',
+                       'action=help'
+                               => 'apihelp-help-example-main',
+                       'action=help&recursivesubmodules=1'
+                               => 'apihelp-help-example-recursive',
                );
        }
 
@@ -1243,87 +1245,6 @@ class ApiMain extends ApiBase {
         * @{
         */
 
-       /**
-        * @deprecated since 1.25
-        * @return array
-        */
-       public function getParamDescription() {
-               return array(
-                       'format' => 'The format of the output',
-                       'action' => 'What action you would like to perform. See below for module help',
-                       'maxlag' => array(
-                               'Maximum lag can be used when MediaWiki is installed on a database replicated cluster.',
-                               'To save actions causing any more site replication lag, this parameter can make the client',
-                               'wait until the replication lag is less than the specified value.',
-                               'In case of a replag error, error code "maxlag" is returned, with the message like',
-                               '"Waiting for $host: $lag seconds lagged\n".',
-                               'See https://www.mediawiki.org/wiki/Manual:Maxlag_parameter for more information',
-                       ),
-                       'smaxage' => 'Set the s-maxage header to this many seconds. Errors are never cached',
-                       'maxage' => 'Set the max-age header to this many seconds. Errors are never cached',
-                       'assert' => 'Verify the user is logged in if set to "user", or has the bot userright if "bot"',
-                       'requestid' => 'Request ID to distinguish requests. This will just be output back to you',
-                       'servedby' => 'Include the hostname that served the request in the ' .
-                               'results. Unconditionally shown on error',
-                       'curtimestamp' => 'Include the current timestamp in the result.',
-                       'origin' => array(
-                               'When accessing the API using a cross-domain AJAX request (CORS), set this to the',
-                               'originating domain. This must be included in any pre-flight request, and',
-                               'therefore must be part of the request URI (not the POST body). This must match',
-                               'one of the origins in the Origin: header exactly, so it has to be set to ',
-                               'something like http://en.wikipedia.org or https://meta.wikimedia.org . If this',
-                               'parameter does not match the Origin: header, a 403 response will be returned. If',
-                               'this parameter matches the Origin: header and the origin is whitelisted, an',
-                               'Access-Control-Allow-Origin header will be set.',
-                       ),
-               );
-       }
-
-       /**
-        * @deprecated since 1.25
-        * @return array
-        */
-       public function getDescription() {
-               return array(
-                       '',
-                       '',
-                       '**********************************************************************************************',
-                       '**                                                                                          **',
-                       '**                This is an auto-generated MediaWiki API documentation page                **',
-                       '**                                                                                          **',
-                       '**                               Documentation and Examples:                                **',
-                       '**                            https://www.mediawiki.org/wiki/API                            **',
-                       '**                                                                                          **',
-                       '**********************************************************************************************',
-                       '',
-                       'Status:                All features shown on this page should be working, but the API',
-                       '                       is still in active development, and may change at any time.',
-                       '                       Make sure to monitor our mailing list for any updates.',
-                       '',
-                       'Erroneous requests:    When erroneous requests are sent to the API, a HTTP header will be sent',
-                       '                       with the key "MediaWiki-API-Error" and then both the value of the',
-                       '                       header and the error code sent back will be set to the same value.',
-                       '',
-                       '                       In the case of an invalid action being passed, these will have a value',
-                       '                       of "unknown_action".',
-                       '',
-                       '                       For more information see https://www.mediawiki.org' .
-                               '/wiki/API:Errors_and_warnings',
-                       '',
-                       'Documentation:         https://www.mediawiki.org/wiki/API:Main_page',
-                       'FAQ                    https://www.mediawiki.org/wiki/API:FAQ',
-                       'Mailing list:          https://lists.wikimedia.org/mailman/listinfo/mediawiki-api',
-                       'Api Announcements:     https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce',
-                       'Bugs & Requests:       https://bugzilla.wikimedia.org/buglist.cgi?component=API&' .
-                               'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts',
-                       '',
-                       '',
-                       '',
-                       '',
-                       '',
-               );
-       }
-
        /**
         * Sets whether the pretty-printer should format *bold* and $italics$
         *
index 04e931d..db0fde3 100644 (file)
@@ -220,37 +220,15 @@ class ApiMove extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'from' => "Title of the page you want to move. Cannot be used together with {$p}fromid",
-                       'fromid' => "Page ID of the page you want to move. Cannot be used together with {$p}from",
-                       'to' => 'Title you want to rename the page to',
-                       'reason' => 'Reason for the move',
-                       'movetalk' => 'Move the talk page, if it exists',
-                       'movesubpages' => 'Move subpages, if applicable',
-                       'noredirect' => 'Don\'t create a redirect',
-                       'watch' => 'Add the page and the redirect to your watchlist',
-                       'unwatch' => 'Remove the page and the redirect from your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'ignorewarnings' => 'Ignore any warnings'
-               );
-       }
-
-       public function getDescription() {
-               return 'Move a page.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
+                       'action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
                                'reason=Misspelled%20title&movetalk=&noredirect='
+                               => 'apihelp-move-example-move',
                );
        }
 
index 7fb045e..4c72677 100644 (file)
@@ -91,23 +91,10 @@ class ApiOpenSearch extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'search' => 'Search string',
-                       'limit' => 'Maximum amount of results to return',
-                       'namespace' => 'Namespaces to search',
-                       'suggest' => 'Do nothing if $wgEnableOpenSearchSuggest is false',
-                       'format' => 'The format of the output',
-               );
-       }
-
-       public function getDescription() {
-               return 'Search the wiki using the OpenSearch protocol.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=opensearch&search=Te'
+                       'action=opensearch&search=Te'
+                               => 'apihelp-opensearch-example-te',
                );
        }
 
index b01dc3e..c804563 100644 (file)
@@ -153,30 +153,6 @@ class ApiOptions extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'reset' => 'Resets preferences to the site defaults',
-                       'resetkinds' => 'List of types of options to reset when the "reset" option is set',
-                       'change' => array( 'List of changes, formatted name=value (e.g. skin=vector), ' .
-                               'value cannot contain pipe characters. If no value is given (not ',
-                               'even an equals sign), e.g., optionname|otheroption|..., the ' .
-                               'option will be reset to its default value'
-                       ),
-                       'optionname' => 'A name of a option which should have an optionvalue set',
-                       'optionvalue' => 'A value of the option specified by the optionname, ' .
-                               'can contain pipe characters',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Change preferences of the current user.',
-                       'Only options which are registered in core or in one of installed extensions,',
-                       'or as options with keys prefixed with \'userjs-\' (intended to be used by user',
-                       'scripts), can be set.'
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
@@ -185,12 +161,15 @@ class ApiOptions extends ApiBase {
                return 'https://www.mediawiki.org/wiki/API:Options';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=options&reset=&token=123ABC',
-                       'api.php?action=options&change=skin=vector|hideminor=1&token=123ABC',
-                       'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&' .
-                               'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
+                       'action=options&reset=&token=123ABC'
+                               => 'apihelp-options-example-reset',
+                       'action=options&change=skin=vector|hideminor=1&token=123ABC'
+                               => 'apihelp-options-example-change',
+                       'action=options&reset=&change=skin=monobook&optionname=nickname&' .
+                               'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC'
+                               => 'apihelp-options-example-complex',
                );
        }
 }
index 3bdecaa..ab705b2 100644 (file)
@@ -1135,26 +1135,46 @@ class ApiPageSet extends ApiBase {
        public function getAllowedParams( $flags = 0 ) {
                $result = array(
                        'titles' => array(
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-titles',
                        ),
                        'pageids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-pageids',
                        ),
                        'revids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-revids',
+                       ),
+                       'generator' => array(
+                               ApiBase::PARAM_TYPE => null,
+                               ApiBase::PARAM_VALUE_LINKS => array(),
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-generator',
+                       ),
+                       'redirects' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => $this->mAllowGenerator
+                                       ? 'api-pageset-param-redirects-generator'
+                                       : 'api-pageset-param-redirects-nogenerator',
+                       ),
+                       'converttitles' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'api-pageset-param-converttitles',
+                                       $this->getLanguage()->commaList( LanguageConverter::$languagesWithVariants ),
+                               ),
                        ),
-                       'redirects' => false,
-                       'converttitles' => false,
                );
-               if ( $this->mAllowGenerator ) {
-                       if ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
-                               $result['generator'] = array(
-                                       ApiBase::PARAM_TYPE => $this->getGenerators()
-                               );
-                       } else {
-                               $result['generator'] = null;
+
+               if ( !$this->mAllowGenerator ) {
+                       unset( $result['generator'] );
+               } elseif ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
+                       $result['generator'][ApiBase::PARAM_TYPE] = $this->getGenerators();
+                       foreach ( $result['generator'][ApiBase::PARAM_TYPE] as $g ) {
+                               $result['generator'][ApiBase::PARAM_TYPE][] = $g;
+                               $result['generator'][ApiBase::PARAM_VALUE_LINKS][$g] = "Special:ApiHelp/query+$g";
                        }
                }
 
@@ -1188,23 +1208,4 @@ class ApiPageSet extends ApiBase {
 
                return self::$generators;
        }
-
-       public function getParamDescription() {
-               return array(
-                       'titles' => 'A list of titles to work on',
-                       'pageids' => 'A list of page IDs to work on',
-                       'revids' => 'A list of revision IDs to work on',
-                       'generator' => array(
-                               'Get the list of pages to work on by executing the specified query module.',
-                               'NOTE: generator parameter names must be prefixed with a \'g\', see examples'
-                       ),
-                       'redirects' => 'Automatically resolve redirects',
-                       'converttitles' => array(
-                               'Convert titles to other variants if necessary. Only works if ' .
-                                       'the wiki\'s content language supports variant conversion.',
-                               'Languages that support variant conversion include ' .
-                                       implode( ', ', LanguageConverter::$languagesWithVariants )
-                       ),
-               );
-       }
 }
index 5965a46..d07907f 100644 (file)
@@ -173,10 +173,11 @@ class ApiParamInfo extends ApiBase {
        private function getModuleInfo( $module ) {
                $result = $this->getResult();
                $ret = array();
+               $path = $module->getModulePath();
 
                $ret['name'] = $module->getModuleName();
                $ret['classname'] = get_class( $module );
-               $ret['path'] = $module->getModulePath();
+               $ret['path'] = $path;
                if ( !$module->isMain() ) {
                        $ret['group'] = $module->getParent()->getModuleManager()->getModuleGroup(
                                $module->getModuleName()
@@ -314,6 +315,29 @@ class ApiParamInfo extends ApiBase {
                        if ( isset( $settings[ApiBase::PARAM_MIN] ) ) {
                                $item['min'] = $settings[ApiBase::PARAM_MIN];
                        }
+
+                       if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+                               $item['info'] = array();
+                               foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+                                       $tag = array_shift( $i );
+                                       $info = array(
+                                               'name' => $tag,
+                                       );
+                                       if ( count( $i ) ) {
+                                               $info['values'] = $i;
+                                               $result->setIndexedTagName( $info['values'], 'v' );
+                                       }
+                                       $this->formatHelpMessages( $info, 'text', array(
+                                               $this->context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+                                                       ->numParams( count( $i ) )
+                                                       ->params( $this->context->getLanguage()->commaList( $i ) )
+                                       ) );
+                                       $result->setSubelements( $info, 'text' );
+                                       $item['info'][] = $info;
+                               }
+                               $result->setIndexedTagName( $item['info'], 'i' );
+                       }
+
                        $ret['parameters'][] = $item;
                }
                $result->setIndexedTagName( $ret['parameters'], 'param' );
@@ -361,26 +385,10 @@ class ApiParamInfo extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'modules' => 'List of module names (values of the action= and format= parameters, or "main"). Can specify submodules with a \'+\'',
-                       'helpformat' => 'Format of help strings',
-
-                       'querymodules' => 'List of query module names (value of prop=, meta= or list= parameter)',
-                       'mainmodule' => 'Get information about the main (top-level) module as well',
-                       'pagesetmodule' => 'Get information about the pageset module ' .
-                               '(providing titles= and friends) as well',
-                       'formatmodules' => 'List of format module names (value of format= parameter)',
-               );
-       }
-
-       public function getDescription() {
-               return 'Obtain information about certain API parameters and errors.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=paraminfo&modules=parse|phpfm|query+allpages|query+siteinfo'
+                       'action=paraminfo&modules=parse|phpfm|query+allpages|query+siteinfo'
+                               => 'apihelp-paraminfo-example-1',
                );
        }
 
index c2ec8d4..d25c87a 100644 (file)
@@ -703,7 +703,12 @@ class ApiParse extends ApiBase {
                        'section' => null,
                        'disablepp' => false,
                        'disableeditsection' => false,
-                       'generatexml' => false,
+                       'generatexml' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-parse-param-generatexml', CONTENT_MODEL_WIKITEXT
+                               ),
+                       ),
                        'preview' => false,
                        'sectionpreview' => false,
                        'disabletoc' => false,
@@ -716,97 +721,16 @@ class ApiParse extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $wikitext = CONTENT_MODEL_WIKITEXT;
-
-               return array(
-                       'text' => "Text to parse. Use {$p}title or {$p}contentmodel to control the content model",
-                       'summary' => 'Summary to parse',
-                       'redirects' => "If the {$p}page or the {$p}pageid parameter is set to a redirect, resolve it",
-                       'title' => "Title of page the text belongs to. " .
-                               "If omitted, {$p}contentmodel must be specified, and \"API\" will be used as the title",
-                       'page' => "Parse the content of this page. Cannot be used together with {$p}text and {$p}title",
-                       'pageid' => "Parse the content of this page. Overrides {$p}page",
-                       'oldid' => "Parse the content of this revision. Overrides {$p}page and {$p}pageid",
-                       'prop' => array(
-                               'Which pieces of information to get',
-                               ' text           - Gives the parsed text of the wikitext',
-                               ' langlinks      - Gives the language links in the parsed wikitext',
-                               ' categories     - Gives the categories in the parsed wikitext',
-                               ' categorieshtml - Gives the HTML version of the categories',
-                               ' links          - Gives the internal links in the parsed wikitext',
-                               ' templates      - Gives the templates in the parsed wikitext',
-                               ' images         - Gives the images in the parsed wikitext',
-                               ' externallinks  - Gives the external links in the parsed wikitext',
-                               ' sections       - Gives the sections in the parsed wikitext',
-                               ' revid          - Adds the revision ID of the parsed page',
-                               ' displaytitle   - Adds the title of the parsed wikitext',
-                               ' headitems      - Gives items to put in the <head> of the page',
-                               ' headhtml       - Gives parsed <head> of the page',
-                               ' modules        - Gives the ResourceLoader modules used on the page',
-                               ' indicators     - Gives the HTML of page status indicators used on the page',
-                               ' iwlinks        - Gives interwiki links in the parsed wikitext',
-                               ' wikitext       - Gives the original wikitext that was parsed',
-                               ' properties     - Gives various properties defined in the parsed wikitext',
-                               ' limitreportdata - Gives the limit report in a structured way.',
-                               "                   Gives no data, when {$p}disablepp is set.",
-                               ' limitreporthtml - Gives the HTML version of the limit report.',
-                               "                   Gives no data, when {$p}disablepp is set.",
-                       ),
-                       'effectivelanglinks' => array(
-                               'Includes language links supplied by extensions',
-                               '(for use with prop=langlinks)',
-                       ),
-                       'pst' => array(
-                               'Do a pre-save transform on the input before parsing it',
-                               "Only valid when used with {$p}text",
-                       ),
-                       'onlypst' => array(
-                               'Do a pre-save transform (PST) on the input, but don\'t parse it',
-                               'Returns the same wikitext, after a PST has been applied.',
-                               "Only valid when used with {$p}text",
-                       ),
-                       'section' => 'Only retrieve the content of this section number',
-                       'disablepp' => 'Disable the PP Report from the parser output',
-                       'disableeditsection' => 'Disable edit section links from the parser output',
-                       'generatexml' => "Generate XML parse tree (requires contentmodel=$wikitext)",
-                       'preview' => 'Parse in preview mode',
-                       'sectionpreview' => 'Parse in section preview mode (enables preview mode too)',
-                       'disabletoc' => 'Disable table of contents in output',
-                       'contentformat' => array(
-                               'Content serialization format used for the input text',
-                               "Only valid when used with {$p}text",
-                       ),
-                       'contentmodel' => array(
-                               "Content model of the input text. If omitted, ${p}title must be specified, " .
-                                       "and default will be the model of the specified ${p}title",
-                               "Only valid when used with {$p}text",
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'Parses content and returns parser output.',
-                       'See the various prop-Modules of action=query to get information from the current' .
-                               'version of a page.',
-                       'There are several ways to specify the text to parse:',
-                       "1) Specify a page or revision, using {$p}page, {$p}pageid, or {$p}oldid.",
-                       "2) Specify content explicitly, using {$p}text, {$p}title, and {$p}contentmodel.",
-                       "3) Specify only a summary to parse. {$p}prop should be given an empty value.",
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=parse&page=Project:Sandbox' => 'Parse a page',
-                       'api.php?action=parse&text={{Project:Sandbox}}&contentmodel=wikitext' => 'Parse wikitext',
-                       'api.php?action=parse&text={{PAGENAME}}&title=Test'
-                               => 'Parse wikitext, specifying the page title',
-                       'api.php?action=parse&summary=Some+[[link]]&prop=' => 'Parse a summary',
+                       'action=parse&page=Project:Sandbox'
+                               => 'apihelp-parse-example-page',
+                       'action=parse&text={{Project:Sandbox}}&contentmodel=wikitext'
+                               => 'apihelp-parse-example-text',
+                       'action=parse&text={{PAGENAME}}&title=Test'
+                               => 'apihelp-parse-example-texttitle',
+                       'action=parse&summary=Some+[[link]]&prop='
+                               => 'apihelp-parse-example-summary',
                );
        }
 
index 8b66781..01bc568 100644 (file)
@@ -86,25 +86,16 @@ class ApiPatrol extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'rcid' => 'Recentchanges ID to patrol',
-                       'revid' => 'Revision ID to patrol',
-               );
-       }
-
-       public function getDescription() {
-               return 'Patrol a page or revision.';
-       }
-
        public function needsToken() {
                return 'patrol';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=patrol&token=123ABC&rcid=230672766',
-                       'api.php?action=patrol&token=123ABC&revid=230672766'
+                       'action=patrol&token=123ABC&rcid=230672766'
+                               => 'apihelp-patrol-example-rcid',
+                       'action=patrol&token=123ABC&revid=230672766'
+                               => 'apihelp-patrol-example-revid',
                );
        }
 
index a3d12b7..f5786e8 100644 (file)
@@ -175,43 +175,21 @@ class ApiProtect extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid",
-                       'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title",
-                       'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)',
-                       'expiry' => array(
-                               'Expiry timestamps. If only one timestamp is ' .
-                                       'set, it\'ll be used for all protections.',
-                               'Use \'infinite\', \'indefinite\', \'infinity\' or \'never\', for a never-expiring protection.'
-                       ),
-                       'reason' => 'Reason for (un)protecting',
-                       'cascade' => array(
-                               'Enable cascading protection (i.e. protect pages included in this page)',
-                               'Ignored if not all protection levels are \'sysop\' or \'protect\''
-                       ),
-                       'watch' => 'If set, add the page being (un)protected to your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return 'Change the protection level of a page.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=protect&title=Main%20Page&token=123ABC&' .
-                               'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never',
-                       'api.php?action=protect&title=Main%20Page&token=123ABC&' .
+                       'action=protect&title=Main%20Page&token=123ABC&' .
+                               'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never'
+                               => 'apihelp-protect-example-protect',
+                       'action=protect&title=Main%20Page&token=123ABC&' .
                                'protections=edit=all|move=all&reason=Lifting%20restrictions'
+                               => 'apihelp-protect-example-unprotect',
+                       'action=protect&title=Main%20Page&token=123ABC&' .
+                               'protections=&reason=Lifting%20restrictions'
+                               => 'apihelp-protect-example-unprotect2',
                );
        }
 
index 7667b23..a69a0d5 100644 (file)
@@ -133,7 +133,9 @@ class ApiPurge extends ApiBase {
                $result = array(
                        'forcelinkupdate' => false,
                        'forcerecursivelinkupdate' => false,
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -142,25 +144,12 @@ class ApiPurge extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription()
-                       + array(
-                               'forcelinkupdate' => 'Update the links tables',
-                               'forcerecursivelinkupdate' => 'Update the links table, and update ' .
-                                       'the links tables for any page that uses this page as a template',
-                               'continue' => 'When more results are available, use this to continue',
-                       );
-       }
-
-       public function getDescription() {
-               return array( 'Purge the cache for the given titles.',
-                       'Requires a POST request if the user is not logged in.'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=purge&titles=Main_Page|API' => 'Purge the "Main Page" and the "API" page',
+                       'action=purge&titles=Main_Page|API'
+                               => 'apihelp-purge-example-simple',
+                       'action=purge&generator=allpages&gapnamespace=0&gaplimit=10'
+                               => 'apihelp-purge-example-generator',
                );
        }
 
index a8e20dc..aa0612f 100644 (file)
@@ -597,44 +597,13 @@ class ApiQuery extends ApiBase {
                return true;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription() + array(
-                       'prop' => 'Which properties to get for the titles/revisions/pageids. ' .
-                               'Module help is available below',
-                       'list' => 'Which lists to get. Module help is available below',
-                       'meta' => 'Which metadata to get about the site. Module help is available below',
-                       'indexpageids' => 'Include an additional pageids section listing all returned page IDs',
-                       'export' => 'Export the current revisions of all given or generated pages',
-                       'exportnowrap' => 'Return the export XML without wrapping it in an ' .
-                               'XML result (same format as Special:Export). Can only be used with export',
-                       'iwurl' => 'Whether to get the full URL if the title is an interwiki link',
-                       'continue' => array(
-                               'When present, formats query-continue as key-value pairs that ' .
-                                       'should simply be merged into the original request.',
-                               'This parameter must be set to an empty string in the initial query.',
-                               'This parameter is recommended for all new development, and ' .
-                                       'will be made default in the next API version.'
-                       ),
-                       'rawcontinue' => 'Currently ignored. In the future, \'continue=\' will become the ' .
-                               'default and this will be needed to receive the raw query-continue data.',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Query API module allows applications to get needed pieces of data ' .
-                               'from the MediaWiki databases,',
-                       'and is loosely based on the old query.php interface.',
-                       'All data modifications will first have to use query to acquire a ' .
-                               'token to prevent abuse from malicious sites.'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=revisions&meta=siteinfo&' .
-                               'titles=Main%20Page&rvprop=user|comment&continue=',
-                       'api.php?action=query&generator=allpages&gapprefix=API/&prop=revisions&continue=',
+                       'action=query&prop=revisions&meta=siteinfo&' .
+                               'titles=Main%20Page&rvprop=user|comment&continue='
+                               => 'apihelp-query-example-revisions',
+                       'action=query&generator=allpages&gapprefix=API/&prop=revisions&continue='
+                               => 'apihelp-query-example-allpages',
                );
        }
 
index 79fab72..36c2088 100644 (file)
@@ -156,7 +156,9 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'to' => null,
                        'prefix' => null,
                        'dir' => array(
@@ -189,32 +191,12 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The category to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The category to stop enumerating at',
-                       'prefix' => 'Search for all category titles that begin with this value',
-                       'dir' => 'Direction to sort in',
-                       'min' => 'Minimum number of category members',
-                       'max' => 'Maximum number of category members',
-                       'limit' => 'How many categories to return',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' size    - Adds number of pages in the category',
-                               ' hidden  - Tags categories that are hidden with __HIDDENCAT__',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Enumerate all categories.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allcategories&acprop=size',
-                       'api.php?action=query&generator=allcategories&gacprefix=List&prop=info',
+                       'action=query&list=allcategories&acprop=size'
+                               => 'apihelp-query+allcategories-example-size',
+                       'action=query&generator=allcategories&gacprefix=List&prop=info'
+                               => 'apihelp-query+allcategories-example-generator',
                );
        }
 
index 9dc5f69..95ad6ef 100644 (file)
@@ -300,7 +300,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'sort' => array(
                                ApiBase::PARAM_DFLT => 'name',
                                ApiBase::PARAM_TYPE => array(
@@ -321,7 +321,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        ),
                        'from' => null,
                        'to' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
@@ -353,7 +355,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                        'nobots'
                                )
                        ),
-                       'mime' => null,
+                       'mime' => array(
+                               ApiBase::PARAM_DFLT => null,
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -362,57 +366,26 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                );
-       }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['mime'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
 
-               return array(
-                       'sort' => 'Property to sort by',
-                       'dir' => 'The direction in which to list',
-                       'from' => "The image title to start enumerating from. Can only be used with {$p}sort=name",
-                       'to' => "The image title to stop enumerating at. Can only be used with {$p}sort=name",
-                       'continue' => 'When more results are available, use this to continue',
-                       'start' => "The timestamp to start enumerating from. Can only be used with {$p}sort=timestamp",
-                       'end' => "The timestamp to end enumerating. Can only be used with {$p}sort=timestamp",
-                       'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
-                       'prefix' => "Search for all image titles that begin with this " .
-                               "value. Can only be used with {$p}sort=name",
-                       'minsize' => 'Limit to images with at least this many bytes',
-                       'maxsize' => 'Limit to images with at most this many bytes',
-                       'sha1' => "SHA1 hash of image. Overrides {$p}sha1base36",
-                       'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
-                       'user' => "Only return files uploaded by this user. Can only be used " .
-                               "with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
-                       'filterbots' => "How to filter files uploaded by bots. Can only be " .
-                               "used with {$p}sort=timestamp. Cannot be used together with {$p}user",
-                       'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
-                       'limit' => 'How many images in total to return',
-               );
+               return $ret;
        }
 
        private $propertyFilter = array( 'archivename', 'thumbmime', 'uploadwarning' );
 
-       public function getDescription() {
-               return 'Enumerate all images sequentially.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allimages&aifrom=B' => array(
-                               'Simple Use',
-                               'Show a list of files starting at the letter "B"',
-                       ),
-                       'api.php?action=query&list=allimages&aiprop=user|timestamp|url&' .
-                               'aisort=timestamp&aidir=older' => array(
-                               'Simple Use',
-                               'Show a list of recently uploaded files similar to Special:NewFiles',
-                       ),
-                       'api.php?action=query&generator=allimages&gailimit=4&' .
-                               'gaifrom=T&prop=imageinfo' => array(
-                               'Using as Generator',
-                               'Show info about 4 files starting at the letter "T"',
-                       ),
+                       'action=query&list=allimages&aifrom=B'
+                               => 'apihelp-query+allimages-example-B',
+                       'action=query&list=allimages&aiprop=user|timestamp|url&' .
+                               'aisort=timestamp&aidir=older'
+                               => 'apihelp-query+allimages-example-recent',
+                       'action=query&generator=allimages&gailimit=4&' .
+                               'gaifrom=T&prop=imageinfo'
+                               => 'apihelp-query+allimages-example-generator',
                );
        }
 
index 903dee4..075d199 100644 (file)
  */
 class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
-       private $table, $tablePrefix, $indexTag,
-               $description, $descriptionWhat, $descriptionTargets, $descriptionLinking;
+       private $table, $tablePrefix, $indexTag;
        private $fieldTitle = 'title';
        private $dfltNamespace = NS_MAIN;
        private $hasNamespace = true;
        private $useIndex = null;
-       private $props = array(), $propHelp = array();
+       private $props = array();
 
        public function __construct( ApiQuery $query, $moduleName ) {
                switch ( $moduleName ) {
@@ -47,10 +46,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->tablePrefix = 'pl_';
                                $this->useIndex = 'pl_namespace';
                                $this->indexTag = 'l';
-                               $this->description = 'Enumerate all links that point to a given namespace';
-                               $this->descriptionWhat = 'link';
-                               $this->descriptionTargets = 'linked titles';
-                               $this->descriptionLinking = 'linking';
                                break;
                        case 'alltransclusions':
                                $prefix = 'at';
@@ -59,11 +54,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->dfltNamespace = NS_TEMPLATE;
                                $this->useIndex = 'tl_namespace';
                                $this->indexTag = 't';
-                               $this->description =
-                                       'List all transclusions (pages embedded using {{x}}), including non-existing';
-                               $this->descriptionWhat = 'transclusion';
-                               $this->descriptionTargets = 'transcluded titles';
-                               $this->descriptionLinking = 'transcluding';
                                break;
                        case 'allfileusages':
                                $prefix = 'af';
@@ -73,28 +63,16 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->dfltNamespace = NS_FILE;
                                $this->hasNamespace = false;
                                $this->indexTag = 'f';
-                               $this->description = 'List all file usages, including non-existing';
-                               $this->descriptionWhat = 'file';
-                               $this->descriptionTargets = 'file titles';
-                               $this->descriptionLinking = 'using';
                                break;
                        case 'allredirects':
                                $prefix = 'ar';
                                $this->table = 'redirect';
                                $this->tablePrefix = 'rd_';
                                $this->indexTag = 'r';
-                               $this->description = 'List all redirects to a namespace';
-                               $this->descriptionWhat = 'redirect';
-                               $this->descriptionTargets = 'target pages';
-                               $this->descriptionLinking = 'redirecting';
                                $this->props = array(
                                        'fragment' => 'rd_fragment',
                                        'interwiki' => 'rd_interwiki',
                                );
-                               $this->propHelp = array(
-                                       ' fragment - Adds the fragment from the redirect, if any',
-                                       ' interwiki - Adds the interwiki prefix from the redirect, if any',
-                               );
                                break;
                        default:
                                ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
@@ -262,7 +240,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                $allowedParams = array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'from' => null,
                        'to' => null,
                        'prefix' => null,
@@ -300,59 +280,20 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                return $allowedParams;
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $what = $this->descriptionWhat;
-               $targets = $this->descriptionTargets;
-               $linking = $this->descriptionLinking;
-               $paramDescription = array(
-                       'from' => "The title of the $what to start enumerating from",
-                       'to' => "The title of the $what to stop enumerating at",
-                       'prefix' => "Search for all $targets that begin with this value",
-                       'unique' => array(
-                               "Only show distinct $targets. Cannot be used with {$p}prop=" .
-                                       join( '|', array_keys( array( 'ids' => 1 ) + $this->props ) ) . '.',
-                               'When used as a generator, yields target pages instead of source pages.',
-                       ),
-                       'prop' => array(
-                               'What pieces of information to include',
-                               " ids      - Adds the pageid of the $linking page (Cannot be used with {$p}unique)",
-                               " title    - Adds the title of the $what",
-                       ),
-                       'namespace' => 'The namespace to enumerate',
-                       'limit' => 'How many total items to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'dir' => 'The direction in which to list',
-               );
-               foreach ( $this->propHelp as $help ) {
-                       $paramDescription['prop'][] = "$help (Cannot be used with {$p}unique)";
-               }
-               if ( !$this->hasNamespace ) {
-                       unset( $paramDescription['namespace'] );
-               }
-
-               return $paramDescription;
-       }
-
-       public function getDescription() {
-               return $this->description;
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                $p = $this->getModulePrefix();
                $name = $this->getModuleName();
-               $what = $this->descriptionWhat;
-               $targets = $this->descriptionTargets;
+               $path = $this->getModulePath();
 
                return array(
-                       "api.php?action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
-                               => "List $targets with page ids they are from, including missing ones. Start at B",
-                       "api.php?action=query&list={$name}&{$p}unique=&{$p}from=B"
-                               => "List unique $targets",
-                       "api.php?action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
-                               => "Gets all $targets, marking the missing ones",
-                       "api.php?action=query&generator={$name}&g{$p}from=B"
-                               => "Gets pages containing the {$what}s",
+                       "action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
+                               => "apihelp-$path-example-B",
+                       "action=query&list={$name}&{$p}unique=&{$p}from=B"
+                               => "apihelp-$path-example-unique",
+                       "action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
+                               => "apihelp-$path-example-unique-generator",
+                       "action=query&generator={$name}&g{$p}from=B"
+                               => "apihelp-$path-example-generator",
                );
        }
 
index a75a16f..7e0ceff 100644 (file)
@@ -235,35 +235,12 @@ class ApiQueryAllMessages extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'messages' => 'Which messages to output. "*" (default) means all messages',
-                       'prop' => 'Which properties to get',
-                       'enableparser' => array( 'Set to enable parser, will preprocess the wikitext of message',
-                               'Will substitute magic words, handle templates etc.' ),
-                       'nocontent' => 'If set, do not include the content of the messages in the output.',
-                       'includelocal' => array( "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.",
-                               "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
-                       ),
-                       'title' => 'Page name to use as context when parsing message (for enableparser option)',
-                       'args' => 'Arguments to be substituted into message',
-                       'prefix' => 'Return messages with this prefix',
-                       'filter' => 'Return only messages with names that contain this string',
-                       'customised' => 'Return only messages in this customisation state',
-                       'lang' => 'Return messages in this language',
-                       'from' => 'Return messages starting at this message',
-                       'to' => 'Return messages ending at this message',
-               );
-       }
-
-       public function getDescription() {
-               return 'Return messages from this site.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&meta=allmessages&amprefix=ipb-',
-                       'api.php?action=query&meta=allmessages&ammessages=august|mainpage&amlang=de',
+                       'action=query&meta=allmessages&amprefix=ipb-'
+                               => 'apihelp-query+allmessages-example-ipb',
+                       'action=query&meta=allmessages&ammessages=august|mainpage&amlang=de'
+                               => 'apihelp-query+allmessages-example-de',
                );
        }
 
index b7bd65a..d7d71b3 100644 (file)
@@ -227,7 +227,9 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'to' => null,
                        'prefix' => null,
                        'namespace' => array(
@@ -297,54 +299,15 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'from' => 'The page title to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The page title to stop enumerating at',
-                       'prefix' => 'Search for all page titles that begin with this value',
-                       'namespace' => 'The namespace to enumerate',
-                       'filterredir' => 'Which pages to list',
-                       'dir' => 'The direction in which to list',
-                       'minsize' => 'Limit to pages with at least this many bytes',
-                       'maxsize' => 'Limit to pages with at most this many bytes',
-                       'prtype' => 'Limit to protected pages only',
-                       'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
-                       'prfiltercascade'
-                               => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
-                       'filterlanglinks' => array(
-                               'Filter based on whether a page has langlinks',
-                               'Note that this may not consider langlinks added by extensions.',
-                       ),
-                       'limit' => 'How many total pages to return.',
-                       'prexpiry' => array(
-                               'Which protection expiry to filter the page on',
-                               ' indefinite - Get only pages with indefinite protection expiry',
-                               ' definite - Get only pages with a definite (specific) protection expiry',
-                               ' all - Get pages with any protections expiry'
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Enumerate all pages sequentially in a given namespace.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allpages&apfrom=B' => array(
-                               'Simple Use',
-                               'Show a list of pages starting at the letter "B"',
-                       ),
-                       'api.php?action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info' => array(
-                               'Using as Generator',
-                               'Show info about 4 pages starting at the letter "T"',
-                       ),
-                       'api.php?action=query&generator=allpages&gaplimit=2&' .
+                       'action=query&list=allpages&apfrom=B'
+                               => 'apihelp-query+allpages-example-B',
+                       'action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info'
+                               => 'apihelp-query+allpages-example-generator',
+                       'action=query&generator=allpages&gaplimit=2&' .
                                'gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content'
-                               => array( 'Show content of first 2 non-redirect pages beginning at "Re"' )
+                               => 'apihelp-query+allpages-example-generator-revisions',
                );
        }
 
index e1cc75a..d9a173d 100644 (file)
@@ -352,43 +352,20 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'witheditsonly' => false,
-                       'activeusers' => false,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The user name to start enumerating from',
-                       'to' => 'The user name to stop enumerating at',
-                       'prefix' => 'Search for all users that begin with this value',
-                       'dir' => 'Direction to sort in',
-                       'group' => 'Limit users to given group name(s)',
-                       'excludegroup' => 'Exclude users in given group name(s)',
-                       'rights' => 'Limit users to given right(s) (does not include rights ' .
-                               'granted by implicit or auto-promoted groups like *, user, or autoconfirmed)',
-                       'prop' => array(
-                               'What pieces of information to include.',
-                               ' blockinfo      - Adds the information about a current block on the user',
-                               ' groups         - Lists groups that the user is in. This uses ' .
-                                       'more server resources and may return fewer results than the limit',
-                               ' implicitgroups - Lists all the groups the user is automatically in',
-                               ' rights         - Lists rights that the user has',
-                               ' editcount      - Adds the edit count of the user',
-                               ' registration   - Adds the timestamp of when the user registered if available (may be blank)',
+                       'activeusers' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+allusers-param-activeusers',
+                                       $this->getConfig()->get( 'ActiveUserDays' )
+                               ),
                        ),
-                       'limit' => 'How many total user names to return',
-                       'witheditsonly' => 'Only list users who have made edits',
-                       'activeusers' => "Only list users active in the last {$this->getConfig()->get( 'ActiveUserDays' )} days(s)"
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate all registered users.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allusers&aufrom=Y',
+                       'action=query&list=allusers&aufrom=Y'
+                               => 'apihelp-query+allusers-example-Y',
                );
        }
 
index f00a6e7..a0786b0 100644 (file)
@@ -512,7 +512,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        'pageid' => array(
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
@@ -548,59 +550,25 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                return $retval;
        }
 
-       public function getParamDescription() {
-               $retval = array(
-                       'title' => "Title to search. Cannot be used together with {$this->bl_code}pageid",
-                       'pageid' => "Pageid to search. Cannot be used together with {$this->bl_code}title",
-                       'continue' => 'When more results are available, use this to continue',
-                       'namespace' => 'The namespace to enumerate',
-                       'dir' => 'The direction in which to list',
-               );
-               if ( $this->getModuleName() != 'embeddedin' ) {
-                       return array_merge( $retval, array(
-                               'redirect' => 'If linking page is a redirect, find all pages ' .
-                                       'that link to that redirect as well. Maximum limit is halved.',
-                               'filterredir' => 'How to filter for redirects. If set to ' .
-                                       "nonredirects when {$this->bl_code}redirect is enabled, " .
-                                       'this is only applied to the second level',
-                               'limit' => 'How many total pages to return. If ' .
-                                       "{$this->bl_code}redirect is enabled, limit applies to each " .
-                                       'level separately (which means you may get up to 2 * limit results).'
-                       ) );
-               }
-
-               return array_merge( $retval, array(
-                       'filterredir' => 'How to filter for redirects',
-                       'limit' => 'How many total pages to return'
-               ) );
-       }
-
-       public function getDescription() {
-               switch ( $this->getModuleName() ) {
-                       case 'backlinks':
-                               return 'Find all pages that link to the given page.';
-                       case 'embeddedin':
-                               return 'Find all pages that embed (transclude) the given title.';
-                       case 'imageusage':
-                               return 'Find all pages that use the given image title.';
-                       default:
-                               ApiBase::dieDebug( __METHOD__, 'Unknown module name.' );
-               }
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                static $examples = array(
                        'backlinks' => array(
-                               'api.php?action=query&list=backlinks&bltitle=Main%20Page',
-                               'api.php?action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+                               'action=query&list=backlinks&bltitle=Main%20Page'
+                                       => 'apihelp-query+backlinks-example-simple',
+                               'action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+                                       => 'apihelp-query+backlinks-example-generator',
                        ),
                        'embeddedin' => array(
-                               'api.php?action=query&list=embeddedin&eititle=Template:Stub',
-                               'api.php?action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+                               'action=query&list=embeddedin&eititle=Template:Stub'
+                                       => 'apihelp-query+embeddedin-example-simple',
+                               'action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+                                       => 'apihelp-query+embeddedin-example-generator',
                        ),
                        'imageusage' => array(
-                               'api.php?action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg',
-                               'api.php?action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+                               'action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg'
+                                       => 'apihelp-query+imageusage-example-simple',
+                               'action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+                                       => 'apihelp-query+imageusage-example-generator',
                        )
                );
 
index 2458a26..7804dbf 100644 (file)
@@ -40,15 +40,13 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        'code' => 'rd',
                        'prefix' => 'rd',
                        'linktable' => 'redirect',
-                       'what' => 'redirects to',
-                       'description' => 'Returns all redirects to the given pages.',
                        'props' => array(
-                               'fragment' => 'Fragment of each redirect, if any',
+                               'fragment',
                        ),
                        'showredirects' => false,
                        'show' => array(
-                               'fragment' => 'Only show redirects with a fragment',
-                               '!fragment' => 'Only show redirects without a fragment',
+                               'fragment',
+                               '!fragment',
                        ),
                ),
                'linkshere' => array(
@@ -56,8 +54,6 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        'prefix' => 'pl',
                        'linktable' => 'pagelinks',
                        'from_namespace' => true,
-                       'what' => 'pages linking to',
-                       'description' => 'Find all pages that link to the given pages.',
                        'showredirects' => true,
                ),
                'transcludedin' => array(
@@ -65,8 +61,6 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        'prefix' => 'tl',
                        'linktable' => 'templatelinks',
                        'from_namespace' => true,
-                       'what' => 'pages transcluding',
-                       'description' => 'Find all pages that transclude the given pages.',
                        'showredirects' => true,
                ),
                'fileusage' => array(
@@ -75,9 +69,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        'linktable' => 'imagelinks',
                        'from_namespace' => true,
                        'to_namespace' => NS_FILE,
-                       'what' => 'pages using',
                        'exampletitle' => 'File:Example.jpg',
-                       'description' => 'Find all pages that use the given files.',
                        'showredirects' => true,
                ),
        );
@@ -348,6 +340,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace',
                        ),
+                       'show' => null, // Will be filled/removed below
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -355,16 +348,24 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
 
+               if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
+                       );
+               }
+
                if ( !empty( $settings['showredirects'] ) ) {
                        $ret['prop'][ApiBase::PARAM_TYPE][] = 'redirect';
                        $ret['prop'][ApiBase::PARAM_DFLT] .= '|redirect';
                }
                if ( isset( $settings['props'] ) ) {
                        $ret['prop'][ApiBase::PARAM_TYPE] = array_merge(
-                               $ret['prop'][ApiBase::PARAM_TYPE], array_keys( $settings['props'] )
+                               $ret['prop'][ApiBase::PARAM_TYPE], $settings['props']
                        );
                }
 
@@ -374,93 +375,32 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        $show[] = '!redirect';
                }
                if ( isset( $settings['show'] ) ) {
-                       $show = array_merge( $show, array_keys( $settings['show'] ) );
+                       $show = array_merge( $show, $settings['show'] );
                }
                if ( $show ) {
                        $ret['show'] = array(
                                ApiBase::PARAM_TYPE => $show,
                                ApiBase::PARAM_ISMULTI => true,
                        );
+               } else {
+                       unset( $ret['show'] );
                }
 
                return $ret;
        }
 
-       public function getParamDescription() {
-               $settings = self::$settings[$this->getModuleName()];
-               $p = $this->getModulePrefix();
-
-               $ret = array(
-                       'prop' => array(
-                               'Which properties to get:',
-                       ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                       ),
-                       'namespace' => 'Only include pages in these namespaces',
-                       'limit' => 'How many to return',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-
-               if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
-                       $ret['namespace'] = array(
-                               $ret['namespace'],
-                               "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
-                               'returned before continuing; in extreme cases, zero results may be returned.',
-                       );
-                       if ( isset( $ret['type'] ) ) {
-                               $ret['namespace'][] = "Note that you can use {$p}type=subcat or {$p}type=file " .
-                                       "instead of {$p}namespace=14 or 6.";
-                       }
-               }
-
-               $props = array(
-                       'pageid' => 'Adds the ID of page',
-                       'title' => 'Adds the title and namespace ID of the page',
-               );
-               if ( !empty( $settings['showredirects'] ) ) {
-                       $props['redirect'] = 'Indicate if the page is a redirect';
-               }
-               if ( isset( $settings['props'] ) ) {
-                       $props += $settings['props'];
-               }
-               foreach ( $props as $k => $v ) {
-                       $ret['props'][] = sprintf( "%-9s - %s", $k, $v );
-               }
-
-               $show = array();
-               if ( !empty( $settings['showredirects'] ) ) {
-                       $show += array(
-                               'redirect' => 'Only show redirects',
-                               '!redirect' => 'Only show non-redirects',
-                       );
-               }
-               if ( isset( $settings['show'] ) ) {
-                       $show += $settings['show'];
-               }
-               foreach ( $show as $k => $v ) {
-                       $ret['show'][] = sprintf( "%-9s - %s", $k, $v );
-               }
-
-               return $ret;
-       }
-
-       public function getDescription() {
-               return self::$settings[$this->getModuleName()]['description'];
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                $settings = self::$settings[$this->getModuleName()];
                $name = $this->getModuleName();
-               $what = $settings['what'];
+               $path = $this->getModulePath();
                $title = isset( $settings['exampletitle'] ) ? $settings['exampletitle'] : 'Main Page';
                $etitle = rawurlencode( $title );
 
                return array(
-                       "api.php?action=query&prop={$name}&titles={$etitle}"
-                               => "Get a list of $what [[$title]]",
-                       "api.php?action=query&generator={$name}&titles={$etitle}&prop=info"
-                               => "Get information about $what [[$title]]",
+                       "action=query&prop={$name}&titles={$etitle}"
+                               => "apihelp-$path-example-simple",
+                       "action=query&generator={$name}&titles={$etitle}&prop=info"
+                               => "apihelp-$path-example-generator",
                );
        }
 
index 33b25fd..159b1c8 100644 (file)
@@ -268,6 +268,8 @@ class ApiQueryBlocks extends ApiQueryBase {
        }
 
        public function getAllowedParams() {
+               $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
+
                return array(
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
@@ -280,7 +282,8 @@ class ApiQueryBlocks extends ApiQueryBase {
                                        'newer',
                                        'older'
                                ),
-                               ApiBase::PARAM_DFLT => 'older'
+                               ApiBase::PARAM_DFLT => 'older',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'ids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
@@ -289,7 +292,13 @@ class ApiQueryBlocks extends ApiQueryBase {
                        'users' => array(
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'ip' => null,
+                       'ip' => array(
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+blocks-param-ip',
+                                       $blockCIDRLimit['IPv4'],
+                                       $blockCIDRLimit['IPv6'],
+                               ),
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -326,56 +335,18 @@ class ApiQueryBlocks extends ApiQueryBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to stop enumerating at',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'ids' => 'List of block IDs to list (optional)',
-                       'users' => 'List of users to search for (optional)',
-                       'ip' => array(
-                               'Get all blocks applying to this IP or CIDR range, including range blocks.',
-                               "Cannot be used together with bkusers. CIDR ranges broader than " .
-                                       "IPv4/{$blockCIDRLimit['IPv4']} or IPv6/{$blockCIDRLimit['IPv6']} " .
-                                       "are not accepted"
-                       ),
-                       'limit' => 'The maximum amount of blocks to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' id         - Adds the ID of the block',
-                               ' user       - Adds the username of the blocked user',
-                               ' userid     - Adds the user ID of the blocked user',
-                               ' by         - Adds the username of the blocking user',
-                               ' byid       - Adds the user ID of the blocking user',
-                               ' timestamp  - Adds the timestamp of when the block was given',
-                               ' expiry     - Adds the timestamp of when the block expires',
-                               ' reason     - Adds the reason given for the block',
-                               ' range      - Adds the range of IPs affected by the block',
-                               ' flags      - Tags the ban with (autoblock, anononly, etc)',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only indefinite blocks on IPs, set {$p}show=ip|!temp"
-                       ),
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'List all blocked users and IP addresses.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=blocks',
-                       'api.php?action=query&list=blocks&bkusers=Alice|Bob'
+                       'action=query&list=blocks'
+                               => 'apihelp-query+blocks-example-simple',
+                       'action=query&list=blocks&bkusers=Alice|Bob'
+                               => 'apihelp-query+blocks-example-users',
                );
        }
 
index 1926dd0..7518dad 100644 (file)
@@ -202,7 +202,9 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'categories' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -216,34 +218,12 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get for each category',
-                               ' sortkey    - Adds the sortkey (hexadecimal string) and sortkey prefix',
-                               '              (human-readable part) for the category',
-                               ' timestamp  - Adds timestamp of when the category was added',
-                               ' hidden     - Tags categories that are hidden with __HIDDENCAT__',
-                       ),
-                       'limit' => 'How many categories to return',
-                       'show' => 'Which kind of categories to show',
-                       'continue' => 'When more results are available, use this to continue',
-                       'categories' => 'Only list these categories. Useful for checking ' .
-                               'whether a certain page is in a certain category',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all categories the page(s) belong to.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=categories&titles=Albert%20Einstein'
-                               => 'Get a list of categories [[Albert Einstein]] belongs to',
-                       'api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info'
-                               => 'Get information about all categories used in the [[Albert Einstein]]',
+                       'action=query&prop=categories&titles=Albert%20Einstein'
+                               => 'apihelp-query+categories-example-simple',
+                       'action=query&generator=categories&titles=Albert%20Einstein&prop=info'
+                               => 'apihelp-query+categories-example-generator',
                );
        }
 
index 3dd4c65..8f9b229 100644 (file)
@@ -103,24 +103,19 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'continue' => 'When more results are available, use this to continue',
+                       'action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar'
+                               => 'apihelp-query+categoryinfo-example-simple',
                );
        }
 
-       public function getDescription() {
-               return 'Returns information about the given categories.';
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#categoryinfo_.2F_ci';
        }
index a88a9cb..5b4a766 100644 (file)
@@ -275,7 +275,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'title' => array(
                                ApiBase::PARAM_TYPE => 'string',
                        ),
@@ -307,7 +307,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        'file'
                                )
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -351,67 +353,22 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_DEPRECATED => true,
                        ),
                );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $desc = array(
-                       'title' => "Which category to enumerate (required). Must include " .
-                               "'Category:' prefix. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the category to enumerate. Cannot be used together with {$p}title",
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids           - Adds the page ID',
-                               ' title         - Adds the title and namespace ID of the page',
-                               ' sortkey       - Adds the sortkey used for sorting in the category (hexadecimal string)',
-                               ' sortkeyprefix - Adds the sortkey prefix used for sorting in the ' .
-                                       'category (human-readable part of the sortkey)',
-                               ' type          - Adds the type that the page has been categorised as (page, subcat or file)',
-                               ' timestamp     - Adds the timestamp of when the page was included',
-                       ),
-                       'namespace' => 'Only include pages in these namespaces',
-                       'type' => "What type of category members to include. Ignored when {$p}sort=timestamp is set",
-                       'sort' => 'Property to sort by',
-                       'dir' => 'In which direction to sort',
-                       'start' => "Timestamp to start listing from. Can only be used with {$p}sort=timestamp",
-                       'end' => "Timestamp to end listing at. Can only be used with {$p}sort=timestamp",
-                       'starthexsortkey' => "Sortkey to start listing from, as returned by prop=sortkey. " .
-                               "Can only be used with {$p}sort=sortkey",
-                       'endhexsortkey' => "Sortkey to end listing from, as returned by prop=sortkey. " .
-                               "Can only be used with {$p}sort=sortkey",
-                       'startsortkeyprefix' => "Sortkey prefix to start listing from. Can " .
-                               "only be used with {$p}sort=sortkey. Overrides {$p}starthexsortkey",
-                       'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, " .
-                               "if this value occurs it will not be included!). Can only be used with " .
-                               "{$p}sort=sortkey. Overrides {$p}endhexsortkey",
-                       'startsortkey' => "Use starthexsortkey instead",
-                       'endsortkey' => "Use endhexsortkey instead",
-                       'continue' => 'For large categories, give the value returned from previous query',
-                       'limit' => 'The maximum number of pages to return.',
-               );
 
                if ( $this->getConfig()->get( 'MiserMode' ) ) {
-                       $desc['namespace'] = array(
-                               $desc['namespace'],
-                               "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
-                               'returned before continuing; in extreme cases, zero results may be returned.',
-                               "Note that you can use {$p}type=subcat or {$p}type=file instead of {$p}namespace=14 or 6.",
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
                        );
                }
 
-               return $desc;
-       }
-
-       public function getDescription() {
-               return 'List all pages in a given category.';
+               return $ret;
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=categorymembers&cmtitle=Category:Physics'
-                               => 'Get first 10 pages in [[Category:Physics]]',
-                       'api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
-                               => 'Get page info about first 10 pages in [[Category:Physics]]',
+                       'action=query&list=categorymembers&cmtitle=Category:Physics'
+                               => 'apihelp-query+categorymembers-example-simple',
+                       'action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
+                               => 'apihelp-query+categorymembers-example-generator',
                );
        }
 
index 55ea470..b31b14b 100644 (file)
@@ -236,43 +236,16 @@ class ApiQueryContributors extends ApiQueryBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'group' => array(
-                               'Limit users to given group name(s)',
-                               'Does not include implicit or auto-promoted groups like *, user, or autoconfirmed'
-                       ),
-                       'excludegroup' => array(
-                               'Exclude users in given group name(s)',
-                               'Does not include implicit or auto-promoted groups like *, user, or autoconfirmed'
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'rights' => array(
-                               'Limit users to those having given right(s)',
-                               'Does not include rights granted by implicit or auto-promoted groups ' .
-                                       'like *, user, or autoconfirmed'
-                       ),
-                       'excluderights' => array(
-                               'Limit users to those not having given right(s)',
-                               'Does not include rights granted by implicit or auto-promoted groups ' .
-                                       'like *, user, or autoconfirmed'
-                       ),
-                       'limit' => 'How many contributors to return',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Get the list of logged-in contributors and ' .
-                       'the count of anonymous contributors to a page.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=contributors&titles=Main_Page',
+                       'action=query&prop=contributors&titles=Main_Page'
+                               => 'apihelp-query+contributors-example-simple',
                );
        }
 
index 9042696..9d34724 100644 (file)
@@ -423,40 +423,46 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
        public function getAllowedParams() {
                return array(
                        'start' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 2 ) ),
                        ),
                        'end' => array(
                                ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 2 ) ),
                        ),
                        'dir' => array(
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
                                ),
-                               ApiBase::PARAM_DFLT => 'older'
+                               ApiBase::PARAM_DFLT => 'older',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 3 ) ),
                        ),
-                       'from' => null,
-                       'to' => null,
-                       'prefix' => null,
-                       'continue' => null,
-                       'unique' => false,
-                       'tag' => null,
-                       'user' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                       'from' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
-                       'excludeuser' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                       'to' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
+                       ),
+                       'prefix' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
+                       ),
+                       'unique' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_TYPE => 'namespace',
                                ApiBase::PARAM_DFLT => NS_MAIN,
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       'tag' => null,
+                       'user' => array(
+                               ApiBase::PARAM_TYPE => 'user'
+                       ),
+                       'excludeuser' => array(
+                               ApiBase::PARAM_TYPE => 'user'
                        ),
                        'prop' => array(
                                ApiBase::PARAM_DFLT => 'user|comment',
@@ -476,68 +482,30 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'start' => 'The timestamp to start enumerating from (1, 2)',
-                       'end' => 'The timestamp to stop enumerating at (1, 2)',
-                       'dir' => $this->getDirectionDescription( $this->getModulePrefix(), ' (1, 3)' ),
-                       'from' => 'Start listing at this title (3)',
-                       'to' => 'Stop listing at this title (3)',
-                       'prefix' => 'Search for all page titles that begin with this value (3)',
-                       'limit' => 'The maximum amount of revisions to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' revid          - Adds the revision ID of the deleted revision',
-                               ' parentid       - Adds the revision ID of the previous revision to the page',
-                               ' user           - Adds the user who made the revision',
-                               ' userid         - Adds the user ID whom made the revision',
-                               ' comment        - Adds the comment of the revision',
-                               ' parsedcomment  - Adds the parsed comment of the revision',
-                               ' minor          - Tags if the revision is minor',
-                               ' len            - Adds the length (bytes) of the revision',
-                               ' sha1           - Adds the SHA-1 (base 16) of the revision',
-                               ' content        - Adds the content of the revision',
-                               ' token          - DEPRECATED! Gives the edit token',
-                               ' tags           - Tags for the revision',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'namespace' => 'Only list pages in this namespace (3)',
-                       'user' => 'Only list revisions by this user',
-                       'excludeuser' => 'Don\'t list revisions by this user',
-                       'continue' => 'When more results are available, use this to continue',
-                       'unique' => 'List only one revision for each page (3)',
-                       'tag' => 'Only list revisions tagged with this tag',
-               );
-       }
-
-       public function getDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'List deleted revisions.',
-                       'Operates in three modes:',
-                       ' 1) List deleted revisions for the given title(s), sorted by timestamp.',
-                       ' 2) List deleted contributions for the given user, sorted by timestamp (no titles specified).',
-                       ' 3) List all deleted revisions in the given namespace, sorted by title and timestamp',
-                       "    (no titles specified, {$p}user not set).",
-                       'Certain parameters only apply to some modes and are ignored in others.',
-                       'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3.',
                );
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
+                       'action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
                                'drprop=user|comment|content'
-                               => 'List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)',
-                       'api.php?action=query&list=deletedrevs&druser=Bob&drlimit=50'
-                               => 'List the last 50 deleted contributions by Bob (mode 2)',
-                       'api.php?action=query&list=deletedrevs&drdir=newer&drlimit=50'
-                               => 'List the first 50 deleted revisions in the main namespace (mode 3)',
-                       'api.php?action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
-                               => 'List the first 50 deleted pages in the Talk namespace (mode 3):',
+                               => 'apihelp-query+deletedrevs-example-mode1',
+                       'action=query&list=deletedrevs&druser=Bob&drlimit=50'
+                               => 'apihelp-query+deletedrevs-example-mode2',
+                       'action=query&list=deletedrevs&drdir=newer&drlimit=50'
+                               => 'apihelp-query+deletedrevs-example-mode3-main',
+                       'action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
+                               => 'apihelp-query+deletedrevs-example-mode3-talk',
                );
        }
 
index cf0d841..a6509d4 100644 (file)
@@ -44,17 +44,7 @@ class ApiQueryDisabled extends ApiQueryBase {
                return array();
        }
 
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return array(
-                       'This module has been disabled.'
-               );
-       }
-
-       public function getExamples() {
-               return array();
+       public function getDescriptionMessage() {
+               return 'apihelp-query+disabled-description';
        }
 }
index 2212957..763c306 100644 (file)
@@ -167,7 +167,9 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'ascending',
                                ApiBase::PARAM_TYPE => array(
@@ -179,23 +181,12 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many duplicate files to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'dir' => 'The direction in which to list',
-                       'localonly' => 'Look only for files in the local repository',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all files that are duplicates of the given file(s) based on hash values.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles',
-                       'api.php?action=query&generator=allimages&prop=duplicatefiles',
+                       'action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles'
+                               => 'apihelp-query+duplicatefiles-example-simple',
+                       'action=query&generator=allimages&prop=duplicatefiles'
+                               => 'apihelp-query+duplicatefiles-example-generated',
                );
        }
 
index faabb92..9836352 100644 (file)
@@ -145,7 +145,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'ids|title|url',
@@ -156,7 +156,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                )
                        ),
                        'offset' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                        'protocol' => array(
                                ApiBase::PARAM_TYPE => self::prepareProtocols(),
@@ -176,6 +177,14 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                        ),
                        'expandurl' => false,
                );
+
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
+                       );
+               }
+
+               return $ret;
        }
 
        public static function prepareProtocols() {
@@ -207,45 +216,10 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                }
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $desc = array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids    - Adds the ID of page',
-                               ' title  - Adds the title and namespace ID of the page',
-                               ' url    - Adds the URL used in the page',
-                       ),
-                       'offset' => 'Used for paging. Use the value returned for "continue"',
-                       'protocol' => array(
-                               "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
-                               "Leave both this and {$p}query empty to list all external links"
-                       ),
-                       'query' => 'Search string without protocol. See [[Special:LinkSearch]]. ' .
-                               'Leave empty to list all external links',
-                       'namespace' => 'The page namespace(s) to enumerate.',
-                       'limit' => 'How many pages to return.',
-                       'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
-               );
-
-               if ( $this->getConfig()->get( 'MiserMode' ) ) {
-                       $desc['namespace'] = array(
-                               $desc['namespace'],
-                               "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
-                               'returned before continuing; in extreme cases, zero results may be returned',
-                       );
-               }
-
-               return $desc;
-       }
-
-       public function getDescription() {
-               return 'Enumerate pages that contain a given URL.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=exturlusage&euquery=www.mediawiki.org'
+                       'action=query&list=exturlusage&euquery=www.mediawiki.org'
+                               => 'apihelp-query+exturlusage-example-simple',
                );
        }
 
index 9566635..b9a4263 100644 (file)
@@ -114,7 +114,8 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'offset' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                        'protocol' => array(
                                ApiBase::PARAM_TYPE => ApiQueryExtLinksUsage::prepareProtocols(),
@@ -125,30 +126,10 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'limit' => 'How many links to return',
-                       'offset' => 'When more results are available, use this to continue',
-                       'protocol' => array(
-                               "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
-                               "Leave both this and {$p}query empty to list all external links"
-                       ),
-                       'query' => 'Search string without protocol. Useful for checking ' .
-                               'whether a certain page contains a certain external url',
-                       'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns all external URLs (not interwikis) from the given page(s).';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=extlinks&titles=Main%20Page'
-                               => 'Get a list of external links on the [[Main Page]]',
+                       'action=query&prop=extlinks&titles=Main%20Page'
+                               => 'apihelp-query+extlinks-example-simple',
                );
        }
 
index d1600ef..cb5af2f 100644 (file)
@@ -89,27 +89,10 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                ) ) );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'prop' => array(
-                               'Which repository properties to get (there may be more available on some wikis):',
-                               ' apiurl      - URL to the repository API - helpful for getting image info from the host.',
-                               ' name        - The key of the repository - used in e.g. ' .
-                                       '$wgForeignFileRepos and imageinfo return values.',
-                               ' displayname - The human-readable name of the repository wiki.',
-                               ' rooturl     - Root URL for image paths.',
-                               ' local       - Whether that repository is the local one or not.',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Return meta information about image repositories configured on the wiki.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&meta=filerepoinfo&friprop=apiurl|name|displayname',
+                       'action=query&meta=filerepoinfo&friprop=apiurl|name|displayname'
+                               => 'apihelp-query+filerepoinfo-example-simple',
                );
        }
 }
index f047d8d..b4638d9 100644 (file)
@@ -246,16 +246,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
                        'to' => null,
                        'prefix' => null,
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'ascending',
                                ApiBase::PARAM_TYPE => array(
@@ -283,48 +275,23 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                        'archivename',
                                ),
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The image title to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The image title to stop enumerating at',
-                       'prefix' => 'Search for all image titles that begin with this value',
-                       'dir' => 'The direction in which to list',
-                       'limit' => 'How many images to return in total',
-                       'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
-                       'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
-                       'prop' => array(
-                               'What image information to get:',
-                               ' sha1              - Adds SHA-1 hash for the image',
-                               ' timestamp         - Adds timestamp for the uploaded version',
-                               ' user              - Adds user who uploaded the image version',
-                               ' size              - Adds the size of the image in bytes and the height, ' .
-                                       'width and page count (if applicable)',
-                               ' dimensions        - Alias for size',
-                               ' description       - Adds description the image version',
-                               ' parseddescription - Parse the description on the version',
-                               ' mime              - Adds MIME of the image',
-                               ' mediatype         - Adds the media type of the image',
-                               ' metadata          - Lists Exif metadata for the version of the image',
-                               ' bitdepth          - Adds the bit depth of the version',
-                               ' archivename       - Adds the file name of the archive version for non-latest versions'
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate all deleted files sequentially.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=filearchive' => array(
-                               'Simple Use',
-                               'Show a list of all deleted files',
-                       ),
+                       'action=query&list=filearchive'
+                               => 'apihelp-query+filearchive-example-simple',
                );
        }
 
index b5aa45b..23f6477 100644 (file)
@@ -169,7 +169,9 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                return array(
                        'prefix' => null,
                        'title' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -195,33 +197,12 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'prefix' => 'Prefix for the interwiki',
-                       'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' iwprefix       - Adds the prefix of the interwiki',
-                               ' iwtitle        - Adds the title of the interwiki',
-                       ),
-                       'limit' => 'How many total pages to return',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Find all pages that link to the given interwiki link.',
-                       'Can be used to find all links with a prefix, or',
-                       'all links to a title (with a given prefix).',
-                       'Using neither parameter is effectively "All IW Links".',
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks',
-                       'api.php?action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+                       'action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks'
+                               => 'apihelp-query+iwbacklinks-example-simple',
+                       'action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+                               => 'apihelp-query+iwbacklinks-example-generator',
                );
        }
 
index a185ee2..fb398dd 100644 (file)
@@ -147,24 +147,12 @@ class ApiQueryIWLinks extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'url' => array(
-                               ApiBase::PARAM_DFLT => false,
-                               ApiBase::PARAM_DEPRECATED => true,
-                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'url',
                                )
                        ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
-                       'continue' => null,
                        'prefix' => null,
                        'title' => null,
                        'dir' => array(
@@ -174,32 +162,27 @@ class ApiQueryIWLinks extends ApiQueryBase {
                                        'descending'
                                )
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get for each interlanguage link',
-                               ' url      - Adds the full URL',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+                       'url' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
                        ),
-                       'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
-                       'limit' => 'How many interwiki links to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'prefix' => 'Prefix for the interwiki',
-                       'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
-                       'dir' => 'The direction in which to list',
                );
        }
 
-       public function getDescription() {
-               return 'Returns all interwiki links from the given page(s).';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=iwlinks&titles=Main%20Page'
-                               => 'Get interwiki links from the [[Main Page]]',
+                       'action=query&prop=iwlinks&titles=Main%20Page'
+                               => 'apihelp-query+iwlinks-example-simple',
                );
        }
 
index ad5cdbd..18da1e6 100644 (file)
@@ -649,7 +649,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        ),
                        'urlwidth' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+imageinfo-param-urlwidth',
+                                       ApiQueryImageInfo::TRANSFORM_LIMIT,
+                               ),
                        ),
                        'urlheight' => array(
                                ApiBase::PARAM_TYPE => 'integer',
@@ -675,7 +679,9 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                ApiBase::PARAM_DFLT => '',
                                ApiBase::PARAM_TYPE => 'string',
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'localonly' => false,
                );
        }
@@ -694,6 +700,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
        /**
         * Returns array key value pairs of properties and their descriptions
         *
+        * @deprecated since 1.25
         * @param string $modulePrefix
         * @return array
         */
@@ -730,6 +737,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
        /**
         * Returns the descriptions for the properties provided by getPropertyNames()
         *
+        * @deprecated since 1.25
         * @param array $filter List of properties to filter out
         * @param string $modulePrefix
         * @return array
@@ -741,55 +749,13 @@ class ApiQueryImageInfo extends ApiQueryBase {
                );
        }
 
-       /**
-        * Return the API documentation for the parameters.
-        * @return array Parameter documentation.
-        */
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => self::getPropertyDescriptions( array(), $p ),
-                       'urlwidth' => array(
-                               "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
-                               'For performance reasons if this option is used, ' .
-                                       'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.'
-                       ),
-                       'urlheight' => "Similar to {$p}urlwidth.",
-                       'urlparam' => array(
-                               "A handler specific parameter string. For example, pdf's ",
-                               "might use 'page15-100px'."
-                       ),
-                       'limit' => 'How many image revisions to return per image',
-                       'start' => 'Timestamp to start listing from',
-                       'end' => 'Timestamp to stop listing at',
-                       'metadataversion'
-                               => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
-                               "Defaults to '1' for backwards compatibility" ),
-                       'extmetadatalanguage' => array(
-                               'What language to fetch extmetadata in. This affects both which',
-                               'translation to fetch, if multiple are available, as well as how things',
-                               'like numbers and various values are formatted.'
-                       ),
-                       'extmetadatamultilang'
-                               =>'If translations for extmetadata property are available, fetch all of them.',
-                       'extmetadatafilter'
-                               => "If specified and non-empty, only these keys will be returned for {$p}prop=extmetadata",
-                       'continue' => 'If the query response includes a continue value, ' .
-                               'use it here to get another page of results',
-                       'localonly' => 'Look only for files in the local repository',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns image information and upload history.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo',
-                       'api.php?action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
-                               'iiend=20071231235959&iiprop=timestamp|user|url',
+                       'action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo'
+                               => 'apihelp-query+imageinfo-example-simple',
+                       'action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
+                               'iiend=2007-12-31T23:59:59Z&iiprop=timestamp|user|url'
+                               => 'apihelp-query+imageinfo-example-dated',
                );
        }
 
index 9bc3abe..e23ce45 100644 (file)
@@ -146,7 +146,9 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'images' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -160,26 +162,12 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many images to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'images' => 'Only list these images. Useful for checking whether a ' .
-                               'certain page has a certain Image.',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns all images contained on the given page(s).';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=images&titles=Main%20Page'
-                               => 'Get a list of images used in the [[Main Page]]',
-                       'api.php?action=query&generator=images&titles=Main%20Page&prop=info'
-                               => 'Get information about all images used in the [[Main Page]]',
+                       'action=query&prop=images&titles=Main%20Page'
+                               => 'apihelp-query+images-example-simple',
+                       'action=query&generator=images&titles=Main%20Page&prop=info'
+                               => 'apihelp-query+images-example-generator',
                );
        }
 
index d7037e3..a560bed 100644 (file)
@@ -824,38 +824,18 @@ class ApiQueryInfo extends ApiQueryBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() )
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get:',
-                               ' protection            - List the protection level of each page',
-                               ' talkid                - The page ID of the talk page for each non-talk page',
-                               ' watched               - List the watched status of each page',
-                               ' watchers              - The number of watchers, if allowed',
-                               ' notificationtimestamp - The watchlist notification timestamp of each page',
-                               ' subjectid             - The page ID of the parent page for each talk page',
-                               ' url                   - Gives a full URL, an edit URL, and the canonical URL for each page',
-                               ' readable              - Whether the user can read this page',
-                               ' preload               - Gives the text returned by EditFormPreloadText',
-                               ' displaytitle          - Gives the way the page title is actually displayed',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'token' => 'Request a token to perform a data-modifying action on a page',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Get basic page information such as namespace, title, last touched date, ...';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=info&titles=Main%20Page',
-                       'api.php?action=query&prop=info&inprop=protection&titles=Main%20Page'
+                       'action=query&prop=info&titles=Main%20Page'
+                               => 'apihelp-query+info-example-simple',
+                       'action=query&prop=info&inprop=protection&titles=Main%20Page'
+                               => 'apihelp-query+info-example-protection',
                );
        }
 
index 34842c6..a3a285b 100644 (file)
@@ -168,7 +168,9 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                return array(
                        'lang' => null,
                        'title' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -194,34 +196,12 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'lang' => 'Language for the language link',
-                       'title' => "Language link to search for. Must be used with {$this->getModulePrefix()}lang",
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' lllang         - Adds the language code of the language link',
-                               ' lltitle        - Adds the title of the language link',
-                       ),
-                       'limit' => 'How many total pages to return',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Find all pages that link to the given language link.',
-                       'Can be used to find all links with a language code, or',
-                       'all links to a title (with a given language).',
-                       'Using neither parameter is effectively "All Language Links".',
-                       'Note that this may not consider language links added by extensions.',
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=langbacklinks&lbltitle=Test&lbllang=fr',
-                       'api.php?action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+                       'action=query&list=langbacklinks&lbltitle=Test&lbllang=fr'
+                               => 'apihelp-query+langbacklinks-example-simple',
+                       'action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+                               => 'apihelp-query+langbacklinks-example-generator',
                );
        }
 
index da05f27..2b555d3 100644 (file)
@@ -140,18 +140,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        public function getAllowedParams() {
                global $wgContLang;
                return array(
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
-                       'continue' => null,
-                       'url' => array(
-                               ApiBase::PARAM_DFLT => false,
-                               ApiBase::PARAM_DEPRECATED => true,
-                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
@@ -170,36 +158,27 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                )
                        ),
                        'inlanguagecode' => $wgContLang->getCode(),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many langlinks to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
-                       'prop' => array(
-                               'Which additional properties to get for each interlanguage link',
-                               ' url      - Adds the full URL',
-                               ' langname - Adds the localised language name (best effort, use CLDR extension)',
-                               "            Use {$this->getModulePrefix()}inlanguagecode to control the language",
-                               ' autonym  - Adds the native language name',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+                       'url' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
                        ),
-                       'lang' => 'Language code',
-                       'title' => "Link to search for. Must be used with {$this->getModulePrefix()}lang",
-                       'dir' => 'The direction in which to list',
-                       'inlanguagecode' => 'Language code for localised language names',
                );
        }
 
-       public function getDescription() {
-               return 'Returns all interlanguage links from the given page(s).';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=langlinks&titles=Main%20Page&redirects='
-                               => 'Get interlanguage links from the [[Main Page]]',
+                       'action=query&prop=langlinks&titles=Main%20Page&redirects='
+                               => 'apihelp-query+langlinks-example-simple',
                );
        }
 
index 71329c4..d654550 100644 (file)
@@ -34,26 +34,20 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        const LINKS = 'links';
        const TEMPLATES = 'templates';
 
-       private $table, $prefix, $description, $helpUrl;
+       private $table, $prefix, $helpUrl;
 
        public function __construct( ApiQuery $query, $moduleName ) {
                switch ( $moduleName ) {
                        case self::LINKS:
                                $this->table = 'pagelinks';
                                $this->prefix = 'pl';
-                               $this->description = 'link';
                                $this->titlesParam = 'titles';
-                               $this->titlesParamDescription = 'Only list links to these titles. Useful ' .
-                                       'for checking whether a certain page links to a certain title.';
                                $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#links_.2F_pl';
                                break;
                        case self::TEMPLATES:
                                $this->table = 'templatelinks';
                                $this->prefix = 'tl';
-                               $this->description = 'template';
                                $this->titlesParam = 'templates';
-                               $this->titlesParamDescription = 'Only list these templates. Useful ' .
-                                       'for checking whether a certain page uses a certain template.';
                                $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#templates_.2F_tl';
                                break;
                        default:
@@ -197,7 +191,9 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        $this->titlesParam => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -211,32 +207,17 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               $desc = $this->description;
-
-               return array(
-                       'namespace' => "Show {$desc}s in this namespace(s) only",
-                       'limit' => "How many {$desc}s to return",
-                       'continue' => 'When more results are available, use this to continue',
-                       $this->titlesParam => $this->titlesParamDescription,
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return "Returns all {$this->description}s from the given page(s).";
-       }
-
-       public function getExamples() {
-               $desc = $this->description;
+       public function getExamplesMessages() {
                $name = $this->getModuleName();
+               $path = $this->getModulePath();
 
                return array(
-                       "api.php?action=query&prop={$name}&titles=Main%20Page" => "Get {$desc}s from the [[Main Page]]",
-                       "api.php?action=query&generator={$name}&titles=Main%20Page&prop=info"
-                               => "Get information about the {$desc} pages in the [[Main Page]]",
-                       "api.php?action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
-                               => "Get {$desc}s from the Main Page in the User and Template namespaces",
+                       "action=query&prop={$name}&titles=Main%20Page"
+                               => "apihelp-{$path}-example-simple",
+                       "action=query&generator={$name}&titles=Main%20Page&prop=info"
+                               => "apihelp-{$path}-example-generator",
+                       "action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
+                               => "apihelp-{$path}-example-namespaces",
                );
        }
 
index d3607e1..f83fe69 100644 (file)
@@ -474,7 +474,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        public function getAllowedParams( $flags = 0 ) {
                $config = $this->getConfig();
-               return array(
+               $ret = array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'ids|title|type|user|timestamp|comment|details',
@@ -511,14 +511,15 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'user' => null,
                        'title' => null,
                        'namespace' => array(
                                ApiBase::PARAM_TYPE => 'namespace'
                        ),
-                       'prefix' => null,
+                       'prefix' => array(),
                        'tag' => null,
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -527,52 +528,22 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => array(
-                               'Which properties to get',
-                               ' ids            - Adds the ID of the log event',
-                               ' title          - Adds the title of the page for the log event',
-                               ' type           - Adds the type of log event',
-                               ' user           - Adds the user responsible for the log event',
-                               ' userid         - Adds the user ID who was responsible for the log event',
-                               ' timestamp      - Adds the timestamp for the event',
-                               ' comment        - Adds the comment of the event',
-                               ' parsedcomment  - Adds the parsed comment of the event',
-                               ' details        - Lists additional details about the event',
-                               ' tags           - Lists tags for the event',
-                       ),
-                       'type' => 'Filter log entries to only this type',
-                       'action' => array(
-                               "Filter log actions to only this action. Overrides {$p}type",
-                               "Wildcard actions like 'action/*' allows to specify any string for the asterisk"
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'user' => 'Filter entries to those made by the given user',
-                       'title' => 'Filter entries to those related to a page',
-                       'namespace' => 'Filter entries to those in the given namespace',
-                       'prefix' => 'Filter entries that start with this prefix. Disabled in Miser Mode',
-                       'limit' => 'How many total event entries to return',
-                       'tag' => 'Only list event entries tagged with this tag',
-                       'continue' => 'When more results are available, use this to continue',
                );
-       }
 
-       public function getDescription() {
-               return 'Get events from logs.';
+               if ( $config->get( 'MiserMode' ) ) {
+                       $ret['prefix'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
+
+               return $ret;
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=logevents'
+                       'action=query&list=logevents'
+                               => 'apihelp-query+logevents-example-simple',
                );
        }
 
index 469b297..035f901 100644 (file)
@@ -233,15 +233,19 @@ abstract class ApiQueryORM extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => $this->getTable()->getFieldNames(),
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-props',
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 20,
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-limit',
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'continue' => null,
                );
 
                return array_merge( $this->getTable()->getAPIParams(), $params );
@@ -249,6 +253,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
 
        /**
         * @see ApiBase::getParamDescription()
+        * @deprecated since 1.25
         * @return array
         */
        public function getParamDescription() {
index 8cd9c6c..e4a5002 100644 (file)
@@ -83,7 +83,9 @@ class ApiQueryPagePropNames extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -94,20 +96,10 @@ class ApiQueryPagePropNames extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of pages to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all page prop names in use on the wiki.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=pagepropnames' => 'Get first 10 prop names',
+                       'action=query&list=pagepropnames'
+                               => 'apihelp-query+pagepropnames-example-simple',
                );
        }
 
index e370c39..130b829 100644 (file)
@@ -125,28 +125,19 @@ class ApiQueryPageProps extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => 'Only list these props. Useful for checking whether a ' .
-                               'certain page uses a certain page prop',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get various properties defined in the page content.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=pageprops&titles=Category:Foo',
+                       'action=query&prop=pageprops&titles=Category:Foo'
+                               => 'apihelp-query+pageprops-example-simple',
                );
        }
 
index b6c8525..1e9bc4d 100644 (file)
@@ -140,7 +140,9 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                                        'value',
                                )
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -158,31 +160,12 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'propname' => 'Page prop for which to enumerate pages',
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids   - Adds the page ID',
-                               ' title - Adds the title and namespace ID of the page',
-                               ' value - Adds the value of the page prop',
-                       ),
-                       'dir' => 'In which direction to sort',
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of pages to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all pages using a given page prop.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
-                               => 'Get first 10 pages using {{DISPLAYTITLE:}}',
-                       'api.php?action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
-                               => 'Get page info about first 10 pages using __NOTOC__',
+                       'action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
+                               => 'apihelp-query+pageswithprop-example-simple',
+                       'action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
+                               => 'apihelp-query+pageswithprop-example-generator',
                );
        }
 
index 4abd7f0..2694067 100644 (file)
@@ -100,21 +100,10 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                        );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'search' => 'Search string',
-                       'limit' => 'Maximum amount of results to return',
-                       'namespace' => 'Namespaces to search',
-               );
-       }
-
-       public function getDescription() {
-               return 'Perform a prefix search for page titles';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&list=prefixsearch&pssearch=meaning',
+                       'action=query&list=prefixsearch&pssearch=meaning'
+                               => 'apihelp-query+prefixsearch-example-simple',
                );
        }
 
index 4c88be7..098bfc7 100644 (file)
@@ -196,7 +196,8 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
@@ -217,39 +218,18 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                        'level'
                                )
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'namespace' => 'Only list titles in these namespaces',
-                       'start' => 'Start listing at this protection timestamp',
-                       'end' => 'Stop listing at this protection timestamp',
-                       'dir' => $this->getDirectionDescription( $this->getModulePrefix() ),
-                       'limit' => 'How many total pages to return',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' timestamp      - Adds the timestamp of when protection was added',
-                               ' user           - Adds the user that added the protection',
-                               ' userid         - Adds the user id that added the protection',
-                               ' comment        - Adds the comment for the protection',
-                               ' parsedcomment  - Adds the parsed comment for the protection',
-                               ' expiry         - Adds the timestamp of when the protection will be lifted',
-                               ' level          - Adds the protection level',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'level' => 'Only list titles with these protection levels',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'List all titles protected from creation.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=protectedtitles',
+                       'action=query&list=protectedtitles'
+                               => 'apihelp-query+protectedtitles-example-simple',
+                       'action=query&generator=protectedtitles&gptnamespace=0&prop=linkshere'
+                               => 'apihelp-query+protectedtitles-example-generator',
                );
        }
 
index 5ddd945..2da5777 100644 (file)
@@ -144,7 +144,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array_keys( $this->qpMap ),
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'offset' => 0,
+                       'offset' => array(
+                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -155,21 +158,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'page' => 'The name of the special page. Note, this is case sensitive',
-                       'offset' => 'When more results are available, use this to continue',
-                       'limit' => 'Number of results to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get a list provided by a QueryPage-based special page.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=querypage&qppage=Ancientpages'
+                       'action=query&list=querypage&qppage=Ancientpages'
+                               => 'apihelp-query+querypage-example-ancientpages',
                );
        }
 
index 530557e..f4061e7 100644 (file)
@@ -165,30 +165,15 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'namespace' => 'Return pages in these namespaces only',
-                       'limit' => 'Limit how many random pages will be returned',
-                       'redirect' => 'Load a random redirect instead of a random page'
+                       'action=query&list=random&rnnamespace=0&rnlimit=2'
+                               => 'apihelp-query+random-example-simple',
+                       'action=query&generator=random&grnnamespace=0&grnlimit=2&prop=info'
+                               => 'apihelp-query+random-example-generator',
                );
        }
 
-       public function getDescription() {
-               return array(
-                       'Get a set of random pages.',
-                       'NOTE: Pages are listed in a fixed sequence, only the starting point is random.',
-                       '      This means that if, for example, "Main Page" is the first random page on',
-                       '      your list, "List of fictional monkeys" will *always* be second, "List of',
-                       '      people on stamps of Vanuatu" third, etc.',
-                       'NOTE: If the number of pages in the namespace is lower than rnlimit, you will',
-                       '      get fewer pages. You will not get the same page twice.'
-               );
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&list=random&rnnamespace=0&rnlimit=2';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Random';
        }
index 6f0c5d3..a620a9f 100644 (file)
@@ -625,7 +625,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -696,57 +697,18 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                )
                        ),
                        'toponly' => false,
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'namespace' => 'Filter log entries to only this namespace(s)',
-                       'user' => 'Only list changes by this user',
-                       'excludeuser' => 'Don\'t list changes by this user',
-                       'prop' => array(
-                               'Include additional pieces of information',
-                               ' user           - Adds the user responsible for the edit and tags if they are an IP',
-                               ' userid         - Adds the user id responsible for the edit',
-                               ' comment        - Adds the comment for the edit',
-                               ' parsedcomment  - Adds the parsed comment for the edit',
-                               ' flags          - Adds flags for the edit',
-                               ' timestamp      - Adds timestamp of the edit',
-                               ' title          - Adds the page title of the edit',
-                               ' ids            - Adds the page ID, recent changes ID and the new and old revision ID',
-                               ' sizes          - Adds the new and old page length in bytes',
-                               ' redirect       - Tags edit if page is a redirect',
-                               ' patrolled      - Tags patrollable edits as being patrolled or unpatrolled',
-                               ' loginfo        - Adds log information (logid, logtype, etc) to log entries',
-                               ' tags           - Lists tags for the entry',
-                               ' sha1           - Adds the content checksum for entries associated with a revision',
-                       ),
-                       'token' => 'Which tokens to obtain for each change',
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon"
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'type' => 'Which types of changes to show',
-                       'limit' => 'How many total changes to return',
-                       'tag' => 'Only list changes tagged with this tag',
-                       'toponly' => 'Only list changes which are the latest revision',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate recent changes.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=recentchanges'
+                       'action=query&list=recentchanges'
+                               => 'apihelp-query+recentchanges-example-simple',
+                       'action=query&generator=recentchanges&grcshow=!patrolled&prop=info'
+                               => 'apihelp-query+recentchanges-example-generator',
                );
        }
 
index da4ec19..d547929 100644 (file)
@@ -717,32 +717,41 @@ class ApiQueryRevisions extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'startid' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'endid' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'start' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'end' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'older',
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'user' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'excludeuser' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'tag' => null,
                        'expandtemplates' => false,
@@ -754,7 +763,9 @@ class ApiQueryRevisions extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'diffto' => null,
                        'difftotext' => null,
                        'contentformat' => array(
@@ -764,83 +775,26 @@ class ApiQueryRevisions extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => array(
-                               'Which properties to get for each revision:',
-                               ' ids            - The ID of the revision',
-                               ' flags          - Revision flags (minor)',
-                               ' timestamp      - The timestamp of the revision',
-                               ' user           - User that made the revision',
-                               ' userid         - User id of revision creator',
-                               ' size           - Length (bytes) of the revision',
-                               ' sha1           - SHA-1 (base 16) of the revision',
-                               ' contentmodel   - Content model id',
-                               ' comment        - Comment by the user for revision',
-                               ' parsedcomment  - Parsed comment by the user for the revision',
-                               ' content        - Text of the revision',
-                               ' tags           - Tags for the revision',
-                       ),
-                       'limit' => 'Limit how many revisions will be returned (enum)',
-                       'startid' => 'From which revision id to start enumeration (enum)',
-                       'endid' => 'Stop revision enumeration on this revid (enum)',
-                       'start' => 'From which revision timestamp to start enumeration (enum)',
-                       'end' => 'Enumerate up to this timestamp (enum)',
-                       'dir' => $this->getDirectionDescription( $p, ' (enum)' ),
-                       'user' => 'Only include revisions made by user (enum)',
-                       'excludeuser' => 'Exclude revisions made by user (enum)',
-                       'expandtemplates' => "Expand templates in revision content (requires {$p}prop=content)",
-                       'generatexml' => "Generate XML parse tree for revision content (requires {$p}prop=content)",
-                       'parse' => array( "Parse revision content (requires {$p}prop=content).",
-                               'For performance reasons if this option is used, rvlimit is enforced to 1.' ),
-                       'section' => 'Only retrieve the content of this section number',
-                       'token' => 'Which tokens to obtain for each revision',
-                       'continue' => 'When more results are available, use this to continue',
-                       'diffto' => array( 'Revision ID to diff each revision to.',
-                               'Use "prev", "next" and "cur" for the previous, next and current revision respectively' ),
-                       'difftotext' => array(
-                               'Text to diff each revision to. Only diffs a limited number of revisions.',
-                               "Overrides {$p}diffto. If {$p}section is set, only that section will be",
-                               'diffed against this text',
-                       ),
-                       'tag' => 'Only list revisions tagged with this tag',
-                       'contentformat' => 'Serialization format used for difftotext and expected for output of content',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Get revision information.',
-                       'May be used in several ways:',
-                       ' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter.',
-                       ' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params.',
-                       ' 3) Get data about a set of revisions by setting their IDs with revids parameter.',
-                       'All parameters marked as (enum) may only be used with a single page (#2).'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'Get data with content for the last revision of titles "API" and "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=API|Main%20Page&' .
-                               'rvprop=timestamp|user|comment|content',
-                       'Get last 5 revisions of the "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment',
-                       'Get first 5 revisions of the "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvdir=newer',
-                       'Get first 5 revisions of the "Main Page" made after 2006-05-01',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000',
-                       'Get first 5 revisions of the "Main Page" that were not made made by anonymous user "127.0.0.1"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1',
-                       'Get first 5 revisions of the "Main Page" that were made by the user "MediaWiki default"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default',
+                       'action=query&prop=revisions&titles=API|Main%20Page&' .
+                               'rvprop=timestamp|user|comment|content'
+                               => 'apihelp-query+revisions-example-content',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment'
+                               => 'apihelp-query+revisions-example-last5',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvdir=newer'
+                               => 'apihelp-query+revisions-example-first5',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvdir=newer&rvstart=2006-05-01T00:00:00Z'
+                               => 'apihelp-query+revisions-example-first5-after',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1'
+                               => 'apihelp-query+revisions-example-first5-not-localhost',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default'
+                               => 'apihelp-query+revisions-example-first5-user',
                );
        }
 
index bcf5d91..7d07f57 100644 (file)
@@ -303,7 +303,10 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true,
                        ),
-                       'offset' => 0,
+                       'offset' => array(
+                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -328,47 +331,14 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                return $params;
        }
 
-       public function getParamDescription() {
-               $descriptions = array(
-                       'search' => 'Search for all page titles (or content) that has this value',
-                       'namespace' => 'The namespace(s) to enumerate',
-                       'what' => 'Search inside the text or titles',
-                       'info' => 'What metadata to return',
-                       'prop' => array(
-                               'What properties to return',
-                               ' size             - Adds the size of the page in bytes',
-                               ' wordcount        - Adds the word count of the page',
-                               ' timestamp        - Adds the timestamp of when the page was last edited',
-                               ' score            - DEPRECATED and IGNORED',
-                               ' snippet          - Adds a parsed snippet of the page',
-                               ' titlesnippet     - Adds a parsed snippet of the page title',
-                               ' redirectsnippet  - Adds a parsed snippet of the redirect title',
-                               ' redirecttitle    - Adds the title of the matching redirect',
-                               ' sectionsnippet   - Adds a parsed snippet of the matching section title',
-                               ' sectiontitle     - Adds the title of the matching section',
-                               ' hasrelated       - DEPRECATED and IGNORED',
-                       ),
-                       'offset' => 'Use this value to continue paging (return by query)',
-                       'limit' => 'How many total pages to return',
-                       'interwiki' => 'Include interwiki results in the search, if available'
-               );
-
-               if ( count( SearchEngine::getSearchTypes() ) > 1 ) {
-                       $descriptions['backend'] = 'Which search backend to use, if not the default';
-               }
-
-               return $descriptions;
-       }
-
-       public function getDescription() {
-               return 'Perform a full text search.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=search&srsearch=meaning',
-                       'api.php?action=query&list=search&srwhat=text&srsearch=meaning',
-                       'api.php?action=query&generator=search&gsrsearch=meaning&prop=info',
+                       'action=query&list=search&srsearch=meaning'
+                               => 'apihelp-query+search-example-simple',
+                       'action=query&list=search&srwhat=text&srsearch=meaning'
+                               => 'apihelp-query+search-example-text',
+                       'action=query&generator=search&gsrsearch=meaning&prop=info'
+                               => 'apihelp-query+search-example-generator',
                );
        }
 
index 311438f..91e70aa 100644 (file)
@@ -837,54 +837,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => array(
-                               'Which sysinfo properties to get:',
-                               ' general               - Overall system information',
-                               ' namespaces            - List of registered namespaces and their canonical names',
-                               ' namespacealiases      - List of registered namespace aliases',
-                               ' specialpagealiases    - List of special page aliases',
-                               ' magicwords            - List of magic words and their aliases',
-                               ' statistics            - Returns site statistics',
-                               ' interwikimap          - Returns interwiki map ' .
-                                       "(optionally filtered, (optionally localised by using {$p}inlanguagecode))",
-                               ' dbrepllag             - Returns database server with the highest replication lag',
-                               ' usergroups            - Returns user groups and the associated permissions',
-                               ' extensions            - Returns extensions installed on the wiki',
-                               ' fileextensions        - Returns list of file extensions allowed to be uploaded',
-                               ' rightsinfo            - Returns wiki rights (license) information if available',
-                               ' restrictions          - Returns information on available restriction (protection) types',
-                               ' languages             - Returns a list of languages MediaWiki supports ' .
-                                       "(optionally localised by using {$p}inlanguagecode)",
-                               ' skins                 - Returns a list of all enabled skins ' .
-                                       "(optionally localised by using {$p}inlanguagecode, otherwise in content language)",
-                               ' extensiontags         - Returns a list of parser extension tags',
-                               ' functionhooks         - Returns a list of parser function hooks',
-                               ' showhooks             - Returns a list of all subscribed hooks (contents of $wgHooks)',
-                               ' variables             - Returns a list of variable IDs',
-                               ' protocols             - Returns a list of protocols that are allowed in external links.',
-                               ' defaultoptions        - Returns the default values for user preferences.',
-                       ),
-                       'filteriw' => 'Return only local or only nonlocal entries of the interwiki map',
-                       'showalldb' => 'List all database servers, not just the one lagging the most',
-                       'numberingroup' => 'Lists the number of users in user groups',
-                       'inlanguagecode' => 'Language code for localised language names ' .
-                               '(best effort, use CLDR extension) and skin names',
-               );
-       }
-
-       public function getDescription() {
-               return 'Return general information about the site.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics',
-                       'api.php?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local',
-                       'api.php?action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb=',
+                       'action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics'
+                               => 'apihelp-query+siteinfo-example-simple',
+                       'action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local'
+                               => 'apihelp-query+siteinfo-example-interwiki',
+                       'action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb='
+                               => 'apihelp-query+siteinfo-example-replag',
                );
        }
 
index db92856..21b58af 100644 (file)
@@ -94,46 +94,32 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                        ),
                        'urlwidth' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+imageinfo-param-urlwidth',
+                                       ApiQueryImageInfo::TRANSFORM_LIMIT,
+                               ),
                        ),
                        'urlheight' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlheight',
                        ),
                        'urlparam' => array(
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_DFLT => '',
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlparam',
                        ),
                );
        }
 
-       /**
-        * Return the API documentation for the parameters.
-        * @return array Parameter documentation.
-        */
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => self::getPropertyDescriptions( $this->propertyFilter, $p ),
-                       'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
-                       'sessionkey' => 'Alias for filekey, for backward compatibility.',
-                       'urlwidth' => "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
-                       'urlheight' => "Similar to {$p}urlwidth. Cannot be used without {$p}urlwidth",
-                       'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
-                               "might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns image information for stashed images.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567',
-                       'api.php?action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
-                               'siiurlwidth=120&siiprop=url',
+                       'action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567'
+                               => 'apihelp-query+stashimageinfo-example-simple',
+                       'action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
+                               'siiurlwidth=120&siiprop=url'
+                               => 'apihelp-query+stashimageinfo-example-params',
                );
        }
 }
index 3184564..d1e6e28 100644 (file)
@@ -135,7 +135,9 @@ class ApiQueryTags extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -156,27 +158,10 @@ class ApiQueryTags extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of tags to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' name         - Adds name of tag',
-                               ' displayname  - Adds system message for the tag',
-                               ' description  - Adds description of the tag',
-                               ' hitcount     - Adds the amount of revisions that have this tag',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'List change tags.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=tags&tgprop=displayname|description|hitcount'
+                       'action=query&list=tags&tgprop=displayname|description|hitcount'
+                               => 'apihelp-query+tags-example-simple',
                );
        }
 
index ba9c937..279e8e3 100644 (file)
@@ -81,20 +81,12 @@ class ApiQueryTokens extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'type' => 'Type of token(s) to request'
-               );
-       }
-
-       public function getDescription() {
-               return 'Gets tokens for data-modifying actions.';
-       }
-
-       protected function getExamples() {
-               return array(
-                       'api.php?action=query&meta=tokens' => 'Retrieve a csrf token (the default)',
-                       'api.php?action=query&meta=tokens&type=watch|patrol' => 'Retrieve a watch token and a patrol token'
+                       'action=query&meta=tokens'
+                               => 'apihelp-query+tokens-example-simple',
+                       'action=query&meta=tokens&type=watch|patrol'
+                               => 'apihelp-query+tokens-example-types',
                );
        }
 
index 4b167b8..10d62cb 100644 (file)
@@ -464,7 +464,9 @@ class ApiQueryContributions extends ApiQueryBase {
                        'end' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'user' => array(
                                ApiBase::PARAM_ISMULTI => true
                        ),
@@ -474,7 +476,8 @@ class ApiQueryContributions extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -507,7 +510,11 @@ class ApiQueryContributions extends ApiQueryBase {
                                        '!top',
                                        'new',
                                        '!new',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+usercontribs-param-show',
+                                       $this->getConfig()->get( 'RCMaxAge' )
+                               ),
                        ),
                        'tag' => null,
                        'toponly' => array(
@@ -517,53 +524,12 @@ class ApiQueryContributions extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
-
-               return array(
-                       'limit' => 'The maximum number of contributions to return',
-                       'start' => 'The start timestamp to return from',
-                       'end' => 'The end timestamp to return to',
-                       'continue' => 'When more results are available, use this to continue',
-                       'user' => 'The users to retrieve contributions for',
-                       'userprefix' => array(
-                               "Retrieve contributions for all users whose names begin with this value.",
-                               "Overrides {$p}user",
-                       ),
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'namespace' => 'Only list contributions in these namespaces',
-                       'prop' => array(
-                               'Include additional pieces of information',
-                               ' ids            - Adds the page ID and revision ID',
-                               ' title          - Adds the title and namespace ID of the page',
-                               ' timestamp      - Adds the timestamp of the edit',
-                               ' comment        - Adds the comment of the edit',
-                               ' parsedcomment  - Adds the parsed comment of the edit',
-                               ' size           - Adds the new size of the edit',
-                               ' sizediff       - Adds the size delta of the edit against its parent',
-                               ' flags          - Adds flags of the edit',
-                               ' patrolled      - Tags patrolled edits',
-                               ' tags           - Lists tags for the edit',
-                       ),
-                       'show' => array(
-                               "Show only items that meet thse criteria, e.g. non minor edits only: {$p}show=!minor",
-                               "NOTE: If {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than",
-                               "\$wgRCMaxAge ($RCMaxAge) won't be shown",
-                       ),
-                       'tag' => 'Only list revisions tagged with this tag',
-                       'toponly' => 'Only list changes which are the latest revision',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get all edits by a user.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=usercontribs&ucuser=YurikBot',
-                       'api.php?action=query&list=usercontribs&ucuserprefix=217.121.114.',
+                       'action=query&list=usercontribs&ucuser=Example'
+                               => 'apihelp-query+usercontribs-example-user',
+                       'action=query&list=usercontribs&ucuserprefix=192.0.2.'
+                               => 'apihelp-query+usercontribs-example-ipprefix',
                );
        }
 
index fd5f47b..f9eb677 100644 (file)
@@ -246,45 +246,22 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                        'acceptlang',
                                        'registrationdate',
                                        'unreadcount',
-                               )
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               '  blockinfo        - Tags if the current user is blocked, by whom, and for what reason',
-                               '  hasmsg           - Adds a tag "message" if the current user has pending messages',
-                               '  groups           - Lists all the groups the current user belongs to',
-                               '  implicitgroups   - Lists all the groups the current user is automatically a member of',
-                               '  rights           - Lists all the rights the current user has',
-                               '  changeablegroups - Lists the groups the current user can add to and remove from',
-                               '  options          - Lists all preferences the current user has set',
-                               '  preferencestoken - DEPRECATED! Get a token to change current user\'s preferences',
-                               '  editcount        - Adds the current user\'s edit count',
-                               '  ratelimits       - Lists all rate limits applying to the current user',
-                               '  realname         - Adds the user\'s real name',
-                               '  email            - Adds the user\'s email address and email authentication date',
-                               '  acceptlang       - Echoes the Accept-Language header sent by ' .
-                                       'the client in a structured format',
-                               '  registrationdate - Adds the user\'s registration date',
-                               '  unreadcount      - Adds the count of unread pages on the user\'s watchlist ' .
-                                       '(maximum ' . ( self::WL_UNREAD_LIMIT - 1 ) . '; returns "' .
-                                       self::WL_UNREAD_LIMIT . '+" if more)',
+                               ),
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+userinfo-param-prop',
+                                       self::WL_UNREAD_LIMIT - 1,
+                                       self::WL_UNREAD_LIMIT . '+',
+                               ),
                        )
                );
        }
 
-       public function getDescription() {
-               return 'Get information about the current user.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&meta=userinfo',
-                       'api.php?action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg',
+                       'action=query&meta=userinfo'
+                               => 'apihelp-query+userinfo-example-simple',
+                       'action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg'
+                               => 'apihelp-query+userinfo-example-data',
                );
        }
 
index c147279..6d14523 100644 (file)
@@ -314,33 +314,13 @@ class ApiQueryUsers extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               '  blockinfo      - Tags if the user is blocked, by whom, and for what reason',
-                               '  groups         - Lists all the groups the user(s) belongs to',
-                               '  implicitgroups - Lists all the groups a user is automatically a member of',
-                               '  rights         - Lists all the rights the user(s) has',
-                               '  editcount      - Adds the user\'s edit count',
-                               '  registration   - Adds the user\'s registration timestamp',
-                               '  emailable      - Tags if the user can and wants to receive ' .
-                                       'email through [[Special:Emailuser]]',
-                               '  gender         - Tags the gender of the user. Returns "male", "female", or "unknown"',
-                       ),
-                       'users' => 'A list of users to obtain the same information for',
-                       'token' => 'Which tokens to obtain for each user',
+                       'action=query&list=users&ususers=Example&usprop=groups|editcount|gender'
+                               => 'apihelp-query+users-example-simple',
                );
        }
 
-       public function getDescription() {
-               return 'Get information about a list of users.';
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&list=users&ususers=brion|TimStarling&usprop=groups|editcount|gender';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Users';
        }
index efbe05e..bb6e59a 100644 (file)
@@ -455,7 +455,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiHelp::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -512,67 +513,26 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string'
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'allrev' => 'Include multiple revisions of the same page within given timeframe',
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'namespace' => 'Filter changes to only the given namespace(s)',
-                       'user' => 'Only list changes by this user',
-                       'excludeuser' => 'Don\'t list changes by this user',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'limit' => 'How many total results to return per request',
-                       'prop' => array(
-                               'Which additional items to get (non-generator mode only).',
-                               ' ids                    - Adds revision ids and page ids',
-                               ' title                  - Adds title of the page',
-                               ' flags                  - Adds flags for the edit',
-                               ' user                   - Adds the user who made the edit',
-                               ' userid                 - Adds user id of whom made the edit',
-                               ' comment                - Adds comment of the edit',
-                               ' parsedcomment          - Adds parsed comment of the edit',
-                               ' timestamp              - Adds timestamp of the edit',
-                               ' patrol                 - Tags edits that are patrolled',
-                               ' sizes                  - Adds the old and new lengths of the page',
-                               ' notificationtimestamp  - Adds timestamp of when the user was last notified about the edit',
-                               ' loginfo                - Adds log information where appropriate',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon"
-                       ),
-                       'type' => array(
-                               'Which types of changes to show',
-                               ' edit           - Regular page edits',
-                               ' external       - External changes',
-                               ' new            - Page creations',
-                               ' log            - Log entries',
-                       ),
-                       'owner' => 'The name of the user whose watchlist you\'d like to access',
-                       'token' => 'Give a security token (settable in preferences) to ' .
-                               'allow access to another user\'s watchlist',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return "Get all recent changes to pages in the logged in user's watchlist.";
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=watchlist',
-                       'api.php?action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment',
-                       'api.php?action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment',
-                       'api.php?action=query&generator=watchlist&prop=info',
-                       'api.php?action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user',
-                       'api.php?action=query&list=watchlist&wlowner=Bob_Smith&wltoken=123ABC'
+                       'action=query&list=watchlist'
+                               => 'apihelp-query+watchlist-example-simple',
+                       'action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment'
+                               => 'apihelp-query+watchlist-example-props',
+                       'action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment'
+                               => 'apihelp-query+watchlist-example-allrev',
+                       'action=query&generator=watchlist&prop=info'
+                               => 'apihelp-query+watchlist-example-generator',
+                       'action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user'
+                               => 'apihelp-query+watchlist-example-generator-rev',
+                       'action=query&list=watchlist&wlowner=Example&wltoken=123ABC'
+                               => 'apihelp-query+watchlist-example-wlowner',
                );
        }
 
index 6b2223a..71ce27f 100644 (file)
@@ -131,7 +131,9 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
@@ -168,35 +170,17 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                                        'ascending',
                                        'descending'
                                ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'namespace' => 'Only list pages in the given namespace(s)',
-                       'limit' => 'How many total results to return per request',
-                       'prop' => array(
-                               'Which additional properties to get (non-generator mode only)',
-                               ' changed  - Adds timestamp of when the user was last notified about the edit',
-                       ),
-                       'show' => 'Only list items that meet these criteria',
-                       'owner' => 'The name of the user whose watchlist you\'d like to access',
-                       'token' => 'Give a security token (settable in preferences) to allow ' .
-                               'access to another user\'s watchlist',
-                       'dir' => 'Direction to sort the titles and namespaces in',
-               );
-       }
-
-       public function getDescription() {
-               return "Get all pages on the logged in user's watchlist.";
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=watchlistraw',
-                       'api.php?action=query&generator=watchlistraw&gwrshow=changed&prop=revisions',
+                       'action=query&list=watchlistraw'
+                               => 'apihelp-query+watchlistraw-example-simple',
+                       'action=query&generator=watchlistraw&gwrshow=changed&prop=info'
+                               => 'apihelp-query+watchlistraw-example-generator',
                );
        }
 
index cbc3070..5107455 100644 (file)
@@ -199,34 +199,18 @@ class ApiRevisionDelete extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'type' => 'Type of revision deletion being performed',
-                       'target' => 'Page title for the revision deletion, if required for the type',
-                       'ids' => 'Identifiers for the revisions to be deleted',
-                       'hide' => 'What to hide for each revision',
-                       'show' => 'What to unhide for each revision',
-                       'suppress' => 'Whether to suppress data from administrators as well as others',
-                       'reason' => 'Reason for the deletion/undeletion',
-               );
-       }
-
-       public function getDescription() {
-               return 'Delete/undelete revisions.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
+                       'action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
                                'hide=content&token=123ABC'
-                               => 'Hide content for revision 12345 on the Main Page',
-                       'api.php?action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
+                               => 'apihelp-revisiondelete-example-revision',
+                       'action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
                                'reason=BLP%20violation&token=123ABC'
-                               => 'Hide all data on log entry 67890 with the reason "BLP violation"',
+                               => 'apihelp-revisiondelete-example-log',
                );
        }
 
index f4d3c54..471fb43 100644 (file)
@@ -120,31 +120,10 @@ class ApiRollback extends ApiBase {
                                        'nochange'
                                ),
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to roll back. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to roll back. Cannot be used together with {$p}title",
-                       'user' => 'Name of the user whose edits are to be rolled back.',
                        'token' => array(
-                               /* Standard description automatically prepended */
-                               'For compatibility, the token used in the web UI is also accepted.'
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'api-help-param-token-webui' ),
                        ),
-                       'summary' => 'Custom edit summary. If empty, default summary will be used',
-                       'markbot' => 'Mark the reverted edits and the revert as bot edits',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
-                               'use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Undo the last edit to the page. If the last user who edited the page made',
-                       'multiple edits in a row, they will all be rolled back.'
                );
        }
 
@@ -211,12 +190,13 @@ class ApiRollback extends ApiBase {
                return $this->mTitleObj;
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=rollback&title=Main%20Page&user=Catrope&token=123ABC',
-                       'api.php?action=rollback&pageid=122&user=Catrope&token=123ABC',
-                       'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&' .
-                               'token=123ABC&summary=Reverting%20vandalism&markbot=1'
+                       'action=rollback&title=Main%20Page&user=Example&token=123ABC' =>
+                               'apihelp-rollback-example-simple',
+                       'action=rollback&title=Main%20Page&user=192.0.2.5&' .
+                               'token=123ABC&summary=Reverting%20vandalism&markbot=1' =>
+                               'apihelp-rollback-example-summary',
                );
        }
 
index a2771a0..d32b0dd 100644 (file)
@@ -51,21 +51,10 @@ class ApiRsd extends ApiBase {
                return new ApiFormatXmlRsd( $this->getMain(), 'xml' );
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'Export an RSD (Really Simple Discovery) schema.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=rsd'
+                       'action=rsd'
+                               => 'apihelp-rsd-example-simple',
                );
        }
 
index 5d527fc..ed3ea15 100644 (file)
@@ -219,7 +219,9 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        'newerthanrevid' => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -228,34 +230,17 @@ class ApiSetNotificationTimestamp extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription() + array(
-                       'entirewatchlist' => 'Work on all watched pages',
-                       'timestamp' => 'Timestamp to which to set the notification timestamp',
-                       'torevid' => 'Revision to set the notification timestamp to (one page only)',
-                       'newerthanrevid' => 'Revision to set the notification timestamp newer than (one page only)',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Update the notification timestamp for watched pages.',
-                       'This affects the highlighting of changed pages in the watchlist and history,',
-                       'and the sending of email when the "Email me when a page on my watchlist is',
-                       'changed" preference is enabled.'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
-                               => 'Reset the notification status for the entire watchlist',
-                       'api.php?action=setnotificationtimestamp&titles=Main_page&token=123ABC'
-                               => 'Reset the notification status for "Main page"',
-                       'api.php?action=setnotificationtimestamp&titles=Main_page&' .
+                       'action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-all',
+                       'action=setnotificationtimestamp&titles=Main_page&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-page',
+                       'action=setnotificationtimestamp&titles=Main_page&' .
                                'timestamp=2012-01-01T00:00:00Z&token=123ABC'
-                               => 'Set the notification timestamp for "Main page" so all edits ' .
-                                       'since 1 January 2012 are unviewed',
+                               => 'apihelp-setnotificationtimestamp-example-pagetimestamp',
+                       'action=setnotificationtimestamp&generator=allpages&gapnamespace=2&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-allpages',
                );
        }
 
index e5e9d5d..2a60af9 100644 (file)
@@ -91,23 +91,12 @@ class ApiTokens extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'type' => 'Type of token(s) to request'
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'This module is deprecated in favor of action=query&meta=tokens.',
-                       'Gets tokens for data-modifying actions.'
-               );
-       }
-
-       protected function getExamples() {
-               return array(
-                       'api.php?action=tokens' => 'Retrieve an edit token (the default)',
-                       'api.php?action=tokens&type=email|move' => 'Retrieve an email token and a move token'
+                       'action=tokens'
+                               => 'apihelp-tokens-example-edit',
+                       'action=tokens&type=email|move'
+                               => 'apihelp-tokens-example-emailmove',
                );
        }
 }
index 2854a82..fb41839 100644 (file)
@@ -93,30 +93,16 @@ class ApiUnblock extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'id' => "ID of the block you want to unblock (obtained through list=blocks). " .
-                               "Cannot be used together with {$p}user",
-                       'user' => "Username, IP address or IP range you want to unblock. " .
-                               "Cannot be used together with {$p}id",
-                       'reason' => 'Reason for unblock',
-               );
-       }
-
-       public function getDescription() {
-               return 'Unblock a user.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=unblock&id=105',
-                       'api.php?action=unblock&user=Bob&reason=Sorry%20Bob'
+                       'action=unblock&id=105'
+                               => 'apihelp-unblock-example-id',
+                       'action=unblock&user=Bob&reason=Sorry%20Bob'
+                               => 'apihelp-unblock-example-user',
                );
        }
 
index 07aad9f..39b63f4 100644 (file)
@@ -117,39 +117,17 @@ class ApiUndelete extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'title' => 'Title of the page you want to restore',
-                       'reason' => 'Reason for restoring',
-                       'timestamps' => array(
-                               'Timestamps of the revisions to restore.',
-                               'If both timestamps and fileids are empty, all will be restored.',
-                       ),
-                       'fileids' => array(
-                               'IDs of the file revisions to restore.',
-                               'If both timestamps and fileids are empty, all will be restored.',
-                       ),
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Restore certain revisions of a deleted page. A list of deleted revisions ',
-                       '(including timestamps) can be retrieved through list=deletedrevs, and a list',
-                       'of deleted file ids can be retrieved through list=filearchive.'
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page',
-                       'api.php?action=undelete&title=Main%20Page&token=123ABC&timestamps=20070703220045|20070702194856'
+                       'action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page'
+                               => 'apihelp-undelete-example-page',
+                       'action=undelete&title=Main%20Page&token=123ABC' .
+                               '&timestamps=2007-07-03T22:00:45Z|2007-07-02T19:48:56Z'
+                               => 'apihelp-undelete-example-revisions',
                );
        }
 
index 2770bdc..8cf53d7 100644 (file)
@@ -732,59 +732,17 @@ class ApiUpload extends ApiBase {
                return $params;
        }
 
-       public function getParamDescription() {
-               $params = array(
-                       'filename' => 'Target filename',
-                       'comment' => 'Upload comment. Also used as the initial page text for new ' .
-                               'files if "text" is not specified',
-                       'text' => 'Initial page text for new files',
-                       'watch' => 'Watch the page',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
-                               'use preferences or do not change watch',
-                       'ignorewarnings' => 'Ignore any warnings',
-                       'file' => 'File contents',
-                       'url' => 'URL to fetch the file from',
-                       'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
-                       'sessionkey' => 'Same as filekey, maintained for backward compatibility.',
-                       'stash' => 'If set, the server will not add the file to the repository ' .
-                               'and stash it temporarily.',
-
-                       'chunk' => 'Chunk contents',
-                       'offset' => 'Offset of chunk in bytes',
-                       'filesize' => 'Filesize of entire upload',
-
-                       'async' => 'Make potentially large file operations asynchronous when possible',
-                       'asyncdownload' => 'Make fetching a URL asynchronous',
-                       'leavemessage' => 'If asyncdownload is used, leave a message on the user talk page if finished',
-                       'statuskey' => 'Fetch the upload status for this file key (upload by URL)',
-                       'checkstatus' => 'Only fetch the upload status for the given file key',
-               );
-
-               return $params;
-       }
-
-       public function getDescription() {
-               return array(
-                       'Upload a file, or get the status of pending uploads. Several methods are available:',
-                       ' * Upload file contents directly, using the "file" parameter',
-                       ' * Have the MediaWiki server fetch a file from a URL, using the "url" parameter',
-                       ' * Complete an earlier upload that failed due to warnings, using the "filekey" parameter',
-                       'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
-                       'sending the "file".',
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=upload&filename=Wiki.png' .
-                       '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
-                               => 'Upload from a URL',
-                       'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC'
-                               => 'Complete an upload that failed due to warnings',
+                       'action=upload&filename=Wiki.png' .
+                               '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
+                               => 'apihelp-upload-example-url',
+                       'action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC'
+                               => 'apihelp-upload-example-filekey',
                );
        }
 
index 66af4c5..7e93c3e 100644 (file)
@@ -119,28 +119,14 @@ class ApiUserrights extends ApiBase {
                        ),
                        'reason' => array(
                                ApiBase::PARAM_DFLT => ''
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'user' => 'User name',
-                       'userid' => 'User id',
-                       'add' => 'Add the user to these groups',
-                       'remove' => 'Remove the user from these groups',
+                       ),
                        'token' => array(
-                               /* Standard description automatically prepended */
-                               'For compatibility, the token used in the web UI is also accepted.'
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'api-help-param-token-webui' ),
                        ),
-                       'reason' => 'Reason for the change',
                );
        }
 
-       public function getDescription() {
-               return 'Add/remove a user to/from groups.';
-       }
-
        public function needsToken() {
                return 'userrights';
        }
@@ -149,10 +135,12 @@ class ApiUserrights extends ApiBase {
                return $this->getUrUser( $params )->getName();
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC',
-                       'api.php?action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                       'action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                               => 'apihelp-userrights-example-user',
+                       'action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                               => 'apihelp-userrights-example-userid',
                );
        }
 
index 8cd0f05..3ba06e1 100644 (file)
@@ -161,7 +161,9 @@ class ApiWatch extends ApiBase {
                                ApiBase::PARAM_DEPRECATED => true
                        ),
                        'unwatch' => false,
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -170,24 +172,14 @@ class ApiWatch extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               $psModule = $this->getPageSet();
-
-               return $psModule->getParamDescription() + array(
-                       'title' => 'The page to (un)watch. use titles instead',
-                       'unwatch' => 'If set the page will be unwatched rather than watched',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return 'Add or remove pages from/to the current user\'s watchlist.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=watch&titles=Main_Page' => 'Watch the page "Main Page"',
-                       'api.php?action=watch&titles=Main_Page&unwatch=' => 'Unwatch the page "Main Page"',
+                       'action=watch&titles=Main_Page&token=123ABC'
+                               => 'apihelp-watch-example-watch',
+                       'action=watch&titles=Main_Page&unwatch=&token=123ABC'
+                               => 'apihelp-watch-example-unwatch',
+                       'action=watch&generator=allpages&gapnamespace=0&token=123ABC'
+                               => 'apihelp-watch-example-generator',
                );
        }
 
index c871be0..82a2c91 100644 (file)
        "apihelp-main-param-origin": "When accessing the API using a cross-domain AJAX request (CORS), set this to the originating domain. This must be included in any pre-flight request, and therefore must be part of the request URI (not the POST body). This must match one of the origins in the Origin: header exactly, so it has to be set to something like http://en.wikipedia.org or https://meta.wikimedia.org. If this parameter does not match the Origin: header, a 403 response will be returned. If this parameter matches the Origin: header and the origin is whitelisted, an Access-Control-Allow-Origin header will be set.",
        "apihelp-main-param-uselang": "Language to use for message translations. A list of codes may be fetched from [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], or specify \"user\" to use the current user's language preference.",
 
+       "apihelp-block-description": "Block a user.",
+       "apihelp-block-param-user": "Username, IP address or IP range you want to block.",
+       "apihelp-block-param-expiry": "Expiry time. May be relative (e.g. \"5 months\" or \"2 weeks\") or absolute (e.g. \"2014-09-18T12:34:56Z\"). If set to \"infinite\", \"indefinite\" or \"never\", the block will never expire.",
+       "apihelp-block-param-reason": "Reason for block.",
+       "apihelp-block-param-anononly": "Block anonymous users only (i.e. disable anonymous edits for this IP).",
+       "apihelp-block-param-nocreate": "Prevent account creation.",
+       "apihelp-block-param-autoblock": "Automatically block the last used IP address, and any subsequent IP addresses they try to login from.",
+       "apihelp-block-param-noemail": "Prevent user from sending email through the wiki. (Requires the \"blockemail\" right).",
+       "apihelp-block-param-hidename": "Hide the username from the block log. (Requires the \"hideuser\" right).",
+       "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "If the user is already blocked, overwrite the existing block.",
+       "apihelp-block-param-watchuser": "Watch the user's or IP's user and talk pages.",
+       "apihelp-block-example-ip-simple": "Block IP 192.0.2.5 for three days with reason \"First strike\"",
+       "apihelp-block-example-user-complex": "Block user Vandal indefinitely with reason \"Vandalism\", and prevent new account creation and email",
+
+       "apihelp-clearhasmsg-description": "Clears the hasmsg flag for current user.",
+       "apihelp-clearhasmsg-example-1": "Clear the hasmsg flag for current user",
+
+       "apihelp-compare-description": "Get the difference between 2 pages.\n\nYou must pass a revision number, a page title, or a page ID for both \"from\" and \"to\".",
+       "apihelp-compare-param-fromtitle": "First title to compare.",
+       "apihelp-compare-param-fromid": "First page ID to compare.",
+       "apihelp-compare-param-fromrev": "First revision to compare.",
+       "apihelp-compare-param-totitle": "Second title to compare.",
+       "apihelp-compare-param-toid": "Second page ID to compare.",
+       "apihelp-compare-param-torev": "Second revision to compare.",
+       "apihelp-compare-example-1": "Create a diff between revision 1 and 2",
+
+       "apihelp-createaccount-description": "Create a new user account.",
+       "apihelp-createaccount-param-name": "Username.",
+       "apihelp-createaccount-param-password": "Password (ignored if $1mailpassword is set).",
+       "apihelp-createaccount-param-domain": "Domain for external authentication (optional).",
+       "apihelp-createaccount-param-token": "Account creation token obtained in first request.",
+       "apihelp-createaccount-param-email": "Email address of user (optional).",
+       "apihelp-createaccount-param-realname": "Real name of user (optional).",
+       "apihelp-createaccount-param-mailpassword": "If set to any value, a random password will be emailed to the user.",
+       "apihelp-createaccount-param-reason": "Optional reason for creating the account to be put in the logs.",
+       "apihelp-createaccount-param-language": "Language code to set as default for the user (optional, defaults to content language).",
+       "apihelp-createaccount-example-pass": "Create user \"testuser\" with password \"test123\"",
+       "apihelp-createaccount-example-mail": "Create user \"testmailuser\" and email a randomly-generated password",
+
+       "apihelp-delete-description": "Delete a page.",
+       "apihelp-delete-param-title": "Title of the page you want to delete. Cannot be used together with $1pageid.",
+       "apihelp-delete-param-pageid": "Page ID of the page you want to delete. Cannot be used together with $1title.",
+       "apihelp-delete-param-reason": "Reason for the deletion. If not set, an automatically generated reason will be used.",
+       "apihelp-delete-param-watch": "Add the page to your watchlist.",
+       "apihelp-delete-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-delete-param-unwatch": "Remove the page from your watchlist.",
+       "apihelp-delete-param-oldimage": "The name of the old image to delete as provided by [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+       "apihelp-delete-example-simple": "Delete the Main Page",
+       "apihelp-delete-example-reason": "Delete the Main Page with the reason \"Preparing for move\"",
+
+       "apihelp-disabled-description": "This module has been disabled.",
+
+       "apihelp-edit-description": "Create and edit pages.",
+       "apihelp-edit-param-title": "Title of the page you want to edit. Cannot be used together with $1pageid.",
+       "apihelp-edit-param-pageid": "Page ID of the page you want to edit. Cannot be used together with $1title.",
+       "apihelp-edit-param-section": "Section number. 0 for the top section, \"new\" for a new section.",
+       "apihelp-edit-param-sectiontitle": "The title for a new section.",
+       "apihelp-edit-param-text": "Page content.",
+       "apihelp-edit-param-summary": "Edit summary. Also section title when $1section=new and $1sectiontitle is not set.",
+       "apihelp-edit-param-minor": "Minor edit.",
+       "apihelp-edit-param-notminor": "Non-minor edit.",
+       "apihelp-edit-param-bot": "Mark this edit as bot.",
+       "apihelp-edit-param-basetimestamp": "Timestamp of the base revision, used to detect edit conflicts. May be obtained through [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Timestamp when you began the editing process, used to detect edit conflicts. An appropriate value may be obtained using [[Special:ApiHelp/main|curtimestamp]] when beginning the edit process (e.g. when loading the page content to edit).",
+       "apihelp-edit-param-recreate": "Override any errors about the article having been deleted in the meantime.",
+       "apihelp-edit-param-createonly": "Don't edit the page if it exists already.",
+       "apihelp-edit-param-nocreate": "Throw an error if the page doesn't exist.",
+       "apihelp-edit-param-watch": "Add the page to your watchlist.",
+       "apihelp-edit-param-unwatch": "Remove the page from your watchlist.",
+       "apihelp-edit-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-edit-param-md5": "The MD5 hash of the $1text parameter, or the $1prependtext and $1appendtext parameters concatenated. If set, the edit won't be done unless the hash is correct.",
+       "apihelp-edit-param-prependtext": "Add this text to the beginning of the page. Overrides $1text.",
+       "apihelp-edit-param-appendtext": "Add this text to the end of the page. Overrides $1text.\n\nUse $1section=new to append a new section, rather than this parameter.",
+       "apihelp-edit-param-undo": "Undo this revision. Overrides $1text, $1prependtext and $1appendtext.",
+       "apihelp-edit-param-undoafter": "Undo all revisions from $1undo to this one. If not set, just undo one revision.",
+       "apihelp-edit-param-redirect": "Automatically resolve redirects.",
+       "apihelp-edit-param-contentformat": "Content serialization format used for the input text.",
+       "apihelp-edit-param-contentmodel": "Content model of the new content.",
+       "apihelp-edit-param-token": "The token should always be sent as the last parameter, or at least after the $1text parameter.",
+       "apihelp-edit-example-edit": "Edit a page",
+       "apihelp-edit-example-prepend": "Prepend _&#95;NOTOC_&#95; to a page",
+       "apihelp-edit-example-undo": "Undo revisions 13579 through 13585 with autosummary",
+
+       "apihelp-emailuser-description": "Email a user.",
+       "apihelp-emailuser-param-target": "User to send email to.",
+       "apihelp-emailuser-param-subject": "Subject header.",
+       "apihelp-emailuser-param-text": "Mail body.",
+       "apihelp-emailuser-param-ccme": "Send a copy of this mail to me.",
+       "apihelp-emailuser-example-email": "Send an email to the User \"WikiSysop\" with the text \"Content\"",
+
+       "apihelp-expandtemplates-description": "Expands all templates in wikitext.",
+       "apihelp-expandtemplates-param-title": "Title of page.",
+       "apihelp-expandtemplates-param-text": "Wikitext to convert.",
+       "apihelp-expandtemplates-param-prop": "Which pieces of information to get:\n;wikitext:The expanded wikitext.\n;categories:Any categories present in the input that are not represented in the wikitext output.\n;volatile:Whether the output is volatile and should not be reused elsewhere within the page.\n;ttl:The maximum time after which caches of the result should be invalidated.\n;parsetree:The XML parse tree of the input.\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
+       "apihelp-expandtemplates-param-includecomments": "Whether to include HTML comments in the output.",
+       "apihelp-expandtemplates-param-generatexml": "Generate XML parse tree (replaced by $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Expand the wikitext \"<nowiki>{{Project:Sandbox}}</nowiki>\"",
+
+       "apihelp-feedcontributions-description": "Returns a user contributions feed.",
+       "apihelp-feedcontributions-param-feedformat": "The format of the feed.",
+       "apihelp-feedcontributions-param-user": "What users to get the contributions for.",
+       "apihelp-feedcontributions-param-namespace": "Which namespace to filter the contributions by.",
+       "apihelp-feedcontributions-param-year": "From year (and earlier).",
+       "apihelp-feedcontributions-param-month": "From month (and earlier).",
+       "apihelp-feedcontributions-param-tagfilter": "Filter contributions that have these tags.",
+       "apihelp-feedcontributions-param-deletedonly": "Show only deleted contributions.",
+       "apihelp-feedcontributions-param-toponly": "Only show edits that are latest revisions.",
+       "apihelp-feedcontributions-param-newonly": "Only show edits that are page creations.",
+       "apihelp-feedcontributions-param-showsizediff": "Show the size difference between revisions.",
+       "apihelp-feedcontributions-example-simple": "Return contributions for [[User:Example]]",
+
+       "apihelp-feedrecentchanges-description": "Returns a recent changes feed.",
+       "apihelp-feedrecentchanges-param-feedformat": "The format of the feed.",
+       "apihelp-feedrecentchanges-param-namespace": "Namespace to limit the results to.",
+       "apihelp-feedrecentchanges-param-invert": "All namespaces but the selected one.",
+       "apihelp-feedrecentchanges-param-associated": "Include associated (talk or main) namespace.",
+       "apihelp-feedrecentchanges-param-days": "Days to limit the results to.",
+       "apihelp-feedrecentchanges-param-limit": "Maximum number of results to return.",
+       "apihelp-feedrecentchanges-param-from": "Show changes since then.",
+       "apihelp-feedrecentchanges-param-hideminor": "Hide minor changes.",
+       "apihelp-feedrecentchanges-param-hidebots": "Hide changes made by bots.",
+       "apihelp-feedrecentchanges-param-hideanons": "Hide changes made by anonymous users.",
+       "apihelp-feedrecentchanges-param-hideliu": "Hide changes made by registered users.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Hide patrolled changes.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Hide changes made by yourself.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filter by tag.",
+       "apihelp-feedrecentchanges-param-target": "Show only changes on pages linked from this page.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Show changes on pages linked to the selected page instead.",
+       "apihelp-feedrecentchanges-example-simple": "Show recent changes",
+       "apihelp-feedrecentchanges-example-30days": "Show recent changes for 30 days",
+
+       "apihelp-feedwatchlist-description": "Returns a watchlist feed.",
+       "apihelp-feedwatchlist-param-feedformat": "The format of the feed.",
+       "apihelp-feedwatchlist-param-hours": "List pages modified within this many hours from now.",
+       "apihelp-feedwatchlist-param-linktosections": "Link directly to changed sections if possible.",
+       "apihelp-feedwatchlist-example-default": "Show the watchlist feed",
+       "apihelp-feedwatchlist-example-all6hrs": "Show all changes to watched pages in the past 6 hours",
+
+       "apihelp-filerevert-description": "Revert a file to an old version.",
+       "apihelp-filerevert-param-filename": "Target filename, without the File: prefix.",
+       "apihelp-filerevert-param-comment": "Upload comment.",
+       "apihelp-filerevert-param-archivename": "Archive name of the revision to revert to.",
+       "apihelp-filerevert-example-revert": "Revert Wiki.png to the version of 2011-03-05T15:27:40Z",
+
+       "apihelp-help-description": "Display help for the specified modules.",
+       "apihelp-help-param-modules": "Modules to display help for (values of the action= and format= parameters, or \"main\"). Can specify submodules with a \"+\".",
+       "apihelp-help-param-submodules": "Include help for submodules of the named module.",
+       "apihelp-help-param-recursivesubmodules": "Include help for submodules recursively.",
+       "apihelp-help-param-helpformat": "Format of the help output.",
+       "apihelp-help-param-wrap": "Wrap the output in a standard API response structure.",
+       "apihelp-help-param-toc": "Include a table of contents in the HTML output.",
+       "apihelp-help-example-main": "Help for the main module",
+       "apihelp-help-example-recursive": "All help in one page",
+       "apihelp-help-example-help": "Help for the help module itself",
+       "apihelp-help-example-query": "Help for two query submodules",
+
+       "apihelp-imagerotate-description": "Rotate one or more images.",
+       "apihelp-imagerotate-param-rotation": "Degrees to rotate image clockwise.",
+       "apihelp-imagerotate-example-simple": "Rotate [[:File:Example.png]] by 90 degrees",
+       "apihelp-imagerotate-example-generator": "Rotate all images in [[:Category:Flip]] by 180 degrees",
+
+       "apihelp-import-description": "Import a page from another wiki, or an XML file.\n\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the \"xml\" parameter.",
+       "apihelp-import-param-summary": "Import summary.",
+       "apihelp-import-param-xml": "Uploaded XML file.",
+       "apihelp-import-param-interwikisource": "For interwiki imports: wiki to import from.",
+       "apihelp-import-param-interwikipage": "For interwiki imports: page to import.",
+       "apihelp-import-param-fullhistory": "For interwiki imports: import the full history, not just the current version.",
+       "apihelp-import-param-templates": "For interwiki imports: import all included templates as well.",
+       "apihelp-import-param-namespace": "For interwiki imports: import to this namespace.",
+       "apihelp-import-param-rootpage": "Import as subpage of this page.",
+       "apihelp-import-example-import": "Import [[meta:Help:Parserfunctions]] to namespace 100 with full history.",
+
+       "apihelp-login-description": "Log in and get authentication cookies.\n\nIn the event of a successful log-in, the needed cookies will be included in the HTTP response headers. In the event of a failed log-in, further attempts may be throttled to limit automated password guessing attacks.",
+       "apihelp-login-param-name": "User name.",
+       "apihelp-login-param-password": "Password.",
+       "apihelp-login-param-domain": "Domain (optional).",
+       "apihelp-login-param-token": "Login token obtained in first request.",
+       "apihelp-login-example-gettoken": "Retrieve a login token",
+       "apihelp-login-example-login": "Log in",
+
+       "apihelp-logout-description": "Log out and clear session data.",
+       "apihelp-logout-example-logout": "Log the current user out",
+
+       "apihelp-move-description": "Move a page.",
+       "apihelp-move-param-from": "Title of the page you want to move. Cannot be used together with $1fromid.",
+       "apihelp-move-param-fromid": "Page ID of the page you want to move. Cannot be used together with $1from.",
+       "apihelp-move-param-to": "Title you want to rename the page to.",
+       "apihelp-move-param-reason": "Reason for the move.",
+       "apihelp-move-param-movetalk": "Move the talk page, if it exists.",
+       "apihelp-move-param-movesubpages": "Move subpages, if applicable.",
+       "apihelp-move-param-noredirect": "Don't create a redirect.",
+       "apihelp-move-param-watch": "Add the page and the redirect to your watchlist.",
+       "apihelp-move-param-unwatch": "Remove the page and the redirect from your watchlist.",
+       "apihelp-move-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-move-param-ignorewarnings": "Ignore any warnings.",
+       "apihelp-move-example-move": "Move \"Badtitle\" to \"Goodtitle\" without leaving a redirect",
+
+       "apihelp-opensearch-description": "Search the wiki using the OpenSearch protocol.",
+       "apihelp-opensearch-param-search": "Search string.",
+       "apihelp-opensearch-param-limit": "Maximum number of results to return.",
+       "apihelp-opensearch-param-namespace": "Namespaces to search.",
+       "apihelp-opensearch-param-suggest": "Do nothing if [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] is false.",
+       "apihelp-opensearch-param-format": "The format of the output.",
+       "apihelp-opensearch-example-te": "Find pages beginning with \"Te\"",
+
+       "apihelp-options-description": "Change preferences of the current user.\n\nOnly options which are registered in core or in one of installed extensions, or options with keys prefixed with \"userjs-\" (intended to be used by user scripts), can be set.",
+       "apihelp-options-param-reset": "Resets preferences to the site defaults.",
+       "apihelp-options-param-resetkinds": "List of types of options to reset when the \"$1reset\" option is set.",
+       "apihelp-options-param-change": "List of changes, formatted name=value (e.g. skin=vector). Value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value.",
+       "apihelp-options-param-optionname": "A name of a option which should be set to the value given by \"$1optionvalue\".",
+       "apihelp-options-param-optionvalue": "A value of the option specified by \"$1optionname\", can contain pipe characters.",
+       "apihelp-options-example-reset": "Reset all preferences",
+       "apihelp-options-example-change": "Change \"skin\" and \"hideminor\" preferences",
+       "apihelp-options-example-complex": "Reset all preferences, then set \"skin\" and \"nickname\"",
+
+       "apihelp-paraminfo-description": "Obtain information about API modules.",
+       "apihelp-paraminfo-param-modules": "List of module names (values of the action= and format= parameters, or \"main\"). Can specify submodules with a \"+\".",
+       "apihelp-paraminfo-param-helpformat": "Format of help strings.",
+       "apihelp-paraminfo-param-querymodules": "List of query module names (value of prop=, meta= or list= parameter). Use \"$1modules=query+foo\" instead of \"$1querymodules=foo\".",
+       "apihelp-paraminfo-param-mainmodule": "Get information about the main (top-level) module as well. Use \"$1modules=main\" instead.",
+       "apihelp-paraminfo-param-pagesetmodule": "Get information about the pageset module (providing titles= and friends) as well.",
+       "apihelp-paraminfo-param-formatmodules": "List of format module names (value of format= parameter). Use \"$1modules\" instead.",
+       "apihelp-paraminfo-example-1": "Show info for [[Special:ApiHelp/parse|action=parse]], [[Special:ApiHelp/jsonfm|format=jsonfm]], [[Special:ApiHelp/query+allpages|action=query&list=allpages]], and [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]",
+
+       "apihelp-parse-description": "Parses content and returns parser output.\n\nSee the various prop-modules of [[Special:ApiHelp/query|action=query]] to get information from the current version of a page.\n\nThere are several ways to specify the text to parse:\n# Specify a page or revision, using $1page, $1pageid, or $1oldid.\n# Specify content explicitly, using $1text, $1title, and $1contentmodel.\n# Specify only a summary to parse. $1prop should be given an empty value.",
+       "apihelp-parse-param-title": "Title of page the text belongs to. If omitted, $1contentmodel must be specified, and \"[[API]]\" will be used as the title.",
+       "apihelp-parse-param-text": "Text to parse. Use $1title or $1contentmodel to control the content model.",
+       "apihelp-parse-param-summary": "Summary to parse.",
+       "apihelp-parse-param-page": "Parse the content of this page. Cannot be used together with $1text and $1title.",
+       "apihelp-parse-param-pageid": "Parse the content of this page. Overrides $1page.",
+       "apihelp-parse-param-redirects": "If the $1page or the $1pageid parameter is set to a redirect, resolve it.",
+       "apihelp-parse-param-oldid": "Parse the content of this revision. Overrides $1page and $1pageid.",
+       "apihelp-parse-param-prop": "Which pieces of information to get:\n;text:Gives the parsed text of the wikitext.\n;langlinks:Gives the language links in the parsed wikitext.\n;categories:Gives the categories in the parsed wikitext.\n;categorieshtml:Gives the HTML version of the categories.\n;links:Gives the internal links in the parsed wikitext.\n;templates:Gives the templates in the parsed wikitext.\n;images:Gives the images in the parsed wikitext.\n;externallinks:Gives the external links in the parsed wikitext.\n;sections:Gives the sections in the parsed wikitext.\n;revid:Adds the revision ID of the parsed page.\n;displaytitle:Adds the title of the parsed wikitext.\n;headitems:Gives items to put in the &lt;head&gt; of the page.\n;headhtml:Gives parsed &lt;head&gt; of the page.\n;modules:Gives the ResourceLoader modules used on the page.\n;indicators:Gives the HTML of page status indicators used on the page.\n;iwlinks:Gives interwiki links in the parsed wikitext.\n;wikitext:Gives the original wikitext that was parsed.\n;properties:Gives various properties defined in the parsed wikitext.\n;limitreportdata:Gives the limit report in a structured way. Gives no data, when $1disablepp is set.\n;limitreporthtml:Gives the HTML version of the limit report. Gives no data, when $1disablepp is set.",
+       "apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
+       "apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it Returns the same wikitext, after a PST has been applied. Only valid when used with $1text.",
+       "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with $1prop=langlinks).",
+       "apihelp-parse-param-section": "Only retrieve the content of this section number.",
+       "apihelp-parse-param-disablepp": "Disable the PP Report from the parser output.",
+       "apihelp-parse-param-disableeditsection": "Disable edit section links from the parser output.",
+       "apihelp-parse-param-generatexml": "Generate XML parse tree (requires content model \"$1\").",
+       "apihelp-parse-param-preview": "Parse in preview mode.",
+       "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).",
+       "apihelp-parse-param-disabletoc": "Disable table of contents in output.",
+       "apihelp-parse-param-contentformat": "Content serialization format used for the input text. Only valid when used with $1text.",
+       "apihelp-parse-param-contentmodel": "Content model of the input text. If omitted, $1title must be specified, and default will be the model of the specified title. Only valid when used with $1text.",
+       "apihelp-parse-example-page": "Parse a page.",
+       "apihelp-parse-example-text": "Parse wikitext.",
+       "apihelp-parse-example-texttitle": "Parse wikitext, specifying the page title.",
+       "apihelp-parse-example-summary": "Parse a summary.",
+
+       "apihelp-patrol-description": "Patrol a page or revision.",
+       "apihelp-patrol-param-rcid": "Recentchanges ID to patrol.",
+       "apihelp-patrol-param-revid": "Revision ID to patrol.",
+       "apihelp-patrol-example-rcid": "Patrol a recent change",
+       "apihelp-patrol-example-revid": "Patrol a revision",
+
+       "apihelp-protect-description": "Change the protection level of a page.",
+       "apihelp-protect-param-title": "Title of the page to (un)protect. Cannot be used together with $1pageid.",
+       "apihelp-protect-param-pageid": "ID of the page to (un)protect. Cannot be used together with $1title.",
+       "apihelp-protect-param-protections": "List of protection levels, formatted action=level (e.g. edit=sysop).\n\n'''NOTE:''' Any actions not listed will have restrictions removed.",
+       "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it'll be used for all protections. Use \"infinite\", \"indefinite\", \"infinity\" or \"never\", for a never-expiring protection.",
+       "apihelp-protect-param-reason": "Reason for (un)protecting.",
+       "apihelp-protect-param-cascade": "Enable cascading protection (i.e. protect pages included in this page). Ignored if all protection levels given do not support cascading.",
+       "apihelp-protect-param-watch": "If set, add the page being (un)protected to your watchlist.",
+       "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-protect-example-protect": "Protect a page",
+       "apihelp-protect-example-unprotect": "Unprotect a page by setting restrictions to \"all\"",
+       "apihelp-protect-example-unprotect2": "Unprotect a page by setting no restrictions",
+
+       "apihelp-purge-description": "Purge the cache for the given titles.\n\nRequires a POST request if the user is not logged in.",
+       "apihelp-purge-param-forcelinkupdate": "Update the links tables.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "Update the links table, and update the links tables for any page that uses this page as a template.",
+       "apihelp-purge-example-simple": "Purge the \"Main Page\" and the \"API\" page",
+       "apihelp-purge-example-generator": "Purge the first 10 pages in the main namespace",
+
+       "apihelp-query-description": "Fetch data from and about MediaWiki.\n\nAll data modifications will first have to use query to acquire a token to prevent abuse from malicious sites.",
+       "apihelp-query-param-prop": "Which properties to get for the queried pages.",
+       "apihelp-query-param-list": "Which lists to get.",
+       "apihelp-query-param-meta": "Which metadata to get.",
+       "apihelp-query-param-indexpageids": "Include an additional pageids section listing all returned page IDs.",
+       "apihelp-query-param-export": "Export the current revisions of all given or generated pages.",
+       "apihelp-query-param-exportnowrap": "Return the export XML without wrapping it in an XML result (same format as [[Special:Export]]). Can only be used with $1export.",
+       "apihelp-query-param-iwurl": "Whether to get the full URL if the title is an interwiki link.",
+       "apihelp-query-param-continue": "When present, formats query-continue as key-value pairs that should simply be merged into the original request. This parameter must be set to an empty string in the initial query.\n\nThis parameter is recommended for all new development, and will be made default in the next API version.",
+       "apihelp-query-param-rawcontinue": "Currently ignored. In the future, \"$1continue=\" will become the default and this will be needed to receive the raw query-continue data.",
+       "apihelp-query-example-revisions": "Fetch [[Special:ApiHelp/query+siteinfo|site info]] and [[Special:ApiHelp/query+revisions|revisions]] of the Main Page",
+       "apihelp-query-example-allpages": "Fetch revisions of pages beginning with \"API/\"",
+
+       "apihelp-query+allcategories-description": "Enumerate all categories.",
+       "apihelp-query+allcategories-param-from": "The category to start enumerating from.",
+       "apihelp-query+allcategories-param-to": "The category to stop enumerating at.",
+       "apihelp-query+allcategories-param-prefix": "Search for all category titles that begin with this value.",
+       "apihelp-query+allcategories-param-dir": "Direction to sort in.",
+       "apihelp-query+allcategories-param-min": "Only return categories with at least this many members.",
+       "apihelp-query+allcategories-param-max": "Only return categories with at most this many members.",
+       "apihelp-query+allcategories-param-limit": "How many categories to return.",
+       "apihelp-query+allcategories-param-prop": "Which properties to get:\n;size:Adds number of pages in the category.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-example-size": "List categories with information on the number of pages in each",
+       "apihelp-query+allcategories-example-generator": "Retrieve info about the category page itself for categories beginning \"List\"",
+
+       "apihelp-query+allfileusages-description": "List all file usages, including non-existing.",
+       "apihelp-query+allfileusages-param-from": "The title of the file to start enumerating from.",
+       "apihelp-query+allfileusages-param-to": "The title of the file to stop enumerating at.",
+       "apihelp-query+allfileusages-param-prefix": "Search for all file titles that begin with this value.",
+       "apihelp-query+allfileusages-param-unique": "Only show distinct file titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.",
+       "apihelp-query+allfileusages-param-limit": "How many total items to return.",
+       "apihelp-query+allfileusages-param-dir": "The direction in which to list.",
+       "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+allfileusages-example-unique": "List unique file titles",
+       "apihelp-query+allfileusages-example-unique-generator": "Gets all file titles, marking the missing ones",
+       "apihelp-query+allfileusages-example-generator": "Gets pages containing the files",
+
+       "apihelp-query+allimages-description": "Enumerate all images sequentially.",
+       "apihelp-query+allimages-param-sort": "Property to sort by.",
+       "apihelp-query+allimages-param-dir": "The direction in which to list.",
+       "apihelp-query+allimages-param-from": "The image title to start enumerating from. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-to": "The image title to stop enumerating at. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-start": "The timestamp to start enumerating from. Can only be used with $1sort=timestamp.",
+       "apihelp-query+allimages-param-end": "The timestamp to end enumerating. Can only be used with $1sort=timestamp.",
+       "apihelp-query+allimages-param-prop": "Which image information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds the user who uploaded the image version.\n;userid:Add the user ID that uploaded the image version.\n;comment:Comment on the version.\n;parsedcomment:Parse the comment on the version.\n;canonicaltitle:Adds the canonical title of the image file.\n;url:Gives URL to the image and the description page.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the image.\n;mime:Adds MIME type of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;commonmetadata:Lists file format generic metadata for the version of the image.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;bitdepth:Adds the bit depth of the version.",
+       "apihelp-query+allimages-param-prefix": "Search for all image titles that begin with this value. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-minsize": "Limit to images with at least this many bytes.",
+       "apihelp-query+allimages-param-maxsize": "Limit to images with at most this many bytes.",
+       "apihelp-query+allimages-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+       "apihelp-query+allimages-param-user": "Only return files uploaded by this user. Can only be used with $1sort=timestamp. Cannot be used together with $1filterbots.",
+       "apihelp-query+allimages-param-filterbots": "How to filter files uploaded by bots. Can only be used with $1sort=timestamp. Cannot be used together with $1user.",
+       "apihelp-query+allimages-param-mime": "What MIME type to search for. e.g. image/jpeg.",
+       "apihelp-query+allimages-param-limit": "How many images in total to return.",
+       "apihelp-query+allimages-example-B": "Show a list of files starting at the letter \"B\"",
+       "apihelp-query+allimages-example-recent": "Show a list of recently uploaded files similar to [[Special:NewFiles]]",
+       "apihelp-query+allimages-example-generator": "Show info about 4 files starting at the letter \"T\"",
+
+       "apihelp-query+alllinks-description": "Enumerate all links that point to a given namespace.",
+       "apihelp-query+alllinks-param-from": "The title of the link to start enumerating from.",
+       "apihelp-query+alllinks-param-to": "The title of the link to stop enumerating at.",
+       "apihelp-query+alllinks-param-prefix": "Search for all linked titles that begin with this value.",
+       "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+alllinks-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the linking page (cannot be used with $1unique).\n;title:Adds the title of the link.",
+       "apihelp-query+alllinks-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+alllinks-param-limit": "How many total items to return.",
+       "apihelp-query+alllinks-param-dir": "The direction in which to list.",
+       "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+alllinks-example-unique": "List unique linked titles",
+       "apihelp-query+alllinks-example-unique-generator": "Gets all linked titles, marking the missing ones",
+       "apihelp-query+alllinks-example-generator": "Gets pages containing the links",
+
+       "apihelp-query+allmessages-description": "Return messages from this site.",
+       "apihelp-query+allmessages-param-messages": "Which messages to output. \"*\" (default) means all messages.",
+       "apihelp-query+allmessages-param-prop": "Which properties to get.",
+       "apihelp-query+allmessages-param-enableparser": "Set to enable parser, will preprocess the wikitext of message (substitute magic words, handle templates, etc.).",
+       "apihelp-query+allmessages-param-nocontent": "If set, do not include the content of the messages in the output.",
+       "apihelp-query+allmessages-param-includelocal": "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.\nThis lists all MediaWiki: pages, so it will also list those that aren't really messages such as [[MediaWiki:Common.js|Common.js]].",
+       "apihelp-query+allmessages-param-args": "Arguments to be substituted into message.",
+       "apihelp-query+allmessages-param-filter": "Return only messages with names that contain this string.",
+       "apihelp-query+allmessages-param-customised": "Return only messages in this customisation state.",
+       "apihelp-query+allmessages-param-lang": "Return messages in this language.",
+       "apihelp-query+allmessages-param-from": "Return messages starting at this message.",
+       "apihelp-query+allmessages-param-to": "Return messages ending at this message.",
+       "apihelp-query+allmessages-param-title": "Page name to use as context when parsing message (for $1enableparser option).",
+       "apihelp-query+allmessages-param-prefix": "Return messages with this prefix.",
+       "apihelp-query+allmessages-example-ipb": "Show messages starting with \"ipb-\"",
+       "apihelp-query+allmessages-example-de": "Show messages \"august\" and \"mainpage\" in German",
+
+       "apihelp-query+allpages-description": "Enumerate all pages sequentially in a given namespace.",
+       "apihelp-query+allpages-param-from": "The page title to start enumerating from.",
+       "apihelp-query+allpages-param-to": "The page title to stop enumerating at.",
+       "apihelp-query+allpages-param-prefix": "Search for all page titles that begin with this value.",
+       "apihelp-query+allpages-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+allpages-param-filterredir": "Which pages to list.",
+       "apihelp-query+allpages-param-minsize": "Limit to pages with at least this many bytes.",
+       "apihelp-query+allpages-param-maxsize": "Limit to pages with at most this many bytes.",
+       "apihelp-query+allpages-param-prtype": "Limit to protected pages only.",
+       "apihelp-query+allpages-param-prlevel": "Filter protections based on protection level (must be used with $1prtype= parameter).",
+       "apihelp-query+allpages-param-prfiltercascade": "Filter protections based on cascadingness (ignored when $1prtype isn't set).",
+       "apihelp-query+allpages-param-limit": "How many total pages to return.",
+       "apihelp-query+allpages-param-dir": "The direction in which to list.",
+       "apihelp-query+allpages-param-filterlanglinks": "Filter based on whether a page has langlinks. Note that this may not consider langlinks added by extensions.",
+       "apihelp-query+allpages-param-prexpiry": "Which protection expiry to filter the page on:\n;indefinite:Get only pages with indefinite protection expiry.\n;definite:Get only pages with a definite (specific) protection expiry.\n;all:Get pages with any protections expiry.",
+       "apihelp-query+allpages-example-B": "Show a list of pages starting at the letter \"B\"",
+       "apihelp-query+allpages-example-generator": "Show info about 4 pages starting at the letter \"T\"",
+       "apihelp-query+allpages-example-generator-revisions": "Show content of first 2 non-redirect pages beginning at \"Re\"",
+
+       "apihelp-query+allredirects-description": "List all redirects to a namespace.",
+       "apihelp-query+allredirects-param-from": "The title of the redirect to start enumerating from.",
+       "apihelp-query+allredirects-param-to": "The title of the redirect to stop enumerating at.",
+       "apihelp-query+allredirects-param-prefix": "Search for all target pages that begin with this value.",
+       "apihelp-query+allredirects-param-unique": "Only show distinct target pages. Cannot be used with $1prop=ids|fragment|interwiki.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+allredirects-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the redirecting page (cannot be used with $1unique).\n;title:Adds the title of the redirect.\n;fragment:Adds the fragment from the redirect, if any (cannot be used with $1unique).\n;interwiki:Adds the interwiki prefix from the redirect, if any (cannot be used with $1unique).",
+       "apihelp-query+allredirects-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+allredirects-param-limit": "How many total items to return.",
+       "apihelp-query+allredirects-param-dir": "The direction in which to list.",
+       "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+allredirects-example-unique": "List unique target pages",
+       "apihelp-query+allredirects-example-unique-generator": "Gets all target pages, marking the missing ones",
+       "apihelp-query+allredirects-example-generator": "Gets pages containing the redirects",
+
+       "apihelp-query+alltransclusions-description": "List all transclusions (pages embedded using &#123;&#123;x&#125;&#125;), including non-existing.",
+       "apihelp-query+alltransclusions-param-from": "The title of the transclusion to start enumerating from.",
+       "apihelp-query+alltransclusions-param-to": "The title of the transclusion to stop enumerating at.",
+       "apihelp-query+alltransclusions-param-prefix": "Search for all transcluded titles that begin with this value.",
+       "apihelp-query+alltransclusions-param-unique": "Only show distinct transcluded titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the transcluding page (cannot be used with $1unique).\n;title:Adds the title of the transclusion.",
+       "apihelp-query+alltransclusions-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+alltransclusions-param-limit": "How many total items to return.",
+       "apihelp-query+alltransclusions-param-dir": "The direction in which to list.",
+       "apihelp-query+alltransclusions-example-B": "List transcluded titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+alltransclusions-example-unique": "List unique transcluded titles",
+       "apihelp-query+alltransclusions-example-unique-generator": "Gets all transcluded titles, marking the missing ones",
+       "apihelp-query+alltransclusions-example-generator": "Gets pages containing the transclusions",
+
+       "apihelp-query+allusers-description": "Enumerate all registered users.",
+       "apihelp-query+allusers-param-from": "The user name to start enumerating from.",
+       "apihelp-query+allusers-param-to": "The user name to stop enumerating at.",
+       "apihelp-query+allusers-param-prefix": "Search for all users that begin with this value.",
+       "apihelp-query+allusers-param-dir": "Direction to sort in.",
+       "apihelp-query+allusers-param-group": "Only include users in the given groups.",
+       "apihelp-query+allusers-param-excludegroup": "Exclude users in the given groups.",
+       "apihelp-query+allusers-param-rights": "Only include users with the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+allusers-param-prop": "Which pieces of information to include:\n;blockinfo:Adds the information about a current block on the user.\n;groups:Lists groups that the user is in. This uses more server resources and may return fewer results than the limit.\n;implicitgroups:Lists all the groups the user is automatically in.\n;rights:Lists rights that the user has.\n;editcount:Adds the edit count of the user.\n;registration:Adds the timestamp of when the user registered if available (may be blank).",
+       "apihelp-query+allusers-param-limit": "How many total user names to return.",
+       "apihelp-query+allusers-param-witheditsonly": "Only list users who have made edits.",
+       "apihelp-query+allusers-param-activeusers": "Only list users active in the last $1 {{PLURAL:$1|day|days}}.",
+       "apihelp-query+allusers-example-Y": "List users starting at Y",
+
+       "apihelp-query+backlinks-description": "Find all pages that link to the given page.",
+       "apihelp-query+backlinks-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+backlinks-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+backlinks-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+backlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+backlinks-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
+       "apihelp-query+backlinks-param-limit": "How many total pages to return. If $1redirect is enabled, limit applies to each level separately (which means you may get up to 2 * limit results).",
+       "apihelp-query+backlinks-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+       "apihelp-query+backlinks-example-simple": "Show links to [[Main page]]",
+       "apihelp-query+backlinks-example-generator": "Get information about pages linking to [[Main page]]",
+
+       "apihelp-query+blocks-description": "List all blocked users and IP addresses.",
+       "apihelp-query+blocks-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+blocks-param-end": "The timestamp to stop enumerating at.",
+       "apihelp-query+blocks-param-ids": "List of block IDs to list (optional).",
+       "apihelp-query+blocks-param-users": "List of users to search for (optional).",
+       "apihelp-query+blocks-param-ip": "Get all blocks applying to this IP or CIDR range, including range blocks.\nCannot be used together with $3users. CIDR ranges broader than IPv4/$1 or IPv6/$2 are not accepted.",
+       "apihelp-query+blocks-param-limit": "The maximum number of blocks to list.",
+       "apihelp-query+blocks-param-prop": "Which properties to get:\n;id:Adds the ID of the block.\n;user:Adds the username of the blocked user.\n;userid:Adds the user ID of the blocked user.\n;by:Adds the username of the blocking user.\n;byid:Adds the user ID of the blocking user.\n;timestamp:Adds the timestamp of when the block was given.\n;expiry:Adds the timestamp of when the block expires.\n;reason:Adds the reason given for the block.\n;range:Adds the range of IPs affected by the block.\n;flags:Tags the ban with (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-param-show": "Show only items that meet these criteria.\nFor example, to see only indefinite blocks on IPs, set $1show=ip|!temp.",
+       "apihelp-query+blocks-example-simple": "List blocks",
+       "apihelp-query+blocks-example-users": "List blocks of users Alice and Bob",
+
+       "apihelp-query+categories-description": "List all categories the pages belong to.",
+       "apihelp-query+categories-param-prop": "Which additional properties to get for each category:\n;sortkey:Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.\n;timestamp:Adds timestamp of when the category was added.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+categories-param-show": "Which kind of categories to show.",
+       "apihelp-query+categories-param-limit": "How many categories to return.",
+       "apihelp-query+categories-param-categories": "Only list these categories. Useful for checking whether a certain page is in a certain category.",
+       "apihelp-query+categories-param-dir": "The direction in which to list.",
+       "apihelp-query+categories-example-simple": "Get a list of categories [[Albert Einstein]] belongs to",
+       "apihelp-query+categories-example-generator": "Get information about all categories used in the [[Albert Einstein]]",
+
+       "apihelp-query+categoryinfo-description": "Returns information about the given categories.",
+       "apihelp-query+categoryinfo-example-simple": "Get information about [[:Category:Foo]] and [[:Category:Bar]]",
+
+       "apihelp-query+categorymembers-description": "List all pages in a given category.",
+       "apihelp-query+categorymembers-param-title": "Which category to enumerate (required). Must include the \"Category:\" prefix. Cannot be used together with $1pageid.",
+       "apihelp-query+categorymembers-param-pageid": "Page ID of the category to enumerate. Cannot be used together with $1title.",
+       "apihelp-query+categorymembers-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;sortkey:Adds the sortkey used for sorting in the category (hexadecimal string).\n;sortkeyprefix:Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey).\n;type:Adds the type that the page has been categorised as (page, subcat or file).\n;timestamp:Adds the timestamp of when the page was included.",
+       "apihelp-query+categorymembers-param-namespace": "Only include pages in these namespaces. Note that $1type=subcat or $1type=file may be used instead of $1namespace=14 or 6.",
+       "apihelp-query+categorymembers-param-type": "Which type of category members to include. Ignored when $1sort=timestamp is set.",
+       "apihelp-query+categorymembers-param-limit": "The maximum number of pages to return.",
+       "apihelp-query+categorymembers-param-sort": "Property to sort by.",
+       "apihelp-query+categorymembers-param-dir": "In which direction to sort.",
+       "apihelp-query+categorymembers-param-start": "Timestamp to start listing from. Can only be used with $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-end": "Timestamp to end listing at. Can only be used with $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Sortkey to start listing from, as returned by $1prop=sortkey. Can only be used with $1sort=sortkey.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing from, as returned by $1prop=sortkey. Can only be used with $1sort=sortkey.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "Sortkey prefix to start listing from. Can only be used with $1sort=sortkey. Overrides $1starthexsortkey.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Sortkey prefix to end listing BEFORE (not at, if this value occurs it will not be included!). Can only be used with $1sort=sortkey. Overrides $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-startsortkey": "Use $1starthexsortkey instead.",
+       "apihelp-query+categorymembers-param-endsortkey": "Use $1endhexsortkey instead.",
+       "apihelp-query+categorymembers-example-simple": "Get first 10 pages in [[:Category:Physics]]",
+       "apihelp-query+categorymembers-example-generator": "Get page info about first 10 pages in [[:Category:Physics]]",
+
+       "apihelp-query+contributors-description": "Get the list of logged-in contributors and the count of anonymous contributors to a page.",
+       "apihelp-query+contributors-param-group": "Only include users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-excludegroup": "Exclude users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-rights": "Only include users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-excluderights": "Exclude users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-limit": "How many contributors to return.",
+       "apihelp-query+contributors-example-simple": "Show contributors to the [[Main Page]]",
+
+       "apihelp-query+deletedrevs-description": "List deleted revisions.\n\nOperates in three modes:\n# List deleted revisions for the given titles, sorted by timestamp.\n# List deleted contributions for the given user, sorted by timestamp (no titles specified).\n# List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, $1user not set).\n\nCertain parameters only apply to some modes and are ignored in others.",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}}: $2",
+       "apihelp-query+deletedrevs-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+deletedrevs-param-end": "The timestamp to stop enumerating at.",
+       "apihelp-query+deletedrevs-param-from": "Start listing at this title.",
+       "apihelp-query+deletedrevs-param-to": "Stop listing at this title.",
+       "apihelp-query+deletedrevs-param-prefix": "Search for all page titles that begin with this value.",
+       "apihelp-query+deletedrevs-param-unique": "List only one revision for each page.",
+       "apihelp-query+deletedrevs-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+deletedrevs-param-user": "Only list revisions by this user.",
+       "apihelp-query+deletedrevs-param-excludeuser": "Don't list revisions by this user.",
+       "apihelp-query+deletedrevs-param-namespace": "Only list pages in this namespace.",
+       "apihelp-query+deletedrevs-param-limit": "The maximum amount of revisions to list.",
+       "apihelp-query+deletedrevs-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the user ID whom made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;token:<span class=\"apihelp-deprecated\">Deprecated.</span> Gives the edit token.\n;tags:Tags for the revision.",
+       "apihelp-query+deletedrevs-example-mode1": "List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)",
+       "apihelp-query+deletedrevs-example-mode2": "List the last 50 deleted contributions by Bob (mode 2)",
+       "apihelp-query+deletedrevs-example-mode3-main": "List the first 50 deleted revisions in the main namespace (mode 3)",
+       "apihelp-query+deletedrevs-example-mode3-talk": "List the first 50 deleted pages in the Talk namespace (mode 3):",
+
+       "apihelp-query+disabled-description": "This query module has been disabled.",
+
+       "apihelp-query+duplicatefiles-description": "List all files that are duplicates of the given files based on hash values.",
+       "apihelp-query+duplicatefiles-param-limit": "How many duplicate files to return.",
+       "apihelp-query+duplicatefiles-param-dir": "The direction in which to list.",
+       "apihelp-query+duplicatefiles-param-localonly": "Look only for files in the local repository.",
+       "apihelp-query+duplicatefiles-example-simple": "Look for duplicates of [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+duplicatefiles-example-generated": "Look for duplicates of all files",
+
+       "apihelp-query+embeddedin-description": "Find all pages that embed (transclude) the given title.",
+       "apihelp-query+embeddedin-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+embeddedin-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+embeddedin-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+embeddedin-param-dir": "The direction in which to list.",
+       "apihelp-query+embeddedin-param-filterredir": "How to filter for redirects.",
+       "apihelp-query+embeddedin-param-limit": "How many total pages to return.",
+       "apihelp-query+embeddedin-example-simple": "Show pages transcluding [[Template:Stub]]",
+       "apihelp-query+embeddedin-example-generator": "Get information about pages transcluding [[Template:Stub]]",
+
+       "apihelp-query+extlinks-description": "Returns all external URLs (not interwikis) from the given pages.",
+       "apihelp-query+extlinks-param-limit": "How many links to return.",
+       "apihelp-query+extlinks-param-protocol": "Protocol of the URL. If empty and $1query is set, the protocol is \"http\". Leave both this and $1query empty to list all external links.",
+       "apihelp-query+extlinks-param-query": "Search string without protocol. Useful for checking whether a certain page contains a certain external url.",
+       "apihelp-query+extlinks-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+       "apihelp-query+extlinks-example-simple": "Get a list of external links on the [[Main Page]]",
+
+       "apihelp-query+exturlusage-description": "Enumerate pages that contain a given URL.",
+       "apihelp-query+exturlusage-param-prop": "Which pieces of information to include:\n;ids:Adds the ID of page.\n;title:Adds the title and namespace ID of the page.\n;url:Adds the URL used in the page.",
+       "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and $1query set, the protocol is \"http\". Leave both this and $1query empty to list all external links.",
+       "apihelp-query+exturlusage-param-query": "Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links.",
+       "apihelp-query+exturlusage-param-namespace": "The page namespaces to enumerate.",
+       "apihelp-query+exturlusage-param-limit": "How many pages to return.",
+       "apihelp-query+exturlusage-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+       "apihelp-query+exturlusage-example-simple": "Show pages linking to http://www.mediawiki.org",
+
+       "apihelp-query+filearchive-description": "Enumerate all deleted files sequentially.",
+       "apihelp-query+filearchive-param-from": "The image title to start enumerating from.",
+       "apihelp-query+filearchive-param-to": "The image title to stop enumerating at.",
+       "apihelp-query+filearchive-param-prefix": "Search for all image titles that begin with this value.",
+       "apihelp-query+filearchive-param-limit": "How many images to return in total.",
+       "apihelp-query+filearchive-param-dir": "The direction in which to list.",
+       "apihelp-query+filearchive-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+       "apihelp-query+filearchive-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+       "apihelp-query+filearchive-param-prop": "Which image information to get:\n;sha1:Adds SHA-1 hash for the image.\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds user who uploaded the image version.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;description:Adds description the image version.\n;parseddescription:Parse the description on the version.\n;mime:Adds MIME of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;bitdepth:Adds the bit depth of the version.\n;archivename:Adds the file name of the archive version for non-latest versions.",
+       "apihelp-query+filearchive-example-simple": "Show a list of all deleted files",
+
+       "apihelp-query+filerepoinfo-description": "Return meta information about image repositories configured on the wiki.",
+       "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (there may be more available on some wikis):\n;apiurl:URL to the repository API - helpful for getting image info from the host.\n;name:The key of the repository - used in e.g. $wgForeignFileRepos and imageinfo return values.\n;displayname:The human-readable name of the repository wiki.\n;rooturl:Root URL for image paths.\n;local:Whether that repository is the local one or not.",
+       "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories",
+
+       "apihelp-query+fileusage-description": "Find all pages that use the given files.",
+       "apihelp-query+fileusage-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+fileusage-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+fileusage-param-limit": "How many to return.",
+       "apihelp-query+fileusage-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+fileusage-example-simple": "Get a list of pages using [[:File:Example.jpg]]",
+       "apihelp-query+fileusage-example-generator": "Get information about pages using [[:File:Example.jpg]]",
+
+       "apihelp-query+imageinfo-description": "Returns file information and upload history.",
+       "apihelp-query+imageinfo-param-prop": "Which file information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds the user who uploaded each file version.\n;userid:Add the user ID that uploaded each file version.\n;comment:Comment on the version.\n;parsedcomment:Parse the comment on the version.\n;canonicaltitle:Adds the canonical title of the file.\n;url:Gives URL to the file and the description page.\n;size:Adds the size of the file in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the file.\n;mime:Adds MIME type of the file.\n;thumbmime:Adds MIME type of the image thumbnail (requires url and param $1urlwidth).\n;mediatype:Adds the media type of the file.\n;metadata:Lists Exif metadata for the version of the file.\n;commonmetadata:Lists file format generic metadata for the version of the file.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;archivename:Adds the file name of the archive version for non-latest versions.\n;bitdepth:Adds the bit depth of the version.\n;uploadwarning:Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core.",
+       "apihelp-query+imageinfo-param-limit": "How many file revisions to return per file.",
+       "apihelp-query+imageinfo-param-start": "Timestamp to start listing from.",
+       "apihelp-query+imageinfo-param-end": "Timestamp to stop listing at.",
+       "apihelp-query+imageinfo-param-urlwidth": "If $2prop=url is set, a URL to an image scaled to this width will be returned.\nFor performance reasons if this option is used, no more than $1 scaled images will be returned.",
+       "apihelp-query+imageinfo-param-urlheight": "Similar to $1urlwidth.",
+       "apihelp-query+imageinfo-param-metadataversion": "Version of metadata to use. if \"latest\" is specified, use latest version. Defaults to \"1\" for backwards compatibility.",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "What language to fetch extmetadata in. This affects both which translation to fetch, if multiple are available, as well as how things like numbers and various values are formatted.",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "If translations for extmetadata property are available, fetch all of them.",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "If specified and non-empty, only these keys will be returned for $1prop=extmetadata.",
+       "apihelp-query+imageinfo-param-urlparam": "A handler specific parameter string. For example, pdfs might use \"page15-100px\". $1urlwidth must be used and be consistent with $1urlparam.",
+       "apihelp-query+imageinfo-param-localonly": "Look only for files in the local repository.",
+       "apihelp-query+imageinfo-example-simple": "Fetch information about the current version of [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+imageinfo-example-dated": "Fetch information about versions of [[:File:Test.jpg]] from 2008 and later",
+
+       "apihelp-query+images-description": "Returns all files contained on the given pages.",
+       "apihelp-query+images-param-limit": "How many files to return.",
+       "apihelp-query+images-param-images": "Only list these files. Useful for checking whether a certain page has a certain file.",
+       "apihelp-query+images-param-dir": "The direction in which to list.",
+       "apihelp-query+images-example-simple": "Get a list of files used in the [[Main Page]]",
+       "apihelp-query+images-example-generator": "Get information about all files used in the [[Main Page]]",
+
+       "apihelp-query+imageusage-description": "Find all pages that use the given image title.",
+       "apihelp-query+imageusage-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+imageusage-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+imageusage-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+imageusage-param-dir": "The direction in which to list.",
+       "apihelp-query+imageusage-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
+       "apihelp-query+imageusage-param-limit": "How many total pages to return. If $1redirect is enabled, limit applies to each level separately (which means you may get up to 2 * limit results).",
+       "apihelp-query+imageusage-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+       "apihelp-query+imageusage-example-simple": "Show pages using [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+imageusage-example-generator": "Get information about pages using [[:File:Albert Einstein Head.jpg]]",
+
+       "apihelp-query+info-description": "Get basic page information.",
+       "apihelp-query+info-param-prop": "Which additional properties to get:\n;protection:List the protection level of each page.\n;talkid:The page ID of the talk page for each non-talk page.\n;watched:List the watched status of each page.\n;watchers:The number of watchers, if allowed.\n;notificationtimestamp:The watchlist notification timestamp of each page.\n;subjectid:The page ID of the parent page for each talk page.\n;url:Gives a full URL, an edit URL, and the canonical URL for each page.\n;readable:Whether the user can read this page.\n;preload:Gives the text returned by EditFormPreloadText.\n;displaytitle:Gives the way the page title is actually displayed.",
+       "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+info-example-simple": "Get information about the [[Main Page]]",
+       "apihelp-query+info-example-protection": "Get general and protection information about the [[Main Page]]",
+
+       "apihelp-query+iwbacklinks-description": "Find all pages that link to the given interwiki link.\n\nCan be used to find all links with a prefix, or all links to a title (with a given prefix). Using neither parameter is effectively \"all interwiki links\".",
+       "apihelp-query+iwbacklinks-param-prefix": "Prefix for the interwiki.",
+       "apihelp-query+iwbacklinks-param-title": "Interwiki link to search for. Must be used with $1blprefix.",
+       "apihelp-query+iwbacklinks-param-limit": "How many total pages to return.",
+       "apihelp-query+iwbacklinks-param-prop": "Which properties to get:\n;iwprefix:Adds the prefix of the interwiki.\n;iwtitle:Adds the title of the interwiki.",
+       "apihelp-query+iwbacklinks-param-dir": "The direction in which to list.",
+       "apihelp-query+iwbacklinks-example-simple": "Get pages linking to [[wikibooks:Test]]",
+       "apihelp-query+iwbacklinks-example-generator": "Get information about pages linking to [[wikibooks:Test]]",
+
+       "apihelp-query+iwlinks-description": "Returns all interwiki links from the given pages.",
+       "apihelp-query+iwlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
+       "apihelp-query+iwlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.",
+       "apihelp-query+iwlinks-param-limit": "How many interwiki links to return.",
+       "apihelp-query+iwlinks-param-prefix": "Only return interwiki links with this prefix.",
+       "apihelp-query+iwlinks-param-title": "Interwiki link to search for. Must be used with $1prefix.",
+       "apihelp-query+iwlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+iwlinks-example-simple": "Get interwiki links from the [[Main Page]]",
+
+       "apihelp-query+langbacklinks-description": "Find all pages that link to the given language link.\n\nCan be used to find all links with a language code, or all links to a title (with a given language). Using neither parameter is effectively \"all language links\".\n\nNote that this may not consider language links added by extensions.",
+       "apihelp-query+langbacklinks-param-lang": "Language for the language link.",
+       "apihelp-query+langbacklinks-param-title": "Language link to search for. Must be used with $1lang.",
+       "apihelp-query+langbacklinks-param-limit": "How many total pages to return.",
+       "apihelp-query+langbacklinks-param-prop": "Which properties to get:\n;lllang:Adds the language code of the language link.\n;lltitle:Adds the title of the language link.",
+       "apihelp-query+langbacklinks-param-dir": "The direction in which to list.",
+       "apihelp-query+langbacklinks-example-simple": "Get pages linking to [[:fr:Test]]",
+       "apihelp-query+langbacklinks-example-generator": "Get information about pages linking to [[:fr:Test]]",
+
+       "apihelp-query+langlinks-description": "Returns all interlanguage links from the given pages.",
+       "apihelp-query+langlinks-param-limit": "How many langlinks to return.",
+       "apihelp-query+langlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
+       "apihelp-query+langlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.\n;langname:Adds the localised language name (best effort). Use $1inlanguagecode to control the language.\n;autonym:Adds the native language name.",
+       "apihelp-query+langlinks-param-lang": "Only return language links with this language code.",
+       "apihelp-query+langlinks-param-title": "Link to search for. Must be used with $1lang.",
+       "apihelp-query+langlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+langlinks-param-inlanguagecode": "Language code for localised language names.",
+       "apihelp-query+langlinks-example-simple": "Get interlanguage links from the [[Main Page]]",
+
+       "apihelp-query+links-description": "Returns all links from the given pages.",
+       "apihelp-query+links-param-namespace": "Show links in these namespaces only.",
+       "apihelp-query+links-param-limit": "How many links to return.",
+       "apihelp-query+links-param-titles": "Only list links to these titles. Useful for checking whether a certain page links to a certain title.",
+       "apihelp-query+links-param-dir": "The direction in which to list.",
+       "apihelp-query+links-example-simple": "Get links from the [[Main Page]]",
+       "apihelp-query+links-example-generator": "Get information about the link pages in the [[Main Page]]",
+       "apihelp-query+links-example-namespaces": "Get links from the [[Main Page]] in the User and Template namespaces",
+
+       "apihelp-query+linkshere-description": "Find all pages that link to the given pages.",
+       "apihelp-query+linkshere-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+linkshere-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+linkshere-param-limit": "How many to return.",
+       "apihelp-query+linkshere-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+linkshere-example-simple": "Get a list of pages linking to the [[Main Page]]",
+       "apihelp-query+linkshere-example-generator": "Get information about pages linking to the [[Main Page]]",
+
+       "apihelp-query+logevents-description": "Get events from logs.",
+       "apihelp-query+logevents-param-prop": "Which properties to get:\n;ids:Adds the ID of the log event.\n;title:Adds the title of the page for the log event.\n;type:Adds the type of log event.\n;user:Adds the user responsible for the log event.\n;userid:Adds the user ID who was responsible for the log event.\n;timestamp:Adds the timestamp for the event.\n;comment:Adds the comment of the event.\n;parsedcomment:Adds the parsed comment of the event.\n;details:Lists additional details about the event.\n;tags:Lists tags for the event.",
+       "apihelp-query+logevents-param-type": "Filter log entries to only this type.",
+       "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides $1type. Wildcard actions like \"action/*\" allows to specify any string for the asterisk.",
+       "apihelp-query+logevents-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+logevents-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+logevents-param-user": "Filter entries to those made by the given user.",
+       "apihelp-query+logevents-param-title": "Filter entries to those related to a page.",
+       "apihelp-query+logevents-param-namespace": "Filter entries to those in the given namespace.",
+       "apihelp-query+logevents-param-prefix": "Filter entries that start with this prefix.",
+       "apihelp-query+logevents-param-tag": "Only list event entries tagged with this tag.",
+       "apihelp-query+logevents-param-limit": "How many total event entries to return.",
+       "apihelp-query+logevents-example-simple": "List recent log events",
+
+       "apihelp-query+pagepropnames-description": "List all page prop names in use on the wiki.",
+       "apihelp-query+pagepropnames-param-limit": "The maximum number of names to return.",
+       "apihelp-query+pagepropnames-example-simple": "Get first 10 prop names",
+
+       "apihelp-query+pageprops-description": "Get various properties defined in the page content.",
+       "apihelp-query+pageprops-param-prop": "Only list these props. Useful for checking whether a certain page uses a certain page prop.",
+       "apihelp-query+pageprops-example-simple": "Get properties for [[:Category:Foo]]",
+
+       "apihelp-query+pageswithprop-description": "List all pages using a given page prop.",
+       "apihelp-query+pageswithprop-param-propname": "Page prop for which to enumerate pages.",
+       "apihelp-query+pageswithprop-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;value:Adds the value of the page prop.",
+       "apihelp-query+pageswithprop-param-limit": "The maximum number of pages to return.",
+       "apihelp-query+pageswithprop-param-dir": "In which direction to sort.",
+       "apihelp-query+pageswithprop-example-simple": "List the first 10 pages using &#123;&#123;DISPLAYTITLE:&#125;&#125;",
+       "apihelp-query+pageswithprop-example-generator": "Get page info about first 10 pages using _&#95;NOTOC_&#95;",
+
+       "apihelp-query+prefixsearch-description": "Perform a prefix search for page titles.",
+       "apihelp-query+prefixsearch-param-search": "Search string.",
+       "apihelp-query+prefixsearch-param-namespace": "Namespaces to search.",
+       "apihelp-query+prefixsearch-param-limit": "Maximum number of results to return.",
+       "apihelp-query+prefixsearch-example-simple": "Search for page titles beginning with \"meaning\"",
+
+       "apihelp-query+protectedtitles-description": "List all titles protected from creation.",
+       "apihelp-query+protectedtitles-param-namespace": "Only list titles in these namespaces.",
+       "apihelp-query+protectedtitles-param-level": "Only list titles with these protection levels.",
+       "apihelp-query+protectedtitles-param-limit": "How many total pages to return.",
+       "apihelp-query+protectedtitles-param-start": "Start listing at this protection timestamp.",
+       "apihelp-query+protectedtitles-param-end": "Stop listing at this protection timestamp.",
+       "apihelp-query+protectedtitles-param-prop": "Which properties to get:\n;timestamp:Adds the timestamp of when protection was added.\n;user:Adds the user that added the protection.\n;userid:Adds the user id that added the protection.\n;comment:Adds the comment for the protection.\n;parsedcomment:Adds the parsed comment for the protection.\n;expiry:Adds the timestamp of when the protection will be lifted.\n;level:Adds the protection level.",
+       "apihelp-query+protectedtitles-example-simple": "List protected titles",
+       "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace",
+
+       "apihelp-query+querypage-description": "Get a list provided by a QueryPage-based special page.",
+       "apihelp-query+querypage-param-page": "The name of the special page. Note, this is case sensitive.",
+       "apihelp-query+querypage-param-limit": "Number of results to return.",
+       "apihelp-query+querypage-example-ancientpages": "Return results from [[Special:Ancientpages]].",
+
+       "apihelp-query+random-description": "Get a set of random pages.\n\nPages are listed in a fixed sequence, only the starting point is random. This means that if, for example, \"Main Page\" is the first random page on your list, \"List of fictional monkeys\" will *always* be second, \"List of people on stamps of Vanuatu\" third, etc.\n\nIf the number of pages in the namespace is lower than $1limit, you will get fewer pages. You will not get the same page twice.",
+       "apihelp-query+random-param-namespace": "Return pages in these namespaces only.",
+       "apihelp-query+random-param-limit": "Limit how many random pages will be returned.",
+       "apihelp-query+random-param-redirect": "Load a random redirect instead of a random page.",
+       "apihelp-query+random-example-simple": "Return two random pages from the main namespace",
+       "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace",
+
+       "apihelp-query+recentchanges-description": "Enumerate recent changes.",
+       "apihelp-query+recentchanges-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+recentchanges-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+recentchanges-param-namespace": "Filter changes to only these namespaces.",
+       "apihelp-query+recentchanges-param-user": "Only list changes by this user.",
+       "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user.",
+       "apihelp-query+recentchanges-param-tag": "Only list changes tagged with this tag.",
+       "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:\n;user:Adds the user responsible for the edit and tags if they are an IP.\n;userid:Adds the user id responsible for the edit.\n;comment:Adds the comment for the edit.\n;parsedcomment:Adds the parsed comment for the edit.\n;flags:Adds flags for the edit.\n;timestamp:Adds timestamp of the edit.\n;title:Adds the page title of the edit.\n;ids:Adds the page ID, recent changes ID and the new and old revision ID.\n;sizes:Adds the new and old page length in bytes.\n;redirect:Tags edit if page is a redirect.\n;patrolled:Tags patrollable edits as being patrolled or unpatrolled.\n;loginfo:Adds log information (logid, logtype, etc) to log entries.\n;tags:Lists tags for the entry.\n;sha1:Adds the content checksum for entries associated with a revision.",
+       "apihelp-query+recentchanges-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+recentchanges-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+       "apihelp-query+recentchanges-param-limit": "How many total changes to return.",
+       "apihelp-query+recentchanges-param-type": "Which types of changes to show.",
+       "apihelp-query+recentchanges-param-toponly": "Only list changes which are the latest revision.",
+       "apihelp-query+recentchanges-example-simple": "List recent changes",
+       "apihelp-query+recentchanges-example-generator": "Get page info about recent unpatrolled changes",
+
+       "apihelp-query+redirects-description": "Returns all redirects to the given pages.",
+       "apihelp-query+redirects-param-prop": "Which properties to get:\n;pageid:Page id of each redirect.\n;title:Title of each redirect.\n;fragment:Fragment of each redirect, if any.",
+       "apihelp-query+redirects-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+redirects-param-limit": "How many redirects to return.",
+       "apihelp-query+redirects-param-show": "Show only items that meet these criteria:\n;fragment:Only show redirects with a fragment.\n;!fragment:Only show redirects without a fragment.",
+       "apihelp-query+redirects-example-simple": "Get a list of redirects to the [[Main Page]]",
+       "apihelp-query+redirects-example-generator": "Get information about all redirects to the [[Main Page]]",
+
+       "apihelp-query+revisions-description": "Get revision information.\n\nMay be used in several ways:\n# Get data about a set of pages (last revision), by setting titles or pageids.\n# Get revisions for one given page, by using titles or pageids with start, end, or limit.\n# Get data about a set of revisions by setting their IDs with revids.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "May only be used with a single page (mode #2).",
+       "apihelp-query+revisions-param-prop": "Which properties to get for each revision:\n;ids:The ID of the revision.\n;flags:Revision flags (minor).\n;timestamp:The timestamp of the revision.\n;user:User that made the revision.\n;userid:User id of revision creator.\n;size:Length (bytes) of the revision.\n;sha1:SHA-1 (base 16) of the revision.\n;contentmodel:Content model id.\n;comment:Comment by the user for revision.\n;parsedcomment:Parsed comment by the user for the revision.\n;content:Text of the revision.\n;tags:Tags for the revision.",
+       "apihelp-query+revisions-param-limit": "Limit how many revisions will be returned.",
+       "apihelp-query+revisions-param-startid": "From which revision id to start enumeration.",
+       "apihelp-query+revisions-param-endid": "Stop revision enumeration on this revid.",
+       "apihelp-query+revisions-param-start": "From which revision timestamp to start enumeration.",
+       "apihelp-query+revisions-param-end": "Enumerate up to this timestamp.",
+       "apihelp-query+revisions-param-user": "Only include revisions made by user.",
+       "apihelp-query+revisions-param-excludeuser": "Exclude revisions made by user.",
+       "apihelp-query+revisions-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+revisions-param-expandtemplates": "Expand templates in revision content (requires $1prop=content).",
+       "apihelp-query+revisions-param-generatexml": "Generate XML parse tree for revision content (requires $1prop=content).",
+       "apihelp-query+revisions-param-parse": "Parse revision content (requires $1prop=content). For performance reasons, if this option is used, $1limit is enforced to 1.",
+       "apihelp-query+revisions-param-section": "Only retrieve the content of this section number.",
+       "apihelp-query+revisions-param-token": "Which tokens to obtain for each revision.",
+       "apihelp-query+revisions-param-diffto": "Revision ID to diff each revision to. Use \"prev\", \"next\" and \"cur\" for the previous, next and current revision respectively.",
+       "apihelp-query+revisions-param-difftotext": "Text to diff each revision to. Only diffs a limited number of revisions. Overrides $1diffto. If $1section is set, only that section will be diffed against this text.",
+       "apihelp-query+revisions-param-contentformat": "Serialization format used for $1difftotext and expected for output of content.",
+       "apihelp-query+revisions-example-content": "Get data with content for the last revision of titles \"API\" and \"Main Page\"",
+       "apihelp-query+revisions-example-last5": "Get last 5 revisions of the \"Main Page\"",
+       "apihelp-query+revisions-example-first5": "Get first 5 revisions of the \"Main Page\"",
+       "apihelp-query+revisions-example-first5-after": "Get first 5 revisions of the \"Main Page\" made after 2006-05-01",
+       "apihelp-query+revisions-example-first5-not-localhost": "Get first 5 revisions of the \"Main Page\" that were not made made by anonymous user \"127.0.0.1\"",
+       "apihelp-query+revisions-example-first5-user": "Get first 5 revisions of the \"Main Page\" that were made by the user \"MediaWiki default\"",
+
+       "apihelp-query+search-description": "Perform a full text search.",
+       "apihelp-query+search-param-search": "Search for all page titles (or content) that have this value.",
+       "apihelp-query+search-param-namespace": "Search only within these namespaces.",
+       "apihelp-query+search-param-what": "Which type of search to perform.",
+       "apihelp-query+search-param-info": "Which metadata to return.",
+       "apihelp-query+search-param-prop": "Which properties to return:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+       "apihelp-query+search-param-limit": "How many total pages to return.",
+       "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
+       "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
+       "apihelp-query+search-example-simple": "Search for \"meaning\"",
+       "apihelp-query+search-example-text": "Search texts for \"meaning\"",
+       "apihelp-query+search-example-generator": "Ger page info about the pages returned for a search for \"meaning\"",
+
+       "apihelp-query+siteinfo-description": "Return general information about the site.",
+       "apihelp-query+siteinfo-param-prop": "Which information to get:\n;general:Overall system information.\n;namespaces:List of registered namespaces and their canonical names.\n;namespacealiases:List of registered namespace aliases.\n;specialpagealiases:List of special page aliases.\n;magicwords:List of magic words and their aliases.\n;statistics:Returns site statistics.\n;interwikimap:Returns interwiki map (optionally filtered, (optionally localised by using $1inlanguagecode)).\n;dbrepllag:Returns database server with the highest replication lag.\n;usergroups:Returns user groups and the associated permissions.\n;extensions:Returns extensions installed on the wiki.\n;fileextensions:Returns list of file extensions allowed to be uploaded.\n;rightsinfo:Returns wiki rights (license) information if available.\n;restrictions:Returns information on available restriction (protection) types.\n;languages:Returns a list of languages MediaWiki supports (optionally localised by using $1inlanguagecode).\n;skins:Returns a list of all enabled skins (optionally localised by using $1inlanguagecode, otherwise in content language).\n;extensiontags:Returns a list of parser extension tags.\n;functionhooks:Returns a list of parser function hooks.\n;showhooks:Returns a list of all subscribed hooks (contents of $wgHooks).\n;variables:Returns a list of variable IDs.\n;protocols:Returns a list of protocols that are allowed in external links.\n;defaultoptions:Returns the default values for user preferences.",
+       "apihelp-query+siteinfo-param-filteriw": "Return only local or only nonlocal entries of the interwiki map.",
+       "apihelp-query+siteinfo-param-showalldb": "List all database servers, not just the one lagging the most.",
+       "apihelp-query+siteinfo-param-numberingroup": "Lists the number of users in user groups.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "Language code for localised language names (best effort) and skin names.",
+       "apihelp-query+siteinfo-example-simple": "Fetch site information",
+       "apihelp-query+siteinfo-example-interwiki": "Fetch a list of local interwiki prefixes",
+       "apihelp-query+siteinfo-example-replag": "Check the current replication lag",
+
+       "apihelp-query+stashimageinfo-description": "Returns file information for stashed files.",
+       "apihelp-query+stashimageinfo-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Alias for $1filekey, for backward compatibility.",
+       "apihelp-query+stashimageinfo-param-prop": "Which image information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;canonicaltitle:Adds the canonical title of the image file.\n;url:Gives URL to the image and the description page.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the image.\n;mime:Adds MIME type of the image.\n;thumbmime:Adds MIME type of the image thumbnail (requires url and param $1urlwidth).\n;metadata:Lists Exif metadata for the version of the image.\n;commonmetadata:Lists file format generic metadata for the version of the image.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;bitdepth:Adds the bit depth of the version.",
+       "apihelp-query+stashimageinfo-example-simple": "Returns information for a stashed file",
+       "apihelp-query+stashimageinfo-example-params": "Returns thumbnails for two stashed files",
+
+       "apihelp-query+tags-description": "List change tags.",
+       "apihelp-query+tags-param-limit": "The maximum number of tags to list.",
+       "apihelp-query+tags-param-prop": "Which properties to get:\n;name:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the amount of revisions that have this tag.",
+       "apihelp-query+tags-example-simple": "List available tags",
+
+       "apihelp-query+templates-description": "Returns all pages transcluded on the given pages.",
+       "apihelp-query+templates-param-namespace": "Show templates in this namespaces only.",
+       "apihelp-query+templates-param-limit": "How many templates to return.",
+       "apihelp-query+templates-param-templates": "Only list these templates. Useful for checking whether a certain page uses a certain template.",
+       "apihelp-query+templates-param-dir": "The direction in which to list.",
+       "apihelp-query+templates-example-simple": "Get templates from the [[Main Page]]",
+       "apihelp-query+templates-example-generator": "Get information about the template pages in the [[Main Page]]",
+       "apihelp-query+templates-example-namespaces": "Get templates from the [[Main Page]] in the User and Template namespaces",
+
+       "apihelp-query+tokens-description": "Gets tokens for data-modifying actions.",
+       "apihelp-query+tokens-param-type": "Types of token to request.",
+       "apihelp-query+tokens-example-simple": "Retrieve a csrf token (the default)",
+       "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token",
+
+       "apihelp-query+transcludedin-description": "Find all pages that transclude the given pages.",
+       "apihelp-query+transcludedin-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+transcludedin-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+transcludedin-param-limit": "How many to return.",
+       "apihelp-query+transcludedin-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+transcludedin-example-simple": "Get a list of pages transcluding the [[Main Page]]",
+       "apihelp-query+transcludedin-example-generator": "Get information about pages transcluding the [[Main Page]]",
+
+       "apihelp-query+usercontribs-description": "Get all edits by a user.",
+       "apihelp-query+usercontribs-param-limit": "The maximum number of contributions to return.",
+       "apihelp-query+usercontribs-param-start": "The start timestamp to return from.",
+       "apihelp-query+usercontribs-param-end": "The end timestamp to return to.",
+       "apihelp-query+usercontribs-param-user": "The users to retrieve contributions for.",
+       "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Overrides $1user.",
+       "apihelp-query+usercontribs-param-namespace": "Only list contributions in these namespaces.",
+       "apihelp-query+usercontribs-param-prop": "Include additional pieces of information:\n;ids:Adds the page ID and revision ID.\n;title:Adds the title and namespace ID of the page.\n;timestamp:Adds the timestamp of the edit.\n;comment:Adds the comment of the edit.\n;parsedcomment:Adds the parsed comment of the edit.\n;size:Adds the new size of the edit.\n;sizediff:Adds the size delta of the edit against its parent.\n;flags:Adds flags of the edit.\n;patrolled:Tags patrolled edits.\n;tags:Lists tags for the edit.",
+       "apihelp-query+usercontribs-param-show": "Show only items that meet thse criteria, e.g. non minor edits only: $2show=!minor.\n\nIf $2show=patrolled or $2show=!patrolled is set, revisions older than [https://www.mediawiki.org/wiki/Manual:$wgRCMaxAge $wgRCMaxAge] ($1 {{PLURAL:$1|second|seconds}}) won't be shown.",
+       "apihelp-query+usercontribs-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+usercontribs-param-toponly": "Only list changes which are the latest revision.",
+       "apihelp-query+usercontribs-example-user": "Show contributions of [[User:Example]]",
+       "apihelp-query+usercontribs-example-ipprefix": "Show contributions from all IPs with prefix \"192.0.2.\"",
+
+       "apihelp-query+userinfo-description": "Get information about the current user.",
+       "apihelp-query+userinfo-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the current user is blocked, by whom, and for what reason.\n;hasmsg:Adds a tag \"message\" if the current user has pending messages.\n;groups:Lists all the groups the current user belongs to.\n;implicitgroups:Lists all the groups the current user is automatically a member of.\n;rights:Lists all the rights the current user has.\n;changeablegroups:Lists the groups the current user can add to and remove from.\n;options:Lists all preferences the current user has set.\n;preferencestoken:DEPRECATED! Get a token to change current user's preferences.\n;editcount:Adds the current user's edit count.\n;ratelimits:Lists all rate limits applying to the current user.\n;realname:Adds the user's real name.\n;email:Adds the user's email address and email authentication date.\n;acceptlang:Echoes the Accept-Language header sent by the client in a structured format.\n;registrationdate:Adds the user's registration date.\n;unreadcount:Adds the count of unread pages on the user's watchlist (maximum $1; returns \"$2\" if more).",
+       "apihelp-query+userinfo-example-simple": "Get information about the current user",
+       "apihelp-query+userinfo-example-data": "Get additional information about the current user",
+
+       "apihelp-query+users-description": "Get information about a list of users.",
+       "apihelp-query+users-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the user is blocked, by whom, and for what reason.\n;groups:Lists all the groups each user belongs to.\n;implicitgroups:Lists all the groups a user is automatically a member of.\n;rights:Lists all the rights each user has.\n;editcount:Adds the user's edit count.\n;registration:Adds the user's registration timestamp.\n;emailable:Tags if the user can and wants to receive email through [[Special:Emailuser]].\n;gender:Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
+       "apihelp-query+users-param-users": "A list of users to obtain information for.",
+       "apihelp-query+users-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+users-example-simple": "Return information for [[User:Example]]",
+
+       "apihelp-query+watchlist-description": "Get recent changes to pages in the logged in user's watchlist.",
+       "apihelp-query+watchlist-param-allrev": "Include multiple revisions of the same page within given timeframe.",
+       "apihelp-query+watchlist-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+watchlist-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+watchlist-param-namespace": "Filter changes to only the given namespaces.",
+       "apihelp-query+watchlist-param-user": "Only list changes by this user.",
+       "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user.",
+       "apihelp-query+watchlist-param-limit": "How many total results to return per request.",
+       "apihelp-query+watchlist-param-prop": "Which additional items to get:\n;ids:Adds revision ids and page ids.\n;title:Adds title of the page.\n;flags:Adds flags for the edit.\n;user:Adds the user who made the edit.\n;userid:Adds user id of whom made the edit.\n;comment:Adds comment of the edit.\n;parsedcomment:Adds parsed comment of the edit.\n;timestamp:Adds timestamp of the edit.\n;patrol:Tags edits that are patrolled.\n;sizes:Adds the old and new lengths of the page.\n;notificationtimestamp:Adds timestamp of when the user was last notified about the edit.\n;loginfo:Adds log information where appropriate.",
+       "apihelp-query+watchlist-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "Which types of changes to show:\n;edit:Regular page edits.\n;external:External changes.\n;new:Page creations.\n;log:Log entries.",
+       "apihelp-query+watchlist-param-owner": "Used along with $1token to access a different user's watchlist.",
+       "apihelp-query+watchlist-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+       "apihelp-query+watchlist-example-simple": "List the top revision for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-props": "Fetch additional information about the top revision for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-allrev": "Fetch information about all recent changes to pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-generator": "Fetch page info for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-generator-rev": "Fetch revision info for recent changes to pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-wlowner": "List the top revision for recently changed pages on [[User:Example]]'s watchlist",
+
+       "apihelp-query+watchlistraw-description": "Get all pages on the logged in user's watchlist.",
+       "apihelp-query+watchlistraw-param-namespace": "Only list pages in the given namespaces.",
+       "apihelp-query+watchlistraw-param-limit": "How many total results to return per request.",
+       "apihelp-query+watchlistraw-param-prop": "Which additional properties to get:\n;changed:Adds timestamp of when the user was last notified about the edit.",
+       "apihelp-query+watchlistraw-param-show": "Only list items that meet these criteria.",
+       "apihelp-query+watchlistraw-param-owner": "Used along with $1token to access a different user's watchlist.",
+       "apihelp-query+watchlistraw-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+       "apihelp-query+watchlistraw-example-simple": "List pages on the current user's watchlist",
+       "apihelp-query+watchlistraw-example-generator": "Fetch page info for pages on the current user's watchlist",
+
+       "apihelp-revisiondelete-description": "Delete and undelete revisions.",
+       "apihelp-revisiondelete-param-type": "Type of revision deletion being performed.",
+       "apihelp-revisiondelete-param-target": "Page title for the revision deletion, if required for the type.",
+       "apihelp-revisiondelete-param-ids": "Identifiers for the revisions to be deleted.",
+       "apihelp-revisiondelete-param-hide": "What to hide for each revision.",
+       "apihelp-revisiondelete-param-show": "What to unhide for each revision.",
+       "apihelp-revisiondelete-param-suppress": "Whether to suppress data from administrators as well as others.",
+       "apihelp-revisiondelete-param-reason": "Reason for the deletion or undeletion.",
+       "apihelp-revisiondelete-example-revision": "Hide content for revision 12345 on the Main Page",
+       "apihelp-revisiondelete-example-log": "Hide all data on log entry 67890 with the reason \"BLP violation\"",
+
+       "apihelp-rollback-description": "Undo the last edit to the page.\n\nIf the last user who edited the page made multiple edits in a row, they will all be rolled back.",
+       "apihelp-rollback-param-title": "Title of the page you want to roll back. Cannot be used together with $1pageid.",
+       "apihelp-rollback-param-pageid": "Page ID of the page you want to roll back. Cannot be used together with $1title.",
+       "apihelp-rollback-param-user": "Name of the user whose edits are to be rolled back.",
+       "apihelp-rollback-param-summary": "Custom edit summary. If empty, default summary will be used.",
+       "apihelp-rollback-param-markbot": "Mark the reverted edits and the revert as bot edits.",
+       "apihelp-rollback-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-rollback-example-simple": "Roll back the last edits to [[Main Page]] by user Example",
+       "apihelp-rollback-example-summary": "Roll back the last edits to [[Main Page]] by IP user 192.0.2.5 with summary \"Reverting vandalism\", and mark those edits and the revert as \"bot\"",
+
+       "apihelp-rsd-description": "Export an RSD (Really Simple Discovery) schema.",
+       "apihelp-rsd-example-simple": "Export the RSD schema",
+
+       "apihelp-setnotificationtimestamp-description": "Update the notification timestamp for watched pages.\n\nThis affects the highlighting of changed pages in the watchlist and history, and the sending of email when the \"Email me when a page on my watchlist is changed\" preference is enabled.",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "Work on all watched pages.",
+       "apihelp-setnotificationtimestamp-param-timestamp": "Timestamp to which to set the notification timestamp.",
+       "apihelp-setnotificationtimestamp-param-torevid": "Revision to set the notification timestamp to (one page only).",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "Revision to set the notification timestamp newer than (one page only).",
+       "apihelp-setnotificationtimestamp-example-all": "Reset the notification status for the entire watchlist",
+       "apihelp-setnotificationtimestamp-example-page": "Reset the notification status for \"Main page\"",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "Set the notification timestamp for \"Main page\" so all edits since 1 January 2012 are unviewed",
+       "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the User namespace",
+
+       "apihelp-tokens-description": "Get tokens for data-modifying actions.\n\nThis module is deprecated in favor of [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "Types of token to request.",
+       "apihelp-tokens-example-edit": "Retrieve an edit token (the default).",
+       "apihelp-tokens-example-emailmove": "Retrieve an email token and a move token.",
+
+       "apihelp-unblock-description": "Unblock a user.",
+       "apihelp-unblock-param-id": "ID of the block to unblock (obtained through list=blocks). Cannot be used together with $1user.",
+       "apihelp-unblock-param-user": "Username, IP address or IP range to unblock. Cannot be used together with $1id.",
+       "apihelp-unblock-param-reason": "Reason for unblock.",
+       "apihelp-unblock-example-id": "Unblock block ID #105",
+       "apihelp-unblock-example-user": "Unblock user Bob with reason \"Sorry Bob\"",
+
+       "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], and a list of deleted file ids can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+       "apihelp-undelete-param-title": "Title of the page to restore.",
+       "apihelp-undelete-param-reason": "Reason for restoring.",
+       "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both $1timestamps and $1fileids are empty, all will be restored.",
+       "apihelp-undelete-param-fileids": "IDs of the file revisions to restore. If both $1timestamps and $1fileids are empty, all will be restored.",
+       "apihelp-undelete-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-undelete-example-page": "Undelete [[Main Page]]",
+       "apihelp-undelete-example-revisions": "Undelete two revisions of [[Main Page]]",
+
+       "apihelp-upload-description": "Upload a file, or get the status of pending uploads.\n\nSeveral methods are available:\n* Upload file contents directly, using the \"$1file\" parameter.\n* Upload the file in pieces, using the \"$1filesize\", \"$1chunk\" and \"$1offset\" parameters.* Have the MediaWiki server fetch a file from a URL, using the \"$1url\" parameter.\n* Complete an earlier upload that failed due to warnings, using the \"$1filekey\" parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending the \"$1file\".",
+       "apihelp-upload-param-filename": "Target filename.",
+       "apihelp-upload-param-comment": "Upload comment. Also used as the initial page text for new files if \"$1text\" is not specified.",
+       "apihelp-upload-param-text": "Initial page text for new files.",
+       "apihelp-upload-param-watch": "Watch the page.",
+       "apihelp-upload-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-upload-param-ignorewarnings": "Ignore any warnings.",
+       "apihelp-upload-param-file": "File contents.",
+       "apihelp-upload-param-url": "URL to fetch the file from.",
+       "apihelp-upload-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+       "apihelp-upload-param-sessionkey": "Same as $1filekey, maintained for backward compatibility.",
+       "apihelp-upload-param-stash": "If set, the server will not add the file to the repository and stash it temporarily.",
+       "apihelp-upload-param-filesize": "Filesize of entire upload.",
+       "apihelp-upload-param-offset": "Offset of chunk in bytes.",
+       "apihelp-upload-param-chunk": "Chunk contents.",
+       "apihelp-upload-param-async": "Make potentially large file operations asynchronous when possible.",
+       "apihelp-upload-param-asyncdownload": "Make fetching a URL asynchronous.",
+       "apihelp-upload-param-leavemessage": "If asyncdownload is used, leave a message on the user talk page if finished.",
+       "apihelp-upload-param-statuskey": "Fetch the upload status for this file key (upload by URL).",
+       "apihelp-upload-param-checkstatus": "Only fetch the upload status for the given file key.",
+       "apihelp-upload-example-url": "Upload from a URL",
+       "apihelp-upload-example-filekey": "Complete an upload that failed due to warnings",
+
+       "apihelp-userrights-description": "Change a user's group membership.",
+       "apihelp-userrights-param-user": "User name.",
+       "apihelp-userrights-param-userid": "User id.",
+       "apihelp-userrights-param-add": "Add the user to these groups.",
+       "apihelp-userrights-param-remove": "Remove the user from these groups.",
+       "apihelp-userrights-param-reason": "Reason for the change.",
+       "apihelp-userrights-example-user": "Add user FooBot to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
+       "apihelp-userrights-example-userid": "Add the user with id 123 to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
+
+       "apihelp-watch-description": "Add or remove pages from the current user's watchlist.",
+       "apihelp-watch-param-title": "The page to (un)watch. Use $1titles instead.",
+       "apihelp-watch-param-unwatch": "If set the page will be unwatched rather than watched.",
+       "apihelp-watch-example-watch": "Watch the page \"Main Page\"",
+       "apihelp-watch-example-unwatch": "Unwatch the page \"Main Page\"",
+       "apihelp-watch-example-generator": "Watch the first few pages in the main namespace",
+
        "apihelp-format-example-generic": "Format the query result in the $1 format",
        "apihelp-dbg-description": "Output data in PHP's var_export() format.",
        "apihelp-dbgfm-description": "Output data in PHP's var_export() format (pretty-print in HTML).",
        "apihelp-yaml-description": "Output data in YAML format.",
        "apihelp-yamlfm-description": "Output data in YAML format (pretty-print in HTML).",
 
-       "apihelp-help-description": "Display help for the specified modules.",
-       "apihelp-help-param-modules": "Modules to display help for (values of the action= and format= parameters, or \"main\"). Can specify submodules with a \"+\".",
-       "apihelp-help-param-submodules": "Include help for submodules of the named module.",
-       "apihelp-help-param-recursivesubmodules": "Include help for submodules recursively.",
-       "apihelp-help-param-helpformat": "Format of the help output.",
-       "apihelp-help-param-wrap": "Wrap the output in a standard API response structure.",
-       "apihelp-help-param-toc": "Include a table of contents in the HTML output.",
-       "apihelp-help-example-main": "Help for the main module",
-       "apihelp-help-example-recursive": "All help in one page",
-       "apihelp-help-example-help": "Help for the help module itself",
-       "apihelp-help-example-query": "Help for two query submodules",
-
        "api-format-title": "MediaWiki API result",
        "api-format-prettyprint-header": "You are looking at the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the format parameter to change the output format. To see the non-HTML representation of the $1 format, set format=$2.\n\nSee the [https://www.mediawiki.org/wiki/API complete documentation], or [[Special:ApiHelp/main|API help]] for more information.",
 
+       "api-orm-param-props": "Fields to query.",
+       "api-orm-param-limit": "Max amount of rows to return.",
+
+       "api-pageset-param-titles": "A list of titles to work on.",
+       "api-pageset-param-pageids": "A list of page IDs to work on.",
+       "api-pageset-param-revids": "A list of revision IDs to work on.",
+       "api-pageset-param-generator": "Get the list of pages to work on by executing the specified query module.\n\n'''NOTE:''' generator parameter names must be prefixed with a \"g\", see examples.",
+       "api-pageset-param-redirects-generator": "Automatically resolve redirects in $1titles, $1pageids, and $1revids, and in pages returned by $1generator.",
+       "api-pageset-param-redirects-nogenerator": "Automatically resolve redirects in $1titles, $1pageids, and $1revids.",
+       "api-pageset-param-converttitles": "Convert titles to other variants if necessary. Only works if the wiki's content language supports variant conversion. Languages that support variant conversion include $1.",
+
        "api-help-title": "MediaWiki API help",
        "api-help-lead": "This is an auto-generated MediaWiki API documentation page.\n\nDocumentation and examples: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Main module",
        "api-help-param-default": "Default: $1",
        "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(empty)</span>",
        "api-help-param-token": "A \"$1\" token retrieved from [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "For compatibility, the token used in the web UI is also accepted.",
+       "api-help-param-disabled-in-miser-mode": "Disabled due to [https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser mode].",
+       "api-help-param-limited-in-miser-mode": "'''NOTE:''' Due to [https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser mode], using this may result in fewer than \"$1limit\" results returned before continuing; in extreme cases, zero results may be returned.",
+       "api-help-param-direction": "In which direction to enumerate:\n;newer:List oldest first. Note: $1start has to be before $1end.\n;older:List newest first (default). Note: $1start has to be later than $1end.",
+       "api-help-param-continue": "When more results are available, use this to continue.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(no description)</span>",
        "api-help-examples": "{{PLURAL:$1|Example|Examples}}:",
        "api-help-permissions": "{{PLURAL:$1|Permission|Permissions}}:",
index 0b10779..6fac19c 100644 (file)
        "apihelp-main-param-origin": "{{doc-apihelp-param|main|origin}}",
        "apihelp-main-param-uselang": "{{doc-apihelp-param|main|uselang}}",
 
+       "apihelp-block-description": "{{doc-apihelp-description|block}}",
+       "apihelp-block-param-user": "{{doc-apihelp-param|block|user}}",
+       "apihelp-block-param-expiry": "{{doc-apihelp-param|block|expiry}}",
+       "apihelp-block-param-reason": "{{doc-apihelp-param|block|reason}}",
+       "apihelp-block-param-anononly": "{{doc-apihelp-param|block|anononly}}",
+       "apihelp-block-param-nocreate": "{{doc-apihelp-param|block|nocreate}}",
+       "apihelp-block-param-autoblock": "{{doc-apihelp-param|block|autoblock}}",
+       "apihelp-block-param-noemail": "{{doc-apihelp-param|block|noemail}}",
+       "apihelp-block-param-hidename": "{{doc-apihelp-param|block|hidename}}",
+       "apihelp-block-param-allowusertalk": "{{doc-apihelp-param|block|allowusertalk}}",
+       "apihelp-block-param-reblock": "{{doc-apihelp-param|block|reblock}}",
+       "apihelp-block-param-watchuser": "{{doc-apihelp-param|block|watchuser}}",
+       "apihelp-block-example-ip-simple": "{{doc-apihelp-example|block}}",
+       "apihelp-block-example-user-complex": "{{doc-apihelp-example|block}}",
+
+       "apihelp-clearhasmsg-description": "{{doc-apihelp-description|clearhasmsg}}",
+       "apihelp-clearhasmsg-example-1": "{{doc-apihelp-example|clearhasmsg}}",
+
+       "apihelp-compare-description": "{{doc-apihelp-description|compare}}",
+       "apihelp-compare-param-fromtitle": "{{doc-apihelp-param|compare|fromtitle}}",
+       "apihelp-compare-param-fromid": "{{doc-apihelp-param|compare|fromid}}",
+       "apihelp-compare-param-fromrev": "{{doc-apihelp-param|compare|fromrev}}",
+       "apihelp-compare-param-totitle": "{{doc-apihelp-param|compare|totitle}}",
+       "apihelp-compare-param-toid": "{{doc-apihelp-param|compare|toid}}",
+       "apihelp-compare-param-torev": "{{doc-apihelp-param|compare|torev}}",
+       "apihelp-compare-example-1": "{{doc-apihelp-example|compare}}",
+
+       "apihelp-createaccount-description": "{{doc-apihelp-description|createaccount}}",
+       "apihelp-createaccount-param-name": "{{doc-apihelp-param|createaccount|name}}",
+       "apihelp-createaccount-param-password": "{{doc-apihelp-param|createaccount|password}}",
+       "apihelp-createaccount-param-domain": "{{doc-apihelp-param|createaccount|domain}}",
+       "apihelp-createaccount-param-token": "{{doc-apihelp-param|createaccount|token}}",
+       "apihelp-createaccount-param-email": "{{doc-apihelp-param|createaccount|email}}",
+       "apihelp-createaccount-param-realname": "{{doc-apihelp-param|createaccount|realname}}",
+       "apihelp-createaccount-param-mailpassword": "{{doc-apihelp-param|createaccount|mailpassword}}",
+       "apihelp-createaccount-param-reason": "{{doc-apihelp-param|createaccount|reason}}",
+       "apihelp-createaccount-param-language": "{{doc-apihelp-param|createaccount|language}}",
+       "apihelp-createaccount-example-pass": "{{doc-apihelp-example|createaccount}}",
+       "apihelp-createaccount-example-mail": "{{doc-apihelp-example|createaccount}}",
+
+       "apihelp-delete-description": "{{doc-apihelp-description|delete}}",
+       "apihelp-delete-param-title": "{{doc-apihelp-param|delete|title}}",
+       "apihelp-delete-param-pageid": "{{doc-apihelp-param|delete|pageid}}",
+       "apihelp-delete-param-reason": "{{doc-apihelp-param|delete|reason}}",
+       "apihelp-delete-param-watch": "{{doc-apihelp-param|delete|watch}}",
+       "apihelp-delete-param-watchlist": "{{doc-apihelp-param|delete|watchlist}}",
+       "apihelp-delete-param-unwatch": "{{doc-apihelp-param|delete|unwatch}}",
+       "apihelp-delete-param-oldimage": "{{doc-apihelp-param|delete|oldimage}}",
+       "apihelp-delete-example-simple": "{{doc-apihelp-example|delete}}",
+       "apihelp-delete-example-reason": "{{doc-apihelp-example|delete}}",
+
+       "apihelp-disabled-description": "{{doc-apihelp-description|disabled}}",
+
+       "apihelp-edit-description": "{{doc-apihelp-description|edit}}",
+       "apihelp-edit-param-title": "{{doc-apihelp-param|edit|title}}",
+       "apihelp-edit-param-pageid": "{{doc-apihelp-param|edit|pageid}}",
+       "apihelp-edit-param-section": "{{doc-apihelp-param|edit|section}}",
+       "apihelp-edit-param-sectiontitle": "{{doc-apihelp-param|edit|sectiontitle}}",
+       "apihelp-edit-param-text": "{{doc-apihelp-param|edit|text}}",
+       "apihelp-edit-param-summary": "{{doc-apihelp-param|edit|summary}}",
+       "apihelp-edit-param-minor": "{{doc-apihelp-param|edit|minor}}",
+       "apihelp-edit-param-notminor": "{{doc-apihelp-param|edit|notminor}}",
+       "apihelp-edit-param-bot": "{{doc-apihelp-param|edit|bot}}",
+       "apihelp-edit-param-basetimestamp": "{{doc-apihelp-param|edit|basetimestamp}}",
+       "apihelp-edit-param-starttimestamp": "{{doc-apihelp-param|edit|starttimestamp}}",
+       "apihelp-edit-param-recreate": "{{doc-apihelp-param|edit|recreate}}",
+       "apihelp-edit-param-createonly": "{{doc-apihelp-param|edit|createonly}}",
+       "apihelp-edit-param-nocreate": "{{doc-apihelp-param|edit|nocreate}}",
+       "apihelp-edit-param-watch": "{{doc-apihelp-param|edit|watch}}",
+       "apihelp-edit-param-unwatch": "{{doc-apihelp-param|edit|unwatch}}",
+       "apihelp-edit-param-watchlist": "{{doc-apihelp-param|edit|watchlist}}",
+       "apihelp-edit-param-md5": "{{doc-apihelp-param|edit|md5}}",
+       "apihelp-edit-param-prependtext": "{{doc-apihelp-param|edit|prependtext}}",
+       "apihelp-edit-param-appendtext": "{{doc-apihelp-param|edit|appendtext}}",
+       "apihelp-edit-param-undo": "{{doc-apihelp-param|edit|undo}}",
+       "apihelp-edit-param-undoafter": "{{doc-apihelp-param|edit|undoafter}}",
+       "apihelp-edit-param-redirect": "{{doc-apihelp-param|edit|redirect}}",
+       "apihelp-edit-param-contentformat": "{{doc-apihelp-param|edit|contentformat}}",
+       "apihelp-edit-param-contentmodel": "{{doc-apihelp-param|edit|contentmodel}}",
+       "apihelp-edit-param-token": "{{doc-apihelp-param|edit|token}}",
+       "apihelp-edit-example-edit": "{{doc-apihelp-example|edit}}",
+       "apihelp-edit-example-prepend": "{{doc-apihelp-example|edit}}",
+       "apihelp-edit-example-undo": "{{doc-apihelp-example|edit}}",
+
+       "apihelp-emailuser-description": "{{doc-apihelp-description|emailuser}}",
+       "apihelp-emailuser-param-target": "{{doc-apihelp-param|emailuser|target}}",
+       "apihelp-emailuser-param-subject": "{{doc-apihelp-param|emailuser|subject}}",
+       "apihelp-emailuser-param-text": "{{doc-apihelp-param|emailuser|text}}",
+       "apihelp-emailuser-param-ccme": "{{doc-apihelp-param|emailuser|ccme}}",
+       "apihelp-emailuser-example-email": "{{doc-apihelp-example|emailuser}}",
+
+       "apihelp-expandtemplates-description": "{{doc-apihelp-description|expandtemplates}}",
+       "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
+       "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
+       "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop}}",
+       "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
+       "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
+       "apihelp-expandtemplates-example-simple": "{{doc-apihelp-example|expandtemplates}}",
+
+       "apihelp-feedcontributions-description": "{{doc-apihelp-description|feedcontributions}}",
+       "apihelp-feedcontributions-param-feedformat": "{{doc-apihelp-param|feedcontributions|feedformat}}",
+       "apihelp-feedcontributions-param-user": "{{doc-apihelp-param|feedcontributions|user}}",
+       "apihelp-feedcontributions-param-namespace": "{{doc-apihelp-param|feedcontributions|namespace}}",
+       "apihelp-feedcontributions-param-year": "{{doc-apihelp-param|feedcontributions|year}}",
+       "apihelp-feedcontributions-param-month": "{{doc-apihelp-param|feedcontributions|month}}",
+       "apihelp-feedcontributions-param-tagfilter": "{{doc-apihelp-param|feedcontributions|tagfilter}}",
+       "apihelp-feedcontributions-param-deletedonly": "{{doc-apihelp-param|feedcontributions|deletedonly}}",
+       "apihelp-feedcontributions-param-toponly": "{{doc-apihelp-param|feedcontributions|toponly}}",
+       "apihelp-feedcontributions-param-newonly": "{{doc-apihelp-param|feedcontributions|newonly}}",
+       "apihelp-feedcontributions-param-showsizediff": "{{doc-apihelp-param|feedcontributions|showsizediff}}",
+       "apihelp-feedcontributions-example-simple": "{{doc-apihelp-example|feedcontributions}}",
+
+       "apihelp-feedrecentchanges-description": "{{doc-apihelp-description|feedrecentchanges}}",
+       "apihelp-feedrecentchanges-param-feedformat": "{{doc-apihelp-param|feedrecentchanges|feedformat}}",
+       "apihelp-feedrecentchanges-param-namespace": "{{doc-apihelp-param|feedrecentchanges|namespace}}",
+       "apihelp-feedrecentchanges-param-invert": "{{doc-apihelp-param|feedrecentchanges|invert}}",
+       "apihelp-feedrecentchanges-param-associated": "{{doc-apihelp-param|feedrecentchanges|associated}}",
+       "apihelp-feedrecentchanges-param-days": "{{doc-apihelp-param|feedrecentchanges|days}}",
+       "apihelp-feedrecentchanges-param-limit": "{{doc-apihelp-param|feedrecentchanges|limit}}",
+       "apihelp-feedrecentchanges-param-from": "{{doc-apihelp-param|feedrecentchanges|from}}",
+       "apihelp-feedrecentchanges-param-hideminor": "{{doc-apihelp-param|feedrecentchanges|hideminor}}",
+       "apihelp-feedrecentchanges-param-hidebots": "{{doc-apihelp-param|feedrecentchanges|hidebots}}",
+       "apihelp-feedrecentchanges-param-hideanons": "{{doc-apihelp-param|feedrecentchanges|hideanons}}",
+       "apihelp-feedrecentchanges-param-hideliu": "{{doc-apihelp-param|feedrecentchanges|hideliu}}",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "{{doc-apihelp-param|feedrecentchanges|hidepatrolled}}",
+       "apihelp-feedrecentchanges-param-hidemyself": "{{doc-apihelp-param|feedrecentchanges|hidemyself}}",
+       "apihelp-feedrecentchanges-param-tagfilter": "{{doc-apihelp-param|feedrecentchanges|tagfilter}}",
+       "apihelp-feedrecentchanges-param-target": "{{doc-apihelp-param|feedrecentchanges|target}}",
+       "apihelp-feedrecentchanges-param-showlinkedto": "{{doc-apihelp-param|feedrecentchanges|showlinkedto}}",
+       "apihelp-feedrecentchanges-example-simple": "{{doc-apihelp-example|feedrecentchanges}}",
+       "apihelp-feedrecentchanges-example-30days": "{{doc-apihelp-example|feedrecentchanges}}",
+
+       "apihelp-feedwatchlist-description": "{{doc-apihelp-description|feedwatchlist}}",
+       "apihelp-feedwatchlist-param-feedformat": "{{doc-apihelp-param|feedwatchlist|feedformat}}",
+       "apihelp-feedwatchlist-param-hours": "{{doc-apihelp-param|feedwatchlist|hours}}",
+       "apihelp-feedwatchlist-param-linktosections": "{{doc-apihelp-param|feedwatchlist|linktosections}}",
+       "apihelp-feedwatchlist-example-default": "{{doc-apihelp-example|feedwatchlist}}",
+       "apihelp-feedwatchlist-example-all6hrs": "{{doc-apihelp-example|feedwatchlist}}",
+
+       "apihelp-filerevert-description": "{{doc-apihelp-description|filerevert}}",
+       "apihelp-filerevert-param-filename": "{{doc-apihelp-param|filerevert|filename}}",
+       "apihelp-filerevert-param-comment": "{{doc-apihelp-param|filerevert|comment}}",
+       "apihelp-filerevert-param-archivename": "{{doc-apihelp-param|filerevert|archivename}}",
+       "apihelp-filerevert-example-revert": "{{doc-apihelp-example|filerevert}}",
+
+       "apihelp-help-description": "{{doc-apihelp-description|help}}",
+       "apihelp-help-param-modules": "{{doc-apihelp-param|help|modules}}",
+       "apihelp-help-param-submodules": "{{doc-apihelp-param|help|submodules}}",
+       "apihelp-help-param-recursivesubmodules": "{{doc-apihelp-param|help|recursivesubmodules}}",
+       "apihelp-help-param-helpformat": "{{doc-apihelp-param|help|helpformat}}",
+       "apihelp-help-param-wrap": "{{doc-apihelp-param|help|wrap}}",
+       "apihelp-help-param-toc": "{{doc-apihelp-param|help|toc}}",
+       "apihelp-help-example-main": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
+
+       "apihelp-imagerotate-description": "{{doc-apihelp-description|imagerotate}}",
+       "apihelp-imagerotate-param-rotation": "{{doc-apihelp-param|imagerotate|rotation}}",
+       "apihelp-imagerotate-example-simple": "{{doc-apihelp-example|imagerotate}}",
+       "apihelp-imagerotate-example-generator": "{{doc-apihelp-example|imagerotate}}",
+
+       "apihelp-import-description": "{{doc-apihelp-description|import}}",
+       "apihelp-import-param-summary": "{{doc-apihelp-param|import|summary}}",
+       "apihelp-import-param-xml": "{{doc-apihelp-param|import|xml}}",
+       "apihelp-import-param-interwikisource": "{{doc-apihelp-param|import|interwikisource}}",
+       "apihelp-import-param-interwikipage": "{{doc-apihelp-param|import|interwikipage}}",
+       "apihelp-import-param-fullhistory": "{{doc-apihelp-param|import|fullhistory}}",
+       "apihelp-import-param-templates": "{{doc-apihelp-param|import|templates}}",
+       "apihelp-import-param-namespace": "{{doc-apihelp-param|import|namespace}}",
+       "apihelp-import-param-rootpage": "{{doc-apihelp-param|import|rootpage}}",
+       "apihelp-import-example-import": "{{doc-apihelp-example|import}}",
+
+       "apihelp-login-description": "{{doc-apihelp-description|login}}",
+       "apihelp-login-param-name": "{{doc-apihelp-param|login|name}}",
+       "apihelp-login-param-password": "{{doc-apihelp-param|login|password}}",
+       "apihelp-login-param-domain": "{{doc-apihelp-param|login|domain}}",
+       "apihelp-login-param-token": "{{doc-apihelp-param|login|token}}",
+       "apihelp-login-example-gettoken": "{{doc-apihelp-example|login}}",
+       "apihelp-login-example-login": "{{doc-apihelp-example|login}}",
+
+       "apihelp-logout-description": "{{doc-apihelp-description|logout}}",
+       "apihelp-logout-example-logout": "{{doc-apihelp-example|logout}}",
+
+       "apihelp-move-description": "{{doc-apihelp-description|move}}",
+       "apihelp-move-param-from": "{{doc-apihelp-param|move|from}}",
+       "apihelp-move-param-fromid": "{{doc-apihelp-param|move|fromid}}",
+       "apihelp-move-param-to": "{{doc-apihelp-param|move|to}}",
+       "apihelp-move-param-reason": "{{doc-apihelp-param|move|reason}}",
+       "apihelp-move-param-movetalk": "{{doc-apihelp-param|move|movetalk}}",
+       "apihelp-move-param-movesubpages": "{{doc-apihelp-param|move|movesubpages}}",
+       "apihelp-move-param-noredirect": "{{doc-apihelp-param|move|noredirect}}",
+       "apihelp-move-param-watch": "{{doc-apihelp-param|move|watch}}",
+       "apihelp-move-param-unwatch": "{{doc-apihelp-param|move|unwatch}}",
+       "apihelp-move-param-watchlist": "{{doc-apihelp-param|move|watchlist}}",
+       "apihelp-move-param-ignorewarnings": "{{doc-apihelp-param|move|ignorewarnings}}",
+       "apihelp-move-example-move": "{{doc-apihelp-example|move}}",
+
+       "apihelp-opensearch-description": "{{doc-apihelp-description|opensearch}}",
+       "apihelp-opensearch-param-search": "{{doc-apihelp-param|opensearch|search}}",
+       "apihelp-opensearch-param-limit": "{{doc-apihelp-param|opensearch|limit}}",
+       "apihelp-opensearch-param-namespace": "{{doc-apihelp-param|opensearch|namespace}}",
+       "apihelp-opensearch-param-suggest": "{{doc-apihelp-param|opensearch|suggest}}",
+       "apihelp-opensearch-param-format": "{{doc-apihelp-param|opensearch|format}}",
+       "apihelp-opensearch-example-te": "{{doc-apihelp-example|opensearch}}",
+
+       "apihelp-options-description": "{{doc-apihelp-description|options}}",
+       "apihelp-options-param-reset": "{{doc-apihelp-param|options|reset}}",
+       "apihelp-options-param-resetkinds": "{{doc-apihelp-param|options|resetkinds}}",
+       "apihelp-options-param-change": "{{doc-apihelp-param|options|change}}",
+       "apihelp-options-param-optionname": "{{doc-apihelp-param|options|optionname}}",
+       "apihelp-options-param-optionvalue": "{{doc-apihelp-param|options|optionvalue}}",
+       "apihelp-options-example-reset": "{{doc-apihelp-example|options}}",
+       "apihelp-options-example-change": "{{doc-apihelp-example|options}}",
+       "apihelp-options-example-complex": "{{doc-apihelp-example|options}}",
+
+       "apihelp-paraminfo-description": "{{doc-apihelp-description|paraminfo}}",
+       "apihelp-paraminfo-param-modules": "{{doc-apihelp-param|paraminfo|modules}}",
+       "apihelp-paraminfo-param-helpformat": "{{doc-apihelp-param|paraminfo|helpformat}}",
+       "apihelp-paraminfo-param-querymodules": "{{doc-apihelp-param|paraminfo|querymodules}}",
+       "apihelp-paraminfo-param-mainmodule": "{{doc-apihelp-param|paraminfo|mainmodule}}",
+       "apihelp-paraminfo-param-pagesetmodule": "{{doc-apihelp-param|paraminfo|pagesetmodule}}",
+       "apihelp-paraminfo-param-formatmodules": "{{doc-apihelp-param|paraminfo|formatmodules}}",
+       "apihelp-paraminfo-example-1": "{{doc-apihelp-example|paraminfo}}",
+
+       "apihelp-parse-description": "{{doc-apihelp-description|parse}}",
+       "apihelp-parse-param-title": "{{doc-apihelp-param|parse|title}}",
+       "apihelp-parse-param-text": "{{doc-apihelp-param|parse|text}}",
+       "apihelp-parse-param-summary": "{{doc-apihelp-param|parse|summary}}",
+       "apihelp-parse-param-page": "{{doc-apihelp-param|parse|page}}",
+       "apihelp-parse-param-pageid": "{{doc-apihelp-param|parse|pageid}}",
+       "apihelp-parse-param-redirects": "{{doc-apihelp-param|parse|redirects}}",
+       "apihelp-parse-param-oldid": "{{doc-apihelp-param|parse|oldid}}",
+       "apihelp-parse-param-prop": "{{doc-apihelp-param|parse|prop}}",
+       "apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
+       "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
+       "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
+       "apihelp-parse-param-section": "{{doc-apihelp-param|parse|section}}",
+       "apihelp-parse-param-disablepp": "{{doc-apihelp-param|parse|disablepp}}",
+       "apihelp-parse-param-disableeditsection": "{{doc-apihelp-param|parse|disableeditsection}}",
+       "apihelp-parse-param-generatexml": "{{doc-apihelp-param|parse|generatexml|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
+       "apihelp-parse-param-preview": "{{doc-apihelp-param|parse|preview}}",
+       "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}",
+       "apihelp-parse-param-disabletoc": "{{doc-apihelp-param|parse|disabletoc}}",
+       "apihelp-parse-param-contentformat": "{{doc-apihelp-param|parse|contentformat}}",
+       "apihelp-parse-param-contentmodel": "{{doc-apihelp-param|parse|contentmodel}}",
+       "apihelp-parse-example-page": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-text": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-texttitle": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-summary": "{{doc-apihelp-example|parse}}",
+
+       "apihelp-patrol-description": "{{doc-apihelp-description|patrol}}",
+       "apihelp-patrol-param-rcid": "{{doc-apihelp-param|patrol|rcid}}",
+       "apihelp-patrol-param-revid": "{{doc-apihelp-param|patrol|revid}}",
+       "apihelp-patrol-example-rcid": "{{doc-apihelp-example|patrol}}",
+       "apihelp-patrol-example-revid": "{{doc-apihelp-example|patrol}}",
+
+       "apihelp-protect-description": "{{doc-apihelp-description|protect}}",
+       "apihelp-protect-param-title": "{{doc-apihelp-param|protect|title}}",
+       "apihelp-protect-param-pageid": "{{doc-apihelp-param|protect|pageid}}",
+       "apihelp-protect-param-protections": "{{doc-apihelp-param|protect|protections}}",
+       "apihelp-protect-param-expiry": "{{doc-apihelp-param|protect|expiry}}",
+       "apihelp-protect-param-reason": "{{doc-apihelp-param|protect|reason}}",
+       "apihelp-protect-param-cascade": "{{doc-apihelp-param|protect|cascade}}",
+       "apihelp-protect-param-watch": "{{doc-apihelp-param|protect|watch}}",
+       "apihelp-protect-param-watchlist": "{{doc-apihelp-param|protect|watchlist}}",
+       "apihelp-protect-example-protect": "{{doc-apihelp-example|protect}}",
+       "apihelp-protect-example-unprotect": "{{doc-apihelp-example|protect}}",
+       "apihelp-protect-example-unprotect2": "{{doc-apihelp-example|protect}}",
+
+       "apihelp-purge-description": "{{doc-apihelp-description|purge}}",
+       "apihelp-purge-param-forcelinkupdate": "{{doc-apihelp-param|purge|forcelinkupdate}}",
+       "apihelp-purge-param-forcerecursivelinkupdate": "{{doc-apihelp-param|purge|forcerecursivelinkupdate}}",
+       "apihelp-purge-example-simple": "{{doc-apihelp-example|purge}}",
+       "apihelp-purge-example-generator": "{{doc-apihelp-example|purge}}",
+
+       "apihelp-query-description": "{{doc-apihelp-description|query}}",
+       "apihelp-query-param-prop": "{{doc-apihelp-param|query|prop}}",
+       "apihelp-query-param-list": "{{doc-apihelp-param|query|list}}",
+       "apihelp-query-param-meta": "{{doc-apihelp-param|query|meta}}",
+       "apihelp-query-param-indexpageids": "{{doc-apihelp-param|query|indexpageids}}",
+       "apihelp-query-param-export": "{{doc-apihelp-param|query|export}}",
+       "apihelp-query-param-exportnowrap": "{{doc-apihelp-param|query|exportnowrap}}",
+       "apihelp-query-param-iwurl": "{{doc-apihelp-param|query|iwurl}}",
+       "apihelp-query-param-continue": "{{doc-apihelp-param|query|continue}}",
+       "apihelp-query-param-rawcontinue": "{{doc-apihelp-param|query|rawcontinue}}",
+       "apihelp-query-example-revisions": "{{doc-apihelp-example|query}}",
+       "apihelp-query-example-allpages": "{{doc-apihelp-example|query}}",
+
+       "apihelp-query+allcategories-description": "{{doc-apihelp-description|query+allcategories}}",
+       "apihelp-query+allcategories-param-from": "{{doc-apihelp-param|query+allcategories|from}}",
+       "apihelp-query+allcategories-param-to": "{{doc-apihelp-param|query+allcategories|to}}",
+       "apihelp-query+allcategories-param-prefix": "{{doc-apihelp-param|query+allcategories|prefix}}",
+       "apihelp-query+allcategories-param-dir": "{{doc-apihelp-param|query+allcategories|dir}}",
+       "apihelp-query+allcategories-param-min": "{{doc-apihelp-param|query+allcategories|min}}",
+       "apihelp-query+allcategories-param-max": "{{doc-apihelp-param|query+allcategories|max}}",
+       "apihelp-query+allcategories-param-limit": "{{doc-apihelp-param|query+allcategories|limit}}",
+       "apihelp-query+allcategories-param-prop": "{{doc-apihelp-param|query+allcategories|prop}}",
+       "apihelp-query+allcategories-example-size": "{{doc-apihelp-example|query+allcategories}}",
+       "apihelp-query+allcategories-example-generator": "{{doc-apihelp-example|query+allcategories}}",
+
+       "apihelp-query+allfileusages-description": "{{doc-apihelp-description|query+allfileusages}}",
+       "apihelp-query+allfileusages-param-from": "{{doc-apihelp-param|query+allfileusages|from}}",
+       "apihelp-query+allfileusages-param-to": "{{doc-apihelp-param|query+allfileusages|to}}",
+       "apihelp-query+allfileusages-param-prefix": "{{doc-apihelp-param|query+allfileusages|prefix}}",
+       "apihelp-query+allfileusages-param-unique": "{{doc-apihelp-param|query+allfileusages|unique}}",
+       "apihelp-query+allfileusages-param-prop": "{{doc-apihelp-param|query+allfileusages|prop}}",
+       "apihelp-query+allfileusages-param-limit": "{{doc-apihelp-param|query+allfileusages|limit}}",
+       "apihelp-query+allfileusages-param-dir": "{{doc-apihelp-param|query+allfileusages|dir}}",
+       "apihelp-query+allfileusages-example-B": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-unique": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-unique-generator": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-generator": "{{doc-apihelp-example|query+allfileusages}}",
+
+       "apihelp-query+allimages-description": "{{doc-apihelp-description|query+allimages}}",
+       "apihelp-query+allimages-param-sort": "{{doc-apihelp-param|query+allimages|sort}}",
+       "apihelp-query+allimages-param-dir": "{{doc-apihelp-param|query+allimages|dir}}",
+       "apihelp-query+allimages-param-from": "{{doc-apihelp-param|query+allimages|from}}",
+       "apihelp-query+allimages-param-to": "{{doc-apihelp-param|query+allimages|to}}",
+       "apihelp-query+allimages-param-start": "{{doc-apihelp-param|query+allimages|start}}",
+       "apihelp-query+allimages-param-end": "{{doc-apihelp-param|query+allimages|end}}",
+       "apihelp-query+allimages-param-prop": "{{doc-apihelp-param|query+allimages|prop}}",
+       "apihelp-query+allimages-param-prefix": "{{doc-apihelp-param|query+allimages|prefix}}",
+       "apihelp-query+allimages-param-minsize": "{{doc-apihelp-param|query+allimages|minsize}}",
+       "apihelp-query+allimages-param-maxsize": "{{doc-apihelp-param|query+allimages|maxsize}}",
+       "apihelp-query+allimages-param-sha1": "{{doc-apihelp-param|query+allimages|sha1}}",
+       "apihelp-query+allimages-param-sha1base36": "{{doc-apihelp-param|query+allimages|sha1base36}}",
+       "apihelp-query+allimages-param-user": "{{doc-apihelp-param|query+allimages|user}}",
+       "apihelp-query+allimages-param-filterbots": "{{doc-apihelp-param|query+allimages|filterbots}}",
+       "apihelp-query+allimages-param-mime": "{{doc-apihelp-param|query+allimages|mime}}",
+       "apihelp-query+allimages-param-limit": "{{doc-apihelp-param|query+allimages|limit}}",
+       "apihelp-query+allimages-example-B": "{{doc-apihelp-example|query+allimages}}",
+       "apihelp-query+allimages-example-recent": "{{doc-apihelp-example|query+allimages}}",
+       "apihelp-query+allimages-example-generator": "{{doc-apihelp-example|query+allimages}}",
+
+       "apihelp-query+alllinks-description": "{{doc-apihelp-description|query+alllinks}}",
+       "apihelp-query+alllinks-param-from": "{{doc-apihelp-param|query+alllinks|from}}",
+       "apihelp-query+alllinks-param-to": "{{doc-apihelp-param|query+alllinks|to}}",
+       "apihelp-query+alllinks-param-prefix": "{{doc-apihelp-param|query+alllinks|prefix}}",
+       "apihelp-query+alllinks-param-unique": "{{doc-apihelp-param|query+alllinks|unique}}",
+       "apihelp-query+alllinks-param-prop": "{{doc-apihelp-param|query+alllinks|prop}}",
+       "apihelp-query+alllinks-param-namespace": "{{doc-apihelp-param|query+alllinks|namespace}}",
+       "apihelp-query+alllinks-param-limit": "{{doc-apihelp-param|query+alllinks|limit}}",
+       "apihelp-query+alllinks-param-dir": "{{doc-apihelp-param|query+alllinks|dir}}",
+       "apihelp-query+alllinks-example-B": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-unique": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-unique-generator": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-generator": "{{doc-apihelp-example|query+alllinks}}",
+
+       "apihelp-query+allmessages-description": "{{doc-apihelp-description|query+allmessages}}",
+       "apihelp-query+allmessages-param-messages": "{{doc-apihelp-param|query+allmessages|messages}}",
+       "apihelp-query+allmessages-param-prop": "{{doc-apihelp-param|query+allmessages|prop}}",
+       "apihelp-query+allmessages-param-enableparser": "{{doc-apihelp-param|query+allmessages|enableparser}}",
+       "apihelp-query+allmessages-param-nocontent": "{{doc-apihelp-param|query+allmessages|nocontent}}",
+       "apihelp-query+allmessages-param-includelocal": "{{doc-apihelp-param|query+allmessages|includelocal}}",
+       "apihelp-query+allmessages-param-args": "{{doc-apihelp-param|query+allmessages|args}}",
+       "apihelp-query+allmessages-param-filter": "{{doc-apihelp-param|query+allmessages|filter}}",
+       "apihelp-query+allmessages-param-customised": "{{doc-apihelp-param|query+allmessages|customised}}",
+       "apihelp-query+allmessages-param-lang": "{{doc-apihelp-param|query+allmessages|lang}}",
+       "apihelp-query+allmessages-param-from": "{{doc-apihelp-param|query+allmessages|from}}",
+       "apihelp-query+allmessages-param-to": "{{doc-apihelp-param|query+allmessages|to}}",
+       "apihelp-query+allmessages-param-title": "{{doc-apihelp-param|query+allmessages|title}}",
+       "apihelp-query+allmessages-param-prefix": "{{doc-apihelp-param|query+allmessages|prefix}}",
+       "apihelp-query+allmessages-example-ipb": "{{doc-apihelp-example|query+allmessages}}",
+       "apihelp-query+allmessages-example-de": "{{doc-apihelp-example|query+allmessages}}",
+
+       "apihelp-query+allpages-description": "{{doc-apihelp-description|query+allpages}}",
+       "apihelp-query+allpages-param-from": "{{doc-apihelp-param|query+allpages|from}}",
+       "apihelp-query+allpages-param-to": "{{doc-apihelp-param|query+allpages|to}}",
+       "apihelp-query+allpages-param-prefix": "{{doc-apihelp-param|query+allpages|prefix}}",
+       "apihelp-query+allpages-param-namespace": "{{doc-apihelp-param|query+allpages|namespace}}",
+       "apihelp-query+allpages-param-filterredir": "{{doc-apihelp-param|query+allpages|filterredir}}",
+       "apihelp-query+allpages-param-minsize": "{{doc-apihelp-param|query+allpages|minsize}}",
+       "apihelp-query+allpages-param-maxsize": "{{doc-apihelp-param|query+allpages|maxsize}}",
+       "apihelp-query+allpages-param-prtype": "{{doc-apihelp-param|query+allpages|prtype}}",
+       "apihelp-query+allpages-param-prlevel": "{{doc-apihelp-param|query+allpages|prlevel}}",
+       "apihelp-query+allpages-param-prfiltercascade": "{{doc-apihelp-param|query+allpages|prfiltercascade}}",
+       "apihelp-query+allpages-param-limit": "{{doc-apihelp-param|query+allpages|limit}}",
+       "apihelp-query+allpages-param-dir": "{{doc-apihelp-param|query+allpages|dir}}",
+       "apihelp-query+allpages-param-filterlanglinks": "{{doc-apihelp-param|query+allpages|filterlanglinks}}",
+       "apihelp-query+allpages-param-prexpiry": "{{doc-apihelp-param|query+allpages|prexpiry}}",
+       "apihelp-query+allpages-example-B": "{{doc-apihelp-example|query+allpages}}",
+       "apihelp-query+allpages-example-generator": "{{doc-apihelp-example|query+allpages}}",
+       "apihelp-query+allpages-example-generator-revisions": "{{doc-apihelp-example|query+allpages}}",
+
+       "apihelp-query+allredirects-description": "{{doc-apihelp-description|query+allredirects}}",
+       "apihelp-query+allredirects-param-from": "{{doc-apihelp-param|query+allredirects|from}}",
+       "apihelp-query+allredirects-param-to": "{{doc-apihelp-param|query+allredirects|to}}",
+       "apihelp-query+allredirects-param-prefix": "{{doc-apihelp-param|query+allredirects|prefix}}",
+       "apihelp-query+allredirects-param-unique": "{{doc-apihelp-param|query+allredirects|unique}}",
+       "apihelp-query+allredirects-param-prop": "{{doc-apihelp-param|query+allredirects|prop}}",
+       "apihelp-query+allredirects-param-namespace": "{{doc-apihelp-param|query+allredirects|namespace}}",
+       "apihelp-query+allredirects-param-limit": "{{doc-apihelp-param|query+allredirects|limit}}",
+       "apihelp-query+allredirects-param-dir": "{{doc-apihelp-param|query+allredirects|dir}}",
+       "apihelp-query+allredirects-example-B": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-unique": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-unique-generator": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-generator": "{{doc-apihelp-example|query+allredirects}}",
+
+       "apihelp-query+alltransclusions-description": "{{doc-apihelp-description|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-param-from": "{{doc-apihelp-param|query+alltransclusions|from}}",
+       "apihelp-query+alltransclusions-param-to": "{{doc-apihelp-param|query+alltransclusions|to}}",
+       "apihelp-query+alltransclusions-param-prefix": "{{doc-apihelp-param|query+alltransclusions|prefix}}",
+       "apihelp-query+alltransclusions-param-unique": "{{doc-apihelp-param|query+alltransclusions|unique}}",
+       "apihelp-query+alltransclusions-param-prop": "{{doc-apihelp-param|query+alltransclusions|prop}}",
+       "apihelp-query+alltransclusions-param-namespace": "{{doc-apihelp-param|query+alltransclusions|namespace}}",
+       "apihelp-query+alltransclusions-param-limit": "{{doc-apihelp-param|query+alltransclusions|limit}}",
+       "apihelp-query+alltransclusions-param-dir": "{{doc-apihelp-param|query+alltransclusions|dir}}",
+       "apihelp-query+alltransclusions-example-B": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-unique": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-unique-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+
+       "apihelp-query+allusers-description": "{{doc-apihelp-description|query+allusers}}",
+       "apihelp-query+allusers-param-from": "{{doc-apihelp-param|query+allusers|from}}",
+       "apihelp-query+allusers-param-to": "{{doc-apihelp-param|query+allusers|to}}",
+       "apihelp-query+allusers-param-prefix": "{{doc-apihelp-param|query+allusers|prefix}}",
+       "apihelp-query+allusers-param-dir": "{{doc-apihelp-param|query+allusers|dir}}",
+       "apihelp-query+allusers-param-group": "{{doc-apihelp-param|query+allusers|group}}",
+       "apihelp-query+allusers-param-excludegroup": "{{doc-apihelp-param|query+allusers|excludegroup}}",
+       "apihelp-query+allusers-param-rights": "{{doc-apihelp-param|query+allusers|rights}}",
+       "apihelp-query+allusers-param-prop": "{{doc-apihelp-param|query+allusers|prop}}",
+       "apihelp-query+allusers-param-limit": "{{doc-apihelp-param|query+allusers|limit}}",
+       "apihelp-query+allusers-param-witheditsonly": "{{doc-apihelp-param|query+allusers|witheditsonly}}",
+       "apihelp-query+allusers-param-activeusers": "{{doc-apihelp-param|query+allusers|activeusers|params=* $1 - Value of [[mw:Manual:$wgActiveUserDays]]|paramstart=2}}",
+       "apihelp-query+allusers-example-Y": "{{doc-apihelp-example|query+allusers}}",
+
+       "apihelp-query+backlinks-description": "{{doc-apihelp-description|query+backlinks}}",
+       "apihelp-query+backlinks-param-title": "{{doc-apihelp-param|query+backlinks|title}}",
+       "apihelp-query+backlinks-param-pageid": "{{doc-apihelp-param|query+backlinks|pageid}}",
+       "apihelp-query+backlinks-param-namespace": "{{doc-apihelp-param|query+backlinks|namespace}}",
+       "apihelp-query+backlinks-param-dir": "{{doc-apihelp-param|query+backlinks|dir}}",
+       "apihelp-query+backlinks-param-filterredir": "{{doc-apihelp-param|query+backlinks|filterredir}}",
+       "apihelp-query+backlinks-param-limit": "{{doc-apihelp-param|query+backlinks|limit}}",
+       "apihelp-query+backlinks-param-redirect": "{{doc-apihelp-param|query+backlinks|redirect}}",
+       "apihelp-query+backlinks-example-simple": "{{doc-apihelp-example|query+backlinks}}",
+       "apihelp-query+backlinks-example-generator": "{{doc-apihelp-example|query+backlinks}}",
+
+       "apihelp-query+blocks-description": "{{doc-apihelp-description|query+blocks}}",
+       "apihelp-query+blocks-param-start": "{{doc-apihelp-param|query+blocks|start}}",
+       "apihelp-query+blocks-param-end": "{{doc-apihelp-param|query+blocks|end}}",
+       "apihelp-query+blocks-param-ids": "{{doc-apihelp-param|query+blocks|ids}}",
+       "apihelp-query+blocks-param-users": "{{doc-apihelp-param|query+blocks|users}}",
+       "apihelp-query+blocks-param-ip": "{{doc-apihelp-param|query+blocks|ip|params=* $1 - Minimum CIDR prefix for IPv4\n* $2 - Minimum CIDR prefix for IPv6|paramstart=3}}",
+       "apihelp-query+blocks-param-limit": "{{doc-apihelp-param|query+blocks|limit}}",
+       "apihelp-query+blocks-param-prop": "{{doc-apihelp-param|query+blocks|prop}}",
+       "apihelp-query+blocks-param-show": "{{doc-apihelp-param|query+blocks|show}}",
+       "apihelp-query+blocks-example-simple": "{{doc-apihelp-example|query+blocks}}",
+       "apihelp-query+blocks-example-users": "{{doc-apihelp-example|query+blocks}}",
+
+       "apihelp-query+categories-description": "{{doc-apihelp-description|query+categories}}",
+       "apihelp-query+categories-param-prop": "{{doc-apihelp-param|query+categories|prop}}",
+       "apihelp-query+categories-param-show": "{{doc-apihelp-param|query+categories|show}}",
+       "apihelp-query+categories-param-limit": "{{doc-apihelp-param|query+categories|limit}}",
+       "apihelp-query+categories-param-categories": "{{doc-apihelp-param|query+categories|categories}}",
+       "apihelp-query+categories-param-dir": "{{doc-apihelp-param|query+categories|dir}}",
+       "apihelp-query+categories-example-simple": "{{doc-apihelp-example|query+categories}}",
+       "apihelp-query+categories-example-generator": "{{doc-apihelp-example|query+categories}}",
+
+       "apihelp-query+categoryinfo-description": "{{doc-apihelp-description|query+categoryinfo}}",
+       "apihelp-query+categoryinfo-example-simple": "{{doc-apihelp-example|query+categoryinfo}}",
+
+       "apihelp-query+categorymembers-description": "{{doc-apihelp-description|query+categorymembers}}",
+       "apihelp-query+categorymembers-param-title": "{{doc-apihelp-param|query+categorymembers|title}}",
+       "apihelp-query+categorymembers-param-pageid": "{{doc-apihelp-param|query+categorymembers|pageid}}",
+       "apihelp-query+categorymembers-param-prop": "{{doc-apihelp-param|query+categorymembers|prop}}",
+       "apihelp-query+categorymembers-param-namespace": "{{doc-apihelp-param|query+categorymembers|namespace}}",
+       "apihelp-query+categorymembers-param-type": "{{doc-apihelp-param|query+categorymembers|type}}",
+       "apihelp-query+categorymembers-param-limit": "{{doc-apihelp-param|query+categorymembers|limit}}",
+       "apihelp-query+categorymembers-param-sort": "{{doc-apihelp-param|query+categorymembers|sort}}",
+       "apihelp-query+categorymembers-param-dir": "{{doc-apihelp-param|query+categorymembers|dir}}",
+       "apihelp-query+categorymembers-param-start": "{{doc-apihelp-param|query+categorymembers|start}}",
+       "apihelp-query+categorymembers-param-end": "{{doc-apihelp-param|query+categorymembers|end}}",
+       "apihelp-query+categorymembers-param-starthexsortkey": "{{doc-apihelp-param|query+categorymembers|starthexsortkey}}",
+       "apihelp-query+categorymembers-param-endhexsortkey": "{{doc-apihelp-param|query+categorymembers|endhexsortkey}}",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|startsortkeyprefix}}",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|endsortkeyprefix}}",
+       "apihelp-query+categorymembers-param-startsortkey": "{{doc-apihelp-param|query+categorymembers|startsortkey}}",
+       "apihelp-query+categorymembers-param-endsortkey": "{{doc-apihelp-param|query+categorymembers|endsortkey}}",
+       "apihelp-query+categorymembers-example-simple": "{{doc-apihelp-example|query+categorymembers}}",
+       "apihelp-query+categorymembers-example-generator": "{{doc-apihelp-example|query+categorymembers}}",
+
+       "apihelp-query+contributors-description": "{{doc-apihelp-description|query+contributors}}",
+       "apihelp-query+contributors-param-group": "{{doc-apihelp-param|query+contributors|group}}",
+       "apihelp-query+contributors-param-excludegroup": "{{doc-apihelp-param|query+contributors|excludegroup}}",
+       "apihelp-query+contributors-param-rights": "{{doc-apihelp-param|query+contributors|rights}}",
+       "apihelp-query+contributors-param-excluderights": "{{doc-apihelp-param|query+contributors|excluderights}}",
+       "apihelp-query+contributors-param-limit": "{{doc-apihelp-param|query+contributors|limit}}",
+       "apihelp-query+contributors-example-simple": "{{doc-apihelp-example|query+contributors}}",
+
+       "apihelp-query+deletedrevs-description": "{{doc-apihelp-description|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{doc-apihelp-paraminfo|query+deletedrevs|modes}}",
+       "apihelp-query+deletedrevs-param-start": "{{doc-apihelp-param|query+deletedrevs|start}}",
+       "apihelp-query+deletedrevs-param-end": "{{doc-apihelp-param|query+deletedrevs|end}}",
+       "apihelp-query+deletedrevs-param-from": "{{doc-apihelp-param|query+deletedrevs|from}}",
+       "apihelp-query+deletedrevs-param-to": "{{doc-apihelp-param|query+deletedrevs|to}}",
+       "apihelp-query+deletedrevs-param-prefix": "{{doc-apihelp-param|query+deletedrevs|prefix}}",
+       "apihelp-query+deletedrevs-param-unique": "{{doc-apihelp-param|query+deletedrevs|unique}}",
+       "apihelp-query+deletedrevs-param-tag": "{{doc-apihelp-param|query+deletedrevs|tag}}",
+       "apihelp-query+deletedrevs-param-user": "{{doc-apihelp-param|query+deletedrevs|user}}",
+       "apihelp-query+deletedrevs-param-excludeuser": "{{doc-apihelp-param|query+deletedrevs|excludeuser}}",
+       "apihelp-query+deletedrevs-param-namespace": "{{doc-apihelp-param|query+deletedrevs|namespace}}",
+       "apihelp-query+deletedrevs-param-limit": "{{doc-apihelp-param|query+deletedrevs|limit}}",
+       "apihelp-query+deletedrevs-param-prop": "{{doc-apihelp-param|query+deletedrevs|prop}}",
+       "apihelp-query+deletedrevs-example-mode1": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode2": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode3-main": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode3-talk": "{{doc-apihelp-example|query+deletedrevs}}",
+
+       "apihelp-query+disabled-description": "{{doc-apihelp-description|query+disabled}}",
+
+       "apihelp-query+duplicatefiles-description": "{{doc-apihelp-description|query+duplicatefiles}}",
+       "apihelp-query+duplicatefiles-param-limit": "{{doc-apihelp-param|query+duplicatefiles|limit}}",
+       "apihelp-query+duplicatefiles-param-dir": "{{doc-apihelp-param|query+duplicatefiles|dir}}",
+       "apihelp-query+duplicatefiles-param-localonly": "{{doc-apihelp-param|query+duplicatefiles|localonly}}",
+       "apihelp-query+duplicatefiles-example-simple": "{{doc-apihelp-example|query+duplicatefiles}}",
+       "apihelp-query+duplicatefiles-example-generated": "{{doc-apihelp-example|query+duplicatefiles}}",
+
+       "apihelp-query+embeddedin-description": "{{doc-apihelp-description|query+embeddedin}}",
+       "apihelp-query+embeddedin-param-title": "{{doc-apihelp-param|query+embeddedin|title}}",
+       "apihelp-query+embeddedin-param-pageid": "{{doc-apihelp-param|query+embeddedin|pageid}}",
+       "apihelp-query+embeddedin-param-namespace": "{{doc-apihelp-param|query+embeddedin|namespace}}",
+       "apihelp-query+embeddedin-param-dir": "{{doc-apihelp-param|query+embeddedin|dir}}",
+       "apihelp-query+embeddedin-param-filterredir": "{{doc-apihelp-param|query+embeddedin|filterredir}}",
+       "apihelp-query+embeddedin-param-limit": "{{doc-apihelp-param|query+embeddedin|limit}}",
+       "apihelp-query+embeddedin-example-simple": "{{doc-apihelp-example|query+embeddedin}}",
+       "apihelp-query+embeddedin-example-generator": "{{doc-apihelp-example|query+embeddedin}}",
+
+       "apihelp-query+extlinks-description": "{{doc-apihelp-description|query+extlinks}}",
+       "apihelp-query+extlinks-param-limit": "{{doc-apihelp-param|query+extlinks|limit}}",
+       "apihelp-query+extlinks-param-protocol": "{{doc-apihelp-param|query+extlinks|protocol}}",
+       "apihelp-query+extlinks-param-query": "{{doc-apihelp-param|query+extlinks|query}}",
+       "apihelp-query+extlinks-param-expandurl": "{{doc-apihelp-param|query+extlinks|expandurl}}",
+       "apihelp-query+extlinks-example-simple": "{{doc-apihelp-example|query+extlinks}}",
+
+       "apihelp-query+exturlusage-description": "{{doc-apihelp-description|query+exturlusage}}",
+       "apihelp-query+exturlusage-param-prop": "{{doc-apihelp-param|query+exturlusage|prop}}",
+       "apihelp-query+exturlusage-param-protocol": "{{doc-apihelp-param|query+exturlusage|protocol}}",
+       "apihelp-query+exturlusage-param-query": "{{doc-apihelp-param|query+exturlusage|query}}",
+       "apihelp-query+exturlusage-param-namespace": "{{doc-apihelp-param|query+exturlusage|namespace}}",
+       "apihelp-query+exturlusage-param-limit": "{{doc-apihelp-param|query+exturlusage|limit}}",
+       "apihelp-query+exturlusage-param-expandurl": "{{doc-apihelp-param|query+exturlusage|expandurl}}",
+       "apihelp-query+exturlusage-example-simple": "{{doc-apihelp-example|query+exturlusage}}",
+
+       "apihelp-query+filearchive-description": "{{doc-apihelp-description|query+filearchive}}",
+       "apihelp-query+filearchive-param-from": "{{doc-apihelp-param|query+filearchive|from}}",
+       "apihelp-query+filearchive-param-to": "{{doc-apihelp-param|query+filearchive|to}}",
+       "apihelp-query+filearchive-param-prefix": "{{doc-apihelp-param|query+filearchive|prefix}}",
+       "apihelp-query+filearchive-param-limit": "{{doc-apihelp-param|query+filearchive|limit}}",
+       "apihelp-query+filearchive-param-dir": "{{doc-apihelp-param|query+filearchive|dir}}",
+       "apihelp-query+filearchive-param-sha1": "{{doc-apihelp-param|query+filearchive|sha1}}",
+       "apihelp-query+filearchive-param-sha1base36": "{{doc-apihelp-param|query+filearchive|sha1base36}}",
+       "apihelp-query+filearchive-param-prop": "{{doc-apihelp-param|query+filearchive|prop}}",
+       "apihelp-query+filearchive-example-simple": "{{doc-apihelp-example|query+filearchive}}",
+
+       "apihelp-query+filerepoinfo-description": "{{doc-apihelp-description|query+filerepoinfo}}",
+       "apihelp-query+filerepoinfo-param-prop": "{{doc-apihelp-param|query+filerepoinfo|prop}}",
+       "apihelp-query+filerepoinfo-example-simple": "{{doc-apihelp-example|query+filerepoinfo}}",
+
+       "apihelp-query+fileusage-description": "{{doc-apihelp-description|query+fileusage}}",
+       "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop}}",
+       "apihelp-query+fileusage-param-namespace": "{{doc-apihelp-param|query+fileusage|namespace}}",
+       "apihelp-query+fileusage-param-limit": "{{doc-apihelp-param|query+fileusage|limit}}",
+       "apihelp-query+fileusage-param-show": "{{doc-apihelp-param|query+fileusage|show}}",
+       "apihelp-query+fileusage-example-simple": "{{doc-apihelp-example|query+fileusage}}",
+       "apihelp-query+fileusage-example-generator": "{{doc-apihelp-example|query+fileusage}}",
+
+       "apihelp-query+imageinfo-description": "{{doc-apihelp-description|query+imageinfo}}",
+       "apihelp-query+imageinfo-param-prop": "{{doc-apihelp-param|query+imageinfo|prop}}",
+       "apihelp-query+imageinfo-param-limit": "{{doc-apihelp-param|query+imageinfo|limit}}",
+       "apihelp-query+imageinfo-param-start": "{{doc-apihelp-param|query+imageinfo|start}}",
+       "apihelp-query+imageinfo-param-end": "{{doc-apihelp-param|query+imageinfo|end}}",
+       "apihelp-query+imageinfo-param-urlwidth": "{{doc-apihelp-param|query+imageinfo|urlwidth|params=* $1 - Maximum number of thumbnails per query|paramstart=2}}",
+       "apihelp-query+imageinfo-param-urlheight": "{{doc-apihelp-param|query+imageinfo|urlheight}}",
+       "apihelp-query+imageinfo-param-metadataversion": "{{doc-apihelp-param|query+imageinfo|metadataversion}}",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "{{doc-apihelp-param|query+imageinfo|extmetadatalanguage}}",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "{{doc-apihelp-param|query+imageinfo|extmetadatamultilang}}",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "{{doc-apihelp-param|query+imageinfo|extmetadatafilter}}",
+       "apihelp-query+imageinfo-param-urlparam": "{{doc-apihelp-param|query+imageinfo|urlparam}}",
+       "apihelp-query+imageinfo-param-localonly": "{{doc-apihelp-param|query+imageinfo|localonly}}",
+       "apihelp-query+imageinfo-example-simple": "{{doc-apihelp-example|query+imageinfo}}",
+       "apihelp-query+imageinfo-example-dated": "{{doc-apihelp-example|query+imageinfo}}",
+
+       "apihelp-query+images-description": "{{doc-apihelp-description|query+images}}",
+       "apihelp-query+images-param-limit": "{{doc-apihelp-param|query+images|limit}}",
+       "apihelp-query+images-param-images": "{{doc-apihelp-param|query+images|images}}",
+       "apihelp-query+images-param-dir": "{{doc-apihelp-param|query+images|dir}}",
+       "apihelp-query+images-example-simple": "{{doc-apihelp-example|query+images}}",
+       "apihelp-query+images-example-generator": "{{doc-apihelp-example|query+images}}",
+
+       "apihelp-query+imageusage-description": "{{doc-apihelp-description|query+imageusage}}",
+       "apihelp-query+imageusage-param-title": "{{doc-apihelp-param|query+imageusage|title}}",
+       "apihelp-query+imageusage-param-pageid": "{{doc-apihelp-param|query+imageusage|pageid}}",
+       "apihelp-query+imageusage-param-namespace": "{{doc-apihelp-param|query+imageusage|namespace}}",
+       "apihelp-query+imageusage-param-dir": "{{doc-apihelp-param|query+imageusage|dir}}",
+       "apihelp-query+imageusage-param-filterredir": "{{doc-apihelp-param|query+imageusage|filterredir}}",
+       "apihelp-query+imageusage-param-limit": "{{doc-apihelp-param|query+imageusage|limit}}",
+       "apihelp-query+imageusage-param-redirect": "{{doc-apihelp-param|query+imageusage|redirect}}",
+       "apihelp-query+imageusage-example-simple": "{{doc-apihelp-example|query+imageusage}}",
+       "apihelp-query+imageusage-example-generator": "{{doc-apihelp-example|query+imageusage}}",
+
+       "apihelp-query+info-description": "{{doc-apihelp-description|query+info}}",
+       "apihelp-query+info-param-prop": "{{doc-apihelp-param|query+info|prop}}",
+       "apihelp-query+info-param-token": "{{doc-apihelp-param|query+info|token}}",
+       "apihelp-query+info-example-simple": "{{doc-apihelp-example|query+info}}",
+       "apihelp-query+info-example-protection": "{{doc-apihelp-example|query+info}}",
+
+       "apihelp-query+iwbacklinks-description": "{{doc-apihelp-description|query+iwbacklinks}}",
+       "apihelp-query+iwbacklinks-param-prefix": "{{doc-apihelp-param|query+iwbacklinks|prefix}}",
+       "apihelp-query+iwbacklinks-param-title": "{{doc-apihelp-param|query+iwbacklinks|title}}",
+       "apihelp-query+iwbacklinks-param-limit": "{{doc-apihelp-param|query+iwbacklinks|limit}}",
+       "apihelp-query+iwbacklinks-param-prop": "{{doc-apihelp-param|query+iwbacklinks|prop}}",
+       "apihelp-query+iwbacklinks-param-dir": "{{doc-apihelp-param|query+iwbacklinks|dir}}",
+       "apihelp-query+iwbacklinks-example-simple": "{{doc-apihelp-example|query+iwbacklinks}}",
+       "apihelp-query+iwbacklinks-example-generator": "{{doc-apihelp-example|query+iwbacklinks}}",
+
+       "apihelp-query+iwlinks-description": "{{doc-apihelp-description|query+iwlinks}}",
+       "apihelp-query+iwlinks-param-url": "{{doc-apihelp-param|query+iwlinks|url}}",
+       "apihelp-query+iwlinks-param-prop": "{{doc-apihelp-param|query+iwlinks|prop}}",
+       "apihelp-query+iwlinks-param-limit": "{{doc-apihelp-param|query+iwlinks|limit}}",
+       "apihelp-query+iwlinks-param-prefix": "{{doc-apihelp-param|query+iwlinks|prefix}}",
+       "apihelp-query+iwlinks-param-title": "{{doc-apihelp-param|query+iwlinks|title}}",
+       "apihelp-query+iwlinks-param-dir": "{{doc-apihelp-param|query+iwlinks|dir}}",
+       "apihelp-query+iwlinks-example-simple": "{{doc-apihelp-example|query+iwlinks}}",
+
+       "apihelp-query+langbacklinks-description": "{{doc-apihelp-description|query+langbacklinks}}",
+       "apihelp-query+langbacklinks-param-lang": "{{doc-apihelp-param|query+langbacklinks|lang}}",
+       "apihelp-query+langbacklinks-param-title": "{{doc-apihelp-param|query+langbacklinks|title}}",
+       "apihelp-query+langbacklinks-param-limit": "{{doc-apihelp-param|query+langbacklinks|limit}}",
+       "apihelp-query+langbacklinks-param-prop": "{{doc-apihelp-param|query+langbacklinks|prop}}",
+       "apihelp-query+langbacklinks-param-dir": "{{doc-apihelp-param|query+langbacklinks|dir}}",
+       "apihelp-query+langbacklinks-example-simple": "{{doc-apihelp-example|query+langbacklinks}}",
+       "apihelp-query+langbacklinks-example-generator": "{{doc-apihelp-example|query+langbacklinks}}",
+
+       "apihelp-query+langlinks-description": "{{doc-apihelp-description|query+langlinks}}",
+       "apihelp-query+langlinks-param-limit": "{{doc-apihelp-param|query+langlinks|limit}}",
+       "apihelp-query+langlinks-param-url": "{{doc-apihelp-param|query+langlinks|url}}",
+       "apihelp-query+langlinks-param-prop": "{{doc-apihelp-param|query+langlinks|prop}}",
+       "apihelp-query+langlinks-param-lang": "{{doc-apihelp-param|query+langlinks|lang}}",
+       "apihelp-query+langlinks-param-title": "{{doc-apihelp-param|query+langlinks|title}}",
+       "apihelp-query+langlinks-param-dir": "{{doc-apihelp-param|query+langlinks|dir}}",
+       "apihelp-query+langlinks-param-inlanguagecode": "{{doc-apihelp-param|query+langlinks|inlanguagecode}}",
+       "apihelp-query+langlinks-example-simple": "{{doc-apihelp-example|query+langlinks}}",
+
+       "apihelp-query+links-description": "{{doc-apihelp-description|query+links}}",
+       "apihelp-query+links-param-namespace": "{{doc-apihelp-param|query+links|namespace}}",
+       "apihelp-query+links-param-limit": "{{doc-apihelp-param|query+links|limit}}",
+       "apihelp-query+links-param-titles": "{{doc-apihelp-param|query+links|titles}}",
+       "apihelp-query+links-param-dir": "{{doc-apihelp-param|query+links|dir}}",
+       "apihelp-query+links-example-simple": "{{doc-apihelp-example|query+links}}",
+       "apihelp-query+links-example-generator": "{{doc-apihelp-example|query+links}}",
+       "apihelp-query+links-example-namespaces": "{{doc-apihelp-example|query+links}}",
+
+       "apihelp-query+linkshere-description": "{{doc-apihelp-description|query+linkshere}}",
+       "apihelp-query+linkshere-param-prop": "{{doc-apihelp-param|query+linkshere|prop}}",
+       "apihelp-query+linkshere-param-namespace": "{{doc-apihelp-param|query+linkshere|namespace}}",
+       "apihelp-query+linkshere-param-limit": "{{doc-apihelp-param|query+linkshere|limit}}",
+       "apihelp-query+linkshere-param-show": "{{doc-apihelp-param|query+linkshere|show}}",
+       "apihelp-query+linkshere-example-simple": "{{doc-apihelp-example|query+linkshere}}",
+       "apihelp-query+linkshere-example-generator": "{{doc-apihelp-example|query+linkshere}}",
+
+       "apihelp-query+logevents-description": "{{doc-apihelp-description|query+logevents}}",
+       "apihelp-query+logevents-param-prop": "{{doc-apihelp-param|query+logevents|prop}}",
+       "apihelp-query+logevents-param-type": "{{doc-apihelp-param|query+logevents|type}}",
+       "apihelp-query+logevents-param-action": "{{doc-apihelp-param|query+logevents|action}}",
+       "apihelp-query+logevents-param-start": "{{doc-apihelp-param|query+logevents|start}}",
+       "apihelp-query+logevents-param-end": "{{doc-apihelp-param|query+logevents|end}}",
+       "apihelp-query+logevents-param-user": "{{doc-apihelp-param|query+logevents|user}}",
+       "apihelp-query+logevents-param-title": "{{doc-apihelp-param|query+logevents|title}}",
+       "apihelp-query+logevents-param-namespace": "{{doc-apihelp-param|query+logevents|namespace}}",
+       "apihelp-query+logevents-param-prefix": "{{doc-apihelp-param|query+logevents|prefix}}",
+       "apihelp-query+logevents-param-tag": "{{doc-apihelp-param|query+logevents|tag}}",
+       "apihelp-query+logevents-param-limit": "{{doc-apihelp-param|query+logevents|limit}}",
+       "apihelp-query+logevents-example-simple": "{{doc-apihelp-example|query+logevents}}",
+
+       "apihelp-query+pagepropnames-description": "{{doc-apihelp-description|query+pagepropnames}}",
+       "apihelp-query+pagepropnames-param-limit": "{{doc-apihelp-param|query+pagepropnames|limit}}",
+       "apihelp-query+pagepropnames-example-simple": "{{doc-apihelp-example|query+pagepropnames}}",
+
+       "apihelp-query+pageprops-description": "{{doc-apihelp-description|query+pageprops}}",
+       "apihelp-query+pageprops-param-prop": "{{doc-apihelp-param|query+pageprops|prop}}",
+       "apihelp-query+pageprops-example-simple": "{{doc-apihelp-example|query+pageprops}}",
+
+       "apihelp-query+pageswithprop-description": "{{doc-apihelp-description|query+pageswithprop}}",
+       "apihelp-query+pageswithprop-param-propname": "{{doc-apihelp-param|query+pageswithprop|propname}}",
+       "apihelp-query+pageswithprop-param-prop": "{{doc-apihelp-param|query+pageswithprop|prop}}",
+       "apihelp-query+pageswithprop-param-limit": "{{doc-apihelp-param|query+pageswithprop|limit}}",
+       "apihelp-query+pageswithprop-param-dir": "{{doc-apihelp-param|query+pageswithprop|dir}}",
+       "apihelp-query+pageswithprop-example-simple": "{{doc-apihelp-example|query+pageswithprop}}",
+       "apihelp-query+pageswithprop-example-generator": "{{doc-apihelp-example|query+pageswithprop}}",
+
+       "apihelp-query+prefixsearch-description": "{{doc-apihelp-description|query+prefixsearch}}",
+       "apihelp-query+prefixsearch-param-search": "{{doc-apihelp-param|query+prefixsearch|search}}",
+       "apihelp-query+prefixsearch-param-namespace": "{{doc-apihelp-param|query+prefixsearch|namespace}}",
+       "apihelp-query+prefixsearch-param-limit": "{{doc-apihelp-param|query+prefixsearch|limit}}",
+       "apihelp-query+prefixsearch-example-simple": "{{doc-apihelp-example|query+prefixsearch}}",
+
+       "apihelp-query+protectedtitles-description": "{{doc-apihelp-description|query+protectedtitles}}",
+       "apihelp-query+protectedtitles-param-namespace": "{{doc-apihelp-param|query+protectedtitles|namespace}}",
+       "apihelp-query+protectedtitles-param-level": "{{doc-apihelp-param|query+protectedtitles|level}}",
+       "apihelp-query+protectedtitles-param-limit": "{{doc-apihelp-param|query+protectedtitles|limit}}",
+       "apihelp-query+protectedtitles-param-start": "{{doc-apihelp-param|query+protectedtitles|start}}",
+       "apihelp-query+protectedtitles-param-end": "{{doc-apihelp-param|query+protectedtitles|end}}",
+       "apihelp-query+protectedtitles-param-prop": "{{doc-apihelp-param|query+protectedtitles|prop}}",
+       "apihelp-query+protectedtitles-example-simple": "{{doc-apihelp-example|query+protectedtitles}}",
+       "apihelp-query+protectedtitles-example-generator": "{{doc-apihelp-example|query+protectedtitles}}",
+
+       "apihelp-query+querypage-description": "{{doc-apihelp-description|query+querypage}}",
+       "apihelp-query+querypage-param-page": "{{doc-apihelp-param|query+querypage|page}}",
+       "apihelp-query+querypage-param-limit": "{{doc-apihelp-param|query+querypage|limit}}",
+       "apihelp-query+querypage-example-ancientpages": "{{doc-apihelp-example|query+querypage}}",
+
+       "apihelp-query+random-description": "{{doc-apihelp-description|query+random}}",
+       "apihelp-query+random-param-namespace": "{{doc-apihelp-param|query+random|namespace}}",
+       "apihelp-query+random-param-limit": "{{doc-apihelp-param|query+random|limit}}",
+       "apihelp-query+random-param-redirect": "{{doc-apihelp-param|query+random|redirect}}",
+       "apihelp-query+random-example-simple": "{{doc-apihelp-example|query+random}}",
+       "apihelp-query+random-example-generator": "{{doc-apihelp-example|query+random}}",
+
+       "apihelp-query+recentchanges-description": "{{doc-apihelp-description|query+recentchanges}}",
+       "apihelp-query+recentchanges-param-start": "{{doc-apihelp-param|query+recentchanges|start}}",
+       "apihelp-query+recentchanges-param-end": "{{doc-apihelp-param|query+recentchanges|end}}",
+       "apihelp-query+recentchanges-param-namespace": "{{doc-apihelp-param|query+recentchanges|namespace}}",
+       "apihelp-query+recentchanges-param-user": "{{doc-apihelp-param|query+recentchanges|user}}",
+       "apihelp-query+recentchanges-param-excludeuser": "{{doc-apihelp-param|query+recentchanges|excludeuser}}",
+       "apihelp-query+recentchanges-param-tag": "{{doc-apihelp-param|query+recentchanges|tag}}",
+       "apihelp-query+recentchanges-param-prop": "{{doc-apihelp-param|query+recentchanges|prop}}",
+       "apihelp-query+recentchanges-param-token": "{{doc-apihelp-param|query+recentchanges|token}}",
+       "apihelp-query+recentchanges-param-show": "{{doc-apihelp-param|query+recentchanges|show}}",
+       "apihelp-query+recentchanges-param-limit": "{{doc-apihelp-param|query+recentchanges|limit}}",
+       "apihelp-query+recentchanges-param-type": "{{doc-apihelp-param|query+recentchanges|type}}",
+       "apihelp-query+recentchanges-param-toponly": "{{doc-apihelp-param|query+recentchanges|toponly}}",
+       "apihelp-query+recentchanges-example-simple": "{{doc-apihelp-example|query+recentchanges}}",
+       "apihelp-query+recentchanges-example-generator": "{{doc-apihelp-example|query+recentchanges}}",
+
+       "apihelp-query+redirects-description": "{{doc-apihelp-description|query+redirects}}",
+       "apihelp-query+redirects-param-prop": "{{doc-apihelp-param|query+redirects|prop}}",
+       "apihelp-query+redirects-param-namespace": "{{doc-apihelp-param|query+redirects|namespace}}",
+       "apihelp-query+redirects-param-limit": "{{doc-apihelp-param|query+redirects|limit}}",
+       "apihelp-query+redirects-param-show": "{{doc-apihelp-param|query+redirects|show}}",
+       "apihelp-query+redirects-example-simple": "{{doc-apihelp-example|query+redirects}}",
+       "apihelp-query+redirects-example-generator": "{{doc-apihelp-example|query+redirects}}",
+
+       "apihelp-query+revisions-description": "{{doc-apihelp-description|query+revisions}}",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "{{doc-apihelp-paraminfo|query+revisions|singlepageonly}}",
+       "apihelp-query+revisions-param-prop": "{{doc-apihelp-param|query+revisions|prop}}",
+       "apihelp-query+revisions-param-limit": "{{doc-apihelp-param|query+revisions|limit}}",
+       "apihelp-query+revisions-param-startid": "{{doc-apihelp-param|query+revisions|startid}}",
+       "apihelp-query+revisions-param-endid": "{{doc-apihelp-param|query+revisions|endid}}",
+       "apihelp-query+revisions-param-start": "{{doc-apihelp-param|query+revisions|start}}",
+       "apihelp-query+revisions-param-end": "{{doc-apihelp-param|query+revisions|end}}",
+       "apihelp-query+revisions-param-user": "{{doc-apihelp-param|query+revisions|user}}",
+       "apihelp-query+revisions-param-excludeuser": "{{doc-apihelp-param|query+revisions|excludeuser}}",
+       "apihelp-query+revisions-param-tag": "{{doc-apihelp-param|query+revisions|tag}}",
+       "apihelp-query+revisions-param-expandtemplates": "{{doc-apihelp-param|query+revisions|expandtemplates}}",
+       "apihelp-query+revisions-param-generatexml": "{{doc-apihelp-param|query+revisions|generatexml}}",
+       "apihelp-query+revisions-param-parse": "{{doc-apihelp-param|query+revisions|parse}}",
+       "apihelp-query+revisions-param-section": "{{doc-apihelp-param|query+revisions|section}}",
+       "apihelp-query+revisions-param-token": "{{doc-apihelp-param|query+revisions|token}}",
+       "apihelp-query+revisions-param-diffto": "{{doc-apihelp-param|query+revisions|diffto}}",
+       "apihelp-query+revisions-param-difftotext": "{{doc-apihelp-param|query+revisions|difftotext}}",
+       "apihelp-query+revisions-param-contentformat": "{{doc-apihelp-param|query+revisions|contentformat}}",
+       "apihelp-query+revisions-example-content": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-last5": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-after": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-not-localhost": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-user": "{{doc-apihelp-example|query+revisions}}",
+
+       "apihelp-query+search-description": "{{doc-apihelp-description|query+search}}",
+       "apihelp-query+search-param-search": "{{doc-apihelp-param|query+search|search}}",
+       "apihelp-query+search-param-namespace": "{{doc-apihelp-param|query+search|namespace}}",
+       "apihelp-query+search-param-what": "{{doc-apihelp-param|query+search|what}}",
+       "apihelp-query+search-param-info": "{{doc-apihelp-param|query+search|info}}",
+       "apihelp-query+search-param-prop": "{{doc-apihelp-param|query+search|prop}}",
+       "apihelp-query+search-param-limit": "{{doc-apihelp-param|query+search|limit}}",
+       "apihelp-query+search-param-interwiki": "{{doc-apihelp-param|query+search|interwiki}}",
+       "apihelp-query+search-param-backend": "{{doc-apihelp-param|query+search|backend}}",
+       "apihelp-query+search-example-simple": "{{doc-apihelp-example|query+search}}",
+       "apihelp-query+search-example-text": "{{doc-apihelp-example|query+search}}",
+       "apihelp-query+search-example-generator": "{{doc-apihelp-example|query+search}}",
+
+       "apihelp-query+siteinfo-description": "{{doc-apihelp-description|query+siteinfo}}",
+       "apihelp-query+siteinfo-param-prop": "{{doc-apihelp-param|query+siteinfo|prop}}",
+       "apihelp-query+siteinfo-param-filteriw": "{{doc-apihelp-param|query+siteinfo|filteriw}}",
+       "apihelp-query+siteinfo-param-showalldb": "{{doc-apihelp-param|query+siteinfo|showalldb}}",
+       "apihelp-query+siteinfo-param-numberingroup": "{{doc-apihelp-param|query+siteinfo|numberingroup}}",
+       "apihelp-query+siteinfo-param-inlanguagecode": "{{doc-apihelp-param|query+siteinfo|inlanguagecode}}",
+       "apihelp-query+siteinfo-example-simple": "{{doc-apihelp-example|query+siteinfo}}",
+       "apihelp-query+siteinfo-example-interwiki": "{{doc-apihelp-example|query+siteinfo}}",
+       "apihelp-query+siteinfo-example-replag": "{{doc-apihelp-example|query+siteinfo}}",
+
+       "apihelp-query+stashimageinfo-description": "{{doc-apihelp-description|query+stashimageinfo}}",
+       "apihelp-query+stashimageinfo-param-filekey": "{{doc-apihelp-param|query+stashimageinfo|filekey}}",
+       "apihelp-query+stashimageinfo-param-sessionkey": "{{doc-apihelp-param|query+stashimageinfo|sessionkey}}",
+       "apihelp-query+stashimageinfo-param-prop": "{{doc-apihelp-param|query+stashimageinfo|prop}}",
+       "apihelp-query+stashimageinfo-example-simple": "{{doc-apihelp-example|query+stashimageinfo}}",
+       "apihelp-query+stashimageinfo-example-params": "{{doc-apihelp-example|query+stashimageinfo}}",
+
+       "apihelp-query+tags-description": "{{doc-apihelp-description|query+tags}}",
+       "apihelp-query+tags-param-limit": "{{doc-apihelp-param|query+tags|limit}}",
+       "apihelp-query+tags-param-prop": "{{doc-apihelp-param|query+tags|prop}}",
+       "apihelp-query+tags-example-simple": "{{doc-apihelp-example|query+tags}}",
+
+       "apihelp-query+templates-description": "{{doc-apihelp-description|query+templates}}",
+       "apihelp-query+templates-param-namespace": "{{doc-apihelp-param|query+templates|namespace}}",
+       "apihelp-query+templates-param-limit": "{{doc-apihelp-param|query+templates|limit}}",
+       "apihelp-query+templates-param-templates": "{{doc-apihelp-param|query+templates|templates}}",
+       "apihelp-query+templates-param-dir": "{{doc-apihelp-param|query+templates|dir}}",
+       "apihelp-query+templates-example-simple": "{{doc-apihelp-example|query+templates}}",
+       "apihelp-query+templates-example-generator": "{{doc-apihelp-example|query+templates}}",
+       "apihelp-query+templates-example-namespaces": "{{doc-apihelp-example|query+templates}}",
+
+       "apihelp-query+tokens-description": "{{doc-apihelp-description|query+tokens}}",
+       "apihelp-query+tokens-param-type": "{{doc-apihelp-param|query+tokens|type}}",
+       "apihelp-query+tokens-example-simple": "{{doc-apihelp-example|query+tokens}}",
+       "apihelp-query+tokens-example-types": "{{doc-apihelp-example|query+tokens}}",
+
+       "apihelp-query+transcludedin-description": "{{doc-apihelp-description|query+transcludedin}}",
+       "apihelp-query+transcludedin-param-prop": "{{doc-apihelp-param|query+transcludedin|prop}}",
+       "apihelp-query+transcludedin-param-namespace": "{{doc-apihelp-param|query+transcludedin|namespace}}",
+       "apihelp-query+transcludedin-param-limit": "{{doc-apihelp-param|query+transcludedin|limit}}",
+       "apihelp-query+transcludedin-param-show": "{{doc-apihelp-param|query+transcludedin|show}}",
+       "apihelp-query+transcludedin-example-simple": "{{doc-apihelp-example|query+transcludedin}}",
+       "apihelp-query+transcludedin-example-generator": "{{doc-apihelp-example|query+transcludedin}}",
+
+       "apihelp-query+usercontribs-description": "{{doc-apihelp-description|query+usercontribs}}",
+       "apihelp-query+usercontribs-param-limit": "{{doc-apihelp-param|query+usercontribs|limit}}",
+       "apihelp-query+usercontribs-param-start": "{{doc-apihelp-param|query+usercontribs|start}}",
+       "apihelp-query+usercontribs-param-end": "{{doc-apihelp-param|query+usercontribs|end}}",
+       "apihelp-query+usercontribs-param-user": "{{doc-apihelp-param|query+usercontribs|user}}",
+       "apihelp-query+usercontribs-param-userprefix": "{{doc-apihelp-param|query+usercontribs|userprefix}}",
+       "apihelp-query+usercontribs-param-namespace": "{{doc-apihelp-param|query+usercontribs|namespace}}",
+       "apihelp-query+usercontribs-param-prop": "{{doc-apihelp-param|query+usercontribs|prop}}",
+       "apihelp-query+usercontribs-param-show": "{{doc-apihelp-param|query+usercontribs|show|params=* $1 - Value of [[mw:Manual:$RCMaxAge|$RCMaxAge]]|paramstart=2}}",
+       "apihelp-query+usercontribs-param-tag": "{{doc-apihelp-param|query+usercontribs|tag}}",
+       "apihelp-query+usercontribs-param-toponly": "{{doc-apihelp-param|query+usercontribs|toponly}}",
+       "apihelp-query+usercontribs-example-user": "{{doc-apihelp-example|query+usercontribs}}",
+       "apihelp-query+usercontribs-example-ipprefix": "{{doc-apihelp-example|query+usercontribs}}",
+
+       "apihelp-query+userinfo-description": "{{doc-apihelp-description|query+userinfo}}",
+       "apihelp-query+userinfo-param-prop": "{{doc-apihelp-param|query+userinfo|prop|params=* $1 - Maximum value for the \"unreadcount\" property.\n$2 - Return value when there are more unread pages.|paramstart=3}}",
+       "apihelp-query+userinfo-example-simple": "{{doc-apihelp-example|query+userinfo}}",
+       "apihelp-query+userinfo-example-data": "{{doc-apihelp-example|query+userinfo}}",
+
+       "apihelp-query+users-description": "{{doc-apihelp-description|query+users}}",
+       "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop}}",
+       "apihelp-query+users-param-users": "{{doc-apihelp-param|query+users|users}}",
+       "apihelp-query+users-param-token": "{{doc-apihelp-param|query+users|token}}",
+       "apihelp-query+users-example-simple": "{{doc-apihelp-example|query+users}}",
+
+       "apihelp-query+watchlist-description": "{{doc-apihelp-description|query+watchlist}}",
+       "apihelp-query+watchlist-param-allrev": "{{doc-apihelp-param|query+watchlist|allrev}}",
+       "apihelp-query+watchlist-param-start": "{{doc-apihelp-param|query+watchlist|start}}",
+       "apihelp-query+watchlist-param-end": "{{doc-apihelp-param|query+watchlist|end}}",
+       "apihelp-query+watchlist-param-namespace": "{{doc-apihelp-param|query+watchlist|namespace}}",
+       "apihelp-query+watchlist-param-user": "{{doc-apihelp-param|query+watchlist|user}}",
+       "apihelp-query+watchlist-param-excludeuser": "{{doc-apihelp-param|query+watchlist|excludeuser}}",
+       "apihelp-query+watchlist-param-limit": "{{doc-apihelp-param|query+watchlist|limit}}",
+       "apihelp-query+watchlist-param-prop": "{{doc-apihelp-param|query+watchlist|prop}}",
+       "apihelp-query+watchlist-param-show": "{{doc-apihelp-param|query+watchlist|show}}",
+       "apihelp-query+watchlist-param-type": "{{doc-apihelp-param|query+watchlist|type}}",
+       "apihelp-query+watchlist-param-owner": "{{doc-apihelp-param|query+watchlist|owner}}",
+       "apihelp-query+watchlist-param-token": "{{doc-apihelp-param|query+watchlist|token}}",
+       "apihelp-query+watchlist-example-simple": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-props": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-allrev": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-generator": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-generator-rev": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-wlowner": "{{doc-apihelp-example|query+watchlist}}",
+
+       "apihelp-query+watchlistraw-description": "{{doc-apihelp-description|query+watchlistraw}}",
+       "apihelp-query+watchlistraw-param-namespace": "{{doc-apihelp-param|query+watchlistraw|namespace}}",
+       "apihelp-query+watchlistraw-param-limit": "{{doc-apihelp-param|query+watchlistraw|limit}}",
+       "apihelp-query+watchlistraw-param-prop": "{{doc-apihelp-param|query+watchlistraw|prop}}",
+       "apihelp-query+watchlistraw-param-show": "{{doc-apihelp-param|query+watchlistraw|show}}",
+       "apihelp-query+watchlistraw-param-owner": "{{doc-apihelp-param|query+watchlistraw|owner}}",
+       "apihelp-query+watchlistraw-param-token": "{{doc-apihelp-param|query+watchlistraw|token}}",
+       "apihelp-query+watchlistraw-example-simple": "{{doc-apihelp-example|query+watchlistraw}}",
+       "apihelp-query+watchlistraw-example-generator": "{{doc-apihelp-example|query+watchlistraw}}",
+
+       "apihelp-revisiondelete-description": "{{doc-apihelp-description|revisiondelete}}",
+       "apihelp-revisiondelete-param-type": "{{doc-apihelp-param|revisiondelete|type}}",
+       "apihelp-revisiondelete-param-target": "{{doc-apihelp-param|revisiondelete|target}}",
+       "apihelp-revisiondelete-param-ids": "{{doc-apihelp-param|revisiondelete|ids}}",
+       "apihelp-revisiondelete-param-hide": "{{doc-apihelp-param|revisiondelete|hide}}",
+       "apihelp-revisiondelete-param-show": "{{doc-apihelp-param|revisiondelete|show}}",
+       "apihelp-revisiondelete-param-suppress": "{{doc-apihelp-param|revisiondelete|suppress}}",
+       "apihelp-revisiondelete-param-reason": "{{doc-apihelp-param|revisiondelete|reason}}",
+       "apihelp-revisiondelete-example-revision": "{{doc-apihelp-example|revisiondelete}}",
+       "apihelp-revisiondelete-example-log": "{{doc-apihelp-example|revisiondelete}}",
+
+       "apihelp-rollback-description": "{{doc-apihelp-description|rollback}}",
+       "apihelp-rollback-param-title": "{{doc-apihelp-param|rollback|title}}",
+       "apihelp-rollback-param-pageid": "{{doc-apihelp-param|rollback|pageid}}",
+       "apihelp-rollback-param-user": "{{doc-apihelp-param|rollback|user}}",
+       "apihelp-rollback-param-summary": "{{doc-apihelp-param|rollback|summary}}",
+       "apihelp-rollback-param-markbot": "{{doc-apihelp-param|rollback|markbot}}",
+       "apihelp-rollback-param-watchlist": "{{doc-apihelp-param|rollback|watchlist}}",
+       "apihelp-rollback-example-simple": "{{doc-apihelp-example|rollback}}",
+       "apihelp-rollback-example-summary": "{{doc-apihelp-example|rollback}}",
+
+       "apihelp-rsd-description": "{{doc-apihelp-description|rsd}}",
+       "apihelp-rsd-example-simple": "{{doc-apihelp-example|rsd}}",
+
+       "apihelp-setnotificationtimestamp-description": "{{doc-apihelp-description|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "{{doc-apihelp-param|setnotificationtimestamp|entirewatchlist}}",
+       "apihelp-setnotificationtimestamp-param-timestamp": "{{doc-apihelp-param|setnotificationtimestamp|timestamp}}",
+       "apihelp-setnotificationtimestamp-param-torevid": "{{doc-apihelp-param|setnotificationtimestamp|torevid}}",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "{{doc-apihelp-param|setnotificationtimestamp|newerthanrevid}}",
+       "apihelp-setnotificationtimestamp-example-all": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-page": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-allpages": "{{doc-apihelp-example|setnotificationtimestamp}}",
+
+       "apihelp-tokens-description": "{{doc-apihelp-description|tokens}}",
+       "apihelp-tokens-param-type": "{{doc-apihelp-param|tokens|type}}",
+       "apihelp-tokens-example-edit": "{{doc-apihelp-example|tokens}}",
+       "apihelp-tokens-example-emailmove": "{{doc-apihelp-example|tokens}}",
+
+       "apihelp-unblock-description": "{{doc-apihelp-description|unblock}}",
+       "apihelp-unblock-param-id": "{{doc-apihelp-param|unblock|id}}",
+       "apihelp-unblock-param-user": "{{doc-apihelp-param|unblock|user}}",
+       "apihelp-unblock-param-reason": "{{doc-apihelp-param|unblock|reason}}",
+       "apihelp-unblock-example-id": "{{doc-apihelp-example|unblock}}",
+       "apihelp-unblock-example-user": "{{doc-apihelp-example|unblock}}",
+
+       "apihelp-undelete-description": "{{doc-apihelp-description|undelete}}",
+       "apihelp-undelete-param-title": "{{doc-apihelp-param|undelete|title}}",
+       "apihelp-undelete-param-reason": "{{doc-apihelp-param|undelete|reason}}",
+       "apihelp-undelete-param-timestamps": "{{doc-apihelp-param|undelete|timestamps}}",
+       "apihelp-undelete-param-fileids": "{{doc-apihelp-param|undelete|fileids}}",
+       "apihelp-undelete-param-watchlist": "{{doc-apihelp-param|undelete|watchlist}}",
+       "apihelp-undelete-example-page": "{{doc-apihelp-example|undelete}}",
+       "apihelp-undelete-example-revisions": "{{doc-apihelp-example|undelete}}",
+
+       "apihelp-upload-description": "{{doc-apihelp-description|upload}}",
+       "apihelp-upload-param-filename": "{{doc-apihelp-param|upload|filename}}",
+       "apihelp-upload-param-comment": "{{doc-apihelp-param|upload|comment}}",
+       "apihelp-upload-param-text": "{{doc-apihelp-param|upload|text}}",
+       "apihelp-upload-param-watch": "{{doc-apihelp-param|upload|watch}}",
+       "apihelp-upload-param-watchlist": "{{doc-apihelp-param|upload|watchlist}}",
+       "apihelp-upload-param-ignorewarnings": "{{doc-apihelp-param|upload|ignorewarnings}}",
+       "apihelp-upload-param-file": "{{doc-apihelp-param|upload|file}}",
+       "apihelp-upload-param-url": "{{doc-apihelp-param|upload|url}}",
+       "apihelp-upload-param-filekey": "{{doc-apihelp-param|upload|filekey}}",
+       "apihelp-upload-param-sessionkey": "{{doc-apihelp-param|upload|sessionkey}}",
+       "apihelp-upload-param-stash": "{{doc-apihelp-param|upload|stash}}",
+       "apihelp-upload-param-filesize": "{{doc-apihelp-param|upload|filesize}}",
+       "apihelp-upload-param-offset": "{{doc-apihelp-param|upload|offset}}",
+       "apihelp-upload-param-chunk": "{{doc-apihelp-param|upload|chunk}}",
+       "apihelp-upload-param-async": "{{doc-apihelp-param|upload|async}}",
+       "apihelp-upload-param-asyncdownload": "{{doc-apihelp-param|upload|asyncdownload}}",
+       "apihelp-upload-param-leavemessage": "{{doc-apihelp-param|upload|leavemessage}}",
+       "apihelp-upload-param-statuskey": "{{doc-apihelp-param|upload|statuskey}}",
+       "apihelp-upload-param-checkstatus": "{{doc-apihelp-param|upload|checkstatus}}",
+       "apihelp-upload-example-url": "{{doc-apihelp-example|upload}}",
+       "apihelp-upload-example-filekey": "{{doc-apihelp-example|upload}}",
+
+       "apihelp-userrights-description": "{{doc-apihelp-description|userrights}}",
+       "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}",
+       "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}",
+       "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}",
+       "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}",
+       "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}",
+       "apihelp-userrights-example-user": "{{doc-apihelp-example|userrights}}",
+       "apihelp-userrights-example-userid": "{{doc-apihelp-example|userrights}}",
+
+       "apihelp-watch-description": "{{doc-apihelp-description|watch}}",
+       "apihelp-watch-param-title": "{{doc-apihelp-param|watch|title}}",
+       "apihelp-watch-param-unwatch": "{{doc-apihelp-param|watch|unwatch}}",
+       "apihelp-watch-example-watch": "{{doc-apihelp-example|watch}}",
+       "apihelp-watch-example-unwatch": "{{doc-apihelp-example|watch}}",
+       "apihelp-watch-example-generator": "{{doc-apihelp-example|watch}}",
+
        "apihelp-format-example-generic": "{{doc-apihelp-example|format|params=* $1 - Format name|paramstart=2|noseealso=1}}",
        "apihelp-dbg-description": "{{doc-apihelp-description|dbg|seealso=* {{msg-mw|apihelp-dbgfm-description}}}}",
        "apihelp-dbgfm-description": "{{doc-apihelp-description|dbgfm|seealso=* {{msg-mw|apihelp-dbg-description}}}}",
        "apihelp-yaml-description": "{{doc-apihelp-description|yaml|seealso=* {{msg-mw|apihelp-yamlfm-description}}}}",
        "apihelp-yamlfm-description": "{{doc-apihelp-description|yamlfm|seealso=* {{msg-mw|apihelp-yaml-description}}}}",
 
-       "apihelp-help-description": "{{doc-apihelp-description|help}}",
-       "apihelp-help-param-modules": "{{doc-apihelp-param|help|modules}}",
-       "apihelp-help-param-submodules": "{{doc-apihelp-param|help|submodules}}",
-       "apihelp-help-param-recursivesubmodules": "{{doc-apihelp-param|help|recursivesubmodules}}",
-       "apihelp-help-param-helpformat": "{{doc-apihelp-param|help|helpformat}}",
-       "apihelp-help-param-wrap": "{{doc-apihelp-param|help|wrap}}",
-       "apihelp-help-param-toc": "{{doc-apihelp-param|help|toc}}",
-       "apihelp-help-example-main": "{{doc-apihelp-example|help}}",
-       "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
-       "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
-       "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
-
        "api-format-title": "Page title when API output is pretty-printed in HTML.",
        "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
 
+       "api-orm-param-props": "{{doc-apihelp-param|orm|props|description=the \"props\" parameter in subclasses of ApiQueryORM}}",
+       "api-orm-param-limit": "{{doc-apihelp-param|orm|limit|description=the \"limit\" parameter in subclasses of ApiQueryORM}}",
+
+       "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
+       "api-pageset-param-pageids": "{{doc-apihelp-param|pageset|pageids|description=the \"pageids\" parameter in pageset-using modules}}",
+       "api-pageset-param-revids": "{{doc-apihelp-param|pageset|revids|description=the \"revids\" parameter in pageset-using modules}}",
+       "api-pageset-param-generator": "{{doc-apihelp-param|pageset|generator|description=the \"generator\" parameter in pageset-using modules}}",
+       "api-pageset-param-redirects-generator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is also available}}",
+       "api-pageset-param-redirects-nogenerator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is not available}}",
+       "api-pageset-param-converttitles": "{{doc-apihelp-param|pageset|converttitles|description=the \"converttitles\" parameter in pageset-using modules|params=* $1 - List of languages with variants|paramstart=2}}",
+
        "api-help-title": "Page title for the auto-generated help output",
        "api-help-lead": "Text displayed at the top of the API help page",
        "api-help-main-header": "Text for the header of the main module",
        "api-help-param-default": "Used to display the default value for an API parameter\n\nParameters:\n* $1 - Default value\n\nSee also:\n* {{msg-mw|api-help-param-default-empty}}",
        "api-help-param-default-empty": "Used to display the default value for an API parameter when that default is an empty value\n\nSee also:\n* {{msg-mw|api-help-param-default}}",
        "api-help-param-token": "{{doc-apihelp-param|description=any 'token' parameter|paramstart=3|params=\n* $1 - Token type|noseealso=1}}",
+       "api-help-param-token-webui": "{{doc-apihelp-param|description=additional text for any \"token\" parameter, explaining that web UI tokens are also accepted|noseealso=1}}",
+       "api-help-param-disabled-in-miser-mode": "{{doc-apihelp-param|description=any parameter that is disabled when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+       "api-help-param-limited-in-miser-mode": "{{doc-apihelp-param|description=additional text for any parameter that may cause the module to return few results when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+       "api-help-param-direction": "{{doc-apihelp-param|description=any standard \"dir\" parameter|noseealso=1}}",
+       "api-help-param-continue": "{{doc-apihelp-param|description=any standard \"continue\" parameter, or other parameter with the same semantics|noseealso=1}}",
        "api-help-param-no-description": "Displayed on API parameters that lack any description",
        "api-help-examples": "Label for the API help examples section\n\nParameters:\n* $1 - Number of examples to be displayed",
        "api-help-permissions": "Label for the \"permissions\" section in the main module's help output.\n\nParameters:\n* $1 - Number of permissions displayed",