Commit graph

342 commits

Author SHA1 Message Date
Simon Ser
14031c594b Ask confirmation before JOIN on irc:// link click 2021-11-08 10:44:10 +01:00
Simon Ser
74fe6ee944 Auto-join when adding new network on irc:// link click
Closes: https://todo.sr.ht/~emersion/gamja/111
2021-11-07 19:47:49 +01:00
Simon Ser
a58befd6d7 s/var/let/ 2021-11-07 13:51:39 +01:00
Simon Ser
38a3075a2c Disconnect previous server on connect re-submit 2021-11-07 13:50:26 +01:00
Simon Ser
800f5ceb6a Keep track of channel join status
This makes us behave better when we receive a self-PART message
from the server.
2021-11-05 11:49:56 +01:00
Simon Ser
a1ab87c71c Route self-NICK messages to server buffer 2021-11-03 21:49:53 +01:00
Simon Ser
8ebb61cb0e Route user MODE messages to server buffer 2021-11-03 21:44:24 +01:00
Simon Ser
0888af4a6f Request more messages for event-playback infinite scrolling
When the server supports draft/event-playback, some messages (like
join/part/etc) may be collapsed together. Request more messages to
avoid ending up with a half-filled page.
2021-11-03 16:31:12 +01:00
Simon Ser
85e73d0ee8 Add RPL_WELCOME to server buffer 2021-11-02 15:27:24 +01:00
Simon Ser
33c3cf3278 Remove unnecessary irc.formatDate call 2021-10-29 16:34:50 +02:00
Simon Ser
a1057092e0 state: move in QUIT and NICK update logic 2021-10-23 23:24:11 +02:00
Simon Ser
bf471abb1b Add App.routeMessage
This splits handleMessage into two functions: one decides in which
buffers the message should be appended to, the other performs
message side-effects like auto-join.
2021-10-23 23:01:32 +02:00
Simon Ser
49a59077b7 lib/irc: extend parseURL to support flags and skip auth + options 2021-10-20 14:33:16 +02:00
Simon Ser
3d09c43a91 Don't add RPL_YOURHOST to server buffer 2021-10-18 22:08:21 +02:00
Simon Ser
e7054eab13 Don't add RPL_SASLSUCCESS to server buffer 2021-10-18 22:05:25 +02:00
Simon Ser
34aea84dde Close buffer tabs on middle click 2021-10-17 19:33:02 +02:00
Simon Ser
a120d79585 Handle IRC URLs without channel name 2021-10-13 16:47:01 +02:00
Simon Ser
3562478946 Open dialog to create new network on IRC URL click
If we're running under a bouncer and the user clicks a link with
a server we aren't connected to yet, open the dialog to add a new
network.

References: https://todo.sr.ht/~emersion/gamja/71
2021-10-13 16:40:34 +02:00
Simon Ser
405bc51c26 Handle click on irc:// channel URLs inside buffers
References: https://todo.sr.ht/~emersion/gamja/71
2021-10-13 16:18:59 +02:00
Simon Ser
21a4a71542 Add support for SASL EXTERNAL
Can be useful when the server is using e.g. a cookie for
authentication purposes.
2021-10-12 17:29:56 +02:00
Simon Ser
a890665775 Allow revealing server field with ?server 2021-10-09 13:33:01 +02:00
Simon Ser
a920914b4c Add nick to config.json 2021-10-09 10:45:44 +02:00
Simon Ser
47b12cc5d9 Add autoconnect to config.json 2021-10-09 10:45:44 +02:00
Simon Ser
312a3f812e Don't allow overriding server URL if set in config.json
This has security implications.
2021-10-09 10:34:51 +02:00
Simon Ser
e3e3315125 Inherit from default connectParams in handleConfig
When handleConfig is called, this.state.connectParams will be set
to its default value. Inherit from it so that autoconnect isn't
missing any. If we ever add a new connect parameter, we don't want
an old localStorage to break connect() because it's missing the
param.
2021-10-09 10:10:51 +02:00
Simon Ser
d2ac1e152a Add more type checks for config.json 2021-10-09 09:57:54 +02:00
Simon Ser
0b4302e059 Clear autojoin when loading autoconnect
This is handled by the buffer store.
2021-09-21 19:25:59 +02:00
Simon Ser
7bf9a0ca25 Auto-join previous channels on reconnect
Closes: https://todo.sr.ht/~emersion/gamja/47
2021-09-21 19:20:39 +02:00
Simon Ser
65674cb45d Narrow down syncBufferUnread to new buffers
syncBufferUnread might override the previous unread value.

Closes: https://todo.sr.ht/~emersion/gamja/105
2021-09-21 18:41:14 +02:00
Simon Ser
1dd55367e9 Send WHO queries for saved user buffers after ISUPPORT
This allows WHOX to be used.
2021-09-21 18:31:11 +02:00
Simon Ser
da4da01e34 Query WHO when switching to a user buffer without info
Closes: https://todo.sr.ht/~emersion/gamja/101
2021-09-21 17:06:32 +02:00
Simon Ser
329f9063d0 Add support for WHOX
This allows querying the account of the user.
2021-09-21 16:58:00 +02:00
Simon Ser
d12e1109b3 Add support for account-notify 2021-09-21 14:49:32 +02:00
Simon Ser
010009e3e0 Display username/hostname in member list 2021-09-21 14:19:30 +02:00
Simon Ser
ecb2ee041b Update user on QUIT and NICK 2021-09-21 14:00:52 +02:00
Simon Ser
c66ce61029 Introduce per-server user map
This allows us to store information about users in a signle place,
instead of putting it in user buffers. This is required to display
metadata about users in the channel members list.
2021-09-21 13:33:15 +02:00
Simon Ser
e7f8620933 Add State.create() 2021-09-21 12:33:22 +02:00
Simon Ser
c428e504fe Don't show unread marker for outgoing messages
Closes: https://todo.sr.ht/~emersion/gamja/100
2021-08-30 10:27:24 +02:00
Simon Ser
77683937d7 Narrow down syncBufferUnread call to self-JOIN 2021-08-25 08:46:37 +02:00
Simon Ser
4278265c65 Open new buffer on self-message
Closes: https://todo.sr.ht/~emersion/gamja/96
2021-08-24 14:46:51 +02:00
Simon Ser
8a5e52ed9a Rename buffer lastReadReceipt to prevReadReceipt
This field is intentionally behind the latest read receipt. Let's
rename it to make that clearer.
2021-08-24 14:01:57 +02:00
Simon Ser
6e59a77672 Don't drop unread marker in addMessage
Closes: https://todo.sr.ht/~emersion/gamja/76
2021-08-24 13:59:33 +02:00
Simon Ser
b14cddc0d0 Ignore server buffer in latestReceipt
When we've received RPL_WELCOME, latestReceipt will return the
current time if we don't filter out the server buffer.
2021-08-24 13:49:25 +02:00
Simon Ser
e283d9c7ab Add support for MONITOR 2021-08-24 12:53:46 +02:00
Simon Ser
dd67e0789e Auto-complete channel names
Closes: https://todo.sr.ht/~emersion/gamja/84
2021-08-23 15:21:24 +02:00
Simon Ser
aa9ce73d5a Restore channel unread status from local storage
Closes: https://todo.sr.ht/~emersion/gamja/75
Closes: https://todo.sr.ht/~emersion/gamja/89
2021-08-23 14:17:58 +02:00
Simon Ser
c470c9f2c0 Fix typo 2021-08-23 12:31:11 +02:00
Simon Ser
c47af780f6 Restore user query buffer unread status 2021-08-23 12:25:43 +02:00
Simon Ser
016ca27f2d Restore opened user query buffers
Closes: https://todo.sr.ht/~emersion/gamja/93
2021-08-23 12:02:36 +02:00
Simon Ser
a1d79cda4b Drop ConnectForm key 2021-07-04 21:43:47 +02:00
Simon Ser
52ddda4e82 Unify dialog data in App.state 2021-07-04 21:41:36 +02:00
Simon Ser
af1e2e144a Hide everything while loading config.json 2021-07-04 21:29:15 +02:00
Simon Ser
00eebc9859 composer: cycle through auto-completions
Closes: https://todo.sr.ht/~emersion/gamja/42
2021-06-30 22:20:40 +02:00
Simon Ser
b289fd10b7 Always mark own messages as read 2021-06-24 18:04:26 +02:00
Simon Ser
429450e060 Handle RPL_INVITING 2021-06-24 18:01:24 +02:00
Simon Ser
bc05fd5c11 Treat server broadcasts as highlights 2021-06-23 19:52:45 +02:00
Simon Ser
1ea3180f5b Use semantically more correct elements for error bubble 2021-06-22 15:48:42 +02:00
Simon Ser
724d7318cf Focus buffer scrollview instead of composer
Instead of focusing the composer, focus the buffer scrollview when
switching to a buffer. This allows keyboard navigation to work as
expected, with arrow up/down and page up/down scrolling the buffer
instead of doing nothing.

Focus back the composer when a KeyboardEvent produces text. This
allows users to start typing a message right after switching to a
buffer.

Closes: https://todo.sr.ht/~emersion/gamja/64
2021-06-22 14:47:39 +02:00
Simon Ser
7d15525c7d Allow resetting nick and auto-join with query params 2021-06-22 10:44:20 +02:00
delthas
edbf294380 component/app: Automatically prepend wss to server URL if unspecified 2021-06-20 21:08:02 +02:00
Simon Ser
f8060c9be2 Allow resetting server URL with query param 2021-06-20 13:00:40 +02:00
Simon Ser
37cff435a3 Move MODE state updates outof App 2021-06-11 12:44:14 +02:00
Simon Ser
ef50e62498 Add STATUSMSG indicator
Closes: https://todo.sr.ht/~emersion/gamja/65
2021-06-11 11:18:29 +02:00
Simon Ser
d19f127952 Move message key generation to State.addMessage 2021-06-11 10:58:09 +02:00
Simon Ser
4249da4ba8 Add /quiet and /unquiet 2021-06-11 00:27:19 +02:00
Simon Ser
61e35dd68a Bump direct message unread priority 2021-06-10 18:57:57 +02:00
Simon Ser
e56deb35c9 Ensure config has a server object
Simplifies code accessing the config.
2021-06-10 18:34:34 +02:00
Simon Ser
77030931cb Reset config.server.auth when using custom server URL 2021-06-10 18:28:01 +02:00
Simon Ser
4df9328be8 Move auto-join field out of advanced options if pre-filled
Closes: https://todo.sr.ht/~emersion/gamja/82
2021-06-10 18:21:18 +02:00
Simon Ser
8972130252 s/var/let/ 2021-06-10 18:11:11 +02:00
Simon Ser
4db845a4b1 Show again connect form when last server is closed 2021-06-10 18:06:45 +02:00
Drew DeVault
eef2093c88 Add "auth" parameter to tune connect form 2021-06-10 17:59:49 +02:00
Simon Ser
6039e13411 Add notification tags
This makes it so multiple messages from the same user will only
produce a single notification.
2021-06-10 17:11:21 +02:00
Simon Ser
63773f99ee Add Notification workaround for Chrome on Android
Closes: https://todo.sr.ht/~emersion/gamja/78
2021-06-10 17:08:24 +02:00
Simon Ser
02800dd21b Don't open a new buffer on NOTICE 2021-06-10 12:07:17 +02:00
Simon Ser
dd8eca1cfe Switch to server buffer on server name click
Closes: https://todo.sr.ht/~emersion/gamja/68
2021-06-10 12:03:50 +02:00
Simon Ser
e28769216a Remove callback arg from App.createBuffer 2021-06-10 10:56:18 +02:00
Simon Ser
bf76eaa669 Add State.createServer 2021-06-10 10:54:33 +02:00
Simon Ser
a9c1abb064 Route channel mode and invite/except list to channel buffer 2021-06-07 14:13:00 +02:00
Simon Ser
403d7ec7f7 Add case-mapping support to irc.isHighlight
Closes: https://todo.sr.ht/~emersion/gamja/77
2021-06-06 15:52:58 +02:00
Simon Ser
41c113be9a Show connect form during connection
This improves UX when the connection parameters (server URL,
username, password, and so on) are incorrect.
2021-06-06 11:33:00 +02:00
Simon Ser
0dfb7623db Add support for labeled-response
It's just used to avoid mixing up messages coming from the server
so far.
2021-06-04 20:38:01 +02:00
Simon Ser
34078d5da7 Add support for draft/event-playback 2021-06-04 19:45:51 +02:00
Simon Ser
db7aa337cb Remove App.isChannel
Replace all remaining usage with Client.isChannel. Client will be
able to use the ISUPPORT tokens to check if a name is a channel.
2021-06-04 19:13:59 +02:00
Simon Ser
87588abf27 Add State.addMessage 2021-06-04 19:07:14 +02:00
Simon Ser
04362644bf Handle TOPIC in State.handleMessage 2021-06-04 18:57:02 +02:00
Simon Ser
30a345298f Handle JOIN/PART in State.handleMessage 2021-06-04 18:53:06 +02:00
Simon Ser
2af58f8d0b Move createBuffer to State 2021-06-04 18:37:34 +02:00
Simon Ser
2c1bb4ce6a Introduce State.handleMessage
Takes an IRC message, updates the state.

Doesn't yet handle all messages, this will be a step-by-step process.
2021-06-04 18:27:21 +02:00
Simon Ser
4d988cafeb Move some state utilities to state.js 2021-06-04 18:03:03 +02:00
Simon Ser
791b742684 Allow config.server.ping to be a String
Workaround for existing config files in the wild.
2021-06-04 17:50:49 +02:00
Simon Ser
6e20ad872e Add support for STATUSMSG
Closes: https://todo.sr.ht/~emersion/gamja/65
2021-06-03 13:31:43 +02:00
Simon Ser
3b5b693403 Use bufName in addMessage, fix missing Client.isMyNick() 2021-06-03 13:29:32 +02:00
Simon Ser
283f8af4b1 lib/irc: rename IRC prefix utilities 2021-06-03 13:18:28 +02:00
Simon Ser
fe9c483570 s/network/server/
Closes: https://todo.sr.ht/~emersion/gamja/46
2021-06-03 11:46:50 +02:00
Simon Ser
63a71e5f5d Add support for incoming INVITE messages 2021-06-03 11:04:32 +02:00
Simon Ser
a4294975a2 Add support for /ban without argument 2021-06-03 10:19:09 +02:00
Simon Ser
91208a6d47 Add support for CHATHISTORY TARGETS
The main motivation is to avoid missing direct messages coming from
other users.

A nice side-effect is that we no longer need to issue CHATHISTORY
queries for each channel we JOIN: instead, we can only fetch
history for targets known to have new messages available (as indicated
by CHATHISTORY TARGETS).

We use read receipts instead of delivery receipts, so that reloading
the webapp restores the exact same state (ie, unread messages are
re-fetched).

References: https://github.com/ircv3/ircv3-specifications/pull/450
2021-06-02 20:37:20 +02:00
Tom Lebreux
0bcd044f10 Linkify channel names 2021-06-01 09:37:35 +02:00
Simon Ser
04932317f6 Populate server URL in fillConnectParams 2021-05-31 18:11:33 +02:00
Simon Ser
4fff2b1b8d Unify connect params keys 2021-05-31 18:04:02 +02:00
Simon Ser
c632ef4339 Don't save default username/realname in local storage 2021-05-31 17:57:17 +02:00
Simon Ser
619f1db08f Introduce Client.who 2021-05-31 17:11:42 +02:00
Simon Ser
e271a3cd0e Add /who 2021-05-31 17:02:56 +02:00
Simon Ser
14dbb60aec Fix null membership on JOIN 2021-05-31 16:08:33 +02:00
Drew DeVault
be1ecf607d Display prefixes in member list
Closes: https://todo.sr.ht/~emersion/gamja/43
2021-05-31 15:56:08 +02:00
Simon Ser
ab11af3965 Init App.config 2021-05-31 12:26:57 +02:00
Simon Ser
b3d825c9d1 Hide composer when disconnected from server 2021-05-31 12:04:54 +02:00
Simon Ser
99ac0151a5 Use Client.isMyNick in NOTICE/PRIVMSG handling 2021-05-28 10:24:40 +02:00
Simon Ser
7b762b3e8a Unregister PING timer when destroying client 2021-05-28 09:58:06 +02:00
Simon Ser
fc9dfa2dca Implement case-mapping for buffers and message handler 2021-05-27 23:40:08 +02:00
Simon Ser
06f7651bef Ignore TAGMSG messages
We get these from clients that support typing notifications, for
instance.
2021-05-27 21:58:37 +02:00
Simon Ser
9567d56f53 Switch to channel buffer on /join
Closes: https://todo.sr.ht/~emersion/gamja/37
2021-05-27 19:10:42 +02:00
Drew DeVault
64900fbe80 Implement togglable sidebars for narrow viewports
Closed: https://l.sr.ht/96AD.jpg
Open:   https://l.sr.ht/gr_9.jpg
2021-05-27 19:00:11 +02:00
Drew DeVault
d612c91016 Implement optional opportunistic pings 2021-05-27 18:31:04 +02:00
Drew DeVault
a0c85c3372 Handle incoming MODE messages in appropriate buffer 2021-05-27 18:01:58 +02:00
Simon Ser
f36bba897e Fix cross-network mixups when handling QUIT and NICK
Only mutate buffers if they belong to our connection.
2021-05-27 15:19:28 +02:00
Simon Ser
b2cdab86aa Add case-mapping support for channel members
Make a buffer's members an irc.CaseMapMap.
2021-05-27 15:17:18 +02:00
Simon Ser
d880b23d32 Add hint to run /help in unknown command error message 2021-05-27 12:55:28 +02:00
Simon Ser
45c12fb684 Add nick URL param
Closes: https://todo.sr.ht/~emersion/gamja/40
2021-05-27 12:32:22 +02:00
Simon Ser
071c2626d5 Open error bubbles for IRC numeric errors 2021-05-27 11:34:23 +02:00
Simon Ser
b8c4bb3112 Improve command error reporting
state.error is expected to be a String, not an Error.
2021-05-27 11:26:42 +02:00
Drew DeVault
d34bff9ed6 Implement /kick and KICK handling in buffers 2021-05-27 10:58:57 +02:00
Simon Ser
08678ba57e Always parse autojoin channels from URL params
Even if connection parameters were previously saved to local storage.
2021-05-27 10:36:03 +02:00
Simon Ser
ac5bbafdc3 Fix config.json relative path
The path should be relative to index.html, not the JS file.
2021-05-26 23:17:23 +02:00
Simon Ser
17cd38f0b9 Read auto-join channels from browser URL hash
This is easier to type than trying to escape the # in ?channels=#XXX.
2021-05-26 22:57:49 +02:00
Simon Ser
695b02caaa Introduce store helper
Responsible for serializing/deserializing data to be saved in
localStorage. Add a prefix to all localStorage entries to avoid
conflicts with other webapps. Stop guarding against localStorage
not existing, browsers can just implement a dumb interface to
disable it.
2021-05-26 18:43:11 +02:00
Simon Ser
12a38ace90 Add support for IRCv3 setname 2021-05-25 20:22:21 +02:00
Simon Ser
92535fae24 Ignore BOUNCER NETWORK messages if we're already bound to a network 2021-05-25 17:11:06 +02:00
Simon Ser
1b21f5f076 Display bouncer network status 2021-05-25 17:01:57 +02:00
Simon Ser
6524dc5dd2 Add support for the soju.im/bouncer-networks-notify cap 2021-05-25 17:01:20 +02:00
Simon Ser
94fba920cd Fix close() for bouncer networks 2021-05-25 17:01:18 +02:00
Simon Ser
11642e1ab4 Add UI to edit/delete a network 2021-05-25 16:59:59 +02:00
Simon Ser
f84334c31e Add UI to add a new bouncer network 2021-05-25 16:59:57 +02:00
Simon Ser
b429243573 Add support for the soju.im/bouncer-networks extension 2021-05-25 16:58:50 +02:00
Simon Ser
982a945932 Fix TypeError in handleBufferScrollTop
Fixes the following:

    TypeError: client is undefined
2021-05-25 14:28:48 +02:00
Simon Ser
ed92c3c61a Clear local storage when clicking "Disconnect" 2021-05-25 12:57:40 +02:00
Simon Ser
07c10b3b1f Only switch to autojoin channel once 2021-05-25 12:40:33 +02:00
Simon Ser
d261886199 Add support for config file
Closes: https://todo.sr.ht/~emersion/gamja/20
2021-05-25 12:33:22 +02:00
Simon Ser
f122e44e9b Use ISUPPORT CHATHISTORY to discover max page size 2021-05-11 16:10:50 +02:00
Simon Ser
305ffb569c Parse ISUPPORT tokens in client 2021-05-11 16:03:16 +02:00
Simon Ser
e242d5222e Fix TypeError in App.render()
Fixes the following error:

    Uncaught (in promise) TypeError: activeBuffer is undefined
2021-05-10 15:09:49 +02:00
Simon Ser
727331c859 Remove client from map on disconnect 2021-03-10 11:01:04 +01:00
Simon Ser
4991518ed5 Display error popup on FAIL 2021-03-09 21:48:04 +01:00
Simon Ser
97e75805fa Add some space between error message and close button 2021-03-09 21:47:39 +01:00
Simon Ser
88c0e5ae94 Break long tag attributes on multiple lines
Makes that stuff more readable.
2021-03-09 18:11:59 +01:00
Simon Ser
4257463b46 Rename Connect/Join to ConnectForm/JoinForm 2021-03-09 13:25:31 +01:00
Simon Ser
c83a74cc50 Cleanup compareBuffers 2021-03-09 12:04:12 +01:00
Simon Ser
56e705b6de Only switch buffer on connect if there's no active buffer 2021-03-09 09:38:55 +01:00
Simon Ser
bf30038b41 Fix whitespace issues 2021-03-09 09:17:01 +01:00