This repository has been archived by the owner on Jun 26, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 16
/
converters.js
57 lines (50 loc) · 1.99 KB
/
converters.js
1
2
3
4
5
6
7
8
9
10
11
12
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
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module media-embed/converters
*/
/**
* Returns a function that converts the model "url" attribute to the view representation.
*
* Depending on the configuration, the view representation can be "semantic" (for the data pipeline):
*
* <figure class="media">
* <oembed url="foo"></oembed>
* </figure>
*
* or "non-semantic" (for the editing view pipeline):
*
* <figure class="media">
* <div data-oembed-url="foo">[ non-semantic media preview for "foo" ]</div>
* </figure>
*
* **Note:** Changing the model "url" attribute replaces the entire content of the
* `<figure>` in the view.
*
* @param {module:media-embed/mediaregistry~MediaRegistry} registry The registry providing
* the media and their content.
* @param {Object} options
* @param {String} [options.renderMediaPreview] When `true`, the converter will create the view in the non-semantic form.
* @param {String} [options.renderForEditingView] When `true`, the converter will create a view specific for the
* editing pipeline (e.g. including CSS classes, content placeholders).
* @returns {Function}
*/
export function modelToViewUrlAttributeConverter( registry, options ) {
return dispatcher => {
dispatcher.on( 'attribute:url:media', converter );
};
function converter( evt, data, conversionApi ) {
if ( !conversionApi.consumable.consume( data.item, evt.name ) ) {
return;
}
const url = data.attributeNewValue;
const viewWriter = conversionApi.writer;
const figure = conversionApi.mapper.toViewElement( data.item );
// TODO: removing it and creating it from scratch is a hack. We can do better than that.
viewWriter.remove( viewWriter.createRangeIn( figure ) );
const mediaViewElement = registry.getMediaViewElement( viewWriter, url, options );
viewWriter.insert( viewWriter.createPositionAt( figure, 0 ), mediaViewElement );
}
}