Commit Graph

60 Commits (69e680da3cb7be9b406a1dff4ab3302032e9cd59)

Author SHA1 Message Date
Bruno Windels 6b104f6344
Merge pull request #3393 from matrix-org/bwindels/cider-fix-lastcaret
New composer: fix needing to push arrow-up twice after sending first message after switching to a room
2019-09-06 09:22:10 +00:00
Bruno Windels 124b7135cd make sure the update callback gets a caret when calling reset 2019-09-05 17:54:08 +02:00
Bruno Windels 2ea556e0b4 support update callback setting selection instead of caret 2019-09-04 16:40:34 +02:00
Bruno Windels 037ac29c57 be more forgiving with offset that don't have atNodeEnd=true
if index is not found, it means the last position should be returned
if there is any.

We still return -1 for empty documents, as index should always point
to a valid part if positive.
2019-09-04 16:40:34 +02:00
Bruno Windels 7a01d1407f make _replaceRange internal only 2019-09-04 16:40:34 +02:00
Bruno Windels 47d8d86bbe whitespace (in model) 2019-09-04 16:40:23 +02:00
Bruno Windels 0d02ab59d6 allow starting a range with both positions known already
we'll need this to start a range for the selection
2019-09-03 16:00:50 +02:00
Bruno Windels ec0d048cf0
Merge pull request #3361 from matrix-org/bwindels/autocomplete-colon
New composer: append colon to completed user pill when at start of message
2019-08-30 16:02:58 +00:00
Bruno Windels c9572250be only append colon to user-pill when at start of composer
by passing position to autocomplete, so completion
can depend on where the pill-candidate appears.
2019-08-29 17:47:14 +02:00
Bruno Windels 2ff2ff0e75 support autocomplete replacing text with multiple parts
and append ": " to user pills
2019-08-29 17:43:18 +02:00
Bruno Windels 80523f5dbe still convert \n to NewlinePart when pasting/dropping
before we skipped the complete validation (which creates NewlineParts)
when pasting or dropping text. We don't want to create PillCandidatePart
when inserting text like this, as it would open the auto-complete, but
newlines should still be applied. So instead of skipping validation,
pass the inputType to the validation code so they can only reject
pill candidate characters when not pasting.
2019-08-29 13:00:31 +02:00
Bruno Windels c44fbb73d0 fix bug when replacing range starting at end of previous part 2019-08-28 15:52:39 +02:00
Bruno Windels d8bb9ecedf bring insert method inline with transform callback, add docs
before the insertPartsAt method would call the update callback
on its own, but now we have the concept of a transformation session,
so lets bring the API in line
2019-08-27 16:43:05 +02:00
Bruno Windels 68c2bb7ca6 introduce `transform` method so update can be called with a position
and also for multiple transformations at once. This removes
the need to call the update callback from `replaceRange()` as well
2019-08-27 16:43:05 +02:00
Bruno Windels f76a23d5dd return promise from updating autocomplete
so one can await if needed
2019-08-27 16:43:05 +02:00
Bruno Windels 713205e0ab close autocomplete when removing auto-completed part 2019-08-27 16:43:05 +02:00
Bruno Windels f10e1d7654 fix jsdoc comments 2019-08-27 09:54:13 +02:00
Bruno Windels 5c28b57681 always recalculate position after doing transform step
as the amount of characters might not have changed,
parts may still have been merged, removed or added which
requires a new position.
2019-08-27 09:49:22 +02:00
Bruno Windels 4fd4ad41c1 improve editor model documentation 2019-08-26 16:16:27 +02:00
Bruno Windels f8f0e77bde add transform step during editor model update 2019-08-26 16:16:27 +02:00
Bruno Windels 10291bafe0 add support for selecting ranges in the editor model, and replacing them
this to support finding emoticons and replacing them with an emoji
2019-08-26 16:16:27 +02:00
Bruno Windels e2dfe888cc only capture Enter when autocompletion list has selection
this is the old behaviour and makes sense IMO
also close the auto complete when resetting the composer model,
in case it was still open
2019-08-22 13:33:20 +01:00
Bruno Windels c5cd8b943a support auto complete for /commands 2019-08-22 13:33:20 +01:00
Bruno Windels 10c218825b allow inserting multiple parts at a position 2019-08-22 13:33:20 +01:00
Bruno Windels c135cd60d2 restore insert mention
for this, we need to store the last caret in the editor,
to know where to insert the user pill.

Because clicking on a member blurs the editor, and the
selection is moved away from the editor.

For this reason, we keep as cache of the last caretOffset object,
invalidated by a selection with different values.

The selection needs to be cloned because apparently the browser
mutates the object instead of returning a new one.
2019-08-22 13:33:20 +01:00
Bruno Windels f9992a1fc6 implement editor placeholder 2019-08-22 13:33:20 +01:00
Bruno Windels d22745a5b2 make it obvious arguments are optional
because now they have a setter
2019-08-22 13:33:20 +01:00
Bruno Windels 063eabed71 don't return invalid indices from model, fix for #10358 2019-08-22 13:33:20 +01:00
Bruno Windels 299cf8542c Split MessageEditor in edit-specifics & reusable part for main composer 2019-08-05 15:31:18 +02:00
Bruno Windels 234404e598 add mod+z/y shortcuts, set editor state to what history manager returns 2019-08-01 11:27:09 +02:00
Bruno Windels 98bc0d24f4 push changes to history manager 2019-08-01 11:26:20 +02:00
Bruno Windels ee9dd8ce81 adjust jsdoc 2019-07-12 10:06:38 +02:00
Bruno Windels dedf978948 prevent inserting parts at index -1 for empty documents 2019-07-11 18:46:56 +02:00
Bruno Windels 06fb892df9 prevent autocomplete when doing bulk insertion (paste, drop text) 2019-07-11 18:46:56 +02:00
Bruno Windels f0271b593d remove special casing for moving caret after newline and pills
not needed anymore with new caret logic and having caret nodes
2019-06-19 17:42:18 +02:00
Bruno Windels 607fc328ed also process first part when processing empty and mergeable parts
this was preventing clearing an emtpy plain part when inserting
a pill-candidate at the beginning of the model, which
prevented a caret node from being inserted before the pill.
2019-06-19 17:42:18 +02:00
Bruno Windels 3cfdd518ee detect emote when sending (and trim "/me " for content) 2019-06-14 11:02:20 +02:00
Bruno Windels 41e41269dc use EditorStateTransfer to pass on state to newly mounted editor 2019-06-12 18:52:34 +02:00
Bruno Windels e674f39e3b support (de)serializing parts with other dependencies than text 2019-06-12 18:32:32 +02:00
Bruno Windels 23465c696f dont jump to next part when inserting at *start* of uneditable part 2019-05-24 10:08:47 +02:00
Bruno Windels 6b1134bdf0 add matrix foundation copyright header 2019-05-22 16:16:32 +02:00
Bruno Windels 690ee63bb4 prevent zero-length removals from deleting uneditable parts
This solves an issue where, when backspacing the proceeding character next to a pill,
chrome reports the caret as being in the pill node, not at
the start of the proceeding text node. This would cause the pill
to be removed together with proceeding character.

This is a bug in any case, removing 0 characters
shouldn't remove the part
2019-05-16 19:14:24 +01:00
Bruno Windels 245f48a22c set caret on mount as we usually do, so FF doesn't enter 2 newlines 🤯 2019-05-16 18:39:20 +01:00
Bruno Windels f27607a74c don't put cursor position in NewlinePart after adding it
You can't append to it anyway, so mark it uneditable and skip
uneditable parts if that's where an edit ended up.

This has the added advantage that if there is text after a newly
insert pill, the cursor will be put just before it rather than
in the pill, after the last character.
2019-05-16 17:58:22 +01:00
Bruno Windels d83e278f6b PR feedback, cleanup 2019-05-15 09:46:08 +01:00
Bruno Windels fd31e793d1 fix lint 2019-05-14 15:49:53 +01:00
Bruno Windels a3b02cf0cc make logging quiet 2019-05-14 15:38:16 +01:00
Bruno Windels 7ebb6ce621 WIP commit, newlines sort of working 2019-05-14 15:38:16 +01:00
Bruno Windels 7a85dd4e61 after completion, set caret in next part at start
instead of end of current part
2019-05-14 15:38:16 +01:00
Bruno Windels 2c3453d307 put caret after replaced part if no caretOffset is given by autocomplete 2019-05-14 15:38:16 +01:00