diff --git a/src/indentblock.js b/src/indentblock.js index 4030248..102c8ef 100644 --- a/src/indentblock.js +++ b/src/indentblock.js @@ -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 { @@ -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' ) ); } diff --git a/tests/indentblock-integration.js b/tests/indentblock-integration.js index 7b659c8..6f79093 100644 --- a/tests/indentblock-integration.js +++ b/tests/indentblock-integration.js @@ -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(); @@ -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; } ); } ); @@ -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; } ); } ); @@ -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( '

foo

' ); + + const paragraph = doc.getRoot().getChild( 0 ); + + expect( paragraph.hasAttribute( 'blockIndent' ) ).to.be.true; + } ); + } ); + function createTestEditor( extraConfig = {} ) { return VirtualTestEditor .create( Object.assign( {