Merge pull request #3828 from krkc/develop

Added cut/copy and pasting user pills from editor.
This commit is contained in:
Travis Ralston 2020-01-15 15:36:33 -07:00 committed by GitHub
commit cad9562f8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -200,17 +200,47 @@ export default class BasicMessageEditor extends React.Component {
return !!(this._isIMEComposing || (event.nativeEvent && event.nativeEvent.isComposing)); return !!(this._isIMEComposing || (event.nativeEvent && event.nativeEvent.isComposing));
} }
_onCutCopy = (event, type) => {
const selection = document.getSelection();
const text = selection.toString();
if (text) {
const {model} = this.props;
const range = getRangeForSelection(this._editorRef, model, selection);
const selectedParts = range.parts.map(p => p.serialize());
event.clipboardData.setData("application/x-riot-composer", JSON.stringify(selectedParts));
if (type === "cut") {
selection.deleteFromDocument();
range.replace([]);
}
event.preventDefault();
}
}
_onCopy = (event) => {
this._onCutCopy(event, "copy");
}
_onCut = (event) => {
this._onCutCopy(event, "cut");
}
_onPaste = (event) => { _onPaste = (event) => {
const {model} = this.props; const {model} = this.props;
const {partCreator} = model; const {partCreator} = model;
const text = event.clipboardData.getData("text/plain"); const partsText = event.clipboardData.getData("application/x-riot-composer");
if (text) { let parts;
this._modifiedFlag = true; if (partsText) {
const range = getRangeForSelection(this._editorRef, model, document.getSelection()); const serializedTextParts = JSON.parse(partsText);
const parts = parsePlainTextMessage(text, partCreator); const deserializedParts = serializedTextParts.map(p => partCreator.deserializePart(p));
replaceRangeAndMoveCaret(range, parts); parts = deserializedParts;
event.preventDefault(); } else {
const text = event.clipboardData.getData("text/plain");
parts = parsePlainTextMessage(text, partCreator);
} }
this._modifiedFlag = true;
const range = getRangeForSelection(this._editorRef, model, document.getSelection());
replaceRangeAndMoveCaret(range, parts);
event.preventDefault();
} }
_onInput = (event) => { _onInput = (event) => {
@ -557,6 +587,8 @@ export default class BasicMessageEditor extends React.Component {
tabIndex="0" tabIndex="0"
onBlur={this._onBlur} onBlur={this._onBlur}
onFocus={this._onFocus} onFocus={this._onFocus}
onCopy={this._onCopy}
onCut={this._onCut}
onPaste={this._onPaste} onPaste={this._onPaste}
onKeyDown={this._onKeyDown} onKeyDown={this._onKeyDown}
ref={ref => this._editorRef = ref} ref={ref => this._editorRef = ref}