/*! * MediaWiki Widgets - ComplexNamespaceInputWidget class. * * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt * @license The MIT License (MIT); see LICENSE.txt */ ( function () { /** * @classdesc Displays a dropdown box with the choice of available namespaces, * plus two checkboxes to include associated namespace or to invert selection. * * @class * @extends OO.ui.Widget * * @constructor * @description Create an instance of `mw.widgets.ComplexNamespaceInputWidget`. * @param {Object} [config] Configuration options * @param {Object} config.namespace Configuration for the NamespaceInputWidget dropdown with list * of namespaces * @param {string} config.namespace.includeAllValue If specified, add a "all namespaces" * option to the dropdown, and use this as the input value for it * @param {Object} config.invert Configuration for the "invert selection" CheckboxInputWidget. If * null, the checkbox will not be generated. * @param {Object} config.associated Configuration for the "include associated namespace" * CheckboxInputWidget. If null, the checkbox will not be generated. * @param {Object} config.invertLabel Configuration for the FieldLayout with label wrapping the * "invert selection" checkbox * @param {string} config.invertLabel.label Label text for the label * @param {Object} config.associatedLabel Configuration for the FieldLayout with label wrapping * the "include associated namespace" checkbox * @param {string} config.associatedLabel.label Label text for the label */ mw.widgets.ComplexNamespaceInputWidget = function MwWidgetsComplexNamespaceInputWidget( config ) { // Configuration initialization config = Object.assign( { // Config options for nested widgets namespace: {}, invert: {}, invertLabel: {}, associated: {}, associatedLabel: {} }, config ); // Parent constructor mw.widgets.ComplexNamespaceInputWidget.super.call( this, config ); // Properties this.config = config; this.namespace = new mw.widgets.NamespaceInputWidget( config.namespace ); if ( config.associated !== null ) { this.associated = new OO.ui.CheckboxInputWidget( Object.assign( { value: '1' }, config.associated ) ); // TODO Should use a LabelWidget? But they don't work like HTML