Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Merge pull request #3828 from krkc/develop
Browse files Browse the repository at this point in the history
Added cut/copy and pasting user pills from editor.
  • Loading branch information
turt2live authored Jan 15, 2020
2 parents 070e59e + 59ea865 commit cad9562
Showing 1 changed file with 39 additions and 7 deletions.
46 changes: 39 additions & 7 deletions src/components/views/rooms/BasicMessageComposer.js
Original file line number Diff line number Diff line change
Expand Up @@ -200,17 +200,47 @@ export default class BasicMessageEditor extends React.Component {
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) => {
const {model} = this.props;
const {partCreator} = model;
const text = event.clipboardData.getData("text/plain");
if (text) {
this._modifiedFlag = true;
const range = getRangeForSelection(this._editorRef, model, document.getSelection());
const parts = parsePlainTextMessage(text, partCreator);
replaceRangeAndMoveCaret(range, parts);
event.preventDefault();
const partsText = event.clipboardData.getData("application/x-riot-composer");
let parts;
if (partsText) {
const serializedTextParts = JSON.parse(partsText);
const deserializedParts = serializedTextParts.map(p => partCreator.deserializePart(p));
parts = deserializedParts;
} 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) => {
Expand Down Expand Up @@ -557,6 +587,8 @@ export default class BasicMessageEditor extends React.Component {
tabIndex="0"
onBlur={this._onBlur}
onFocus={this._onFocus}
onCopy={this._onCopy}
onCut={this._onCut}
onPaste={this._onPaste}
onKeyDown={this._onKeyDown}
ref={ref => this._editorRef = ref}
Expand Down

0 comments on commit cad9562

Please sign in to comment.