UNPKG

dh-c

Version:

The front-end development engineers jimberton gulp react component

220 lines (184 loc) 7.95 kB
'use strict'; exports.__esModule = true; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _rcUpload = require('rc-upload'); var _rcUpload2 = _interopRequireDefault(_rcUpload); var _icon = require('../icon'); var _icon2 = _interopRequireDefault(_icon); var _draftJs = require('draft-js'); var _draftConvert = require('draft-convert'); var _utils = require('./utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // function Filtrate(str){ // return str.replace(/(\s*<p>\s*<br>\s*<\/p>\s*)(<figure>)|(<\/figure>)(\s*<p>\s*<br>\s*<\/p>\s*)/ig, // (_, $1, $2, $3 ) => $2 =='<figure>' ? $2 :'</figure>' ) // } var Tinymce = function (_React$Component) { _inherits(Tinymce, _React$Component); function Tinymce(props) { _classCallCheck(this, Tinymce); var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); _this.state = { editorState: _draftJs.EditorState.createEmpty() }; _this.handleChange = _this._onChange.bind(_this); _this.handleClickImages = _this._insertImage.bind(_this); _this.handleClickSave = _this._handleClickSave.bind(_this); _this._imagesUploadSuccess = _this._imagesUploadSuccess.bind(_this); return _this; } Tinymce.prototype.componentWillMount = function componentWillMount() { if (this.props.rawContent) { var _editorState = this.state.editorState; var contentState = (0, _draftConvert.convertFromHTML)((0, _utils.getFromHTMLConfig)())(this.props.rawContent); var editorState = _draftJs.EditorState.push(_editorState, contentState, 'change-block-data'); this.setState({ editorState: editorState }); } }; Tinymce.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { if (nextProps.rawContent && nextProps.rawContent !== this.props.rawContent) { var _editorState = this.state.editorState; var contentState = (0, _draftConvert.convertFromHTML)((0, _utils.getFromHTMLConfig)())(nextProps.rawContent); var editorState = _draftJs.EditorState.push(_editorState, contentState, 'change-block-data'); this.setState({ editorState: editorState }); } }; Tinymce.prototype._onChange = function _onChange(editorState) { this.setState({ editorState: editorState }); var onChange = this.props.onChange; if (onChange) { onChange(editorState.getCurrentContent().getPlainText()); } }; Tinymce.prototype._insertImage = function _insertImage(src, description) { this.handleChange((0, _utils.insertImages)(this.state.editorState, { src: src, description: description })); }; /** * image 上传 */ Tinymce.prototype._imagesUploadSuccess = function _imagesUploadSuccess(res) { var uploadConfig = this.props.uploadConfig; if ('formatResult' in uploadConfig) { var result = uploadConfig.formatResult(res); this._insertImage(result.url, result.name); } else { throw "必须配置formatResult, 便于Tinymce接受上传后的图片"; } }; // getHtmlContent() { // let _editorState = this.state.editorState.getCurrentContent() // let _entityStyleFn = (entity) => { // const entityType = entity.get('type').toLowerCase(); // if (entityType === 'image') { // const data = entity.getData(); // return { // element: 'img', // attributes: { // src: data.src, // name: 'dhc-img' // } // } // } // } // return stateToHTML(_editorState, { entityStyleFn: _entityStyleFn }) // } Tinymce.prototype._convertToHTML = function _convertToHTML(contentState) { var config = (0, _utils.getToHTMLConfig)({ contentState: contentState }); return (0, _draftConvert.convertToHTML)(config)(contentState); }; Tinymce.prototype._handleClickSave = function _handleClickSave() { if (this.enabled) { var html = this._convertToHTML(this.state.editorState.getCurrentContent()); if (this.props.onSave) { this.props.onSave(html); this.setState({ editorState: _draftJs.EditorState.createEmpty() }); } } }; Tinymce.prototype.render = function render() { var _props = this.props, uploadConfig = _props.uploadConfig, footer = _props.footer, footerText = _props.footerText, innerElement = _props.innerElement, placeholder = _props.placeholder, onSnap = _props.onSnap, snap = _props.snap; var editorState = this.state.editorState; var uploadProps = _extends({ prefixCls: "dh-upload", className: 'dh-tinymce-ctr' }, uploadConfig, { start: function start(file) { return console.log('onStart', file, file.name); }, onSuccess: this._imagesUploadSuccess, onError: function onError() { return console.error('onError', err); } }); this.enabled = !!(editorState.getCurrentContent().getPlainText().length || innerElement); return _react2.default.createElement( 'div', { className: 'dh-tinymce' }, _react2.default.createElement( 'div', { className: 'dh-tinymce-btns' }, _react2.default.createElement( _rcUpload2.default, uploadProps, _react2.default.createElement(_icon2.default, { type: 'tupian' }), ' ' ), snap && _react2.default.createElement( 'span', { className: 'dh-tinymce-ctr', onClick: onSnap }, _react2.default.createElement(_icon2.default, { type: 'kuaizhao' }) ) ), innerElement, _react2.default.createElement( 'div', { className: 'dh-tinymce-edit' }, _react2.default.createElement(_draftJs.Editor, { placeholder: placeholder, blockRendererFn: _utils.MediaBlockRenderer, editorState: this.state.editorState, onChange: this.handleChange }) ), _react2.default.createElement( 'div', { className: 'dh-tinymce-footer' }, footer === true ? _react2.default.createElement( 'div', { className: 'dh-tinymce-footer' }, _react2.default.createElement( 'span', { onClick: this.handleClickSave, className: this.enabled ? '' : 'not-allowed' }, footerText || '发送' ) ) : null ) ); }; return Tinymce; }(_react2.default.Component); Tinymce.defaultProps = { placeholder: '请输入文字.......', onSnap: function onSnap() {} }; exports.default = Tinymce;