ckeditor5-image-upload-base64
Version:
The development environment of CKEditor 5 – the best browser-based rich text editor.
67 lines (56 loc) • 2.16 kB
JavaScript
/**
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module restricted-editing/restrictededitingexceptioncommand
*/
import Command from '@ckeditor/ckeditor5-core/src/command';
/**
* @extends module:core/command~Command
*/
export default class RestrictedEditingExceptionCommand extends Command {
/**
* @inheritDoc
*/
refresh() {
const model = this.editor.model;
const doc = model.document;
this.value = !!doc.selection.getAttribute( 'restrictedEditingException' );
this.isEnabled = model.schema.checkAttributeInSelection( doc.selection, 'restrictedEditingException' );
}
/**
* @inheritDoc
*/
execute( options = {} ) {
const model = this.editor.model;
const document = model.document;
const selection = document.selection;
const valueToSet = ( options.forceValue === undefined ) ? !this.value : options.forceValue;
model.change( writer => {
const ranges = model.schema.getValidRanges( selection.getRanges(), 'restrictedEditingException' );
if ( selection.isCollapsed ) {
if ( valueToSet ) {
writer.setSelectionAttribute( 'restrictedEditingException', valueToSet );
} else {
const isSameException = value => value.item.getAttribute( 'restrictedEditingException' ) === this.value;
const exceptionStart = selection.focus.getLastMatchingPosition( isSameException, { direction: 'backward' } );
const exceptionEnd = selection.focus.getLastMatchingPosition( isSameException );
const focus = selection.focus;
writer.removeSelectionAttribute( 'restrictedEditingException' );
if ( !( focus.isEqual( exceptionStart ) || focus.isEqual( exceptionEnd ) ) ) {
writer.removeAttribute( 'restrictedEditingException', writer.createRange( exceptionStart, exceptionEnd ) );
}
}
} else {
for ( const range of ranges ) {
if ( valueToSet ) {
writer.setAttribute( 'restrictedEditingException', valueToSet, range );
} else {
writer.removeAttribute( 'restrictedEditingException', range );
}
}
}
} );
}
}