mirror of
https://github.com/vector-im/element-web.git
synced 2024-11-16 21:24:59 +08:00
Merge pull request #3828 from krkc/develop
Added cut/copy and pasting user pills from editor.
This commit is contained in:
commit
cad9562f8d
@ -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}
|
||||||
|
Loading…
Reference in New Issue
Block a user