@20minutes/draft-convert
Version:
Extensibly serialize & deserialize Draft.js ContentState
48 lines (47 loc) • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return splitReactElement;
}
});
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
const _server = /*#__PURE__*/ _interop_require_default(require("react-dom/server"));
const _tinyinvariant = /*#__PURE__*/ _interop_require_default(require("tiny-invariant"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
// see http://w3c.github.io/html/syntax.html#writing-html-documents-elements
const VOID_TAGS = [
'area',
'base',
'br',
'col',
'embed',
'hr',
'img',
'input',
'link',
'meta',
'param',
'source',
'track',
'wbr'
];
function splitReactElement(element) {
if (VOID_TAGS.indexOf(element.type) !== -1) {
return _server.default.renderToStaticMarkup(element);
}
const tags = _server.default.renderToStaticMarkup(/*#__PURE__*/ _react.default.cloneElement(element, {}, '\r')).split('\r');
(0, _tinyinvariant.default)(tags.length > 1, `convertToHTML: Element of type ${element.type} must render children`);
(0, _tinyinvariant.default)(tags.length < 3, `convertToHTML: Element of type ${element.type} cannot use carriage return character`);
return {
start: tags[0],
end: tags[1]
};
}