UNPKG

slate-editor-icons

Version:
290 lines (235 loc) 9.11 kB
Object.defineProperty(exports, "__esModule", { value: true }); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _class, _temp; /* eslint-disable require-jsdoc */ exports['default'] = function (readOnly) { var NodeComponent = function () { function NodeComponent(_ref) { var props = (0, _objectWithoutProperties3['default'])(_ref, []); return _react2['default'].createElement(ImageNode, (0, _extends3['default'])({}, props, { readOnly: readOnly })); } return NodeComponent; }(); return NodeComponent; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _slatePlugins = require('slate-plugins'); var _reactResizable = require('react-resizable'); var _arrowUp = require('react-icons/lib/fa/arrow-up'); var _arrowUp2 = _interopRequireDefault(_arrowUp); var _arrowDown = require('react-icons/lib/fa/arrow-down'); var _arrowDown2 = _interopRequireDefault(_arrowDown); var _trashO = require('react-icons/lib/fa/trash-o'); var _trashO2 = _interopRequireDefault(_trashO); var _imageNode = require('./style/imageNode.scss'); var _imageNode2 = _interopRequireDefault(_imageNode); require('./style/react-resizable.lib.scss'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var ImageNode = (_temp = _class = function (_Component) { (0, _inherits3['default'])(ImageNode, _Component); function ImageNode(props) { (0, _classCallCheck3['default'])(this, ImageNode); var _this = (0, _possibleConstructorReturn3['default'])(this, (ImageNode.__proto__ || (0, _getPrototypeOf2['default'])(ImageNode)).call(this, props)); _this.onResizeEnd = _this.onResizeEnd.bind(_this); _this.onResize = _this.onResize.bind(_this); _this.moveUp = _this.moveUp.bind(_this); _this.moveDown = _this.moveDown.bind(_this); _this.remove = _this.remove.bind(_this); _this.state = { width: null, height: null }; return _this; } (0, _createClass3['default'])(ImageNode, [{ key: 'onResizeEnd', value: function () { function onResizeEnd(e, data) { var onChange = this.props.editor.onChange; var _data$size = data.size, width = _data$size.width, height = _data$size.height; onChange(_slatePlugins.blocks.addDataToCurrent(this.props.state, { data: { width: width, height: height } })); } return onResizeEnd; }() }, { key: 'onResize', value: function () { function onResize(e, data) { var _data$size2 = data.size, width = _data$size2.width, height = _data$size2.height; this.setState({ width: width, height: height }); } return onResize; }() }, { key: 'moveUp', value: function () { function moveUp() { var _props = this.props, state = _props.state, node = _props.node, editor = _props.editor; var document = state.document; var parent = document.getParent(node); var index = parent.nodes.indexOf(node) - 1; var newState = state.transform().moveNodeByKey(node, parent, index === -1 ? 0 : index).apply(); editor.onChange(newState); } return moveUp; }() }, { key: 'moveDown', value: function () { function moveDown() { var _props2 = this.props, state = _props2.state, node = _props2.node, editor = _props2.editor; var document = state.document; var parent = document.getParent(node); var index = parent.nodes.indexOf(node) + 1; var newState = state.transform().moveNodeByKey(node, parent, index > parent.nodes.count() ? parent.nodes.count() : index) // eslint-disable-line max-len .apply(); editor.onChange(newState); } return moveDown; }() }, { key: 'remove', value: function () { function remove() { var _props3 = this.props, state = _props3.state, node = _props3.node, editor = _props3.editor; var newState = state.transform().unsetSelection().removeNodeByKey(node.key).apply(); editor.onChange(newState); } return remove; }() }, { key: 'render', value: function () { function render() { var _props4 = this.props, node = _props4.node, state = _props4.state, attributes = _props4.attributes, children = _props4.children, readOnly = _props4.readOnly; var align = node.data.get('align'); var indent = node.data.get('indent'); var src = node.data.get('src'); var width = this.state.width || node.data.get('width'); var height = this.state.height || node.data.get('height'); var isFocused = state.selection.hasEdgeIn(node); if (readOnly) { // if editor is readOnly return _react2['default'].createElement( 'div', { style: { textAlign: align, paddingLeft: 3 * indent + 'em' }, 'data-slate-type': 'image' }, _react2['default'].createElement( 'div', { className: _imageNode2['default'].imageNode, style: { width: width, height: height } }, _react2['default'].createElement('img', (0, _extends3['default'])({}, attributes, { src: src })), children ) ); } return _react2['default'].createElement( 'div', { style: { textAlign: align, paddingLeft: 3 * indent + 'em' }, 'data-slate-type': 'image' }, _react2['default'].createElement( _reactResizable.Resizable, { lockAspectRatio: true, minConstraints: [200, 200], maxConstraints: [700, 700], onResize: this.onResize, onResizeEnd: this.onResizeEnd, width: width, height: height }, _react2['default'].createElement( 'div', { className: isFocused ? _imageNode2['default'].imageNodeActive : _imageNode2['default'].imageNode, style: { width: width, height: height } }, _react2['default'].createElement('div', { className: _imageNode2['default'].overlay }), _react2['default'].createElement( 'div', { className: _imageNode2['default'].imageToolbar }, _react2['default'].createElement( 'div', { className: _imageNode2['default'].imageToolbarItem }, _react2['default'].createElement(_arrowUp2['default'], { onClick: this.moveUp }) ), _react2['default'].createElement( 'div', { className: _imageNode2['default'].imageToolbarItem }, _react2['default'].createElement(_arrowDown2['default'], { onClick: this.moveDown }) ), _react2['default'].createElement( 'div', { className: _imageNode2['default'].imageToolbarItem }, _react2['default'].createElement(_trashO2['default'], { onClick: this.remove }) ) ), _react2['default'].createElement('img', (0, _extends3['default'])({}, attributes, { src: src })), children ) ) ); } return render; }() }]); return ImageNode; }(_react.Component), _class.propTypes = { attributes: _react.PropTypes.object, children: _react.PropTypes.any, node: _react.PropTypes.any, state: _react.PropTypes.object, editor: _react.PropTypes.object, readOnly: _react.PropTypes.bool }, _temp); module.exports = exports['default'];