Michael Telatynski
8812f98b35
Convert editor to TypeScript
...
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-15 09:45:45 +01:00
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