shengnian-editor
Version:
Shengnian React Rich Text Editor
281 lines (245 loc) • 8.99 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _RichTextEditor = require('./RichTextEditor');
var _RichTextEditor2 = _interopRequireDefault(_RichTextEditor);
var _draftJs = require('draft-js');
var _classAutobind = require('class-autobind');
var _classAutobind2 = _interopRequireDefault(_classAutobind);
var _immutable = require('immutable');
var _ButtonGroup = require('./ui/ButtonGroup');
var _ButtonGroup2 = _interopRequireDefault(_ButtonGroup);
var _Dropdown = require('./ui/Dropdown');
var _Dropdown2 = _interopRequireDefault(_Dropdown);
var _IconButton = require('./ui/IconButton');
var _IconButton2 = _interopRequireDefault(_IconButton);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var EditorDemo = function (_Component) {
(0, _inherits3.default)(EditorDemo, _Component);
function EditorDemo() {
(0, _classCallCheck3.default)(this, EditorDemo);
var _this = (0, _possibleConstructorReturn3.default)(this, (EditorDemo.__proto__ || (0, _getPrototypeOf2.default)(EditorDemo)).apply(this, arguments));
(0, _classAutobind2.default)(_this);
_this.state = {
value: (0, _RichTextEditor.createEmptyValue)(),
format: 'html',
readOnly: false
};
return _this;
}
(0, _createClass3.default)(EditorDemo, [{
key: 'render',
value: function render() {
var _state = this.state,
value = _state.value,
format = _state.format;
return _react2.default.createElement(
'div',
{ className: 'editor-demo' },
_react2.default.createElement(
'div',
{ className: 'row' },
_react2.default.createElement(
'p',
null,
'This is a demo of the ',
_react2.default.createElement(
'a',
{ href: 'https://github.com/shengnian/shengnian-editor', target: 'top' },
'shengnian-editor'
),
' editor.'
)
),
_react2.default.createElement(
'div',
{ className: 'row' },
_react2.default.createElement(_RichTextEditor2.default, {
value: value,
topOffset: 20,
leftOffset: -215,
onChange: this._onChange,
className: 'shengnian-editor-demo',
placeholder: 'Tell a story',
toolbarClassName: 'demo-toolbar',
editorClassName: 'demo-editor',
readOnly: this.state.readOnly,
onImageChange: function onImageChange(e, editorState, setImage) {
console.log('demo image change');
},
onImageRejected: function onImageRejected(files, evt, editorState) {
console.log('demo rejected', files[0]);
},
onImageAccepted: function onImageAccepted(files, evt, editorState, setImage) {
console.log('demo accepted', files[0]);
// If the image uploaded, call the setImage to insert image.
setImage('https://shengnian.github.io/favicon.ico');
},
customControls: [
// eslint-disable-next-line no-unused-vars
function (setValue, getValue, editorState) {
var choices = new _immutable.Map([['1', { label: '1' }], ['2', { label: '2' }], ['3', { label: '3' }]]);
return _react2.default.createElement(
_ButtonGroup2.default,
{ key: 1 },
_react2.default.createElement(_Dropdown2.default, {
choices: choices,
selectedKey: getValue('language-key'),
onChange: function onChange(value) {
setValue('language-key', value);
}
})
);
}, _react2.default.createElement(
_ButtonGroup2.default,
{ key: 2 },
_react2.default.createElement(_IconButton2.default, {
label: 'Remove Link',
iconName: 'unlink',
focusOnClick: false,
onClick: function onClick() {
return console.log('You pressed a button');
}
})
)]
})
),
_react2.default.createElement(
'div',
{ className: 'row' },
_react2.default.createElement(
'label',
{ className: 'radio-item' },
_react2.default.createElement('input', {
type: 'radio',
name: 'format',
value: 'html',
checked: format === 'html',
onChange: this._onChangeFormat
}),
_react2.default.createElement(
'span',
null,
'HTML'
)
),
_react2.default.createElement(
'label',
{ className: 'radio-item' },
_react2.default.createElement('input', {
type: 'radio',
name: 'format',
value: 'markdown',
checked: format === 'markdown',
onChange: this._onChangeFormat
}),
_react2.default.createElement(
'span',
null,
'Markdown'
)
),
_react2.default.createElement(
'label',
{ className: 'radio-item' },
_react2.default.createElement('input', {
type: 'checkbox',
onChange: this._onChangeReadOnly,
checked: this.state.readOnly
}),
_react2.default.createElement(
'span',
null,
'Editor is read-only'
)
)
),
_react2.default.createElement(
'div',
{ className: 'row' },
_react2.default.createElement('textarea', {
className: 'source',
placeholder: 'Editor Source',
value: value.toString(format),
onChange: this._onChangeSource
})
),
_react2.default.createElement(
'div',
{ className: 'row btn-row' },
_react2.default.createElement(
'span',
{ className: 'label' },
'Debugging:'
),
_react2.default.createElement(
'button',
{ className: 'btn', onClick: this._logState },
'Log Content State'
),
_react2.default.createElement(
'button',
{ className: 'btn', onClick: this._logStateRaw },
'Log Raw'
)
)
);
}
}, {
key: '_logState',
value: function _logState() {
var editorState = this.state.value.getEditorState();
var contentState = window.contentState = editorState.getCurrentContent().toJS();
console.log(contentState);
}
}, {
key: '_logStateRaw',
value: function _logStateRaw() {
var editorState = this.state.value.getEditorState();
var contentState = editorState.getCurrentContent();
var rawContentState = window.rawContentState = (0, _draftJs.convertToRaw)(contentState);
console.log((0, _stringify2.default)(rawContentState));
}
}, {
key: '_onChange',
value: function _onChange(value) {
this.setState({ value: value });
}
}, {
key: '_onChangeSource',
value: function _onChangeSource(event) {
var source = event.target.value;
var oldValue = this.state.value;
this.setState({
value: oldValue.setContentFromString(source, this.state.format)
});
}
}, {
key: '_onChangeFormat',
value: function _onChangeFormat(event) {
this.setState({ format: event.target.value });
}
}, {
key: '_onChangeReadOnly',
value: function _onChangeReadOnly(event) {
this.setState({ readOnly: event.target.checked });
}
}]);
return EditorDemo;
}(_react.Component);
exports.default = EditorDemo;