Explorar el Código

StylesMap.getAsString() will return undefined for missing properties.

Maciej Gołaszewski hace 6 años
padre
commit
dcb05dc9e4

+ 1 - 1
packages/ckeditor5-engine/src/view/element.js

@@ -404,7 +404,7 @@ export default class Element extends Node {
 	 * @returns {String|undefined}
 	 */
 	getStyle( property ) {
-		return this._styles.has( property ) ? this._styles.getAsString( property ) : undefined;
+		return this._styles.getAsString( property );
 	}
 
 	/**

+ 16 - 7
packages/ckeditor5-engine/src/view/stylesmap.js

@@ -47,7 +47,10 @@ export default class StylesMap {
 	 * @returns {Boolean}
 	 */
 	get isEmpty() {
-		return !Object.entries( this._styles ).length;
+		const entries = Object.entries( this._styles );
+		const from = Array.from( entries );
+
+		return !from.length;
 	}
 
 	/**
@@ -73,7 +76,9 @@ export default class StylesMap {
 	setTo( inlineStyle ) {
 		this.clear();
 
-		for ( const [ key, value ] of Array.from( parseInlineStyles( inlineStyle ).entries() ) ) {
+		const parsedStyles = Array.from( parseInlineStyles( inlineStyle ).entries() );
+
+		for ( const [ key, value ] of parsedStyles ) {
 			this._styleProcessor.toNormalizedForm( key, value, this._styles );
 		}
 	}
@@ -261,7 +266,7 @@ export default class StylesMap {
 	}
 
 	/**
-	 * Returns property as a value string.
+	 * Returns property as a value string or undefined if property is not set.
 	 *
 	 *		// Enable 'margin' shorthand processing:
 	 *		editor.editing.view.document.addStyleProcessorRules( addMarginStylesProcessor );
@@ -280,7 +285,7 @@ export default class StylesMap {
 	 */
 	getAsString( propertyName ) {
 		if ( this.isEmpty ) {
-			return '';
+			return;
 		}
 
 		if ( this._styles[ propertyName ] && !isObject( this._styles[ propertyName ] ) ) {
@@ -295,8 +300,6 @@ export default class StylesMap {
 		// Only return a value if it is set;
 		if ( Array.isArray( propertyDescriptor ) ) {
 			return propertyDescriptor[ 1 ];
-		} else {
-			return '';
 		}
 	}
 
@@ -439,7 +442,8 @@ export class StylesProcessor {
 			return merge( {}, styles );
 		}
 
-		if ( styles[ name ] ) {
+		// Might be empty string.
+		if ( styles[ name ] !== undefined ) {
 			return styles[ name ];
 		}
 
@@ -470,6 +474,11 @@ export class StylesProcessor {
 	getReducedForm( name, styles ) {
 		const normalizedValue = this.getNormalized( name, styles );
 
+		// Might be empty string.
+		if ( normalizedValue === undefined ) {
+			return [];
+		}
+
 		if ( this._reducers.has( name ) ) {
 			const reducer = this._reducers.get( name );
 

+ 13 - 13
packages/ckeditor5-engine/tests/view/styles/borderstyles.js

@@ -99,7 +99,7 @@ describe( 'Border styles normalization', () => {
 			'border-top:7px dotted #ccc;'
 		);
 
-		expect( styles.getAsString( 'border' ) ).to.equal( '' );
+		expect( styles.getAsString( 'border' ) ).to.be.undefined;
 		expect( styles.getAsString( 'border-color' ) ).to.equal( '#ccc blue blue #665511' );
 		expect( styles.getAsString( 'border-style' ) ).to.equal( 'dotted solid solid dashed' );
 		expect( styles.getAsString( 'border-width' ) ).to.equal( '7px 1px 1px 2.7em' );
@@ -146,7 +146,7 @@ describe( 'Border styles normalization', () => {
 			'border-right:1px solid blue;' +
 			'border-top:7px dotted #ccc;'
 		);
-		expect( styles.getAsString( 'border' ) ).to.equal( '' );
+		expect( styles.getAsString( 'border' ) ).to.be.undefined;
 		expect( styles.getAsString( 'border-color' ) ).to.equal( '#ccc blue blue #665511' );
 		expect( styles.getAsString( 'border-style' ) ).to.equal( 'dotted solid solid dashed' );
 		expect( styles.getAsString( 'border-width' ) ).to.equal( '7px 1px 1px 2.7em' );
@@ -163,8 +163,8 @@ describe( 'Border styles normalization', () => {
 			'border-top:1px solid;'
 		);
 
-		expect( styles.getAsString( 'border' ) ).to.equal( '' );
-		expect( styles.getAsString( 'border-color' ) ).to.equal( '' );
+		expect( styles.getAsString( 'border' ) ).to.be.undefined;
+		expect( styles.getAsString( 'border-color' ) ).to.be.undefined;
 		expect( styles.getAsString( 'border-style' ) ).to.equal( 'solid' );
 		expect( styles.getAsString( 'border-width' ) ).to.equal( '1px' );
 		expect( styles.getAsString( 'border-top' ) ).to.equal( '1px solid' );
@@ -182,10 +182,10 @@ describe( 'Border styles normalization', () => {
 			'border-right:solid;' +
 			'border-top:solid;'
 		);
-		expect( styles.getAsString( 'border' ) ).to.equal( '' );
-		expect( styles.getAsString( 'border-color' ) ).to.equal( '' );
+		expect( styles.getAsString( 'border' ) ).to.be.undefined;
+		expect( styles.getAsString( 'border-color' ) ).to.be.undefined;
 		expect( styles.getAsString( 'border-style' ) ).to.equal( 'solid' );
-		expect( styles.getAsString( 'border-width' ) ).to.equal( '' );
+		expect( styles.getAsString( 'border-width' ) ).to.be.undefined;
 		expect( styles.getAsString( 'border-top' ) ).to.equal( 'solid' );
 		expect( styles.getAsString( 'border-right' ) ).to.equal( 'solid' );
 		expect( styles.getAsString( 'border-bottom' ) ).to.equal( 'solid' );
@@ -201,10 +201,10 @@ describe( 'Border styles normalization', () => {
 			'border-right:#f00;' +
 			'border-top:#f00;'
 		);
-		expect( styles.getAsString( 'border' ) ).to.equal( '' );
+		expect( styles.getAsString( 'border' ) ).to.be.undefined;
 		expect( styles.getAsString( 'border-color' ) ).to.equal( '#f00' );
-		expect( styles.getAsString( 'border-style' ) ).to.equal( '' );
-		expect( styles.getAsString( 'border-width' ) ).to.equal( '' );
+		expect( styles.getAsString( 'border-style' ) ).to.be.undefined;
+		expect( styles.getAsString( 'border-width' ) ).to.be.undefined;
 		expect( styles.getAsString( 'border-top' ) ).to.equal( '#f00' );
 		expect( styles.getAsString( 'border-right' ) ).to.equal( '#f00' );
 		expect( styles.getAsString( 'border-bottom' ) ).to.equal( '#f00' );
@@ -220,9 +220,9 @@ describe( 'Border styles normalization', () => {
 			'border-right:1px;' +
 			'border-top:1px;'
 		);
-		expect( styles.getAsString( 'border' ) ).to.equal( '' );
-		expect( styles.getAsString( 'border-color' ) ).to.equal( '' );
-		expect( styles.getAsString( 'border-style' ) ).to.equal( '' );
+		expect( styles.getAsString( 'border' ) ).to.be.undefined;
+		expect( styles.getAsString( 'border-color' ) ).to.be.undefined;
+		expect( styles.getAsString( 'border-style' ) ).to.be.undefined;
 		expect( styles.getAsString( 'border-width' ) ).to.equal( '1px' );
 		expect( styles.getAsString( 'border-top' ) ).to.equal( '1px' );
 		expect( styles.getAsString( 'border-right' ) ).to.equal( '1px' );

+ 2 - 2
packages/ckeditor5-engine/tests/view/stylesmap.js

@@ -215,14 +215,14 @@ describe( 'StylesMap', () => {
 		it( 'should do nothing if property is not set', () => {
 			stylesMap.remove( 'color' );
 
-			expect( stylesMap.getAsString( 'color' ) ).to.equal( '' );
+			expect( stylesMap.getAsString( 'color' ) ).to.be.undefined;
 		} );
 
 		it( 'should insert new property (other properties are set)', () => {
 			stylesMap.setTo( 'color:blue' );
 			stylesMap.remove( 'color' );
 
-			expect( stylesMap.getAsString( 'color' ) ).to.equal( '' );
+			expect( stylesMap.getAsString( 'color' ) ).to.be.undefined;
 		} );
 
 		it( 'should remove normalized property', () => {