8
0

utils.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /**
  6. * @module image/image/utils
  7. */
  8. import { toWidget, isWidget } from '@ckeditor/ckeditor5-widget/src/utils';
  9. import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
  10. const imageSymbol = Symbol( 'isImage' );
  11. /**
  12. * Converts a given {@link module:engine/view/element~Element} to an image widget:
  13. * * adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the image widget element,
  14. * * calls the {@link module:widget/utils~toWidget toWidget} function with the proper element's label creator.
  15. *
  16. * @param {module:engine/view/element~Element} viewElement
  17. * @param {module:engine/view/writer~Writer} writer Instance of view writer.
  18. * @param {String} label Element's label. It will be concatenated with the image `alt` attribute if one is present.
  19. * @returns {module:engine/view/element~Element}
  20. */
  21. export function toImageWidget( viewElement, writer, label ) {
  22. writer.setCustomProperty( imageSymbol, true, viewElement );
  23. return toWidget( viewElement, writer, { label: labelCreator } );
  24. function labelCreator() {
  25. const imgElement = viewElement.getChild( 0 );
  26. const altText = imgElement.getAttribute( 'alt' );
  27. return altText ? `${ altText } ${ label }` : label;
  28. }
  29. }
  30. /**
  31. * Checks if a given view element is an image widget.
  32. *
  33. * @param {module:engine/view/element~Element} viewElement
  34. * @returns {Boolean}
  35. */
  36. export function isImageWidget( viewElement ) {
  37. return !!viewElement.getCustomProperty( imageSymbol ) && isWidget( viewElement );
  38. }
  39. /**
  40. * Checks if an image widget is the only selected element.
  41. *
  42. * @param {module:engine/view/documentselection~DocumentSelection} viewSelection
  43. * @returns {Boolean}
  44. */
  45. export function isImageWidgetSelected( viewSelection ) {
  46. const viewElement = viewSelection.getSelectedElement();
  47. return !!( viewElement && isImageWidget( viewElement ) );
  48. }
  49. /**
  50. * Checks if the provided model element is an instance of {@link module:engine/model/element~Element Element} and its name
  51. * is `image`.
  52. *
  53. * @param {module:engine/model/element~Element} modelElement
  54. * @returns {Boolean}
  55. */
  56. export function isImage( modelElement ) {
  57. return modelElement instanceof ModelElement && modelElement.name == 'image';
  58. }