extension.schema.json 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987
  1. {
  2. "$schema": "http://json-schema.org/schema#",
  3. "description": "MediaWiki extension.json schema",
  4. "type": "object",
  5. "properties": {
  6. "manifest_version": {
  7. "type": "integer",
  8. "description": "Version of the extension.json schema the extension.json file is in.",
  9. "required": true
  10. },
  11. "name": {
  12. "type": "string",
  13. "description": "The extension's canonical name.",
  14. "required": true
  15. },
  16. "namemsg": {
  17. "type": "string",
  18. "description": "i18n message key of the extension's name."
  19. },
  20. "type": {
  21. "type": "string",
  22. "description": "The extension's type, as an index to $wgExtensionCredits.",
  23. "default": "other"
  24. },
  25. "author": {
  26. "type": [
  27. "string",
  28. "array"
  29. ],
  30. "description": "Extension's authors.",
  31. "items": {
  32. "type": "string"
  33. }
  34. },
  35. "version": {
  36. "type": "string",
  37. "description": "The version of this release of the extension."
  38. },
  39. "url": {
  40. "type": "string",
  41. "description": "URL to the homepage for the extension.",
  42. "format": "uri"
  43. },
  44. "description": {
  45. "type": "string",
  46. "description": "Raw description of the extension."
  47. },
  48. "descriptionmsg": {
  49. "type": "string",
  50. "description": "Message key for a i18n message describing the extension."
  51. },
  52. "license-name": {
  53. "type": "string",
  54. "description": "Short identifier for the license under which the extension is released.",
  55. "enum": [
  56. "0BSD",
  57. "AAL",
  58. "Abstyles",
  59. "Adobe-2006",
  60. "Adobe-Glyph",
  61. "ADSL",
  62. "AFL-1.1",
  63. "AFL-1.2",
  64. "AFL-2.0",
  65. "AFL-2.1",
  66. "AFL-3.0",
  67. "Afmparse",
  68. "AGPL-1.0",
  69. "AGPL-3.0",
  70. "AGPL-3.0-only",
  71. "AGPL-3.0-or-later",
  72. "Aladdin",
  73. "AMDPLPA",
  74. "AML",
  75. "AMPAS",
  76. "ANTLR-PD",
  77. "Apache-1.0",
  78. "Apache-1.1",
  79. "Apache-2.0",
  80. "APAFML",
  81. "APL-1.0",
  82. "APSL-1.0",
  83. "APSL-1.1",
  84. "APSL-1.2",
  85. "APSL-2.0",
  86. "Artistic-1.0",
  87. "Artistic-1.0-cl8",
  88. "Artistic-1.0-Perl",
  89. "Artistic-2.0",
  90. "Bahyph",
  91. "Barr",
  92. "Beerware",
  93. "BitTorrent-1.0",
  94. "BitTorrent-1.1",
  95. "Borceux",
  96. "BSD-1-Clause",
  97. "BSD-2-Clause",
  98. "BSD-2-Clause-FreeBSD",
  99. "BSD-2-Clause-NetBSD",
  100. "BSD-2-Clause-Patent",
  101. "BSD-3-Clause",
  102. "BSD-3-Clause-Attribution",
  103. "BSD-3-Clause-Clear",
  104. "BSD-3-Clause-LBNL",
  105. "BSD-3-Clause-No-Nuclear-License",
  106. "BSD-3-Clause-No-Nuclear-License-2014",
  107. "BSD-3-Clause-No-Nuclear-Warranty",
  108. "BSD-4-Clause",
  109. "BSD-4-Clause-UC",
  110. "BSD-Protection",
  111. "BSD-Source-Code",
  112. "BSL-1.0",
  113. "bzip2-1.0.5",
  114. "bzip2-1.0.6",
  115. "Caldera",
  116. "CATOSL-1.1",
  117. "CC-BY-1.0",
  118. "CC-BY-2.0",
  119. "CC-BY-2.5",
  120. "CC-BY-3.0",
  121. "CC-BY-4.0",
  122. "CC-BY-NC-1.0",
  123. "CC-BY-NC-2.0",
  124. "CC-BY-NC-2.5",
  125. "CC-BY-NC-3.0",
  126. "CC-BY-NC-4.0",
  127. "CC-BY-NC-ND-1.0",
  128. "CC-BY-NC-ND-2.0",
  129. "CC-BY-NC-ND-2.5",
  130. "CC-BY-NC-ND-3.0",
  131. "CC-BY-NC-ND-4.0",
  132. "CC-BY-NC-SA-1.0",
  133. "CC-BY-NC-SA-2.0",
  134. "CC-BY-NC-SA-2.5",
  135. "CC-BY-NC-SA-3.0",
  136. "CC-BY-NC-SA-4.0",
  137. "CC-BY-ND-1.0",
  138. "CC-BY-ND-2.0",
  139. "CC-BY-ND-2.5",
  140. "CC-BY-ND-3.0",
  141. "CC-BY-ND-4.0",
  142. "CC-BY-SA-1.0",
  143. "CC-BY-SA-2.0",
  144. "CC-BY-SA-2.5",
  145. "CC-BY-SA-3.0",
  146. "CC-BY-SA-4.0",
  147. "CC0-1.0",
  148. "CDDL-1.0",
  149. "CDDL-1.1",
  150. "CDLA-Permissive-1.0",
  151. "CDLA-Sharing-1.0",
  152. "CECILL-1.0",
  153. "CECILL-1.1",
  154. "CECILL-2.0",
  155. "CECILL-2.1",
  156. "CECILL-B",
  157. "CECILL-C",
  158. "ClArtistic",
  159. "CNRI-Jython",
  160. "CNRI-Python",
  161. "CNRI-Python-GPL-Compatible",
  162. "Condor-1.1",
  163. "CPAL-1.0",
  164. "CPL-1.0",
  165. "CPOL-1.02",
  166. "Crossword",
  167. "CrystalStacker",
  168. "CUA-OPL-1.0",
  169. "Cube",
  170. "curl",
  171. "D-FSL-1.0",
  172. "diffmark",
  173. "DOC",
  174. "Dotseqn",
  175. "DSDP",
  176. "dvipdfm",
  177. "ECL-1.0",
  178. "ECL-2.0",
  179. "eCos-2.0",
  180. "EFL-1.0",
  181. "EFL-2.0",
  182. "eGenix",
  183. "Entessa",
  184. "EPL-1.0",
  185. "EPL-2.0",
  186. "ErlPL-1.1",
  187. "EUDatagrid",
  188. "EUPL-1.0",
  189. "EUPL-1.1",
  190. "EUPL-1.2",
  191. "Eurosym",
  192. "Fair",
  193. "Frameworx-1.0",
  194. "FreeImage",
  195. "FSFAP",
  196. "FSFUL",
  197. "FSFULLR",
  198. "FTL",
  199. "GFDL-1.1",
  200. "GFDL-1.1-only",
  201. "GFDL-1.1-or-later",
  202. "GFDL-1.2",
  203. "GFDL-1.2-only",
  204. "GFDL-1.2-or-later",
  205. "GFDL-1.3",
  206. "GFDL-1.3-only",
  207. "GFDL-1.3-or-later",
  208. "Giftware",
  209. "GL2PS",
  210. "Glide",
  211. "Glulxe",
  212. "gnuplot",
  213. "GPL-1.0",
  214. "GPL-1.0+",
  215. "GPL-1.0-only",
  216. "GPL-1.0-or-later",
  217. "GPL-2.0",
  218. "GPL-2.0+",
  219. "GPL-2.0-only",
  220. "GPL-2.0-or-later",
  221. "GPL-2.0-with-autoconf-exception",
  222. "GPL-2.0-with-bison-exception",
  223. "GPL-2.0-with-classpath-exception",
  224. "GPL-2.0-with-font-exception",
  225. "GPL-2.0-with-GCC-exception",
  226. "GPL-3.0",
  227. "GPL-3.0+",
  228. "GPL-3.0-only",
  229. "GPL-3.0-or-later",
  230. "GPL-3.0-with-autoconf-exception",
  231. "GPL-3.0-with-GCC-exception",
  232. "gSOAP-1.3b",
  233. "HaskellReport",
  234. "HPND",
  235. "IBM-pibs",
  236. "ICU",
  237. "IJG",
  238. "ImageMagick",
  239. "iMatix",
  240. "Imlib2",
  241. "Info-ZIP",
  242. "Intel",
  243. "Intel-ACPI",
  244. "Interbase-1.0",
  245. "IPA",
  246. "IPL-1.0",
  247. "ISC",
  248. "JasPer-2.0",
  249. "JSON",
  250. "LAL-1.2",
  251. "LAL-1.3",
  252. "Latex2e",
  253. "Leptonica",
  254. "LGPL-2.0",
  255. "LGPL-2.0+",
  256. "LGPL-2.0-only",
  257. "LGPL-2.0-or-later",
  258. "LGPL-2.1",
  259. "LGPL-2.1+",
  260. "LGPL-2.1-only",
  261. "LGPL-2.1-or-later",
  262. "LGPL-3.0",
  263. "LGPL-3.0+",
  264. "LGPL-3.0-only",
  265. "LGPL-3.0-or-later",
  266. "LGPLLR",
  267. "Libpng",
  268. "libtiff",
  269. "LiLiQ-P-1.1",
  270. "LiLiQ-R-1.1",
  271. "LiLiQ-Rplus-1.1",
  272. "LPL-1.0",
  273. "LPL-1.02",
  274. "LPPL-1.0",
  275. "LPPL-1.1",
  276. "LPPL-1.2",
  277. "LPPL-1.3a",
  278. "LPPL-1.3c",
  279. "MakeIndex",
  280. "MirOS",
  281. "MIT",
  282. "MIT-advertising",
  283. "MIT-CMU",
  284. "MIT-enna",
  285. "MIT-feh",
  286. "MITNFA",
  287. "Motosoto",
  288. "mpich2",
  289. "MPL-1.0",
  290. "MPL-1.1",
  291. "MPL-2.0",
  292. "MPL-2.0-no-copyleft-exception",
  293. "MS-PL",
  294. "MS-RL",
  295. "MTLL",
  296. "Multics",
  297. "Mup",
  298. "NASA-1.3",
  299. "Naumen",
  300. "NBPL-1.0",
  301. "NCSA",
  302. "Net-SNMP",
  303. "NetCDF",
  304. "Newsletr",
  305. "NGPL",
  306. "NLOD-1.0",
  307. "NLPL",
  308. "Nokia",
  309. "NOSL",
  310. "Noweb",
  311. "NPL-1.0",
  312. "NPL-1.1",
  313. "NPOSL-3.0",
  314. "NRL",
  315. "NTP",
  316. "Nunit",
  317. "OCCT-PL",
  318. "OCLC-2.0",
  319. "ODbL-1.0",
  320. "OFL-1.0",
  321. "OFL-1.1",
  322. "OGTSL",
  323. "OLDAP-1.1",
  324. "OLDAP-1.2",
  325. "OLDAP-1.3",
  326. "OLDAP-1.4",
  327. "OLDAP-2.0",
  328. "OLDAP-2.0.1",
  329. "OLDAP-2.1",
  330. "OLDAP-2.2",
  331. "OLDAP-2.2.1",
  332. "OLDAP-2.2.2",
  333. "OLDAP-2.3",
  334. "OLDAP-2.4",
  335. "OLDAP-2.5",
  336. "OLDAP-2.6",
  337. "OLDAP-2.7",
  338. "OLDAP-2.8",
  339. "OML",
  340. "OpenSSL",
  341. "OPL-1.0",
  342. "OSET-PL-2.1",
  343. "OSL-1.0",
  344. "OSL-1.1",
  345. "OSL-2.0",
  346. "OSL-2.1",
  347. "OSL-3.0",
  348. "PDDL-1.0",
  349. "PHP-3.0",
  350. "PHP-3.01",
  351. "Plexus",
  352. "PostgreSQL",
  353. "psfrag",
  354. "psutils",
  355. "Python-2.0",
  356. "Qhull",
  357. "QPL-1.0",
  358. "Rdisc",
  359. "RHeCos-1.1",
  360. "RPL-1.1",
  361. "RPL-1.5",
  362. "RPSL-1.0",
  363. "RSA-MD",
  364. "RSCPL",
  365. "Ruby",
  366. "SAX-PD",
  367. "Saxpath",
  368. "SCEA",
  369. "Sendmail",
  370. "SGI-B-1.0",
  371. "SGI-B-1.1",
  372. "SGI-B-2.0",
  373. "SimPL-2.0",
  374. "SISSL",
  375. "SISSL-1.2",
  376. "Sleepycat",
  377. "SMLNJ",
  378. "SMPPL",
  379. "SNIA",
  380. "Spencer-86",
  381. "Spencer-94",
  382. "Spencer-99",
  383. "SPL-1.0",
  384. "StandardML-NJ",
  385. "SugarCRM-1.1.3",
  386. "SWL",
  387. "TCL",
  388. "TCP-wrappers",
  389. "TMate",
  390. "TORQUE-1.1",
  391. "TOSL",
  392. "Unicode-DFS-2015",
  393. "Unicode-DFS-2016",
  394. "Unicode-TOU",
  395. "Unlicense",
  396. "UPL-1.0",
  397. "Vim",
  398. "VOSTROM",
  399. "VSL-1.0",
  400. "W3C",
  401. "W3C-19980720",
  402. "W3C-20150513",
  403. "Watcom-1.0",
  404. "Wsuipa",
  405. "WTFPL",
  406. "wxWindows",
  407. "X11",
  408. "Xerox",
  409. "XFree86-1.1",
  410. "xinetd",
  411. "Xnet",
  412. "xpp",
  413. "XSkat",
  414. "YPL-1.0",
  415. "YPL-1.1",
  416. "Zed",
  417. "Zend-2.0",
  418. "Zimbra-1.3",
  419. "Zimbra-1.4",
  420. "Zlib",
  421. "zlib-acknowledgement",
  422. "ZPL-1.1",
  423. "ZPL-2.0",
  424. "ZPL-2.1"
  425. ]
  426. },
  427. "requires": {
  428. "type": "object",
  429. "description": "Indicates what versions of MediaWiki core are required. This syntax may be extended in the future, for example to check dependencies between other extensions.",
  430. "properties": {
  431. "MediaWiki": {
  432. "type": "string",
  433. "description": "Version constraint string against MediaWiki core."
  434. }
  435. }
  436. },
  437. "ResourceFileModulePaths": {
  438. "type": "object",
  439. "description": "Default paths to use for all ResourceLoader file modules",
  440. "additionalProperties": false,
  441. "properties": {
  442. "localBasePath": {
  443. "type": "string",
  444. "description": "Base path to prepend to all local paths, relative to current directory"
  445. },
  446. "remoteExtPath": {
  447. "type": "string",
  448. "description": "Base path to prepend to all remote paths, relative to $wgExtensionAssetsPath"
  449. },
  450. "remoteSkinPath": {
  451. "type": "string",
  452. "description": "Base path to prepend to all remote paths, relative to $wgStylePath"
  453. }
  454. }
  455. },
  456. "ResourceModules": {
  457. "type": "object",
  458. "description": "ResourceLoader modules to register",
  459. "patternProperties": {
  460. "^[a-zA-Z0-9-\\.]+$": {
  461. "type": "object",
  462. "anyOf": [
  463. {
  464. "description": "A ResourceLoaderFileModule definition",
  465. "additionalProperties": false,
  466. "properties": {
  467. "localBasePath": {
  468. "type": "string",
  469. "description": "Base path to prepend to all local paths in $options. Defaults to $IP"
  470. },
  471. "remoteBasePath": {
  472. "type": "string",
  473. "description": "Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath"
  474. },
  475. "remoteExtPath": {
  476. "type": "string",
  477. "description": "Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath"
  478. },
  479. "skipFunction": {
  480. "type": "string",
  481. "description": "Path to a file containing a JavaScript \"skip function\", if desired."
  482. },
  483. "scripts": {
  484. "type": ["string", "array"],
  485. "description": "Scripts to always include (array of file paths)",
  486. "items": {
  487. "type": "string"
  488. }
  489. },
  490. "languageScripts": {
  491. "type": "object",
  492. "description": "Scripts to include in specific language contexts (mapping of language code to file path(s))",
  493. "patternProperties": {
  494. "^[a-zA-Z0-9-]{2,}$": {
  495. "type": [
  496. "string",
  497. "array"
  498. ],
  499. "items": {
  500. "type": "string"
  501. }
  502. }
  503. }
  504. },
  505. "skinScripts": {
  506. "type": "object",
  507. "description": "Scripts to include in specific skin contexts (mapping of skin name to script(s)",
  508. "patternProperties": {
  509. ".+": {
  510. "type": [
  511. "string",
  512. "array"
  513. ],
  514. "items": {
  515. "type": "string"
  516. }
  517. }
  518. }
  519. },
  520. "debugScripts": {
  521. "type": ["string", "array"],
  522. "description": "Scripts to include in debug contexts",
  523. "items": {
  524. "type": "string"
  525. }
  526. },
  527. "loaderScripts": {
  528. "type": ["string", "array"],
  529. "description": "Scripts to include in the startup module",
  530. "items": {
  531. "type": "string"
  532. }
  533. },
  534. "dependencies": {
  535. "type": ["string", "array"],
  536. "description": "Modules which must be loaded before this module",
  537. "items": {
  538. "type": "string"
  539. }
  540. },
  541. "styles": {
  542. "type": ["string", "array", "object"],
  543. "description": "Styles to always load",
  544. "items": {
  545. "type": "string"
  546. }
  547. },
  548. "skinStyles": {
  549. "type": "object",
  550. "description": "Styles to include in specific skin contexts (mapping of skin name to style(s))",
  551. "patternProperties": {
  552. ".+": {
  553. "type": [
  554. "string",
  555. "array"
  556. ],
  557. "items": {
  558. "type": "string"
  559. }
  560. }
  561. }
  562. },
  563. "messages": {
  564. "type": ["string", "array"],
  565. "description": "Messages to always load",
  566. "items": {
  567. "type": "string"
  568. }
  569. },
  570. "group": {
  571. "type": "string",
  572. "description": "Group which this module should be loaded together with"
  573. },
  574. "position": {
  575. "type": "string",
  576. "description": "Position on the page to load this module at",
  577. "enum": [
  578. "bottom",
  579. "top"
  580. ]
  581. },
  582. "templates": {
  583. "type": ["object", "array"],
  584. "description": "Templates to be loaded for client-side usage"
  585. },
  586. "targets": {
  587. "type": ["string", "array"],
  588. "description": "ResourceLoader target the module can run on",
  589. "items": {
  590. "type": "string"
  591. }
  592. }
  593. }
  594. },
  595. {
  596. "description": "A ResourceLoaderImageModule definition",
  597. "additionalProperties": false,
  598. "properties": {
  599. "class": {
  600. "enum": ["ResourceLoaderImageModule"]
  601. },
  602. "data": {
  603. "type": "string"
  604. },
  605. "prefix": {
  606. "type": "string"
  607. },
  608. "selector": {
  609. "type": "string"
  610. },
  611. "selectorWithoutVariant": {
  612. "type": "string"
  613. },
  614. "selectorWithVariant": {
  615. "type": "string"
  616. },
  617. "variants": {
  618. "type": "object"
  619. },
  620. "images": {
  621. "type": "object"
  622. },
  623. "position": {
  624. "enum": [
  625. "top",
  626. "bottom"
  627. ]
  628. }
  629. }
  630. },
  631. {
  632. "description": "An arbitrary ResourceLoaderModule definition",
  633. "properties": {
  634. "class": {
  635. "type": "string",
  636. "pattern": "^((?!ResourceLoader(File|Image)Module).)*$"
  637. }
  638. },
  639. "required": ["class"]
  640. }
  641. ]
  642. }
  643. }
  644. },
  645. "ResourceModuleSkinStyles": {
  646. "type": "object",
  647. "description": "ResourceLoader modules for custom skin styles"
  648. },
  649. "ResourceLoaderSources": {
  650. "type": "object",
  651. "description": "ResourceLoader sources to register"
  652. },
  653. "ResourceLoaderLESSVars": {
  654. "type": "object",
  655. "description": "ResourceLoader LESS variables"
  656. },
  657. "ResourceLoaderLESSImportPaths": {
  658. "type": "object",
  659. "description": "ResourceLoader import paths"
  660. },
  661. "ConfigRegistry": {
  662. "type": "object",
  663. "description": "Registry of factory functions to create Config objects"
  664. },
  665. "SessionProviders": {
  666. "type": "object",
  667. "description": "Session providers"
  668. },
  669. "AuthManagerAutoConfig": {
  670. "type": "object",
  671. "description": "AuthManager auto-configuration",
  672. "additionalProperties": false,
  673. "properties": {
  674. "preauth": {
  675. "type": "object",
  676. "description": "Pre-authentication providers"
  677. },
  678. "primaryauth": {
  679. "type": "object",
  680. "description": "Primary authentication providers"
  681. },
  682. "secondaryauth": {
  683. "type": "object",
  684. "description": "Secondary authentication providers"
  685. }
  686. }
  687. },
  688. "CentralIdLookupProviders": {
  689. "type": "object",
  690. "description": "Central ID lookup providers"
  691. },
  692. "namespaces": {
  693. "type": "array",
  694. "description": "Method to add extra namespaces",
  695. "items": {
  696. "type": "object",
  697. "properties": {
  698. "id": {
  699. "type": "integer"
  700. },
  701. "constant": {
  702. "type": "string"
  703. },
  704. "name": {
  705. "type": "string"
  706. },
  707. "gender": {
  708. "type": "object",
  709. "properties": {
  710. "male": {
  711. "type": "string"
  712. },
  713. "female": {
  714. "type": "string"
  715. }
  716. }
  717. },
  718. "subpages": {
  719. "type": "boolean",
  720. "default": false
  721. },
  722. "content": {
  723. "type": "boolean",
  724. "default": false
  725. },
  726. "defaultcontentmodel": {
  727. "type": "string"
  728. },
  729. "protection": {
  730. "type": ["string", "array"],
  731. "description": "Userright(s) required to edit in this namespace"
  732. },
  733. "capitallinkoverride": {
  734. "type": "boolean",
  735. "description": "Set $wgCapitalLinks on a per-namespace basis"
  736. },
  737. "conditional": {
  738. "type": "boolean",
  739. "description": "Whether the namespace is conditional upon configuration and should not be registered (requires separate registration via a hook)",
  740. "default": false
  741. }
  742. },
  743. "required": ["id", "constant", "name"]
  744. }
  745. },
  746. "TrackingCategories": {
  747. "type": "array",
  748. "description": "Tracking category message keys",
  749. "items": {
  750. "type": "string"
  751. }
  752. },
  753. "DefaultUserOptions": {
  754. "type": "object",
  755. "description": "Default values of user options"
  756. },
  757. "HiddenPrefs": {
  758. "type": "array",
  759. "description": "Preferences users cannot set",
  760. "items": {
  761. "type": "string"
  762. }
  763. },
  764. "GroupPermissions": {
  765. "type": "object",
  766. "description": "Default permissions to give to user groups",
  767. "patternProperties": {
  768. "^[a-z]+$": {
  769. "type": "object",
  770. "patternProperties": {
  771. "^[a-z]+$": {
  772. "type": "boolean"
  773. }
  774. }
  775. }
  776. }
  777. },
  778. "RevokePermissions": {
  779. "type": "object",
  780. "description": "Default permissions to revoke from user groups",
  781. "patternProperties": {
  782. "^[a-z]+$": {
  783. "type": "object",
  784. "patternProperties": {
  785. "^[a-z]+$": {
  786. "type": "boolean"
  787. }
  788. }
  789. }
  790. }
  791. },
  792. "ImplicitGroups": {
  793. "type": "array",
  794. "description": "Implicit groups"
  795. },
  796. "GroupsAddToSelf": {
  797. "type": "object",
  798. "description": "Groups a user can add to themselves"
  799. },
  800. "GroupsRemoveFromSelf": {
  801. "type": "object",
  802. "description": "Groups a user can remove from themselves"
  803. },
  804. "AddGroups": {
  805. "type": "object",
  806. "description": "Groups a user can add to users"
  807. },
  808. "RemoveGroups": {
  809. "type": "object",
  810. "description": "Groups a user can remove from users"
  811. },
  812. "AvailableRights": {
  813. "type": "array",
  814. "description": "User rights added by the extension",
  815. "items": {
  816. "type": "string"
  817. }
  818. },
  819. "ContentHandlers": {
  820. "type": "object",
  821. "description": "Mapping of model ID to class name",
  822. "patternProperties": {
  823. "^[A-Za-z]+$": {
  824. "type": "string"
  825. }
  826. }
  827. },
  828. "RateLimits": {
  829. "type": "object",
  830. "description": "Rate limits"
  831. },
  832. "RecentChangesFlags": {
  833. "type": "object",
  834. "description": "Flags (letter symbols) shown on RecentChanges pages"
  835. },
  836. "MediaHandlers": {
  837. "type": "object",
  838. "description": "Plugins for media file type handling. Each entry in the array maps a MIME type to a PHP class name."
  839. },
  840. "ExtensionFunctions": {
  841. "type": [
  842. "array",
  843. "string"
  844. ],
  845. "description": "Function to call after setup has finished",
  846. "items": {
  847. "type": "string"
  848. }
  849. },
  850. "ExtensionMessagesFiles": {
  851. "type": "object",
  852. "description": "File paths containing PHP internationalization data"
  853. },
  854. "MessagesDirs": {
  855. "type": "object",
  856. "description": "Directory paths containing JSON internationalization data"
  857. },
  858. "ExtensionEntryPointListFiles": {
  859. "type": "object"
  860. },
  861. "SpecialPages": {
  862. "type": "object",
  863. "description": "SpecialPages implemented in this extension (mapping of page name to class name)"
  864. },
  865. "AutoloadClasses": {
  866. "type": "object"
  867. },
  868. "Hooks": {
  869. "type": [ "string", "object" ],
  870. "description": "Hooks this extension uses (mapping of hook name to callback)"
  871. },
  872. "JobClasses": {
  873. "type": "object",
  874. "description": "Job types this extension implements (mapping of job type to class name)"
  875. },
  876. "LogTypes": {
  877. "type": "array",
  878. "description": "List of new log types this extension uses"
  879. },
  880. "LogRestrictions": {
  881. "type": "object"
  882. },
  883. "FilterLogTypes": {
  884. "type": "object"
  885. },
  886. "ActionFilteredLogs": {
  887. "type": "object",
  888. "description": "List of log types which can be filtered by log actions",
  889. "patternProperties": {
  890. "^[a-z-]+$": {
  891. "type": "object",
  892. "patternProperties": {
  893. "^[a-z-]+$": {
  894. "type": "array",
  895. "items": {
  896. "type": "string"
  897. }
  898. }
  899. }
  900. }
  901. }
  902. },
  903. "LogNames": {
  904. "type": "object"
  905. },
  906. "LogHeaders": {
  907. "type": "object"
  908. },
  909. "LogActions": {
  910. "type": "object"
  911. },
  912. "LogActionsHandlers": {
  913. "type": "object"
  914. },
  915. "Actions": {
  916. "type": "object"
  917. },
  918. "APIModules": {
  919. "type": "object"
  920. },
  921. "APIFormatModules": {
  922. "type": "object"
  923. },
  924. "APIMetaModules": {
  925. "type": "object"
  926. },
  927. "APIPropModules": {
  928. "type": "object"
  929. },
  930. "APIListModules": {
  931. "type": "object"
  932. },
  933. "ValidSkinNames": {
  934. "type": "object"
  935. },
  936. "FeedClasses": {
  937. "type": "object",
  938. "description": "Available feeds objects"
  939. },
  940. "SkinOOUIThemes": {
  941. "type": "object"
  942. },
  943. "callback": {
  944. "type": [
  945. "array",
  946. "string"
  947. ],
  948. "description": "A function to be called right after MediaWiki processes this file"
  949. },
  950. "config": {
  951. "type": "object",
  952. "description": "Configuration options for this extension",
  953. "properties": {
  954. "_prefix": {
  955. "type": "string",
  956. "default": "wg",
  957. "description": "Prefix to put in front of configuration settings when exporting them to $GLOBALS"
  958. }
  959. },
  960. "patternProperties": {
  961. "^[a-zA-Z_\u007f-\u00ff][a-zA-Z0-9_\u007f-\u00ff]*$": {
  962. "properties": {
  963. "_merge_strategy": {
  964. "type": "string",
  965. "enum": [
  966. "array_merge_recursive",
  967. "array_plus_2d",
  968. "array_plus",
  969. "array_merge"
  970. ],
  971. "default": "array_merge"
  972. }
  973. }
  974. }
  975. }
  976. },
  977. "ParserTestFiles": {
  978. "type": "array",
  979. "description": "Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
  980. },
  981. "load_composer_autoloader": {
  982. "type": "boolean",
  983. "description": "Load the composer autoloader for this extension, if one is present"
  984. }
  985. }
  986. }