registration: Allow ActionFilteredLogs to be modified by extensions
[lhc/web/wiklou.git] / docs / extension.schema.json
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 "AFL-1.1",
57 "AFL-1.2",
58 "AFL-2.0",
59 "AFL-2.1",
60 "AFL-3.0",
61 "APL-1.0",
62 "Aladdin",
63 "ANTLR-PD",
64 "Apache-1.0",
65 "Apache-1.1",
66 "Apache-2.0",
67 "APSL-1.0",
68 "APSL-1.1",
69 "APSL-1.2",
70 "APSL-2.0",
71 "Artistic-1.0",
72 "Artistic-1.0-cl8",
73 "Artistic-1.0-Perl",
74 "Artistic-2.0",
75 "AAL",
76 "BitTorrent-1.0",
77 "BitTorrent-1.1",
78 "BSL-1.0",
79 "BSD-2-Clause",
80 "BSD-2-Clause-FreeBSD",
81 "BSD-2-Clause-NetBSD",
82 "BSD-3-Clause",
83 "BSD-3-Clause-Clear",
84 "BSD-4-Clause",
85 "BSD-4-Clause-UC",
86 "CECILL-1.0",
87 "CECILL-1.1",
88 "CECILL-2.0",
89 "CECILL-B",
90 "CECILL-C",
91 "ClArtistic",
92 "CNRI-Python",
93 "CNRI-Python-GPL-Compatible",
94 "CPOL-1.02",
95 "CDDL-1.0",
96 "CDDL-1.1",
97 "CPAL-1.0",
98 "CPL-1.0",
99 "CATOSL-1.1",
100 "Condor-1.1",
101 "CC-BY-1.0",
102 "CC-BY-2.0",
103 "CC-BY-2.5",
104 "CC-BY-3.0",
105 "CC-BY-ND-1.0",
106 "CC-BY-ND-2.0",
107 "CC-BY-ND-2.5",
108 "CC-BY-ND-3.0",
109 "CC-BY-NC-1.0",
110 "CC-BY-NC-2.0",
111 "CC-BY-NC-2.5",
112 "CC-BY-NC-3.0",
113 "CC-BY-NC-ND-1.0",
114 "CC-BY-NC-ND-2.0",
115 "CC-BY-NC-ND-2.5",
116 "CC-BY-NC-ND-3.0",
117 "CC-BY-NC-SA-1.0",
118 "CC-BY-NC-SA-2.0",
119 "CC-BY-NC-SA-2.5",
120 "CC-BY-NC-SA-3.0",
121 "CC-BY-SA-1.0",
122 "CC-BY-SA-2.0",
123 "CC-BY-SA-2.5",
124 "CC-BY-SA-3.0",
125 "CC0-1.0",
126 "CUA-OPL-1.0",
127 "D-FSL-1.0",
128 "WTFPL",
129 "EPL-1.0",
130 "eCos-2.0",
131 "ECL-1.0",
132 "ECL-2.0",
133 "EFL-1.0",
134 "EFL-2.0",
135 "Entessa",
136 "ErlPL-1.1",
137 "EUDatagrid",
138 "EUPL-1.0",
139 "EUPL-1.1",
140 "Fair",
141 "Frameworx-1.0",
142 "FTL",
143 "AGPL-1.0",
144 "AGPL-3.0",
145 "GFDL-1.1",
146 "GFDL-1.2",
147 "GFDL-1.3",
148 "GPL-1.0",
149 "GPL-1.0+",
150 "GPL-2.0",
151 "GPL-2.0+",
152 "GPL-2.0-with-autoconf-exception",
153 "GPL-2.0-with-bison-exception",
154 "GPL-2.0-with-classpath-exception",
155 "GPL-2.0-with-font-exception",
156 "GPL-2.0-with-GCC-exception",
157 "GPL-3.0",
158 "GPL-3.0+",
159 "GPL-3.0-with-autoconf-exception",
160 "GPL-3.0-with-GCC-exception",
161 "LGPL-2.1",
162 "LGPL-2.1+",
163 "LGPL-3.0",
164 "LGPL-3.0+",
165 "LGPL-2.0",
166 "LGPL-2.0+",
167 "gSOAP-1.3b",
168 "HPND",
169 "IBM-pibs",
170 "IPL-1.0",
171 "Imlib2",
172 "IJG",
173 "Intel",
174 "IPA",
175 "ISC",
176 "JSON",
177 "LPPL-1.3a",
178 "LPPL-1.0",
179 "LPPL-1.1",
180 "LPPL-1.2",
181 "LPPL-1.3c",
182 "Libpng",
183 "LPL-1.02",
184 "LPL-1.0",
185 "MS-PL",
186 "MS-RL",
187 "MirOS",
188 "MIT",
189 "Motosoto",
190 "MPL-1.0",
191 "MPL-1.1",
192 "MPL-2.0",
193 "MPL-2.0-no-copyleft-exception",
194 "Multics",
195 "NASA-1.3",
196 "Naumen",
197 "NBPL-1.0",
198 "NGPL",
199 "NOSL",
200 "NPL-1.0",
201 "NPL-1.1",
202 "Nokia",
203 "NPOSL-3.0",
204 "NTP",
205 "OCLC-2.0",
206 "ODbL-1.0",
207 "PDDL-1.0",
208 "OGTSL",
209 "OLDAP-2.2.2",
210 "OLDAP-1.1",
211 "OLDAP-1.2",
212 "OLDAP-1.3",
213 "OLDAP-1.4",
214 "OLDAP-2.0",
215 "OLDAP-2.0.1",
216 "OLDAP-2.1",
217 "OLDAP-2.2",
218 "OLDAP-2.2.1",
219 "OLDAP-2.3",
220 "OLDAP-2.4",
221 "OLDAP-2.5",
222 "OLDAP-2.6",
223 "OLDAP-2.7",
224 "OPL-1.0",
225 "OSL-1.0",
226 "OSL-2.0",
227 "OSL-2.1",
228 "OSL-3.0",
229 "OLDAP-2.8",
230 "OpenSSL",
231 "PHP-3.0",
232 "PHP-3.01",
233 "PostgreSQL",
234 "Python-2.0",
235 "QPL-1.0",
236 "RPSL-1.0",
237 "RPL-1.1",
238 "RPL-1.5",
239 "RHeCos-1.1",
240 "RSCPL",
241 "Ruby",
242 "SAX-PD",
243 "SGI-B-1.0",
244 "SGI-B-1.1",
245 "SGI-B-2.0",
246 "OFL-1.0",
247 "OFL-1.1",
248 "SimPL-2.0",
249 "Sleepycat",
250 "SMLNJ",
251 "SugarCRM-1.1.3",
252 "SISSL",
253 "SISSL-1.2",
254 "SPL-1.0",
255 "Watcom-1.0",
256 "NCSA",
257 "VSL-1.0",
258 "W3C",
259 "WXwindows",
260 "Xnet",
261 "X11",
262 "XFree86-1.1",
263 "YPL-1.0",
264 "YPL-1.1",
265 "Zimbra-1.3",
266 "Zlib",
267 "ZPL-1.1",
268 "ZPL-2.0",
269 "ZPL-2.1",
270 "Unlicense"
271 ]
272 },
273 "requires": {
274 "type": "object",
275 "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.",
276 "properties": {
277 "MediaWiki": {
278 "type": "string",
279 "description": "Version constraint string against MediaWiki core."
280 }
281 }
282 },
283 "ResourceFileModulePaths": {
284 "type": "object",
285 "description": "Default paths to use for all ResourceLoader file modules",
286 "additionalProperties": false,
287 "properties": {
288 "localBasePath": {
289 "type": "string",
290 "description": "Base path to prepend to all local paths, relative to current directory"
291 },
292 "remoteExtPath": {
293 "type": "string",
294 "description": "Base path to prepend to all remote paths, relative to $wgExtensionAssetsPath"
295 },
296 "remoteSkinPath": {
297 "type": "string",
298 "description": "Base path to prepend to all remote paths, relative to $wgStylePath"
299 }
300 }
301 },
302 "ResourceModules": {
303 "type": "object",
304 "description": "ResourceLoader modules to register",
305 "patternProperties": {
306 "^[a-zA-Z0-9-\\.]+$": {
307 "type": "object",
308 "anyOf": [
309 {
310 "description": "A ResourceLoaderFileModule definition",
311 "additionalProperties": false,
312 "properties": {
313 "localBasePath": {
314 "type": "string",
315 "description": "Base path to prepend to all local paths in $options. Defaults to $IP"
316 },
317 "remoteBasePath": {
318 "type": "string",
319 "description": "Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath"
320 },
321 "remoteExtPath": {
322 "type": "string",
323 "description": "Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath"
324 },
325 "skipFunction": {
326 "type": "string",
327 "description": "Modules that provide fallback functionality can provide a \"skip function\". This function, if provided, will be passed along to the module registry on the client. When this module is loaded (either directly or as a dependency of another module), then this function is executed first. If the function returns true, the module will instantly be considered \"ready\" without requesting the associated module resources. The value returned here must be valid javascript for execution in a private function. It must not contain the \"function () {\" and \"}\" wrapper though."
328 },
329 "scripts": {
330 "type": ["string", "array"],
331 "description": "Scripts to always include (array of file paths)",
332 "items": {
333 "type": "string"
334 }
335 },
336 "languageScripts": {
337 "type": "object",
338 "description": "Scripts to include in specific language contexts (mapping of language code to file path(s))",
339 "patternProperties": {
340 "^[a-zA-Z0-9-]{2,}$": {
341 "type": [
342 "string",
343 "array"
344 ],
345 "items": {
346 "type": "string"
347 }
348 }
349 }
350 },
351 "skinScripts": {
352 "type": "object",
353 "description": "Scripts to include in specific skin contexts (mapping of skin name to script(s)",
354 "patternProperties": {
355 ".+": {
356 "type": [
357 "string",
358 "array"
359 ],
360 "items": {
361 "type": "string"
362 }
363 }
364 }
365 },
366 "debugScripts": {
367 "type": ["string", "array"],
368 "description": "Scripts to include in debug contexts",
369 "items": {
370 "type": "string"
371 }
372 },
373 "loaderScripts": {
374 "type": ["string", "array"],
375 "description": "Scripts to include in the startup module",
376 "items": {
377 "type": "string"
378 }
379 },
380 "dependencies": {
381 "type": ["string", "array"],
382 "description": "Modules which must be loaded before this module",
383 "items": {
384 "type": "string"
385 }
386 },
387 "styles": {
388 "type": ["string", "array", "object"],
389 "description": "Styles to always load",
390 "items": {
391 "type": "string"
392 }
393 },
394 "skinStyles": {
395 "type": "object",
396 "description": "Styles to include in specific skin contexts (mapping of skin name to style(s))",
397 "patternProperties": {
398 ".+": {
399 "type": [
400 "string",
401 "array"
402 ],
403 "items": {
404 "type": "string"
405 }
406 }
407 }
408 },
409 "messages": {
410 "type": ["string", "array"],
411 "description": "Messages to always load",
412 "items": {
413 "type": "string"
414 }
415 },
416 "group": {
417 "type": "string",
418 "description": "Group which this module should be loaded together with"
419 },
420 "position": {
421 "type": "string",
422 "description": "Position on the page to load this module at",
423 "enum": [
424 "bottom",
425 "top"
426 ]
427 },
428 "templates": {
429 "type": ["object", "array"],
430 "description": "Templates to be loaded for client-side usage"
431 },
432 "targets": {
433 "type": ["string", "array"],
434 "description": "ResourceLoader target the module can run on",
435 "items": {
436 "type": "string"
437 }
438 }
439 }
440 },
441 {
442 "description": "A ResourceLoaderImageModule definition",
443 "additionalProperties": false,
444 "properties": {
445 "class": {
446 "enum": ["ResourceLoaderImageModule"]
447 },
448 "data": {
449 "type": "string"
450 },
451 "prefix": {
452 "type": "string"
453 },
454 "selector": {
455 "type": "string"
456 },
457 "selectorWithoutVariant": {
458 "type": "string"
459 },
460 "selectorWithVariant": {
461 "type": "string"
462 },
463 "variants": {
464 "type": "object"
465 },
466 "images": {
467 "type": "object"
468 },
469 "position": {
470 "enum": [
471 "top",
472 "bottom"
473 ]
474 }
475 }
476 },
477 {
478 "description": "An arbitrary ResourceLoaderModule definition",
479 "properties": {
480 "class": {
481 "type": "string",
482 "pattern": "^((?!ResourceLoader(File|Image)Module).)*$"
483 }
484 },
485 "required": ["class"]
486 }
487 ]
488 }
489 }
490 },
491 "ResourceModuleSkinStyles": {
492 "type": "object",
493 "description": "ResourceLoader modules for custom skin styles"
494 },
495 "ResourceLoaderSources": {
496 "type": "object",
497 "description": "ResourceLoader sources to register"
498 },
499 "ResourceLoaderLESSVars": {
500 "type": "object",
501 "description": "ResourceLoader LESS variables"
502 },
503 "ResourceLoaderLESSImportPaths": {
504 "type": "object",
505 "description": "ResourceLoader import paths"
506 },
507 "ConfigRegistry": {
508 "type": "object",
509 "description": "Registry of factory functions to create Config objects"
510 },
511 "CentralIdLookupProviders": {
512 "type": "object",
513 "description": "Central ID lookup providers"
514 },
515 "namespaces": {
516 "type": "array",
517 "description": "Method to add extra namespaces",
518 "items": {
519 "type": "object",
520 "properties": {
521 "id": {
522 "type": "integer"
523 },
524 "constant": {
525 "type": "string"
526 },
527 "name": {
528 "type": "string"
529 },
530 "gender": {
531 "type": "object",
532 "properties": {
533 "male": {
534 "type": "string"
535 },
536 "female": {
537 "type": "string"
538 }
539 }
540 },
541 "subpages": {
542 "type": "boolean",
543 "default": false
544 },
545 "content": {
546 "type": "boolean",
547 "default": false
548 },
549 "defaultcontentmodel": {
550 "type": "string"
551 },
552 "protection": {
553 "type": ["string", "array"],
554 "description": "Userright(s) required to edit in this namespace"
555 },
556 "capitallinkoverride": {
557 "type": "boolean",
558 "description": "Set $wgCapitalLinks on a per-namespace basis"
559 }
560 },
561 "required": ["id", "constant", "name"]
562 }
563 },
564 "TrackingCategories": {
565 "type": "array",
566 "description": "Tracking category message keys"
567 },
568 "DefaultUserOptions": {
569 "type": "object",
570 "description": "Default values of user options"
571 },
572 "HiddenPrefs": {
573 "type": "array",
574 "description": "Preferences users cannot set"
575 },
576 "GroupPermissions": {
577 "type": "object",
578 "description": "Default permissions to give to user groups"
579 },
580 "RevokePermissions": {
581 "type": "object",
582 "description": "Default permissions to revoke from user groups"
583 },
584 "ImplicitGroups": {
585 "type": "array",
586 "description": "Implicit groups"
587 },
588 "GroupsAddToSelf": {
589 "type": "object",
590 "description": "Groups a user can add to themselves"
591 },
592 "GroupsRemoveFromSelf": {
593 "type": "object",
594 "description": "Groups a user can remove from themselves"
595 },
596 "AddGroups": {
597 "type": "object",
598 "description": "Groups a user can add to users"
599 },
600 "RemoveGroups": {
601 "type": "object",
602 "description": "Groups a user can remove from users"
603 },
604 "AvailableRights": {
605 "type": "array",
606 "description": "User rights added by the extension"
607 },
608 "ContentHandlers": {
609 "type": "object",
610 "description": "Mapping of model ID to class name"
611 },
612 "RateLimits": {
613 "type": "object",
614 "description": "Rate limits"
615 },
616 "RecentChangesFlags": {
617 "type": "object",
618 "description": "Flags (letter symbols) shown on RecentChanges pages"
619 },
620 "MediaHandlers": {
621 "type": "object",
622 "description": "Plugins for media file type handling. Each entry in the array maps a MIME type to a PHP class name."
623 },
624 "ExtensionFunctions": {
625 "type": [
626 "array",
627 "string"
628 ],
629 "description": "Function to call after setup has finished"
630 },
631 "ExtensionMessagesFiles": {
632 "type": "object",
633 "description": "File paths containing PHP internationalization data"
634 },
635 "MessagesDirs": {
636 "type": "object",
637 "description": "Directory paths containing JSON internationalization data"
638 },
639 "ExtensionEntryPointListFiles": {
640 "type": "object"
641 },
642 "SpecialPages": {
643 "type": "object",
644 "description": "SpecialPages implemented in this extension (mapping of page name to class name)"
645 },
646 "AutoloadClasses": {
647 "type": "object"
648 },
649 "Hooks": {
650 "type": "object",
651 "description": "Hooks this extension uses (mapping of hook name to callback)"
652 },
653 "JobClasses": {
654 "type": "object",
655 "description": "Job types this extension implements (mapping of job type to class name)"
656 },
657 "LogTypes": {
658 "type": "array",
659 "description": "List of new log types this extension uses"
660 },
661 "LogRestrictions": {
662 "type": "object"
663 },
664 "FilterLogTypes": {
665 "type": "object"
666 },
667 "ActionFilteredLogs": {
668 "type": "object",
669 "description": "List of log types which can be filtered by log actions",
670 "patternProperties": {
671 "^[a-z-]+$": {
672 "type": "object",
673 "patternProperties": {
674 "^[a-z-]+$": {
675 "type": "array",
676 "items": {
677 "type": "string"
678 }
679 }
680 }
681 }
682 }
683 },
684 "LogNames": {
685 "type": "object"
686 },
687 "LogHeaders": {
688 "type": "object"
689 },
690 "LogActions": {
691 "type": "object"
692 },
693 "LogActionsHandlers": {
694 "type": "object"
695 },
696 "Actions": {
697 "type": "object"
698 },
699 "APIModules": {
700 "type": "object"
701 },
702 "APIFormatModules": {
703 "type": "object"
704 },
705 "APIMetaModules": {
706 "type": "object"
707 },
708 "APIPropModules": {
709 "type": "object"
710 },
711 "APIListModules": {
712 "type": "object"
713 },
714 "ValidSkinNames": {
715 "type": "object"
716 },
717 "FeedClasses": {
718 "type": "object",
719 "description": "Available feeds objects"
720 },
721 "SkinOOUIThemes": {
722 "type": "object"
723 },
724 "callback": {
725 "type": [
726 "array",
727 "string"
728 ],
729 "description": "A function to be called right after MediaWiki processes this file"
730 },
731 "config": {
732 "type": "object",
733 "description": "Configuration options for this extension",
734 "properties": {
735 "_prefix": {
736 "type": "string",
737 "default": "wg",
738 "description": "Prefix to put in front of configuration settings when exporting them to $GLOBALS"
739 }
740 },
741 "patternProperties": {
742 "^[a-zA-Z_\u007f-\u00ff][a-zA-Z0-9_\u007f-\u00ff]*$": {
743 "properties": {
744 "_merge_strategy": {
745 "type": "string",
746 "enum": [
747 "array_merge_recursive",
748 "array_plus_2d",
749 "array_plus",
750 "array_merge"
751 ],
752 "default": "array_merge"
753 }
754 }
755 }
756 }
757 },
758 "ParserTestFiles": {
759 "type": "array",
760 "description": "Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
761 },
762 "load_composer_autoloader": {
763 "type": "boolean",
764 "description": "Load the composer autoloader for this extension, if one is present"
765 }
766 }
767 }