mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Gadgets
synced 2024-11-27 16:50:00 +00:00
d2a37f5f69
The reason for this hook is not the validation itself, because that is already done by `GadgetDefinitionContent->isValid` which is part of the core Content interface, already enforced by ContentHandler. Instead, the hook was here to provide the custom interface message GadgetDefinitionValidator, because the core Content interface is limited to boolean isValid(), which provides a very generic error message. However, nowadays ContentHandler exposes this mechanism directly such that we can directly attach a custom message to it without needing to wait for the stack to reach the EditPage and then override it after the fact from a global hook. Also: * Simplify validation logic towards "is" checks with only an expected description. * Move schema.json file to top-level file. It has been unused for as long as it has been in the repo, despite appearing (due to its placement) to be used as part of the source. It was added, I believe, with the intent to be used by the validator, but it isn't. It also isn't validated or checked for correctness by anything right now. For now, keep it as informal schema in the top-level location for easy discovery where perhaps others can find a use for it. SD0001 mentions gadget developers may want to start using it for Git-maintained gadgets to help with validation in their IDE, after Gadgets 2.0 is launched. Test Plan: * Set `$wgGadgetsRepo = 'json+definition';` * Create `MediaWiki:Gadgets/example.json` * Attempt to save "x" in settings.namespaces item. * Attempt to save "x.zip" in module.pages item. * Fails with this patch, similar as on master. Bug: T31272 Change-Id: I61bc3e40348a0aeb3bd3fa9ca86ccb7b93304095
105 lines
2.5 KiB
JSON
105 lines
2.5 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/schema#",
|
|
"description": "Gadget definition schema",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"settings": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"rights": {
|
|
"description": "The rights required to be able to enable/load this gadget",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Whether this gadget is enabled by default",
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"package": {
|
|
"description": "Whether this is gadget a packaged ResourceLoader module",
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"hidden": {
|
|
"description": "Whether this gadget is hidden from preferences",
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"skins": {
|
|
"description": "Skins supported by this gadget; empty if all skins are supported",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"actions": {
|
|
"description": "Page actions on which to load the gadget",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"namespaces": {
|
|
"description": "Page namespaces in which to load the gadget",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"categories": {
|
|
"description": "Categories in which to load the gadget",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"contentModels": {
|
|
"description": "Content models on which the gadget is supported",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"category": {
|
|
"description": "Key of the category this gadget belongs to",
|
|
"type": "string",
|
|
"default": ""
|
|
},
|
|
"supportsUrlLoad": {
|
|
"description": "Whether this gadget supports ?withgadget query parameter",
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"requiresES6": {
|
|
"description": "Whether this gadget requires ES6",
|
|
"type": "boolean",
|
|
"default": false
|
|
}
|
|
}
|
|
},
|
|
"module": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"pages": {
|
|
"type": "array",
|
|
"description": "List of JS/CSS/JSON pages included in this gadget"
|
|
},
|
|
"dependencies": {
|
|
"type": "array",
|
|
"description": "ResourceLoader modules this gadget depends upon"
|
|
},
|
|
"messages": {
|
|
"type": "array",
|
|
"description": "Messages this gadget depends upon"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|