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