8
0

utils.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /**
  2. * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  4. */
  5. /**
  6. * @module html-embed/utils
  7. */
  8. import { isWidget, toWidget } from '@ckeditor/ckeditor5-widget/src/utils';
  9. /**
  10. * Converts a given {@link module:engine/view/element~Element} to a html widget:
  11. * * Adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the html widget element.
  12. * * Calls the {@link module:widget/utils~toWidget} function with the proper element's label creator.
  13. *
  14. * @param {module:engine/view/element~Element} viewElement
  15. * @param {module:engine/view/downcastwriter~DowncastWriter} writer An instance of the view writer.
  16. * @param {String} label The element's label.
  17. * @returns {module:engine/view/element~Element}
  18. */
  19. export function toRawHtmlWidget( viewElement, writer, label ) {
  20. writer.setCustomProperty( 'rawHtml', true, viewElement );
  21. return toWidget( viewElement, writer, { label } );
  22. }
  23. /**
  24. * Returns a raw html widget editing view element if one is selected.
  25. *
  26. * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} selection
  27. * @returns {module:engine/view/element~Element|null}
  28. */
  29. export function getSelectedRawHtmlViewWidget( selection ) {
  30. const viewElement = selection.getSelectedElement();
  31. if ( viewElement && isRawHtmlWidget( viewElement ) ) {
  32. return viewElement;
  33. }
  34. return null;
  35. }
  36. /**
  37. * Checks if a given view element is a raw html widget.
  38. *
  39. * @param {module:engine/view/element~Element} viewElement
  40. * @returns {Boolean}
  41. */
  42. export function isRawHtmlWidget( viewElement ) {
  43. return !!viewElement.getCustomProperty( 'rawHtml' ) && isWidget( viewElement );
  44. }
  45. /**
  46. * Returns a selected raw html element in the model, if any.
  47. *
  48. * @param {module:engine/model/selection~Selection} selection
  49. * @returns {module:engine/model/element~Element|null}
  50. */
  51. export function getSelectedRawHtmlModelWidget( selection ) {
  52. const selectedElement = selection.getSelectedElement();
  53. if ( selectedElement && selectedElement.is( 'element', 'rawHtml' ) ) {
  54. return selectedElement;
  55. }
  56. return null;
  57. }
  58. /**
  59. * Creates a raw html element and inserts it into the model.
  60. *
  61. * **Note**: This method will use {@link module:engine/model/model~Model#insertContent `model.insertContent()`} logic of inserting content
  62. * if no `insertPosition` is passed.
  63. *
  64. * @param {module:engine/model/model~Model} model
  65. * @param {String} [rawHtml='']
  66. */
  67. export function insertRawHtml( model, rawHtml = null ) {
  68. model.change( writer => {
  69. const rawHtmlElement = writer.createElement( 'rawHtml' );
  70. model.insertContent( rawHtmlElement );
  71. writer.setSelection( rawHtmlElement, 'on' );
  72. writer.setAttribute( 'value', rawHtml, rawHtmlElement );
  73. } );
  74. }