@ckeditor/ckeditor5-widget 36.0.0 → 37.0.0-alpha.0
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +23 -22
- package/src/highlightstack.d.ts +74 -0
- package/src/highlightstack.js +15 -28
- package/src/index.d.ts +9 -0
- package/src/utils.d.ts +198 -0
- package/src/utils.js +90 -107
- package/src/verticalnavigation.d.ts +15 -0
- package/src/verticalnavigation.js +35 -36
- package/src/widget.d.ts +94 -0
- package/src/widget.js +19 -41
- package/src/widgetresize/resizer.d.ts +177 -0
- package/src/widgetresize/resizer.js +15 -77
- package/src/widgetresize/resizerstate.d.ts +125 -0
- package/src/widgetresize/resizerstate.js +36 -95
- package/src/widgetresize/sizeview.d.ts +55 -0
- package/src/widgetresize/sizeview.js +2 -34
- package/src/widgetresize.d.ts +130 -0
- package/src/widgetresize.js +11 -44
- package/src/widgettoolbarrepository.d.ts +98 -0
- package/src/widgettoolbarrepository.js +29 -50
- package/src/widgettypearound/utils.d.ts +38 -0
- package/src/widgettypearound/utils.js +2 -16
- package/src/widgettypearound/widgettypearound.d.ts +232 -0
- package/src/widgettypearound/widgettypearound.js +44 -83
package/src/widget.js
CHANGED
@@ -25,10 +25,15 @@ import '../theme/widget.css';
|
|
25
25
|
* {@link module:engine/view/selection~Selection#isFake fake}. Additionally, the `ck-widget_selected` CSS class
|
26
26
|
* is added to indicate that widget has been selected.
|
27
27
|
* * The mouse and keyboard events handling on and around widget elements.
|
28
|
-
*
|
29
|
-
* @extends module:core/plugin~Plugin
|
30
28
|
*/
|
31
29
|
export default class Widget extends Plugin {
|
30
|
+
constructor() {
|
31
|
+
super(...arguments);
|
32
|
+
/**
|
33
|
+
* Holds previously selected widgets.
|
34
|
+
*/
|
35
|
+
this._previouslySelected = new Set();
|
36
|
+
}
|
32
37
|
/**
|
33
38
|
* @inheritDoc
|
34
39
|
*/
|
@@ -48,13 +53,6 @@ export default class Widget extends Plugin {
|
|
48
53
|
const editor = this.editor;
|
49
54
|
const view = editor.editing.view;
|
50
55
|
const viewDocument = view.document;
|
51
|
-
/**
|
52
|
-
* Holds previously selected widgets.
|
53
|
-
*
|
54
|
-
* @private
|
55
|
-
* @type {Set.<module:engine/view/element~Element>}
|
56
|
-
*/
|
57
|
-
this._previouslySelected = new Set();
|
58
56
|
// Model to view selection converter.
|
59
57
|
// Converts selection placed over widget element to fake selection.
|
60
58
|
//
|
@@ -150,10 +148,6 @@ export default class Widget extends Plugin {
|
|
150
148
|
}
|
151
149
|
/**
|
152
150
|
* Handles {@link module:engine/view/document~Document#event:mousedown mousedown} events on widget elements.
|
153
|
-
*
|
154
|
-
* @private
|
155
|
-
* @param {module:utils/eventinfo~EventInfo} eventInfo
|
156
|
-
* @param {module:engine/view/observer/domeventdata~DomEventData} domEventData
|
157
151
|
*/
|
158
152
|
_onMousedown(eventInfo, domEventData) {
|
159
153
|
const editor = this.editor;
|
@@ -205,10 +199,6 @@ export default class Widget extends Plugin {
|
|
205
199
|
* * the selection is next to a widget and the widget should become selected upon the arrow key press.
|
206
200
|
*
|
207
201
|
* See {@link #_preventDefaultOnArrowKeyPress}.
|
208
|
-
*
|
209
|
-
* @private
|
210
|
-
* @param {module:utils/eventinfo~EventInfo} eventInfo
|
211
|
-
* @param {module:engine/view/observer/domeventdata~DomEventData} domEventData
|
212
202
|
*/
|
213
203
|
_handleSelectionChangeOnArrowKeyPress(eventInfo, domEventData) {
|
214
204
|
const keyCode = domEventData.keyCode;
|
@@ -270,10 +260,6 @@ export default class Widget extends Plugin {
|
|
270
260
|
* container.
|
271
261
|
*
|
272
262
|
* See {@link #_handleSelectionChangeOnArrowKeyPress}.
|
273
|
-
*
|
274
|
-
* @private
|
275
|
-
* @param {module:utils/eventinfo~EventInfo} eventInfo
|
276
|
-
* @param {module:engine/view/observer/domeventdata~DomEventData} domEventData
|
277
263
|
*/
|
278
264
|
_preventDefaultOnArrowKeyPress(eventInfo, domEventData) {
|
279
265
|
const model = this.editor.model;
|
@@ -288,9 +274,8 @@ export default class Widget extends Plugin {
|
|
288
274
|
/**
|
289
275
|
* Handles delete keys: backspace and delete.
|
290
276
|
*
|
291
|
-
* @
|
292
|
-
* @
|
293
|
-
* @returns {Boolean|undefined} Returns `true` if keys were handled correctly.
|
277
|
+
* @param isForward Set to true if delete was performed in forward direction.
|
278
|
+
* @returns Returns `true` if keys were handled correctly.
|
294
279
|
*/
|
295
280
|
_handleDelete(isForward) {
|
296
281
|
// Do nothing when the read only mode is enabled.
|
@@ -322,8 +307,6 @@ export default class Widget extends Plugin {
|
|
322
307
|
* Sets {@link module:engine/model/selection~Selection document's selection} over given element.
|
323
308
|
*
|
324
309
|
* @internal
|
325
|
-
* @protected
|
326
|
-
* @param {module:engine/model/element~Element} element
|
327
310
|
*/
|
328
311
|
_setSelectionOverElement(element) {
|
329
312
|
this.editor.model.change(writer => {
|
@@ -336,9 +319,7 @@ export default class Widget extends Plugin {
|
|
336
319
|
* {@link module:engine/model/schema~Schema schema} as `object`.
|
337
320
|
*
|
338
321
|
* @internal
|
339
|
-
* @
|
340
|
-
* @param {Boolean} forward Direction of checking.
|
341
|
-
* @returns {module:engine/model/element~Element|null}
|
322
|
+
* @param forward Direction of checking.
|
342
323
|
*/
|
343
324
|
_getObjectElementNextToSelection(forward) {
|
344
325
|
const model = this.editor.model;
|
@@ -360,9 +341,6 @@ export default class Widget extends Plugin {
|
|
360
341
|
}
|
361
342
|
/**
|
362
343
|
* Removes CSS class from previously selected widgets.
|
363
|
-
*
|
364
|
-
* @private
|
365
|
-
* @param {module:engine/view/downcastwriter~DowncastWriter} writer
|
366
344
|
*/
|
367
345
|
_clearPreviouslySelectedWidgets(writer) {
|
368
346
|
for (const widget of this._previouslySelected) {
|
@@ -371,10 +349,9 @@ export default class Widget extends Plugin {
|
|
371
349
|
this._previouslySelected.clear();
|
372
350
|
}
|
373
351
|
}
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
// @returns {Boolean}
|
352
|
+
/**
|
353
|
+
* Returns `true` when element is a nested editable or is placed inside one.
|
354
|
+
*/
|
378
355
|
function isInsideNestedEditable(element) {
|
379
356
|
let currentElement = element;
|
380
357
|
while (currentElement) {
|
@@ -389,11 +366,12 @@ function isInsideNestedEditable(element) {
|
|
389
366
|
}
|
390
367
|
return false;
|
391
368
|
}
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
369
|
+
/**
|
370
|
+
* Checks whether the specified `element` is a child of the `parent` element.
|
371
|
+
*
|
372
|
+
* @param element An element to check.
|
373
|
+
* @param parent A parent for the element.
|
374
|
+
*/
|
397
375
|
function isChild(element, parent) {
|
398
376
|
if (!parent) {
|
399
377
|
return false;
|
@@ -0,0 +1,177 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
4
|
+
*/
|
5
|
+
import { Rect, type DecoratedMethodEvent } from '@ckeditor/ckeditor5-utils';
|
6
|
+
import ResizeState from './resizerstate';
|
7
|
+
import type { ResizerOptions } from '../widgetresize';
|
8
|
+
declare const Resizer_base: {
|
9
|
+
new (): import("@ckeditor/ckeditor5-utils").Observable;
|
10
|
+
prototype: import("@ckeditor/ckeditor5-utils").Observable;
|
11
|
+
};
|
12
|
+
/**
|
13
|
+
* Represents a resizer for a single resizable object.
|
14
|
+
*/
|
15
|
+
export default class Resizer extends Resizer_base {
|
16
|
+
/**
|
17
|
+
* Flag that indicates whether resizer can be used.
|
18
|
+
*
|
19
|
+
* @observable
|
20
|
+
*/
|
21
|
+
isEnabled: boolean;
|
22
|
+
/**
|
23
|
+
* Flag that indicates that resizer is currently focused.
|
24
|
+
*
|
25
|
+
* @observable
|
26
|
+
*/
|
27
|
+
isSelected: boolean;
|
28
|
+
/**
|
29
|
+
* Flag that indicates whether resizer is rendered (visible on the screen).
|
30
|
+
*
|
31
|
+
* @readonly
|
32
|
+
* @observable
|
33
|
+
*/
|
34
|
+
isVisible: boolean;
|
35
|
+
/**
|
36
|
+
* Stores the state of the resizable host geometry, such as the original width, the currently proposed height, etc.
|
37
|
+
*
|
38
|
+
* Note that a new state is created for each resize transaction.
|
39
|
+
*/
|
40
|
+
private _state;
|
41
|
+
/**
|
42
|
+
* A view displaying the proposed new element size during the resizing.
|
43
|
+
*/
|
44
|
+
private _sizeView;
|
45
|
+
/**
|
46
|
+
* Options passed to the {@link #constructor}.
|
47
|
+
*/
|
48
|
+
private _options;
|
49
|
+
/**
|
50
|
+
* A wrapper that is controlled by the resizer. This is usually a widget element.
|
51
|
+
*/
|
52
|
+
private _viewResizerWrapper;
|
53
|
+
/**
|
54
|
+
* The width of the resized {@link module:widget/widgetresize~ResizerOptions#viewElement viewElement} before the resizing started.
|
55
|
+
*/
|
56
|
+
private _initialViewWidth;
|
57
|
+
/**
|
58
|
+
* @param options Resizer options.
|
59
|
+
*/
|
60
|
+
constructor(options: ResizerOptions);
|
61
|
+
/**
|
62
|
+
* Stores the state of the resizable host geometry, such as the original width, the currently proposed height, etc.
|
63
|
+
*
|
64
|
+
* Note that a new state is created for each resize transaction.
|
65
|
+
*/
|
66
|
+
get state(): ResizeState;
|
67
|
+
/**
|
68
|
+
* Makes resizer visible in the UI.
|
69
|
+
*/
|
70
|
+
show(): void;
|
71
|
+
/**
|
72
|
+
* Hides resizer in the UI.
|
73
|
+
*/
|
74
|
+
hide(): void;
|
75
|
+
/**
|
76
|
+
* Attaches the resizer to the DOM.
|
77
|
+
*/
|
78
|
+
attach(): void;
|
79
|
+
/**
|
80
|
+
* Starts the resizing process.
|
81
|
+
*
|
82
|
+
* Creates a new {@link #state} for the current process.
|
83
|
+
*
|
84
|
+
* @fires begin
|
85
|
+
* @param domResizeHandle Clicked handle.
|
86
|
+
*/
|
87
|
+
begin(domResizeHandle: HTMLElement): void;
|
88
|
+
/**
|
89
|
+
* Updates the proposed size based on `domEventData`.
|
90
|
+
*
|
91
|
+
* @fires updateSize
|
92
|
+
*/
|
93
|
+
updateSize(domEventData: MouseEvent): void;
|
94
|
+
/**
|
95
|
+
* Applies the geometry proposed with the resizer.
|
96
|
+
*
|
97
|
+
* @fires commit
|
98
|
+
*/
|
99
|
+
commit(): void;
|
100
|
+
/**
|
101
|
+
* Cancels and rejects the proposed resize dimensions, hiding the UI.
|
102
|
+
*
|
103
|
+
* @fires cancel
|
104
|
+
*/
|
105
|
+
cancel(): void;
|
106
|
+
/**
|
107
|
+
* Destroys the resizer.
|
108
|
+
*/
|
109
|
+
destroy(): void;
|
110
|
+
/**
|
111
|
+
* Redraws the resizer.
|
112
|
+
*
|
113
|
+
* @param handleHostRect Handle host rectangle might be given to improve performance.
|
114
|
+
*/
|
115
|
+
redraw(handleHostRect?: Rect): void;
|
116
|
+
containsHandle(domElement: HTMLElement): boolean;
|
117
|
+
static isResizeHandle(domElement: HTMLElement): boolean;
|
118
|
+
/**
|
119
|
+
* Cleans up the context state.
|
120
|
+
*/
|
121
|
+
private _cleanup;
|
122
|
+
/**
|
123
|
+
* Calculates the proposed size as the resize handles are dragged.
|
124
|
+
*
|
125
|
+
* @param domEventData Event data that caused the size update request. It should be used to calculate the proposed size.
|
126
|
+
*/
|
127
|
+
private _proposeNewSize;
|
128
|
+
/**
|
129
|
+
* Obtains the resize host.
|
130
|
+
*
|
131
|
+
* Resize host is an object that receives dimensions which are the result of resizing.
|
132
|
+
*/
|
133
|
+
private _getResizeHost;
|
134
|
+
/**
|
135
|
+
* Obtains the handle host.
|
136
|
+
*
|
137
|
+
* Handle host is an object that the handles are aligned to.
|
138
|
+
*
|
139
|
+
* Handle host will not always be an entire widget itself. Take an image as an example. The image widget
|
140
|
+
* contains an image and a caption. Only the image should be surrounded with handles.
|
141
|
+
*/
|
142
|
+
private _getHandleHost;
|
143
|
+
/**
|
144
|
+
* DOM container of the entire resize UI.
|
145
|
+
*
|
146
|
+
* Note that this property will have a value only after the element bound with the resizer is rendered
|
147
|
+
* (otherwise `null`).
|
148
|
+
*/
|
149
|
+
private get _domResizerWrapper();
|
150
|
+
/**
|
151
|
+
* Renders the resize handles in the DOM.
|
152
|
+
*
|
153
|
+
* @param domElement The resizer wrapper.
|
154
|
+
*/
|
155
|
+
private _appendHandles;
|
156
|
+
/**
|
157
|
+
* Sets up the {@link #_sizeView} property and adds it to the passed `domElement`.
|
158
|
+
*/
|
159
|
+
private _appendSizeUI;
|
160
|
+
}
|
161
|
+
/**
|
162
|
+
* @eventName begin
|
163
|
+
*/
|
164
|
+
export type ResizerBeginEvent = DecoratedMethodEvent<Resizer, 'begin'>;
|
165
|
+
/**
|
166
|
+
* @eventName cancel
|
167
|
+
*/
|
168
|
+
export type ResizerCancelEvent = DecoratedMethodEvent<Resizer, 'cancel'>;
|
169
|
+
/**
|
170
|
+
* @eventName commit
|
171
|
+
*/
|
172
|
+
export type ResizerCommitEvent = DecoratedMethodEvent<Resizer, 'commit'>;
|
173
|
+
/**
|
174
|
+
* @eventName updateSize
|
175
|
+
*/
|
176
|
+
export type ResizerUpdateSizeEvent = DecoratedMethodEvent<Resizer, 'updateSize'>;
|
177
|
+
export {};
|
@@ -11,68 +11,20 @@ import ResizeState from './resizerstate';
|
|
11
11
|
import SizeView from './sizeview';
|
12
12
|
/**
|
13
13
|
* Represents a resizer for a single resizable object.
|
14
|
-
*
|
15
|
-
* @mixes module:utils/observablemixin~ObservableMixin
|
16
14
|
*/
|
17
15
|
export default class Resizer extends ObservableMixin() {
|
18
16
|
/**
|
19
|
-
* @param
|
17
|
+
* @param options Resizer options.
|
20
18
|
*/
|
21
19
|
constructor(options) {
|
22
20
|
super();
|
23
|
-
/**
|
24
|
-
* Stores the state of the resizable host geometry, such as the original width, the currently proposed height, etc.
|
25
|
-
*
|
26
|
-
* Note that a new state is created for each resize transaction.
|
27
|
-
*
|
28
|
-
* @readonly
|
29
|
-
* @member {module:widget/widgetresize/resizerstate~ResizerState} #state
|
30
|
-
*/
|
31
|
-
/**
|
32
|
-
* A view displaying the proposed new element size during the resizing.
|
33
|
-
*
|
34
|
-
* @protected
|
35
|
-
* @readonly
|
36
|
-
* @member {module:widget/widgetresize/sizeview~SizeView} #_sizeView
|
37
|
-
*/
|
38
|
-
/**
|
39
|
-
* Options passed to the {@link #constructor}.
|
40
|
-
*
|
41
|
-
* @private
|
42
|
-
* @type {module:widget/widgetresize~ResizerOptions}
|
43
|
-
*/
|
44
|
-
this._options = options;
|
45
21
|
/**
|
46
22
|
* A wrapper that is controlled by the resizer. This is usually a widget element.
|
47
|
-
*
|
48
|
-
* @private
|
49
|
-
* @type {module:engine/view/element~Element|null}
|
50
23
|
*/
|
51
24
|
this._viewResizerWrapper = null;
|
52
|
-
|
53
|
-
* The width of the resized {@link module:widget/widgetresize~ResizerOptions#viewElement viewElement} before the resizing started.
|
54
|
-
*
|
55
|
-
* @private
|
56
|
-
* @member {Number|String|undefined} #_initialViewWidth
|
57
|
-
*/
|
58
|
-
/**
|
59
|
-
* Flag that indicates whether resizer can be used.
|
60
|
-
*
|
61
|
-
* @observable
|
62
|
-
*/
|
25
|
+
this._options = options;
|
63
26
|
this.set('isEnabled', true);
|
64
|
-
/**
|
65
|
-
* Flag that indicates that resizer is currently focused.
|
66
|
-
*
|
67
|
-
* @observable
|
68
|
-
*/
|
69
27
|
this.set('isSelected', false);
|
70
|
-
/**
|
71
|
-
* Flag that indicates whether resizer is rendered (visible on the screen).
|
72
|
-
*
|
73
|
-
* @readonly
|
74
|
-
* @observable
|
75
|
-
*/
|
76
28
|
this.bind('isVisible').to(this, 'isEnabled', this, 'isSelected', (isEnabled, isSelected) => isEnabled && isSelected);
|
77
29
|
this.decorate('begin');
|
78
30
|
this.decorate('cancel');
|
@@ -87,6 +39,11 @@ export default class Resizer extends ObservableMixin() {
|
|
87
39
|
}
|
88
40
|
}, { priority: 'high' });
|
89
41
|
}
|
42
|
+
/**
|
43
|
+
* Stores the state of the resizable host geometry, such as the original width, the currently proposed height, etc.
|
44
|
+
*
|
45
|
+
* Note that a new state is created for each resize transaction.
|
46
|
+
*/
|
90
47
|
get state() {
|
91
48
|
return this._state;
|
92
49
|
}
|
@@ -149,7 +106,7 @@ export default class Resizer extends ObservableMixin() {
|
|
149
106
|
* Creates a new {@link #state} for the current process.
|
150
107
|
*
|
151
108
|
* @fires begin
|
152
|
-
* @param
|
109
|
+
* @param domResizeHandle Clicked handle.
|
153
110
|
*/
|
154
111
|
begin(domResizeHandle) {
|
155
112
|
this._state = new ResizeState(this._options);
|
@@ -161,7 +118,6 @@ export default class Resizer extends ObservableMixin() {
|
|
161
118
|
* Updates the proposed size based on `domEventData`.
|
162
119
|
*
|
163
120
|
* @fires updateSize
|
164
|
-
* @param {Event} domEventData
|
165
121
|
*/
|
166
122
|
updateSize(domEventData) {
|
167
123
|
const newSize = this._proposeNewSize(domEventData);
|
@@ -220,7 +176,7 @@ export default class Resizer extends ObservableMixin() {
|
|
220
176
|
/**
|
221
177
|
* Redraws the resizer.
|
222
178
|
*
|
223
|
-
* @param
|
179
|
+
* @param handleHostRect Handle host rectangle might be given to improve performance.
|
224
180
|
*/
|
225
181
|
redraw(handleHostRect) {
|
226
182
|
const domWrapper = this._domResizerWrapper;
|
@@ -283,8 +239,6 @@ export default class Resizer extends ObservableMixin() {
|
|
283
239
|
}
|
284
240
|
/**
|
285
241
|
* Cleans up the context state.
|
286
|
-
*
|
287
|
-
* @protected
|
288
242
|
*/
|
289
243
|
_cleanup() {
|
290
244
|
this._sizeView._dismiss();
|
@@ -296,11 +250,7 @@ export default class Resizer extends ObservableMixin() {
|
|
296
250
|
/**
|
297
251
|
* Calculates the proposed size as the resize handles are dragged.
|
298
252
|
*
|
299
|
-
* @
|
300
|
-
* @param {Event} domEventData Event data that caused the size update request. It should be used to calculate the proposed size.
|
301
|
-
* @returns {Object} return
|
302
|
-
* @returns {Number} return.width Proposed width.
|
303
|
-
* @returns {Number} return.height Proposed height.
|
253
|
+
* @param domEventData Event data that caused the size update request. It should be used to calculate the proposed size.
|
304
254
|
*/
|
305
255
|
_proposeNewSize(domEventData) {
|
306
256
|
const state = this.state;
|
@@ -352,9 +302,6 @@ export default class Resizer extends ObservableMixin() {
|
|
352
302
|
* Obtains the resize host.
|
353
303
|
*
|
354
304
|
* Resize host is an object that receives dimensions which are the result of resizing.
|
355
|
-
*
|
356
|
-
* @protected
|
357
|
-
* @returns {HTMLElement}
|
358
305
|
*/
|
359
306
|
_getResizeHost() {
|
360
307
|
const widgetWrapper = this._domResizerWrapper.parentElement;
|
@@ -367,9 +314,6 @@ export default class Resizer extends ObservableMixin() {
|
|
367
314
|
*
|
368
315
|
* Handle host will not always be an entire widget itself. Take an image as an example. The image widget
|
369
316
|
* contains an image and a caption. Only the image should be surrounded with handles.
|
370
|
-
*
|
371
|
-
* @protected
|
372
|
-
* @returns {HTMLElement}
|
373
317
|
*/
|
374
318
|
_getHandleHost() {
|
375
319
|
const widgetWrapper = this._domResizerWrapper.parentElement;
|
@@ -380,9 +324,6 @@ export default class Resizer extends ObservableMixin() {
|
|
380
324
|
*
|
381
325
|
* Note that this property will have a value only after the element bound with the resizer is rendered
|
382
326
|
* (otherwise `null`).
|
383
|
-
*
|
384
|
-
* @private
|
385
|
-
* @member {HTMLElement|null}
|
386
327
|
*/
|
387
328
|
get _domResizerWrapper() {
|
388
329
|
return this._options.editor.editing.view.domConverter.mapViewToDom(this._viewResizerWrapper);
|
@@ -390,8 +331,7 @@ export default class Resizer extends ObservableMixin() {
|
|
390
331
|
/**
|
391
332
|
* Renders the resize handles in the DOM.
|
392
333
|
*
|
393
|
-
* @
|
394
|
-
* @param {HTMLElement} domElement The resizer wrapper.
|
334
|
+
* @param domElement The resizer wrapper.
|
395
335
|
*/
|
396
336
|
_appendHandles(domElement) {
|
397
337
|
const resizerPositions = ['top-left', 'top-right', 'bottom-right', 'bottom-left'];
|
@@ -406,9 +346,6 @@ export default class Resizer extends ObservableMixin() {
|
|
406
346
|
}
|
407
347
|
/**
|
408
348
|
* Sets up the {@link #_sizeView} property and adds it to the passed `domElement`.
|
409
|
-
*
|
410
|
-
* @private
|
411
|
-
* @param {HTMLElement} domElement
|
412
349
|
*/
|
413
350
|
_appendSizeUI(domElement) {
|
414
351
|
this._sizeView = new SizeView();
|
@@ -417,9 +354,10 @@ export default class Resizer extends ObservableMixin() {
|
|
417
354
|
domElement.appendChild(this._sizeView.element);
|
418
355
|
}
|
419
356
|
}
|
420
|
-
|
421
|
-
|
422
|
-
|
357
|
+
/**
|
358
|
+
* @param resizerPosition Expected resizer position like `"top-left"`, `"bottom-right"`.
|
359
|
+
* @returns A prefixed HTML class name for the resizer element
|
360
|
+
*/
|
423
361
|
function getResizerClass(resizerPosition) {
|
424
362
|
return `ck-widget__resizer__handle-${resizerPosition}`;
|
425
363
|
}
|
@@ -0,0 +1,125 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
4
|
+
*/
|
5
|
+
import type { ResizerOptions } from '../widgetresize';
|
6
|
+
declare const ResizeState_base: {
|
7
|
+
new (): import("@ckeditor/ckeditor5-utils").Observable;
|
8
|
+
prototype: import("@ckeditor/ckeditor5-utils").Observable;
|
9
|
+
};
|
10
|
+
/**
|
11
|
+
* Stores the internal state of a single resizable object.
|
12
|
+
*/
|
13
|
+
export default class ResizeState extends ResizeState_base {
|
14
|
+
/**
|
15
|
+
* The position of the handle that initiated the resizing. E.g. `"top-left"`, `"bottom-right"` etc. or `null`
|
16
|
+
* if unknown.
|
17
|
+
*
|
18
|
+
* @readonly
|
19
|
+
* @observable
|
20
|
+
*/
|
21
|
+
activeHandlePosition: string | null;
|
22
|
+
/**
|
23
|
+
* The width (percents) proposed, but not committed yet, in the current resize process.
|
24
|
+
*
|
25
|
+
* @readonly
|
26
|
+
* @observable
|
27
|
+
*/
|
28
|
+
proposedWidthPercents: number | null;
|
29
|
+
/**
|
30
|
+
* The width (pixels) proposed, but not committed yet, in the current resize process.
|
31
|
+
*
|
32
|
+
* @readonly
|
33
|
+
* @observable
|
34
|
+
*/
|
35
|
+
proposedWidth: number | null;
|
36
|
+
/**
|
37
|
+
* The height (pixels) proposed, but not committed yet, in the current resize process.
|
38
|
+
*
|
39
|
+
* @readonly
|
40
|
+
* @observable
|
41
|
+
*/
|
42
|
+
proposedHeight: number | null;
|
43
|
+
/**
|
44
|
+
* @readonly
|
45
|
+
* @observable
|
46
|
+
*/
|
47
|
+
proposedHandleHostWidth: number | null;
|
48
|
+
/**
|
49
|
+
* @readonly
|
50
|
+
* @observable
|
51
|
+
*/
|
52
|
+
proposedHandleHostHeight: number | null;
|
53
|
+
/**
|
54
|
+
* The reference point of the resizer where the dragging started. It is used to measure the distance the user cursor
|
55
|
+
* traveled, so how much the image should be enlarged.
|
56
|
+
* This information is only known after the DOM was rendered, so it will be updated later.
|
57
|
+
*
|
58
|
+
* @internal
|
59
|
+
*/
|
60
|
+
_referenceCoordinates: {
|
61
|
+
x: number;
|
62
|
+
y: number;
|
63
|
+
} | null;
|
64
|
+
/**
|
65
|
+
* Resizer options.
|
66
|
+
*/
|
67
|
+
private readonly _options;
|
68
|
+
/**
|
69
|
+
* The original width (pixels) of the resized object when the resize process was started.
|
70
|
+
*
|
71
|
+
* @readonly
|
72
|
+
*/
|
73
|
+
private _originalWidth?;
|
74
|
+
/**
|
75
|
+
* The original height (pixels) of the resized object when the resize process was started.
|
76
|
+
*
|
77
|
+
* @readonly
|
78
|
+
*/
|
79
|
+
private _originalHeight?;
|
80
|
+
/**
|
81
|
+
* The original width (percents) of the resized object when the resize process was started.
|
82
|
+
*
|
83
|
+
* @readonly
|
84
|
+
*/
|
85
|
+
private _originalWidthPercents?;
|
86
|
+
/**
|
87
|
+
* A width to height ratio of the resized image.
|
88
|
+
*
|
89
|
+
* @readonly
|
90
|
+
*/
|
91
|
+
private _aspectRatio?;
|
92
|
+
/**
|
93
|
+
* @param options Resizer options.
|
94
|
+
*/
|
95
|
+
constructor(options: ResizerOptions);
|
96
|
+
/**
|
97
|
+
* The original width (pixels) of the resized object when the resize process was started.
|
98
|
+
*/
|
99
|
+
get originalWidth(): number | undefined;
|
100
|
+
/**
|
101
|
+
* The original height (pixels) of the resized object when the resize process was started.
|
102
|
+
*/
|
103
|
+
get originalHeight(): number | undefined;
|
104
|
+
/**
|
105
|
+
* The original width (percents) of the resized object when the resize process was started.
|
106
|
+
*/
|
107
|
+
get originalWidthPercents(): number | undefined;
|
108
|
+
/**
|
109
|
+
* A width to height ratio of the resized image.
|
110
|
+
*/
|
111
|
+
get aspectRatio(): number | undefined;
|
112
|
+
/**
|
113
|
+
*
|
114
|
+
* @param domResizeHandle The handle used to calculate the reference point.
|
115
|
+
*/
|
116
|
+
begin(domResizeHandle: HTMLElement, domHandleHost: HTMLElement, domResizeHost: HTMLElement): void;
|
117
|
+
update(newSize: {
|
118
|
+
width: number;
|
119
|
+
height: number;
|
120
|
+
widthPercents: number;
|
121
|
+
handleHostWidth: number;
|
122
|
+
handleHostHeight: number;
|
123
|
+
}): void;
|
124
|
+
}
|
125
|
+
export {};
|