@ckeditor/ckeditor5-media-embed 36.0.1 → 37.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/media-embed.js +1 -1
- package/package.json +27 -22
- package/src/augmentation.d.ts +25 -0
- package/src/augmentation.js +5 -0
- package/src/automediaembed.d.ts +48 -0
- package/src/automediaembed.js +109 -160
- package/src/converters.d.ts +38 -0
- package/src/converters.js +33 -40
- package/src/index.d.ts +15 -0
- package/src/index.js +1 -2
- package/src/mediaembed.d.ts +30 -0
- package/src/mediaembed.js +12 -266
- package/src/mediaembedcommand.d.ts +36 -0
- package/src/mediaembedcommand.js +52 -68
- package/src/mediaembedconfig.d.ts +278 -0
- package/src/mediaembedconfig.js +5 -0
- package/src/mediaembedediting.d.ts +31 -0
- package/src/mediaembedediting.js +212 -261
- package/src/mediaembedtoolbar.d.ts +29 -0
- package/src/mediaembedtoolbar.js +27 -44
- package/src/mediaembedui.d.ts +26 -0
- package/src/mediaembedui.js +82 -110
- package/src/mediaregistry.d.ts +66 -0
- package/src/mediaregistry.js +208 -311
- package/src/ui/mediaformview.d.ts +115 -0
- package/src/ui/mediaformview.js +180 -331
- package/src/utils.d.ts +67 -0
- package/src/utils.js +44 -81
package/src/utils.js
CHANGED
@@ -2,121 +2,84 @@
|
|
2
2
|
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
3
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
4
4
|
*/
|
5
|
-
|
6
|
-
/**
|
7
|
-
* @module media-embed/utils
|
8
|
-
*/
|
9
|
-
|
10
5
|
import { isWidget, toWidget } from 'ckeditor5/src/widget';
|
11
|
-
|
12
6
|
/**
|
13
7
|
* Converts a given {@link module:engine/view/element~Element} to a media embed widget:
|
14
8
|
* * Adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the media widget element.
|
15
9
|
* * Calls the {@link module:widget/utils~toWidget} function with the proper element's label creator.
|
16
10
|
*
|
17
|
-
* @param
|
18
|
-
* @param
|
19
|
-
* @param {String} label The element's label.
|
20
|
-
* @returns {module:engine/view/element~Element}
|
11
|
+
* @param writer An instance of the view writer.
|
12
|
+
* @param label The element's label.
|
21
13
|
*/
|
22
|
-
export function toMediaWidget(
|
23
|
-
|
24
|
-
|
25
|
-
return toWidget( viewElement, writer, { label } );
|
14
|
+
export function toMediaWidget(viewElement, writer, label) {
|
15
|
+
writer.setCustomProperty('media', true, viewElement);
|
16
|
+
return toWidget(viewElement, writer, { label });
|
26
17
|
}
|
27
|
-
|
28
18
|
/**
|
29
19
|
* Returns a media widget editing view element if one is selected.
|
30
|
-
*
|
31
|
-
* @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} selection
|
32
|
-
* @returns {module:engine/view/element~Element|null}
|
33
20
|
*/
|
34
|
-
export function getSelectedMediaViewWidget(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
return null;
|
21
|
+
export function getSelectedMediaViewWidget(selection) {
|
22
|
+
const viewElement = selection.getSelectedElement();
|
23
|
+
if (viewElement && isMediaWidget(viewElement)) {
|
24
|
+
return viewElement;
|
25
|
+
}
|
26
|
+
return null;
|
42
27
|
}
|
43
|
-
|
44
28
|
/**
|
45
29
|
* Checks if a given view element is a media widget.
|
46
|
-
*
|
47
|
-
* @param {module:engine/view/element~Element} viewElement
|
48
|
-
* @returns {Boolean}
|
49
30
|
*/
|
50
|
-
export function isMediaWidget(
|
51
|
-
|
31
|
+
export function isMediaWidget(viewElement) {
|
32
|
+
return !!viewElement.getCustomProperty('media') && isWidget(viewElement);
|
52
33
|
}
|
53
|
-
|
54
34
|
/**
|
55
35
|
* Creates a view element representing the media. Either a "semantic" one for the data pipeline:
|
56
36
|
*
|
57
|
-
*
|
58
|
-
*
|
59
|
-
*
|
37
|
+
* ```html
|
38
|
+
* <figure class="media">
|
39
|
+
* <oembed url="foo"></oembed>
|
40
|
+
* </figure>
|
41
|
+
* ```
|
60
42
|
*
|
61
43
|
* or a "non-semantic" (for the editing view pipeline):
|
62
44
|
*
|
63
|
-
*
|
64
|
-
*
|
65
|
-
*
|
66
|
-
*
|
67
|
-
*
|
68
|
-
* @param {module:media-embed/mediaregistry~MediaRegistry} registry
|
69
|
-
* @param {String} url
|
70
|
-
* @param {Object} options
|
71
|
-
* @param {String} [options.elementName]
|
72
|
-
* @param {Boolean} [options.useSemanticWrapper]
|
73
|
-
* @param {Boolean} [options.renderForEditingView]
|
74
|
-
* @returns {module:engine/view/containerelement~ContainerElement}
|
45
|
+
* ```html
|
46
|
+
* <figure class="media">
|
47
|
+
* <div data-oembed-url="foo">[ non-semantic media preview for "foo" ]</div>
|
48
|
+
* </figure>
|
49
|
+
* ```
|
75
50
|
*/
|
76
|
-
export function createMediaFigureElement(
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
51
|
+
export function createMediaFigureElement(writer, registry, url, options) {
|
52
|
+
return writer.createContainerElement('figure', { class: 'media' }, [
|
53
|
+
registry.getMediaViewElement(writer, url, options),
|
54
|
+
writer.createSlot()
|
55
|
+
]);
|
81
56
|
}
|
82
|
-
|
83
57
|
/**
|
84
58
|
* Returns a selected media element in the model, if any.
|
85
|
-
*
|
86
|
-
* @param {module:engine/model/selection~Selection} selection
|
87
|
-
* @returns {module:engine/model/element~Element|null}
|
88
59
|
*/
|
89
|
-
export function getSelectedMediaModelWidget(
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
return null;
|
60
|
+
export function getSelectedMediaModelWidget(selection) {
|
61
|
+
const selectedElement = selection.getSelectedElement();
|
62
|
+
if (selectedElement && selectedElement.is('element', 'media')) {
|
63
|
+
return selectedElement;
|
64
|
+
}
|
65
|
+
return null;
|
97
66
|
}
|
98
|
-
|
99
67
|
/**
|
100
68
|
* Creates a media element and inserts it into the model.
|
101
69
|
*
|
102
70
|
* **Note**: This method will use {@link module:engine/model/model~Model#insertContent `model.insertContent()`} logic of inserting content
|
103
71
|
* if no `insertPosition` is passed.
|
104
72
|
*
|
105
|
-
* @param
|
106
|
-
* @param
|
107
|
-
* @param {module:engine/model/range~Range} [insertRange] The range to insert the media. If not specified,
|
108
|
-
* the default behavior of {@link module:engine/model/model~Model#insertContent `model.insertContent()`} will
|
109
|
-
* be applied.
|
110
|
-
* @param {Boolean} findOptimalPosition If true it will try to find optimal position to insert media without breaking content
|
73
|
+
* @param url An URL of an embeddable media.
|
74
|
+
* @param findOptimalPosition If true it will try to find optimal position to insert media without breaking content
|
111
75
|
* in which a selection is.
|
112
76
|
*/
|
113
|
-
export function insertMedia(
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
} );
|
77
|
+
export function insertMedia(model, url, selectable, findOptimalPosition) {
|
78
|
+
model.change(writer => {
|
79
|
+
const mediaElement = writer.createElement('media', { url });
|
80
|
+
model.insertObject(mediaElement, selectable, null, {
|
81
|
+
setSelection: 'on',
|
82
|
+
findOptimalPosition: findOptimalPosition ? 'auto' : undefined
|
83
|
+
});
|
84
|
+
});
|
122
85
|
}
|