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

Using writer to remove class from view element.

Szymon Kupś 8 лет назад
Родитель
Сommit
3a534164fd

+ 16 - 14
packages/ckeditor5-engine/src/view/element.js

@@ -419,20 +419,6 @@ export default class Element extends Node {
 		return true;
 	}
 
-	/**
-	 * Removes specified class.
-	 *
- 	 *		element.removeClass( 'foo' );  // Removes 'foo' class.
-	 *		element.removeClass( 'foo', 'bar' ); // Removes both 'foo' and 'bar' classes.
-	 *
-	 * @param {...String} className
-	 * @fires module:engine/view/node~Node#change
-	 */
-	removeClass( ...className ) {
-		this._fireChange( 'attributes', this );
-		className.forEach( name => this._classes.delete( name ) );
-	}
-
 	/**
 	 * Returns true if class is present.
 	 * If more then one class is provided - returns true only when all classes are present.
@@ -716,6 +702,22 @@ export default class Element extends Node {
 		className.forEach( name => this._classes.add( name ) );
 	}
 
+	/**
+	 * Removes specified class.
+	 *
+	 *		element._removeClass( 'foo' );  // Removes 'foo' class.
+	 *		element._removeClass( [ 'foo', 'bar' ] ); // Removes both 'foo' and 'bar' classes.
+	 *
+	 * @param {Array.<String>|String} className
+	 * @fires module:engine/view/node~Node#change
+	 */
+	_removeClass( className ) {
+		this._fireChange( 'attributes', this );
+
+		className = Array.isArray( className ) ? className : [ className ];
+		className.forEach( name => this._classes.delete( name ) );
+	}
+
 	/**
 	 * Returns block {@link module:engine/view/filler filler} offset or `null` if block filler is not needed.
 	 *

+ 3 - 3
packages/ckeditor5-engine/src/view/placeholder.js

@@ -59,7 +59,7 @@ export function attachPlaceholder( view, element, placeholderText, checkFunction
 export function detachPlaceholder( element ) {
 	const document = element.document;
 
-	element.removeClass( 'ck-placeholder' );
+	element._removeClass( 'ck-placeholder' );
 	element._removeAttribute( 'data-placeholder' );
 
 	if ( documentPlaceholders.has( document ) ) {
@@ -97,7 +97,7 @@ function updateSinglePlaceholder( element, checkFunction ) {
 
 	// If checkFunction is provided and returns false - remove placeholder.
 	if ( checkFunction && !checkFunction() ) {
-		element.removeClass( 'ck-placeholder' );
+		element._removeClass( 'ck-placeholder' );
 
 		return;
 	}
@@ -117,6 +117,6 @@ function updateSinglePlaceholder( element, checkFunction ) {
 	if ( isEmptyish && anchor && anchor.parent !== element ) {
 		element._addClass( 'ck-placeholder' );
 	} else {
-		element.removeClass( 'ck-placeholder' );
+		element._removeClass( 'ck-placeholder' );
 	}
 }

+ 5 - 1
packages/ckeditor5-engine/src/view/writer.js

@@ -194,6 +194,10 @@ export default class Writer {
 		element._addClass( className );
 	}
 
+	removeClass( className, element ) {
+		element._removeClass( className );
+	}
+
 	/**
 	 * Breaks attribute nodes at provided position or at boundaries of provided range. It breaks attribute elements inside
 	 * up to a container element.
@@ -1109,7 +1113,7 @@ export default class Writer {
 		}
 
 		// Remove all wrapper's classes from unwrapped element.
-		toUnwrap.removeClass( ...wrapper.getClassNames() );
+		this.removeClass( Array.from( wrapper.getClassNames() ), toUnwrap );
 
 		// Remove all wrapper's styles from unwrapped element.
 		toUnwrap.removeStyle( ...wrapper.getStyleNames() );

+ 4 - 4
packages/ckeditor5-engine/tests/view/element.js

@@ -679,11 +679,11 @@ describe( 'Element', () => {
 			} );
 		} );
 
-		describe( 'removeClass', () => {
+		describe( '_removeClass()', () => {
 			it( 'should remove single class', () => {
 				el._addClass( [ 'one', 'two', 'three' ] );
 
-				el.removeClass( 'one' );
+				el._removeClass( 'one' );
 
 				expect( el._classes.has( 'one' ) ).to.be.false;
 				expect( el._classes.has( 'two' ) ).to.be.true;
@@ -697,12 +697,12 @@ describe( 'Element', () => {
 					done();
 				} );
 
-				el.removeClass( 'one' );
+				el._removeClass( 'one' );
 			} );
 
 			it( 'should remove multiple classes', () => {
 				el._addClass( [ 'one', 'two', 'three', 'four' ] );
-				el.removeClass( 'one', 'two', 'three' );
+				el._removeClass( [ 'one', 'two', 'three' ] );
 
 				expect( el._classes.has( 'one' ) ).to.be.false;
 				expect( el._classes.has( 'two' ) ).to.be.false;