8
0
Просмотр исходного кода

Created View#setTemplate and View#extendTemplate methods.

Aleksander Nowodzinski 8 лет назад
Родитель
Сommit
2f3d5c5117
2 измененных файлов с 78 добавлено и 0 удалено
  1. 30 0
      packages/ckeditor5-ui/src/view.js
  2. 48 0
      packages/ckeditor5-ui/tests/view.js

+ 30 - 0
packages/ckeditor5-ui/src/view.js

@@ -369,6 +369,36 @@ export default class View {
 		}
 	}
 
+	/**
+	 * Sets the {@link #template} of the view with with given definition.
+	 *
+	 * A shorthand for:
+	 *
+	 *		view.template = new Template( definition );
+	 *
+	 * @param {@link module:ui/template~TemplateDefinition} definition Definition of view's template.
+	 */
+	setTemplate( definition ) {
+		this.template = new Template( definition );
+	}
+
+	/**
+	 * {@link module:ui/template~Template.extend Extends} the {@link #template} of the view with
+	 * with given definition.
+	 *
+	 * A shorthand for:
+	 *
+	 *		Template.extend( view.template, definition );
+	 *
+	 * **Note**: Is requires the {@link #template} to be already set. See {@link #setTemplate}.
+	 *
+	 * @param {@link module:ui/template~TemplateDefinition} definition Definition which
+	 * extends the {@link #template}.
+	 */
+	extendTemplate( definition ) {
+		Template.extend( this.template, definition );
+	}
+
 	/**
 	 * Recursively renders the view.
 	 *

+ 48 - 0
packages/ckeditor5-ui/tests/view.js

@@ -11,6 +11,7 @@ import Template from '../src/template';
 import CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';
 import Collection from '@ckeditor/ckeditor5-utils/src/collection';
 import ViewCollection from '../src/viewcollection';
+import normalizeHtml from '@ckeditor/ckeditor5-utils/tests/_utils/normalizehtml';
 
 let TestView, view, childA, childB;
 
@@ -138,6 +139,53 @@ describe( 'View', () => {
 		} );
 	} );
 
+	describe( 'setTemplate()', () => {
+		it( 'sets the template', () => {
+			const view = new View();
+			const bind = view.bindTemplate;
+
+			view.set( 'foo', 'bar' );
+
+			view.setTemplate( {
+				tag: 'div',
+				attributes: {
+					class: [
+						bind.to( 'foo' )
+					]
+				}
+			} );
+
+			view.render();
+
+			expect( normalizeHtml( view.element.outerHTML ) ).to.equal( '<div class="bar"></div>' );
+		} );
+	} );
+
+	describe( 'extendTemplate()', () => {
+		it( 'extends the template', () => {
+			const view = new View();
+			const bind = view.bindTemplate;
+
+			view.set( 'foo', 'bar' );
+
+			view.setTemplate( {
+				tag: 'div'
+			} );
+
+			view.extendTemplate( {
+				attributes: {
+					class: [
+						bind.to( 'foo' )
+					]
+				}
+			} );
+
+			view.render();
+
+			expect( normalizeHtml( view.element.outerHTML ) ).to.equal( '<div class="bar"></div>' );
+		} );
+	} );
+
 	describe( 'render()', () => {
 		it( 'should throw if already rendered', () => {
 			const view = new View();