Subramanya Sastry has uploaded a new change for review.
https://gerrit.wikimedia.org/r/95574
Change subject: (Bug 56983) Correctly serialize magic words added on client
......................................................................
(Bug 56983) Correctly serialize magic words added on client
* Added generic support for serialization of magic words added
on the client.
* Minor code cleanup associated with adding support for this.
* Added new parser test to test this (passes with this patch
and fails without).
Change-Id: I4afef6a1e8a5acbe5b0ac673fabe1d9bcd3cc0bf
---
M js/lib/ext.core.BehaviorSwitchHandler.js
M js/lib/mediawiki.WikiConfig.js
M js/lib/mediawiki.WikitextSerializer.js
M js/tests/parserTests.txt
4 files changed, 66 insertions(+), 14 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid
refs/changes/74/95574/1
diff --git a/js/lib/ext.core.BehaviorSwitchHandler.js
b/js/lib/ext.core.BehaviorSwitchHandler.js
index 8a44fd6..2413492 100644
--- a/js/lib/ext.core.BehaviorSwitchHandler.js
+++ b/js/lib/ext.core.BehaviorSwitchHandler.js
@@ -28,16 +28,14 @@
* See {@link TokenTransformManager#addTransform}'s transformation parameter
*/
BehaviorSwitchHandler.prototype.onBehaviorSwitch = function ( token, manager,
cb ) {
- var metaToken, magicWord = token.attribs[0].v,
+ var metaToken,
env = this.manager.env,
- switchType = magicWord.toLowerCase(),
- actualType = env.conf.wiki.magicWords[magicWord] ||
- env.conf.wiki.magicWords[switchType];
+ magicWord =
env.conf.wiki.magicWordCanonicalName(token.attribs[0].v);
- env.setVariable( actualType, true );
+ env.setVariable( magicWord, true );
metaToken = new SelfclosingTagTk( 'meta',
- [ new KV( 'property', 'mw:PageProp/' + actualType ) ],
+ [ new KV( 'property', 'mw:PageProp/' + magicWord ) ],
Util.clone( token.dataAttribs ) );
return { tokens: [ metaToken ] };
diff --git a/js/lib/mediawiki.WikiConfig.js b/js/lib/mediawiki.WikiConfig.js
index f299c66..88f13e7 100644
--- a/js/lib/mediawiki.WikiConfig.js
+++ b/js/lib/mediawiki.WikiConfig.js
@@ -200,18 +200,22 @@
// List of magic word aliases with $1 in their names, indexed by
canonical name.
this._interpolatedMagicWordAliases = {};
- for ( var mwx = 0; mwx < mws.length; mwx++ ) {
- mw = mws[mwx];
+ for ( var j = 0; j < mws.length; j++ ) {
+ mw = mws[j];
aliases = mw.aliases;
if ( aliases.length > 0 ) {
this.mwAliases[mw.name] = [];
this._interpolatedMagicWordAliases[mw.name] = [];
}
- for ( var mwax = 0; mwax < aliases.length; mwax++ ) {
- var alias = aliases[mwax];
+ for ( var k = 0; k < aliases.length; k++ ) {
+ var alias = aliases[k];
+
+ this.mwAliases[mw.name].push( alias );
if ( mw['case-sensitive'] !== '' ) {
alias = alias.toLowerCase();
+ this.mwAliases[mw.name].push( alias );
}
+ this.magicWords[alias] = mw.name;
if ( alias.match( /\$1/ ) !== null ) {
// This is a named option. Add it to the array.
@@ -219,8 +223,6 @@
this._interpolatedMagicWords.push( alias );
this._interpolatedMagicWordAliases[mw.name].push( alias );
}
- this.magicWords[alias] = mw.name;
- this.mwAliases[mw.name].push( alias );
}
this._mwRegexps[mw.name] =
new RegExp( '^(' +
@@ -379,10 +381,28 @@
};
/**
+ * Get canonical magicword name for the input word
+ *
+ * @param {string} word
+ * @returns {string}
+ */
+WikiConfig.prototype.magicWordCanonicalName = function ( word ) {
+ return this.magicWords[word] || this.magicWords[word.toLowerCase()] ||
null;
+};
+
+/**
* Check if a string is a recognized magic word
*/
WikiConfig.prototype.isMagicWord = function ( word ) {
- return this.magicWords[word] || this.magicWords[word.toLowerCase()];
+ return this.magicWordCanonicalName(word) !== null;
+};
+
+/**
+ * Convert the internal canonical magic word name to the wikitext alias
+ */
+WikiConfig.prototype.getMagicWordWT = function(word) {
+ var aliases = this.mwAliases[word];
+ return (aliases && aliases.length > 0) ? aliases[0] : null;
};
/**
diff --git a/js/lib/mediawiki.WikitextSerializer.js
b/js/lib/mediawiki.WikitextSerializer.js
index 0833e7d..52777d6 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -2718,6 +2718,8 @@
}
} else if ( node.data.parsoid.magicSrc
) {
out =
node.data.parsoid.magicSrc;
+ } else {
+ out =
state.env.conf.wiki.getMagicWordWT(switchType[1]) || switchType[1];
}
cb(out, node);
}
diff --git a/js/tests/parserTests.txt b/js/tests/parserTests.txt
index 48fe6bb..2b9acd1 100644
--- a/js/tests/parserTests.txt
+++ b/js/tests/parserTests.txt
@@ -18741,8 +18741,12 @@
<p><i>A</i><b data-parsoid='{}'><i data-parsoid='{}'>B</i></b></p>
!! end
+#------------------------------------
+# End of I/B quote minimization tests
+#------------------------------------
+
!!test
-5. Bug 54262: New entities
+Bug 54262: New entities
!! options
parsoid=html2wt
!! input
@@ -18751,6 +18755,34 @@
<span typeof="mw:Entity">foo</span>
!! end
+!! test
+Magic words
+!! options
+parsoid=html2wt
+!! input
+__TOC__
+__NOTOC__
+__FORCETOC__
+__INDEX__
+__NOINDEX__
+__NOGALLERY__
+__NOEDITSECTION__
+__NOTITLECONVERT__
+__NOCONTENTCONVERT__
+unknownproperty
+!! result
+<meta property='mw:PageProp/toc' />
+<meta property='mw:PageProp/notoc' />
+<meta property='mw:PageProp/forcetoc' />
+<meta property='mw:PageProp/index' />
+<meta property='mw:PageProp/noindex' />
+<meta property='mw:PageProp/nogallery' />
+<meta property='mw:PageProp/noeditsection' />
+<meta property='mw:PageProp/notitleconvert' />
+<meta property='mw:PageProp/nocontentconvert' />
+<meta property='mw:PageProp/unknownproperty' />
+!! end
+
# -----------------------------------------------------------------
# End of section for Parsoid-only html2wt tests for serialization
# of new content
--
To view, visit https://gerrit.wikimedia.org/r/95574
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4afef6a1e8a5acbe5b0ac673fabe1d9bcd3cc0bf
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits