8
0

htmldataprocessor.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. 'use strict';
  6. import BasicHtmlWriter from './basichtmlwriter.js';
  7. /**
  8. * HtmlDataProcessor class.
  9. * This data processor implementation uses HTML as input/output data.
  10. *
  11. * @class dataProcessor.HtmlDataProcessor
  12. * @implements dataProcessor.DataProcessor
  13. */
  14. export default class HtmlDataProcessor {
  15. /**
  16. * Creates a new instance of the HtmlDataProcessor class.
  17. *
  18. * @constructor
  19. */
  20. constructor() {
  21. /**
  22. * DOMParser instance used to parse HTML string to HTMLDocument.
  23. *
  24. * @private
  25. * @property {DOMParser}
  26. */
  27. this._domParser = new DOMParser();
  28. /**
  29. * BasicHtmlWriter instance used to convert DOM elements to HTML string.
  30. *
  31. * @private
  32. * @type {dataProcessor.BasicHtmlWriter}
  33. */
  34. this._htmlWriter = new BasicHtmlWriter();
  35. }
  36. /**
  37. * Converts provided document fragment to data format - in this case HTML string.
  38. *
  39. * @param {DocumentFragment} fragment
  40. * @returns {String}
  41. */
  42. toData( fragment ) {
  43. return this._htmlWriter.getHtml( fragment );
  44. }
  45. /**
  46. * Converts HTML String to its DOM representation. Returns DocumentFragment, containing nodes parsed from
  47. * provided data.
  48. *
  49. * @param {String} data
  50. * @returns {DocumentFragment}
  51. */
  52. toDom( data ) {
  53. const document = this._domParser.parseFromString( data, 'text/html' );
  54. const fragment = document.createDocumentFragment();
  55. const nodes = document.body.childNodes;
  56. while ( nodes.length > 0 ) {
  57. fragment.appendChild( nodes[ 0 ] );
  58. }
  59. return fragment;
  60. }
  61. }