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

Commit

Permalink
Merge pull request #20 from ckeditor/t/19
Browse files Browse the repository at this point in the history
Fix: `IndentBlock` should integrate with other features regardless of the editor plugin order. Closes ckeditor/ckeditor5#2359.
  • Loading branch information
oleq authored Oct 10, 2019
2 parents 54eeb4c + 26e0ed3 commit cf15eab
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 17 deletions.
25 changes: 13 additions & 12 deletions src/indentblock.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,26 +48,16 @@ export default class IndentBlock extends Plugin {
*/
init() {
const editor = this.editor;
const schema = editor.model.schema;
const conversion = editor.conversion;
const configuration = editor.config.get( 'indentBlock' );

// Enable block indentation by default in paragraph and default headings.
const knownElements = [ 'paragraph', 'heading1', 'heading2', 'heading3', 'heading4', 'heading5', 'heading6' ];

knownElements.forEach( elementName => {
if ( schema.isRegistered( elementName ) ) {
schema.extend( elementName, { allowAttributes: 'blockIndent' } );
}
} );

const useOffsetConfig = !configuration.classes || !configuration.classes.length;

const indentConfig = Object.assign( { direction: 'forward' }, configuration );
const outdentConfig = Object.assign( { direction: 'backward' }, configuration );

if ( useOffsetConfig ) {
this._setupConversionUsingOffset( conversion );
this._setupConversionUsingOffset( editor.conversion );

editor.commands.add( 'indentBlock', new IndentBlockCommand( editor, new IndentUsingOffset( indentConfig ) ) );
editor.commands.add( 'outdentBlock', new IndentBlockCommand( editor, new IndentUsingOffset( outdentConfig ) ) );
} else {
Expand All @@ -82,9 +72,20 @@ export default class IndentBlock extends Plugin {
*/
afterInit() {
const editor = this.editor;
const schema = editor.model.schema;

const indentCommand = editor.commands.get( 'indent' );
const outdentCommand = editor.commands.get( 'outdent' );

// Enable block indentation by default in paragraph and default headings.
const knownElements = [ 'paragraph', 'heading1', 'heading2', 'heading3', 'heading4', 'heading5', 'heading6' ];

knownElements.forEach( elementName => {
if ( schema.isRegistered( elementName ) ) {
schema.extend( elementName, { allowAttributes: 'blockIndent' } );
}
} );

indentCommand.registerChildCommand( editor.commands.get( 'indentBlock' ) );
outdentCommand.registerChildCommand( editor.commands.get( 'outdentBlock' ) );
}
Expand Down
25 changes: 20 additions & 5 deletions tests/indentblock-integration.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import IndentEditing from '../src/indentediting';
import IndentBlock from '../src/indentblock';

describe( 'IndentBlock - integration', () => {
let editor, model, doc;
let editor, doc;

testUtils.createSinonSandbox();

Expand All @@ -28,8 +28,7 @@ describe( 'IndentBlock - integration', () => {
return createTestEditor( { indentBlock: { offset: 50, unit: 'px' } } )
.then( newEditor => {
editor = newEditor;
model = editor.model;
doc = model.document;
doc = editor.model.document;
} );
} );

Expand All @@ -54,8 +53,7 @@ describe( 'IndentBlock - integration', () => {
indentBlock: { offset: 50, unit: 'px' }
} ).then( newEditor => {
editor = newEditor;
model = editor.model;
doc = model.document;
doc = editor.model.document;
} );
} );

Expand All @@ -73,6 +71,23 @@ describe( 'IndentBlock - integration', () => {
} );
} );

// https://github.com/ckeditor/ckeditor5/issues/2359
it( 'should work with paragraphs regardless of plugin order', () => {
return createTestEditor( {
plugins: [ IndentEditing, IndentBlock, Paragraph, HeadingEditing ],
indentBlock: { offset: 50, unit: 'px' }
} ).then( newEditor => {
editor = newEditor;
doc = editor.model.document;

editor.setData( '<p style="margin-left:50px">foo</p>' );

const paragraph = doc.getRoot().getChild( 0 );

expect( paragraph.hasAttribute( 'blockIndent' ) ).to.be.true;
} );
} );

function createTestEditor( extraConfig = {} ) {
return VirtualTestEditor
.create( Object.assign( {
Expand Down

0 comments on commit cf15eab

Please sign in to comment.