2016-06-22 22:33:35 +00:00
{
"$schema" : "http://json-schema.org/schema#" ,
"description" : "MediaWiki extension.json schema" ,
"type" : "object" ,
"properties" : {
"manifest_version" : {
"type" : "integer" ,
"description" : "Version of the extension.json schema the extension.json file is in." ,
"required" : true
} ,
"name" : {
"type" : "string" ,
"description" : "The extension's canonical name." ,
"required" : true
} ,
"namemsg" : {
"type" : "string" ,
"description" : "i18n message key of the extension's name."
} ,
"type" : {
"type" : "string" ,
"description" : "The extension's type, as an index to $wgExtensionCredits." ,
"default" : "other"
} ,
"author" : {
"type" : [
"string" ,
"array"
] ,
"description" : "Extension's authors." ,
"items" : {
"type" : "string"
}
} ,
"version" : {
"type" : "string" ,
"description" : "The version of this release of the extension."
} ,
"url" : {
"type" : "string" ,
"description" : "URL to the homepage for the extension." ,
2017-07-17 17:13:49 +00:00
"format" : "uri-reference"
2016-06-22 22:33:35 +00:00
} ,
"description" : {
"type" : "string" ,
"description" : "Raw description of the extension."
} ,
"descriptionmsg" : {
"type" : "string" ,
"description" : "Message key for a i18n message describing the extension."
} ,
"license-name" : {
"type" : "string" ,
2016-09-28 02:56:07 +00:00
"description" : "SPDX identifier for the license under which the extension is released."
2016-06-22 22:33:35 +00:00
} ,
"requires" : {
"type" : "object" ,
2020-04-22 14:50:30 +00:00
"description" : "Indicates what versions of PHP, MediaWiki core, extensions or skins are required. This syntax may be extended in the future, for example to check dependencies between other services." ,
2017-01-30 17:51:16 +00:00
"additionalProperties" : false ,
registration: Add development requirements to extension.json
Extensions can specify development dependencies in extension.json under
the "dev-requires" key. It's identical to the "requires" field.
Any requirement that is needed to pass tests, including but not limited
to, PHPUnit, QUnit, structure, phan, should be documented in this new
field. The main intention is that CI will ensure that all of these
dependencies are satisfied before running tests.
At standard runtime, the development requirements will be ignored by
MediaWiki, since it only checks for real requirements. Scripts can
manually check development requirements by calling
ExtensionRegistry::setCheckDevRequires( true ) before trying to load
things.
If both "requires" and "dev-requires" are present, MediaWiki will merge
the two together, so the environment will need to satisfy both before
proceeding.
Bug: T193824
Change-Id: I9b2936666ee3c96f5c976c7a17f11c437c2c7f48
2019-05-19 09:17:56 +00:00
"properties" : {
"MediaWiki" : {
"type" : "string" ,
"description" : "Version constraint string against MediaWiki core."
} ,
"platform" : {
"type" : "object" ,
"description" : "Indicates version constraints against platform services." ,
"additionalProperties" : false ,
"properties" : {
"php" : {
"type" : "string" ,
"description" : "Version constraint string against PHP."
} ,
"ability-shell" : {
"type" : "boolean" ,
"default" : false ,
"description" : "Whether this extension requires shell access."
}
} ,
"patternProperties" : {
"^ext-" : {
"type" : "string" ,
"description" : "Required PHP extension." ,
"enum" : [ "*" ]
}
}
} ,
"extensions" : {
"type" : "object" ,
"description" : "Set of version constraint strings against specific extensions."
} ,
"skins" : {
"type" : "object" ,
"description" : "Set of version constraint strings against specific skins."
}
}
} ,
"dev-requires" : {
"type" : "object" ,
"description" : "Indicates what dependencies are required for development purposes such as running tests. This syntax may be extended in the future." ,
"additionalProperties" : false ,
2016-06-22 22:33:35 +00:00
"properties" : {
"MediaWiki" : {
"type" : "string" ,
"description" : "Version constraint string against MediaWiki core."
2017-01-30 17:51:16 +00:00
} ,
2018-09-08 00:02:53 +00:00
"platform" : {
"type" : "object" ,
"description" : "Indicates version constraints against platform services." ,
"additionalProperties" : false ,
"properties" : {
"php" : {
"type" : "string" ,
"description" : "Version constraint string against PHP."
2018-10-13 22:24:31 +00:00
} ,
"ability-shell" : {
"type" : "boolean" ,
"default" : false ,
"description" : "Whether this extension requires shell access."
2018-09-08 00:02:53 +00:00
}
2018-09-24 21:55:16 +00:00
} ,
2019-01-22 02:09:13 +00:00
"patternProperties" : {
2018-09-24 21:55:16 +00:00
"^ext-" : {
"type" : "string" ,
"description" : "Required PHP extension." ,
2019-05-22 08:57:05 +00:00
"enum" : [ "*" ]
2018-09-24 21:55:16 +00:00
}
2018-09-08 00:02:53 +00:00
}
} ,
2017-01-30 17:51:16 +00:00
"extensions" : {
"type" : "object" ,
"description" : "Set of version constraint strings against specific extensions."
} ,
"skins" : {
"type" : "object" ,
"description" : "Set of version constraint strings against specific skins."
2016-06-22 22:33:35 +00:00
}
}
} ,
"ResourceFileModulePaths" : {
"type" : "object" ,
"description" : "Default paths to use for all ResourceLoader file modules" ,
"additionalProperties" : false ,
"properties" : {
"localBasePath" : {
"type" : "string" ,
"description" : "Base path to prepend to all local paths, relative to current directory"
} ,
"remoteExtPath" : {
"type" : "string" ,
"description" : "Base path to prepend to all remote paths, relative to $wgExtensionAssetsPath"
} ,
"remoteSkinPath" : {
"type" : "string" ,
"description" : "Base path to prepend to all remote paths, relative to $wgStylePath"
}
}
} ,
"ResourceModules" : {
"type" : "object" ,
"description" : "ResourceLoader modules to register" ,
"patternProperties" : {
"^[a-zA-Z0-9-\\.]+$" : {
"type" : "object" ,
"anyOf" : [
{
"description" : "A ResourceLoaderFileModule definition" ,
"additionalProperties" : false ,
"properties" : {
"localBasePath" : {
"type" : "string" ,
"description" : "Base path to prepend to all local paths in $options. Defaults to $IP"
} ,
"remoteBasePath" : {
"type" : "string" ,
"description" : "Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath"
} ,
"remoteExtPath" : {
"type" : "string" ,
"description" : "Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath"
} ,
"skipFunction" : {
"type" : "string" ,
"description" : "Path to a file containing a JavaScript \"skip function\", if desired."
} ,
"scripts" : {
"type" : [ "string" , "array" ] ,
"description" : "Scripts to always include (array of file paths)" ,
"items" : {
"type" : "string"
}
} ,
"languageScripts" : {
"type" : "object" ,
"description" : "Scripts to include in specific language contexts (mapping of language code to file path(s))" ,
"patternProperties" : {
"^[a-zA-Z0-9-]{2,}$" : {
"type" : [
"string" ,
"array"
] ,
"items" : {
"type" : "string"
}
}
}
} ,
"skinScripts" : {
"type" : "object" ,
"description" : "Scripts to include in specific skin contexts (mapping of skin name to script(s)" ,
"patternProperties" : {
".+" : {
"type" : [
"string" ,
"array"
] ,
"items" : {
"type" : "string"
}
}
}
} ,
"debugScripts" : {
"type" : [ "string" , "array" ] ,
"description" : "Scripts to include in debug contexts" ,
"items" : {
"type" : "string"
}
} ,
"dependencies" : {
"type" : [ "string" , "array" ] ,
"description" : "Modules which must be loaded before this module" ,
"items" : {
"type" : "string"
}
} ,
"styles" : {
"type" : [ "string" , "array" , "object" ] ,
"description" : "Styles to always load" ,
"items" : {
"type" : "string"
}
} ,
"skinStyles" : {
"type" : "object" ,
"description" : "Styles to include in specific skin contexts (mapping of skin name to style(s))" ,
"patternProperties" : {
".+" : {
"type" : [
"string" ,
"array"
] ,
"items" : {
"type" : "string"
}
}
}
} ,
"messages" : {
"type" : [ "string" , "array" ] ,
"description" : "Messages to always load" ,
"items" : {
"type" : "string"
}
} ,
"group" : {
"type" : "string" ,
2020-05-16 02:06:19 +00:00
"description" : "Group with which this module should be loaded"
2016-06-22 22:33:35 +00:00
} ,
2016-07-14 22:09:06 +00:00
"deprecated" : {
2018-01-09 00:05:05 +00:00
"type" : [ "object" , "string" , "boolean" ] ,
"description" : "Whether the module is deprecated and usage is discouraged. Either a boolean, or a string or an object with key message can be used to customise deprecation message."
2016-07-14 22:09:06 +00:00
} ,
2016-06-22 22:33:35 +00:00
"position" : {
"type" : "string" ,
2021-08-18 05:50:52 +00:00
"description" : "Position on the page to load this module at (unused since MediaWiki 1.29)" ,
2016-06-22 22:33:35 +00:00
"enum" : [
"bottom" ,
"top"
]
} ,
"templates" : {
"type" : [ "object" , "array" ] ,
"description" : "Templates to be loaded for client-side usage"
} ,
"targets" : {
"type" : [ "string" , "array" ] ,
"description" : "ResourceLoader target the module can run on" ,
"items" : {
"type" : "string"
}
2016-10-18 19:04:40 +00:00
} ,
"noflip" : {
"type" : "boolean" ,
"description" : "Whether to skip CSSJanus LTR-to-RTL flipping for this module. Recommended for styles imported from libraries that already properly handle their RTL styles. Default is false, meaning CSSJanus will be applied on RTL-mode output."
2019-02-11 20:39:41 +00:00
} ,
"packageFiles" : {
2019-10-24 15:12:20 +00:00
"type" : [ "string" , "array" ] ,
"description" : "Package files that can be require()d" ,
"items" : {
"type" : [ "string" , "object" ]
}
2021-01-23 07:33:38 +00:00
} ,
"es6" : {
"type" : "boolean" ,
"description" : "Whether this module requires an ES6-capable browser. If set to true, loading this module in a non-ES6 browser will cause an error. Using ES6 syntax in modules is not yet supported, but will be in the near future. Default is false."
2016-06-22 22:33:35 +00:00
}
}
} ,
{
"description" : "A ResourceLoaderWikiModule definition" ,
"additionalProperties" : false ,
"properties" : {
"class" : {
"enum" : [ "ResourceLoaderWikiModule" ]
} ,
"group" : {
"type" : "string" ,
2020-05-16 02:06:19 +00:00
"description" : "Group with which this module should be loaded"
2016-06-22 22:33:35 +00:00
} ,
"position" : {
"type" : "string" ,
2021-08-18 05:50:52 +00:00
"description" : "Position on the page to load this module at (unused since MediaWiki 1.29)" ,
2016-06-22 22:33:35 +00:00
"enum" : [
"bottom" ,
"top"
]
} ,
"targets" : {
"type" : [ "string" , "array" ] ,
"description" : "ResourceLoader target the module can run on" ,
"items" : {
"type" : "string"
}
} ,
"scripts" : {
"type" : "array" ,
2020-05-16 02:06:19 +00:00
"description" : "A list of on-wiki pages containing JavaScript that should be loaded" ,
2016-06-22 22:33:35 +00:00
"items" : {
"type" : "string"
}
} ,
"styles" : {
"type" : "array" ,
2020-05-16 02:06:19 +00:00
"description" : "A list of on-wiki pages containing CSS that should be loaded" ,
2016-06-22 22:33:35 +00:00
"items" : {
"type" : "string"
}
}
}
} ,
{
"description" : "A ResourceLoaderImageModule definition" ,
"additionalProperties" : false ,
"properties" : {
"class" : {
"enum" : [ "ResourceLoaderImageModule" ]
} ,
2020-03-15 14:54:56 +00:00
"localBasePath" : {
"type" : "string" ,
"description" : "Base path to prepend to all local paths. Defaults to $IP"
} ,
2018-06-25 22:55:19 +00:00
"defaultColor" : {
"type" : "string"
} ,
2016-06-22 22:33:35 +00:00
"data" : {
"type" : "string"
} ,
"prefix" : {
"type" : "string"
} ,
"selector" : {
"type" : "string"
} ,
"selectorWithoutVariant" : {
"type" : "string"
} ,
"selectorWithVariant" : {
"type" : "string"
} ,
2018-07-09 23:26:15 +00:00
"useDataURI" : {
"type" : "boolean"
} ,
2016-06-22 22:33:35 +00:00
"variants" : {
"type" : "object"
} ,
"images" : {
"type" : "object"
} ,
"position" : {
2021-08-18 05:50:52 +00:00
"type" : "string" ,
"description" : "Position on the page to load this module at (unused since MediaWiki 1.29)" ,
2016-06-22 22:33:35 +00:00
"enum" : [
"top" ,
"bottom"
]
}
}
} ,
{
2020-05-16 02:06:19 +00:00
"description" : "An arbitrary ResourceLoaderModule definition by class" ,
2016-06-22 22:33:35 +00:00
"properties" : {
"class" : {
"type" : "string" ,
2019-02-23 01:17:05 +00:00
"pattern" : "^(?!ResourceLoader(File|Image|Wiki)Module).*$"
2016-06-22 22:33:35 +00:00
}
} ,
"required" : [ "class" ]
}
]
}
}
} ,
"ResourceModuleSkinStyles" : {
"type" : "object" ,
"description" : "ResourceLoader modules for custom skin styles"
} ,
"ResourceLoaderSources" : {
"type" : "object" ,
"description" : "ResourceLoader sources to register"
} ,
2018-05-20 18:32:57 +00:00
"SkinLessImportPaths" : {
"type" : "object" ,
"description" : "Path to the skin-specific LESS import directory, keyed by skin name. Can be used to define skin-specific LESS variables."
} ,
2019-01-18 20:21:35 +00:00
"QUnitTestModule" : {
"type" : "object" ,
2020-07-20 23:27:32 +00:00
"description" : "A ResourceLoaderFileModule definition registered only when wgEnableJavaScriptTest is true." ,
"additionalProperties" : false ,
"properties" : {
"localBasePath" : {
"type" : "string" ,
"description" : "Prefix for local paths to files in $options, relative to extenion directory"
} ,
"remoteExtPath" : {
"type" : "string" ,
"description" : "Prefix for URLs to files in $options, relative to $wgExtensionAssetsPath"
} ,
"remoteSkinPath" : {
"type" : "string" ,
"description" : "Prefix for URLs to files in $options, relative to $wgStylePath"
} ,
"scripts" : {
"type" : [ "string" , "array" ] ,
"description" : "Scripts to include (array of file paths)" ,
"items" : {
"type" : "string"
}
} ,
"packageFiles" : {
"type" : [ "string" , "array" ] ,
"description" : "Package files that can be require()d" ,
"items" : {
"type" : [ "string" , "object" ]
}
} ,
"dependencies" : {
"type" : [ "string" , "array" ] ,
"description" : "Modules which must be loaded before this module" ,
"items" : {
"type" : "string"
}
} ,
"styles" : {
"type" : [ "string" , "array" , "object" ] ,
"description" : "Styles to load" ,
"items" : {
"type" : "string"
}
} ,
"templates" : {
"type" : [ "object" , "array" ] ,
"description" : "Templates to be loaded for client-side usage" ,
"items" : {
"type" : "string"
}
} ,
"messages" : {
"type" : [ "string" , "array" ] ,
"description" : "Messages to load" ,
"items" : {
"type" : "string"
}
}
}
2019-01-18 20:21:35 +00:00
} ,
2019-10-12 03:17:51 +00:00
"MessagePosterModule" : {
"type" : "object" ,
2020-07-20 23:27:32 +00:00
"description" : "Additional JavaScript files and modules that will register content models with mw.messagePoster.factory." ,
"additionalProperties" : false ,
"properties" : {
"localBasePath" : {
"type" : "string" ,
"description" : "Prefix for local paths to files in $options, relative to extenion directory"
} ,
"scripts" : {
"type" : "array" ,
"description" : "Scripts to include as array of file paths" ,
"items" : {
"type" : "string"
}
} ,
"dependencies" : {
"type" : "array" ,
"description" : "Modules which must load before these files" ,
"items" : {
"type" : "string"
}
}
}
2019-10-12 03:17:51 +00:00
} ,
2016-06-22 22:33:35 +00:00
"ConfigRegistry" : {
"type" : "object" ,
"description" : "Registry of factory functions to create Config objects"
} ,
"SessionProviders" : {
"type" : "object" ,
"description" : "Session providers"
} ,
"AuthManagerAutoConfig" : {
"type" : "object" ,
"description" : "AuthManager auto-configuration" ,
"additionalProperties" : false ,
"properties" : {
"preauth" : {
"type" : "object" ,
"description" : "Pre-authentication providers"
} ,
"primaryauth" : {
"type" : "object" ,
"description" : "Primary authentication providers"
} ,
"secondaryauth" : {
"type" : "object" ,
"description" : "Secondary authentication providers"
}
}
} ,
"CentralIdLookupProviders" : {
"type" : "object" ,
"description" : "Central ID lookup providers"
} ,
"namespaces" : {
"type" : "array" ,
"description" : "Method to add extra namespaces" ,
"items" : {
"type" : "object" ,
"properties" : {
"id" : {
"type" : "integer"
} ,
"constant" : {
"type" : "string"
} ,
"name" : {
"type" : "string"
} ,
"gender" : {
"type" : "object" ,
"properties" : {
"male" : {
"type" : "string"
} ,
"female" : {
"type" : "string"
}
}
} ,
"subpages" : {
"type" : "boolean" ,
"default" : false
} ,
"content" : {
"type" : "boolean" ,
"default" : false
} ,
"defaultcontentmodel" : {
"type" : "string"
} ,
"protection" : {
"type" : [ "string" , "array" ] ,
"description" : "Userright(s) required to edit in this namespace"
} ,
"capitallinkoverride" : {
"type" : "boolean" ,
"description" : "Set $wgCapitalLinks on a per-namespace basis"
2016-07-29 08:09:24 +00:00
} ,
"conditional" : {
"type" : "boolean" ,
"description" : "Whether the namespace is conditional upon configuration and should not be registered (requires separate registration via a hook)" ,
"default" : false
2021-03-16 13:28:51 +00:00
} ,
"movable" : {
"type" : "boolean" ,
"description" : "Whether it is possible to move pages in this namespace" ,
"default" : true
2021-08-20 05:09:47 +00:00
} ,
"includable" : {
"type" : "boolean" ,
"description" : "Whether it is possible to include/transclude pages in this namespace" ,
"default" : true
2016-06-22 22:33:35 +00:00
}
} ,
"required" : [ "id" , "constant" , "name" ]
}
} ,
"TrackingCategories" : {
"type" : "array" ,
"description" : "Tracking category message keys" ,
"items" : {
"type" : "string"
}
} ,
"DefaultUserOptions" : {
"type" : "object" ,
"description" : "Default values of user options"
} ,
"HiddenPrefs" : {
"type" : "array" ,
"description" : "Preferences users cannot set" ,
"items" : {
"type" : "string"
}
} ,
"GroupPermissions" : {
"type" : "object" ,
"description" : "Default permissions to give to user groups" ,
"patternProperties" : {
"^[a-z]+$" : {
"type" : "object" ,
"patternProperties" : {
"^[a-z]+$" : {
"type" : "boolean"
}
}
}
}
} ,
"RevokePermissions" : {
"type" : "object" ,
"description" : "Default permissions to revoke from user groups" ,
"patternProperties" : {
"^[a-z]+$" : {
"type" : "object" ,
"patternProperties" : {
"^[a-z]+$" : {
"type" : "boolean"
}
}
}
}
} ,
"GrantPermissions" : {
"type" : "object" ,
"description" : "Map of permissions granted to authorized consumers to their bundles, called 'grants'" ,
"patternProperties" : {
"^[a-z]+$" : {
"type" : "object" ,
"patternProperties" : {
"^[a-z]+$" : {
"type" : "boolean"
}
}
}
}
} ,
"GrantPermissionGroups" : {
"type" : "object" ,
"description" : "Map of grants to their UI grouping" ,
"patternProperties" : {
"^[a-z]+$" : {
"type" : "string"
}
}
} ,
"ImplicitGroups" : {
"type" : "array" ,
"description" : "Implicit groups"
} ,
"GroupsAddToSelf" : {
"type" : "object" ,
"description" : "Groups a user can add to themselves"
} ,
"GroupsRemoveFromSelf" : {
"type" : "object" ,
"description" : "Groups a user can remove from themselves"
} ,
"AddGroups" : {
"type" : "object" ,
"description" : "Groups a user can add to users"
} ,
"RemoveGroups" : {
"type" : "object" ,
"description" : "Groups a user can remove from users"
} ,
"AvailableRights" : {
"type" : "array" ,
"description" : "User rights added by the extension" ,
"items" : {
"type" : "string"
}
} ,
"ContentHandlers" : {
"type" : "object" ,
2021-10-15 08:21:07 +00:00
"description" : "Mapping of model ID to class name or an ObjectFactory specification." ,
2016-06-22 22:33:35 +00:00
"patternProperties" : {
"^[A-Za-z]+$" : {
2021-10-15 08:21:07 +00:00
"oneOf" : [
{
"type" : "string" ,
"description" : "Class name of the ContentHandler."
} ,
{
"type" : "object" ,
"description" : "ObjectFactory specification of the ContentHandler."
}
]
2016-06-22 22:33:35 +00:00
}
}
} ,
"RateLimits" : {
"type" : "object" ,
"description" : "Rate limits"
} ,
"RecentChangesFlags" : {
"type" : "object" ,
"description" : "Flags (letter symbols) shown on RecentChanges pages"
} ,
"MediaHandlers" : {
"type" : "object" ,
"description" : "Plugins for media file type handling. Each entry in the array maps a MIME type to a PHP class name."
} ,
"ExtensionFunctions" : {
"type" : [
"array" ,
"string"
] ,
"description" : "Function to call after setup has finished" ,
"items" : {
"type" : "string"
}
} ,
"ExtensionMessagesFiles" : {
"type" : "object" ,
"description" : "File paths containing PHP internationalization data"
} ,
"MessagesDirs" : {
"type" : "object" ,
"description" : "Directory paths containing JSON internationalization data"
} ,
"ExtensionEntryPointListFiles" : {
"type" : "object"
} ,
"SpecialPages" : {
"type" : "object" ,
2019-09-06 09:21:29 +00:00
"description" : "SpecialPages implemented in this extension (mapping of page name to class name or to ObjectFactory spec)"
2016-06-22 22:33:35 +00:00
} ,
2017-08-24 18:05:26 +00:00
"AutoloadNamespaces" : {
"type" : "object" ,
2018-05-20 19:13:05 +00:00
"description" : "Mapping of PSR-4 compliant namespace to directory for autoloading" ,
"patternProperties" : {
"^[A-Za-z0-9\\\\]+\\\\$" : {
"type" : "string"
}
} ,
"additionalProperties" : false
2017-08-24 18:05:26 +00:00
} ,
2016-06-22 22:33:35 +00:00
"AutoloadClasses" : {
"type" : "object"
} ,
2019-12-10 12:13:13 +00:00
"TestAutoloadNamespaces" : {
"type" : "object" ,
"description" : "Mapping of PSR-4 compliant namespace to directory for autoloading to be used in tests" ,
"patternProperties" : {
"^[A-Za-z0-9\\\\]+\\\\$" : {
"type" : "string"
}
} ,
"additionalProperties" : false
} ,
"TestAutoloadClasses" : {
"type" : "object"
} ,
2016-06-22 22:33:35 +00:00
"Hooks" : {
2020-05-26 00:28:46 +00:00
"type" : "object" ,
2020-07-20 23:27:32 +00:00
"description" : "Hooks this extension uses (mapping of hook name to callback)" ,
"additionalProperties" : {
"oneOf" : [
{
"type" : "string" ,
"description" : "A global function name, static function name, or the name of a property in HookHandlers"
} ,
{
"type" : "object" ,
"description" : "A handler specification" ,
"properties" : {
"handler" : {
"type" : "string" ,
"description" : "The name of a property in HookHandlers"
} ,
"deprecated" : {
"type" : "boolean" ,
"description" : "The deprecation acknowledgement flag for the handler. If this is true, calls will be filtered if the relevant hook is deprecated."
}
} ,
"required" : [
"handler"
]
} ,
{
"type" : "array" ,
"description" : "An ordered array of handlers" ,
"items" : {
"oneOf" : [
{
"type" : "string" ,
"description" : "A global function name, static function name, or the name of a property in HookHandlers"
} ,
{
"type" : "object" ,
"description" : "A handler specification" ,
"properties" : {
"handler" : {
"type" : "string" ,
"description" : "The name of a property in HookHandlers"
} ,
"deprecated" : {
"type" : "boolean" ,
"description" : "The deprecation acknowledgement flag for the handler. If this is true, calls will be filtered if the relevant hook is deprecated."
}
} ,
"required" : [
"handler"
]
}
]
}
}
]
}
} ,
"HookHandlers" : {
"type" : "object" ,
"description" : "ObjectFactory specifications for new-style hook handlers" ,
"additionalProperties" : {
"type" : "object" ,
"properties" : {
"factory" : {
"type" : [ "string" , "array" ] ,
"description" : "A factory function to be called to create the handler for this hook"
} ,
"class" : {
"type" : "string" ,
"description" : "The fully-qualified class name of the handler. This should be omitted if a factory is specified."
} ,
"args" : {
"type" : "array" ,
"description" : "The arguments passed to the handler constructor or factory"
} ,
"services" : {
"type" : "array" ,
"description" : "If supplied and non-empty, the named services are requested from the service container and prepended before 'args'."
2020-11-17 06:15:02 +00:00
} ,
"optional_services" : {
"type" : "array" ,
"description" : "If supplied and non-empty, the named services are requested from the service container and appended after 'services' if the services are available; null is passed if the services are not available."
2020-07-20 23:27:32 +00:00
}
}
}
} ,
"DeprecatedHooks" : {
"type" : "object" ,
"description" : "Hooks which are defined and deprecated by the extension" ,
"additionalProperties" : {
"type" : "object" ,
"properties" : {
"deprecatedVersion" : {
"type" : "string" ,
"description" : "The version in which the hook was deprecated"
} ,
"component" : {
"type" : "string" ,
"description" : "The component to which the deprecated version relates. If omitted, the extension name will be used."
} ,
"silent" : {
"type" : "boolean" ,
"description" : "If true, no warning is raised when the hook is called or when a handler is declared. However, call filtering is still activated."
}
} ,
"required" : [
"deprecatedVersion"
]
}
2016-06-22 22:33:35 +00:00
} ,
"JobClasses" : {
"type" : "object" ,
2017-05-04 16:00:28 +00:00
"description" : "Job types this extension implements (mapping of job type to class name or factory function)"
2016-06-22 22:33:35 +00:00
} ,
"LogTypes" : {
"type" : "array" ,
"description" : "List of new log types this extension uses"
} ,
"LogRestrictions" : {
"type" : "object"
} ,
"FilterLogTypes" : {
"type" : "object"
} ,
"ActionFilteredLogs" : {
"type" : "object" ,
"description" : "List of log types which can be filtered by log actions" ,
"patternProperties" : {
"^[a-z-]+$" : {
"type" : "object" ,
"patternProperties" : {
"^[a-z-]+$" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
}
}
}
}
} ,
"LogNames" : {
"type" : "object"
} ,
"LogHeaders" : {
"type" : "object"
} ,
"LogActions" : {
"type" : "object"
} ,
"LogActionsHandlers" : {
"type" : "object"
} ,
"Actions" : {
"type" : "object"
} ,
"APIModules" : {
"type" : "object"
} ,
"APIFormatModules" : {
"type" : "object"
} ,
"APIMetaModules" : {
"type" : "object"
} ,
"APIPropModules" : {
"type" : "object"
} ,
"APIListModules" : {
"type" : "object"
} ,
"ValidSkinNames" : {
2020-05-14 11:20:24 +00:00
"type" : "object" ,
"description" : "Mapping of skin canonical names to PHP class name using the Object Factory specification. Or historically, the human readable name of the skin."
2016-06-22 22:33:35 +00:00
} ,
"FeedClasses" : {
"type" : "object" ,
"description" : "Available feeds objects"
} ,
"SkinOOUIThemes" : {
2020-05-16 02:06:19 +00:00
"type" : "object" ,
"description" : "Map of skin names to OOUI themes to use. Same format as ResourceLoaderOOUIModule::$builtinSkinThemeMap."
2016-06-22 22:33:35 +00:00
} ,
2017-03-17 02:14:05 +00:00
"OOUIThemePaths" : {
"type" : "object" ,
"description" : "Map of custom OOUI theme names to paths to load them from. Same format as ResourceLoaderOOUIModule::$builtinThemePaths." ,
"patternProperties" : {
"^[A-Za-z]+$" : {
"type" : "object" ,
"additionalProperties" : false ,
"properties" : {
"scripts" : {
"type" : "string" ,
"description" : "Path to script file."
} ,
"styles" : {
"type" : "string" ,
"description" : "Path to style files. '{module}' will be replaced with the module's name."
} ,
"images" : {
"type" : [ "string" , "null" ] ,
"description" : "Path to images (optional). '{module}' will be replaced with the module's name."
}
}
}
}
} ,
2016-10-31 17:12:56 +00:00
"PasswordPolicy" : {
"type" : "object" ,
"description" : "Password policies"
} ,
2016-11-17 22:36:09 +00:00
"FileExtensions" : {
2016-11-21 02:43:50 +00:00
"type" : "array" ,
"description" : "Preferred file extensions for uploading" ,
"items" : {
"type" : "string"
}
2016-11-17 22:36:09 +00:00
} ,
2018-07-31 22:19:40 +00:00
"RawHtmlMessages" : {
"type" : "array" ,
"description" : "Messages which are rendered as raw HTML" ,
"items" : {
"type" : "string"
}
} ,
2018-11-15 23:39:58 +00:00
"ReauthenticateTime" : {
"type" : "object" ,
"patternProperties" : {
".*" : {
"type" : "integer"
}
}
} ,
2016-06-22 22:33:35 +00:00
"callback" : {
"type" : [
"array" ,
"string"
] ,
"description" : "A function to be called right after MediaWiki processes this file"
} ,
"config" : {
"type" : "object" ,
"description" : "Configuration options for this extension" ,
"properties" : {
"_prefix" : {
"type" : "string" ,
"default" : "wg" ,
"description" : "Prefix to put in front of configuration settings when exporting them to $GLOBALS"
}
} ,
"patternProperties" : {
"^[a-zA-Z_\u007f-\u00ff][a-zA-Z0-9_\u007f-\u00ff]*$" : {
"properties" : {
"_merge_strategy" : {
"type" : "string" ,
"enum" : [
"array_merge_recursive" ,
Added array_replace_recursive merge strategy
For extension registry, add array_replace_recursive merge strategy,
as some extensions/configuration may prefer that to array_merge_recursive.
In some cases, configuration is merged from multiple extensions,
such as JsonConfig's $wgJsonConfigs configuration: ZeroBanner defines
"JsonZeroConfig": {
"namespace": 480,
"nsName": "Zero",
"isLocal": false,
"cacheKey": "1"
}
and mobile.php overrides it with
$wgJsonConfigs['JsonZeroConfig']['isLocal'] = false;
$wgJsonConfigs['JsonZeroConfig']['remote'] = [
'url' => 'https://zero.wikimedia.org/w/api.php',
'username' => $wmgZeroPortalApiUserName,
'password' => $wmgZeroPortalApiPassword,
];
Having identical value 'isLocal' would be converted into an array
if array_merge_recursive is used, but the replace strategy fixes it.
Change-Id: Ica6ddd0ae76f23e60de9b6235c6e2a3f2754a95d
2016-10-18 05:23:56 +00:00
"array_replace_recursive" ,
2016-06-22 22:33:35 +00:00
"array_plus_2d" ,
"array_plus" ,
2021-05-04 04:18:37 +00:00
"array_merge" ,
"provide_default"
2016-06-22 22:33:35 +00:00
] ,
"default" : "array_merge"
}
}
}
}
} ,
"ParserTestFiles" : {
"type" : "array" ,
2019-06-03 01:33:24 +00:00
"description" : "DEPRECATED: Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
2016-06-22 22:33:35 +00:00
} ,
2020-07-20 23:27:32 +00:00
"SearchMappings" : {
"type" : "object" ,
"description" : "Mapping of search canonical names (used in $wgSearchType and $wgSearchTypeAlternatives) using the Object Factory specification"
} ,
2016-08-26 06:00:28 +00:00
"ServiceWiringFiles" : {
"type" : "array" ,
"description" : "List of service wiring files to be loaded by the default instance of MediaWikiServices"
} ,
2020-07-20 23:27:32 +00:00
"RestRoutes" : {
"type" : "array" ,
"description" : "List of route specifications to be added to the REST API" ,
"items" : {
"type" : "object" ,
"properties" : {
"method" : {
"oneOf" : [
{
"type" : "string" ,
"description" : "The HTTP method name"
} ,
{
"type" : "array" ,
"items" : {
"type" : "string" ,
"description" : "An acceptable HTTP method name"
}
}
]
} ,
"path" : {
"type" : "string" ,
"description" : "The path template. This should start with an initial slash, designating the root of the REST API. Path parameters are enclosed in braces, for example /endpoint/{param}."
} ,
"factory" : {
"type" : [ "string" , "array" ] ,
"description" : "A factory function to be called to create the handler for this route"
} ,
"class" : {
"type" : "string" ,
"description" : "The fully-qualified class name of the handler. This should be omitted if a factory is specified."
} ,
"args" : {
"type" : "array" ,
"description" : "The arguments passed to the handler constructor or factory"
} ,
"services" : {
"type" : "array" ,
"description" : "If supplied and non-empty, the named services are requested from the service container and prepended before 'args'."
}
}
}
} ,
"ParsoidModules" : {
"type" : "array" ,
"description" : "List of extension modules to be registered with the Parsoid wikitext parser" ,
"items" : {
"oneOf" : [
{
"type" : "string" ,
"description" : "The fully-qualified name of a class implementing Wikimedia\\Parsoid\\Ext\\ExtensionModule"
} ,
{
"type" : "object" ,
"description" : "An object factory specification for a class implementing Wikimedia\\Parsoid\\Ext\\ExtensionModule" ,
"properties" : {
"factory" : {
"type" : [ "string" , "array" ] ,
"description" : "A factory function to be called to create an ExtensionModule. This should be omitted if a class is specified."
} ,
"class" : {
"type" : "string" ,
"description" : "The fully-qualified class name of a class implemeting Wikimedia\\Parsoid\\Ext\\ExtensionModule. This should be omitted if a factory is specified."
} ,
"args" : {
"type" : "array" ,
"description" : "The arguments passed to the ExtensionModule constructor or factory"
}
}
} ,
{
"type" : "object" ,
"description" : "A Parsoid extension module configuration array" ,
"properties" : {
"domProcessors" : {
"type" : "array" ,
"items" : {
"description" : "Object factory specification of a class implementing Wikimedia\\Parsoid\\Ext\\DOMProcessor"
}
} ,
"styles" : {
"type" : "array" ,
"items" : {
"type" : "string" ,
"description" : "Additional ResourceLoader styles to include"
}
} ,
"tags" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"description" : "An extension tag" ,
"properties" : {
"name" : {
"type" : "string" ,
"description" : "The name of the extension tag" ,
"required" : true
} ,
"handler" : {
"description" : "An object factory specification of a class extending Wikimedia\\Parsoid\\Ext\\ExtensionTagHandler"
} ,
"options" : {
"type" : "object" ,
"description" : "Additional Parsoid processing configuration for this extension tag"
}
}
}
}
}
}
]
}
} ,
2016-06-22 22:33:35 +00:00
"load_composer_autoloader" : {
"type" : "boolean" ,
"description" : "Load the composer autoloader for this extension, if one is present"
}
}
}