Commit Graph

365 Commits

Author SHA1 Message Date
Ken-Håvard Lieng
3b33957161 Fix message reducer tests 2017-06-07 05:13:02 +02:00
Ken-Håvard Lieng
b0b9904bc1 Rename state/environment to state/app 2017-06-07 01:03:35 +02:00
Ken-Håvard Lieng
b6e92d6add Fetch scrollback messages earlier, add them when ready 2017-06-07 00:04:37 +02:00
Ken-Håvard Lieng
e5c5938414 Add raw command shorthand 2017-06-02 22:24:03 +02:00
Ken-Håvard Lieng
6d55ce8a2d Enable dev-middleware CORS 2017-06-01 23:17:15 +02:00
Ken-Håvard Lieng
d9e3d71a1f Show warning when disconnected 2017-05-29 06:16:24 +02:00
Ken-Håvard Lieng
2d32df3afe Update client dependencies 2017-05-29 03:12:19 +02:00
Ken-Håvard Lieng
fa9c5a9c16 Fix navicon 2017-05-29 03:02:39 +02:00
Ken-Håvard Lieng
a084e6d0af Dont send empty whois results to the client 2017-05-29 00:52:19 +02:00
Ken-Håvard Lieng
aa59e71745 Forward irc errors to the client, improve command validation and feedback, handle topic changes 2017-05-28 07:20:43 +02:00
Ken-Håvard Lieng
993d29242e Clean up container/component relationship 2017-05-27 07:30:22 +02:00
Ken-Håvard Lieng
01bacafac8 Add linkify tests 2017-05-27 06:47:17 +02:00
Ken-Håvard Lieng
889e3b88b7 Colocate reducers, actions and selectors 2017-05-26 08:20:00 +02:00
Ken-Håvard Lieng
1e7d4c3fe4 Update webpack to 2.6.0 2017-05-23 09:58:08 +02:00
Ken-Håvard Lieng
41d6099d89 Inform about commands not found 2017-05-22 03:49:37 +02:00
Ken-Håvard Lieng
7e080f2c99 Only call resetInputHistory when there is something to reset 2017-05-21 23:48:01 +02:00
Ken-Håvard Lieng
c428842db7 Fix input history 2017-05-21 23:23:21 +02:00
Ken-Håvard Lieng
4c70d11a86 Add _ to segmentValueCharset 2017-05-21 22:59:35 +02:00
Ken-Håvard Lieng
d96cf68d95 Dont return an array from linkify if the result is just a single node 2017-05-21 11:04:06 +02:00
Ken-Håvard Lieng
8684e2dea2 Store the last tab in a cookie so the server can use it for embedding state 2017-05-21 09:53:47 +02:00
Ken-Håvard Lieng
4cad5a0b33 Make sure route params can contain all the possible characters in a nick 2017-05-21 08:29:59 +02:00
Ken-Håvard Lieng
84624266e0 Update client dependencies 2017-05-20 23:37:29 +02:00
Ken-Håvard Lieng
5487ecdb57 Redirect to stored tab if the route is not found 2017-05-19 08:36:13 +02:00
Ken-Håvard Lieng
2afbf2359c Add document title handling 2017-05-19 07:29:44 +02:00
Ken-Håvard Lieng
511b9e406c Use functional component for Route 2017-05-19 07:28:08 +02:00
Ken-Håvard Lieng
fc29c48013 Show messages sent to * in server tab again 2017-05-16 23:22:03 +02:00
Ken-Håvard Lieng
05ce88a656 Change tab close icon 2017-05-16 08:38:43 +02:00
Ken-Håvard Lieng
2328cfa940 Show current nick in MessageInput 2017-05-15 22:51:21 +02:00
Ken-Håvard Lieng
d3a0a21338 Put connect defaults into the state 2017-05-15 06:51:24 +02:00
Ken-Håvard Lieng
ff7c563b61 Use replace in updateSelection 2017-05-15 06:27:30 +02:00
Ken-Håvard Lieng
a4d40bef39 Add more message reducer tests 2017-05-15 05:57:12 +02:00
Ken-Håvard Lieng
c598ace18c Update client dependencies 2017-05-14 22:54:43 +02:00
Ken-Håvard Lieng
9bc518fbe9 Load fonts using FontFaceObserver 2017-05-12 10:51:37 +02:00
Ken-Håvard Lieng
2b5a468079 Add support for owner, admin and halfop user modes 2017-05-10 03:47:34 +02:00
Ken-Håvard Lieng
750ffef4c2 Fix message broadcast action 2017-05-10 02:59:46 +02:00
Ken-Håvard Lieng
4dd9671e87 Prevent autoscroll flag being cleared on mount by initial scroll tick 2017-05-08 23:22:53 +02:00
Ken-Håvard Lieng
909c31dff8 Update client dependencies 2017-05-08 02:02:04 +02:00
Ken-Håvard Lieng
fec7c93abc Move wrapWidth handling out of MessageBox, improve scroll position handling, use custom routing, close menu when clicking anywhere 2017-05-07 22:19:15 +02:00
Ken-Håvard Lieng
a753efd1dd Bind Navicon toggleMenu in mapDispatchToProps 2017-05-06 23:04:20 +02:00
Ken-Håvard Lieng
cbe3b95d8c Re-add nick click handler in Message 2017-05-06 23:02:45 +02:00
Ken-Håvard Lieng
52acec9d21 Maintain scroll positions when switching tabs 2017-05-03 22:56:06 +02:00
Ken-Håvard Lieng
45c61e7596 Add message scrollback 2017-05-02 23:21:25 +02:00
Ken-Håvard Lieng
b5d12954a6 Update client dependencies 2017-04-30 22:37:09 +02:00
Ken-Håvard Lieng
ab0bdc4401 Use redux devtools extension compose and redux 3.1 style createStore 2017-04-30 02:21:36 +02:00
Ken-Håvard Lieng
294114028a Add server reducer tests 2017-04-25 05:13:57 +02:00
Ken-Håvard Lieng
164c47d1a6 Add tab reducer tests 2017-04-24 03:08:48 +02:00
Ken-Håvard Lieng
35e2ea39f1 Fix a few bugs in reducers/channels, start adding tests 2017-04-23 08:45:35 +02:00
Ken-Håvard Lieng
307c83958a Extend immutable.Records using es6 classes 2017-04-22 22:24:11 +02:00
Ken-Håvard Lieng
dce68ce813 Return req.originalUrl from gulpfile proxy 2017-04-21 03:31:35 +02:00
Ken-Håvard Lieng
2525b06c28 Use firebase push IDs for messages 2017-04-20 05:32:22 +02:00
Ken-Håvard Lieng
0413960b85 Fix /help output 2017-04-20 04:16:15 +02:00
Ken-Håvard Lieng
eedc687f18 Send the 25 last messages for each channel to the client on load 2017-04-20 01:51:55 +02:00
Ken-Håvard Lieng
ebee2746d6 Rename message.message to message.content 2017-04-17 22:36:37 +02:00
Ken-Håvard Lieng
c4609574c7 Pre-linkify messages and store breakpoints 2017-04-17 04:11:45 +02:00
Ken-Håvard Lieng
12fbca8110 Call autolinker.compactMatches() and minimize textnode count returned from linkify() 2017-04-16 07:47:02 +02:00
Ken-Håvard Lieng
305c1fa08f Switch back to upstream autolinker 2017-04-16 06:08:45 +02:00
Ken-Håvard Lieng
8d4b707757 Upgrade client dependencies 2017-04-15 02:37:47 +02:00
Ken-Håvard Lieng
e5832d2c58 Add brotli support 2017-04-14 04:33:44 +02:00
Ken-Håvard Lieng
b2e3e995ce Wait for server comfirmation before updating nick 2017-04-13 01:50:58 +02:00
Ken-Håvard Lieng
1739b15eaa Add license field to package.json to silence yarn warning 2017-04-12 03:49:19 +02:00
Ken-Håvard Lieng
2e763d916d Remove eventemitter2 and ify-loader 2017-04-12 03:44:28 +02:00
Ken-Håvard Lieng
ee43d2fe27 Use React Hot Loader 3 instead of React Transform 2017-04-12 00:00:59 +02:00
Ken-Håvard Lieng
18651c1a10 Fix race condition with NICK and QUIT when multiple dispatch users are in the same channel 2017-04-11 03:49:52 +02:00
Ken-Håvard Lieng
3393b1b706 Update .eslintrc 2017-04-09 23:49:37 +02:00
Ken-Håvard Lieng
f7c8203ed1 Upgrade client dependencies (React 15.5) 2017-04-09 23:28:55 +02:00
Ken-Håvard Lieng
961c0415a0 Handle nick collisions by right-padding with _ 2017-04-06 23:26:58 +02:00
Ken-Håvard Lieng
50dc0ef64f Fix handling of PART messages with no reason 2017-04-04 22:57:01 +02:00
Ken-Håvard Lieng
52f929ec45 Strip last character from ACTION messages 2017-03-30 05:13:50 +02:00
Ken-Håvard Lieng
007dd3fe63 Use list key provided by react-virtualized in UserList 2017-03-30 04:53:54 +02:00
Ken-Håvard Lieng
6a9942a655 Set scrolldown flag on tab changes in willUpdate instead of receiveProps 2017-03-30 04:37:55 +02:00
Ken-Håvard Lieng
80efb750f9 Rename util.scrollBarWidth() 2017-03-30 04:18:25 +02:00
Ken-Håvard Lieng
9d5707dd3c Use forceUpdateGrid() in UserList 2017-03-30 04:12:30 +02:00
Ken-Håvard Lieng
e19280c2c7 Fix wrapWidth for channels on small screens 2017-03-29 23:45:09 +02:00
Ken-Håvard Lieng
bb8a4d180e Prevent unnecessary wrapWidth updates 2017-03-28 23:55:50 +02:00
Ken-Håvard Lieng
3b0734bb4d Update webpack.NoErrorsPlugin name 2017-03-28 23:18:55 +02:00
Ken-Håvard Lieng
a4bbf8364a Upgrade reselect to 3.0.0 and react-virtualized to 9.4.0 2017-03-27 23:35:59 +02:00
Ken-Håvard Lieng
346ba3fdb3 Fix SearchResult component name 2017-03-24 21:18:02 +01:00
Ken-Håvard Lieng
eca5761098 Linkify search results properly 2017-03-24 21:14:45 +01:00
Ken-Håvard Lieng
f8d57f1b6d Upgrade react-virtualized to 9.3.0 2017-03-23 20:38:27 +01:00
Ken-Håvard Lieng
35514abc27 Remove babel-plugin-transform-decorators-legacy 2017-02-17 02:00:00 +01:00
Ken-Håvard Lieng
e6892ccd2d Use React.PureComponent instead of pure-render-decorator 2017-02-17 01:46:39 +01:00
Ken-Håvard Lieng
531792b14a Move ref callbacks into class bound methods 2017-02-16 22:56:32 +01:00
Ken-Håvard Lieng
77b53bfc5e Update client dependencies 2017-02-16 03:55:50 +01:00
Ken-Håvard Lieng
6876a5129a Add yarn lockfile 2016-10-12 21:19:00 +02:00
Ken-Håvard Lieng
493f49a508 Update client dependencies 2016-04-18 01:11:25 +02:00
Ken-Håvard Lieng
8b6236446f Remove html task from gulpfile 2016-03-16 23:25:25 +01:00
Ken-Håvard Lieng
240392dcae Use egon templating for the index page 2016-03-16 23:23:16 +01:00
Ken-Håvard Lieng
c6d2a8a429 Update react to 15.0 rc1 2016-03-14 23:45:46 +01:00
Ken-Håvard Lieng
81b635a872 Update client dependencies 2016-03-14 23:22:24 +01:00
Ken-Håvard Lieng
693e4c27ac Remove .js extension 2016-02-17 01:54:36 +01:00
Ken-Håvard Lieng
47ebd9c84c Use a fork of autolinker with react support to get rid off dangerouslySetInnerHTML 2016-02-17 01:49:27 +01:00
Ken-Håvard Lieng
072daa64f2 Improve message rendering 2016-02-16 22:43:25 +01:00
Ken-Håvard Lieng
ede8e19722 Enable react inline and constant babel optimizations 2016-02-07 00:03:11 +01:00
Ken-Håvard Lieng
23e75b8f40 Render UserList with react-virtualized 2016-02-06 01:54:21 +01:00
Ken-Håvard Lieng
7108fa572c Update client dependencies 2016-02-04 03:35:50 +01:00
Ken-Håvard Lieng
90b74ee022 Implement Content-Security-Policy 2016-02-03 19:44:44 +01:00
Ken-Håvard Lieng
e5bc38aafc Use local fonts 2016-02-03 02:22:45 +01:00
Ken-Håvard Lieng
e2fbac7f38 Use only single-method imports from lodash 2016-01-27 21:41:24 +01:00
Ken-Håvard Lieng
b50a4a1068 Add /raw command 2016-01-27 20:48:47 +01:00
Ken-Håvard Lieng
2e8418516a Dont send default server password to the client 2016-01-27 18:08:20 +01:00
Ken-Håvard Lieng
22d8b8b363 Embed servers, channels and users in index.html 2016-01-26 22:10:44 +01:00
Ken-Håvard Lieng
6608bc545a Make command output work in server tabs 2016-01-25 23:42:11 +01:00
Ken-Håvard Lieng
2ccca3a778 Implement client connect form defaults 2016-01-25 01:01:37 +01:00
Ken-Håvard Lieng
a68f5621bc Make search results look like messages 2016-01-23 00:41:35 +01:00
Ken-Håvard Lieng
bd6c0d26eb Switch to Roboto Mono 2016-01-22 20:08:16 +01:00
Ken-Håvard Lieng
82e2343d5b Add SOCKET_SEARCH action constant 2016-01-18 03:21:58 +01:00
Ken-Håvard Lieng
76f99c8332 Use MessagePack on disk 2016-01-17 23:33:52 +01:00
Ken-Håvard Lieng
d023f63a7c Update client dependencies 2016-01-15 20:56:03 +01:00
Ken-Håvard Lieng
fb54d4966c Store auth info in a JWT token in a cookie 2016-01-15 02:27:30 +01:00
Ken-Håvard Lieng
13a3d96b44 Improve port handling 2016-01-14 05:56:53 +01:00
Ken-Håvard Lieng
f6d13675c3 Strip port from address everywhere on the client 2016-01-14 04:01:51 +01:00
Ken-Håvard Lieng
d2284551de Properly check if a channel is selected in socket.on('join') 2016-01-13 20:22:41 +01:00
Ken-Håvard Lieng
f429a528ba Add IRC connection status indicator 2016-01-13 18:53:54 +01:00
Ken-Håvard Lieng
67b83fa3d6 Make userlist responsive 2016-01-11 23:31:06 +01:00
Ken-Håvard Lieng
937560e859 Add support for client certificates 2016-01-11 21:04:57 +01:00
Ken-Håvard Lieng
d7c5d0f9cd Upgrade babel to 6.4.0, fail gulp builds on webpack errors 2016-01-07 00:33:19 +01:00
Ken-Håvard Lieng
4b70b9968b Use proper autolinker params in ChatTitle 2016-01-05 19:40:39 +01:00
Ken-Håvard Lieng
24aa119377 Remove pure decorator from the Root container 2016-01-05 19:33:45 +01:00
Ken-Håvard Lieng
7c72cac71f Update airbnb eslint config to 3.0.0 2016-01-05 19:29:22 +01:00
Ken-Håvard Lieng
22892a4073 Hide menu when selecting tab 2015-12-30 22:32:14 +01:00
Ken-Håvard Lieng
de1a2dd343 Support websocket over ssl, pass uuid in url 2015-12-29 22:23:07 +01:00
Ken-Håvard Lieng
e389454535 Switch to redux and webpack 2015-12-29 00:34:32 +01:00
Ken-Håvard Lieng
d75407e221 Pin history 2015-12-12 00:51:04 +01:00
Ken-Håvard Lieng
0259787fe9 Update all client dependencies 2015-12-12 00:43:23 +01:00
Ken-Håvard Lieng
51e04c9d0f Update eslint 2015-12-11 05:13:44 +01:00
Ken-Håvard Lieng
114bf8201e Refactor websocket handler 2015-06-17 00:46:58 +02:00
Ken-Håvard Lieng
b755a593e2 Call trigger in messageStore.addAll() 2015-06-12 01:43:35 +02:00
Ken-Håvard Lieng
0fbf721cbb Fix search positioning 2015-06-10 01:17:24 +02:00
Ken-Håvard Lieng
2a5f7c3afc Close tablist on all interactions 2015-06-10 00:59:41 +02:00
Ken-Håvard Lieng
e51c9522de Add messageActions.addAll() 2015-06-10 00:45:28 +02:00
Ken-Håvard Lieng
29c13f4f54 Off-canvas tablist 2015-06-10 00:24:14 +02:00
Ken-Håvard Lieng
27552a2e9c Cache linted files 2015-06-08 01:06:08 +02:00
Ken-Håvard Lieng
fe392a08ff Collapse bindata tasks 2015-06-08 00:21:10 +02:00
Ken-Håvard Lieng
d11ad72f03 Separate vendor bundle 2015-06-08 00:11:03 +02:00
Ken-Håvard Lieng
be695a9881 Reconnect websockets 2015-06-04 02:06:17 +02:00
Ken-Håvard Lieng
6a1d55c968 Set up ESLint, make it happy 2015-06-02 00:09:36 +02:00
Ken-Håvard Lieng
61aa5880d3 Add config file, handle it with Viper, add a command to open it in an editor 2015-05-25 04:00:21 +02:00
Ken-Håvard Lieng
b8a8ba2e08 Add channel topic to ChatTitle, improve TabList layout 2015-05-23 04:38:43 +02:00
Ken-Håvard Lieng
9b9bef3695 Avoid array conversion in UserList 2015-05-23 01:58:56 +02:00
Ken-Håvard Lieng
6a6aedc5da Implement getInitialState in stores 2015-05-23 00:40:16 +02:00
Ken-Håvard Lieng
6a25c1d6a5 Add GetLastMessages, log messages to nested buckets 2015-05-21 09:15:57 +02:00
Ken-Håvard Lieng
a6d7403eba Everything is immutable 2015-05-20 08:14:44 +02:00
khlieng
ce72ec9c8c Fix alignment in PureMixin 2015-05-19 23:18:24 +02:00
Ken-Håvard Lieng
17482ee253 Immutable channelStore 2015-05-19 06:50:43 +02:00
khlieng
11ea241b60 Immutable messages, search and selectedTab 2015-05-19 01:17:23 +02:00
khlieng
77c723344c Fix state updating in ChatTitle and UserList 2015-05-16 22:25:22 +02:00
khlieng
d4d51778fb Make ChatTitle and UserList render functions pure 2015-05-16 21:43:18 +02:00
khlieng
c7faa254c5 Strip bindata path 2015-05-16 00:33:51 +02:00
Ken-Håvard Lieng
375ed94177 Remove unused dependency from package.json 2015-05-15 07:46:07 +02:00
Ken-Håvard Lieng
5a535cf53e Update client dependencies, embed only gzipped assets and unzip on the fly if needed 2015-05-15 07:32:32 +02:00
khlieng
c4ac9f782c Insert space between timestamp and nick instead of using margin 2015-05-15 00:42:09 +02:00
khlieng
0eca6a1823 Select the previous tab or redirect to /connect when closing a tab, move some CSS from inline react styles to classes 2015-05-14 01:42:25 +02:00
khlieng
92de7cb8ef Concat css 2015-05-12 23:50:55 +02:00
khlieng
6b6a1172f9 Keep url text intact when linkifying it 2015-05-12 22:50:35 +02:00
khlieng
7aae7685c5 Add early search prototype on the client, add leave button 2015-05-11 03:39:34 +02:00
khlieng
deba58dbff Use replaceState for /connect redirects 2015-05-05 00:46:12 +02:00
khlieng
e63c012aad Add cobra, move the server code into its own package 2015-05-01 22:59:46 +02:00
khlieng
bb729a5c8e Make gulp run go-bindata 2015-04-30 00:45:02 +02:00
khlieng
3365832ce3 Add message logging and search server side 2015-04-29 23:54:44 +02:00
khlieng
65229f7a9e Update readme, store data in homedir/.name_pending instead the cwd, move client build output back to client/dist 2015-04-23 00:44:40 +02:00
khlieng
891f7b2f10 Embed static assets with go-bindata 2015-04-22 22:58:20 +02:00
khlieng
8a75cdec32 Move client build output to bin/assets 2015-03-04 18:49:31 +01:00
khlieng
d25311d07f Improve line wrapping perf 2015-02-27 16:58:46 +01:00
khlieng
2f1e72876b Handle double hashtag channel names in URLs 2015-02-22 09:52:37 +01:00
khlieng
518a530f43 Render userlist to a div if theres only one user 2015-02-22 09:03:03 +01:00
khlieng
cc743a837a Store selected tab in the URL 2015-02-22 08:57:52 +01:00
khlieng
b83efcbb9e Add /help, make /part take an optional channel param 2015-02-21 14:11:29 +01:00
khlieng
ccb0149b3d Add /away 2015-02-21 13:06:05 +01:00
khlieng
ed9a1c3216 Handle characters getting added to the channelname when joining, throw more ES6 at everything 2015-02-21 11:40:20 +01:00
khlieng
fca2985d9b Sprinkle some ES6 on it 2015-02-21 07:48:25 +01:00
khlieng
518d3eaa07 Replace reactify with babelify 2015-02-21 07:23:25 +01:00
khlieng
4ae9ffa2bc Add clickable nicks in messages for starting private chats 2015-02-21 07:11:38 +01:00
khlieng
14dee89304 Make indenting lines after the first work with the new message rendering 2015-02-21 06:25:52 +01:00
khlieng
305ee753e3 Add keys to MessageBox 2015-02-19 01:13:23 +01:00
khlieng
2aeb8c97a3 Make styling work with the new message rendering 2015-02-18 22:55:08 +01:00
khlieng
9e301843d2 Linkify URLs in messages 2015-02-17 01:27:02 +01:00
khlieng
b06cfafe94 Remove unused css 2015-02-16 22:00:31 +01:00
khlieng
d8446d0b90 Fontello icon font 2015-02-16 21:53:01 +01:00
khlieng
fb77c29fd9 Make React Infinite stop throwing when theres only one child 2015-02-16 00:02:21 +01:00
khlieng
6e223c172f Initial pass on MessageBox rendered with React Infinite and js line wrapping, fix line wrapping bug, disable browser line wrapping 2015-02-15 23:27:00 +01:00
khlieng
3042ed5ec6 Add line wrapping functions and switch to monospaced font 2015-02-14 23:38:14 +01:00
khlieng
42e8f2547d Handle casing differences between join commands and actual channel names 2015-02-13 00:17:45 +01:00
khlieng
b7cafc5327 Made backspace work on input history items 2015-02-12 02:14:56 +01:00
khlieng
8a790a6fe2 Persist input history in localStorage 2015-02-11 02:48:28 +01:00
khlieng
1faf310ebd Added chat input history navigable by the arrow keys 2015-02-11 02:37:28 +01:00
khlieng
21160be407 Chat input autofocus 2015-02-10 02:39:19 +01:00
khlieng
ed09a97ade Added /whois, /invite, /kick, /msg and /say 2015-02-10 02:25:28 +01:00
khlieng
5df364a3a4 Improved state updates when parting and quitting 2015-02-09 02:06:24 +01:00
khlieng
99ef788906 Added /quit, the server IRC client gets cleaned up properly when quitting, pulled command handling out into a separate file 2015-02-09 01:00:30 +01:00
khlieng
d11aa3ff4e Redirect to /connect if its a fresh instance with no stored UUID 2015-02-08 02:07:56 +01:00
khlieng
c15feaa310 Added more options to the connect form, added support for more IRC commands on the server, added Font Awesome 2015-02-07 03:10:58 +01:00
khlieng
e942924c15 Nick changes get handled properly by the server IRC client, user count stays hidden when the selected tab is not a channel 2015-02-07 00:16:51 +01:00
khlieng
0a47f2ae4a Cleaned TabList up by pulling stuff out into TabListItem, userlist resize listener gets removed on unmount 2015-02-06 02:32:25 +01:00
khlieng
806f9aae27 Render userlist with react-infinite 2015-02-05 02:14:24 +01:00
khlieng
5110029f3a Gzipped assets 2015-02-05 01:37:34 +01:00
khlieng
92c316e9ea Added /nick and /topic 2015-02-04 02:43:49 +01:00
khlieng
ad4354adfc Added support for IRC actions 2015-02-04 00:55:41 +01:00
khlieng
d69281cdd6 Trailing gets added to the end of params 2015-02-03 23:33:23 +01:00
khlieng
3214e5931a Added connect form, autoselect when joining channels 2015-02-03 22:54:46 +01:00
khlieng
0b8e97b215 Started doing client-side routing, added some rewriting on the server to support it 2015-02-03 00:25:52 +01:00