Alex Monk has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/169936

Change subject: Use MWTitleInputWidget for wiki-page-name parameters, add 
MWUserInputWidget for wiki-user-name
......................................................................

Use MWTitleInputWidget for wiki-page-name parameters, add MWUserInputWidget for 
wiki-user-name

Other template parameter types:
unknown - dealt with as TextInputWidget
line - dealt with in this commit - just TextInputWidget but not multiline
string - dealt with as TextInputWidget - unless we want to escape wikitext or 
something?
number - needs some OOUI work I guess
wiki-file-name - would be MWMediaSearchWidget/MWMediaResultWidget, but would 
need to flyout somehow
content - bug 50355
unbalanced-wikitext - ...TextInputWidget?

Bug: 53613
Change-Id: If04944d64303d959e8dd605e75a175895932b788
---
M VisualEditor.php
M modules/ve-mw/dm/models/ve.dm.MWParameterModel.js
M modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
M modules/ve-mw/ui/pages/ve.ui.MWParameterPage.js
A modules/ve-mw/ui/widgets/ve.ui.MWUserInputWidget.js
5 files changed, 134 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/36/169936/1

diff --git a/VisualEditor.php b/VisualEditor.php
index 7f8a3ab..b8625b7 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -744,6 +744,7 @@
 
                        'modules/ve-mw/ui/widgets/ve.ui.MWSurfaceWidget.js',
                        'modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js',
+                       'modules/ve-mw/ui/widgets/ve.ui.MWUserInputWidget.js',
                        'modules/ve-mw/ui/widgets/ve.ui.MWTocItemWidget.js',
                        'modules/ve-mw/ui/widgets/ve.ui.MWTocWidget.js',
 
diff --git a/modules/ve-mw/dm/models/ve.dm.MWParameterModel.js 
b/modules/ve-mw/dm/models/ve.dm.MWParameterModel.js
index 00aeb0e..430334c 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWParameterModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWParameterModel.js
@@ -136,6 +136,15 @@
 };
 
 /**
+ * Get parameter type.
+ *
+ * @returns {string} Parameter type
+ */
+ve.dm.MWParameterModel.prototype.getType = function () {
+       return this.template.getSpec().getParameterType( this.name );
+};
+
+/**
  * Set parameter value.
  *
  * @param {string} value Parameter value
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
index a7e52f3..96b90e9 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
@@ -169,7 +169,7 @@
        var page;
 
        if ( param.getName() ) {
-               page = new ve.ui.MWParameterPage( param, param.getId(), { $: 
this.$ } );
+               page = new ve.ui.MWParameterPage( param, param.getId(), { $: 
this.$, $overlay: this.$overlay } );
        } else {
                page = new ve.ui.MWParameterPlaceholderPage( param, 
param.getId(), { $: this.$ } );
        }
diff --git a/modules/ve-mw/ui/pages/ve.ui.MWParameterPage.js 
b/modules/ve-mw/ui/pages/ve.ui.MWParameterPage.js
index 9b1ad5d..df10a9c 100644
--- a/modules/ve-mw/ui/pages/ve.ui.MWParameterPage.js
+++ b/modules/ve-mw/ui/pages/ve.ui.MWParameterPage.js
@@ -17,7 +17,7 @@
  * @param {Object} [config] Configuration options
  */
 ve.ui.MWParameterPage = function VeUiMWParameterPage( parameter, name, config 
) {
-       var paramName = parameter.getName(), page = this;
+       var paramName = parameter.getName(), page = this, valueInputConfig;
 
        // Configuration initialization
        config = ve.extendObject( {
@@ -38,12 +38,22 @@
        this.$field = this.$( '<div>' );
        this.$more = this.$( '<div>' );
        this.$description = this.$( '<div>' );
-       this.valueInput = new OO.ui.TextInputWidget( {
+
+       valueInputConfig = {
                $: this.$,
-               multiline: true,
+               multiline: parameter.getType() !== 'line',
                autosize: true,
-               placeholder: this.defaultValue
-       } )
+               placeholder: this.defaultValue,
+               $overlay: config.$overlay || this.$element
+       };
+       if ( parameter.getType() === 'wiki-page-name' ) {
+               this.valueInput = new ve.ui.MWTitleInputWidget( 
valueInputConfig );
+       } else if ( parameter.getType() === 'wiki-user-name' ) {
+               this.valueInput = new ve.ui.MWUserInputWidget( valueInputConfig 
);
+       } else  {
+               this.valueInput = new OO.ui.TextInputWidget( valueInputConfig );
+       }
+       this.valueInput
                .setValue( this.parameter.getValue() )
                .connect( this, { change: 'onValueInputChange' } );
 
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWUserInputWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWUserInputWidget.js
new file mode 100644
index 0000000..514760a
--- /dev/null
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWUserInputWidget.js
@@ -0,0 +1,108 @@
+/*!
+ * VisualEditor UserInterface MWUserInputWidget class.
+ *
+ * @copyright 2011-2014 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * Creates an ve.ui.MWUserInputWidget object.
+ *
+ * @class
+ * @extends OO.ui.TextInputWidget
+ * @mixins OO.ui.LookupInputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+ve.ui.MWUserInputWidget = function VeUiMWUserInputWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.TextInputWidget.call( this, config );
+
+       // Mixin constructors
+       OO.ui.LookupInputWidget.call( this, this, config );
+
+       // Events
+       this.lookupMenu.connect( this, { choose: 'onLookupMenuItemChoose' } );
+
+       // Initialization
+       this.$element.addClass( 've-ui-mwUserInputWidget' );
+       this.lookupMenu.$element.addClass( 've-ui-mwUserInputWidget-menu' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWUserInputWidget, OO.ui.TextInputWidget );
+
+OO.mixinClass( ve.ui.MWUserInputWidget, OO.ui.LookupInputWidget );
+
+/* Methods */
+
+/**
+ * Handle menu item select event.
+ *
+ * @method
+ * @param {OO.ui.MenuItemWidget} item Selected item
+ */
+ve.ui.MWUserInputWidget.prototype.onLookupMenuItemChoose = function ( item ) {
+       if ( item ) {
+               this.setValue( item.getData() );
+       }
+};
+
+/**
+ * Gets a new request object of the current lookup query value.
+ *
+ * @method
+ * @returns {jQuery.Deferred} Deferred object with success and fail handlers 
already attached
+ */
+ve.ui.MWUserInputWidget.prototype.getLookupRequest = function () {
+       var value = this.value;
+
+       // Dont send leading ':' to open search
+       if ( value.charAt( 0 ) === ':' ) {
+               value = value.substr( 1 );
+       }
+
+       return ve.init.target.constructor.static.apiRequest( {
+               action: 'query',
+               list: 'allusers',
+               auprefix: value
+       } );
+};
+
+/**
+ * Get lookup cache item from server response data.
+ *
+ * @method
+ * @param {Mixed} data Response from server
+ */
+ve.ui.MWUserInputWidget.prototype.getLookupCacheItemFromData = function ( data 
) {
+       return ( ( data || {} ).query || {} ).allusers || [];
+};
+
+/**
+ * Get list of menu items from a server response.
+ *
+ * @param {Object} data Query result
+ * @returns {OO.ui.MenuItemWidget[]} Menu items
+ */
+ve.ui.MWUserInputWidget.prototype.getLookupMenuItemsFromData = function ( 
allusers ) {
+       var i, len,
+               menu$ = this.lookupMenu.$,
+               items = [];
+
+       // Matching pages
+       if ( allusers && allusers.length ) {
+               for ( i = 0, len = allusers.length; i < len; i++ ) {
+                       items.push( new OO.ui.MenuItemWidget(
+                               allusers[i].name, { $: menu$, label: 
allusers[i].name }
+                       ) );
+               }
+       }
+
+       return items;
+};

-- 
To view, visit https://gerrit.wikimedia.org/r/169936
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If04944d64303d959e8dd605e75a175895932b788
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Alex Monk <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to