GWicke has uploaded a new change for review.

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


Change subject: Reduce syntactic diffs on ' = '
......................................................................

Reduce syntactic diffs on ' = '

Changed behavior for template transclusion parameter serialization so that:
* ' = ' is used for new content
* ' = ' is used if the key part had a space before
* '=' is used otherwise

This reduces the number of syntactic diffs a fair bit. On Obama for example,
the number of syntactic diffs drops from 94 to 65.

Change-Id: Ic6cfba86baf689a054234b176a98d7a6a1fa52db
---
M js/lib/mediawiki.WikitextSerializer.js
1 file changed, 27 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid 
refs/changes/41/70741/1

diff --git a/js/lib/mediawiki.WikitextSerializer.js 
b/js/lib/mediawiki.WikitextSerializer.js
index 11de6a2..f10176c 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -2624,9 +2624,10 @@
                        node, state, cb);
 };
 
-WSP._buildTemplateWT = function(state, srcParts, dp) {
+WSP._buildTemplateWT = function(node, state, srcParts) {
        var buf = [],
-               serializer = this;
+               serializer = this,
+               dp = node.data.parsoid;
        srcParts.map(function(part) {
                var tpl = part.template;
                if (tpl) { // transclusion: tpl or parser function
@@ -2662,8 +2663,28 @@
                                                numericIndex++;
                                                argBuf.push(v);
                                        } else {
-                                               var kStr = k + (isTpl && 
!k.match(/\s$/) ? ' ' : ''),
-                                                       vStr = (isTpl && 
!v.match(/^\s/) ? ' ' : '') + v;
+                                               var kStr = k,
+                                                       vStr = v;
+
+                                               if (isTpl) {
+                                                       // Massage the space 
around the equal a bit for
+                                                       // templates. Parser 
function values are not
+                                                       // stripped the same 
way, so don't apply to those
+                                                       // just yet.
+                                                       if (DU.isNewElt(node)) {
+                                                               // Default to ' 
= ' for new content
+                                                               if 
(!/\s$/.test(k)) {
+                                                                       kStr = 
kStr + ' ';
+                                                               }
+                                                               if 
(!/^\s/.test(v)) {
+                                                                       vStr = 
' ' + vStr;
+                                                               }
+                                                       } else if 
(k.match(/\s$/) && !v.match(/^\s/)) {
+                                                               // Only prefix 
value with space if key
+                                                               // ends with 
space too
+                                                               vStr = ' ' + 
vStr;
+                                                       }
+                                               }
                                                argBuf.push(kStr + "=" + vStr);
                                        }
                                }
@@ -2767,7 +2788,8 @@
                                if 
(/\bmw:(Transclusion\b|Param\b)/.test(typeOf)) {
                                        dataMW = 
JSON.parse(node.getAttribute("data-mw"));
                                        if (dataMW) {
-                                               src = 
state.serializer._buildTemplateWT(state, dataMW.parts || [{ template: dataMW 
}], dp);
+                                               src = 
state.serializer._buildTemplateWT(node,
+                                                               state, 
dataMW.parts || [{ template: dataMW }]);
                                        } else {
                                                console.error("ERROR: No 
data-mw for: " + node.outerHTML);
                                                src = dp.src;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic6cfba86baf689a054234b176a98d7a6a1fa52db
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: GWicke <gwi...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to