@ckeditor/ckeditor5-image 39.0.2 → 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/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/pt-br.po +1 -1
- package/package.json +3 -3
- 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,120 +1,120 @@
|
|
|
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/image/insertimagecommand
|
|
7
|
-
*/
|
|
8
|
-
import { Command } from 'ckeditor5/src/core';
|
|
9
|
-
import { logWarning, toArray } from 'ckeditor5/src/utils';
|
|
10
|
-
/**
|
|
11
|
-
* Insert image command.
|
|
12
|
-
*
|
|
13
|
-
* The command is registered by the {@link module:image/image/imageediting~ImageEditing} plugin as `insertImage`
|
|
14
|
-
* and it is also available via aliased `imageInsert` name.
|
|
15
|
-
*
|
|
16
|
-
* In order to insert an image at the current selection position
|
|
17
|
-
* (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),
|
|
18
|
-
* execute the command and specify the image source:
|
|
19
|
-
*
|
|
20
|
-
* ```ts
|
|
21
|
-
* editor.execute( 'insertImage', { source: 'http://url.to.the/image' } );
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* It is also possible to insert multiple images at once:
|
|
25
|
-
*
|
|
26
|
-
* ```ts
|
|
27
|
-
* editor.execute( 'insertImage', {
|
|
28
|
-
* source: [
|
|
29
|
-
* 'path/to/image.jpg',
|
|
30
|
-
* 'path/to/other-image.jpg'
|
|
31
|
-
* ]
|
|
32
|
-
* } );
|
|
33
|
-
* ```
|
|
34
|
-
*
|
|
35
|
-
* If you want to take the full control over the process, you can specify individual model attributes:
|
|
36
|
-
*
|
|
37
|
-
* ```ts
|
|
38
|
-
* editor.execute( 'insertImage', {
|
|
39
|
-
* source: [
|
|
40
|
-
* { src: 'path/to/image.jpg', alt: 'First alt text' },
|
|
41
|
-
* { src: 'path/to/other-image.jpg', alt: 'Second alt text', customAttribute: 'My attribute value' }
|
|
42
|
-
* ]
|
|
43
|
-
* } );
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
export default class InsertImageCommand extends Command {
|
|
47
|
-
/**
|
|
48
|
-
* @inheritDoc
|
|
49
|
-
*/
|
|
50
|
-
constructor(editor) {
|
|
51
|
-
super(editor);
|
|
52
|
-
const configImageInsertType = editor.config.get('image.insert.type');
|
|
53
|
-
if (!editor.plugins.has('ImageBlockEditing')) {
|
|
54
|
-
if (configImageInsertType === 'block') {
|
|
55
|
-
/**
|
|
56
|
-
* The {@link module:image/imageblock~ImageBlock} plugin must be enabled to allow inserting block images. See
|
|
57
|
-
* {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.
|
|
58
|
-
*
|
|
59
|
-
* @error image-block-plugin-required
|
|
60
|
-
*/
|
|
61
|
-
logWarning('image-block-plugin-required');
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (!editor.plugins.has('ImageInlineEditing')) {
|
|
65
|
-
if (configImageInsertType === 'inline') {
|
|
66
|
-
/**
|
|
67
|
-
* The {@link module:image/imageinline~ImageInline} plugin must be enabled to allow inserting inline images. See
|
|
68
|
-
* {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.
|
|
69
|
-
*
|
|
70
|
-
* @error image-inline-plugin-required
|
|
71
|
-
*/
|
|
72
|
-
logWarning('image-inline-plugin-required');
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* @inheritDoc
|
|
78
|
-
*/
|
|
79
|
-
refresh() {
|
|
80
|
-
const imageUtils = this.editor.plugins.get('ImageUtils');
|
|
81
|
-
this.isEnabled = imageUtils.isImageAllowed();
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Executes the command.
|
|
85
|
-
*
|
|
86
|
-
* @fires execute
|
|
87
|
-
* @param options Options for the executed command.
|
|
88
|
-
* @param options.source The image source or an array of image sources to insert.
|
|
89
|
-
* See the documentation of the command to learn more about accepted formats.
|
|
90
|
-
*/
|
|
91
|
-
execute(options) {
|
|
92
|
-
const sourceDefinitions = toArray(options.source);
|
|
93
|
-
const selection = this.editor.model.document.selection;
|
|
94
|
-
const imageUtils = this.editor.plugins.get('ImageUtils');
|
|
95
|
-
// In case of multiple images, each image (starting from the 2nd) will be inserted at a position that
|
|
96
|
-
// follows the previous one. That will move the selection and, to stay on the safe side and make sure
|
|
97
|
-
// all images inherit the same selection attributes, they are collected beforehand.
|
|
98
|
-
//
|
|
99
|
-
// Applying these attributes ensures, for instance, that inserting an (inline) image into a link does
|
|
100
|
-
// not split that link but preserves its continuity.
|
|
101
|
-
//
|
|
102
|
-
// Note: Selection attributes that do not make sense for images will be filtered out by insertImage() anyway.
|
|
103
|
-
const selectionAttributes = Object.fromEntries(selection.getAttributes());
|
|
104
|
-
sourceDefinitions.forEach((sourceDefinition, index) => {
|
|
105
|
-
const selectedElement = selection.getSelectedElement();
|
|
106
|
-
if (typeof sourceDefinition === 'string') {
|
|
107
|
-
sourceDefinition = { src: sourceDefinition };
|
|
108
|
-
}
|
|
109
|
-
// Inserting of an inline image replace the selected element and make a selection on the inserted image.
|
|
110
|
-
// Therefore inserting multiple inline images requires creating position after each element.
|
|
111
|
-
if (index && selectedElement && imageUtils.isImage(selectedElement)) {
|
|
112
|
-
const position = this.editor.model.createPositionAfter(selectedElement);
|
|
113
|
-
imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes }, position);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes });
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
}
|
|
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/image/insertimagecommand
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'ckeditor5/src/core';
|
|
9
|
+
import { logWarning, toArray } from 'ckeditor5/src/utils';
|
|
10
|
+
/**
|
|
11
|
+
* Insert image command.
|
|
12
|
+
*
|
|
13
|
+
* The command is registered by the {@link module:image/image/imageediting~ImageEditing} plugin as `insertImage`
|
|
14
|
+
* and it is also available via aliased `imageInsert` name.
|
|
15
|
+
*
|
|
16
|
+
* In order to insert an image at the current selection position
|
|
17
|
+
* (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),
|
|
18
|
+
* execute the command and specify the image source:
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* editor.execute( 'insertImage', { source: 'http://url.to.the/image' } );
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* It is also possible to insert multiple images at once:
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* editor.execute( 'insertImage', {
|
|
28
|
+
* source: [
|
|
29
|
+
* 'path/to/image.jpg',
|
|
30
|
+
* 'path/to/other-image.jpg'
|
|
31
|
+
* ]
|
|
32
|
+
* } );
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* If you want to take the full control over the process, you can specify individual model attributes:
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* editor.execute( 'insertImage', {
|
|
39
|
+
* source: [
|
|
40
|
+
* { src: 'path/to/image.jpg', alt: 'First alt text' },
|
|
41
|
+
* { src: 'path/to/other-image.jpg', alt: 'Second alt text', customAttribute: 'My attribute value' }
|
|
42
|
+
* ]
|
|
43
|
+
* } );
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export default class InsertImageCommand extends Command {
|
|
47
|
+
/**
|
|
48
|
+
* @inheritDoc
|
|
49
|
+
*/
|
|
50
|
+
constructor(editor) {
|
|
51
|
+
super(editor);
|
|
52
|
+
const configImageInsertType = editor.config.get('image.insert.type');
|
|
53
|
+
if (!editor.plugins.has('ImageBlockEditing')) {
|
|
54
|
+
if (configImageInsertType === 'block') {
|
|
55
|
+
/**
|
|
56
|
+
* The {@link module:image/imageblock~ImageBlock} plugin must be enabled to allow inserting block images. See
|
|
57
|
+
* {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.
|
|
58
|
+
*
|
|
59
|
+
* @error image-block-plugin-required
|
|
60
|
+
*/
|
|
61
|
+
logWarning('image-block-plugin-required');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (!editor.plugins.has('ImageInlineEditing')) {
|
|
65
|
+
if (configImageInsertType === 'inline') {
|
|
66
|
+
/**
|
|
67
|
+
* The {@link module:image/imageinline~ImageInline} plugin must be enabled to allow inserting inline images. See
|
|
68
|
+
* {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.
|
|
69
|
+
*
|
|
70
|
+
* @error image-inline-plugin-required
|
|
71
|
+
*/
|
|
72
|
+
logWarning('image-inline-plugin-required');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @inheritDoc
|
|
78
|
+
*/
|
|
79
|
+
refresh() {
|
|
80
|
+
const imageUtils = this.editor.plugins.get('ImageUtils');
|
|
81
|
+
this.isEnabled = imageUtils.isImageAllowed();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Executes the command.
|
|
85
|
+
*
|
|
86
|
+
* @fires execute
|
|
87
|
+
* @param options Options for the executed command.
|
|
88
|
+
* @param options.source The image source or an array of image sources to insert.
|
|
89
|
+
* See the documentation of the command to learn more about accepted formats.
|
|
90
|
+
*/
|
|
91
|
+
execute(options) {
|
|
92
|
+
const sourceDefinitions = toArray(options.source);
|
|
93
|
+
const selection = this.editor.model.document.selection;
|
|
94
|
+
const imageUtils = this.editor.plugins.get('ImageUtils');
|
|
95
|
+
// In case of multiple images, each image (starting from the 2nd) will be inserted at a position that
|
|
96
|
+
// follows the previous one. That will move the selection and, to stay on the safe side and make sure
|
|
97
|
+
// all images inherit the same selection attributes, they are collected beforehand.
|
|
98
|
+
//
|
|
99
|
+
// Applying these attributes ensures, for instance, that inserting an (inline) image into a link does
|
|
100
|
+
// not split that link but preserves its continuity.
|
|
101
|
+
//
|
|
102
|
+
// Note: Selection attributes that do not make sense for images will be filtered out by insertImage() anyway.
|
|
103
|
+
const selectionAttributes = Object.fromEntries(selection.getAttributes());
|
|
104
|
+
sourceDefinitions.forEach((sourceDefinition, index) => {
|
|
105
|
+
const selectedElement = selection.getSelectedElement();
|
|
106
|
+
if (typeof sourceDefinition === 'string') {
|
|
107
|
+
sourceDefinition = { src: sourceDefinition };
|
|
108
|
+
}
|
|
109
|
+
// Inserting of an inline image replace the selected element and make a selection on the inserted image.
|
|
110
|
+
// Therefore inserting multiple inline images requires creating position after each element.
|
|
111
|
+
if (index && selectedElement && imageUtils.isImage(selectedElement)) {
|
|
112
|
+
const position = this.editor.model.createPositionAfter(selectedElement);
|
|
113
|
+
imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes }, position);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes });
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
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 { Command } from 'ckeditor5/src/core';
|
|
6
|
-
/**
|
|
7
|
-
* @module image/image/replaceimagesourcecommand
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Replace image source command.
|
|
11
|
-
*
|
|
12
|
-
* Changes image source to the one provided. Can be executed as follows:
|
|
13
|
-
*
|
|
14
|
-
* ```ts
|
|
15
|
-
* editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export default class ReplaceImageSourceCommand extends Command {
|
|
19
|
-
value: string | null;
|
|
20
|
-
/**
|
|
21
|
-
* @inheritDoc
|
|
22
|
-
*/
|
|
23
|
-
refresh(): void;
|
|
24
|
-
/**
|
|
25
|
-
* Executes the command.
|
|
26
|
-
*
|
|
27
|
-
* @fires execute
|
|
28
|
-
* @param options Options for the executed command.
|
|
29
|
-
* @param options.source The image source to replace.
|
|
30
|
-
*/
|
|
31
|
-
execute(options: {
|
|
32
|
-
source: string;
|
|
33
|
-
}): void;
|
|
34
|
-
}
|
|
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 { Command } from 'ckeditor5/src/core';
|
|
6
|
+
/**
|
|
7
|
+
* @module image/image/replaceimagesourcecommand
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Replace image source command.
|
|
11
|
+
*
|
|
12
|
+
* Changes image source to the one provided. Can be executed as follows:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export default class ReplaceImageSourceCommand extends Command {
|
|
19
|
+
value: string | null;
|
|
20
|
+
/**
|
|
21
|
+
* @inheritDoc
|
|
22
|
+
*/
|
|
23
|
+
refresh(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Executes the command.
|
|
26
|
+
*
|
|
27
|
+
* @fires execute
|
|
28
|
+
* @param options Options for the executed command.
|
|
29
|
+
* @param options.source The image source to replace.
|
|
30
|
+
*/
|
|
31
|
+
execute(options: {
|
|
32
|
+
source: string;
|
|
33
|
+
}): void;
|
|
34
|
+
}
|
|
@@ -1,44 +1,44 @@
|
|
|
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 { Command } from 'ckeditor5/src/core';
|
|
6
|
-
/**
|
|
7
|
-
* @module image/image/replaceimagesourcecommand
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Replace image source command.
|
|
11
|
-
*
|
|
12
|
-
* Changes image source to the one provided. Can be executed as follows:
|
|
13
|
-
*
|
|
14
|
-
* ```ts
|
|
15
|
-
* editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export default class ReplaceImageSourceCommand extends Command {
|
|
19
|
-
/**
|
|
20
|
-
* @inheritDoc
|
|
21
|
-
*/
|
|
22
|
-
refresh() {
|
|
23
|
-
const editor = this.editor;
|
|
24
|
-
const imageUtils = editor.plugins.get('ImageUtils');
|
|
25
|
-
const element = this.editor.model.document.selection.getSelectedElement();
|
|
26
|
-
this.isEnabled = imageUtils.isImage(element);
|
|
27
|
-
this.value = this.isEnabled ? element.getAttribute('src') : null;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Executes the command.
|
|
31
|
-
*
|
|
32
|
-
* @fires execute
|
|
33
|
-
* @param options Options for the executed command.
|
|
34
|
-
* @param options.source The image source to replace.
|
|
35
|
-
*/
|
|
36
|
-
execute(options) {
|
|
37
|
-
const image = this.editor.model.document.selection.getSelectedElement();
|
|
38
|
-
this.editor.model.change(writer => {
|
|
39
|
-
writer.setAttribute('src', options.source, image);
|
|
40
|
-
writer.removeAttribute('srcset', image);
|
|
41
|
-
writer.removeAttribute('sizes', image);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}
|
|
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 { Command } from 'ckeditor5/src/core';
|
|
6
|
+
/**
|
|
7
|
+
* @module image/image/replaceimagesourcecommand
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Replace image source command.
|
|
11
|
+
*
|
|
12
|
+
* Changes image source to the one provided. Can be executed as follows:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export default class ReplaceImageSourceCommand extends Command {
|
|
19
|
+
/**
|
|
20
|
+
* @inheritDoc
|
|
21
|
+
*/
|
|
22
|
+
refresh() {
|
|
23
|
+
const editor = this.editor;
|
|
24
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
25
|
+
const element = this.editor.model.document.selection.getSelectedElement();
|
|
26
|
+
this.isEnabled = imageUtils.isImage(element);
|
|
27
|
+
this.value = this.isEnabled ? element.getAttribute('src') : null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Executes the command.
|
|
31
|
+
*
|
|
32
|
+
* @fires execute
|
|
33
|
+
* @param options Options for the executed command.
|
|
34
|
+
* @param options.source The image source to replace.
|
|
35
|
+
*/
|
|
36
|
+
execute(options) {
|
|
37
|
+
const image = this.editor.model.document.selection.getSelectedElement();
|
|
38
|
+
this.editor.model.change(writer => {
|
|
39
|
+
writer.setAttribute('src', options.source, image);
|
|
40
|
+
writer.removeAttribute('srcset', image);
|
|
41
|
+
writer.removeAttribute('sizes', image);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
package/src/image/ui/utils.d.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
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/image/ui/utils
|
|
7
|
-
*/
|
|
8
|
-
import type { PositionOptions } from 'ckeditor5/src/utils';
|
|
9
|
-
import type { Editor } from 'ckeditor5/src/core';
|
|
10
|
-
/**
|
|
11
|
-
* A helper utility that positions the
|
|
12
|
-
* {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance
|
|
13
|
-
* with respect to the image in the editor content, if one is selected.
|
|
14
|
-
*
|
|
15
|
-
* @param editor The editor instance.
|
|
16
|
-
*/
|
|
17
|
-
export declare function repositionContextualBalloon(editor: Editor): void;
|
|
18
|
-
/**
|
|
19
|
-
* Returns the positioning options that control the geometry of the
|
|
20
|
-
* {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect
|
|
21
|
-
* to the selected element in the editor content.
|
|
22
|
-
*
|
|
23
|
-
* @param editor The editor instance.
|
|
24
|
-
*/
|
|
25
|
-
export declare function getBalloonPositionData(editor: Editor): Partial<PositionOptions>;
|
|
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/image/ui/utils
|
|
7
|
+
*/
|
|
8
|
+
import type { PositionOptions } from 'ckeditor5/src/utils';
|
|
9
|
+
import type { Editor } from 'ckeditor5/src/core';
|
|
10
|
+
/**
|
|
11
|
+
* A helper utility that positions the
|
|
12
|
+
* {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance
|
|
13
|
+
* with respect to the image in the editor content, if one is selected.
|
|
14
|
+
*
|
|
15
|
+
* @param editor The editor instance.
|
|
16
|
+
*/
|
|
17
|
+
export declare function repositionContextualBalloon(editor: Editor): void;
|
|
18
|
+
/**
|
|
19
|
+
* Returns the positioning options that control the geometry of the
|
|
20
|
+
* {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect
|
|
21
|
+
* to the selected element in the editor content.
|
|
22
|
+
*
|
|
23
|
+
* @param editor The editor instance.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getBalloonPositionData(editor: Editor): Partial<PositionOptions>;
|
package/src/image/ui/utils.js
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
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 { BalloonPanelView } from 'ckeditor5/src/ui';
|
|
6
|
-
/**
|
|
7
|
-
* A helper utility that positions the
|
|
8
|
-
* {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance
|
|
9
|
-
* with respect to the image in the editor content, if one is selected.
|
|
10
|
-
*
|
|
11
|
-
* @param editor The editor instance.
|
|
12
|
-
*/
|
|
13
|
-
export function repositionContextualBalloon(editor) {
|
|
14
|
-
const balloon = editor.plugins.get('ContextualBalloon');
|
|
15
|
-
const imageUtils = editor.plugins.get('ImageUtils');
|
|
16
|
-
if (imageUtils.getClosestSelectedImageWidget(editor.editing.view.document.selection)) {
|
|
17
|
-
const position = getBalloonPositionData(editor);
|
|
18
|
-
balloon.updatePosition(position);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Returns the positioning options that control the geometry of the
|
|
23
|
-
* {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect
|
|
24
|
-
* to the selected element in the editor content.
|
|
25
|
-
*
|
|
26
|
-
* @param editor The editor instance.
|
|
27
|
-
*/
|
|
28
|
-
export function getBalloonPositionData(editor) {
|
|
29
|
-
const editingView = editor.editing.view;
|
|
30
|
-
const defaultPositions = BalloonPanelView.defaultPositions;
|
|
31
|
-
const imageUtils = editor.plugins.get('ImageUtils');
|
|
32
|
-
return {
|
|
33
|
-
target: editingView.domConverter.mapViewToDom(imageUtils.getClosestSelectedImageWidget(editingView.document.selection)),
|
|
34
|
-
positions: [
|
|
35
|
-
defaultPositions.northArrowSouth,
|
|
36
|
-
defaultPositions.northArrowSouthWest,
|
|
37
|
-
defaultPositions.northArrowSouthEast,
|
|
38
|
-
defaultPositions.southArrowNorth,
|
|
39
|
-
defaultPositions.southArrowNorthWest,
|
|
40
|
-
defaultPositions.southArrowNorthEast,
|
|
41
|
-
defaultPositions.viewportStickyNorth
|
|
42
|
-
]
|
|
43
|
-
};
|
|
44
|
-
}
|
|
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 { BalloonPanelView } from 'ckeditor5/src/ui';
|
|
6
|
+
/**
|
|
7
|
+
* A helper utility that positions the
|
|
8
|
+
* {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance
|
|
9
|
+
* with respect to the image in the editor content, if one is selected.
|
|
10
|
+
*
|
|
11
|
+
* @param editor The editor instance.
|
|
12
|
+
*/
|
|
13
|
+
export function repositionContextualBalloon(editor) {
|
|
14
|
+
const balloon = editor.plugins.get('ContextualBalloon');
|
|
15
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
16
|
+
if (imageUtils.getClosestSelectedImageWidget(editor.editing.view.document.selection)) {
|
|
17
|
+
const position = getBalloonPositionData(editor);
|
|
18
|
+
balloon.updatePosition(position);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns the positioning options that control the geometry of the
|
|
23
|
+
* {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect
|
|
24
|
+
* to the selected element in the editor content.
|
|
25
|
+
*
|
|
26
|
+
* @param editor The editor instance.
|
|
27
|
+
*/
|
|
28
|
+
export function getBalloonPositionData(editor) {
|
|
29
|
+
const editingView = editor.editing.view;
|
|
30
|
+
const defaultPositions = BalloonPanelView.defaultPositions;
|
|
31
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
32
|
+
return {
|
|
33
|
+
target: editingView.domConverter.mapViewToDom(imageUtils.getClosestSelectedImageWidget(editingView.document.selection)),
|
|
34
|
+
positions: [
|
|
35
|
+
defaultPositions.northArrowSouth,
|
|
36
|
+
defaultPositions.northArrowSouthWest,
|
|
37
|
+
defaultPositions.northArrowSouthEast,
|
|
38
|
+
defaultPositions.southArrowNorth,
|
|
39
|
+
defaultPositions.southArrowNorthWest,
|
|
40
|
+
defaultPositions.southArrowNorthEast,
|
|
41
|
+
defaultPositions.viewportStickyNorth
|
|
42
|
+
]
|
|
43
|
+
};
|
|
44
|
+
}
|
package/src/image/utils.d.ts
CHANGED
|
@@ -1,52 +1,64 @@
|
|
|
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/image/utils
|
|
7
|
-
*/
|
|
8
|
-
import type { DocumentSelection, MatcherPattern, Schema, Selection, ViewContainerElement, DowncastWriter } from 'ckeditor5/src/engine';
|
|
9
|
-
import type { Editor } from 'ckeditor5/src/core';
|
|
10
|
-
/**
|
|
11
|
-
* Creates a view element representing the inline image.
|
|
12
|
-
*
|
|
13
|
-
* ```html
|
|
14
|
-
* <span class="image-inline"><img></img></span>
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* Note that `alt` and `src` attributes are converted separately, so they are not included.
|
|
18
|
-
*
|
|
19
|
-
* @internal
|
|
20
|
-
*/
|
|
21
|
-
export declare function createInlineImageViewElement(writer: DowncastWriter): ViewContainerElement;
|
|
22
|
-
/**
|
|
23
|
-
* Creates a view element representing the block image.
|
|
24
|
-
*
|
|
25
|
-
* ```html
|
|
26
|
-
* <figure class="image"><img></img></figure>
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* Note that `alt` and `src` attributes are converted separately, so they are not included.
|
|
30
|
-
*
|
|
31
|
-
* @internal
|
|
32
|
-
*/
|
|
33
|
-
export declare function createBlockImageViewElement(writer: DowncastWriter): ViewContainerElement;
|
|
34
|
-
/**
|
|
35
|
-
* A function returning a `MatcherPattern` for a particular type of View images.
|
|
36
|
-
*
|
|
37
|
-
* @internal
|
|
38
|
-
* @param matchImageType The type of created image.
|
|
39
|
-
*/
|
|
40
|
-
export declare function getImgViewElementMatcher(editor: Editor, matchImageType: 'imageBlock' | 'imageInline'): MatcherPattern;
|
|
41
|
-
/**
|
|
42
|
-
* Considering the current model selection, it returns the name of the model image element
|
|
43
|
-
* (`'imageBlock'` or `'imageInline'`) that will make most sense from the UX perspective if a new
|
|
44
|
-
* image was inserted (also: uploaded, dropped, pasted) at that selection.
|
|
45
|
-
*
|
|
46
|
-
* The assumption is that inserting images into empty blocks or on other block widgets should
|
|
47
|
-
* produce block images. Inline images should be inserted in other cases, e.g. in paragraphs
|
|
48
|
-
* that already contain some text.
|
|
49
|
-
*
|
|
50
|
-
* @internal
|
|
51
|
-
*/
|
|
52
|
-
export declare function determineImageTypeForInsertionAtSelection(schema: Schema, selection: Selection | DocumentSelection): 'imageBlock' | 'imageInline';
|
|
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/image/utils
|
|
7
|
+
*/
|
|
8
|
+
import type { DocumentSelection, MatcherPattern, Schema, Selection, ViewContainerElement, DowncastWriter, ViewElement } from 'ckeditor5/src/engine';
|
|
9
|
+
import type { Editor } from 'ckeditor5/src/core';
|
|
10
|
+
/**
|
|
11
|
+
* Creates a view element representing the inline image.
|
|
12
|
+
*
|
|
13
|
+
* ```html
|
|
14
|
+
* <span class="image-inline"><img></img></span>
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Note that `alt` and `src` attributes are converted separately, so they are not included.
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare function createInlineImageViewElement(writer: DowncastWriter): ViewContainerElement;
|
|
22
|
+
/**
|
|
23
|
+
* Creates a view element representing the block image.
|
|
24
|
+
*
|
|
25
|
+
* ```html
|
|
26
|
+
* <figure class="image"><img></img></figure>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* Note that `alt` and `src` attributes are converted separately, so they are not included.
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export declare function createBlockImageViewElement(writer: DowncastWriter): ViewContainerElement;
|
|
34
|
+
/**
|
|
35
|
+
* A function returning a `MatcherPattern` for a particular type of View images.
|
|
36
|
+
*
|
|
37
|
+
* @internal
|
|
38
|
+
* @param matchImageType The type of created image.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getImgViewElementMatcher(editor: Editor, matchImageType: 'imageBlock' | 'imageInline'): MatcherPattern;
|
|
41
|
+
/**
|
|
42
|
+
* Considering the current model selection, it returns the name of the model image element
|
|
43
|
+
* (`'imageBlock'` or `'imageInline'`) that will make most sense from the UX perspective if a new
|
|
44
|
+
* image was inserted (also: uploaded, dropped, pasted) at that selection.
|
|
45
|
+
*
|
|
46
|
+
* The assumption is that inserting images into empty blocks or on other block widgets should
|
|
47
|
+
* produce block images. Inline images should be inserted in other cases, e.g. in paragraphs
|
|
48
|
+
* that already contain some text.
|
|
49
|
+
*
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
export declare function determineImageTypeForInsertionAtSelection(schema: Schema, selection: Selection | DocumentSelection): 'imageBlock' | 'imageInline';
|
|
53
|
+
/**
|
|
54
|
+
* Returns parsed value of the size, but only if it contains unit: px.
|
|
55
|
+
*/
|
|
56
|
+
export declare function getSizeValueIfInPx(size: string | undefined): number | null;
|
|
57
|
+
/**
|
|
58
|
+
* Returns true if both styles (width and height) are set.
|
|
59
|
+
*
|
|
60
|
+
* If both image styles: width & height are set, they will override the image width & height attributes in the
|
|
61
|
+
* browser. In this case, the image looks the same as if these styles were applied to attributes instead of styles.
|
|
62
|
+
* That's why we can upcast these styles to width & height attributes instead of resizedWidth and resizedHeight.
|
|
63
|
+
*/
|
|
64
|
+
export declare function widthAndHeightStylesAreBothSet(viewElement: ViewElement): boolean;
|