diff --git a/modules/ve-mw/dm/nodes/ve.dm.MWBlockImageNode.js b/modules/ve-mw/dm/nodes/ve.dm.MWBlockImageNode.js index bdd64850ee..65ad4e8878 100644 --- a/modules/ve-mw/dm/nodes/ve.dm.MWBlockImageNode.js +++ b/modules/ve-mw/dm/nodes/ve.dm.MWBlockImageNode.js @@ -124,7 +124,7 @@ ve.dm.MWBlockImageNode.static.toDataElement = function ( domElements, converter ]; } else { return [ dataElement ]. - concat( converter.getDataFromDomRecursionClean( $caption[0], { 'type': 'mwImageCaption' } ) ). + concat( converter.getDataFromDomClean( $caption[0], { 'type': 'mwImageCaption' } ) ). concat( [ { 'type': '/' + this.name } ] ); } }; diff --git a/modules/ve-mw/dm/nodes/ve.dm.MWReferenceListNode.js b/modules/ve-mw/dm/nodes/ve.dm.MWReferenceListNode.js index a36b5564d6..7c9ebf3243 100644 --- a/modules/ve-mw/dm/nodes/ve.dm.MWReferenceListNode.js +++ b/modules/ve-mw/dm/nodes/ve.dm.MWReferenceListNode.js @@ -54,7 +54,7 @@ ve.dm.MWReferenceListNode.static.toDataElement = function ( domElements, convert }; if ( mwData.body && mwData.body.html ) { $contents = $( '
', domElements[0].ownerDocument ).append( mwData.body.html ); - contentsData = converter.getDataFromDomRecursionClean( $contents[0] ); + contentsData = converter.getDataFromDomClean( $contents[0] ); return [ referenceListData ]. concat( contentsData ). concat( [ { 'type': '/' + this.name } ] ); diff --git a/modules/ve/dm/ve.dm.Converter.js b/modules/ve/dm/ve.dm.Converter.js index 27b5fd0bb7..e347db7ae7 100644 --- a/modules/ve/dm/ve.dm.Converter.js +++ b/modules/ve/dm/ve.dm.Converter.js @@ -228,7 +228,7 @@ ve.dm.Converter.renderHtmlAttributeList = function ( attributeList, domElements, /* Methods */ /** - * Check whether this converter instance is currently inside a getDataFromDom() conversion. + * Check whether this converter instance is currently inside a getModelFromDom() conversion. * * @method * @returns {boolean} Whether we're converting @@ -258,7 +258,7 @@ ve.dm.Converter.prototype.getHtmlDocument = function () { }; /** - * Get the current conversion context. This is the recursion state of getDataFromDomRecursion(). + * Get the current conversion context. This is the recursion state of getDataFromDom(). * * @method * @returns {Object|null} Context object, or null if not converting @@ -386,24 +386,9 @@ ve.dm.Converter.prototype.getDomElementFromDataAnnotation = function ( dataAnnot * @returns {ve.dm.Document} Document model */ ve.dm.Converter.prototype.getModelFromDom = function ( doc ) { - var internalList = new ve.dm.InternalList(), - innerWhitespace = new Array( 2 ), - data = this.getDataFromDom( doc, new ve.dm.IndexValueStore(), internalList, innerWhitespace ), - model = new ve.dm.Document( data, doc, undefined, internalList, innerWhitespace ); - - return model; -}; - -/** - * Convert an HTML document to a linear model. - * @param {HTMLDocument} doc HTML document to convert - * @param {ve.dm.IndexValueStore} store Index-value store - * @param {ve.dm.InternalList} internalList Internal list - * @param {Array} innerWhitespace Inner whitespace - * @returns {ve.dm.FlatLinearData} Linear model data - */ -ve.dm.Converter.prototype.getDataFromDom = function ( doc, store, internalList, innerWhitespace ) { - var linearData, refData; + var linearData, refData, innerWhitespace, + store = new ve.dm.IndexValueStore(), + internalList = new ve.dm.InternalList(); // Set up the converter state this.doc = doc; @@ -412,25 +397,26 @@ ve.dm.Converter.prototype.getDataFromDom = function ( doc, store, internalList, this.contextStack = []; // Possibly do things with doc and the head in the future + // Generate data linearData = new ve.dm.FlatLinearData( store, - this.getDataFromDomRecursion( doc.body ) + this.getDataFromDom( doc.body ) ); refData = this.internalList.convertToData( this, doc ); linearData.batchSplice( linearData.getLength(), 0, refData ); - - this.setInnerWhitespace( innerWhitespace, linearData ); + innerWhitespace = this.getInnerWhitespace( linearData ); // Clear the state this.doc = null; this.store = null; this.internalList = null; this.contextStack = null; - return linearData; + + return new ve.dm.Document( linearData, doc, undefined, internalList, innerWhitespace ); }; /** - * Wrapper for getDataFromDomRecursion which resets contextStack before the call + * Wrapper for getDataFromDom which resets contextStack before the call * and then set it back after the call. * * TODO: This is kind of a hack, better implementation would be more appropriate in near future. @@ -441,17 +427,17 @@ ve.dm.Converter.prototype.getDataFromDom = function ( doc, store, internalList, * @param {ve.dm.AnnotationSet} [annotationSet] Override the set of annotations to use * @returns {Array} Linear model data */ -ve.dm.Converter.prototype.getDataFromDomRecursionClean = function ( domElement, wrapperElement, annotationSet ) { +ve.dm.Converter.prototype.getDataFromDomClean = function ( domElement, wrapperElement, annotationSet ) { var result, contextStack = this.contextStack; this.contextStack = []; - result = this.getDataFromDomRecursion( domElement, wrapperElement, annotationSet ); + result = this.getDataFromDom( domElement, wrapperElement, annotationSet ); this.contextStack = contextStack; return result; }; /** - * Recursive implementation of getDataFromDom(). For internal use, and for use in - * ve.dm.Model.static.toDataElement() implementations. + * Get linear model data from a DOM node. Called recursively. For internal use + * and ve.dm.Model.static.toDataElement() implementations. * * @method * @param {HTMLElement} domElement HTML element to convert @@ -459,7 +445,7 @@ ve.dm.Converter.prototype.getDataFromDomRecursionClean = function ( domElement, * @param {ve.dm.AnnotationSet} [annotationSet] Override the set of annotations to use * @returns {Array} Linear model data */ -ve.dm.Converter.prototype.getDataFromDomRecursion = function ( domElement, wrapperElement, annotationSet ) { +ve.dm.Converter.prototype.getDataFromDom = function ( domElement, wrapperElement, annotationSet ) { /** * Add whitespace to an element at a specific offset. * @@ -668,7 +654,7 @@ ve.dm.Converter.prototype.getDataFromDomRecursion = function ( domElement, wrapp childAnnotations = context.annotations.clone(); childAnnotations.push( annotation ); - childDataElements = this.getDataFromDomRecursion( childDomElement, undefined, childAnnotations ); + childDataElements = this.getDataFromDom( childDomElement, undefined, childAnnotations ); if ( !childDataElements.length || isAllInstanceOf( childDataElements, ve.dm.AlienMetaItem ) ) { // Empty annotation, create a meta item childDataElements = this.createDataElements( ve.dm.AlienMetaItem, childDomElements ); @@ -768,7 +754,7 @@ ve.dm.Converter.prototype.getDataFromDomRecursion = function ( domElement, wrapp // Opening and closing elements are added by the recursion too outputWrappedMetaItems( 'restore' ); data = data.concat( - this.getDataFromDomRecursion( childDomElement, childDataElements[0], + this.getDataFromDom( childDomElement, childDataElements[0], new ve.dm.AnnotationSet( this.store ) ) ); @@ -994,13 +980,14 @@ ve.dm.Converter.prototype.getDataFromDomRecursion = function ( domElement, wrapp }; /** - * Set inner whitespace from linear data + * Get inner whitespace from linear data * - * @param {Array} innerWhitespace Inner whitespace * @param {ve.dm.FlatLinearData} data Linear model data + * @returns {Array} innerWhitespace Inner whitespace */ -ve.dm.Converter.prototype.setInnerWhitespace = function ( innerWhitespace, data ) { +ve.dm.Converter.prototype.getInnerWhitespace = function ( data ) { var whitespace, + innerWhitespace = new Array( 2 ), stack = 0, last = data.getLength() - 1; @@ -1024,6 +1011,7 @@ ve.dm.Converter.prototype.setInnerWhitespace = function ( innerWhitespace, data whitespace = ve.getProp( data.getData( last ), 'internal', 'whitespace' ); innerWhitespace[1] = whitespace ? whitespace[3] : undefined; } + return innerWhitespace; }; /** diff --git a/modules/ve/dm/ve.dm.InternalList.js b/modules/ve/dm/ve.dm.InternalList.js index 9a252e84d9..54ea54912b 100644 --- a/modules/ve/dm/ve.dm.InternalList.js +++ b/modules/ve/dm/ve.dm.InternalList.js @@ -218,7 +218,7 @@ ve.dm.InternalList.prototype.convertToData = function ( converter, doc ) { list.push( { 'type': 'internalList' } ); for ( i = 0, length = itemHtmlQueue.length; i < length; i++ ) { if ( itemHtmlQueue[i] !== '' ) { - itemData = converter.getDataFromDomRecursion( $( '
', doc ).html( itemHtmlQueue[i] )[0] ); + itemData = converter.getDataFromDom( $( '
', doc ).html( itemHtmlQueue[i] )[0] ); list = list.concat( [{ 'type': 'internalItem' }], itemData, diff --git a/modules/ve/dm/ve.dm.Model.js b/modules/ve/dm/ve.dm.Model.js index 4f778fd719..f60344c587 100644 --- a/modules/ve/dm/ve.dm.Model.js +++ b/modules/ve/dm/ve.dm.Model.js @@ -117,7 +117,7 @@ ve.dm.Model.static.matchFunction = null; * * This function may return a single linear model element, or an array of balanced linear model * data. If this function needs to recursively convert a DOM node (e.g. a child of one of the - * DOM elements passed in), it can call converter.getDataFromDomRecursion( domElement ). Note that + * DOM elements passed in), it can call converter.getDataFromDom( domElement ). Note that * if an array is returned, the converter will not descend into the DOM node's children; the model * will be assumed to have handled those children. *