Trevor Parscal has uploaded a new change for review.

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


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, 45 insertions(+), 8 deletions(-)


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

diff --git a/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js 
b/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js
index e125995..825fe9f 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js
@@ -99,6 +99,23 @@
 };
 
 /**
+ * Check if a parameter exists.
+ *
+ * @method
+ * @param {string} name Parameter name
+ * @returns {boolean} Parameter exists
+ */
+ve.dm.MWTemplateModel.prototype.hasParameter = function ( name ) {
+       if ( this.params[name] !== undefined ) {
+               return true;
+       }
+       if ( this.spec.isParameterKnown( name ) ) {
+               return ve.indexOf( name, this.spec.getParameterAliases( name ) 
) !== -1;
+       }
+       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..b4ab8c7 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
@@ -172,6 +172,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: newchange
Gerrit-Change-Id: I36a5e93ca8938ac3401a6e274647597704700468
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <[email protected]>

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

Reply via email to