shengnian-editor
Version:
Shengnian React Rich Text Editor
201 lines (151 loc) • 6.17 kB
JavaScript
'use strict';
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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _classAutobind = require('class-autobind');
var _classAutobind2 = _interopRequireDefault(_classAutobind);
var _shallowEqual = require('../lib/shallowEqual');
var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
var _EditorToolbarConfig = require('../lib/EditorToolbarConfig');
var _EditorToolbarConfig2 = _interopRequireDefault(_EditorToolbarConfig);
var _Autocomplete = require('./Autocomplete');
var _Autocomplete2 = _interopRequireDefault(_Autocomplete);
var _draftJs = require('draft-js');
var _SupportLanguagePopover = require('./SupportLanguagePopover.css');
var _SupportLanguagePopover2 = _interopRequireDefault(_SupportLanguagePopover);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var updateDataOfBlock = function updateDataOfBlock(editorState, block, newData) {
var contentState = editorState.getCurrentContent();
var newBlock = block.merge({
data: newData
});
var newContentState = contentState.merge({
blockMap: contentState.getBlockMap().set(block.getKey(), newBlock)
});
return _draftJs.EditorState.push(editorState, newContentState, 'change-block-type');
};
var matchStateToTerm = function matchStateToTerm(state, value) {
return state.value.toLowerCase().indexOf(value.toLowerCase()) !== -1 || state.label.toLowerCase().indexOf(value.toLowerCase()) !== -1;
};
var SupportLanguagePopover = function (_React$Component) {
(0, _inherits3.default)(SupportLanguagePopover, _React$Component);
function SupportLanguagePopover(props) {
(0, _classCallCheck3.default)(this, SupportLanguagePopover);
var _this = (0, _possibleConstructorReturn3.default)(this, (SupportLanguagePopover.__proto__ || (0, _getPrototypeOf2.default)(SupportLanguagePopover)).call(this, props));
_this._onChangePrismLang = function (value, item) {
if (!value) {
return;
}
var _this$props = _this.props,
getEditorState = _this$props.getEditorState,
block = _this$props.block;
var data = block.getData();
var newData = data.set('syntax', value).set('syntaxLabel', item.label);
// this.setState({
// value: item.label
// })
_this.props.onChange(updateDataOfBlock(getEditorState, block, newData));
};
(0, _classAutobind2.default)(_this);
_this.originItems = _EditorToolbarConfig2.default.PRISM_SUPPORTED_LANGUAGES;
_this.state = {
items: _this.originItems,
value: ''
};
_this._value = '';
return _this;
}
(0, _createClass3.default)(SupportLanguagePopover, [{
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate(nextProps, nextState) {
return (0, _shallowEqual2.default)(this, nextProps, nextState);
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(newProps) {
var block = newProps.block;
var syntax = block && block.getData().get('syntaxLabel');
this.setState({
value: syntax || ''
});
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var position = this.props.position;
var styles = {
position: 'fixed',
zIndex: '1000',
left: position.left + 'px',
top: position.top + 'px'
};
return _react2.default.createElement(
'div',
{
className: 'editable-prismSupportedLanguages',
style: styles
},
_react2.default.createElement(_Autocomplete2.default, {
value: this.state.value,
inputProps: {
id: 'editable-prismSupportedLangPopover-input',
placeholder: '请选择语言'
},
wrapperStyle: { position: 'relative', display: 'inline-block' },
items: _EditorToolbarConfig2.default.PRISM_SUPPORTED_LANGUAGES,
getItemValue: function getItemValue(item) {
return item.value;
},
shouldItemRender: matchStateToTerm
// sortItems={sortStates}
, onChange: function onChange(event, value) {
return _this2.setState({ value: value });
},
onSelect: this._onChangePrismLang,
renderMenu: function renderMenu(children) {
return _react2.default.createElement(
'div',
{ className: _SupportLanguagePopover2.default.selection },
children
);
},
renderItem: function renderItem(item, isHighlighted) {
return _react2.default.createElement(
'div',
{
className: _SupportLanguagePopover2.default.item + ' ' + (isHighlighted ? _SupportLanguagePopover2.default.highlighted : ''),
key: item.value
},
item.label
);
}
})
);
}
// _onInputChange(input) {
// const normalisedInput = input.toLowerCase();
//
// const filteredArray = this.originItems.filter(item => {
// return item.label.toLowerCase().indexOf(normalisedInput) === 0;
// });
//
// this.setState({ items: filteredArray });
// }
}]);
return SupportLanguagePopover;
}(_react2.default.Component);
;
exports.default = SupportLanguagePopover;