wix-style-react
Version:
wix-style-react
173 lines (156 loc) • 3.43 kB
JavaScript
'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 });