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

Make IndentBlock work regardless of editor plugins order. #20

Merged
merged 3 commits into from
Oct 10, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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' ];
oleq marked this conversation as resolved.
Show resolved Hide resolved

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