/* Specification for the JSON descriptor as used in the TemplateData extension for MediaWiki. Author: Timo Tijhof Author: Trevor Parscal Author: James D. Forrester Property names listed in brackets (e.g. [foo]) are optional. This means they may be omitted from the object. If a null value is allowed, this will be explicitly specified. @structure {Object} Root @property {null|InterfaceText} [description] @property {Object} params Contains all parameters. Keyed by parameter name, contains #Param objects. @property {Array} [paramOrder] The logical order in which parameters should be displayed. The array contains each parameter key exactly once. @property {Array} sets List of groups of parameters that should be used together. A parameter can be in multiple sets. Not every parameter has to be in a set. The array contains #Set objects. @structure {Object} Param @property {null|InterfaceText} [label] Label of this parameter. To be shown as a clear identifier for human users of the template; should generally be unique amongst the parameters (e.g. "First author's name" and "Second author's name", not just "Name" and "Name"). Defaults to the key of the object in `Root.params`. @property {boolean} [required=false] Required status of this parameter. Whether the parameter is required to have an explicit value for the template to function properly. For example, the ISBN parameter in a template about a book's ISBN might be required, whereas other parameters such as issue date might not be. Client tools SHOULD automatically prompt users to fill in these paramters, and MAY prevent them from adding a template invocation with a required parameter unset. @property {boolean} [suggested=false] Suggested status of this parameter. Whether the parameter is suggested to be set to an explicit value for the template to be valuable. This status is a less strong indicator of inclusion than `required`, and the template should function correctly without a `suggested` parameter being set. For example, in a book template the author's name might be suggested, whereas the title might be required. Client tools MAY automatically prompt users to fill in these paramters, but SHOULD NOT prevent users from adding a template invocation with a suggested parameter unset. @property {null|InterfaceText} [description] Description of this parameter. To be shown as an explanatory text for what the purpose of the parameter is and some minor hints as to how to the format the contents. For example, a template parameter about the author of a book might be "The name of the author of the book, to positively identify and attribute the claim. The name should be given as it would appear in the author's native language, script and culture." or similar. @property {boolean|string} [deprecated=false] Deprecated status of this parameter. Description for why a parameter is deprecated, and what tasks instead should be set, or "true" if no description is wanted to be set. @property {Array} [aliases] List of aliases. An alias is an alternative name for the parameter that may be used instead of (not in addition to) the primary name. Aliases are not documented in a separate Param object. If they need more information, they should be in their own property marked "deprecated". @property {string} [default] The default value or description thereof. @property {Type} [type] The type of the expected parameter value. @property {string} [inherits] Key to another object in `Root.params`. The current Param object will inherit from that one, with local properties overriding the inherited ones. @structure {Object} Set @property {InterfaceText} label Label of this set. @property {Array} params One or more parameter keys. @structure {string} Type One of the following: - unknown When no type is specified. - string Any textual value. - number Any numerical value (without decimal points or thousand separators). - wiki-page-name A valid MediaWiki page name for the current wiki. Doesn't have to exist, but if not, should be a valid page name to create. - wiki-user-name A valid MediaWiki user name for the current wiki. Doesn't have to exist, but if not should be a valid user name to create. - content Page content (such as text style, links and images etc.). - unbalanced-wikitext Raw wikitext that should not be treated as standalone content because it is unbalanced (eg. templates concatenating incomplete wikitext as a bigger whole such as {{echo|before=|after=}}) - line Short text field - use for names, labels, and other short-form fields. @structure {string|Object} InterfaceText A free-form string (no wikitext) in the content-language of the wiki, or, an object containing those strings keyed by language code. Examples: */ /** * [[Template:Unsigned]] * * Example usage: * {{unsigned|JohnDoe|2012-10-18}} * {{unsigned|user=JohnDoe|year=2012|month=10|day=18|comment=blabla}} */ { "description": "Label unsigned comments in a conversation.", "params": { "user": { "label": "User's name", "type": "wiki-user-name", "required": true, "description": "User name of person who forgot to sign their comment.", "aliases": ["1"] }, "date": { "label": "Date", "suggested": true, "description": { "en": "Timestamp of when the comment was posted, in YYYY-MM-DD format." }, "aliases": ["2"] }, "year": { "label": "Year", "type": "number" }, "month": { "label": "Month", "inherits": "year" }, "day": { "label": "Day", "inherits": "year" }, "comment": { "required": false } }, "sets": [ { "label": "Date", "params": ["year", "month", "day"] } ] }