Bladeren bron

Aligned IframeView to the View#render API. Code refactoring.

Aleksander Nowodzinski 8 jaren geleden
bovenliggende
commit
bb86bd6840
2 gewijzigde bestanden met toevoegingen van 22 en 40 verwijderingen
  1. 13 32
      packages/ckeditor5-ui/src/iframe/iframeview.js
  2. 9 8
      packages/ckeditor5-ui/tests/iframe/iframeview.js

+ 13 - 32
packages/ckeditor5-ui/src/iframe/iframeview.js

@@ -8,7 +8,6 @@
  */
 
 import View from '../view';
-import Template from '../template';
 
 /**
  * The iframe view class.
@@ -26,7 +25,7 @@ export default class IframeView extends View {
 
 		const bind = this.bindTemplate;
 
-		this.template = new Template( {
+		this.setTemplate( {
 			tag: 'iframe',
 			attributes: {
 				class: [ 'ck-reset_all' ],
@@ -38,45 +37,27 @@ export default class IframeView extends View {
 				load: bind.to( 'loaded' )
 			}
 		} );
-
-		/**
-		 * A promise returned by {@link #init} since iframe loading may be asynchronous.
-		 *
-		 * **Note**: Listening to `load` in {@link #init} makes no sense because at this point
-		 * the element is already in the DOM and the `load` event might already be fired.
-		 *
-		 * See {@link #_iframeDeferred}.
-		 *
-		 * @private
-		 * @member {Promise}
-		 */
-		this._iframePromise = new Promise( ( resolve, reject ) => {
-			/**
-			 * A deferred object used to resolve the iframe promise associated with
-			 * asynchronous loading of `contentDocument`. See {@link #_iframePromise}.
-			 *
-			 * @private
-			 * @member {Object}
-			 */
-			this._iframeDeferred = { resolve, reject };
-		} );
-
-		this.on( 'loaded', () => {
-			this._iframeDeferred.resolve();
-		} );
 	}
 
 	/**
-	 * Initializes iframe {@link #element} and returns a `Promise` for asynchronous
+	 * Renders the iframe's {@link #element} and returns a `Promise` for asynchronous
 	 * child `contentDocument` loading process. See {@link #_iframePromise}.
 	 *
 	 * @returns {Promise} A promise which resolves once the iframe `contentDocument` has
 	 * been {@link #event:loaded}.
 	 */
-	init() {
-		super.init();
+	render() {
+		let deferred = {};
 
-		return this._iframePromise;
+		this.on( 'loaded', () => {
+			deferred.resolve();
+		} );
+
+		super.render();
+
+		return new Promise( ( resolve, reject ) => {
+			deferred = { resolve, reject };
+		} );
 	}
 }
 

+ 9 - 8
packages/ckeditor5-ui/tests/iframe/iframeview.js

@@ -13,6 +13,7 @@ describe( 'IframeView', () => {
 	describe( 'constructor()', () => {
 		it( 'creates view element from the template', () => {
 			view = new IframeView();
+			view.render();
 			document.body.appendChild( view.element );
 
 			expect( view.element.classList.contains( 'ck-reset_all' ) ).to.be.true;
@@ -20,19 +21,20 @@ describe( 'IframeView', () => {
 		} );
 	} );
 
-	describe( 'init', () => {
-		it( 'returns promise', () => {
+	describe( 'render', () => {
+		it( 'returns a promise', () => {
 			view = new IframeView();
 
-			expect( view.init() ).to.be.an.instanceof( Promise );
+			expect( view.render() ).to.be.an.instanceof( Promise );
 		} );
 
 		it( 'returns promise which is resolved when iframe finished loading', () => {
 			view = new IframeView();
 
-			const promise = view.init().then( () => {
-				expect( view.element.contentDocument.readyState ).to.equal( 'complete' );
-			} );
+			const promise = view.render()
+				.then( () => {
+					expect( view.element.contentDocument.readyState ).to.equal( 'complete' );
+				} );
 
 			// Moving iframe into DOM trigger creation of a document inside iframe.
 			document.body.appendChild( view.element );
@@ -46,8 +48,7 @@ describe( 'IframeView', () => {
 			view = new IframeView();
 
 			view.on( 'loaded', () => done() );
-
-			view.init();
+			view.render();
 
 			// Moving iframe into DOM trigger creation of a document inside iframe.
 			document.body.appendChild( view.element );