Browse Source

Added #document property to view.UpcastWriter().

Kamil Piechaczek 5 years ago
parent
commit
cce531c3db

+ 13 - 5
packages/ckeditor5-engine/src/view/upcastwriter.js

@@ -29,12 +29,20 @@ import Selection from './selection';
  * Unlike `DowncastWriter`, which is available in the {@link module:engine/view/view~View#change `View#change()`} block,
  * `UpcastWriter` can be created wherever you need it:
  *
- *		const writer = new UpcastWriter();
+ *		const writer = new UpcastWriter( viewDocument );
  *		const text = writer.createText( 'foo!' );
  *
  *		writer.appendChild( text, someViewElement );
  */
 export default class UpcastWriter {
+	constructor( document ) {
+		/**
+		 * @readonly
+		 * @type {module:engine/view/document~Document}
+		 */
+		this.document = document;
+	}
+
 	/**
 	 * Creates a new {@link module:engine/view/documentfragment~DocumentFragment} instance.
 	 *
@@ -43,7 +51,7 @@ export default class UpcastWriter {
 	 * @returns {module:engine/view/documentfragment~DocumentFragment} The created document fragment.
 	 */
 	createDocumentFragment( children ) {
-		return new DocumentFragment( children );
+		return new DocumentFragment( this.document, children );
 	}
 
 	/**
@@ -62,7 +70,7 @@ export default class UpcastWriter {
 	 * @returns {module:engine/view/element~Element} Created element.
 	 */
 	createElement( name, attrs, children ) {
-		return new Element( name, attrs, children );
+		return new Element( this.document, name, attrs, children );
 	}
 
 	/**
@@ -72,7 +80,7 @@ export default class UpcastWriter {
 	 * @returns {module:engine/view/text~Text} The created text node.
 	 */
 	createText( data ) {
-		return new Text( data );
+		return new Text( this.document, data );
 	}
 
 	/**
@@ -201,7 +209,7 @@ export default class UpcastWriter {
 	 * was not replaced (happens for detached elements).
 	 */
 	rename( newName, element ) {
-		const newElement = new Element( newName, element.getAttributes(), element.getChildren() );
+		const newElement = new Element( this.document, newName, element.getAttributes(), element.getChildren() );
 
 		return this.replace( element, newElement ) ? newElement : null;
 	}

+ 12 - 10
packages/ckeditor5-engine/tests/view/upcastwriter.js

@@ -11,12 +11,14 @@ import HtmlDataProcessor from '../../src/dataprocessor/htmldataprocessor';
 import ViewPosition from '../../src/view/position';
 import ViewRange from '../../src/view/range';
 import ViewSelection from '../../src/view/selection';
+import Document from '../../src/view/document';
 
 describe( 'UpcastWriter', () => {
-	let writer, view, dataprocessor;
+	let writer, view, dataprocessor, document;
 
 	before( () => {
-		writer = new UpcastWriter();
+		document = new Document();
+		writer = new UpcastWriter( document );
 		dataprocessor = new HtmlDataProcessor();
 	} );
 
@@ -350,7 +352,7 @@ describe( 'UpcastWriter', () => {
 		} );
 
 		it( 'should do nothing for elements without parent', () => {
-			const element = new Element( 'p', null, 'foo' );
+			const element = new Element( document, 'p', null, 'foo' );
 
 			writer.unwrapElement( element );
 
@@ -382,7 +384,7 @@ describe( 'UpcastWriter', () => {
 		} );
 
 		it( 'should have no effect on detached element', () => {
-			const el = new Element( 'h2' );
+			const el = new Element( document, 'h2' );
 
 			const renamed = writer.rename( 'h3', el );
 
@@ -581,41 +583,41 @@ describe( 'UpcastWriter', () => {
 
 	describe( 'createPositionAt()', () => {
 		it( 'should return instance of Position', () => {
-			const span = new Element( 'span' );
+			const span = new Element( document, 'span' );
 			expect( writer.createPositionAt( span, 0 ) ).to.be.instanceof( ViewPosition );
 		} );
 	} );
 
 	describe( 'createPositionAfter()', () => {
 		it( 'should return instance of Position', () => {
-			const span = new Element( 'span', undefined, new Element( 'span' ) );
+			const span = new Element( document, 'span', undefined, new Element( document, 'span' ) );
 			expect( writer.createPositionAfter( span.getChild( 0 ) ) ).to.be.instanceof( ViewPosition );
 		} );
 	} );
 
 	describe( 'createPositionBefore()', () => {
 		it( 'should return instance of Position', () => {
-			const span = new Element( 'span', undefined, new Element( 'span' ) );
+			const span = new Element( document, 'span', undefined, new Element( document, 'span' ) );
 			expect( writer.createPositionBefore( span.getChild( 0 ) ) ).to.be.instanceof( ViewPosition );
 		} );
 	} );
 
 	describe( 'createRange()', () => {
 		it( 'should return instance of Range', () => {
-			expect( writer.createRange( writer.createPositionAt( new Element( 'span' ), 0 ) ) ).to.be.instanceof( ViewRange );
+			expect( writer.createRange( writer.createPositionAt( new Element( document, 'span' ), 0 ) ) ).to.be.instanceof( ViewRange );
 		} );
 	} );
 
 	describe( 'createRangeIn()', () => {
 		it( 'should return instance of Range', () => {
-			const span = new Element( 'span', undefined, new Element( 'span' ) );
+			const span = new Element( document, 'span', undefined, new Element( document, 'span' ) );
 			expect( writer.createRangeIn( span.getChild( 0 ) ) ).to.be.instanceof( ViewRange );
 		} );
 	} );
 
 	describe( 'createRangeOn()', () => {
 		it( 'should return instance of Range', () => {
-			const span = new Element( 'span', undefined, new Element( 'span' ) );
+			const span = new Element( document, 'span', undefined, new Element( document, 'span' ) );
 			expect( writer.createRangeOn( span.getChild( 0 ) ) ).to.be.instanceof( ViewRange );
 		} );
 	} );