case 'string':
case 'user':
- if ( pi.tokentype ) {
- widget = new TextInputWithIndicatorWidget( {
- input: {
- indicator: 'previous',
- indicatorTitle: mw.message( 'apisandbox-fetch-token' ).text(),
- required: Util.apiBool( pi.required )
- }
- } );
- } else if ( Util.apiBool( pi.multi ) ) {
+ if ( Util.apiBool( pi.multi ) ) {
widget = new OO.ui.CapsuleMultiselectWidget( {
allowArbitrary: true,
allowDuplicates: Util.apiBool( pi.allowsduplicates ),
widget.setValidation( Validators.generic );
}
if ( pi.tokentype ) {
+ widget.paramInfo = pi;
+ $.extend( widget, WidgetMethods.textInputWidget );
$.extend( widget, WidgetMethods.tokenWidget );
- widget.input.paramInfo = pi;
- $.extend( widget.input, WidgetMethods.textInputWidget );
- $.extend( widget.input, WidgetMethods.tokenWidget );
- widget.on( 'indicator', widget.fetchToken, [], widget );
}
break;
Util.fetchModuleInfo( this.apiModule )
.done( function ( pi ) {
- var prefix, i, j, descriptionContainer, widget, widgetField, helpField, tmp, flag, count,
+ var prefix, i, j, descriptionContainer, widget, layoutConfig, button, widgetField, helpField, tmp, flag, count,
items = [],
deprecatedItems = [],
buttons = [],
}
);
- widgetField = new OO.ui.FieldLayout(
- widget,
- {
- align: 'left',
- classes: [ 'mw-apisandbox-widget-field' ],
- label: prefix + pi.parameters[ i ].name
- }
- );
+ layoutConfig = {
+ align: 'left',
+ classes: [ 'mw-apisandbox-widget-field' ],
+ label: prefix + pi.parameters[ i ].name
+ };
+
+ if ( pi.parameters[ i ].tokentype ) {
+ button = new OO.ui.ButtonWidget( {
+ label: mw.message( 'apisandbox-fetch-token' ).text()
+ } );
+ button.on( 'click', widget.fetchToken, [], widget );
+
+ widgetField = new OO.ui.ActionFieldLayout( widget, button, layoutConfig );
+ } else {
+ widgetField = new OO.ui.FieldLayout( widget, layoutConfig );
+ }
// We need our own click handler on the widget label to
// turn off the disablement.
return ret;
};
- /**
- * A text input with a clickable indicator
- *
- * @class
- * @private
- * @constructor
- * @param {Object} [config] Configuration options
- */
- function TextInputWithIndicatorWidget( config ) {
- var k;
-
- config = config || {};
- TextInputWithIndicatorWidget[ 'super' ].call( this, config );
-
- this.$indicator = $( '<span>' ).addClass( 'mw-apisandbox-clickable-indicator' );
- OO.ui.mixin.TabIndexedElement.call(
- this, $.extend( {}, config, { $tabIndexed: this.$indicator } )
- );
-
- this.input = new OO.ui.TextInputWidget( $.extend( {
- $indicator: this.$indicator,
- disabled: this.isDisabled()
- }, config.input ) );
-
- // Forward most methods for convenience
- for ( k in this.input ) {
- if ( $.isFunction( this.input[ k ] ) && !this[ k ] ) {
- this[ k ] = this.input[ k ].bind( this.input );
- }
- }
-
- this.$indicator.on( {
- click: this.onIndicatorClick.bind( this ),
- keypress: this.onIndicatorKeyPress.bind( this )
- } );
-
- this.$element.append( this.input.$element );
- }
- OO.inheritClass( TextInputWithIndicatorWidget, OO.ui.Widget );
- OO.mixinClass( TextInputWithIndicatorWidget, OO.ui.mixin.TabIndexedElement );
- TextInputWithIndicatorWidget.prototype.onIndicatorClick = function ( e ) {
- if ( !this.isDisabled() && e.which === 1 ) {
- this.emit( 'indicator' );
- }
- return false;
- };
- TextInputWithIndicatorWidget.prototype.onIndicatorKeyPress = function ( e ) {
- if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
- this.emit( 'indicator' );
- return false;
- }
- };
- TextInputWithIndicatorWidget.prototype.setDisabled = function ( disabled ) {
- TextInputWithIndicatorWidget[ 'super' ].prototype.setDisabled.call( this, disabled );
- if ( this.input ) {
- this.input.setDisabled( this.isDisabled() );
- }
- return this;
- };
-
/**
* A wrapper for a widget that provides an enable/disable button
*