From aa2b61139d995e1c539e37ad11d1b72a90ca6e62 Mon Sep 17 00:00:00 2001 From: Kamil Piechaczek Date: Thu, 19 Apr 2018 12:34:34 +0200 Subject: [PATCH] Introduced "engine/view/elementdefinition~ElementDefinition#priority" property. --- src/conversion/downcast-converters.js | 11 +++++++--- src/view/elementdefinition.jsdoc | 1 + tests/conversion/downcast-converters.js | 29 ++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/conversion/downcast-converters.js b/src/conversion/downcast-converters.js index 6482f36bf..687333162 100644 --- a/src/conversion/downcast-converters.js +++ b/src/conversion/downcast-converters.js @@ -370,14 +370,19 @@ function _createViewElementFromDefinition( viewElementDefinition, viewWriter, vi } let element; + const attributes = Object.assign( {}, viewElementDefinition.attributes ); if ( viewElementType == 'container' ) { - element = viewWriter.createContainerElement( viewElementDefinition.name, Object.assign( {}, viewElementDefinition.attributes ) ); + element = viewWriter.createContainerElement( viewElementDefinition.name, attributes ); } else if ( viewElementType == 'attribute' ) { - element = viewWriter.createAttributeElement( viewElementDefinition.name, Object.assign( {}, viewElementDefinition.attributes ) ); + const options = { + priority: viewElementDefinition.priority || ViewAttributeElement.DEFAULT_PRIORITY + }; + + element = viewWriter.createAttributeElement( viewElementDefinition.name, attributes, options ); } else { // 'ui'. - element = viewWriter.createUIElement( viewElementDefinition.name, Object.assign( {}, viewElementDefinition.attributes ) ); + element = viewWriter.createUIElement( viewElementDefinition.name, attributes ); } if ( viewElementDefinition.styles ) { diff --git a/src/view/elementdefinition.jsdoc b/src/view/elementdefinition.jsdoc index 0fada3c53..476728f7e 100644 --- a/src/view/elementdefinition.jsdoc +++ b/src/view/elementdefinition.jsdoc @@ -55,4 +55,5 @@ * Value under that key must be a string. * @property {Object} [attributes] Object with key-value pairs representing attributes. Each object key represents * attribute name. Value under that key must be a string. + * @property {Number} [priority] Element's {@link module:engine/view/attributeelement~AttributeElement#priority priority}. */ diff --git a/tests/conversion/downcast-converters.js b/tests/conversion/downcast-converters.js index c73059f5d..99626fa6a 100644 --- a/tests/conversion/downcast-converters.js +++ b/tests/conversion/downcast-converters.js @@ -14,6 +14,7 @@ import ModelRange from '../../src/model/range'; import ModelPosition from '../../src/model/position'; import ViewElement from '../../src/view/element'; +import ViewAttributeElement from '../../src/view/attributeelement'; import ViewContainerElement from '../../src/view/containerelement'; import ViewUIElement from '../../src/view/uielement'; import ViewText from '../../src/view/text'; @@ -148,6 +149,25 @@ describe( 'downcast-helpers', () => { } ); expectResult( 'foo' ); + expect( viewRoot.getChild( 0 ).priority ).to.equal( ViewAttributeElement.DEFAULT_PRIORITY ); + } ); + + it( 'config.view allows specifying the element\'s priority', () => { + const helper = downcastAttributeToElement( { + model: 'invert', + view: { + name: 'span', + priority: 5 + } + } ); + + conversion.for( 'downcast' ).add( helper ); + + model.change( writer => { + writer.insertText( 'foo', { invert: true }, modelRoot, 0 ); + } ); + + expect( viewRoot.getChild( 0 ).priority ).to.equal( 5 ); } ); it( 'model attribute value is enum', () => { @@ -167,7 +187,8 @@ describe( 'downcast-helpers', () => { name: 'span', styles: { 'font-size': '0.8em' - } + }, + priority: 5 } } } ); @@ -178,6 +199,7 @@ describe( 'downcast-helpers', () => { writer.insertText( 'foo', { fontSize: 'big' }, modelRoot, 0 ); } ); + expect( viewRoot.getChild( 0 ).priority ).to.equal( ViewAttributeElement.DEFAULT_PRIORITY ); expectResult( 'foo' ); model.change( writer => { @@ -185,6 +207,7 @@ describe( 'downcast-helpers', () => { } ); expectResult( 'foo' ); + expect( viewRoot.getChild( 0 ).priority ).to.equal( 5 ); model.change( writer => { writer.removeAttribute( 'fontSize', modelRoot.getChild( 0 ) ); @@ -1602,7 +1625,7 @@ describe( 'downcast-converters', () => { dispatcher.on( 'removeMarker:marker2', removeHighlight( () => null ) ); viewDiv._setCustomProperty( 'addHighlight', ( element, descriptor ) => { - expect( descriptor.priority ).to.equal( 10 ); + expect( descriptor.priority ).to.equal( ViewAttributeElement.DEFAULT_PRIORITY ); expect( descriptor.id ).to.equal( 'marker:foo-bar-baz' ); } ); @@ -1698,7 +1721,7 @@ describe( 'downcast-converters', () => { expect( element.is( 'attributeElement' ) ).to.be.true; expect( element.name ).to.equal( 'span' ); - expect( element.priority ).to.equal( 10 ); + expect( element.priority ).to.equal( ViewAttributeElement.DEFAULT_PRIORITY ); expect( element.hasClass( 'foo-class' ) ).to.be.true; for ( const key of Object.keys( descriptor.attributes ) ) {