@ckeditor/ckeditor5-image 39.0.1 → 40.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/LICENSE.md +1 -1
- package/README.md +3 -3
- package/build/image.js +1 -1
- package/build/image.js.map +1 -0
- package/build/translations/pt-br.js +1 -1
- package/ckeditor5-metadata.json +12 -0
- package/lang/translations/ar.po +1 -0
- package/lang/translations/ast.po +1 -0
- package/lang/translations/az.po +1 -0
- package/lang/translations/bg.po +1 -0
- package/lang/translations/bn.po +1 -0
- package/lang/translations/bs.po +1 -0
- package/lang/translations/ca.po +1 -0
- package/lang/translations/cs.po +1 -0
- package/lang/translations/da.po +1 -0
- package/lang/translations/de-ch.po +1 -0
- package/lang/translations/de.po +1 -0
- package/lang/translations/el.po +1 -0
- package/lang/translations/en-au.po +1 -0
- package/lang/translations/en-gb.po +1 -0
- package/lang/translations/en.po +1 -0
- package/lang/translations/eo.po +1 -0
- package/lang/translations/es.po +1 -0
- package/lang/translations/et.po +1 -0
- package/lang/translations/eu.po +1 -0
- package/lang/translations/fa.po +1 -0
- package/lang/translations/fi.po +1 -0
- package/lang/translations/fr.po +1 -0
- package/lang/translations/gl.po +1 -0
- package/lang/translations/he.po +1 -0
- package/lang/translations/hi.po +1 -0
- package/lang/translations/hr.po +1 -0
- package/lang/translations/hu.po +1 -0
- package/lang/translations/id.po +1 -0
- package/lang/translations/it.po +1 -0
- package/lang/translations/ja.po +1 -0
- package/lang/translations/jv.po +1 -0
- package/lang/translations/km.po +1 -0
- package/lang/translations/kn.po +1 -0
- package/lang/translations/ko.po +1 -0
- package/lang/translations/ku.po +1 -0
- package/lang/translations/lt.po +1 -0
- package/lang/translations/lv.po +1 -0
- package/lang/translations/ms.po +1 -0
- package/lang/translations/nb.po +1 -0
- package/lang/translations/ne.po +1 -0
- package/lang/translations/nl.po +1 -0
- package/lang/translations/no.po +1 -0
- package/lang/translations/pl.po +1 -0
- package/lang/translations/pt-br.po +2 -1
- package/lang/translations/pt.po +1 -0
- package/lang/translations/ro.po +1 -0
- package/lang/translations/ru.po +1 -0
- package/lang/translations/si.po +1 -0
- package/lang/translations/sk.po +1 -0
- package/lang/translations/sq.po +1 -0
- package/lang/translations/sr-latn.po +1 -0
- package/lang/translations/sr.po +1 -0
- package/lang/translations/sv.po +1 -0
- package/lang/translations/th.po +1 -0
- package/lang/translations/tk.po +1 -0
- package/lang/translations/tr.po +1 -0
- package/lang/translations/tt.po +1 -0
- package/lang/translations/ug.po +1 -0
- package/lang/translations/uk.po +1 -0
- package/lang/translations/ur.po +1 -0
- package/lang/translations/uz.po +1 -0
- package/lang/translations/vi.po +1 -0
- package/lang/translations/zh-cn.po +1 -0
- package/lang/translations/zh.po +1 -0
- package/package.json +3 -7
- package/src/augmentation.d.ts +56 -55
- package/src/augmentation.js +5 -5
- package/src/autoimage.d.ts +52 -52
- package/src/autoimage.js +132 -132
- package/src/image/converters.d.ts +66 -66
- package/src/image/converters.js +232 -242
- package/src/image/imageblockediting.d.ts +58 -55
- package/src/image/imageblockediting.js +152 -136
- package/src/image/imageediting.d.ts +30 -30
- package/src/image/imageediting.js +63 -74
- package/src/image/imageinlineediting.d.ts +59 -56
- package/src/image/imageinlineediting.js +176 -160
- package/src/image/imageloadobserver.d.ts +48 -48
- package/src/image/imageloadobserver.js +52 -52
- package/src/image/imagetypecommand.d.ts +44 -40
- package/src/image/imagetypecommand.js +80 -77
- package/src/image/insertimagecommand.d.ts +66 -66
- package/src/image/insertimagecommand.js +120 -120
- package/src/image/replaceimagesourcecommand.d.ts +34 -34
- package/src/image/replaceimagesourcecommand.js +44 -44
- package/src/image/ui/utils.d.ts +25 -25
- package/src/image/ui/utils.js +44 -44
- package/src/image/utils.d.ts +64 -52
- package/src/image/utils.js +121 -100
- package/src/image.d.ts +34 -34
- package/src/image.js +38 -38
- package/src/imageblock.d.ts +33 -33
- package/src/imageblock.js +37 -37
- package/src/imagecaption/imagecaptionediting.d.ts +89 -89
- package/src/imagecaption/imagecaptionediting.js +225 -225
- package/src/imagecaption/imagecaptionui.d.ts +26 -26
- package/src/imagecaption/imagecaptionui.js +61 -61
- package/src/imagecaption/imagecaptionutils.d.ts +38 -38
- package/src/imagecaption/imagecaptionutils.js +62 -62
- package/src/imagecaption/toggleimagecaptioncommand.d.ts +66 -66
- package/src/imagecaption/toggleimagecaptioncommand.js +138 -138
- package/src/imagecaption.d.ts +26 -26
- package/src/imagecaption.js +30 -30
- package/src/imageconfig.d.ts +713 -713
- package/src/imageconfig.js +5 -5
- package/src/imageinline.d.ts +33 -33
- package/src/imageinline.js +37 -37
- package/src/imageinsert/imageinsertui.d.ts +44 -44
- package/src/imageinsert/imageinsertui.js +141 -141
- package/src/imageinsert/ui/imageinsertformrowview.d.ts +61 -61
- package/src/imageinsert/ui/imageinsertformrowview.js +54 -54
- package/src/imageinsert/ui/imageinsertpanelview.d.ts +106 -106
- package/src/imageinsert/ui/imageinsertpanelview.js +161 -161
- package/src/imageinsert/utils.d.ts +25 -25
- package/src/imageinsert/utils.js +58 -58
- package/src/imageinsert.d.ts +33 -33
- package/src/imageinsert.js +37 -37
- package/src/imageinsertviaurl.d.ts +30 -30
- package/src/imageinsertviaurl.js +34 -34
- package/src/imageresize/imageresizebuttons.d.ts +67 -67
- package/src/imageresize/imageresizebuttons.js +217 -217
- package/src/imageresize/imageresizeediting.d.ts +37 -37
- package/src/imageresize/imageresizeediting.js +165 -114
- package/src/imageresize/imageresizehandles.d.ts +31 -30
- package/src/imageresize/imageresizehandles.js +114 -107
- package/src/imageresize/resizeimagecommand.d.ts +42 -42
- package/src/imageresize/resizeimagecommand.js +63 -61
- package/src/imageresize.d.ts +27 -27
- package/src/imageresize.js +31 -31
- package/src/imagesizeattributes.d.ts +34 -0
- package/src/imagesizeattributes.js +143 -0
- package/src/imagestyle/converters.d.ts +24 -24
- package/src/imagestyle/converters.js +79 -79
- package/src/imagestyle/imagestylecommand.d.ts +68 -65
- package/src/imagestyle/imagestylecommand.js +107 -101
- package/src/imagestyle/imagestyleediting.d.ts +50 -50
- package/src/imagestyle/imagestyleediting.js +108 -108
- package/src/imagestyle/imagestyleui.d.ts +56 -56
- package/src/imagestyle/imagestyleui.js +192 -192
- package/src/imagestyle/utils.d.ts +101 -101
- package/src/imagestyle/utils.js +329 -329
- package/src/imagestyle.d.ts +32 -32
- package/src/imagestyle.js +36 -36
- package/src/imagetextalternative/imagetextalternativecommand.d.ts +34 -34
- package/src/imagetextalternative/imagetextalternativecommand.js +44 -44
- package/src/imagetextalternative/imagetextalternativeediting.d.ts +28 -28
- package/src/imagetextalternative/imagetextalternativeediting.js +35 -35
- package/src/imagetextalternative/imagetextalternativeui.d.ts +68 -68
- package/src/imagetextalternative/imagetextalternativeui.js +173 -173
- package/src/imagetextalternative/ui/textalternativeformview.d.ts +72 -72
- package/src/imagetextalternative/ui/textalternativeformview.js +121 -121
- package/src/imagetextalternative.d.ts +29 -29
- package/src/imagetextalternative.js +33 -33
- package/src/imagetoolbar.d.ts +35 -35
- package/src/imagetoolbar.js +57 -57
- package/src/imageupload/imageuploadediting.d.ts +111 -111
- package/src/imageupload/imageuploadediting.js +337 -335
- package/src/imageupload/imageuploadprogress.d.ts +42 -42
- package/src/imageupload/imageuploadprogress.js +211 -211
- package/src/imageupload/imageuploadui.d.ts +23 -23
- package/src/imageupload/imageuploadui.js +57 -57
- package/src/imageupload/uploadimagecommand.d.ts +60 -60
- package/src/imageupload/uploadimagecommand.js +100 -100
- package/src/imageupload/utils.d.ts +33 -33
- package/src/imageupload/utils.js +112 -112
- package/src/imageupload.d.ts +32 -32
- package/src/imageupload.js +36 -36
- package/src/imageutils.d.ts +125 -102
- package/src/imageutils.js +306 -248
- package/src/index.d.ts +48 -47
- package/src/index.js +39 -38
- package/src/pictureediting.d.ts +88 -88
- package/src/pictureediting.js +130 -130
- package/theme/image.css +38 -11
- package/theme/imageresize.css +5 -0
|
@@ -1,54 +1,54 @@
|
|
|
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 { View } from 'ckeditor5/src/ui';
|
|
6
|
-
import '../../../theme/imageinsertformrowview.css';
|
|
7
|
-
/**
|
|
8
|
-
* The class representing a single row in a complex form,
|
|
9
|
-
* used by {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
|
|
10
|
-
*
|
|
11
|
-
* **Note**: For now this class is private. When more use cases appear (beyond `ckeditor5-table` and `ckeditor5-image`),
|
|
12
|
-
* it will become a component in `ckeditor5-ui`.
|
|
13
|
-
*
|
|
14
|
-
* @private
|
|
15
|
-
*/
|
|
16
|
-
export default class ImageUploadFormRowView extends View {
|
|
17
|
-
/**
|
|
18
|
-
* Creates an instance of the form row class.
|
|
19
|
-
*
|
|
20
|
-
* @param locale The locale instance.
|
|
21
|
-
* @param options.labelView When passed, the row gets the `group` and `aria-labelledby`
|
|
22
|
-
* DOM attributes and gets described by the label.
|
|
23
|
-
*/
|
|
24
|
-
constructor(locale, options = {}) {
|
|
25
|
-
super(locale);
|
|
26
|
-
const bind = this.bindTemplate;
|
|
27
|
-
this.set('class', options.class || null);
|
|
28
|
-
this.children = this.createCollection();
|
|
29
|
-
if (options.children) {
|
|
30
|
-
options.children.forEach(child => this.children.add(child));
|
|
31
|
-
}
|
|
32
|
-
this.set('_role', null);
|
|
33
|
-
this.set('_ariaLabelledBy', null);
|
|
34
|
-
if (options.labelView) {
|
|
35
|
-
this.set({
|
|
36
|
-
_role: 'group',
|
|
37
|
-
_ariaLabelledBy: options.labelView.id
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
this.setTemplate({
|
|
41
|
-
tag: 'div',
|
|
42
|
-
attributes: {
|
|
43
|
-
class: [
|
|
44
|
-
'ck',
|
|
45
|
-
'ck-form__row',
|
|
46
|
-
bind.to('class')
|
|
47
|
-
],
|
|
48
|
-
role: bind.to('_role'),
|
|
49
|
-
'aria-labelledby': bind.to('_ariaLabelledBy')
|
|
50
|
-
},
|
|
51
|
-
children: this.children
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
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 { View } from 'ckeditor5/src/ui';
|
|
6
|
+
import '../../../theme/imageinsertformrowview.css';
|
|
7
|
+
/**
|
|
8
|
+
* The class representing a single row in a complex form,
|
|
9
|
+
* used by {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
|
|
10
|
+
*
|
|
11
|
+
* **Note**: For now this class is private. When more use cases appear (beyond `ckeditor5-table` and `ckeditor5-image`),
|
|
12
|
+
* it will become a component in `ckeditor5-ui`.
|
|
13
|
+
*
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
export default class ImageUploadFormRowView extends View {
|
|
17
|
+
/**
|
|
18
|
+
* Creates an instance of the form row class.
|
|
19
|
+
*
|
|
20
|
+
* @param locale The locale instance.
|
|
21
|
+
* @param options.labelView When passed, the row gets the `group` and `aria-labelledby`
|
|
22
|
+
* DOM attributes and gets described by the label.
|
|
23
|
+
*/
|
|
24
|
+
constructor(locale, options = {}) {
|
|
25
|
+
super(locale);
|
|
26
|
+
const bind = this.bindTemplate;
|
|
27
|
+
this.set('class', options.class || null);
|
|
28
|
+
this.children = this.createCollection();
|
|
29
|
+
if (options.children) {
|
|
30
|
+
options.children.forEach(child => this.children.add(child));
|
|
31
|
+
}
|
|
32
|
+
this.set('_role', null);
|
|
33
|
+
this.set('_ariaLabelledBy', null);
|
|
34
|
+
if (options.labelView) {
|
|
35
|
+
this.set({
|
|
36
|
+
_role: 'group',
|
|
37
|
+
_ariaLabelledBy: options.labelView.id
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
this.setTemplate({
|
|
41
|
+
tag: 'div',
|
|
42
|
+
attributes: {
|
|
43
|
+
class: [
|
|
44
|
+
'ck',
|
|
45
|
+
'ck-form__row',
|
|
46
|
+
bind.to('class')
|
|
47
|
+
],
|
|
48
|
+
role: bind.to('_role'),
|
|
49
|
+
'aria-labelledby': bind.to('_ariaLabelledBy')
|
|
50
|
+
},
|
|
51
|
+
children: this.children
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -1,106 +1,106 @@
|
|
|
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 { ButtonView, View, ViewCollection, FocusCycler } from 'ckeditor5/src/ui';
|
|
6
|
-
import { Collection, FocusTracker, KeystrokeHandler, type Locale } from 'ckeditor5/src/utils';
|
|
7
|
-
import '../../../theme/imageinsert.css';
|
|
8
|
-
export type ViewWithName = View & {
|
|
9
|
-
name: string;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* The insert an image via URL view controller class.
|
|
13
|
-
*
|
|
14
|
-
* See {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
|
|
15
|
-
*/
|
|
16
|
-
export default class ImageInsertPanelView extends View {
|
|
17
|
-
/**
|
|
18
|
-
* The "insert/update" button view.
|
|
19
|
-
*/
|
|
20
|
-
insertButtonView: ButtonView;
|
|
21
|
-
/**
|
|
22
|
-
* The "cancel" button view.
|
|
23
|
-
*/
|
|
24
|
-
cancelButtonView: ButtonView;
|
|
25
|
-
/**
|
|
26
|
-
* The value of the URL input.
|
|
27
|
-
*
|
|
28
|
-
* @observable
|
|
29
|
-
*/
|
|
30
|
-
imageURLInputValue: string;
|
|
31
|
-
/**
|
|
32
|
-
* Tracks information about DOM focus in the form.
|
|
33
|
-
*/
|
|
34
|
-
readonly focusTracker: FocusTracker;
|
|
35
|
-
/**
|
|
36
|
-
* An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.
|
|
37
|
-
*/
|
|
38
|
-
readonly keystrokes: KeystrokeHandler;
|
|
39
|
-
/**
|
|
40
|
-
* A collection of views that can be focused in the form.
|
|
41
|
-
*/
|
|
42
|
-
protected readonly _focusables: ViewCollection;
|
|
43
|
-
/**
|
|
44
|
-
* Helps cycling over {@link #_focusables} in the form.
|
|
45
|
-
*/
|
|
46
|
-
protected readonly _focusCycler: FocusCycler;
|
|
47
|
-
/**
|
|
48
|
-
* A collection of the defined integrations for inserting the images.
|
|
49
|
-
*
|
|
50
|
-
* @private
|
|
51
|
-
*/
|
|
52
|
-
_integrations: Collection<ViewWithName>;
|
|
53
|
-
/**
|
|
54
|
-
* Creates a view for the dropdown panel of {@link module:image/imageinsert/imageinsertui~ImageInsertUI}.
|
|
55
|
-
*
|
|
56
|
-
* @param locale The localization services instance.
|
|
57
|
-
* @param integrations An integrations object that contains components (or tokens for components) to be shown in the panel view.
|
|
58
|
-
*/
|
|
59
|
-
constructor(locale: Locale, integrations?: Record<string, View>);
|
|
60
|
-
/**
|
|
61
|
-
* @inheritDoc
|
|
62
|
-
*/
|
|
63
|
-
render(): void;
|
|
64
|
-
/**
|
|
65
|
-
* @inheritDoc
|
|
66
|
-
*/
|
|
67
|
-
destroy(): void;
|
|
68
|
-
/**
|
|
69
|
-
* Returns a view of the integration.
|
|
70
|
-
*
|
|
71
|
-
* @param name The name of the integration.
|
|
72
|
-
*/
|
|
73
|
-
getIntegration(name: string): View;
|
|
74
|
-
/**
|
|
75
|
-
* Creates the following form controls:
|
|
76
|
-
*
|
|
77
|
-
* * {@link #insertButtonView},
|
|
78
|
-
* * {@link #cancelButtonView}.
|
|
79
|
-
*
|
|
80
|
-
* @param locale The localization services instance.
|
|
81
|
-
*/
|
|
82
|
-
private _createActionButtons;
|
|
83
|
-
/**
|
|
84
|
-
* Focuses the first {@link #_focusables focusable} in the form.
|
|
85
|
-
*/
|
|
86
|
-
focus(): void;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Fired when the form view is submitted (when one of the children triggered the submit event),
|
|
90
|
-
* e.g. by a click on {@link ~ImageInsertPanelView#insertButtonView}.
|
|
91
|
-
*
|
|
92
|
-
* @eventName ~ImageInsertPanelView#submit
|
|
93
|
-
*/
|
|
94
|
-
export type SubmitEvent = {
|
|
95
|
-
name: 'submit';
|
|
96
|
-
args: [];
|
|
97
|
-
};
|
|
98
|
-
/**
|
|
99
|
-
* Fired when the form view is canceled, e.g. by a click on {@link ~ImageInsertPanelView#cancelButtonView}.
|
|
100
|
-
*
|
|
101
|
-
* @eventName ~ImageInsertPanelView#cancel
|
|
102
|
-
*/
|
|
103
|
-
export type CancelEvent = {
|
|
104
|
-
name: 'cancel';
|
|
105
|
-
args: [];
|
|
106
|
-
};
|
|
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 { ButtonView, View, ViewCollection, FocusCycler } from 'ckeditor5/src/ui';
|
|
6
|
+
import { Collection, FocusTracker, KeystrokeHandler, type Locale } from 'ckeditor5/src/utils';
|
|
7
|
+
import '../../../theme/imageinsert.css';
|
|
8
|
+
export type ViewWithName = View & {
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* The insert an image via URL view controller class.
|
|
13
|
+
*
|
|
14
|
+
* See {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
|
|
15
|
+
*/
|
|
16
|
+
export default class ImageInsertPanelView extends View {
|
|
17
|
+
/**
|
|
18
|
+
* The "insert/update" button view.
|
|
19
|
+
*/
|
|
20
|
+
insertButtonView: ButtonView;
|
|
21
|
+
/**
|
|
22
|
+
* The "cancel" button view.
|
|
23
|
+
*/
|
|
24
|
+
cancelButtonView: ButtonView;
|
|
25
|
+
/**
|
|
26
|
+
* The value of the URL input.
|
|
27
|
+
*
|
|
28
|
+
* @observable
|
|
29
|
+
*/
|
|
30
|
+
imageURLInputValue: string;
|
|
31
|
+
/**
|
|
32
|
+
* Tracks information about DOM focus in the form.
|
|
33
|
+
*/
|
|
34
|
+
readonly focusTracker: FocusTracker;
|
|
35
|
+
/**
|
|
36
|
+
* An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.
|
|
37
|
+
*/
|
|
38
|
+
readonly keystrokes: KeystrokeHandler;
|
|
39
|
+
/**
|
|
40
|
+
* A collection of views that can be focused in the form.
|
|
41
|
+
*/
|
|
42
|
+
protected readonly _focusables: ViewCollection;
|
|
43
|
+
/**
|
|
44
|
+
* Helps cycling over {@link #_focusables} in the form.
|
|
45
|
+
*/
|
|
46
|
+
protected readonly _focusCycler: FocusCycler;
|
|
47
|
+
/**
|
|
48
|
+
* A collection of the defined integrations for inserting the images.
|
|
49
|
+
*
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
_integrations: Collection<ViewWithName>;
|
|
53
|
+
/**
|
|
54
|
+
* Creates a view for the dropdown panel of {@link module:image/imageinsert/imageinsertui~ImageInsertUI}.
|
|
55
|
+
*
|
|
56
|
+
* @param locale The localization services instance.
|
|
57
|
+
* @param integrations An integrations object that contains components (or tokens for components) to be shown in the panel view.
|
|
58
|
+
*/
|
|
59
|
+
constructor(locale: Locale, integrations?: Record<string, View>);
|
|
60
|
+
/**
|
|
61
|
+
* @inheritDoc
|
|
62
|
+
*/
|
|
63
|
+
render(): void;
|
|
64
|
+
/**
|
|
65
|
+
* @inheritDoc
|
|
66
|
+
*/
|
|
67
|
+
destroy(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Returns a view of the integration.
|
|
70
|
+
*
|
|
71
|
+
* @param name The name of the integration.
|
|
72
|
+
*/
|
|
73
|
+
getIntegration(name: string): View;
|
|
74
|
+
/**
|
|
75
|
+
* Creates the following form controls:
|
|
76
|
+
*
|
|
77
|
+
* * {@link #insertButtonView},
|
|
78
|
+
* * {@link #cancelButtonView}.
|
|
79
|
+
*
|
|
80
|
+
* @param locale The localization services instance.
|
|
81
|
+
*/
|
|
82
|
+
private _createActionButtons;
|
|
83
|
+
/**
|
|
84
|
+
* Focuses the first {@link #_focusables focusable} in the form.
|
|
85
|
+
*/
|
|
86
|
+
focus(): void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Fired when the form view is submitted (when one of the children triggered the submit event),
|
|
90
|
+
* e.g. by a click on {@link ~ImageInsertPanelView#insertButtonView}.
|
|
91
|
+
*
|
|
92
|
+
* @eventName ~ImageInsertPanelView#submit
|
|
93
|
+
*/
|
|
94
|
+
export type SubmitEvent = {
|
|
95
|
+
name: 'submit';
|
|
96
|
+
args: [];
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Fired when the form view is canceled, e.g. by a click on {@link ~ImageInsertPanelView#cancelButtonView}.
|
|
100
|
+
*
|
|
101
|
+
* @eventName ~ImageInsertPanelView#cancel
|
|
102
|
+
*/
|
|
103
|
+
export type CancelEvent = {
|
|
104
|
+
name: 'cancel';
|
|
105
|
+
args: [];
|
|
106
|
+
};
|
|
@@ -1,161 +1,161 @@
|
|
|
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
|
-
/**
|
|
6
|
-
* @module image/imageinsert/ui/imageinsertpanelview
|
|
7
|
-
*/
|
|
8
|
-
import { icons } from 'ckeditor5/src/core';
|
|
9
|
-
import { ButtonView, View, ViewCollection, submitHandler, FocusCycler } from 'ckeditor5/src/ui';
|
|
10
|
-
import { Collection, FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils';
|
|
11
|
-
import ImageInsertFormRowView from './imageinsertformrowview';
|
|
12
|
-
import '../../../theme/imageinsert.css';
|
|
13
|
-
/**
|
|
14
|
-
* The insert an image via URL view controller class.
|
|
15
|
-
*
|
|
16
|
-
* See {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
|
|
17
|
-
*/
|
|
18
|
-
export default class ImageInsertPanelView extends View {
|
|
19
|
-
/**
|
|
20
|
-
* Creates a view for the dropdown panel of {@link module:image/imageinsert/imageinsertui~ImageInsertUI}.
|
|
21
|
-
*
|
|
22
|
-
* @param locale The localization services instance.
|
|
23
|
-
* @param integrations An integrations object that contains components (or tokens for components) to be shown in the panel view.
|
|
24
|
-
*/
|
|
25
|
-
constructor(locale, integrations = {}) {
|
|
26
|
-
super(locale);
|
|
27
|
-
const { insertButtonView, cancelButtonView } = this._createActionButtons(locale);
|
|
28
|
-
this.insertButtonView = insertButtonView;
|
|
29
|
-
this.cancelButtonView = cancelButtonView;
|
|
30
|
-
this.set('imageURLInputValue', '');
|
|
31
|
-
this.focusTracker = new FocusTracker();
|
|
32
|
-
this.keystrokes = new KeystrokeHandler();
|
|
33
|
-
this._focusables = new ViewCollection();
|
|
34
|
-
this._focusCycler = new FocusCycler({
|
|
35
|
-
focusables: this._focusables,
|
|
36
|
-
focusTracker: this.focusTracker,
|
|
37
|
-
keystrokeHandler: this.keystrokes,
|
|
38
|
-
actions: {
|
|
39
|
-
// Navigate form fields backwards using the Shift + Tab keystroke.
|
|
40
|
-
focusPrevious: 'shift + tab',
|
|
41
|
-
// Navigate form fields forwards using the Tab key.
|
|
42
|
-
focusNext: 'tab'
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
this.set('_integrations', new Collection());
|
|
46
|
-
for (const [integration, integrationView] of Object.entries(integrations)) {
|
|
47
|
-
if (integration === 'insertImageViaUrl') {
|
|
48
|
-
integrationView.fieldView
|
|
49
|
-
.bind('value').to(this, 'imageURLInputValue', (value) => value || '');
|
|
50
|
-
integrationView.fieldView.on('input', () => {
|
|
51
|
-
this.imageURLInputValue = integrationView.fieldView.element.value.trim();
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
integrationView.name = integration;
|
|
55
|
-
this._integrations.add(integrationView);
|
|
56
|
-
}
|
|
57
|
-
this.setTemplate({
|
|
58
|
-
tag: 'form',
|
|
59
|
-
attributes: {
|
|
60
|
-
class: [
|
|
61
|
-
'ck',
|
|
62
|
-
'ck-image-insert-form'
|
|
63
|
-
],
|
|
64
|
-
tabindex: '-1'
|
|
65
|
-
},
|
|
66
|
-
children: [
|
|
67
|
-
...this._integrations,
|
|
68
|
-
new ImageInsertFormRowView(locale, {
|
|
69
|
-
children: [
|
|
70
|
-
this.insertButtonView,
|
|
71
|
-
this.cancelButtonView
|
|
72
|
-
],
|
|
73
|
-
class: 'ck-image-insert-form__action-row'
|
|
74
|
-
})
|
|
75
|
-
]
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* @inheritDoc
|
|
80
|
-
*/
|
|
81
|
-
render() {
|
|
82
|
-
super.render();
|
|
83
|
-
submitHandler({
|
|
84
|
-
view: this
|
|
85
|
-
});
|
|
86
|
-
const childViews = [
|
|
87
|
-
...this._integrations,
|
|
88
|
-
this.insertButtonView,
|
|
89
|
-
this.cancelButtonView
|
|
90
|
-
];
|
|
91
|
-
childViews.forEach(v => {
|
|
92
|
-
// Register the view as focusable.
|
|
93
|
-
this._focusables.add(v);
|
|
94
|
-
// Register the view in the focus tracker.
|
|
95
|
-
this.focusTracker.add(v.element);
|
|
96
|
-
});
|
|
97
|
-
// Start listening for the keystrokes coming from #element.
|
|
98
|
-
this.keystrokes.listenTo(this.element);
|
|
99
|
-
const stopPropagation = (data) => data.stopPropagation();
|
|
100
|
-
// Since the form is in the dropdown panel which is a child of the toolbar, the toolbar's
|
|
101
|
-
// keystroke handler would take over the key management in the URL input. We need to prevent
|
|
102
|
-
// this ASAP. Otherwise, the basic caret movement using the arrow keys will be impossible.
|
|
103
|
-
this.keystrokes.set('arrowright', stopPropagation);
|
|
104
|
-
this.keystrokes.set('arrowleft', stopPropagation);
|
|
105
|
-
this.keystrokes.set('arrowup', stopPropagation);
|
|
106
|
-
this.keystrokes.set('arrowdown', stopPropagation);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* @inheritDoc
|
|
110
|
-
*/
|
|
111
|
-
destroy() {
|
|
112
|
-
super.destroy();
|
|
113
|
-
this.focusTracker.destroy();
|
|
114
|
-
this.keystrokes.destroy();
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Returns a view of the integration.
|
|
118
|
-
*
|
|
119
|
-
* @param name The name of the integration.
|
|
120
|
-
*/
|
|
121
|
-
getIntegration(name) {
|
|
122
|
-
return this._integrations.find(integration => integration.name === name);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Creates the following form controls:
|
|
126
|
-
*
|
|
127
|
-
* * {@link #insertButtonView},
|
|
128
|
-
* * {@link #cancelButtonView}.
|
|
129
|
-
*
|
|
130
|
-
* @param locale The localization services instance.
|
|
131
|
-
*/
|
|
132
|
-
_createActionButtons(locale) {
|
|
133
|
-
const t = locale.t;
|
|
134
|
-
const insertButtonView = new ButtonView(locale);
|
|
135
|
-
const cancelButtonView = new ButtonView(locale);
|
|
136
|
-
insertButtonView.set({
|
|
137
|
-
label: t('Insert'),
|
|
138
|
-
icon: icons.check,
|
|
139
|
-
class: 'ck-button-save',
|
|
140
|
-
type: 'submit',
|
|
141
|
-
withText: true,
|
|
142
|
-
isEnabled: this.imageURLInputValue
|
|
143
|
-
});
|
|
144
|
-
cancelButtonView.set({
|
|
145
|
-
label: t('Cancel'),
|
|
146
|
-
icon: icons.cancel,
|
|
147
|
-
class: 'ck-button-cancel',
|
|
148
|
-
withText: true
|
|
149
|
-
});
|
|
150
|
-
insertButtonView.bind('isEnabled').to(this, 'imageURLInputValue', value => !!value);
|
|
151
|
-
insertButtonView.delegate('execute').to(this, 'submit');
|
|
152
|
-
cancelButtonView.delegate('execute').to(this, 'cancel');
|
|
153
|
-
return { insertButtonView, cancelButtonView };
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Focuses the first {@link #_focusables focusable} in the form.
|
|
157
|
-
*/
|
|
158
|
-
focus() {
|
|
159
|
-
this._focusCycler.focusFirst();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
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
|
+
/**
|
|
6
|
+
* @module image/imageinsert/ui/imageinsertpanelview
|
|
7
|
+
*/
|
|
8
|
+
import { icons } from 'ckeditor5/src/core';
|
|
9
|
+
import { ButtonView, View, ViewCollection, submitHandler, FocusCycler } from 'ckeditor5/src/ui';
|
|
10
|
+
import { Collection, FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils';
|
|
11
|
+
import ImageInsertFormRowView from './imageinsertformrowview';
|
|
12
|
+
import '../../../theme/imageinsert.css';
|
|
13
|
+
/**
|
|
14
|
+
* The insert an image via URL view controller class.
|
|
15
|
+
*
|
|
16
|
+
* See {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
|
|
17
|
+
*/
|
|
18
|
+
export default class ImageInsertPanelView extends View {
|
|
19
|
+
/**
|
|
20
|
+
* Creates a view for the dropdown panel of {@link module:image/imageinsert/imageinsertui~ImageInsertUI}.
|
|
21
|
+
*
|
|
22
|
+
* @param locale The localization services instance.
|
|
23
|
+
* @param integrations An integrations object that contains components (or tokens for components) to be shown in the panel view.
|
|
24
|
+
*/
|
|
25
|
+
constructor(locale, integrations = {}) {
|
|
26
|
+
super(locale);
|
|
27
|
+
const { insertButtonView, cancelButtonView } = this._createActionButtons(locale);
|
|
28
|
+
this.insertButtonView = insertButtonView;
|
|
29
|
+
this.cancelButtonView = cancelButtonView;
|
|
30
|
+
this.set('imageURLInputValue', '');
|
|
31
|
+
this.focusTracker = new FocusTracker();
|
|
32
|
+
this.keystrokes = new KeystrokeHandler();
|
|
33
|
+
this._focusables = new ViewCollection();
|
|
34
|
+
this._focusCycler = new FocusCycler({
|
|
35
|
+
focusables: this._focusables,
|
|
36
|
+
focusTracker: this.focusTracker,
|
|
37
|
+
keystrokeHandler: this.keystrokes,
|
|
38
|
+
actions: {
|
|
39
|
+
// Navigate form fields backwards using the Shift + Tab keystroke.
|
|
40
|
+
focusPrevious: 'shift + tab',
|
|
41
|
+
// Navigate form fields forwards using the Tab key.
|
|
42
|
+
focusNext: 'tab'
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
this.set('_integrations', new Collection());
|
|
46
|
+
for (const [integration, integrationView] of Object.entries(integrations)) {
|
|
47
|
+
if (integration === 'insertImageViaUrl') {
|
|
48
|
+
integrationView.fieldView
|
|
49
|
+
.bind('value').to(this, 'imageURLInputValue', (value) => value || '');
|
|
50
|
+
integrationView.fieldView.on('input', () => {
|
|
51
|
+
this.imageURLInputValue = integrationView.fieldView.element.value.trim();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
integrationView.name = integration;
|
|
55
|
+
this._integrations.add(integrationView);
|
|
56
|
+
}
|
|
57
|
+
this.setTemplate({
|
|
58
|
+
tag: 'form',
|
|
59
|
+
attributes: {
|
|
60
|
+
class: [
|
|
61
|
+
'ck',
|
|
62
|
+
'ck-image-insert-form'
|
|
63
|
+
],
|
|
64
|
+
tabindex: '-1'
|
|
65
|
+
},
|
|
66
|
+
children: [
|
|
67
|
+
...this._integrations,
|
|
68
|
+
new ImageInsertFormRowView(locale, {
|
|
69
|
+
children: [
|
|
70
|
+
this.insertButtonView,
|
|
71
|
+
this.cancelButtonView
|
|
72
|
+
],
|
|
73
|
+
class: 'ck-image-insert-form__action-row'
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @inheritDoc
|
|
80
|
+
*/
|
|
81
|
+
render() {
|
|
82
|
+
super.render();
|
|
83
|
+
submitHandler({
|
|
84
|
+
view: this
|
|
85
|
+
});
|
|
86
|
+
const childViews = [
|
|
87
|
+
...this._integrations,
|
|
88
|
+
this.insertButtonView,
|
|
89
|
+
this.cancelButtonView
|
|
90
|
+
];
|
|
91
|
+
childViews.forEach(v => {
|
|
92
|
+
// Register the view as focusable.
|
|
93
|
+
this._focusables.add(v);
|
|
94
|
+
// Register the view in the focus tracker.
|
|
95
|
+
this.focusTracker.add(v.element);
|
|
96
|
+
});
|
|
97
|
+
// Start listening for the keystrokes coming from #element.
|
|
98
|
+
this.keystrokes.listenTo(this.element);
|
|
99
|
+
const stopPropagation = (data) => data.stopPropagation();
|
|
100
|
+
// Since the form is in the dropdown panel which is a child of the toolbar, the toolbar's
|
|
101
|
+
// keystroke handler would take over the key management in the URL input. We need to prevent
|
|
102
|
+
// this ASAP. Otherwise, the basic caret movement using the arrow keys will be impossible.
|
|
103
|
+
this.keystrokes.set('arrowright', stopPropagation);
|
|
104
|
+
this.keystrokes.set('arrowleft', stopPropagation);
|
|
105
|
+
this.keystrokes.set('arrowup', stopPropagation);
|
|
106
|
+
this.keystrokes.set('arrowdown', stopPropagation);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* @inheritDoc
|
|
110
|
+
*/
|
|
111
|
+
destroy() {
|
|
112
|
+
super.destroy();
|
|
113
|
+
this.focusTracker.destroy();
|
|
114
|
+
this.keystrokes.destroy();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Returns a view of the integration.
|
|
118
|
+
*
|
|
119
|
+
* @param name The name of the integration.
|
|
120
|
+
*/
|
|
121
|
+
getIntegration(name) {
|
|
122
|
+
return this._integrations.find(integration => integration.name === name);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Creates the following form controls:
|
|
126
|
+
*
|
|
127
|
+
* * {@link #insertButtonView},
|
|
128
|
+
* * {@link #cancelButtonView}.
|
|
129
|
+
*
|
|
130
|
+
* @param locale The localization services instance.
|
|
131
|
+
*/
|
|
132
|
+
_createActionButtons(locale) {
|
|
133
|
+
const t = locale.t;
|
|
134
|
+
const insertButtonView = new ButtonView(locale);
|
|
135
|
+
const cancelButtonView = new ButtonView(locale);
|
|
136
|
+
insertButtonView.set({
|
|
137
|
+
label: t('Insert'),
|
|
138
|
+
icon: icons.check,
|
|
139
|
+
class: 'ck-button-save',
|
|
140
|
+
type: 'submit',
|
|
141
|
+
withText: true,
|
|
142
|
+
isEnabled: this.imageURLInputValue
|
|
143
|
+
});
|
|
144
|
+
cancelButtonView.set({
|
|
145
|
+
label: t('Cancel'),
|
|
146
|
+
icon: icons.cancel,
|
|
147
|
+
class: 'ck-button-cancel',
|
|
148
|
+
withText: true
|
|
149
|
+
});
|
|
150
|
+
insertButtonView.bind('isEnabled').to(this, 'imageURLInputValue', value => !!value);
|
|
151
|
+
insertButtonView.delegate('execute').to(this, 'submit');
|
|
152
|
+
cancelButtonView.delegate('execute').to(this, 'cancel');
|
|
153
|
+
return { insertButtonView, cancelButtonView };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Focuses the first {@link #_focusables focusable} in the form.
|
|
157
|
+
*/
|
|
158
|
+
focus() {
|
|
159
|
+
this._focusCycler.focusFirst();
|
|
160
|
+
}
|
|
161
|
+
}
|