jenkins-bot has submitted this change and it was merged.

Change subject: Retain original param names and ignore leading/trailing 
whitespace
......................................................................


Retain original param names and ignore leading/trailing whitespace

Objectives:

* Trim leading or trailing whitespace that parsoid may have left on
  parameter names
* Preserve the original name for round-tripping cleanliness
* Ignore leading or trailing whitespace when entering new parameter names
  in the parameter search widget
* Consider aliases when listing suggested parameters

Changes:

ve.ui.MWParameterSearchWidget.js
* Use hasParameter method instead of using indexOf - uses map lookup
  internally, which is much faster, and also take aliases into account
* Trim query input value to prevent leading or trailing whitespace from
  being considered when filtering known or creating unknown parameters
* Take aliases into account when showing filtered results

ve.dm.MWTransclusionModel.js
* Use original name when round-tripping

ve.dm.MWTemplateParameterModel.js
* Store original name for round tripping, and trim the original name for
  other uses
* Add getOriginalName method

ve.dm.MWTemplateModel.js
* Add hasParameter method, which currently just does a map lookup, but can
  do other processing in the future

ve.dm.MWTemplateSpecModel.js
* Add isParameterKnown method

Bug: 50715
Bug: 50717
Change-Id: I36a5e93ca8938ac3401a6e274647597704700468
---
M modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js
M modules/ve-mw/dm/models/ve.dm.MWTemplateParameterModel.js
M modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
M modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
M modules/ve-mw/ui/widgets/ve.ui.MWParameterSearchWidget.js
5 files changed, 73 insertions(+), 18 deletions(-)

Approvals:
  Catrope: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js 
b/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js
index e125995..5d49e7a 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js
@@ -99,6 +99,40 @@
 };
 
 /**
+ * Check if a parameter exists.
+ *
+ * @method
+ * @param {string} name Parameter name
+ * @returns {boolean} Parameter exists
+ */
+ve.dm.MWTemplateModel.prototype.hasParameter = function ( name ) {
+       var i, len, origin, names;
+
+       // Check if name (which may be an alias) is present in the template
+       if ( this.params[name] ) {
+               return true;
+       }
+
+       // Check if the name is known at all
+       if ( this.spec.isParameterKnown( name ) ) {
+               origin = this.spec.getParameterOrigin( name );
+               // Check for origin name (may be the same as name)
+               if ( this.params[origin] ) {
+                       return true;
+               }
+               // Check for other aliases (may include name)
+               names = this.spec.getParameterAliases( origin );
+               for ( i = 0, len = names.length; i < len; i++ ) {
+                       if ( this.params[names[i]] ) {
+                               return true;
+                       }
+               }
+       }
+
+       return false;
+};
+
+/**
  * Get ordered list of parameter names.
  *
  * Numeric names, whether strings or real numbers, are placed at the begining, 
followed by
diff --git a/modules/ve-mw/dm/models/ve.dm.MWTemplateParameterModel.js 
b/modules/ve-mw/dm/models/ve.dm.MWTemplateParameterModel.js
index ed5836e..5f4dfaa 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTemplateParameterModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTemplateParameterModel.js
@@ -18,7 +18,8 @@
 ve.dm.MWTemplateParameterModel = function VeDmMWTemplateParameterModel( 
template, name, value ) {
        // Properties
        this.template = template;
-       this.name = name;
+       this.originalName = name;
+       this.name = name.trim();
        this.value = value || '';
        this.id = this.template.getId() + '/' + name;
 };
@@ -55,6 +56,16 @@
 };
 
 /**
+ * Get parameter name.
+ *
+ * @method
+ * @returns {string} Parameter name
+ */
+ve.dm.MWTemplateParameterModel.prototype.getOriginalName = function () {
+       return this.originalName;
+};
+
+/**
  * Get parameter value.
  *
  * @method
diff --git a/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js 
b/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
index 9330f43..adf6e0e 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
@@ -70,23 +70,24 @@
  * @param {string[][]} [data.sets] Lists of param sets
  */
 ve.dm.MWTemplateSpecModel.prototype.extend = function ( data ) {
-       var key, paramObj, i, len;
+       var key, param, i, len;
 
        if ( data.description !== null ) {
                this.description = data.description;
        }
        if ( ve.isPlainObject( data.params ) ) {
                for ( key in data.params ) {
-                       paramObj = data.params[key];
-                       this.params[key] = ve.extendObject(
-                               true,
-                               this.getDefaultParameterSpec( key ),
-                               paramObj
-                       );
+                       // Pre-fill spec
+                       if ( !this.params[key] ) {
+                               this.params[key] = 
this.getDefaultParameterSpec( key );
+                       }
+                       param = this.params[key];
+                       // Extend existing spec
+                       ve.extendObject( true, this.params[key], 
data.params[key] );
                        // Add aliased references
-                       if ( paramObj.aliases.length ) {
-                               for ( i = 0, len = paramObj.aliases.length; i < 
len; i++ ) {
-                                       this.params[ paramObj.aliases[i] ] = 
paramObj;
+                       if ( param.aliases.length ) {
+                               for ( i = 0, len = param.aliases.length; i < 
len; i++ ) {
+                                       this.params[ param.aliases[i] ] = param;
                                }
                        }
                }
@@ -172,6 +173,17 @@
 };
 
 /**
+ * Check if a parameter is known.
+ *
+ * @method
+ * @param {string} name Parameter name
+ * @returns {boolean} Parameter is known
+ */
+ve.dm.MWTemplateSpecModel.prototype.isParameterKnown = function ( name ) {
+       return this.params[name] !== undefined;
+};
+
+/**
  * Get a parameter label.
  *
  * @method
diff --git a/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js 
b/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
index bdcecae..82ac39c 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
@@ -230,7 +230,7 @@
                        template = { 'target': part.getTarget(), 'params': {} };
                        params = part.getParameters();
                        for ( name in params ) {
-                               template.params[name] = { 'wt': 
params[name].getValue() };
+                               template.params[params[name].getOriginalName()] 
= { 'wt': params[name].getValue() };
                        }
                        obj.parts.push( { 'template': template } );
                } else if ( part instanceof ve.dm.MWTransclusionContentModel ) {
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWParameterSearchWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWParameterSearchWidget.js
index a5363d7..eda0964 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWParameterSearchWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWParameterSearchWidget.js
@@ -82,7 +82,6 @@
 ve.ui.MWParameterSearchWidget.prototype.buildIndex = function () {
        var i, len, name, label, aliases, description,
                spec = this.template.getSpec(),
-               usedParams = this.template.getParameterNames(),
                knownParams = spec.getParameterNames();
 
        this.index.length = 0;
@@ -92,7 +91,7 @@
                        // Skip aliases
                        spec.getParameterOrigin( name ) !== name ||
                        // Skip parameters already in use
-                       ve.indexOf( name, usedParams ) !== -1
+                       this.template.hasParameter( name )
                ) {
                        continue;
                }
@@ -121,22 +120,21 @@
 ve.ui.MWParameterSearchWidget.prototype.addResults = function () {
        var i, len, item,
                exactMatch = false,
-               value = this.query.getValue(),
+               value = this.query.getValue().trim(),
                query = value.toLowerCase(),
-               usedParams = this.template.getParameterNames(),
                items = [];
 
        for ( i = 0, len = this.index.length; i < len; i++ ) {
                item = this.index[i];
                if ( item.text.indexOf( query ) >= 0 ) {
                        items.push( new ve.ui.MWParameterResultWidget( item, { 
'$$': this.$$ } ) );
-                       if ( item.name === value ) {
+                       if ( item.name === value || ve.indexOf( value, 
item.aliases ) !== -1 ) {
                                exactMatch = true;
                        }
                }
        }
 
-       if ( !exactMatch && value.length && ve.indexOf( value, usedParams ) === 
-1 ) {
+       if ( !exactMatch && value.length && !this.template.hasParameter( value 
) ) {
                items.unshift( new ve.ui.MWParameterResultWidget( {
                        'name': value,
                        'label': value,

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I36a5e93ca8938ac3401a6e274647597704700468
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Trevor Parscal <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to