Skip to content
This repository has been archived by the owner on Jun 26, 2020. It is now read-only.

Commit

Permalink
"view.Text#data" is protected now.
Browse files Browse the repository at this point in the history
  • Loading branch information
Kamil Piechaczek committed Mar 7, 2018
1 parent 28d2fe8 commit bf2f76a
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 30 deletions.
2 changes: 1 addition & 1 deletion src/dev-utils/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,7 @@ class RangeParser {
}

text = text.replace( regexp, '' );
node.data = text;
node._data = text;
const index = node.index;
const parent = node.parent;

Expand Down
57 changes: 41 additions & 16 deletions src/view/text.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,9 @@ export default class Text extends Node {
* Setting the data fires the {@link module:engine/view/node~Node#event:change:text change event}.
*
* @protected
* @member {String} module:engine/view/text~Text#_data
* @member {String} module:engine/view/text~Text#_textData
*/
this._data = data;
}

/**
* Clones this node.
*
* @protected
* @returns {module:engine/view/text~Text} Text node that is a clone of this node.
*/
_clone() {
return new Text( this.data );
this._textData = data;
}

/**
Expand All @@ -58,16 +48,41 @@ export default class Text extends Node {
/**
* The text content.
*
* Setting the data fires the {@link module:engine/view/node~Node#event:change:text change event}.
* @returns {String}
*/
get data() {
return this._data;
return this._textData;
}

set data( data ) {
/**
* This getter is required when using the addition assignment operator on protected property:
*
* const foo = new Text( 'foo' );
* const bar = new Text( 'bar' );
*
* foo._data += bar.data; // executes: `foo._data = foo._data + bar.data`
* console.log( foo.data ); // prints: 'foobar'
*
* If the protected getter didn't exist, `foo._data` will return `undefined` and result of the merge will be invalid.
*
* @protected
* @returns {String}
*/
get _data() {
return this.data;
}

/**
* Sets data and fires the {@link module:engine/view/node~Node#event:change:text change event}.
*
* @protected
* @fires change:text
* @param {String} data New data for the text node.
*/
set _data( data ) {
this._fireChange( 'text', this );

this._data = data;
this._textData = data;
}

/**
Expand All @@ -84,4 +99,14 @@ export default class Text extends Node {

return this === otherNode || this.data === otherNode.data;
}

/**
* Clones this node.
*
* @protected
* @returns {module:engine/view/text~Text} Text node that is a clone of this node.
*/
_clone() {
return new Text( this.data );
}
}
4 changes: 2 additions & 2 deletions src/view/writer.js
Original file line number Diff line number Diff line change
Expand Up @@ -1482,7 +1482,7 @@ function breakTextNode( position ) {
const textToMove = position.parent.data.slice( position.offset );

// Leave rest of the text in position's parent.
position.parent.data = position.parent.data.slice( 0, position.offset );
position.parent._data = position.parent.data.slice( 0, position.offset );

// Insert new text node after position's parent text node.
position.parent.parent._insertChildren( position.parent.index + 1, new Text( textToMove ) );
Expand All @@ -1500,7 +1500,7 @@ function breakTextNode( position ) {
function mergeTextNodes( t1, t2 ) {
// Merge text data into first text node and remove second one.
const nodeBeforeLength = t1.data.length;
t1.data += t2.data;
t1._data += t2.data;
t2._remove();

return new Position( t1, nodeBeforeLength );
Expand Down
6 changes: 3 additions & 3 deletions tests/view/node.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ describe( 'Node', () => {
const parsed = JSON.parse( json );

expect( parsed ).to.deep.equal( {
_data: 'a'
_textData: 'a'
} );
} );
} );
Expand Down Expand Up @@ -380,9 +380,9 @@ describe( 'Node', () => {
} );
} );

describe( '_removeChildren()', () => {
describe( 'setText', () => {
it( 'should fire change event', () => {
text.data = 'bar';
text._data = 'bar';

sinon.assert.calledOnce( rootChangeSpy );
sinon.assert.calledWith( rootChangeSpy, 'text', text );
Expand Down
12 changes: 6 additions & 6 deletions tests/view/renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ describe( 'Renderer', () => {
it( 'should mark text which need update', () => {
const viewText = new ViewText( 'foo' );
viewRoot._appendChildren( viewText );
viewText.data = 'bar';
viewText._data = 'bar';

renderer.markToSync( 'text', viewText );

Expand All @@ -93,7 +93,7 @@ describe( 'Renderer', () => {
viewRoot = new ViewElement( 'p' );

viewRoot._appendChildren( viewText );
viewText.data = 'bar';
viewText._data = 'bar';

renderer.markToSync( 'text', viewText );

Expand Down Expand Up @@ -205,7 +205,7 @@ describe( 'Renderer', () => {
expect( domRoot.childNodes.length ).to.equal( 1 );
expect( domRoot.childNodes[ 0 ].data ).to.equal( 'foo' );

viewText.data = 'bar';
viewText._data = 'bar';

renderer.markToSync( 'text', viewText );
renderer.render();
Expand Down Expand Up @@ -1914,7 +1914,7 @@ describe( 'Renderer', () => {
writer.unwrap( viewDoc.selection.getFirstRange(), new ViewAttributeElement( 'italic' ) );
} );

viewRoot.getChild( 0 ).getChild( 0 ).getChild( 0 ).data = 'bar';
viewRoot.getChild( 0 ).getChild( 0 ).getChild( 0 )._data = 'bar';
expect( getViewData( view ) ).to.equal( '<p>[<strong>bar</strong>]</p>' );

// Re-render changes in view to DOM.
Expand All @@ -1935,7 +1935,7 @@ describe( 'Renderer', () => {

// Change text and insert new element into paragraph.
const textNode = viewRoot.getChild( 0 ).getChild( 0 );
textNode.data = 'foobar';
textNode._data = 'foobar';

view.change( writer => {
writer.insert( ViewPosition.createAfter( textNode ), new ViewAttributeElement( 'img' ) );
Expand All @@ -1961,7 +1961,7 @@ describe( 'Renderer', () => {

// Change text and insert new element into paragraph.
const textNode = viewRoot.getChild( 0 ).getChild( 0 );
textNode.data = 'foobar';
textNode._data = 'foobar';

view.change( writer => {
writer.insert( ViewPosition.createBefore( textNode ), new ViewAttributeElement( 'img' ) );
Expand Down
12 changes: 10 additions & 2 deletions tests/view/text.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ describe( 'Text', () => {

it( 'should return false when data is not the same', () => {
const other = text._clone();
other.data = 'not-foo';
other._data = 'not-foo';

expect( text.isSimilar( other ) ).to.be.false;
} );
Expand All @@ -79,9 +79,17 @@ describe( 'Text', () => {
describe( 'setText', () => {
it( 'should change the text', () => {
const text = new Text( 'foo' );
text.data = 'bar';
text._data = 'bar';

expect( text.data ).to.equal( 'bar' );
} );

it( 'works when using addition assignment operator (+=)', () => {
const foo = new Text( 'foo' );
const bar = new Text( 'bar' );

foo._data += bar.data;
expect( foo.data ).to.equal( 'foobar' );
} );
} );
} );

0 comments on commit bf2f76a

Please sign in to comment.