-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
/
manualdecorator.js
71 lines (63 loc) · 2.43 KB
/
manualdecorator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
* @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module link/utils
*/
import { ObservableMixin, mix } from 'ckeditor5/src/utils';
/**
* Helper class that stores manual decorators with observable {@link module:link/utils~ManualDecorator#value}
* to support integration with the UI state. An instance of this class is a model with the state of individual manual decorators.
* These decorators are kept as collections in {@link module:link/linkcommand~LinkCommand#manualDecorators}.
*
* @mixes module:utils/observablemixin~ObservableMixin
*/
export default class ManualDecorator {
/**
* Creates a new instance of {@link module:link/utils~ManualDecorator}.
*
* @param {Object} config
* @param {String} config.id The name of the attribute used in the model that represents a given manual decorator.
* For example: `'linkIsExternal'`.
* @param {String} config.label The label used in the user interface to toggle the manual decorator.
* @param {Object} config.attributes A set of attributes added to output data when the decorator is active for a specific link.
* Attributes should keep the format of attributes defined in {@link module:engine/view/elementdefinition~ElementDefinition}.
* @param {Boolean} [config.defaultValue] Controls whether the decorator is "on" by default.
*/
constructor( { id, label, attributes, defaultValue } ) {
/**
* An ID of a manual decorator which is the name of the attribute in the model, for example: 'linkManualDecorator0'.
*
* @type {String}
*/
this.id = id;
/**
* The value of the current manual decorator. It reflects its state from the UI.
*
* @observable
* @member {Boolean} module:link/utils~ManualDecorator#value
*/
this.set( 'value' );
/**
* The default value of manual decorator.
*
* @type {Boolean}
*/
this.defaultValue = defaultValue;
/**
* The label used in the user interface to toggle the manual decorator.
*
* @type {String}
*/
this.label = label;
/**
* A set of attributes added to downcasted data when the decorator is activated for a specific link.
* Attributes should be added in a form of attributes defined in {@link module:engine/view/elementdefinition~ElementDefinition}.
*
* @type {Object}
*/
this.attributes = attributes;
}
}
mix( ManualDecorator, ObservableMixin );