UNPKG

ckeditor5-image-upload-base64

Version:

The development environment of CKEditor 5 – the best browser-based rich text editor.

125 lines (110 loc) 3.04 kB
/** * @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 highlight/highlightediting */ import Plugin from '@ckeditor/ckeditor5-core/src/plugin'; import HighlightCommand from './highlightcommand'; /** * The highlight editing feature. It introduces the {@link module:highlight/highlightcommand~HighlightCommand command} and the `highlight` * attribute in the {@link module:engine/model/model~Model model} which renders in the {@link module:engine/view/view view} * as a `<mark>` element with a `class` attribute (`<mark class="marker-green">...</mark>`) depending * on the {@link module:highlight/highlight~HighlightConfig configuration}. * * @extends module:core/plugin~Plugin */ export default class HighlightEditing extends Plugin { /** * @inheritDoc */ static get pluginName() { return 'HighlightEditing'; } /** * @inheritDoc */ constructor( editor ) { super( editor ); editor.config.define( 'highlight', { options: [ { model: 'yellowMarker', class: 'marker-yellow', title: 'Yellow marker', color: 'var(--ck-highlight-marker-yellow)', type: 'marker' }, { model: 'greenMarker', class: 'marker-green', title: 'Green marker', color: 'var(--ck-highlight-marker-green)', type: 'marker' }, { model: 'pinkMarker', class: 'marker-pink', title: 'Pink marker', color: 'var(--ck-highlight-marker-pink)', type: 'marker' }, { model: 'blueMarker', class: 'marker-blue', title: 'Blue marker', color: 'var(--ck-highlight-marker-blue)', type: 'marker' }, { model: 'redPen', class: 'pen-red', title: 'Red pen', color: 'var(--ck-highlight-pen-red)', type: 'pen' }, { model: 'greenPen', class: 'pen-green', title: 'Green pen', color: 'var(--ck-highlight-pen-green)', type: 'pen' } ] } ); } /** * @inheritDoc */ init() { const editor = this.editor; // Allow highlight attribute on text nodes. editor.model.schema.extend( '$text', { allowAttributes: 'highlight' } ); const options = editor.config.get( 'highlight.options' ); // Set-up the two-way conversion. editor.conversion.attributeToElement( _buildDefinition( options ) ); editor.commands.add( 'highlight', new HighlightCommand( editor ) ); } } // Converts the options array to a converter definition. // // @param {Array.<module:highlight/highlight~HighlightOption>} options An array with configured options. // @returns {module:engine/conversion/conversion~ConverterDefinition} function _buildDefinition( options ) { const definition = { model: { key: 'highlight', values: [] }, view: {} }; for ( const option of options ) { definition.model.values.push( option.model ); definition.view[ option.model ] = { name: 'mark', classes: option.class }; } return definition; }