Merge pull request #3402 from matrix-org/bwindels/cider-toggle-inline-formatting

New composer: support toggling inline formatting
This commit is contained in:
Bruno Windels 2019-09-06 14:42:16 +00:00 committed by GitHub
commit fe482258ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 7 deletions

View file

@ -24,7 +24,7 @@ import {setSelection} from '../../../editor/caret';
import {
formatRangeAsQuote,
formatRangeAsCode,
formatInline,
toggleInlineFormat,
replaceRangeAndMoveCaret,
} from '../../../editor/operations';
import {getCaretOffsetAndText, getRangeForSelection} from '../../../editor/dom';
@ -457,13 +457,13 @@ export default class BasicMessageEditor extends React.Component {
this.historyManager.ensureLastChangesPushed(this.props.model);
switch (action) {
case "bold":
formatInline(range, "**");
toggleInlineFormat(range, "**");
break;
case "italics":
formatInline(range, "*");
toggleInlineFormat(range, "*");
break;
case "strikethrough":
formatInline(range, "<del>", "</del>");
toggleInlineFormat(range, "<del>", "</del>");
break;
case "code":
formatRangeAsCode(range);

View file

@ -100,10 +100,27 @@ export function formatRangeAsCode(range) {
replaceRangeAndExpandSelection(range, parts);
}
export function formatInline(range, prefix, suffix = prefix) {
export function toggleInlineFormat(range, prefix, suffix = prefix) {
const {model, parts} = range;
const {partCreator} = model;
parts.unshift(partCreator.plain(prefix));
parts.push(partCreator.plain(suffix));
const isFormatted = parts.length &&
parts[0].text.startsWith(prefix) &&
parts[parts.length - 1].text.endsWith(suffix);
if (isFormatted) {
// remove prefix and suffix
const partWithoutPrefix = parts[0].serialize();
partWithoutPrefix.text = partWithoutPrefix.text.substr(prefix.length);
parts[0] = partCreator.deserializePart(partWithoutPrefix);
const partWithoutSuffix = parts[parts.length - 1].serialize();
const suffixPartText = partWithoutSuffix.text;
partWithoutSuffix.text = suffixPartText.substring(0, suffixPartText.length - suffix.length);
parts[parts.length - 1] = partCreator.deserializePart(partWithoutSuffix);
} else {
parts.unshift(partCreator.plain(prefix));
parts.push(partCreator.plain(suffix));
}
replaceRangeAndExpandSelection(range, parts);
}