@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
|
@@ -1,152 +1,153 @@
|
|
|
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/imageblockediting
|
|
7
|
-
*/
|
|
8
|
-
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
-
import { ClipboardPipeline } from 'ckeditor5/src/clipboard';
|
|
10
|
-
import { UpcastWriter } from 'ckeditor5/src/engine';
|
|
11
|
-
import { downcastImageAttribute, downcastSrcsetAttribute, upcastImageFigure } from './converters';
|
|
12
|
-
import ImageEditing from './imageediting';
|
|
13
|
-
import ImageSizeAttributes from '../imagesizeattributes';
|
|
14
|
-
import ImageTypeCommand from './imagetypecommand';
|
|
15
|
-
import ImageUtils from '../imageutils';
|
|
16
|
-
import { getImgViewElementMatcher, createBlockImageViewElement, determineImageTypeForInsertionAtSelection } from '
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* *
|
|
24
|
-
* *
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
this.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
*
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
.add(downcastImageAttribute(imageUtils, 'imageBlock', '
|
|
79
|
-
.add(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* *
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
const
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
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/imageblockediting
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
+
import { ClipboardPipeline } from 'ckeditor5/src/clipboard';
|
|
10
|
+
import { UpcastWriter } from 'ckeditor5/src/engine';
|
|
11
|
+
import { downcastImageAttribute, downcastSrcsetAttribute, upcastImageFigure } from './converters';
|
|
12
|
+
import ImageEditing from './imageediting';
|
|
13
|
+
import ImageSizeAttributes from '../imagesizeattributes';
|
|
14
|
+
import ImageTypeCommand from './imagetypecommand';
|
|
15
|
+
import ImageUtils from '../imageutils';
|
|
16
|
+
import { getImgViewElementMatcher, createBlockImageViewElement, determineImageTypeForInsertionAtSelection } from './utils';
|
|
17
|
+
import ImagePlaceholder from './imageplaceholder';
|
|
18
|
+
/**
|
|
19
|
+
* The image block plugin.
|
|
20
|
+
*
|
|
21
|
+
* It registers:
|
|
22
|
+
*
|
|
23
|
+
* * `<imageBlock>` as a block element in the document schema, and allows `alt`, `src` and `srcset` attributes.
|
|
24
|
+
* * converters for editing and data pipelines.,
|
|
25
|
+
* * {@link module:image/image/imagetypecommand~ImageTypeCommand `'imageTypeBlock'`} command that converts inline images into
|
|
26
|
+
* block images.
|
|
27
|
+
*/
|
|
28
|
+
export default class ImageBlockEditing extends Plugin {
|
|
29
|
+
/**
|
|
30
|
+
* @inheritDoc
|
|
31
|
+
*/
|
|
32
|
+
static get requires() {
|
|
33
|
+
return [ImageEditing, ImageSizeAttributes, ImageUtils, ImagePlaceholder, ClipboardPipeline];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @inheritDoc
|
|
37
|
+
*/
|
|
38
|
+
static get pluginName() {
|
|
39
|
+
return 'ImageBlockEditing';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @inheritDoc
|
|
43
|
+
*/
|
|
44
|
+
init() {
|
|
45
|
+
const editor = this.editor;
|
|
46
|
+
const schema = editor.model.schema;
|
|
47
|
+
// Converters 'alt' and 'srcset' are added in 'ImageEditing' plugin.
|
|
48
|
+
schema.register('imageBlock', {
|
|
49
|
+
inheritAllFrom: '$blockObject',
|
|
50
|
+
allowAttributes: ['alt', 'src', 'srcset']
|
|
51
|
+
});
|
|
52
|
+
this._setupConversion();
|
|
53
|
+
if (editor.plugins.has('ImageInlineEditing')) {
|
|
54
|
+
editor.commands.add('imageTypeBlock', new ImageTypeCommand(this.editor, 'imageBlock'));
|
|
55
|
+
this._setupClipboardIntegration();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Configures conversion pipelines to support upcasting and downcasting
|
|
60
|
+
* block images (block image widgets) and their attributes.
|
|
61
|
+
*/
|
|
62
|
+
_setupConversion() {
|
|
63
|
+
const editor = this.editor;
|
|
64
|
+
const t = editor.t;
|
|
65
|
+
const conversion = editor.conversion;
|
|
66
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
67
|
+
conversion.for('dataDowncast')
|
|
68
|
+
.elementToStructure({
|
|
69
|
+
model: 'imageBlock',
|
|
70
|
+
view: (modelElement, { writer }) => createBlockImageViewElement(writer)
|
|
71
|
+
});
|
|
72
|
+
conversion.for('editingDowncast')
|
|
73
|
+
.elementToStructure({
|
|
74
|
+
model: 'imageBlock',
|
|
75
|
+
view: (modelElement, { writer }) => imageUtils.toImageWidget(createBlockImageViewElement(writer), writer, t('image widget'))
|
|
76
|
+
});
|
|
77
|
+
conversion.for('downcast')
|
|
78
|
+
.add(downcastImageAttribute(imageUtils, 'imageBlock', 'src'))
|
|
79
|
+
.add(downcastImageAttribute(imageUtils, 'imageBlock', 'alt'))
|
|
80
|
+
.add(downcastSrcsetAttribute(imageUtils, 'imageBlock'));
|
|
81
|
+
// More image related upcasts are in 'ImageEditing' plugin.
|
|
82
|
+
conversion.for('upcast')
|
|
83
|
+
.elementToElement({
|
|
84
|
+
view: getImgViewElementMatcher(editor, 'imageBlock'),
|
|
85
|
+
model: (viewImage, { writer }) => writer.createElement('imageBlock', viewImage.hasAttribute('src') ? { src: viewImage.getAttribute('src') } : undefined)
|
|
86
|
+
})
|
|
87
|
+
.add(upcastImageFigure(imageUtils));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Integrates the plugin with the clipboard pipeline.
|
|
91
|
+
*
|
|
92
|
+
* Idea is that the feature should recognize the user's intent when an **inline** image is
|
|
93
|
+
* pasted or dropped. If such an image is pasted/dropped:
|
|
94
|
+
*
|
|
95
|
+
* * into an empty block (e.g. an empty paragraph),
|
|
96
|
+
* * on another object (e.g. some block widget).
|
|
97
|
+
*
|
|
98
|
+
* it gets converted into a block image on the fly. We assume this is the user's intent
|
|
99
|
+
* if they decided to put their image there.
|
|
100
|
+
*
|
|
101
|
+
* See the `ImageInlineEditing` for the similar integration that works in the opposite direction.
|
|
102
|
+
*
|
|
103
|
+
* The feature also sets image `width` and `height` attributes on paste.
|
|
104
|
+
*/
|
|
105
|
+
_setupClipboardIntegration() {
|
|
106
|
+
const editor = this.editor;
|
|
107
|
+
const model = editor.model;
|
|
108
|
+
const editingView = editor.editing.view;
|
|
109
|
+
const imageUtils = editor.plugins.get('ImageUtils');
|
|
110
|
+
const clipboardPipeline = editor.plugins.get('ClipboardPipeline');
|
|
111
|
+
this.listenTo(clipboardPipeline, 'inputTransformation', (evt, data) => {
|
|
112
|
+
const docFragmentChildren = Array.from(data.content.getChildren());
|
|
113
|
+
let modelRange;
|
|
114
|
+
// Make sure only <img> elements are dropped or pasted. Otherwise, if there some other HTML
|
|
115
|
+
// mixed up, this should be handled as a regular paste.
|
|
116
|
+
if (!docFragmentChildren.every(imageUtils.isInlineImageView)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
// When drag and dropping, data.targetRanges specifies where to drop because
|
|
120
|
+
// this is usually a different place than the current model selection (the user
|
|
121
|
+
// uses a drop marker to specify the drop location).
|
|
122
|
+
if (data.targetRanges) {
|
|
123
|
+
modelRange = editor.editing.mapper.toModelRange(data.targetRanges[0]);
|
|
124
|
+
}
|
|
125
|
+
// Pasting, however, always occurs at the current model selection.
|
|
126
|
+
else {
|
|
127
|
+
modelRange = model.document.selection.getFirstRange();
|
|
128
|
+
}
|
|
129
|
+
const selection = model.createSelection(modelRange);
|
|
130
|
+
// Convert inline images into block images only when the currently selected block is empty
|
|
131
|
+
// (e.g. an empty paragraph) or some object is selected (to replace it).
|
|
132
|
+
if (determineImageTypeForInsertionAtSelection(model.schema, selection) === 'imageBlock') {
|
|
133
|
+
const writer = new UpcastWriter(editingView.document);
|
|
134
|
+
// Wrap <img ... /> -> <figure class="image"><img .../></figure>
|
|
135
|
+
const blockViewImages = docFragmentChildren.map(inlineViewImage => writer.createElement('figure', { class: 'image' }, inlineViewImage));
|
|
136
|
+
data.content = writer.createDocumentFragment(blockViewImages);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
this.listenTo(clipboardPipeline, 'contentInsertion', (evt, data) => {
|
|
140
|
+
if (data.method !== 'paste') {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
model.change(writer => {
|
|
144
|
+
const range = writer.createRangeIn(data.content);
|
|
145
|
+
for (const item of range.getItems()) {
|
|
146
|
+
if (item.is('element', 'imageBlock')) {
|
|
147
|
+
imageUtils.setImageNaturalSizeAttributes(item);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
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/imageediting
|
|
7
|
-
*/
|
|
8
|
-
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
-
import ImageUtils from '../imageutils';
|
|
10
|
-
/**
|
|
11
|
-
* The image engine plugin. This module loads common code shared between
|
|
12
|
-
* {@link module:image/image/imageinlineediting~ImageInlineEditing} and
|
|
13
|
-
* {@link module:image/image/imageblockediting~ImageBlockEditing} plugins.
|
|
14
|
-
*
|
|
15
|
-
* This plugin registers the {@link module:image/image/insertimagecommand~InsertImageCommand 'insertImage'} command.
|
|
16
|
-
*/
|
|
17
|
-
export default class ImageEditing extends Plugin {
|
|
18
|
-
/**
|
|
19
|
-
* @inheritDoc
|
|
20
|
-
*/
|
|
21
|
-
static get requires(): readonly [typeof ImageUtils];
|
|
22
|
-
/**
|
|
23
|
-
* @inheritDoc
|
|
24
|
-
*/
|
|
25
|
-
static get pluginName(): "ImageEditing";
|
|
26
|
-
/**
|
|
27
|
-
* @inheritDoc
|
|
28
|
-
*/
|
|
29
|
-
init(): void;
|
|
30
|
-
}
|
|
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/imageediting
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
+
import ImageUtils from '../imageutils';
|
|
10
|
+
/**
|
|
11
|
+
* The image engine plugin. This module loads common code shared between
|
|
12
|
+
* {@link module:image/image/imageinlineediting~ImageInlineEditing} and
|
|
13
|
+
* {@link module:image/image/imageblockediting~ImageBlockEditing} plugins.
|
|
14
|
+
*
|
|
15
|
+
* This plugin registers the {@link module:image/image/insertimagecommand~InsertImageCommand 'insertImage'} command.
|
|
16
|
+
*/
|
|
17
|
+
export default class ImageEditing extends Plugin {
|
|
18
|
+
/**
|
|
19
|
+
* @inheritDoc
|
|
20
|
+
*/
|
|
21
|
+
static get requires(): readonly [typeof ImageUtils];
|
|
22
|
+
/**
|
|
23
|
+
* @inheritDoc
|
|
24
|
+
*/
|
|
25
|
+
static get pluginName(): "ImageEditing";
|
|
26
|
+
/**
|
|
27
|
+
* @inheritDoc
|
|
28
|
+
*/
|
|
29
|
+
init(): void;
|
|
30
|
+
}
|
|
@@ -1,63 +1,63 @@
|
|
|
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/imageediting
|
|
7
|
-
*/
|
|
8
|
-
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
-
import ImageLoadObserver from './imageloadobserver';
|
|
10
|
-
import InsertImageCommand from './insertimagecommand';
|
|
11
|
-
import ReplaceImageSourceCommand from './replaceimagesourcecommand';
|
|
12
|
-
import ImageUtils from '../imageutils';
|
|
13
|
-
/**
|
|
14
|
-
* The image engine plugin. This module loads common code shared between
|
|
15
|
-
* {@link module:image/image/imageinlineediting~ImageInlineEditing} and
|
|
16
|
-
* {@link module:image/image/imageblockediting~ImageBlockEditing} plugins.
|
|
17
|
-
*
|
|
18
|
-
* This plugin registers the {@link module:image/image/insertimagecommand~InsertImageCommand 'insertImage'} command.
|
|
19
|
-
*/
|
|
20
|
-
export default class ImageEditing extends Plugin {
|
|
21
|
-
/**
|
|
22
|
-
* @inheritDoc
|
|
23
|
-
*/
|
|
24
|
-
static get requires() {
|
|
25
|
-
return [ImageUtils];
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* @inheritDoc
|
|
29
|
-
*/
|
|
30
|
-
static get pluginName() {
|
|
31
|
-
return 'ImageEditing';
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* @inheritDoc
|
|
35
|
-
*/
|
|
36
|
-
init() {
|
|
37
|
-
const editor = this.editor;
|
|
38
|
-
const conversion = editor.conversion;
|
|
39
|
-
// See https://github.com/ckeditor/ckeditor5-image/issues/142.
|
|
40
|
-
editor.editing.view.addObserver(ImageLoadObserver);
|
|
41
|
-
conversion.for('upcast')
|
|
42
|
-
.attributeToAttribute({
|
|
43
|
-
view: {
|
|
44
|
-
name: 'img',
|
|
45
|
-
key: 'alt'
|
|
46
|
-
},
|
|
47
|
-
model: 'alt'
|
|
48
|
-
})
|
|
49
|
-
.attributeToAttribute({
|
|
50
|
-
view: {
|
|
51
|
-
name: 'img',
|
|
52
|
-
key: 'srcset'
|
|
53
|
-
},
|
|
54
|
-
model: 'srcset'
|
|
55
|
-
});
|
|
56
|
-
const insertImageCommand = new InsertImageCommand(editor);
|
|
57
|
-
const replaceImageSourceCommand = new ReplaceImageSourceCommand(editor);
|
|
58
|
-
editor.commands.add('insertImage', insertImageCommand);
|
|
59
|
-
editor.commands.add('replaceImageSource', replaceImageSourceCommand);
|
|
60
|
-
// `imageInsert` is an alias for backward compatibility.
|
|
61
|
-
editor.commands.add('imageInsert', insertImageCommand);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
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/imageediting
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
+
import ImageLoadObserver from './imageloadobserver';
|
|
10
|
+
import InsertImageCommand from './insertimagecommand';
|
|
11
|
+
import ReplaceImageSourceCommand from './replaceimagesourcecommand';
|
|
12
|
+
import ImageUtils from '../imageutils';
|
|
13
|
+
/**
|
|
14
|
+
* The image engine plugin. This module loads common code shared between
|
|
15
|
+
* {@link module:image/image/imageinlineediting~ImageInlineEditing} and
|
|
16
|
+
* {@link module:image/image/imageblockediting~ImageBlockEditing} plugins.
|
|
17
|
+
*
|
|
18
|
+
* This plugin registers the {@link module:image/image/insertimagecommand~InsertImageCommand 'insertImage'} command.
|
|
19
|
+
*/
|
|
20
|
+
export default class ImageEditing extends Plugin {
|
|
21
|
+
/**
|
|
22
|
+
* @inheritDoc
|
|
23
|
+
*/
|
|
24
|
+
static get requires() {
|
|
25
|
+
return [ImageUtils];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @inheritDoc
|
|
29
|
+
*/
|
|
30
|
+
static get pluginName() {
|
|
31
|
+
return 'ImageEditing';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @inheritDoc
|
|
35
|
+
*/
|
|
36
|
+
init() {
|
|
37
|
+
const editor = this.editor;
|
|
38
|
+
const conversion = editor.conversion;
|
|
39
|
+
// See https://github.com/ckeditor/ckeditor5-image/issues/142.
|
|
40
|
+
editor.editing.view.addObserver(ImageLoadObserver);
|
|
41
|
+
conversion.for('upcast')
|
|
42
|
+
.attributeToAttribute({
|
|
43
|
+
view: {
|
|
44
|
+
name: 'img',
|
|
45
|
+
key: 'alt'
|
|
46
|
+
},
|
|
47
|
+
model: 'alt'
|
|
48
|
+
})
|
|
49
|
+
.attributeToAttribute({
|
|
50
|
+
view: {
|
|
51
|
+
name: 'img',
|
|
52
|
+
key: 'srcset'
|
|
53
|
+
},
|
|
54
|
+
model: 'srcset'
|
|
55
|
+
});
|
|
56
|
+
const insertImageCommand = new InsertImageCommand(editor);
|
|
57
|
+
const replaceImageSourceCommand = new ReplaceImageSourceCommand(editor);
|
|
58
|
+
editor.commands.add('insertImage', insertImageCommand);
|
|
59
|
+
editor.commands.add('replaceImageSource', replaceImageSourceCommand);
|
|
60
|
+
// `imageInsert` is an alias for backward compatibility.
|
|
61
|
+
editor.commands.add('imageInsert', insertImageCommand);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -1,59 +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
|
-
/**
|
|
6
|
-
* @module image/image/imageinlineediting
|
|
7
|
-
*/
|
|
8
|
-
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
-
import { ClipboardPipeline } from 'ckeditor5/src/clipboard';
|
|
10
|
-
import ImageEditing from './imageediting';
|
|
11
|
-
import ImageSizeAttributes from '../imagesizeattributes';
|
|
12
|
-
import ImageUtils from '../imageutils';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* *
|
|
20
|
-
* *
|
|
21
|
-
*
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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/imageinlineediting
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
+
import { ClipboardPipeline } from 'ckeditor5/src/clipboard';
|
|
10
|
+
import ImageEditing from './imageediting';
|
|
11
|
+
import ImageSizeAttributes from '../imagesizeattributes';
|
|
12
|
+
import ImageUtils from '../imageutils';
|
|
13
|
+
import ImagePlaceholder from './imageplaceholder';
|
|
14
|
+
/**
|
|
15
|
+
* The image inline plugin.
|
|
16
|
+
*
|
|
17
|
+
* It registers:
|
|
18
|
+
*
|
|
19
|
+
* * `<imageInline>` as an inline element in the document schema, and allows `alt`, `src` and `srcset` attributes.
|
|
20
|
+
* * converters for editing and data pipelines.
|
|
21
|
+
* * {@link module:image/image/imagetypecommand~ImageTypeCommand `'imageTypeInline'`} command that converts block images into
|
|
22
|
+
* inline images.
|
|
23
|
+
*/
|
|
24
|
+
export default class ImageInlineEditing extends Plugin {
|
|
25
|
+
/**
|
|
26
|
+
* @inheritDoc
|
|
27
|
+
*/
|
|
28
|
+
static get requires(): readonly [typeof ImageEditing, typeof ImageSizeAttributes, typeof ImageUtils, typeof ImagePlaceholder, typeof ClipboardPipeline];
|
|
29
|
+
/**
|
|
30
|
+
* @inheritDoc
|
|
31
|
+
*/
|
|
32
|
+
static get pluginName(): "ImageInlineEditing";
|
|
33
|
+
/**
|
|
34
|
+
* @inheritDoc
|
|
35
|
+
*/
|
|
36
|
+
init(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Configures conversion pipelines to support upcasting and downcasting
|
|
39
|
+
* inline images (inline image widgets) and their attributes.
|
|
40
|
+
*/
|
|
41
|
+
private _setupConversion;
|
|
42
|
+
/**
|
|
43
|
+
* Integrates the plugin with the clipboard pipeline.
|
|
44
|
+
*
|
|
45
|
+
* Idea is that the feature should recognize the user's intent when an **block** image is
|
|
46
|
+
* pasted or dropped. If such an image is pasted/dropped into a non-empty block
|
|
47
|
+
* (e.g. a paragraph with some text) it gets converted into an inline image on the fly.
|
|
48
|
+
*
|
|
49
|
+
* We assume this is the user's intent if they decided to put their image there.
|
|
50
|
+
*
|
|
51
|
+
* **Note**: If a block image has a caption, it will not be converted to an inline image
|
|
52
|
+
* to avoid the confusion. Captions are added on purpose and they should never be lost
|
|
53
|
+
* in the clipboard pipeline.
|
|
54
|
+
*
|
|
55
|
+
* See the `ImageBlockEditing` for the similar integration that works in the opposite direction.
|
|
56
|
+
*
|
|
57
|
+
* The feature also sets image `width` and `height` attributes when pasting.
|
|
58
|
+
*/
|
|
59
|
+
private _setupClipboardIntegration;
|
|
60
|
+
}
|