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