Skip to content

Commit

Permalink
Merge pull request #10740 from ckeditor/ci/1098-experimental-flag
Browse files Browse the repository at this point in the history
Other (engine): Introduced flag for experimental rendering mode for the editing view.

Other (media-embed, html-support): Enable experimental rendering in tests.
  • Loading branch information
niegowski authored Oct 22, 2021
2 parents bd7f292 + a4b6b05 commit 13f788a
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 10 deletions.
14 changes: 11 additions & 3 deletions packages/ckeditor5-engine/src/view/domconverter.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,14 @@ export default class DomConverter {
*/
this.renderingMode = options.renderingMode || 'editing';

/**
* Main switch for new rendering approach in the editing view.
*
* @protected
* @member {Boolean}
*/
this.experimentalRenderingMode = false;

/**
* The mode of a block filler used by the DOM converter.
*
Expand Down Expand Up @@ -241,7 +249,7 @@ export default class DomConverter {
* @returns {Boolean}
*/
shouldRenderAttribute( attributeKey, attributeValue ) {
if ( this.renderingMode === 'data' ) {
if ( !this.experimentalRenderingMode || this.renderingMode === 'data' ) {
return true;
}

Expand All @@ -259,7 +267,7 @@ export default class DomConverter {
*/
setContentOf( domElement, html ) {
// For data pipeline we pass the HTML as-is.
if ( this.renderingMode === 'data' ) {
if ( !this.experimentalRenderingMode || this.renderingMode === 'data' ) {
domElement.innerHTML = html;

return;
Expand Down Expand Up @@ -1478,7 +1486,7 @@ export default class DomConverter {
* @returns {Boolean}
*/
_shouldRenameElement( elementName ) {
return this.renderingMode == 'editing' && elementName == 'script';
return this.experimentalRenderingMode && this.renderingMode == 'editing' && elementName == 'script';
}

/**
Expand Down
16 changes: 16 additions & 0 deletions packages/ckeditor5-engine/tests/view/domconverter/domconverter.js
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,14 @@ describe( 'DomConverter', () => {
} );

describe( 'shouldRenderAttribute()', () => {
beforeEach( () => {
converter.experimentalRenderingMode = true;
} );

afterEach( () => {
converter.experimentalRenderingMode = false;
} );

it( 'should allow all in for data pipeline', () => {
expect( converter.shouldRenderAttribute( 'onclick', 'anything' ) ).to.be.false;
expect( converter.shouldRenderAttribute( 'anything', 'javascript:something' ) ).to.be.false;
Expand Down Expand Up @@ -564,6 +572,14 @@ describe( 'DomConverter', () => {
} );

describe( 'editing pipeline', () => {
beforeEach( () => {
converter.experimentalRenderingMode = true;
} );

afterEach( () => {
converter.experimentalRenderingMode = false;
} );

it( 'should remove certain attributes', () => {
const element = document.createElement( 'p' );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ describe( 'DomConverter', () => {
renderingMode: 'editing'
} );

converter.experimentalRenderingMode = true;
converter.bindElements( domImg, viewImg );

const domP = converter.viewToDom( viewP, document );
Expand Down Expand Up @@ -257,6 +258,7 @@ describe( 'DomConverter', () => {
converter = new DomConverter( viewDocument, {
renderingMode: 'editing'
} );
converter.experimentalRenderingMode = true;

const domP = converter.viewToDom( viewP, document );

Expand Down
15 changes: 8 additions & 7 deletions packages/ckeditor5-engine/tests/view/renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -3975,18 +3975,13 @@ describe( 'Renderer', () => {

beforeEach( () => {
view = new View( new StylesProcessor() );
view.domConverter.experimentalRenderingMode = true;

viewDoc = view.document;
domRoot = document.createElement( 'div' );
document.body.appendChild( domRoot );
viewRoot = createViewRoot( viewDoc );
view.attachDomRoot( domRoot );

viewDocument = new ViewDocument( new StylesProcessor() );
selection = new DocumentSelection();
// Enable editing render mode.
domConverter = new DomConverter( viewDocument, { renderingMode: 'editing' } );
renderer = new Renderer( domConverter, selection );
renderer.domDocuments.add( document );
} );

afterEach( () => {
Expand All @@ -3996,6 +3991,7 @@ describe( 'Renderer', () => {

it( 'should handle script tag rendering', () => {
window.spy = sinon.spy();

viewRoot._appendChild( parse( '<container:script>spy()</container:script>' ) );

renderer.markToSync( 'children', viewRoot );
Expand All @@ -4007,14 +4003,19 @@ describe( 'Renderer', () => {
} );

it( 'should replace script element with span and custom data attribute', () => {
window.spy = sinon.spy();

setViewData( view,
'<container:script>spy()</container:script>'
);

view.forceRender();

expect( window.spy.calledOnce ).to.be.false;
expect( getViewData( view ) ).to.equal( '<script>spy()</script>' );
expect( normalizeHtml( domRoot.innerHTML ) ).to.equal( '<span data-ck-hidden="script">spy()</span>' );

delete window.spy;
} );

it( 'should remove attributes that can affect editing pipeline', () => {
Expand Down
4 changes: 4 additions & 0 deletions packages/ckeditor5-html-support/tests/datafilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ describe( 'DataFilter', () => {
'</paragraph>'
);

editor.editing.view.domConverter.experimentalRenderingMode = true;

expect( getViewData( editor.editing.view, {
withoutSelection: true,
renderRawElements: true,
Expand All @@ -203,6 +205,8 @@ describe( 'DataFilter', () => {
'</p>'
);

editor.editing.view.domConverter.experimentalRenderingMode = false;

expect( editor.getData() ).to.equal( '<p><video>' +
'<source src="https://example.com/video.mp4" type="video/mp4" onclick="action()">' +
'Your browser does not support the video tag.</video>' +
Expand Down
1 change: 1 addition & 0 deletions packages/ckeditor5-media-embed/tests/mediaembedediting.js
Original file line number Diff line number Diff line change
Expand Up @@ -1062,6 +1062,7 @@ describe( 'MediaEmbedEditing', () => {
provider
]
} ).then( editor => {
editor.editing.view.domConverter.experimentalRenderingMode = true;
editor.setData( '<figure class="media"><div data-oembed-url="foo.com"></div></figure>' );

expect( getViewData( editor.editing.view, {
Expand Down

0 comments on commit 13f788a

Please sign in to comment.