@ckeditor/ckeditor5-image 40.0.0 → 40.2.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 +25 -25
- package/LICENSE.md +3 -3
- package/build/image.js +2 -2
- package/build/translations/ar.js +1 -1
- package/build/translations/ast.js +1 -1
- package/build/translations/az.js +1 -1
- package/build/translations/bg.js +1 -1
- package/build/translations/bn.js +1 -1
- package/build/translations/bs.js +1 -1
- package/build/translations/ca.js +1 -1
- package/build/translations/cs.js +1 -1
- package/build/translations/da.js +1 -1
- package/build/translations/de-ch.js +1 -1
- package/build/translations/de.js +1 -1
- package/build/translations/el.js +1 -1
- package/build/translations/en-au.js +1 -1
- package/build/translations/en-gb.js +1 -1
- package/build/translations/eo.js +1 -1
- package/build/translations/es.js +1 -1
- package/build/translations/et.js +1 -1
- package/build/translations/eu.js +1 -1
- package/build/translations/fa.js +1 -1
- package/build/translations/fi.js +1 -1
- package/build/translations/fr.js +1 -1
- package/build/translations/gl.js +1 -1
- package/build/translations/he.js +1 -1
- package/build/translations/hi.js +1 -1
- package/build/translations/hr.js +1 -1
- package/build/translations/hu.js +1 -1
- package/build/translations/id.js +1 -1
- package/build/translations/it.js +1 -1
- package/build/translations/ja.js +1 -1
- package/build/translations/jv.js +1 -1
- package/build/translations/km.js +1 -1
- package/build/translations/kn.js +1 -1
- package/build/translations/ko.js +1 -1
- package/build/translations/ku.js +1 -1
- package/build/translations/lt.js +1 -1
- package/build/translations/lv.js +1 -1
- package/build/translations/ms.js +1 -1
- package/build/translations/nb.js +1 -1
- package/build/translations/ne.js +1 -1
- package/build/translations/nl.js +1 -1
- package/build/translations/no.js +1 -1
- package/build/translations/pl.js +1 -1
- package/build/translations/pt-br.js +1 -1
- package/build/translations/pt.js +1 -1
- package/build/translations/ro.js +1 -1
- package/build/translations/ru.js +1 -1
- package/build/translations/si.js +1 -1
- package/build/translations/sk.js +1 -1
- package/build/translations/sq.js +1 -1
- package/build/translations/sr-latn.js +1 -1
- package/build/translations/sr.js +1 -1
- package/build/translations/sv.js +1 -1
- package/build/translations/th.js +1 -1
- package/build/translations/tk.js +1 -1
- package/build/translations/tr.js +1 -1
- package/build/translations/tt.js +1 -1
- package/build/translations/ug.js +1 -1
- package/build/translations/uk.js +1 -1
- package/build/translations/ur.js +1 -1
- package/build/translations/uz.js +1 -1
- package/build/translations/vi.js +1 -1
- package/build/translations/zh-cn.js +1 -1
- package/build/translations/zh.js +1 -1
- package/ckeditor5-metadata.json +3 -3
- package/lang/contexts.json +5 -0
- package/lang/translations/ar.po +20 -0
- package/lang/translations/ast.po +20 -0
- package/lang/translations/az.po +20 -0
- package/lang/translations/bg.po +20 -0
- package/lang/translations/bn.po +20 -0
- package/lang/translations/bs.po +20 -0
- package/lang/translations/ca.po +20 -0
- package/lang/translations/cs.po +20 -0
- package/lang/translations/da.po +20 -0
- package/lang/translations/de-ch.po +20 -0
- package/lang/translations/de.po +20 -0
- package/lang/translations/el.po +20 -0
- package/lang/translations/en-au.po +20 -0
- package/lang/translations/en-gb.po +20 -0
- package/lang/translations/en.po +20 -0
- package/lang/translations/eo.po +20 -0
- package/lang/translations/es.po +20 -0
- package/lang/translations/et.po +20 -0
- package/lang/translations/eu.po +20 -0
- package/lang/translations/fa.po +20 -0
- package/lang/translations/fi.po +20 -0
- package/lang/translations/fr.po +20 -0
- package/lang/translations/gl.po +20 -0
- package/lang/translations/he.po +20 -0
- package/lang/translations/hi.po +20 -0
- package/lang/translations/hr.po +20 -0
- package/lang/translations/hu.po +20 -0
- package/lang/translations/id.po +20 -0
- package/lang/translations/it.po +20 -0
- package/lang/translations/ja.po +20 -0
- package/lang/translations/jv.po +20 -0
- package/lang/translations/km.po +20 -0
- package/lang/translations/kn.po +20 -0
- package/lang/translations/ko.po +20 -0
- package/lang/translations/ku.po +20 -0
- package/lang/translations/lt.po +20 -0
- package/lang/translations/lv.po +20 -0
- package/lang/translations/ms.po +20 -0
- package/lang/translations/nb.po +20 -0
- package/lang/translations/ne.po +20 -0
- package/lang/translations/nl.po +20 -0
- package/lang/translations/no.po +20 -0
- package/lang/translations/pl.po +20 -0
- package/lang/translations/pt-br.po +20 -0
- package/lang/translations/pt.po +20 -0
- package/lang/translations/ro.po +20 -0
- package/lang/translations/ru.po +20 -0
- package/lang/translations/si.po +20 -0
- package/lang/translations/sk.po +20 -0
- package/lang/translations/sq.po +20 -0
- package/lang/translations/sr-latn.po +20 -0
- package/lang/translations/sr.po +20 -0
- package/lang/translations/sv.po +20 -0
- package/lang/translations/th.po +20 -0
- package/lang/translations/tk.po +20 -0
- package/lang/translations/tr.po +20 -0
- package/lang/translations/tt.po +20 -0
- package/lang/translations/ug.po +21 -1
- package/lang/translations/uk.po +20 -0
- package/lang/translations/ur.po +20 -0
- package/lang/translations/uz.po +20 -0
- package/lang/translations/vi.po +20 -0
- package/lang/translations/zh-cn.po +20 -0
- package/lang/translations/zh.po +20 -0
- package/package.json +3 -3
- package/src/augmentation.d.ts +56 -56
- 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 -232
- package/src/image/imageblockediting.d.ts +59 -58
- package/src/image/imageblockediting.js +153 -152
- package/src/image/imageediting.d.ts +30 -30
- package/src/image/imageediting.js +63 -63
- package/src/image/imageinlineediting.d.ts +60 -59
- package/src/image/imageinlineediting.js +177 -176
- package/src/image/imageloadobserver.d.ts +48 -48
- package/src/image/imageloadobserver.js +52 -52
- package/src/image/imageplaceholder.d.ts +39 -0
- package/src/image/imageplaceholder.js +113 -0
- package/src/image/imagetypecommand.d.ts +44 -44
- package/src/image/imagetypecommand.js +80 -80
- package/src/image/insertimagecommand.d.ts +66 -66
- package/src/image/insertimagecommand.js +120 -120
- package/src/image/replaceimagesourcecommand.d.ts +51 -34
- package/src/image/replaceimagesourcecommand.js +75 -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 -64
- package/src/image/utils.js +121 -121
- package/src/image.d.ts +34 -34
- package/src/image.js +38 -38
- package/src/imageblock.d.ts +34 -33
- package/src/imageblock.js +38 -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 +712 -713
- package/src/imageconfig.js +5 -5
- package/src/imageinline.d.ts +34 -33
- package/src/imageinline.js +38 -37
- package/src/imageinsert/imageinsertui.d.ts +72 -44
- package/src/imageinsert/imageinsertui.js +174 -141
- package/src/imageinsert/imageinsertviaurlui.d.ts +44 -0
- package/src/imageinsert/imageinsertviaurlui.js +122 -0
- package/src/imageinsert/ui/imageinsertformview.d.ts +56 -0
- package/src/imageinsert/ui/imageinsertformview.js +112 -0
- package/src/imageinsert/ui/imageinserturlview.d.ts +107 -0
- package/src/imageinsert/ui/imageinserturlview.js +156 -0
- package/src/imageinsert.d.ts +33 -33
- package/src/imageinsert.js +37 -37
- package/src/imageinsertviaurl.d.ts +31 -30
- package/src/imageinsertviaurl.js +35 -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 -165
- package/src/imageresize/imageresizehandles.d.ts +31 -31
- package/src/imageresize/imageresizehandles.js +114 -114
- package/src/imageresize/resizeimagecommand.d.ts +42 -42
- package/src/imageresize/resizeimagecommand.js +63 -63
- package/src/imageresize.d.ts +27 -27
- package/src/imageresize.js +31 -31
- package/src/imagesizeattributes.d.ts +34 -34
- package/src/imagesizeattributes.js +142 -143
- package/src/imagestyle/converters.d.ts +24 -24
- package/src/imagestyle/converters.js +79 -79
- package/src/imagestyle/imagestylecommand.d.ts +68 -68
- package/src/imagestyle/imagestylecommand.js +107 -107
- 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 +90 -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 -337
- 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 +81 -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 -125
- package/src/imageutils.js +306 -306
- package/src/index.d.ts +48 -48
- package/src/index.js +39 -39
- package/src/pictureediting.d.ts +88 -88
- package/src/pictureediting.js +130 -130
- package/theme/imageinsert.css +5 -17
- package/theme/imageplaceholder.css +10 -0
- package/build/image.js.map +0 -1
- package/src/imageinsert/ui/imageinsertformrowview.d.ts +0 -61
- package/src/imageinsert/ui/imageinsertformrowview.js +0 -54
- package/src/imageinsert/ui/imageinsertpanelview.d.ts +0 -106
- package/src/imageinsert/ui/imageinsertpanelview.js +0 -161
- package/src/imageinsert/utils.d.ts +0 -25
- package/src/imageinsert/utils.js +0 -58
- package/theme/imageinsertformrowview.css +0 -36
|
@@ -0,0 +1,113 @@
|
|
|
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/imageplaceholder
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
+
import ImageUtils from '../imageutils';
|
|
10
|
+
import ImageLoadObserver from './imageloadobserver';
|
|
11
|
+
import '../../theme/imageplaceholder.css';
|
|
12
|
+
/**
|
|
13
|
+
* Adds support for image placeholder that is automatically removed when the image is loaded.
|
|
14
|
+
*/
|
|
15
|
+
export default class ImagePlaceholder extends Plugin {
|
|
16
|
+
/**
|
|
17
|
+
* @inheritDoc
|
|
18
|
+
*/
|
|
19
|
+
static get requires() {
|
|
20
|
+
return [ImageUtils];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @inheritDoc
|
|
24
|
+
*/
|
|
25
|
+
static get pluginName() {
|
|
26
|
+
return 'ImagePlaceholder';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @inheritDoc
|
|
30
|
+
*/
|
|
31
|
+
afterInit() {
|
|
32
|
+
this._setupSchema();
|
|
33
|
+
this._setupConversion();
|
|
34
|
+
this._setupLoadListener();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Extends model schema.
|
|
38
|
+
*/
|
|
39
|
+
_setupSchema() {
|
|
40
|
+
const schema = this.editor.model.schema;
|
|
41
|
+
// Wait for ImageBlockEditing or ImageInlineEditing to register their elements first,
|
|
42
|
+
// that's why doing this in afterInit() instead of init().
|
|
43
|
+
if (schema.isRegistered('imageBlock')) {
|
|
44
|
+
schema.extend('imageBlock', {
|
|
45
|
+
allowAttributes: ['placeholder']
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (schema.isRegistered('imageInline')) {
|
|
49
|
+
schema.extend('imageInline', {
|
|
50
|
+
allowAttributes: ['placeholder']
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Registers converters.
|
|
56
|
+
*/
|
|
57
|
+
_setupConversion() {
|
|
58
|
+
const editor = this.editor;
|
|
59
|
+
const conversion = editor.conversion;
|
|
60
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
61
|
+
conversion.for('editingDowncast').add(dispatcher => {
|
|
62
|
+
dispatcher.on('attribute:placeholder', (evt, data, conversionApi) => {
|
|
63
|
+
if (!conversionApi.consumable.test(data.item, evt.name)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (!data.item.is('element', 'imageBlock') && !data.item.is('element', 'imageInline')) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
conversionApi.consumable.consume(data.item, evt.name);
|
|
70
|
+
const viewWriter = conversionApi.writer;
|
|
71
|
+
const element = conversionApi.mapper.toViewElement(data.item);
|
|
72
|
+
const img = imageUtils.findViewImgElement(element);
|
|
73
|
+
if (data.attributeNewValue) {
|
|
74
|
+
viewWriter.addClass('image_placeholder', img);
|
|
75
|
+
viewWriter.setStyle('background-image', `url(${data.attributeNewValue})`, img);
|
|
76
|
+
viewWriter.setCustomProperty('editingPipeline:doNotReuseOnce', true, img);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
viewWriter.removeClass('image_placeholder', img);
|
|
80
|
+
viewWriter.removeStyle('background-image', img);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Prepares listener for image load.
|
|
87
|
+
*/
|
|
88
|
+
_setupLoadListener() {
|
|
89
|
+
const editor = this.editor;
|
|
90
|
+
const model = editor.model;
|
|
91
|
+
const editing = editor.editing;
|
|
92
|
+
const editingView = editing.view;
|
|
93
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
94
|
+
editingView.addObserver(ImageLoadObserver);
|
|
95
|
+
this.listenTo(editingView.document, 'imageLoaded', (evt, domEvent) => {
|
|
96
|
+
const imgViewElement = editingView.domConverter.mapDomToView(domEvent.target);
|
|
97
|
+
if (!imgViewElement) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const viewElement = imageUtils.getImageWidgetFromImageView(imgViewElement);
|
|
101
|
+
if (!viewElement) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const modelElement = editing.mapper.toModelElement(viewElement);
|
|
105
|
+
if (!modelElement || !modelElement.hasAttribute('placeholder')) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
model.enqueueChange({ isUndoable: false }, writer => {
|
|
109
|
+
writer.removeAttribute('placeholder', modelElement);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -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
|
-
/**
|
|
6
|
-
* @module image/image/imagetypecommand
|
|
7
|
-
*/
|
|
8
|
-
import type { Element } from 'ckeditor5/src/engine';
|
|
9
|
-
import { Command, type Editor } from 'ckeditor5/src/core';
|
|
10
|
-
/**
|
|
11
|
-
* The image type command. It changes the type of a selected image, depending on the configuration.
|
|
12
|
-
*/
|
|
13
|
-
export default class ImageTypeCommand extends Command {
|
|
14
|
-
/**
|
|
15
|
-
* Model element name the command converts to.
|
|
16
|
-
*/
|
|
17
|
-
private readonly _modelElementName;
|
|
18
|
-
/**
|
|
19
|
-
* @inheritDoc
|
|
20
|
-
*
|
|
21
|
-
* @param modelElementName Model element name the command converts to.
|
|
22
|
-
*/
|
|
23
|
-
constructor(editor: Editor, modelElementName: 'imageBlock' | 'imageInline');
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
refresh(): void;
|
|
28
|
-
/**
|
|
29
|
-
* Executes the command and changes the type of a selected image.
|
|
30
|
-
*
|
|
31
|
-
* @fires execute
|
|
32
|
-
* @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.
|
|
33
|
-
* The default is `true`.
|
|
34
|
-
* @returns An object containing references to old and new model image elements
|
|
35
|
-
* (for before and after the change) so external integrations can hook into the decorated
|
|
36
|
-
* `execute` event and handle this change. `null` if the type change failed.
|
|
37
|
-
*/
|
|
38
|
-
execute(options?: {
|
|
39
|
-
setImageSizes?: boolean;
|
|
40
|
-
}): {
|
|
41
|
-
oldElement: Element;
|
|
42
|
-
newElement: Element;
|
|
43
|
-
} | null;
|
|
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
|
+
/**
|
|
6
|
+
* @module image/image/imagetypecommand
|
|
7
|
+
*/
|
|
8
|
+
import type { Element } from 'ckeditor5/src/engine';
|
|
9
|
+
import { Command, type Editor } from 'ckeditor5/src/core';
|
|
10
|
+
/**
|
|
11
|
+
* The image type command. It changes the type of a selected image, depending on the configuration.
|
|
12
|
+
*/
|
|
13
|
+
export default class ImageTypeCommand extends Command {
|
|
14
|
+
/**
|
|
15
|
+
* Model element name the command converts to.
|
|
16
|
+
*/
|
|
17
|
+
private readonly _modelElementName;
|
|
18
|
+
/**
|
|
19
|
+
* @inheritDoc
|
|
20
|
+
*
|
|
21
|
+
* @param modelElementName Model element name the command converts to.
|
|
22
|
+
*/
|
|
23
|
+
constructor(editor: Editor, modelElementName: 'imageBlock' | 'imageInline');
|
|
24
|
+
/**
|
|
25
|
+
* @inheritDoc
|
|
26
|
+
*/
|
|
27
|
+
refresh(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Executes the command and changes the type of a selected image.
|
|
30
|
+
*
|
|
31
|
+
* @fires execute
|
|
32
|
+
* @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.
|
|
33
|
+
* The default is `true`.
|
|
34
|
+
* @returns An object containing references to old and new model image elements
|
|
35
|
+
* (for before and after the change) so external integrations can hook into the decorated
|
|
36
|
+
* `execute` event and handle this change. `null` if the type change failed.
|
|
37
|
+
*/
|
|
38
|
+
execute(options?: {
|
|
39
|
+
setImageSizes?: boolean;
|
|
40
|
+
}): {
|
|
41
|
+
oldElement: Element;
|
|
42
|
+
newElement: Element;
|
|
43
|
+
} | null;
|
|
44
|
+
}
|
|
@@ -1,80 +1,80 @@
|
|
|
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
|
-
* The image type command. It changes the type of a selected image, depending on the configuration.
|
|
8
|
-
*/
|
|
9
|
-
export default class ImageTypeCommand extends Command {
|
|
10
|
-
/**
|
|
11
|
-
* @inheritDoc
|
|
12
|
-
*
|
|
13
|
-
* @param modelElementName Model element name the command converts to.
|
|
14
|
-
*/
|
|
15
|
-
constructor(editor, modelElementName) {
|
|
16
|
-
super(editor);
|
|
17
|
-
this._modelElementName = modelElementName;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* @inheritDoc
|
|
21
|
-
*/
|
|
22
|
-
refresh() {
|
|
23
|
-
const editor = this.editor;
|
|
24
|
-
const imageUtils = editor.plugins.get('ImageUtils');
|
|
25
|
-
const element = imageUtils.getClosestSelectedImageElement(this.editor.model.document.selection);
|
|
26
|
-
if (this._modelElementName === 'imageBlock') {
|
|
27
|
-
this.isEnabled = imageUtils.isInlineImage(element);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
this.isEnabled = imageUtils.isBlockImage(element);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Executes the command and changes the type of a selected image.
|
|
35
|
-
*
|
|
36
|
-
* @fires execute
|
|
37
|
-
* @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.
|
|
38
|
-
* The default is `true`.
|
|
39
|
-
* @returns An object containing references to old and new model image elements
|
|
40
|
-
* (for before and after the change) so external integrations can hook into the decorated
|
|
41
|
-
* `execute` event and handle this change. `null` if the type change failed.
|
|
42
|
-
*/
|
|
43
|
-
execute(options = {}) {
|
|
44
|
-
const editor = this.editor;
|
|
45
|
-
const model = this.editor.model;
|
|
46
|
-
const imageUtils = editor.plugins.get('ImageUtils');
|
|
47
|
-
const oldElement = imageUtils.getClosestSelectedImageElement(model.document.selection);
|
|
48
|
-
const attributes = Object.fromEntries(oldElement.getAttributes());
|
|
49
|
-
// Don't change image type if "src" is missing (a broken image), unless there's "uploadId" set.
|
|
50
|
-
// This state may happen during image upload (before it finishes) and it should be possible to change type
|
|
51
|
-
// of the image in the meantime.
|
|
52
|
-
if (!attributes.src && !attributes.uploadId) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
return model.change(writer => {
|
|
56
|
-
const { setImageSizes = true } = options;
|
|
57
|
-
// Get all markers that contain the old image element.
|
|
58
|
-
const markers = Array.from(model.markers)
|
|
59
|
-
.filter(marker => marker.getRange().containsItem(oldElement));
|
|
60
|
-
const newElement = imageUtils.insertImage(attributes, model.createSelection(oldElement, 'on'), this._modelElementName, { setImageSizes });
|
|
61
|
-
if (!newElement) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
const newElementRange = writer.createRangeOn(newElement);
|
|
65
|
-
// Expand the previously intersecting markers' ranges to include the new image element.
|
|
66
|
-
for (const marker of markers) {
|
|
67
|
-
const markerRange = marker.getRange();
|
|
68
|
-
// Join the survived part of the old marker range with the new element range
|
|
69
|
-
// (loosely because there could be some new paragraph or the existing one might got split).
|
|
70
|
-
const range = markerRange.root.rootName != '$graveyard' ?
|
|
71
|
-
markerRange.getJoined(newElementRange, true) : newElementRange;
|
|
72
|
-
writer.updateMarker(marker, { range });
|
|
73
|
-
}
|
|
74
|
-
return {
|
|
75
|
-
oldElement,
|
|
76
|
-
newElement
|
|
77
|
-
};
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
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
|
+
* The image type command. It changes the type of a selected image, depending on the configuration.
|
|
8
|
+
*/
|
|
9
|
+
export default class ImageTypeCommand extends Command {
|
|
10
|
+
/**
|
|
11
|
+
* @inheritDoc
|
|
12
|
+
*
|
|
13
|
+
* @param modelElementName Model element name the command converts to.
|
|
14
|
+
*/
|
|
15
|
+
constructor(editor, modelElementName) {
|
|
16
|
+
super(editor);
|
|
17
|
+
this._modelElementName = modelElementName;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @inheritDoc
|
|
21
|
+
*/
|
|
22
|
+
refresh() {
|
|
23
|
+
const editor = this.editor;
|
|
24
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
25
|
+
const element = imageUtils.getClosestSelectedImageElement(this.editor.model.document.selection);
|
|
26
|
+
if (this._modelElementName === 'imageBlock') {
|
|
27
|
+
this.isEnabled = imageUtils.isInlineImage(element);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.isEnabled = imageUtils.isBlockImage(element);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Executes the command and changes the type of a selected image.
|
|
35
|
+
*
|
|
36
|
+
* @fires execute
|
|
37
|
+
* @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.
|
|
38
|
+
* The default is `true`.
|
|
39
|
+
* @returns An object containing references to old and new model image elements
|
|
40
|
+
* (for before and after the change) so external integrations can hook into the decorated
|
|
41
|
+
* `execute` event and handle this change. `null` if the type change failed.
|
|
42
|
+
*/
|
|
43
|
+
execute(options = {}) {
|
|
44
|
+
const editor = this.editor;
|
|
45
|
+
const model = this.editor.model;
|
|
46
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
47
|
+
const oldElement = imageUtils.getClosestSelectedImageElement(model.document.selection);
|
|
48
|
+
const attributes = Object.fromEntries(oldElement.getAttributes());
|
|
49
|
+
// Don't change image type if "src" is missing (a broken image), unless there's "uploadId" set.
|
|
50
|
+
// This state may happen during image upload (before it finishes) and it should be possible to change type
|
|
51
|
+
// of the image in the meantime.
|
|
52
|
+
if (!attributes.src && !attributes.uploadId) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return model.change(writer => {
|
|
56
|
+
const { setImageSizes = true } = options;
|
|
57
|
+
// Get all markers that contain the old image element.
|
|
58
|
+
const markers = Array.from(model.markers)
|
|
59
|
+
.filter(marker => marker.getRange().containsItem(oldElement));
|
|
60
|
+
const newElement = imageUtils.insertImage(attributes, model.createSelection(oldElement, 'on'), this._modelElementName, { setImageSizes });
|
|
61
|
+
if (!newElement) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const newElementRange = writer.createRangeOn(newElement);
|
|
65
|
+
// Expand the previously intersecting markers' ranges to include the new image element.
|
|
66
|
+
for (const marker of markers) {
|
|
67
|
+
const markerRange = marker.getRange();
|
|
68
|
+
// Join the survived part of the old marker range with the new element range
|
|
69
|
+
// (loosely because there could be some new paragraph or the existing one might got split).
|
|
70
|
+
const range = markerRange.root.rootName != '$graveyard' ?
|
|
71
|
+
markerRange.getJoined(newElementRange, true) : newElementRange;
|
|
72
|
+
writer.updateMarker(marker, { range });
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
oldElement,
|
|
76
|
+
newElement
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -1,66 +1,66 @@
|
|
|
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, type Editor } from 'ckeditor5/src/core';
|
|
9
|
-
import { type ArrayOrItem } 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: Editor);
|
|
51
|
-
/**
|
|
52
|
-
* @inheritDoc
|
|
53
|
-
*/
|
|
54
|
-
refresh(): void;
|
|
55
|
-
/**
|
|
56
|
-
* Executes the command.
|
|
57
|
-
*
|
|
58
|
-
* @fires execute
|
|
59
|
-
* @param options Options for the executed command.
|
|
60
|
-
* @param options.source The image source or an array of image sources to insert.
|
|
61
|
-
* See the documentation of the command to learn more about accepted formats.
|
|
62
|
-
*/
|
|
63
|
-
execute(options: {
|
|
64
|
-
source: ArrayOrItem<string | Record<string, unknown>>;
|
|
65
|
-
}): void;
|
|
66
|
-
}
|
|
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, type Editor } from 'ckeditor5/src/core';
|
|
9
|
+
import { type ArrayOrItem } 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: Editor);
|
|
51
|
+
/**
|
|
52
|
+
* @inheritDoc
|
|
53
|
+
*/
|
|
54
|
+
refresh(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Executes the command.
|
|
57
|
+
*
|
|
58
|
+
* @fires execute
|
|
59
|
+
* @param options Options for the executed command.
|
|
60
|
+
* @param options.source The image source or an array of image sources to insert.
|
|
61
|
+
* See the documentation of the command to learn more about accepted formats.
|
|
62
|
+
*/
|
|
63
|
+
execute(options: {
|
|
64
|
+
source: ArrayOrItem<string | Record<string, unknown>>;
|
|
65
|
+
}): void;
|
|
66
|
+
}
|