Allow extension nodes to convert to a specified type of dataElement

Sub-classes want to dynamically change type, e.g. inlineFoo/blockFoo,
but doing this after storeGeneratedContents invalidates the cache,
so ensure this is done as soon as the element is generated.

Bug: T151130
Change-Id: I80e2f2587cff8e9d9fe6ded5d8581263268deaa8
This commit is contained in:
Ed Sanders 2017-05-19 16:04:01 +02:00
parent 526d1ba71e
commit 153f7b034d

View file

@ -59,13 +59,19 @@ ve.dm.MWExtensionNode.static.getMatchRdfaTypes = function () {
return [ 'mw:Extension/' + this.extensionName ];
};
ve.dm.MWExtensionNode.static.toDataElement = function ( domElements, converter ) {
/**
* @inheritdoc
* @param {Node[]} domElements
* @param {ve.dm.Converter} converter
* @param {string} [type] Type to give dataElement, defaults to static.name
*/
ve.dm.MWExtensionNode.static.toDataElement = function ( domElements, converter, type ) {
var dataElement,
mwDataJSON = domElements[ 0 ].getAttribute( 'data-mw' ),
mwData = mwDataJSON ? JSON.parse( mwDataJSON ) : {};
dataElement = {
type: this.name,
type: type || this.name,
attributes: {
mw: mwData,
originalMw: mwDataJSON
@ -73,6 +79,7 @@ ve.dm.MWExtensionNode.static.toDataElement = function ( domElements, converter )
};
this.storeGeneratedContents( dataElement, domElements, converter.getStore() );
// Sub-classes should not modify dataElement beyond this point as it will invalidate the cache
return dataElement;
};