Commit graph

901 commits

Author SHA1 Message Date
Bruno Windels
6580219b09 add userIdentities to sync txn 2020-08-31 16:09:24 +02:00
Bruno Windels
4077f57afb fix typos in stores 2020-08-31 16:09:13 +02:00
Bruno Windels
aeb2f5402a process own membership changes before device lists 2020-08-31 16:08:47 +02:00
Bruno Windels
703c89e276 make membership available on member 2020-08-31 16:07:29 +02:00
Bruno Windels
374dce638d these are assumed to be getters 2020-08-31 16:07:18 +02:00
Bruno Windels
4fd3e2ab20 response is a method 2020-08-31 16:07:04 +02:00
Bruno Windels
d43cdfd889 don't crash when tracked user is not there 2020-08-31 16:06:40 +02:00
Bruno Windels
fef6586e5b actually pass the room id 2020-08-31 16:06:31 +02:00
Bruno Windels
78c3157a5f fix not taking into account Object.entries yields arrays for the pairs 2020-08-31 16:05:57 +02:00
Bruno Windels
561df45641 olm.Utility should be instanciated 2020-08-31 16:05:21 +02:00
Bruno Windels
0399562340 fix typo 2020-08-31 16:05:04 +02:00
Bruno Windels
8b7fdb2c61 create user & device identity stores 2020-08-31 14:38:03 +02:00
Bruno Windels
4ef5d4b3b8 implement hsapi /keys/query method 2020-08-31 14:24:09 +02:00
Bruno Windels
2e67b2b6b8 handle prev_content location ambiguity 2020-08-31 14:21:18 +02:00
Bruno Windels
09cb39b553 don't run afterSyncCompleted when there was an error 2020-08-31 14:13:36 +02:00
Bruno Windels
afb9ae4391 hook up device tracker with sync 2020-08-31 14:13:21 +02:00
Bruno Windels
8b358379e8 first draft of device tracker
mainly missing race protection with /sync and actually running the code
2020-08-31 14:12:12 +02:00
Bruno Windels
8482bc95ec pass memberchanges around instead of members
so we can easily tell how their membership changes, (e.g. join -> left)
which we'll need for device tracking.

Not adding this to RoomMember because RoomMember also needs to be
able to represent a member loaded from storage which doesn't contain
this error. A MemberChange exists only within a sync.
2020-08-31 09:50:57 +02:00
Bruno Windels
164384f312 forgot memberlist member 2020-08-31 08:54:27 +02:00
Bruno Windels
8da00f9a03 add isTrackingMembers flag to know if EncryptionUsers have been written
for this room
2020-08-31 08:53:47 +02:00
Bruno Windels
d813e6d932 store encryption event content rather than just flag in room summary 2020-08-31 08:53:10 +02:00
Bruno Windels
693682f360 move e2ee constants to common file 2020-08-28 14:35:47 +02:00
Bruno Windels
e751333bbd don't assume setting up a session went all the way through when stopping 2020-08-28 13:58:42 +02:00
Bruno Windels
a1ba5d7dba between syncs, generate more otks if needed, and upload them 2020-08-28 13:58:17 +02:00
Bruno Windels
681dfdf62b sync otk count to e2ee account 2020-08-28 13:56:44 +02:00
Bruno Windels
d64db185bd await callback in case we need to read, then write from it 2020-08-28 13:54:42 +02:00
Bruno Windels
3ab5a72221 give e2ee account values a prefix so we can prevent from clearing them 2020-08-28 13:52:27 +02:00
Bruno Windels
d24be7ee55 extract constants out 2020-08-28 13:51:58 +02:00
Bruno Windels
d7d1d8c45a Merge branch 'master' into bwindels/e2ee 2020-08-28 12:11:33 +02:00
Bruno Windels
6a9cbf7f33 store and sort by m.lowpriority tag 2020-08-27 20:52:51 +02:00
Bruno Windels
4c290f0394 upload identity and one-time keys 2020-08-27 19:13:24 +02:00
Bruno Windels
f98b3dd5fa create/load olm account before first sync 2020-08-27 19:13:09 +02:00
Bruno Windels
3b24ea34f3 Merge branch 'master' into bwindels/e2ee 2020-08-27 14:40:57 +02:00
Bruno Windels
09a018ade1 store sync token and filter id under the same key in session
as they are updated together
2020-08-27 14:36:50 +02:00
Bruno Windels
14b27f81fe store session values as individual values in store
so we don't have to write the whole object every time something changes
we'll use this to store the olm account
2020-08-27 14:28:40 +02:00
Bruno Windels
25f3dfbb75 fix failing test 2020-08-27 14:22:59 +02:00
Bruno Windels
87aabb3057 make crypto.getRandomValues available on IE11 without a prefix
olm needs this to work on IE11
2020-08-27 13:32:13 +02:00
Bruno Windels
fe0257bca1 load olm and pass it to session 2020-08-27 13:24:55 +02:00
Bruno Windels
05821b0fdf use same check for timestamp validity as timestamp can be undefined sometimes 2020-08-27 12:42:38 +02:00
Bruno Windels
1a6931129b log as info 2020-08-27 10:50:30 +02:00
Bruno Windels
9e891c3442 log actual timestamps as well
so we can see if they are anything but null or a number
2020-08-27 10:48:12 +02:00
Bruno Windels
4b682ad930 use the same check when seeing if either does not have a timestamp 2020-08-27 10:45:20 +02:00
Bruno Windels
41a7448c74 add logging for room list sorting 2020-08-27 10:40:49 +02:00
Bruno Windels
3e8e1bab67 remove logging 2020-08-27 10:38:22 +02:00
Bruno Windels
59443e6602 close the room tile view model as well when closing a room so it does not stay selected 2020-08-27 10:07:47 +02:00
Bruno Windels
1fe496eeea fix crash when state is not set (erroneously?) on gap response
this seems to happen when the only event in the room is
a m.room.create
2020-08-27 09:52:30 +02:00
Bruno Windels
34ec96c1b8 look for displayname/avatar in prev content as well
as synapse doesn't set them on content for leave memberships

this caused these props to be removed in storage
2020-08-27 09:51:44 +02:00
Bruno Windels
bd9cb5aae5 add RoomMember.name which falls back to userId
this will prevent the crash when left members
have their displayname removed (another issue)
2020-08-27 09:51:00 +02:00
Bruno Windels
b814335b99 this was missing! and causing an error with empty lists 2020-08-21 19:21:53 +02:00
Bruno Windels
5d21ae3fb7 fix error on conduit with state field that is missing when empty 2020-08-21 19:10:28 +02:00
Bruno Windels
a64d49a8a2 prevent an empty array being passed to Heroes 2020-08-21 19:03:21 +02:00
Bruno Windels
3d5b69f60a remove obsolete comment 2020-08-21 18:14:57 +02:00
Bruno Windels
b39c15d88d Room.name can actually return null now
so protect against this, and fall back to "Empty Room"
2020-08-21 18:14:32 +02:00
Bruno Windels
e4758d0651 we need to read from members now during load, for the heroes
and were actually not reading from room state
2020-08-21 18:14:07 +02:00
Bruno Windels
70e89a3dd6 expose name/avatar on member 2020-08-21 18:13:53 +02:00
Bruno Windels
2c14373b13 allow falling back to heroes name if we don't have one 2020-08-21 18:12:11 +02:00
Bruno Windels
acec7c8f33 remove alt_aliases, as we should not use it for the room name 2020-08-21 18:11:53 +02:00
Bruno Windels
d5d0154873 join and invited count were mixed up... oops 2020-08-21 18:11:26 +02:00
Bruno Windels
e5cdf061cb create, update and remove heroes as they come from sync 2020-08-21 18:11:07 +02:00
Bruno Windels
ddfdbf9777 implement heroes logic to calculate the room name 2020-08-21 17:59:24 +02:00
Bruno Windels
f551010968 render badge on room 2020-08-21 15:50:47 +02:00
Bruno Windels
831f4188f7 also expose highlight count 2020-08-21 15:50:32 +02:00
Bruno Windels
0d8ff34c55 don't fail to clear unread state when offline
also update UI before network request
2020-08-21 15:23:25 +02:00
Bruno Windels
2bfbb41ee7 send receipt to server when clearing unread state so notif count clears 2020-08-21 15:16:57 +02:00
Bruno Windels
9b16119e7b don't show time on continued messages 2020-08-21 14:37:57 +02:00
Bruno Windels
1a61752ace process state events separately from timeline events 2020-08-21 14:35:23 +02:00
Bruno Windels
5837aed346 remove obsolete comment 2020-08-21 14:27:16 +02:00
Bruno Windels
d3ea8c747a ignore own messages for unread state, and don't set unread while open 2020-08-21 14:26:51 +02:00
Bruno Windels
879c4ff951 default for all flags should be false 2020-08-21 14:11:53 +02:00
Bruno Windels
2742162c8e only clear unread if needed 2020-08-21 14:11:42 +02:00
Bruno Windels
00e20d2088 take null timestamps into account 2020-08-21 14:11:26 +02:00
Bruno Windels
4969009b2b default should be false, so comparison in the sorter is stable 2020-08-21 14:10:53 +02:00
Bruno Windels
5d1bc61f61 don't open a room when already open 2020-08-21 13:45:55 +02:00
Bruno Windels
4fb3010676 only set unread for incremental syncs 2020-08-21 13:45:38 +02:00
Bruno Windels
eae5bc4230 sort unread rooms first, then on last message timestamp, then alphabet. 2020-08-21 11:58:05 +02:00
Bruno Windels
dbf5e59d87 clear unread state 2s after opening the room 2020-08-21 11:57:49 +02:00
Bruno Windels
89392434ad render unread rooms as bold 2020-08-21 11:57:38 +02:00
Bruno Windels
7458465ef6 expose props on Room 2020-08-21 11:56:45 +02:00
Bruno Windels
739d74bf9c add method to clear unread state 2020-08-21 11:56:36 +02:00
Bruno Windels
4419b3366e store isUnread and lastMessageTimestamp 2020-08-21 11:55:47 +02:00
Bruno Windels
53720f56df some cleanup 2020-08-21 11:55:25 +02:00
Bruno Windels
f0d0dbb30f fix member event reporting 2020-08-20 17:43:51 +02:00
Bruno Windels
4fefe94302 render avatar in room header 2020-08-20 17:33:08 +02:00
Bruno Windels
00718c582a render avatar img in room list 2020-08-20 17:32:55 +02:00
Bruno Windels
cff39019cb extract renderAvatar
and use avatarTitle instead of sender for img title
2020-08-20 17:32:18 +02:00
Bruno Windels
7992607442 also store notif counts while at it 2020-08-20 17:07:02 +02:00
Bruno Windels
da947fa0d0 store room avatar url in summary 2020-08-20 17:02:51 +02:00
Bruno Windels
f5acee02be add comment why we do things in this order 2020-08-20 16:20:35 +02:00
Bruno Windels
59bdd2b015 render avatar on message tiles 2020-08-20 16:03:52 +02:00
Bruno Windels
225d46fad6 prepare styles to have other images (like avatar) in timeline 2020-08-20 16:03:26 +02:00
Bruno Windels
5d0ee21267 move mxcUrl functions to media repo class 2020-08-20 15:40:43 +02:00
Bruno Windels
843f4fa0f7 fix flood issue when back-filling isn't available 2020-08-20 15:28:22 +02:00
Bruno Windels
9e8d1ed290 better naming 2020-08-20 15:24:39 +02:00
Bruno Windels
036b305c96 use display name for room name change tiles 2020-08-20 15:24:16 +02:00
Bruno Windels
fafdf669db use prev_content from later events before state 2020-08-20 15:23:56 +02:00
Bruno Windels
830c300102 fix typo that broke the txn 2020-08-20 15:23:29 +02:00
Bruno Windels
514d1d9579 first draft of adding profile info while filling gap 2020-08-20 14:39:03 +02:00
Bruno Windels
229502ca43 remove logging 2020-08-20 10:48:59 +02:00
Bruno Windels
4b275529f7 fixup: writing member info during sync 2020-08-20 10:47:14 +02:00
Bruno Windels
d31a1b5fff render display name in timeline 2020-08-20 10:26:28 +02:00
Bruno Windels
41c00ce44a write display name and avatar on event during sync 2020-08-20 10:26:08 +02:00
Bruno Windels
ba3a4ab8b2 process state events in the timeline together with other timeline events
so member info gets overwritten after all the previous events
have already been written
2020-08-20 09:39:19 +02:00
Bruno Windels
fe7cc08287 add _selectWhile with proper "while" semantics
the existing _selectWhile method was more like _selectUntil,
which is what we want for _selectLimit but not for selectWhile(Reverse)

The changes we had made before also broke _selectLimit as it would
look at the results length before the value got added so you
always got 1 value more than requested, breaking sync.
2020-08-19 18:25:49 +02:00
Bruno Windels
79363ed1d7 use optional chaining 2020-08-19 18:25:38 +02:00
Bruno Windels
a90cebcabb document access levels 2020-08-19 16:58:28 +02:00
Bruno Windels
113c9e13b3 fix typo 2020-08-19 16:58:19 +02:00
Bruno Windels
faaabd1837 fix changed member scenario (no need to fetch from storage) and errors 2020-08-19 16:51:16 +02:00
Bruno Windels
4144b0b281 move memberlist load code out of Room 2020-08-19 16:44:09 +02:00
Bruno Windels
f7314990e4 add copyright header 2020-08-19 16:30:05 +02:00
Bruno Windels
463b9b745e base impl of member list 2020-08-19 16:29:54 +02:00
Bruno Windels
f84c9d51b4 store last pagination token 2020-08-19 16:29:08 +02:00
Bruno Windels
d08297d1e0 move RoomMembers to own dir 2020-08-19 16:28:09 +02:00
Bruno Windels
cc1f35a074 fix c/p error 2020-08-19 16:14:10 +02:00
Bruno Windels
6abdcd6b58 finish draft of member list loading method 2020-08-19 16:13:47 +02:00
Bruno Windels
9edd1bb0bb implement loading all members 2020-08-19 16:13:30 +02:00
Bruno Windels
bfc5eb3ee5 return changed members from sync writer
we will use it to handle race between /sync and /members
and to update the member list if it loaded
2020-08-19 16:12:49 +02:00
Bruno Windels
a5595570f9 members hs api call 2020-08-19 16:11:33 +02:00
Bruno Windels
2ad9b17ad7 no need to update members, as all the info is in the member event
as we won't store deviceTrackingStatus in the member
2020-08-19 16:10:07 +02:00
Bruno Windels
5ad7b74b2b keep string key since we have to support IE11 2020-08-19 16:08:42 +02:00
Bruno Windels
9ff4f3839c Merge branch 'master' into bwindels/memberlist 2020-08-19 12:13:38 +02:00
Bruno Windels
5898177f0b continuation can change, so bind to it 2020-08-19 12:07:10 +02:00
Bruno Windels
2526198251 replace usage of readPath with ?. 2020-08-19 11:36:43 +02:00
Bruno Windels
82762823e3 use normal sized avatar for room header 2020-08-19 11:02:47 +02:00
Bruno Windels
b2a01ba860 timeline spacing and font-size tweaking 2020-08-19 11:02:27 +02:00
Bruno Windels
fcf7052217 forgot to add header here before 2020-08-19 10:28:39 +02:00
Bruno Windels
614a00b741 don't continue messages from more than 5min ago 2020-08-19 10:28:09 +02:00
Bruno Windels
fad728069a don't show date & time on pending events 2020-08-19 10:27:27 +02:00
Bruno Windels
9d260c692b tweak font-sizes to what element web has 2020-08-19 10:26:52 +02:00
Bruno Windels
cc4c9d7893 Improve IDB error reporting
Hope this can help with
https://github.com/vector-im/hydrogen-web/issues/50
2020-08-18 17:27:40 +02:00
Bruno Windels
7291cac834 yield for browser to render before checking content height 2020-08-17 17:58:39 +02:00
Bruno Windels
4044ac56c5 actually check the promise 2020-08-17 17:58:30 +02:00
Bruno Windels
df8d884d91 append all list items at once for initial render 2020-08-17 17:58:04 +02:00
Bruno Windels
1c779cf95c render encrypted tiles as such so we don't fetch the whole history 2020-08-17 17:41:57 +02:00
Bruno Windels
0b1d9bf25e unused now 2020-08-17 17:41:49 +02:00
Bruno Windels
37597e2acb mark fragment in storage when start of timeline is reached
so we don't keep looping to fetch more messages
when scrolled all the way up
2020-08-17 17:41:10 +02:00
Bruno Windels
b6cbb03edd keep filling gaps while viewport not filled or new content < 100px 2020-08-17 16:34:58 +02:00
Bruno Windels
08de7c3569 loading screen while loading timeline
so we can set timelineVM directly to TimelineList
2020-08-17 16:34:25 +02:00
Bruno Windels
5ae4a1aae3 increase offset to start back-filling 2020-08-17 15:22:55 +02:00
Bruno Windels
2cfd38379f change looks of gap tile as it's auto-loaded now 2020-08-17 15:22:39 +02:00
Bruno Windels
56efd7eee0 don't load timeline past gaps 2020-08-17 15:22:25 +02:00
Bruno Windels
1e4f331989 fill top gap instead of loading more events from storage 2020-08-17 15:13:12 +02:00
Bruno Windels
cf0af775e3 make SimpleTile inherit from ViewModel
to use same update mechanism and have viewmodel infra available for tile
2020-08-17 15:11:39 +02:00
Bruno Windels
9745c58144 use readPath in ImageTile 2020-08-17 14:20:54 +02:00
Bruno Windels
0d3ab21044
Merge pull request #19 from vector-im/bwindels/small-bits
Various small bits
2020-08-17 12:15:28 +00:00
Bruno Windels
bbd5217fdf
Merge pull request #18 from vector-im/bwindels/ignore-empty-timelines
ignore rooms with empty timelines during initial sync
2020-08-17 12:14:46 +00:00
Bruno Windels
59588dc8b5 ignore rooms with empty timelines during initial sync 2020-08-17 14:13:23 +02:00
Bruno Windels
306309c4f8 wrap error and expose room id
this makes it easier to track down a (storage) error to a room
2020-08-17 10:48:00 +02:00
Bruno Windels
b5e7131050 only use 1 letter for avatar initial 2020-08-17 10:47:47 +02:00
Bruno Windels
404e6f8b87 make alphabetical sort order stable 2020-08-17 10:47:27 +02:00
Bruno Windels
70e6515b5c dont crash on m.image without url 2020-08-17 10:29:29 +02:00
Bruno Windels
bab1178790 style login page 2020-08-14 14:49:22 +02:00
Bruno Windels
c12ecd6cc1 style session picker 2020-08-14 14:49:15 +02:00
Bruno Windels
19e5d310e0 move avatar one level lower because we'll need it in the session picker 2020-08-14 14:33:13 +02:00
Bruno Windels
61801ee2cd add send button to composer 2020-08-13 18:10:45 +02:00
Bruno Windels
bf35cfc9fd make spinner look slightly better in IE 2020-08-13 17:59:49 +02:00
Bruno Windels
84d4584302 switch view gallery to element theme 2020-08-13 17:59:36 +02:00
Bruno Windels
d386343d5c adjust spacing, etc in timeline 2020-08-13 17:58:56 +02:00
Bruno Windels
44cc691c79 add avatar and sender user colors 2020-08-13 12:41:00 +02:00
Bruno Windels
d33e7b2a8b basic element theme colors 2020-08-13 12:40:30 +02:00
Bruno Windels
68574715dc style active room 2020-08-12 17:49:39 +02:00
Bruno Windels
5aacf85166 mark room tile as active when clicked 2020-08-12 17:40:41 +02:00
Bruno Windels
7f50e3d137 allow overriding the "emit change" mechanism in ViewModel
so view models that should send updates through their collection
can still use the same "emitChange" method on ViewModel
2020-08-12 17:39:11 +02:00
Bruno Windels
fbf72b8825 bind key for spontaneous updates in MappedMap
so we just have to pass in the params
2020-08-12 17:38:40 +02:00
Bruno Windels
cb10d40c3a Revert "use intrinsic aspect-ratio supported by chrome and firefox (although not safari)"
This reverts commit 0e5ad9805a.

It does not seem to work anymore in FF & chrome (the tile grows after the image is loaded)
and this won't work in IE11 anyways
2020-08-12 16:47:57 +02:00
Bruno Windels
d7657b519a add element theme (only some color changes + Inter font for now) 2020-08-12 16:41:03 +02:00
Bruno Windels
c6f38a4614 missing rename 2020-08-12 16:40:47 +02:00
Bruno Windels
e1a5c362dc add theme assets to offline definition 2020-08-12 16:40:28 +02:00
Bruno Windels
211abd9269 move emoji font collection to own font definition 2020-08-12 16:32:49 +02:00
Bruno Windels
695bcb2da3 move speech bubble alignment to theme 2020-08-12 16:31:58 +02:00
Bruno Windels
d7c1dc8a38 make fields disabled in loading state in gallery 2020-08-12 11:52:18 +02:00
Bruno Windels
be9e476874 extract theme from current styling 2020-08-12 11:52:03 +02:00
Bruno Windels
23d96b554a make theme directory
+ readme of ~what should go in a theme
2020-08-12 11:51:21 +02:00
Bruno Windels
5546460510 more brawl -> hydrogen renaming 2020-08-12 11:42:42 +02:00
Bruno Windels
eb92b9a086 Disable rubberband scrolling for IE11 2020-08-07 18:15:17 +01:00
Bruno Windels
e054dfb623 Merge branch 'master' into bwindels/legacy-css 2020-08-07 17:03:45 +01:00
Bruno Windels
fdc7f60f4d Build legacy bundle from same entry point as normal build
as the plan is to only use different CSS for IE11, but the same view code
2020-08-07 15:50:18 +01:00
Bruno Windels
a0c8d147c3 Use parentNode, parentElement is not supported on IE11 2020-08-07 15:07:44 +01:00
Bruno Windels
b1dd3933e2 WIP 2020-08-07 11:16:46 +01:00
Bruno Windels
a7acb0278d Element.remove polyfill 2020-08-07 11:14:07 +01:00
Bruno Windels
73c0a92377 Add .closest polyfill 2020-08-06 10:38:38 +01:00
Bruno Windels
1699600ffc fix test 2020-08-05 19:06:54 +02:00
Bruno Windels
3154b047a6 Merge branch 'bwindels/ie11' of github.com:vector-im/hydrogen-web into bwindels/ie11 2020-08-05 19:02:42 +02:00
Bruno Windels
d0ba894e2d apply new license headers in new code 2020-08-05 18:59:16 +02:00
Bruno Windels
45bd49861b Add build for IE 11 2020-08-05 18:56:06 +02:00
Bruno Windels
5ddc02ebc8 XHR request support for legacy browsers 2020-08-05 18:56:06 +02:00
Bruno Windels
e8e9740521 Move timeout to fetch, as XHR has native timeout support 2020-08-05 18:56:06 +02:00
Bruno Windels
5c50a48eb5 Add build for IE 11 2020-08-05 16:47:48 +00:00
Bruno Windels
00a85697ab add license header in all source files 2020-08-05 18:38:55 +02:00
Bruno Windels
69142909d9 XHR request support for legacy browsers 2020-08-05 15:37:37 +00:00
Bruno Windels
b26bc69042 Move timeout to fetch, as XHR has native timeout support 2020-08-05 15:36:44 +00:00
Bruno Windels
f5d3092031 WIP 2020-06-26 23:26:24 +02:00
Bruno Windels
e2c8b5e595 pass vm field to emitChange 2020-06-24 22:43:29 +02:00
Bruno Windels
9712b397ce add TODO comment 2020-05-26 10:31:23 +02:00
Bruno Windels
0e5ad9805a use intrinsic aspect-ratio supported by chrome and firefox (although not safari) 2020-05-13 10:20:28 +02:00
Bruno Windels
1ec2543467 fix image aspect ratio when scaling, again
also when image hasn't loaded yet to prevent scroll position jumps
2020-05-10 11:56:05 +02:00
Bruno Windels
174b0b7d52 disable pull to refresh on android 2020-05-10 10:00:13 +02:00
Bruno Windels
d79e34e450 fix image height scaling when full width doesn't fit on screen 2020-05-10 09:59:51 +02:00
Bruno Windels
df08ac216d prevent images from growing larger than container 2020-05-09 21:22:30 +02:00
Bruno Windels
d6882f075a don't let long status messages create overflow 2020-05-09 21:22:09 +02:00
Bruno Windels
2b17d0f691 spell height correctly 2020-05-09 21:21:55 +02:00
Bruno Windels
7f221cda65 show images intimeline 2020-05-09 20:02:08 +02:00
Bruno Windels
426dd726e7 default to true 2020-05-08 09:31:41 +02:00
Bruno Windels
5aee3df7fe fix SessionPickerItemView not updating 2020-05-08 09:12:33 +02:00
Bruno Windels
c55a197303 pass options to parent in LoginViewModel 2020-05-07 19:17:15 +02:00
Bruno Windels
f56b96b0ff add some ideas for relations 2020-05-07 19:14:53 +02:00
Bruno Windels
f9c0b4b53e add logging in case #45 would happen again 2020-05-07 19:14:30 +02:00
Bruno Windels
6b453c1ec4 we need to start when online actually, so invert 2020-05-07 18:46:45 +02:00
Bruno Windels
24cb9e3f5c only increment sent counter after successful send
otherwise the message doesn't get sent after coming back online
2020-05-07 18:46:16 +02:00
Bruno Windels
b65da9b8a9 display sync errors in status bar 2020-05-07 00:05:21 +02:00
Bruno Windels
52e2d3203e also make filter request interruptable 2020-05-07 00:04:41 +02:00
Bruno Windels
cc19063c79 set timeout on /sync request
as long running requests run higher risk of getting wedged
2020-05-06 23:50:12 +02:00
Bruno Windels
06fc3101e8 make login view enabled again if load view is not busy anymore 2020-05-06 23:44:52 +02:00
Bruno Windels
e17fc57d9c fix c/p error in disposables 2020-05-06 23:31:36 +02:00
Bruno Windels
abc99c2f0b fix svg error in spinner 2020-05-06 23:31:22 +02:00
Bruno Windels
2010704f14 fix only reconnecting the first time 2020-05-06 20:58:48 +02:00
Bruno Windels
f8f13f54be fix timeouts not working
and also not being handled in the Reconnector
2020-05-06 19:38:33 +02:00
Bruno Windels
54502c906f make disposeTracked suitable to reassign member 2020-05-05 23:19:02 +02:00
Bruno Windels
d0f09c5334 add status bar to view gallery for design 2020-05-05 23:18:44 +02:00
Bruno Windels
22821af346 css changes for status bar 2020-05-05 23:18:31 +02:00
Bruno Windels
0623c1c665 subViews is in TemplateView 2020-05-05 23:17:48 +02:00
Bruno Windels
c4b17e4be6 cleanup SessionViewModel, use ViewModel dispose infrastructure 2020-05-05 23:17:27 +02:00
Bruno Windels
3adc609e07 implement session status bar, with feedback on connection status 2020-05-05 23:16:51 +02:00
Bruno Windels
b0e59c30dd correctly pass options to ViewModel ctor 2020-05-05 23:14:58 +02:00
Bruno Windels
0eefc88fe3 waitForRetry doesn't reject when aborted 2020-05-05 23:13:41 +02:00
Bruno Windels
8e9c76c26b options is the 5th arg 2020-05-05 23:13:05 +02:00
Bruno Windels
4de29779c7 also abort timeout timer when response is rejected 2020-05-05 23:12:46 +02:00
Bruno Windels
4ffaa82435 add interval to clock 2020-05-05 23:12:14 +02:00
Bruno Windels
f90b435362 No need for Offline state if we're always in Waiting really 2020-05-04 23:42:34 +02:00
Bruno Windels
d70a57a7c9 remove support for observablevalues from templateview
it's not used, and so params haven't been standardized
trying to unify it, it messes up overriding update in RoomView
that extends it to set the timelineViewModel upon update.
2020-05-04 22:24:49 +02:00
Bruno Windels
d6645cbba9 null guard if list was never set 2020-05-04 22:24:10 +02:00
Bruno Windels
d7a8b1616a use t.view for room sub views
also move composer to own vm
2020-05-04 22:23:43 +02:00
Bruno Windels
28bed56b5a prevent closing more than once 2020-05-04 22:21:56 +02:00
Bruno Windels
1fa14a99e9 correctly wait for catchup sync 2020-05-04 19:38:23 +02:00
Bruno Windels
225fe873be show session load view when picking a session 2020-05-04 19:38:03 +02:00
Bruno Windels
3dde23fc4b dispose viewmodels from TemplateView 2020-05-04 19:24:27 +02:00
Bruno Windels
1ef564bdb0 cleanup 2020-05-04 19:24:20 +02:00
Bruno Windels
cc87e35f23 use ViewModel super class for all view models that need binding 2020-05-04 19:23:11 +02:00
Bruno Windels
d91ab5355c support svg namespace, fix spinner 2020-05-03 01:08:53 +02:00
Bruno Windels
d69987b426 make view gallery of views in different states 2020-04-30 18:28:21 +02:00
Bruno Windels
d3f7fb5089 prototype how i18n would look like 2020-04-30 18:27:59 +02:00
Bruno Windels
ceec8937ef apply template view api changes 2020-04-30 18:27:21 +02:00
Bruno Windels
cdf051f19b api changes 2020-04-29 19:16:52 +02:00
Bruno Windels
2c8c1eb767 move el with the publics 2020-04-29 19:12:48 +02:00
Bruno Windels
6a9315e70a do what we said in the comment 2020-04-29 19:12:12 +02:00
Bruno Windels
f4bb609ab6 notes 2020-04-29 10:10:33 +02:00
Bruno Windels
8bde627cdb more WIP 2020-04-29 10:10:20 +02:00
Bruno Windels
37c602f7d2 rename Template to TemplateView, as it is a view now. 2020-04-29 10:04:40 +02:00
Bruno Windels
2008cf74f1 Template becomes a view 2020-04-29 10:01:08 +02:00
Bruno Windels
657ec9aa62 move loading view state to own view model, so we're more free how to show it, and we can better reuse it 2020-04-23 09:06:04 +02:00
Bruno Windels
acc511e69f extract loading into a sub viewmodel
to show the loading in a separate view
2020-04-22 21:53:55 +02:00
Bruno Windels
b2954fd774 extract loadLabel logic to reuse in SessionPickerViewModel 2020-04-22 21:53:37 +02:00
Bruno Windels
0424ffe231 disable this for now as sync is not an EventEmitter anymore 2020-04-22 20:53:57 +02:00
Bruno Windels
e080bf28a7 expose root view model as global variable for console inspecting 2020-04-22 20:53:38 +02:00
Bruno Windels
e0799181d9 show error when mount() fails in SwitchView 2020-04-22 20:53:18 +02:00
Bruno Windels
449262e3c1 adjust ctor of SessionViewModel to accept sessionContainer now 2020-04-22 20:52:56 +02:00
Bruno Windels
e37101210c adjust LoginView(Model) further to showing loading status in place 2020-04-22 20:52:28 +02:00
Bruno Windels
96aa4f83b9 remove loading section in BrawlView 2020-04-22 20:49:49 +02:00
Bruno Windels
a19e541e1e less http specific 2020-04-22 20:49:21 +02:00
Bruno Windels
3359c6950f typo (this made the loadStatus undefined :/) 2020-04-22 20:49:03 +02:00
Bruno Windels
08b1c02af7 remove start value, can be hardcoded for now
also fix params in wrong order this way
2020-04-22 20:48:49 +02:00
Bruno Windels
f826258c75 null doesn't set queryParams to {} here, so revert explicitly 2020-04-22 20:47:53 +02:00
Bruno Windels
174fd3ea4a don't assume options 2020-04-22 20:47:46 +02:00
Bruno Windels
3f840d9d33 simple unit test for hsApi 2020-04-22 20:47:31 +02:00
Bruno Windels
277c8af628 Headers is a DOM specific class, use Map instead in HomeServerApi 2020-04-22 20:46:47 +02:00
Bruno Windels
c95981a35d remove unused code 2020-04-20 23:10:33 +02:00
Bruno Windels
b32f5711bf port BrawlViewModel to SessionContainer 2020-04-20 23:10:13 +02:00
Bruno Windels
f4983b5ba6 port SessionPickerViewModel to SessionContainer 2020-04-20 22:49:14 +02:00
Bruno Windels
a5965ad378 port LoginViewModel over to SessionContainer 2020-04-20 22:48:56 +02:00
Bruno Windels
bb7fca0592 support deleting the session from the container 2020-04-20 22:29:25 +02:00
Bruno Windels
de7dcf6a40 adjust main.js to use SessionContainer 2020-04-20 21:56:10 +02:00
Bruno Windels
a097929dbd rename lowercase filenames of classes to camelcase like class 2020-04-20 21:41:10 +02:00
Bruno Windels
31f3886eba move EventEmitter to utils 2020-04-20 21:35:53 +02:00
Bruno Windels
c379caf4c0 remove obsolete ifdef comments 2020-04-20 21:31:27 +02:00
Bruno Windels
0f29fdb24e some notes 2020-04-20 21:27:07 +02:00
Bruno Windels
001dbefbcf stop using default exports
because it becomes hard to remember where you used them and where not
2020-04-20 21:26:39 +02:00
Bruno Windels
0de5e899ea remove dead code 2020-04-20 21:25:17 +02:00
Bruno Windels
164d9d594f finish implemenation of SessionContainer 2020-04-20 19:48:21 +02:00
Bruno Windels
87b23d062c fix imports after reshuffleling 2020-04-20 19:47:45 +02:00
Bruno Windels
72b0eefccb replace isSyncing and emit with an Observable SyncStatus 2020-04-19 19:52:26 +02:00
Bruno Windels
80f7caadbe rename SessionsStore to SessionInfoStorage 2020-04-19 19:13:38 +02:00
Bruno Windels
8c56ac3e4f rename NetworkError to ConnectionError 2020-04-19 19:05:12 +02:00
Bruno Windels
8c5411cb7d moar WIP 2020-04-19 19:02:10 +02:00
Bruno Windels
1f15ca6498 more WIP 2020-04-18 19:16:16 +02:00
Bruno Windels
378b75c98a more WIP and breakage 2020-04-09 23:19:49 +02:00
Bruno Windels
ef267ca331 WIP2 2020-04-05 15:11:15 +02:00
Bruno Windels
c980f682c6 create DOMClock, abstraction of clock functionalities for DOM 2020-04-04 17:34:46 +02:00
Bruno Windels
bc69e49cfb WIP2 2020-03-31 10:13:25 +02:00
Bruno Windels
b6a5a02a33 WIP 2020-03-30 23:56:03 +02:00
Bruno Windels
e4563135bf look at prev_content when handling member events 2020-03-30 21:59:44 +02:00
Bruno Windels
c830f50325 catch errors while persisting a new message 2020-03-30 21:33:04 +02:00
Bruno Windels
234c260339 dont modify fragments in comparer until txn succeeds 2020-03-30 20:46:52 +02:00
Bruno Windels
73ea09f668 Handle sync ordering vs back-fill ordering (see synapse #7164) resulting in dupe events
Also extra robustness while filling a gap

ignore duplicate events from synapse instead considering them an
overlapping event with the adjacent fragment
2020-03-30 20:37:36 +02:00
Bruno Windels
dc65274b8b
Merge pull request #38 from bwindels/bwindels/remote-echo-for-gaps
Look for remote echos in gap responses as well as sync responses
2020-03-23 22:00:45 +00:00
Bruno Windels
8354c58c07 also look for remote echos based on event_id 2020-03-23 23:00:33 +01:00
Bruno Windels
eda4022692 show version before login and link to release 2020-03-23 22:46:31 +01:00
Bruno Windels
f02641c808 look for transaction_id in /messages response to delete pending events 2020-03-22 00:07:37 +01:00
Bruno Windels
6d68ec1bac move fillGap to room 2020-03-21 23:40:40 +01:00
Bruno Windels
f729108226 pass emit update fn through setter so we control when tile can update 2020-03-21 14:28:09 +01:00
Bruno Windels
a3714f49cc group public methods for a tile together 2020-03-21 14:26:56 +01:00
Bruno Windels
4176af56ea add failing test for problem 2020-03-21 14:22:16 +01:00
Bruno Windels
44760a9f82 Revert "add logging related to fragments"
This reverts commit 2f355cabef.
2020-03-21 10:47:35 +01:00
Bruno Windels
c4a5de20c0 update previous fragment in comparer when appending a new line fragment 2020-03-21 10:45:09 +01:00
Bruno Windels
2f355cabef add logging related to fragments
both when rebuilding and when sorting will be used
2020-03-20 20:23:07 +01:00
Bruno Windels
7e8cc7ae00 need to return the response here, not the request wrapper
we were reading back a remote id of undefined because of this,
so when for some reason we never receive the message down from sync,
the pending message keeps sending on every load. The server ignores
the send though, because the transaction id is already used, and it returns
the remote id of the event that was already sent the previous time, but
as we were not storing this remote id, we'd just try again and again.

not receiving it through sync could have happened when we were sending a bunch of events
and then receiving (this is how we encountered this bug, while trying to repro another) the
response, but not yet the sync for the message that got wedged. Then we typed stuff on another client
so we would get a limited response for that room, and boom, we would not get the remote echo of the
event that was already sent (but because of this bug we didn't store the remote id) but no echo received yet (when we remove the pending event),
so it gets wedged!
2020-03-17 00:11:50 +01:00
Bruno Windels
b69efc3425 fix errors when replaying 2020-03-17 00:07:54 +01:00
Bruno Windels
06e43d9ee3 fix all tests 2020-03-14 21:38:37 +01:00
Bruno Windels
56c87b3966 better naming 2020-03-14 20:49:15 +01:00
Bruno Windels
ac4a7f971b only apply sync changes in room summary once txn is committed
- also remove m.room.aliases support as they were wrongly implemented
   and now obsolete
 - don't count invited and joined members according to m.room.member
   events anymore as it was also wrongly implemented
   (only when prev!==new membership, but on initial sync we only get
   last member event, which might have been a nick change
2020-03-14 20:46:49 +01:00
Bruno Windels
fc741272ba only apply sync changes in session once txn is committed 2020-03-14 20:45:36 +01:00
Bruno Windels
224d56698a only set new live key when creating a fragment after the txn succeeds
when doing a limited sync, and a new fragment is created,
this._lastLiveKey is updated immediately. If the transaction
would then fail, the fragmentId in this._lastLiveKey was incremented
but the fragment wasn't written to the store, so if sync is resumed
and would subsequently succeed, fragmentIds would be assigned to events
that don't have a corresponding fragment in the timelineFragment store.

This would throw errors when trying to load the timeline,
breaking the whole app.

This changes SyncWriter to only update this._lastLiveKey in
the emit phase, when the transactions has been committed already.
2020-01-04 20:06:49 +01:00
Bruno Windels
bdc2c3d9ad cleanup: storage is not used in SyncWriter
as the transaction is now always passed as an argument, it never
creates one on its own.
2020-01-04 20:04:57 +01:00
Bruno Windels
29b531ae80 add (commented out) instructions how to use record/replay 2019-12-23 14:29:19 +01:00
Bruno Windels
1d9a5c490a add record/replay network layer 2019-12-23 14:28:42 +01:00
Bruno Windels
aa86748cdd pull fetch code out of homeserverapi 2019-12-23 14:28:27 +01:00
Bruno Windels
35c090dcb4 add proper import/export functionality 2019-12-14 18:29:35 +01:00
Bruno Windels
9c42710f9b add github link to home screens 2019-11-22 09:46:19 +01:00
Bruno Windels
8a55778c32 make sure aliases and heroes aren't empty when picking name 2019-11-22 09:29:18 +01:00
Bruno Windels
325077bcb0 try more domexception fixes 2019-11-21 18:28:18 +01:00
Bruno Windels
5ecf0a6717 fix error path on transaction abort error 2019-11-21 18:23:48 +01:00
Bruno Windels
d073f2825b show json in one line when clearing cache
also make naming consistent
2019-10-24 10:54:20 +02:00
Bruno Windels
d34a0c73b5 show json in list instead of alert so we can copy it 2019-10-13 08:29:23 +02:00
Bruno Windels
6f73d3983f add export/import of session data 2019-10-13 08:16:08 +02:00
Bruno Windels
e2b9e9dfdc add clear cache button for session 2019-10-13 07:48:49 +02:00
Bruno Windels
ad7a150aaa use aliases and heroes to fall back room name to 2019-10-13 07:48:33 +02:00
Bruno Windels
b16f21867c preserve value for storage errors on add and put 2019-10-12 22:19:16 +02:00
Bruno Windels
201b70ee4f fix failing to sync new rooms 2019-10-12 22:18:36 +02:00
Bruno Windels
ac53b9099b only log error in sync loop 2019-10-12 22:18:19 +02:00
Bruno Windels
3ba20dece1 fixup for delete button changes 2019-10-12 22:18:08 +02:00
Bruno Windels
2fa5fa7890 add delete button in session picker 2019-10-12 21:16:48 +02:00
Bruno Windels
d367037332 very basic support for lazy loading 2019-10-12 20:24:09 +02:00
Bruno Windels
076582edc3 css fixes
- don't pronounce avatar initials
 - prevent room header growing wider than screen
 - ensure messages wrap their text
2019-09-28 09:46:09 +02:00
Bruno Windels
e3719b2527 allow http (no sssl) homeservers 2019-09-28 09:44:39 +02:00
Bruno Windels
d8696bea1d add offline availability with service worker and appcache 2019-09-15 14:32:12 +02:00
Bruno Windels
8616d79aad make fetch errors more informative by including method and url 2019-09-15 14:31:50 +02:00
Bruno Windels
2b2b4232e9 moar send logging 2019-09-15 12:25:14 +02:00
Bruno Windels
6f527fd2e0 use openCursor where openKeyCursor is not supported 2019-09-15 12:24:46 +02:00
Bruno Windels
bbf6943455 use .get fallback where .getKey is not supported (Edge 15) 2019-09-15 12:24:27 +02:00
Bruno Windels
8e590fe53b rename and use StorageError to deal with idb DOMerror 2019-09-15 12:23:54 +02:00
Bruno Windels
f7f9129b8b show send errors in UI 2019-09-15 12:23:26 +02:00
Bruno Windels
5a90b4673b fix CORS requests failing 2019-09-15 12:23:08 +02:00
Bruno Windels
ed67689fdf some minimal styling for login and session picker 2019-09-08 10:40:05 +02:00
Bruno Windels
09b9eff7c1 fix remaining errors to make login work 2019-09-08 10:19:16 +02:00
Bruno Windels
a7194e0c7a implement missing views 2019-09-08 10:18:59 +02:00
Bruno Windels
1082233de4 start of session picker view 2019-07-31 00:07:12 +02:00
Bruno Windels
c27172fc4e adjust main to new view 2019-07-31 00:07:04 +02:00
Bruno Windels
49a577991b login and session picker view models, sessions store 2019-07-31 00:06:53 +02:00
Bruno Windels
378eea8ceb
Merge pull request #5 from bwindels/bwindels/sending
Send text messages
2019-07-29 18:28:29 +00:00
Bruno Windels
5b4d984645 height of app should always fill screen (not more or less) 2019-07-29 20:11:15 +02:00
Bruno Windels
de35df10d8 fix test + bug in ConcatList update 2019-07-29 20:03:22 +02:00
Bruno Windels
b723ab4cef add failing test for ConcatList update 2019-07-29 20:03:06 +02:00
Bruno Windels
3b7ab8f1c8 fix MappedList test after passing params as well to updater 2019-07-29 20:02:42 +02:00
Bruno Windels
45cd85ead1 fixup: check for event entry with eventType, event isn't exposed anymore 2019-07-29 19:58:35 +02:00
Bruno Windels
7218595c17 only send message if it's non-empty 2019-07-29 19:54:21 +02:00
Bruno Windels
8665bcb897 concat synced events in timeline with pending events for local echo 2019-07-29 19:53:58 +02:00
Bruno Windels
88a7d64091 fixup: delay not awaited, but not needed for now 2019-07-29 19:53:30 +02:00
Bruno Windels
e23abe209f fixup: leftover from removing access to events 2019-07-29 19:53:07 +02:00
Bruno Windels
bfdff353b0 pass params in map operator update fn 2019-07-29 19:52:28 +02:00
Bruno Windels
7a6e91de84 concat operator for observable lists 2019-07-29 19:18:11 +02:00
Bruno Windels
6f650d19b1 map operator for observable lists 2019-07-29 19:17:55 +02:00
Bruno Windels
0b5c2f9273 better naming 2019-07-29 10:59:49 +02:00
Bruno Windels
b53b60e142 use correct handler and make test succeed 2019-07-29 10:59:07 +02:00
Bruno Windels
0cf7cb36c4 add failing test for unsubscribe using wrong handler 2019-07-29 10:58:27 +02:00
Bruno Windels
9b94c4bb61 don't expose raw event object from entry, pending event doesn't have it
it only has content and *some* of the meta fields,
but we want to threat pendingevententry and evententry as one
and the same in the rest of the application, so don't give access
to entire event object.
2019-07-29 10:27:12 +02:00
Bruno Windels
56cee450d1 return syncing user id from PendingEventEntry.sender
add User class where we later can track display name, avatar, ...
2019-07-29 10:24:34 +02:00
Bruno Windels
b26f7df689 pending events are not certain to be sorted here 2019-07-29 09:54:34 +02:00
Bruno Windels
3ed72df620 put everything together to make it roughly work
no local echo yet, and send errors are being swallowed
2019-07-27 10:51:51 +02:00
Bruno Windels
851100b88a send unsent messages after first sync 2019-07-26 22:40:39 +02:00
Bruno Windels
707988f806 better handle remote echos and hookup in session and room 2019-07-26 22:33:33 +02:00
Bruno Windels
ccb722d766 more WIP 2019-07-26 22:03:57 +02:00
Bruno Windels
f3d1128f28 WIP 2019-07-01 10:00:29 +02:00
Bruno Windels
c5b2d0c8b2 WIP 2019-06-28 00:52:54 +02:00
Bruno Windels
e09d2963df fix timeline scrolling 2019-06-28 00:44:49 +02:00
Bruno Windels
fc873fbfa5 more css fixes, and make back button work for compact layout 2019-06-26 23:14:39 +02:00
Bruno Windels
38a8132397 fix narrow layout 2019-06-26 22:43:59 +02:00
Bruno Windels
cd9f25ea80 convert tabs to spaces where needed 2019-06-26 22:31:36 +02:00
Bruno Windels
90a38078e0 unused import 2019-06-26 22:19:40 +02:00
Bruno Windels
59a303daa0 make user config available from phone on local wlan 2019-06-26 22:19:40 +02:00
Bruno Windels
72c193cce5 page to debug app on mobile phones without remote access to tools 2019-06-26 22:19:40 +02:00
Bruno Windels
b882e0ef8a respect argument count of idb calls
lumia doesn't like undefined arguments if they
are being left out, so call the idb calls with
the exact amount of arguments
2019-06-26 22:02:00 +02:00
Bruno Windels
bbb5e35bcb wrap everything that can throw a idb DOMException in StorageError
as lumia gives very cryptic errors without a stacktrace.
2019-06-26 22:00:50 +02:00
Bruno Windels
0fd52be710 encode idb array keys as sortable strings
that's why numeric parts of the keys have to be encoded
as a fixed length, "big-endian" ordered strings, so
string sorting will also sort the numeric keys correctly.

this also assumes room ids don't contain the "|" character,
we should probably escape the separator at some point.
2019-06-26 21:55:33 +02:00
Bruno Windels
106146660c define storage keys to be 32bit for idb / web platform
as a preparation to serialize the eventIndex and fragmentId
as a 8 character string, part of a concatenated string PK,
as lumia doesn't support array keys.
2019-06-26 21:52:41 +02:00
Bruno Windels
ca4361248f fallback for platforms missing AbortController 2019-06-26 19:49:49 +02:00
Bruno Windels
9cd5257959 load more events when scrolled to top 2019-06-16 17:29:33 +02:00
Bruno Windels
c12300bfa5 make loadList not private when we're going to override it 2019-06-16 17:28:51 +02:00
Bruno Windels
d34a26f0da store new gap entry on update so we can paginate again 2019-06-16 16:47:56 +02:00
Bruno Windels
2131329442 scroll to bottom when loading timeline 2019-06-16 16:39:20 +02:00
Bruno Windels
a1c23f715a always show date for now (but omit year to make it less annoying) 2019-06-16 16:19:26 +02:00
Bruno Windels
d7bc92c391 center placeholder text in both directions 2019-06-16 16:19:00 +02:00
Bruno Windels
b47898e025 show full stack on sync error 2019-06-16 15:49:00 +02:00
Bruno Windels
a09c3e7bed hide sender name if previous message was by same sender 2019-06-16 15:48:54 +02:00
Bruno Windels
4a657b279d apply css from prototype, other small changes, keep scroll at bottom 2019-06-16 15:21:20 +02:00
Bruno Windels
d72a7102b2 only bind className when the obj has at least 1 fn, also support it html 2019-06-16 15:12:54 +02:00
Bruno Windels
590ed56d68 leftover things that got moved during directory org 2019-06-16 10:54:37 +02:00
Bruno Windels
1917a528c7 replace ad hoc buttons and label with SyncStatusBar 2019-06-16 10:54:16 +02:00
Bruno Windels
a4bc2dd2b0 support isOwn on messages 2019-06-16 10:53:23 +02:00
Bruno Windels
a5a333b71a organize view code in directory like viewmodels 2019-06-16 10:53:01 +02:00
Bruno Windels
95e1d55b97 extract argument detection for el and use it in both html and Template 2019-06-15 17:50:54 +02:00
Bruno Windels
03df472c53 show placeholder in middle panel when no room is selected 2019-06-15 17:50:15 +02:00
Bruno Windels
16fed27a8a SwitchView, to alternate between different views 2019-06-15 17:49:45 +02:00