| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /**
- * @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 );
- }
- }
- }
- } );
- }
- }
|