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