UNPKG

wix-style-react

Version:
173 lines (156 loc) 3.43 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _slate = require('slate'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var BLOCK_TAGS = { p: 'paragraph', ul: 'unordered-list', li: 'list-item', ol: 'ordered-list', img: 'image' }; var MARK_TAGS = { em: 'italic', strong: 'bold', u: 'underline' }; var INLINE_TAGS = { a: 'link' }; var rules = [{ deserialize: function deserialize(el, next) { var type = BLOCK_TAGS[el.tagName]; if (!type) { return; } var data = {}; switch (type) { case 'image': { data.src = el.attribs.src; break; } default: break; } return { kind: 'block', type: type, data: data, nodes: next(el.children) }; }, serialize: function serialize(object, children) { if (object.kind !== 'block') { return; } switch (object.type) { case 'paragraph': return _react2.default.createElement( 'p', null, children ); case 'list-item': return _react2.default.createElement( 'li', null, children ); case 'ordered-list': return _react2.default.createElement( 'ol', null, children ); case 'unordered-list': return _react2.default.createElement( 'ul', null, children ); //data-hook="editor-image" case 'image': return _react2.default.createElement('img', { 'data-hook': 'editor-image', src: object.data.get('src') }); default: return { children: children }; } } }, { deserialize: function deserialize(el, next) { var type = MARK_TAGS[el.tagName]; if (!type) { return; } return { kind: 'mark', type: type, nodes: next(el.children) }; }, serialize: function serialize(object, children) { if (object.kind !== 'mark') { return; } switch (object.type) { case 'bold': return _react2.default.createElement( 'strong', null, children ); case 'italic': return _react2.default.createElement( 'em', null, children ); case 'underline': return _react2.default.createElement( 'u', null, children ); default: return { children: children }; } } }, { deserialize: function deserialize(el, next) { var type = INLINE_TAGS[el.tagName]; if (!type) { return; } return { kind: 'inline', type: type, data: { href: el.attribs.href }, nodes: next(el.children) }; }, serialize: function serialize(object, children) { if (object.kind !== 'inline') { return; } switch (object.type) { case 'link': return _react2.default.createElement( 'a', { rel: 'noopener noreferrer', target: '_blank', href: object.data.get('href') }, children ); default: return { children: children }; } } }]; exports.default = new _slate.Html({ rules: rules });