Commit graph

394 commits

Author SHA1 Message Date
J. Ryan Stinnett
ce226ab534 Replace Riot with Element in docs and comments
This only covers the simple cases of references to issues and repos. More
complex areas, such as deployment scripts, will be handled separately.

Part of https://github.com/vector-im/element-web/issues/14864
2020-08-03 18:33:36 +01:00
Michael Telatynski
c578026474 Merge branches 'develop' and 't3chguy/fix/13641' of github.com:matrix-org/matrix-react-sdk into t3chguy/fix/13641
 Conflicts:
	src/editor/parts.ts
2020-07-24 08:18:20 +01:00
Michael Telatynski
c8832f5582 Fix autocompletion of Community IDs
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-23 14:47:42 +01:00
Michael Telatynski
adba9415b3 Fix Firefox composer regression exception
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-23 09:25:01 +01:00
Hubert Chathi
cbe4f04cd7
Merge pull request #5029 from uhoreg/sanitize_language
don't syntax highlight languages that begin with "_"
2020-07-21 13:12:51 -04:00
Michael Telatynski
93884cb89b Update PlainBasePart to only split on space boundaries
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-21 17:50:24 +01:00
Hubert Chathi
2ce493307e don't syntax highlight languages that begin with "_" 2020-07-21 12:47:40 -04:00
Jorik Schellekens
d86eb5eb9e Lint new new code 2020-07-20 20:48:27 +01:00
Jorik Schellekens
c0ce6e8161 Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into joriks/eslint-config 2020-07-20 20:44:52 +01:00
Michael Telatynski
7a05476c50 add missing types
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-20 17:10:08 +01:00
Michael Telatynski
06cc76f7d8 mark some things as public
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-20 16:34:52 +01:00
Michael Telatynski
ed0d9973b7 Switch to a discriminated unions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-20 16:33:53 +01:00
Michael Telatynski
2bf5e4b142 clean up
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-15 09:49:02 +01:00
Michael Telatynski
8812f98b35 Convert editor to TypeScript
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-15 09:45:45 +01:00
Jorik Schellekens
7699aafcaf Use new eslint package- fix lint issues in ts and js 2020-06-23 17:01:19 +01:00
Travis Ralston
803b7bb30f
Merge pull request #4694 from justin-sleep/remove-escape-backslashes
Remove escape backslashes in non-Markdown messages
2020-06-17 11:06:04 -06:00
Michael Telatynski
ef80a0b0b4
avoid negatives 2020-06-16 14:06:42 +01:00
Michael Telatynski
fcd3ebe051 Fix case-sensitivity of /me to match rest of slash commands
also better error handling for attempted runs of unimplemented commands
2020-06-16 00:41:21 +01:00
Justin Sleep
bdc451d66b Remove escape backslashes in non-Markdown messages 2020-06-03 17:08:13 -05:00
Bruno Windels
0c5c2501e6 remove prefixes as we're using data urls now 2020-05-06 12:23:03 +02:00
Sergey Shpikin
a97a3cea51 Make avatars in pills occupy the entire space using cropping
Signed-off-by: Sergey Shpikin <rkfg@rkfg.me>
2020-04-23 10:55:49 +03:00
Michael Telatynski
9c1939b756 match all, not just first instance of tokens to escape
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-04-15 02:31:30 +01:00
Michael Telatynski
4454db30d6 Escape opening square bracket too
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-04-15 01:02:08 +01:00
Michael Telatynski
cb10640eaf detslint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-04-15 00:53:35 +01:00
Michael Telatynski
c72139fc3f Convert serialize and deserialize to TypeScript
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-04-15 00:49:08 +01:00
Michael Telatynski
95eaf94cd8 Fix pills being broken by unescaped characters
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-04-15 00:40:38 +01:00
J. Ryan Stinnett
7ad8eeb906 Fix composer touch bar flickering on keypress in Chrome
This changes our selection state handling to leave things alone if the browser's
state already matches what we want. This avoids strange side effects like the
touch bar flickering on each key press in Chrome.

Fixes https://github.com/vector-im/riot-web/issues/9299
2020-03-04 14:35:11 +00:00
Bruno Windels
dc85346e5c
Merge pull request #4102 from matrix-org/bwindels/aliasautocomplete
Use alt_aliases for pills and autocomplete
2020-02-24 12:18:07 +00:00
Bruno Windels
13b08b5fcc
Revert "Fix escaped markdown passing backslashes through" 2020-02-24 11:27:22 +00:00
Michael Telatynski
e799691573 Apply null-guard to room pills for when we can't fetch the room
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-02-21 14:14:24 +00:00
Bruno Windels
16815a752b use alt_aliases instead of aliases to match a pill to a room
when deserializing a pill
2020-02-21 13:02:41 +01:00
Bruno Windels
8870da6c24 Add alt_aliases to room completion candidates
but don't match on name otherwise you see multiple entries per room
when searching for a room name

Also pass the roomId to the composer autocomplete, so
it's easier to we don't need to loop through all the rooms and
it's also easier accept room with local aliases as well in the future
2020-02-21 13:02:41 +01:00
Bob
9cf53aa9d8 Only return formatted text when necessary (for escaped chars)
Signed-off-by: Bob Rao <bob+git@vulpin.com>
2020-02-02 16:34:19 +11:00
BobVul
fde30577e4 Fix escaped markdown passing backslashes through
Fixes https://github.com/vector-im/riot-web/issues/11230

Signed-off-by: Bob Rao <bob+git@vulpin.com>
2020-01-31 12:33:57 +11:00
Michael Telatynski
7e45979e00 change order of if or conditions as micro-optimization
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-01-30 20:59:30 +00:00
Michael Telatynski
b84fd245b1 Fix room completion for invited rooms and upgraded rooms
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-01-30 18:03:45 +00:00
Michael Telatynski
d7a4698db8
Merge pull request #3891 from matrix-org/t3chguy/fix_multi_paragraph_formatting
Fix paragraph-awareness of the composer formatting features
2020-01-23 13:31:12 +00:00
Michael Telatynski
13bb719a89 Add comment for operations loop 2020-01-23 11:22:22 +00:00
Michael Telatynski
832da062cc Improve trailing spurious breaks + tests 2020-01-22 13:37:27 +00:00
Michael Telatynski
b5e902e1f2 Fix escaping commands using double-slash //, e.g //plain sends /plain 2020-01-21 15:55:21 +00:00
Michael Telatynski
b2aba6db35 Initial attempt to make toggleInlineFormat paragraph-aware 2020-01-21 15:32:32 +00:00
Travis Ralston
1b4ab856c9 Assume the position is at the end when the offset has no last part
We get an NPE when the user cuts their entire message, and this fixes it.
2020-01-15 21:05:00 -07:00
Travis Ralston
d56f0f2a25 Convert many imports to handle ES6 exports
Reliant upon https://github.com/matrix-org/matrix-react-sdk/pull/3761
2019-12-22 21:04:42 -07:00
Michael Telatynski
93ecc9839b Fix linty failures 2019-10-22 13:49:02 +01:00
Tulir Asokan
75bcc3f849
Update src/editor/deserialize.js
Co-Authored-By: Bruno Windels <bruno@windels.cloud>
2019-10-18 19:58:55 +03:00
Tulir Asokan
a95f7be22d Persist list indexes when editing
Signed-off-by: Tulir Asokan <tulir@maunium.net>
2019-10-13 14:31:32 +03:00
Tulir Asokan
29367766fd Fix "decend" typo
Signed-off-by: Tulir Asokan <tulir@maunium.net>
2019-10-13 14:31:32 +03:00
Tulir Asokan
a160bdf4df Persist code block language when editing
Signed-off-by: Tulir Asokan <tulir@maunium.net>
2019-10-13 14:31:32 +03:00
Bruno Windels
905aa81bf8 safeguard if the offsetnode is null when determining caret position 2019-10-10 16:39:41 +02:00
Travis Ralston
fc66e69c02 Rename RoomPermalinkCreator -> Permalinks due to scope
The file handles more than just a RoomPermalinkCreator, so we should name it accordingly.
2019-09-30 20:39:58 -06:00
Travis Ralston
ce0a534db1 Fix pills for CIDER too 2019-09-30 20:37:24 -06:00
Bruno Windels
4933b9b050
Merge pull request #3468 from matrix-org/bwindels/cider-autocomplete-fixes
Fix: when using autocomplete, ensure command is not sent as text, and @room notifs gets needed suffix
2019-09-23 13:57:07 +00:00
Bruno Windels
04720db2a3 don't append extra newline after blockquote anymore
now that P prepends newline when not first element
2019-09-23 15:33:30 +02:00
Bruno Windels
2445421270 add extra newline before P tags (when not first node) 2019-09-23 15:06:22 +02:00
Bruno Windels
0a663398ed Use underscore for <em> when doing html > md
to be consistent with the format bar, which also uses underscores for italics
2019-09-23 14:59:53 +02:00
Bruno Windels
40f7fa8f94 add suffixes from provider to room and @room completions
this prevents the @room not working when not typing an extra space
2019-09-23 14:40:41 +02:00
Bruno Windels
228905bec2 insert command completion as command part (instead of plain)
this prevents the command being sent as plain text

this adds a `type` property to completions to decide which
parts should be inserted into the composer, hence deciding how
they will be rendered.
2019-09-23 14:39:19 +02:00
Bruno Windels
26bd694c6a support toggling inline formatting 2019-09-06 16:25:55 +02:00
Bruno Windels
5014b606db
Merge pull request #3391 from matrix-org/bwindels/cider-format-history
New composer: ensure undo history is persisted before applying formatting
2019-09-06 09:28:18 +00:00
Bruno Windels
df4762871a
Merge pull request #3392 from matrix-org/bwindels/cider-paste-plain
New composer: fix pasting from word processors
2019-09-06 09:22:37 +00: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
9dac91a70d ensure step before formatting is persisted in undo history 2019-09-06 11:20:24 +02:00
Bruno Windels
0252c7ae37 force pasting as plain text in new composer 2019-09-06 11:10:41 +02:00
Bruno Windels
2596281a7c update last caret from update callback instead of input event
many editor updates are not caused by an input event, so
the last caret wasn't always up to date.

Updating the caret from the update callback ensures that every
time the editor contents is changed, the last caret is updated.
2019-09-06 11:09:01 +02:00
Bruno Windels
02681d50b9
Merge pull request #3386 from matrix-org/bwindels/cider-formatbar
New composer: show format bar on selection
2019-09-06 08:38:01 +00:00
Bruno Windels
d2949babcd copyright is solely assigned to matrix foundation now, copy paste error 2019-09-06 10:29:12 +02: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
42c37d8293 fixup: improve quote and code block newline handling 2019-09-04 16:40:34 +02:00
Bruno Windels
e0668e8517 improve algorithm to reduce selection to text node + charactar offset
this follows the documentation of {focus|anchor}{Offset|Node} better
and was causing problems for creating ranges from the document selection
when doing ctrl+A in firefox as the anchorNode/Offset was expressed
as childNodes from the editor root.
2019-09-04 16:40:34 +02:00
Bruno Windels
4691108a16 only increase offset if caret hasn't been found yet
also rename caret away as this isn't used for the caret solely anymore
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
6e694c113a add support for inline/block code formatting 2019-09-04 16:40:34 +02:00
Bruno Windels
b35a3531bb move quote formatting out of react component 2019-09-04 16:40:34 +02:00
Bruno Windels
b72d1a78ec move inline formatting code out of react component 2019-09-04 16:40:34 +02:00
Bruno Windels
47d8d86bbe whitespace (in model) 2019-09-04 16:40:23 +02:00
Bruno Windels
c15dfc3c05 make Range start and end public 2019-09-04 16:38:42 +02:00
Bruno Windels
77b14beb1f add getter for intersecting parts of range, and total length
we'll need this when replacing selection, to preserve
newlines, etc ... in the selected range (e.g. we can't just
use range.text).
2019-09-04 16:35:03 +02:00
Bruno Windels
48f1bf1816 sort positions in Range constructor, so start always comes before end 2019-09-04 16:35:03 +02:00
Bruno Windels
4575aaa9f6
Merge pull request #3382 from matrix-org/bwindels/escape-command-slash
New composer: allow escaping the first slash to not write a command
2019-09-03 16:04:23 +00: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
eb87301855 allow getting the DocumentOffset for any node+offset, not just focusNode
we need this to get both offsets of the selection boundaries

getSelectionOffsetAndText offers the extra flexibility,
getCaretOffsetAndText keeps the old api for focusNode/focusOffset

Also did some renaming here now that it's not just for the caret anymore
2019-09-03 15:58:50 +02:00
Bruno Windels
648ae37ff4 make DocumentOffset compatible with what is returned from dom/getCaret
so we can return a DocumentOffset from there without breakage
2019-09-03 15:58:05 +02:00
Bruno Windels
712c3e5450 allow escaping the first slash to not write a command 2019-09-02 17:53:14 +02:00
Bruno Windels
6a0842d1ab
Merge pull request #3379 from matrix-org/bwindels/cider-deserialize-headers
Message editing: deserialize headers from html back to markdown
2019-09-02 14:58:54 +00:00
Bruno Windels
c4d7df768d
Merge pull request #3375 from matrix-org/bwindels/cider-colononmention
New composer: share user pill postfix between autocomplete and insert mention
2019-09-02 14:58:23 +00:00
Bruno Windels
5b54cf566d deserialize headers from html back to markdown 2019-09-02 16:23:56 +02:00
Bruno Windels
2683627a82 disable spell check for pills in the new composer 2019-09-02 14:26:15 +02:00
Bruno Windels
c595371845 share user pill postfix between autocomplete and insert mention
where we decide to add a colon only if the composer is empty
2019-09-02 14:06:30 +02:00
Bruno Windels
4329d8c4ef
Merge pull request #3372 from matrix-org/bwindels/fix-command-tab-complete
New composer: fix tab-complete in commands
2019-09-02 11:38:13 +00:00
Bruno Windels
00d81eece9 don't accept @/#/: as part of command, allow to create pill candidate
so if you type these 3 characters, you get the correct autocomplete
2019-09-02 11:26:20 +02:00
Bruno Windels
a4376a76f0 only pass keyboard to autocomplete when it has selections
otherwise if tab is pressed, try to tab complete the last word
2019-09-02 11:25:29 +02:00
Bruno Windels
63be16beff
Merge pull request #3366 from matrix-org/bwindels/cider-user-pill-text-fallback
New composer: put display name in user pill text fallback instead of mxid
2019-08-30 16:03:28 +00: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
b16f983a1f put display name in user pill text fallback instead of mxid 2019-08-30 11:51:29 +02: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
e531b29307 don't ignore BR elements when converting to editor dom to text 2019-08-29 13:00:31 +02:00
Bruno Windels
85efb71a23 add visual bell when no replacements are available
also add try/catch in _tabCompleteName so errors don't get swallowed
2019-08-28 15:53:16 +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
8e66d382de don't crash on race with room members and initial composer render
not ideal, but for now this prevents a crash at startup
when a user-pill is persisted in local storage
2019-08-27 16:43:05 +02:00
Bruno Windels
e0ec827a64 extra docs 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
0f6465a1db don't close autocomplete when hitting tab
that's not what the slate impl does and it's not an improvement
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
0e65f71a37 support incrementing/decrementing doc positions with predicate 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
5cebce9bbf fix bug detected by tests 2019-08-22 14:41:40 +01: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
88cc1c428d add support for emotes and running /commands
this does not yet include autocomplete for commands
2019-08-22 13:33:20 +01:00
Bruno Windels
9bc8ff7e1e clear composer undo history when sending a message 2019-08-22 13:33:20 +01:00
Bruno Windels
0adca10f9f make named options argument optional 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
ce44c651d0 keep deserialized parts compatible with part api,
to avoid breakage when passing real parts
2019-08-22 13:33:20 +01:00
Bruno Windels
d4fbe7ed69 make editor event parsing suitable for parsing messages to be quoted 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
c53708b245 set lastNode directly when not decending 2019-08-02 16:36:09 +02:00
Bruno Windels
af3eebd0a6 add undo steps after word boundary (or capped) when typing or removing 2019-08-02 11:31:01 +02:00
Bruno Windels
07b2e51dce put max step length in constant 2019-08-01 16:27:17 +02:00
Bruno Windels
abde8b45d2 fix bug that prevented a line from being removed when undoing a newline 2019-08-01 11:28:40 +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
aa22c90f2c HistoryManager + unit tests 2019-08-01 11:25:04 +02:00
Bruno Windels
a999acbd04 fix argument order 2019-07-30 17:17:25 +02:00
Bruno Windels
44e4661198 document return type 2019-07-30 12:34:30 +02:00
Bruno Windels
0b92077bba tests for turning caret position from model into dom position 2019-07-25 18:38:00 +02:00
Bruno Windels
f8e1977f0a remove dead code 2019-07-25 14:50:20 +02:00
Bruno Windels
9bfba9db3e make PartCreator a bit more testable by not asking for deps of dep 2019-07-25 14:50:20 +02:00
Bruno Windels
419c800167 add tests for diffAtCaret 2019-07-25 14:50:20 +02:00
Bruno Windels
595dc82543 unit test + fixes + comments + simplication for diffDeletion 2019-07-25 14:50:20 +02:00
Bruno Windels
3753e5261d Implement diffing html messages in the edit history 2019-07-24 11:28:56 +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
f6e71b2335 turn flag into options object 2019-07-08 16:55:56 +02:00
Bruno Windels
888e4d1ec2 preserve reply fallback when editing 2019-07-08 15:25:44 +02:00
Bruno Windels
1c7af38d83
Merge pull request #3126 from matrix-org/bwindels/caret-refactoring
Editor caret improvements
2019-06-21 15:02:41 +00:00
Bruno Windels
c443dd7a32 clarify why use a BOM marker for the caret nodes 2019-06-21 16:37:29 +02:00
Bruno Windels
503d702f47 take list nesting into account for indenting 2019-06-21 11:40:27 +02:00
Bruno Windels
da766b8cba caretNode is a better className 2019-06-21 11:21:38 +02:00
Bruno Windels
c5c987f62e use BOM marker instead of ZWS
that's what others do ...
2019-06-21 11:21:13 +02:00
Bruno Windels
366a4aa308 put zero-width spaces in caret nodes so chrome doesn't ignore them
this requires an update of the editor DOM > text & caret offset logic,
as the ZWS need to be ignored.
2019-06-20 14:44:18 +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
a229641985 use caret nodes in caret positioning code, to move caret out of pills 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
75fc769742 insert "caret nodes" where pills don't have an adjacent text node
just empty spans, where the caret can be placed.
2019-06-19 17:42:18 +02:00
Bruno Windels
1db505c667 comment typo 2019-06-18 09:50:31 +02:00
Bruno Windels
3119feaa17 whitespace 2019-06-18 09:48:25 +02:00
Bruno Windels
47579f37e8 clarify why its always safe to not append @room at end while parsing 2019-06-18 08:40:58 +02:00
Bruno Windels
d9e62b54fc also support deserializing at-room-pill when transferring editor state 2019-06-14 18:42:30 +02:00
Bruno Windels
78971f168f create AtRoomPill when autocomplete returns @room 2019-06-14 18:28:44 +02:00
Bruno Windels
65d56d1490 transform @room to AtRoomPill while deserializing html to md 2019-06-14 18:28:44 +02:00
Bruno Windels
63b11f5001 (de)serialize at-room-pills just like pill-candidate (no html needed) 2019-06-14 18:28:44 +02:00
Bruno Windels
dfec5058c5 support creating @room pills in partcreator 2019-06-14 18:28:44 +02:00
Bruno Windels
eb4ff50c3c do parts creation only in PartCreator to not scatter dependencies 2019-06-14 18:28:44 +02:00
Bruno Windels
3cfdd518ee detect emote when sending (and trim "/me " for content) 2019-06-14 11:02:20 +02:00
Bruno Windels
aecfbce55c prepend "/me " to emotes when parsing them to edit 2019-06-14 11:01:52 +02:00
Bruno Windels
48f5cf1523
Merge pull request #2966 from npny/npny/autocomplete-arrow-keys
Allow arrow keys navigation in autocomplete list
2019-06-13 15:38:36 +00:00
Bruno Windels
d40f49e2c2 fix lint 2019-06-12 19:09:27 +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
Pierre Boyer
8158567640 Remove left/right autocomplete navigation for MessageEditor 2019-06-05 10:49:49 +02:00
Pierre Boyer
a4dec88c65 Add back on..Arrow functions. Add left/right key navigation in MessageEditor 2019-06-04 13:57:15 +02:00
Pierre Boyer
ed6427571e Update src/editor/autocomplete to correctly call countCompletions and moveSelection 2019-06-04 13:24:24 +02:00
Bruno Windels
2d8c523642
Merge pull request #3040 from matrix-org/bwindels/editor-remaining-md
Fix: better HTML > MD conversion for editing, including lists and quotes
2019-05-31 09:21:43 +00:00
Bruno Windels
78fbea307c less escaping for backticks 2019-05-31 11:06:15 +02:00
Bruno Windels
eb8dd52437
Merge pull request #3029 from matrix-org/bwindels/pill-n-newlines
Fix: maintain caret at current line when position is on newline part
2019-05-31 08:44:02 +00:00
Bruno Windels
686045b46a rewrite HTML>MD conversion,handle (nested) block elements&quotes better
Re-use walkDOMDepthFirst we already had for turning the editor into
a string, which also allows us to detect when leaving a node better,
which is needed to decide how block elements create newline parts
is more centralized and robust manner, more in line with
how html works (consecutive block elements break the line)
instead of hacky special casing from before.

Also, to support every line of MD generated
within a BLOCKQUOTE, the parts an element creates are returned
and then centrally prepended with "> ", instead of passing in
the parts array and doing it in every parse... function.
2019-05-29 14:46:15 +02:00
Bruno Windels
b0d87e7e47 allow enterNodeCallback to decide whether to decend into a node 2019-05-29 14:27:36 +02:00
Bruno Windels
6b680ff681 fallback to setting caret on line node for empty lines
instead of setting at the end of the editor
2019-05-28 10:34:29 +02:00
Bruno Windels
4fc23022f4 remove all non-first-br nodes on new empty line, not just first one
nextSibling returned null after calling removeNode,
so get the nextSibling first
2019-05-28 10:01:16 +02:00
Bruno Windels
080a6301b1
Merge pull request #3032 from matrix-org/bwindels/filterreply
Message editing: fix reply text appearing in edit
2019-05-27 15:12:18 +00:00
Bruno Windels
f5da8162c1 filter out reply text when editing 2019-05-27 17:04:26 +02:00
Aaron Raimist
fec5abadd6
Message editing: preserve strikethrough as well
Signed-off-by: Aaron Raimist <aaron@raim.ist>
2019-05-24 13:57:09 -05:00
Bruno Windels
b2592583c4 maintain caret at current line when position is on newline part 2019-05-24 18:54:29 +02:00
Bruno Windels
8c0b8ff618 take part length into account as well 2019-05-24 15:43:55 +02:00
Bruno Windels
9d6a818591
Merge pull request #3024 from matrix-org/bwindels/autocomplete-tab
Message editing: tab completion
2019-05-24 13:29:10 +00:00
Bruno Windels
cf5e4d3d94 make consecutive :/@/# separate pill candidates
e.g. accept the first character always to start the autocompletion
but after that refer to the plainpart logic to split up in
new pill candidates. Also, don't allow merging adjacent parts.

This makes sure that "@nonmatchingfoo @someuser"
only matches "someuser" in the autocomplete.
2019-05-24 12:38:19 +02:00
Bruno Windels
a024fd8991 port tab completion from MessageComposerInput 2019-05-24 12:38:01 +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
723086e4d7 Decend into P & DIV elements while parsing a message.
Also split on newline so all newlines are represented by a newlinepart
2019-05-22 16:19:07 +02:00
Bruno Windels
5f5a2f7140 put code block on new line 2019-05-22 16:19:07 +02:00
Bruno Windels
53b6586986 re-apply markdown when saving a message 2019-05-22 16:19:07 +02:00
Bruno Windels
5373007301 initial attempt at converting html back to markdown 2019-05-22 16:18:35 +02:00
Bruno Windels
ff61376c07
Merge pull request #3004 from matrix-org/bwindels/update-link-previews-after-edit
Message editing: update link previews after editing
2019-05-22 14:17:34 +00:00
Bruno Windels
6b1134bdf0 add matrix foundation copyright header 2019-05-22 16:16:32 +02:00
Bruno Windels
fb03b5b168 fix lint 2019-05-21 13:49:43 +02:00