@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,57 +1,57 @@
|
|
|
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 { Plugin, icons } from 'ckeditor5/src/core';
|
|
6
|
-
import { FileDialogButtonView } from 'ckeditor5/src/upload';
|
|
7
|
-
import { createImageTypeRegExp } from './utils';
|
|
8
|
-
/**
|
|
9
|
-
* The image upload button plugin.
|
|
10
|
-
*
|
|
11
|
-
* For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature} documentation.
|
|
12
|
-
*
|
|
13
|
-
* Adds the `'uploadImage'` button to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
|
|
14
|
-
* and also the `imageUpload` button as an alias for backward compatibility.
|
|
15
|
-
*/
|
|
16
|
-
export default class ImageUploadUI extends Plugin {
|
|
17
|
-
/**
|
|
18
|
-
* @inheritDoc
|
|
19
|
-
*/
|
|
20
|
-
static get pluginName() {
|
|
21
|
-
return 'ImageUploadUI';
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* @inheritDoc
|
|
25
|
-
*/
|
|
26
|
-
init() {
|
|
27
|
-
const editor = this.editor;
|
|
28
|
-
const t = editor.t;
|
|
29
|
-
const componentCreator = (locale) => {
|
|
30
|
-
const view = new FileDialogButtonView(locale);
|
|
31
|
-
const command = editor.commands.get('uploadImage');
|
|
32
|
-
const imageTypes = editor.config.get('image.upload.types');
|
|
33
|
-
const imageTypesRegExp = createImageTypeRegExp(imageTypes);
|
|
34
|
-
view.set({
|
|
35
|
-
acceptedType: imageTypes.map(type => `image/${type}`).join(','),
|
|
36
|
-
allowMultipleFiles: true
|
|
37
|
-
});
|
|
38
|
-
view.buttonView.set({
|
|
39
|
-
label: t('Insert image'),
|
|
40
|
-
icon: icons.image,
|
|
41
|
-
tooltip: true
|
|
42
|
-
});
|
|
43
|
-
view.buttonView.bind('isEnabled').to(command);
|
|
44
|
-
view.on('done', (evt, files) => {
|
|
45
|
-
const imagesToUpload = Array.from(files).filter(file => imageTypesRegExp.test(file.type));
|
|
46
|
-
if (imagesToUpload.length) {
|
|
47
|
-
editor.execute('uploadImage', { file: imagesToUpload });
|
|
48
|
-
editor.editing.view.focus();
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
return view;
|
|
52
|
-
};
|
|
53
|
-
// Setup `uploadImage` button and add `imageUpload` button as an alias for backward compatibility.
|
|
54
|
-
editor.ui.componentFactory.add('uploadImage', componentCreator);
|
|
55
|
-
editor.ui.componentFactory.add('imageUpload', componentCreator);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
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 { Plugin, icons } from 'ckeditor5/src/core';
|
|
6
|
+
import { FileDialogButtonView } from 'ckeditor5/src/upload';
|
|
7
|
+
import { createImageTypeRegExp } from './utils';
|
|
8
|
+
/**
|
|
9
|
+
* The image upload button plugin.
|
|
10
|
+
*
|
|
11
|
+
* For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature} documentation.
|
|
12
|
+
*
|
|
13
|
+
* Adds the `'uploadImage'` button to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
|
|
14
|
+
* and also the `imageUpload` button as an alias for backward compatibility.
|
|
15
|
+
*/
|
|
16
|
+
export default class ImageUploadUI extends Plugin {
|
|
17
|
+
/**
|
|
18
|
+
* @inheritDoc
|
|
19
|
+
*/
|
|
20
|
+
static get pluginName() {
|
|
21
|
+
return 'ImageUploadUI';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @inheritDoc
|
|
25
|
+
*/
|
|
26
|
+
init() {
|
|
27
|
+
const editor = this.editor;
|
|
28
|
+
const t = editor.t;
|
|
29
|
+
const componentCreator = (locale) => {
|
|
30
|
+
const view = new FileDialogButtonView(locale);
|
|
31
|
+
const command = editor.commands.get('uploadImage');
|
|
32
|
+
const imageTypes = editor.config.get('image.upload.types');
|
|
33
|
+
const imageTypesRegExp = createImageTypeRegExp(imageTypes);
|
|
34
|
+
view.set({
|
|
35
|
+
acceptedType: imageTypes.map(type => `image/${type}`).join(','),
|
|
36
|
+
allowMultipleFiles: true
|
|
37
|
+
});
|
|
38
|
+
view.buttonView.set({
|
|
39
|
+
label: t('Insert image'),
|
|
40
|
+
icon: icons.image,
|
|
41
|
+
tooltip: true
|
|
42
|
+
});
|
|
43
|
+
view.buttonView.bind('isEnabled').to(command);
|
|
44
|
+
view.on('done', (evt, files) => {
|
|
45
|
+
const imagesToUpload = Array.from(files).filter(file => imageTypesRegExp.test(file.type));
|
|
46
|
+
if (imagesToUpload.length) {
|
|
47
|
+
editor.execute('uploadImage', { file: imagesToUpload });
|
|
48
|
+
editor.editing.view.focus();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return view;
|
|
52
|
+
};
|
|
53
|
+
// Setup `uploadImage` button and add `imageUpload` button as an alias for backward compatibility.
|
|
54
|
+
editor.ui.componentFactory.add('uploadImage', componentCreator);
|
|
55
|
+
editor.ui.componentFactory.add('imageUpload', componentCreator);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -1,60 +1,60 @@
|
|
|
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
|
-
import { type ArrayOrItem } from 'ckeditor5/src/utils';
|
|
7
|
-
/**
|
|
8
|
-
* @module image/imageupload/uploadimagecommand
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* The upload image command.
|
|
12
|
-
*
|
|
13
|
-
* The command is registered by the {@link module:image/imageupload/imageuploadediting~ImageUploadEditing} plugin as `uploadImage`
|
|
14
|
-
* and it is also available via aliased `imageUpload` name.
|
|
15
|
-
*
|
|
16
|
-
* In order to upload an image at the current selection position
|
|
17
|
-
* (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),
|
|
18
|
-
* execute the command and pass the native image file instance:
|
|
19
|
-
*
|
|
20
|
-
* ```ts
|
|
21
|
-
* this.listenTo( editor.editing.view.document, 'clipboardInput', ( evt, data ) => {
|
|
22
|
-
* // Assuming that only images were pasted:
|
|
23
|
-
* const images = Array.from( data.dataTransfer.files );
|
|
24
|
-
*
|
|
25
|
-
* // Upload the first image:
|
|
26
|
-
* editor.execute( 'uploadImage', { file: images[ 0 ] } );
|
|
27
|
-
* } );
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* It is also possible to insert multiple images at once:
|
|
31
|
-
*
|
|
32
|
-
* ```ts
|
|
33
|
-
* editor.execute( 'uploadImage', {
|
|
34
|
-
* file: [
|
|
35
|
-
* file1,
|
|
36
|
-
* file2
|
|
37
|
-
* ]
|
|
38
|
-
* } );
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export default class UploadImageCommand extends Command {
|
|
42
|
-
/**
|
|
43
|
-
* @inheritDoc
|
|
44
|
-
*/
|
|
45
|
-
refresh(): void;
|
|
46
|
-
/**
|
|
47
|
-
* Executes the command.
|
|
48
|
-
*
|
|
49
|
-
* @fires execute
|
|
50
|
-
* @param options Options for the executed command.
|
|
51
|
-
* @param options.file The image file or an array of image files to upload.
|
|
52
|
-
*/
|
|
53
|
-
execute(options: {
|
|
54
|
-
file: ArrayOrItem<File>;
|
|
55
|
-
}): void;
|
|
56
|
-
/**
|
|
57
|
-
* Handles uploading single file.
|
|
58
|
-
*/
|
|
59
|
-
private _uploadImage;
|
|
60
|
-
}
|
|
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
|
+
import { type ArrayOrItem } from 'ckeditor5/src/utils';
|
|
7
|
+
/**
|
|
8
|
+
* @module image/imageupload/uploadimagecommand
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* The upload image command.
|
|
12
|
+
*
|
|
13
|
+
* The command is registered by the {@link module:image/imageupload/imageuploadediting~ImageUploadEditing} plugin as `uploadImage`
|
|
14
|
+
* and it is also available via aliased `imageUpload` name.
|
|
15
|
+
*
|
|
16
|
+
* In order to upload an image at the current selection position
|
|
17
|
+
* (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),
|
|
18
|
+
* execute the command and pass the native image file instance:
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* this.listenTo( editor.editing.view.document, 'clipboardInput', ( evt, data ) => {
|
|
22
|
+
* // Assuming that only images were pasted:
|
|
23
|
+
* const images = Array.from( data.dataTransfer.files );
|
|
24
|
+
*
|
|
25
|
+
* // Upload the first image:
|
|
26
|
+
* editor.execute( 'uploadImage', { file: images[ 0 ] } );
|
|
27
|
+
* } );
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* It is also possible to insert multiple images at once:
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* editor.execute( 'uploadImage', {
|
|
34
|
+
* file: [
|
|
35
|
+
* file1,
|
|
36
|
+
* file2
|
|
37
|
+
* ]
|
|
38
|
+
* } );
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export default class UploadImageCommand extends Command {
|
|
42
|
+
/**
|
|
43
|
+
* @inheritDoc
|
|
44
|
+
*/
|
|
45
|
+
refresh(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Executes the command.
|
|
48
|
+
*
|
|
49
|
+
* @fires execute
|
|
50
|
+
* @param options Options for the executed command.
|
|
51
|
+
* @param options.file The image file or an array of image files to upload.
|
|
52
|
+
*/
|
|
53
|
+
execute(options: {
|
|
54
|
+
file: ArrayOrItem<File>;
|
|
55
|
+
}): void;
|
|
56
|
+
/**
|
|
57
|
+
* Handles uploading single file.
|
|
58
|
+
*/
|
|
59
|
+
private _uploadImage;
|
|
60
|
+
}
|
|
@@ -1,100 +1,100 @@
|
|
|
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 { FileRepository } from 'ckeditor5/src/upload';
|
|
6
|
-
import { Command } from 'ckeditor5/src/core';
|
|
7
|
-
import { toArray } from 'ckeditor5/src/utils';
|
|
8
|
-
/**
|
|
9
|
-
* @module image/imageupload/uploadimagecommand
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* The upload image command.
|
|
13
|
-
*
|
|
14
|
-
* The command is registered by the {@link module:image/imageupload/imageuploadediting~ImageUploadEditing} plugin as `uploadImage`
|
|
15
|
-
* and it is also available via aliased `imageUpload` name.
|
|
16
|
-
*
|
|
17
|
-
* In order to upload an image at the current selection position
|
|
18
|
-
* (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),
|
|
19
|
-
* execute the command and pass the native image file instance:
|
|
20
|
-
*
|
|
21
|
-
* ```ts
|
|
22
|
-
* this.listenTo( editor.editing.view.document, 'clipboardInput', ( evt, data ) => {
|
|
23
|
-
* // Assuming that only images were pasted:
|
|
24
|
-
* const images = Array.from( data.dataTransfer.files );
|
|
25
|
-
*
|
|
26
|
-
* // Upload the first image:
|
|
27
|
-
* editor.execute( 'uploadImage', { file: images[ 0 ] } );
|
|
28
|
-
* } );
|
|
29
|
-
* ```
|
|
30
|
-
*
|
|
31
|
-
* It is also possible to insert multiple images at once:
|
|
32
|
-
*
|
|
33
|
-
* ```ts
|
|
34
|
-
* editor.execute( 'uploadImage', {
|
|
35
|
-
* file: [
|
|
36
|
-
* file1,
|
|
37
|
-
* file2
|
|
38
|
-
* ]
|
|
39
|
-
* } );
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
export default class UploadImageCommand extends Command {
|
|
43
|
-
/**
|
|
44
|
-
* @inheritDoc
|
|
45
|
-
*/
|
|
46
|
-
refresh() {
|
|
47
|
-
const editor = this.editor;
|
|
48
|
-
const imageUtils = editor.plugins.get('ImageUtils');
|
|
49
|
-
const selectedElement = editor.model.document.selection.getSelectedElement();
|
|
50
|
-
// TODO: This needs refactoring.
|
|
51
|
-
this.isEnabled = imageUtils.isImageAllowed() || imageUtils.isImage(selectedElement);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Executes the command.
|
|
55
|
-
*
|
|
56
|
-
* @fires execute
|
|
57
|
-
* @param options Options for the executed command.
|
|
58
|
-
* @param options.file The image file or an array of image files to upload.
|
|
59
|
-
*/
|
|
60
|
-
execute(options) {
|
|
61
|
-
const files = toArray(options.file);
|
|
62
|
-
const selection = this.editor.model.document.selection;
|
|
63
|
-
const imageUtils = this.editor.plugins.get('ImageUtils');
|
|
64
|
-
// In case of multiple files, each file (starting from the 2nd) will be inserted at a position that
|
|
65
|
-
// follows the previous one. That will move the selection and, to stay on the safe side and make sure
|
|
66
|
-
// all images inherit the same selection attributes, they are collected beforehand.
|
|
67
|
-
//
|
|
68
|
-
// Applying these attributes ensures, for instance, that inserting an (inline) image into a link does
|
|
69
|
-
// not split that link but preserves its continuity.
|
|
70
|
-
//
|
|
71
|
-
// Note: Selection attributes that do not make sense for images will be filtered out by insertImage() anyway.
|
|
72
|
-
const selectionAttributes = Object.fromEntries(selection.getAttributes());
|
|
73
|
-
files.forEach((file, index) => {
|
|
74
|
-
const selectedElement = selection.getSelectedElement();
|
|
75
|
-
// Inserting of an inline image replace the selected element and make a selection on the inserted image.
|
|
76
|
-
// Therefore inserting multiple inline images requires creating position after each element.
|
|
77
|
-
if (index && selectedElement && imageUtils.isImage(selectedElement)) {
|
|
78
|
-
const position = this.editor.model.createPositionAfter(selectedElement);
|
|
79
|
-
this._uploadImage(file, selectionAttributes, position);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this._uploadImage(file, selectionAttributes);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Handles uploading single file.
|
|
88
|
-
*/
|
|
89
|
-
_uploadImage(file, attributes, position) {
|
|
90
|
-
const editor = this.editor;
|
|
91
|
-
const fileRepository = editor.plugins.get(FileRepository);
|
|
92
|
-
const loader = fileRepository.createLoader(file);
|
|
93
|
-
const imageUtils = editor.plugins.get('ImageUtils');
|
|
94
|
-
// Do not throw when upload adapter is not set. FileRepository will log an error anyway.
|
|
95
|
-
if (!loader) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
imageUtils.insertImage({ ...attributes, uploadId: loader.id }, position);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
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 { FileRepository } from 'ckeditor5/src/upload';
|
|
6
|
+
import { Command } from 'ckeditor5/src/core';
|
|
7
|
+
import { toArray } from 'ckeditor5/src/utils';
|
|
8
|
+
/**
|
|
9
|
+
* @module image/imageupload/uploadimagecommand
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* The upload image command.
|
|
13
|
+
*
|
|
14
|
+
* The command is registered by the {@link module:image/imageupload/imageuploadediting~ImageUploadEditing} plugin as `uploadImage`
|
|
15
|
+
* and it is also available via aliased `imageUpload` name.
|
|
16
|
+
*
|
|
17
|
+
* In order to upload an image at the current selection position
|
|
18
|
+
* (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),
|
|
19
|
+
* execute the command and pass the native image file instance:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* this.listenTo( editor.editing.view.document, 'clipboardInput', ( evt, data ) => {
|
|
23
|
+
* // Assuming that only images were pasted:
|
|
24
|
+
* const images = Array.from( data.dataTransfer.files );
|
|
25
|
+
*
|
|
26
|
+
* // Upload the first image:
|
|
27
|
+
* editor.execute( 'uploadImage', { file: images[ 0 ] } );
|
|
28
|
+
* } );
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* It is also possible to insert multiple images at once:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* editor.execute( 'uploadImage', {
|
|
35
|
+
* file: [
|
|
36
|
+
* file1,
|
|
37
|
+
* file2
|
|
38
|
+
* ]
|
|
39
|
+
* } );
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export default class UploadImageCommand extends Command {
|
|
43
|
+
/**
|
|
44
|
+
* @inheritDoc
|
|
45
|
+
*/
|
|
46
|
+
refresh() {
|
|
47
|
+
const editor = this.editor;
|
|
48
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
49
|
+
const selectedElement = editor.model.document.selection.getSelectedElement();
|
|
50
|
+
// TODO: This needs refactoring.
|
|
51
|
+
this.isEnabled = imageUtils.isImageAllowed() || imageUtils.isImage(selectedElement);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Executes the command.
|
|
55
|
+
*
|
|
56
|
+
* @fires execute
|
|
57
|
+
* @param options Options for the executed command.
|
|
58
|
+
* @param options.file The image file or an array of image files to upload.
|
|
59
|
+
*/
|
|
60
|
+
execute(options) {
|
|
61
|
+
const files = toArray(options.file);
|
|
62
|
+
const selection = this.editor.model.document.selection;
|
|
63
|
+
const imageUtils = this.editor.plugins.get('ImageUtils');
|
|
64
|
+
// In case of multiple files, each file (starting from the 2nd) will be inserted at a position that
|
|
65
|
+
// follows the previous one. That will move the selection and, to stay on the safe side and make sure
|
|
66
|
+
// all images inherit the same selection attributes, they are collected beforehand.
|
|
67
|
+
//
|
|
68
|
+
// Applying these attributes ensures, for instance, that inserting an (inline) image into a link does
|
|
69
|
+
// not split that link but preserves its continuity.
|
|
70
|
+
//
|
|
71
|
+
// Note: Selection attributes that do not make sense for images will be filtered out by insertImage() anyway.
|
|
72
|
+
const selectionAttributes = Object.fromEntries(selection.getAttributes());
|
|
73
|
+
files.forEach((file, index) => {
|
|
74
|
+
const selectedElement = selection.getSelectedElement();
|
|
75
|
+
// Inserting of an inline image replace the selected element and make a selection on the inserted image.
|
|
76
|
+
// Therefore inserting multiple inline images requires creating position after each element.
|
|
77
|
+
if (index && selectedElement && imageUtils.isImage(selectedElement)) {
|
|
78
|
+
const position = this.editor.model.createPositionAfter(selectedElement);
|
|
79
|
+
this._uploadImage(file, selectionAttributes, position);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this._uploadImage(file, selectionAttributes);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Handles uploading single file.
|
|
88
|
+
*/
|
|
89
|
+
_uploadImage(file, attributes, position) {
|
|
90
|
+
const editor = this.editor;
|
|
91
|
+
const fileRepository = editor.plugins.get(FileRepository);
|
|
92
|
+
const loader = fileRepository.createLoader(file);
|
|
93
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
94
|
+
// Do not throw when upload adapter is not set. FileRepository will log an error anyway.
|
|
95
|
+
if (!loader) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
imageUtils.insertImage({ ...attributes, uploadId: loader.id }, position);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
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/imageupload/utils
|
|
7
|
-
*/
|
|
8
|
-
import type { ViewElement } from 'ckeditor5/src/engine';
|
|
9
|
-
import type ImageUtils from '../imageutils';
|
|
10
|
-
/**
|
|
11
|
-
* Creates a regular expression used to test for image files.
|
|
12
|
-
*
|
|
13
|
-
* ```ts
|
|
14
|
-
* const imageType = createImageTypeRegExp( [ 'png', 'jpeg', 'svg+xml', 'vnd.microsoft.icon' ] );
|
|
15
|
-
*
|
|
16
|
-
* console.log( 'is supported image', imageType.test( file.type ) );
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
export declare function createImageTypeRegExp(types: Array<string>): RegExp;
|
|
20
|
-
/**
|
|
21
|
-
* Creates a promise that fetches the image local source (Base64 or blob) and resolves with a `File` object.
|
|
22
|
-
*
|
|
23
|
-
* @param image Image whose source to fetch.
|
|
24
|
-
* @returns A promise which resolves when an image source is fetched and converted to a `File` instance.
|
|
25
|
-
* It resolves with a `File` object. If there were any errors during file processing, the promise will be rejected.
|
|
26
|
-
*/
|
|
27
|
-
export declare function fetchLocalImage(image: ViewElement): Promise<File>;
|
|
28
|
-
/**
|
|
29
|
-
* Checks whether a given node is an image element with a local source (Base64 or blob).
|
|
30
|
-
*
|
|
31
|
-
* @param node The node to check.
|
|
32
|
-
*/
|
|
33
|
-
export declare function isLocalImage(imageUtils: ImageUtils, node: ViewElement): boolean;
|
|
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/imageupload/utils
|
|
7
|
+
*/
|
|
8
|
+
import type { ViewElement } from 'ckeditor5/src/engine';
|
|
9
|
+
import type ImageUtils from '../imageutils';
|
|
10
|
+
/**
|
|
11
|
+
* Creates a regular expression used to test for image files.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* const imageType = createImageTypeRegExp( [ 'png', 'jpeg', 'svg+xml', 'vnd.microsoft.icon' ] );
|
|
15
|
+
*
|
|
16
|
+
* console.log( 'is supported image', imageType.test( file.type ) );
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function createImageTypeRegExp(types: Array<string>): RegExp;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a promise that fetches the image local source (Base64 or blob) and resolves with a `File` object.
|
|
22
|
+
*
|
|
23
|
+
* @param image Image whose source to fetch.
|
|
24
|
+
* @returns A promise which resolves when an image source is fetched and converted to a `File` instance.
|
|
25
|
+
* It resolves with a `File` object. If there were any errors during file processing, the promise will be rejected.
|
|
26
|
+
*/
|
|
27
|
+
export declare function fetchLocalImage(image: ViewElement): Promise<File>;
|
|
28
|
+
/**
|
|
29
|
+
* Checks whether a given node is an image element with a local source (Base64 or blob).
|
|
30
|
+
*
|
|
31
|
+
* @param node The node to check.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isLocalImage(imageUtils: ImageUtils, node: ViewElement): boolean;
|