all files / model/ HTMLExporter.js

66.67% Statements 20/30
47.37% Branches 9/19
66.67% Functions 6/9
68.97% Lines 20/29
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77                        389×             14×                 389×     389× 371×   389×                                     14× 14× 14× 42× 28×   14× 14× 14×       14×            
import { forEach, isBoolean, isNumber, isString } from '../util'
import { DefaultDOMElement } from '../dom'
import DOMExporter from './DOMExporter'
 
/*
  Base class for custom HTML exporters. If you want to use XML as your
  exchange format see {@link model/XMLExporter}.
*/
 
class HTMLExporter extends DOMExporter {
 
  constructor(config, context) {
    super(_defaultConfig(config), context)
  }
 
  exportDocument(doc) {
    let htmlEl = DefaultDOMElement.parseHTML('<html><head></head><body></body></html>')
    return this.convertDocument(doc, htmlEl)
  }
 
  getDefaultBlockConverter() {
    return defaultBlockConverter // eslint-disable-line no-use-before-define
  }
 
  getDefaultPropertyAnnotationConverter() {
    return defaultAnnotationConverter // eslint-disable-line no-use-before-define
  }
 
}
 
function _defaultConfig(config) {
  config = Object.assign({
    idAttribute: 'data-id'
  }, config)
  if (!config.elementFactory) {
    config.elementFactory = DefaultDOMElement.createDocument('html')
  }
  return config
}
 
 
const defaultAnnotationConverter = {
  tagName: 'span',
  export: function(node, el) {
    el.tagName = 'span'
    el.attr('data-type', node.type)
    var properties = node.toJSON()
    forEach(properties, function(value, name) {
      if (name === 'id' || name === 'type') return
      if (isString(value) || isNumber(value) || isBoolean(value)) {
        el.attr('data-'+name, value)
      }
    })
  }
}
 
const defaultBlockConverter = {
  export: function(node, el, converter) {
    el.attr('data-type', node.type)
    var properties = node.toJSON()
    forEach(properties, function(value, name) {
      if (name === 'id' || name === 'type') {
        return
      }
      var prop = converter.$$('div').attr('property', name)
      Eif (node.getPropertyType(name) === 'string' && value) {
        prop.append(converter.annotatedText([node.id, name]))
      } else {
        prop.text(value)
      }
      el.append(prop)
    })
  }
}
 
export default HTMLExporter