Commit graph

345 commits

Author SHA1 Message Date
Michael Telatynski
d3f872bf7a Merge branches 'develop' and 't3chguy/remove_bluebird' of github.com:matrix-org/matrix-react-sdk into t3chguy/remove_bluebird 2019-11-21 11:15:32 +00:00
Travis Ralston
fd12eb28e7 Move many widget options to a context menu
Part of https://github.com/vector-im/riot-web/issues/11262
2019-11-20 19:17:42 -07:00
Travis Ralston
62a2c7a51a Re-add encryption warning to widget permission prompt 2019-11-20 16:26:06 -07:00
Michael Telatynski
6121420113
Merge branch 'develop' into t3chguy/remove_bluebird 2019-11-20 15:21:23 +00:00
Travis Ralston
b185eed462 Wire up the widget permission prompt to the cross-platform setting
This doesn't have any backwards compatibility with anyone who has already clicked "Allow". We kinda want everyone to read the new prompt, so what better way to do it than effectively revoke all widget permissions?

Part of https://github.com/vector-im/riot-web/issues/11262
2019-11-18 17:56:33 -07:00
Michael Telatynski
d4d51dc61f Rip out the remainder of Bluebird 2019-11-18 10:03:05 +00:00
Travis Ralston
6b726a8e13 Implement the bulk of the new widget permission prompt design
Part 1 of https://github.com/vector-im/riot-web/issues/11262

This is all the visual changes - the actual wiring of the UI to the right places is for another PR (though this PR still works independently).

The help icon is known to be weird here - it's a bug in the svg we have. The tooltip also goes right instead of up because making the tooltip go up is not easy work for this PR - maybe a future one if we *really* want it to go up.
2019-11-15 14:26:16 -07:00
Michael Telatynski
168b1b68bb Revert "s/.done(/.then(/ since modern es6 track unhandled promise exceptions"
This reverts commit 09a8fec2
2019-11-12 11:56:21 +00:00
Michael Telatynski
09a8fec261 s/.done(/.then(/ since modern es6 track unhandled promise exceptions 2019-11-12 11:51:23 +00:00
Travis Ralston
e46976be72 Match widgets up with their integration manager 2019-10-29 11:49:15 -06:00
Michael Telatynski
a782baf510 React error/warning cleanup
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2019-10-08 12:10:37 +01:00
Travis Ralston
838e115b72
Merge pull request #3338 from matrix-org/t3chguy/fix_jitsi_persisted_breaking_randomly
Only Destroy the expected persistent widget, not *ANY*
2019-08-28 10:49:29 -06:00
Travis Ralston
b3cda4b19a Support multiple integration managers behind a labs flag
Fixes https://github.com/vector-im/riot-web/issues/10622
Implements [MSC1957](https://github.com/matrix-org/matrix-doc/pull/1957)

Design is not final.
2019-08-23 09:12:40 -06:00
Michael Telatynski
cd6a980c7e Only Destroy the expected persistent widget, not *ANY*
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2019-08-22 16:57:51 +01:00
Jason Robinson
29085895a7 Fix regression on widget panel edit button
Due to commit ffa49df889
the parameters for the call to open a widget in edit mode from the
widget panel in a room has broken. The `screen` parameter needs
to be prefixed with `type_` as it was before.

This corresponds to parameters supplied when creating the URL when
opening a widget in edit mode through Scalar screens.

Signed-off-by: Jason Robinson <jasonr@matrix.org>
2019-08-20 15:55:57 +03:00
David Baker
4afed0fab4
Merge pull request #3313 from matrix-org/t3chguy/fix_jitsi_persisted_breaking_randomly
Fix Persisted Widgets (Jitsi) randomly closing on room change
2019-08-15 10:52:24 +01:00
Michael Telatynski
7b17ea1fa5 Fix Persisted Widgets (Jitsi) randomly closing on room change
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2019-08-14 23:15:49 +01:00
Travis Ralston
ffa49df889 Refactor integration manager handling into a common place
It was already in a common place, but this is the boilerplate for supporting multiple integration managers, and multiple integration manager sources. 

For https://github.com/vector-im/riot-web/issues/4913 / https://github.com/vector-im/riot-web/issues/10161
2019-08-09 16:08:06 -06:00
David Baker
2eb8a8879b
Merge pull request #3199 from matrix-org/dbkr/terms
ToS for ISes/IMs: prompt on use screen
2019-07-23 10:32:11 +01:00
J. Ryan Stinnett
09c2d899ac Defer IM token until widget is shown and permission granted
This defers the work to request the IM token when displaying a widget until
after we know that widget will actually be shown and the user has granted
permission for this widget to be displayed.

This is useful in general to avoid making unnecessary token checks, but it's
particularly helpful with the new Terms API, so that we only show the Terms flow
when widget are actually being used (as opposed to entering the room where
widgets exist, but haven't been shown / permitted).

Part of https://github.com/vector-im/riot-web/issues/10088
2019-07-22 11:50:54 +01:00
David Baker
d4af8d4993 Use showIntegrationsManager in other places 2019-07-09 18:56:39 +01:00
Travis Ralston
8f6e8c1ec7 Appease the linter 2019-06-17 15:51:14 -06:00
Travis Ralston
d2d0cb2e9e Port AppTile (widgets) over to new integration manager dialog props 2019-06-17 15:34:30 -06:00
Travis Ralston
51750cf153 General cleanup of handling for WidgetMessaging instances
When setting, delete the old one. Because delete checks if it exists first, we can safely call this.

The change in FromWidgetPostMessageApi is just something noticed while debugging.
2019-04-01 19:50:05 -06:00
David Baker
1fe830d1c6 Remove noreferrer on widget pop-out
Having the referrer allows widgets to do customisation based on what
riot instance is embedding it. It gets a referrer when we embed it
in the iframe so there's nothing gained by suppressing it here.
2019-03-27 13:27:57 +00:00
Travis Ralston
ddcb7a68bd
Merge pull request #2781 from matrix-org/travis/openid-widget
Widget OpenID reauth implementation
2019-03-27 03:42:39 -06:00
Travis Ralston
a8ae63bb06 Minimize stickerpicker when the title is clicked
Fixes https://github.com/vector-im/riot-web/issues/6437

This also fixes a bug where if the room had apps open and you clicked the sticker picker's title, you'd end up closing the apps and not the picker.
2019-03-23 23:50:06 -06:00
Travis Ralston
3654c895eb Appease the linter 2019-03-23 23:31:19 -06:00
Travis Ralston
2dcb40f1be Track OpenID automatic permissions by (widgetLocation, widgetUrl) 2019-03-23 23:25:31 -06:00
Travis Ralston
b68960ad26 Reload widget messaging when widgets reload
Fixes a bug for some widgets where they cannot do their startup routine (capabilities negotiation, etc) when someone maximizes the widget. By reloading the widget messaging, we ensure the widget is kept in the loop.
2019-03-15 22:24:27 -06:00
Jason Robinson
02ff1763a2 Ensure scalar_token is valid before opening integrations manager
Since Scalar (and other integration managers) are loaded as apps into
an iframe, a valid `scalar_token` must exist when loading the app.

It is possible that a scalar_token becomes invalid between the time
when the integration manager button was rendered and the user clicking
the link. Here we make a call to integration manager `/account`
before trying to render the integration manager, which ensures we
have a valid token for the integration manager to work with.

Moving the scalar token revalidation to the cases where it is actually
needed could make it possible to decrease the amount of Scalar /account
calls we do when switching rooms, which is currently 3.

Signed-off-by: Jason Robinson <jasonr@matrix.org>
2019-03-13 11:47:00 +02:00
Bruno Windels
f189ff54a8 hide delete & cancel button on stickers are they weren't visible before 2019-02-12 17:01:05 +01:00
Bruno Windels
6d2e582083 fix lint 2019-02-02 07:46:52 +01:00
Bruno Windels
e2ce12f5c1 wip 2019-02-01 23:15:14 +01:00
J. Ryan Stinnett
20e296b20e Convert image URLs in React to require calls
This allows Webpack to insert the proper image URL after builds steps like
adding a hash and so on. The path you supply to `require` is relative to the JS
source file, just like any other would be.
2019-01-17 22:06:49 -06:00
David Baker
1ca91370f3
Merge pull request #2372 from matrix-org/dbkr/electron_sandbox
React-sdk changes to support sandboxed electron
2018-12-19 09:48:05 +00:00
David Baker
3a8b9ab850 unused import 2018-12-18 17:57:23 +00:00
David Baker
37b3644fd9 React-sdk changes to support sandboxed electron 2018-12-18 17:40:30 +00:00
Willem Mulder
d304c35b38 Allow widgets to autoplay media
This is useful for e.g. webcam streams in widgets.

Signed-off-by: Willem Mulder <willemmaster@hotmail.com>
2018-12-18 00:43:37 +00:00
Travis Ralston
aaeb6e4978 Use about:blank instead 2018-10-25 15:59:42 -06:00
Travis Ralston
7ef08314b8 Redirect widgets to another location before deleting them
This is so that shutdown hooks in the widget can correctly fire, such as Jitsi's hook to abandon its hold on the webcam.

Fixes https://github.com/vector-im/riot-web/issues/7351
2018-10-19 16:23:19 -06:00
Travis Ralston
c75beb0196 Revert "Redirect widgets to another location before deleting them"
This reverts commit 275d88dd4f.
2018-10-19 16:22:48 -06:00
Travis Ralston
275d88dd4f Redirect widgets to another location before deleting them
This is so that shutdown hooks in the widget can correctly fire, such as Jitsi's hook to abandon its hold on the webcam.

Fixes https://github.com/vector-im/riot-web/issues/7351
2018-10-19 16:22:20 -06:00
David Baker
e3643bd74c Lint 2018-08-17 09:42:23 +01:00
David Baker
7875d37c8e Destroy non-persistent widgets when switching room 2018-08-01 15:01:11 +01:00
David Baker
7044410a13 Move destroyPersistentWidget to store 2018-07-24 16:50:34 +01:00
David Baker
6804647dda Destroy widget when its permission is revoked 2018-07-23 17:11:53 +01:00
David Baker
4f8ece53b2 Fix CSS naming 2018-07-23 15:58:07 +01:00
David Baker
5adcd673ab Fix persisent apps being the wrong size 2018-07-23 15:08:17 +01:00
David Baker
00f78822c5 Fix widgets resetting when going to the top-left
Remove the hash from the parentUrl because this change when we
change rooms.
2018-07-23 13:50:16 +01:00
Bruno Windels
6f278ceab0
Merge pull request #2071 from matrix-org/dbkr/persistedelement_border
Fix border around persisted widgets
2018-07-20 12:23:02 +01:00
David Baker
f868cd6699 Fix border around persisted widgets
The PersistedElement had zero height so the border ended up in the
wrong place. Add a wrapper to fix the height back.

Fixes https://github.com/vector-im/riot-web/issues/7030
Fixes https://github.com/vector-im/riot-web/issues/7029
2018-07-18 11:52:57 +01:00
David Baker
7aab6fa6f1 Merge remote-tracking branch 'origin/develop' into dbkr/widget_echo 2018-07-18 09:35:57 +01:00
David Baker
4c6419a3c5 Merge remote-tracking branch 'origin/develop' into dbkr/widget_echo 2018-07-16 13:24:13 +01:00
David Baker
e56feea9ec Put always-on-screen widgets in top left
always-on-screen widgets now appear in the top-left where the
call preview normally is if you're not in the room that they're in.

Fixes https://github.com/vector-im/riot-web/issues/7007
Based off https://github.com/matrix-org/matrix-react-sdk/pull/2053
2018-07-12 18:43:49 +01:00
David Baker
8f10ee01c6 Implement always-on-screen capability for widgets
As per https://github.com/matrix-org/matrix-doc/issues/1354

This is whitelisted to only jitsi widgets for now as per comment,
mostly because any widget that we may make always-on-screen we need
to preemptively put in a PersistedElement container, which is
unnecessary for any other widget.

Apologies that this does a bunch of refactoring which could have
been split out separately: I only discovered what needed to be
refactored in the process of doing this.

Fixes https://github.com/vector-im/riot-web/issues/6984
2018-07-11 18:07:32 +01:00
David Baker
c665ab8a22 Add error dialog if widget remove fails
Also up the timeout because matrix.org is that slow
2018-07-03 11:55:41 +01:00
David Baker
c780cd05a8 Change argument order of setRoomWidget
So when deleting a widget we can just omit the ones we don't need
2018-06-26 16:33:28 +01:00
David Baker
a88297d7a6 More code reuse 2018-06-26 16:27:17 +01:00
David Baker
6cf11a15e6 Move WidgetUtils to utils dir 2018-06-26 11:59:16 +01:00
David Baker
94125fb566 Fix widgets re-appearing after being deleted
Widgets would sometimes briefly re-appear after having been deleted.
This was because of the following race:
 * User presses delete, send POST req, we set `deleting`. Widget hides.
 * POST request completes, we unset `deleting` so widget unhides.
 * State event comes down sync so widget hides again.

This fixes this by introducing `waitForRoomWidget` and using it to
wait until the state event comes down the sync until clearing the
`deleting` flag.

Since we now have `waitForRoomWidget`, this also uses it when adding
a widget so the 'widget saved' appears at the same time the widget
does.
2018-06-13 15:50:19 +01:00
Travis Ralston
254e8c358a Remove unused imports
Signed-off-by: Travis Ralston <travpc@gmail.com>
2018-05-28 11:38:09 -06:00
Travis Ralston
98613748b6 Move Scalar Widget URL check to WidgetUtils
Signed-off-by: Travis Ralston <travpc@gmail.com>
2018-05-27 11:12:55 -06:00
Richard Lewis
b2c26e6984
Merge pull request #1920 from matrix-org/rxl881/refreshWidget
Add a "reload widget" button.
2018-05-24 18:11:22 +01:00
Richard Lewis
9753ee8d82 Better check of jitsi widget message origin. 2018-05-24 16:14:18 +01:00
Richard Lewis
a13d58f6c2 More thorough check of IM URL validity. 2018-05-24 14:58:59 +01:00
Richard Lewis
6df3371c6c Add a "reload widget" button. 2018-05-22 19:14:54 +01:00
Luke Barnard
49a3770e92 Merge branch 'release-v0.12.4' into develop 2018-05-14 14:31:18 +01:00
Luke Barnard
cf8077e605 Set loading: false when iFrame finishes loading 2018-05-14 11:42:38 +01:00
Luke Barnard
6345e474f5 Remove unused conditional 2018-05-14 11:38:17 +01:00
Travis Ralston
9e11720191 Add setting to enable widget screenshots (if widgets declare support)
Fixes the remainder of https://github.com/vector-im/riot-web/issues/6708

Signed-off-by: Travis Ralston <travpc@gmail.com>
2018-05-12 14:30:59 -06:00
Luke Barnard
9c5c5e282b Send visibility only when changed, and messaging is available 2018-05-11 18:20:23 +01:00
Luke Barnard
a419056040 Delinting 2018-05-11 18:20:14 +01:00
Luke Barnard
06919e22d6 When stickerpicker made visible, send visibility over postMessage 2018-05-11 18:20:00 +01:00
Luke Barnard
bd0301c666 Add API to send visibiliy actions to widgets 2018-05-11 18:17:55 +01:00
Luke Barnard
06898394eb Send visibility only when changed, and messaging is available 2018-05-11 18:06:58 +01:00
Luke Barnard
1f2f3474ed Delinting 2018-05-11 17:28:12 +01:00
Luke Barnard
8b049b2182 When stickerpicker made visible, send visibility over postMessage 2018-05-11 16:51:03 +01:00
Luke Barnard
4b6378a80d Add API to send visibiliy actions to widgets 2018-05-11 16:22:54 +01:00
Luke Barnard
770e2d400e Improve appearance of short-lived app loading spinner
by hiding it for 500ms - thereby only showing it if the loading is
taking a long time.
2018-05-09 17:28:41 +01:00
Luke Barnard
97b9316ec7 Fix issue incorrect positioning with widget loading indicator
by making sure to apply the correct CSS class to the parent
2018-05-09 17:28:18 +01:00
Luke Barnard
0c1846630c Improve appearance of short-lived app loading spinner
by hiding it for 500ms - thereby only showing it if the loading is
taking a long time.
2018-05-09 16:54:01 +01:00
Luke Barnard
bcf003757c
Merge pull request #1884 from matrix-org/luke/fix-glitchy-widget-spinner
Fix issue incorrect positioning with widget loading indicator
2018-05-09 16:52:11 +01:00
Luke Barnard
59cbaf67bb Fix issue incorrect positioning with widget loading indicator
by making sure to apply the correct CSS class to the parent
2018-05-09 15:48:53 +01:00
Richard Lewis
8e1ba6d139 Always allow users to edit their user widgets. 2018-05-08 22:44:49 +01:00
Richard Lewis
b2d6dd8f6e Optionally hide widget popout button. 2018-04-25 16:28:27 +01:00
Richard Lewis
0f0e89d394 Add a button to 'pop out' widgets in to their own tab. 2018-04-25 12:49:30 +01:00
Richard Lewis
a41384a994 Fix function binding. 2018-04-04 23:45:47 +01:00
Richard Lewis
aefccb134c Ensure deleting is set to false. 2018-03-29 16:56:25 +01:00
Richard Lewis
4ac9653ab9 Refactor widget postMessage API. 2018-03-28 12:22:06 +01:00
Richard Lewis
4d8f5072f7 Allow react performance profiling on widget iframes. 2018-03-16 10:20:14 +00:00
Richard Lewis
66ea78de65 Clean up whitelisted permission addition / logging. 2018-03-13 11:59:15 +00:00
Richard Lewis
8b311c706c Null guard widget listener 2018-03-13 11:58:47 +00:00
Richard Lewis
f820374f9f Logging. 2018-03-13 11:01:51 +00:00
Richard Lewis
de33294000 Center loading spinner. 2018-03-13 10:07:49 +00:00
Richard Lewis
b2d23b6999 Switch to 'm.sticker' message events. Allow whitelisting of wisget capabilities. 2018-03-12 13:56:02 +00:00
Richard Lewis
fdec4b36c9 Hide padding if last control. 2018-03-08 17:25:28 +00:00
Richard Lewis
3ab8b1f866 Hide sticker picker delete button and show minimise button. 2018-03-08 17:20:42 +00:00
Richard Lewis
2b0790b32b Fix PropTypes. 2018-02-25 22:36:59 +00:00
Richard Lewis
b2bf4d4709 Merge branch 'develop' of https://github.com/matrix-org/matrix-react-sdk into rxl881/snapshot 2018-02-23 15:37:33 +00:00
Richard Lewis
d755b8284c Remove logging and cleanup. 2018-02-23 15:22:56 +00:00
Richard Lewis
13bebd69c9 Made comment "react-style". 2018-02-21 23:35:57 +00:00
Richard Lewis
ecde099146 Fix typo. 2018-02-21 23:24:53 +00:00
Richard Lewis
7e8660cd37 Add comment for "is" attribute. 2018-02-21 23:23:44 +00:00
Richard Lewis
ffb524b6a5 Allow widget iframes to request camera and microphone permissions. 2018-02-21 23:10:08 +00:00
Richard Lewis
9e3c1fbc7a Pass room name. 2018-02-09 11:44:27 +00:00
Richard Lewis
5e30468a00 Linting 2018-02-07 14:48:43 +00:00
Richard Lewis
7b75dbbd15 Use default AppTile menu bar. 2018-02-07 14:44:01 +00:00
Richard Lewis
23bef68a8f Fix duplicate message listeners 2018-01-18 13:16:06 +00:00
Richard Lewis
1293c53c4b Cleanup 2018-01-18 12:02:45 +00:00
Richard Lewis
3331c8af27 Use dispatcher ref for unregister call. 2018-01-17 15:40:04 +00:00
Richard Lewis
5e6da4d758 * Fix key error
* Remove redundant logging
* Catch error
2018-01-15 14:22:41 +00:00
Richard Lewis
1ab71f6f50 Load stickers in AppTile 2018-01-11 13:20:58 +00:00
Richard Lewis
4f3670941d Bind functions 2018-01-11 12:33:02 +00:00
Richard Lewis
d0c16fa7a1 Convert to ES6 class. 2018-01-11 11:49:46 +00:00
Richard Lewis
0577316c86 Fix duplicate event registration. 2018-01-08 13:40:33 +00:00
Richard Lewis
dc1423052f De-register listener. 2018-01-08 11:32:23 +00:00
Richard Lewis
54d128658e Comment logging. 2018-01-04 23:00:10 +00:00
Richard Lewis
d20aebfbd7 Correctly handle sticker message events. 2018-01-04 18:58:55 +00:00
Richard Lewis
eb4053bc99 Handle sticker message payloads 2018-01-04 18:41:47 +00:00
Richard Lewis
a408b98504 Set widget ID on WidgetMessaging instance. 2017-12-29 14:34:52 +00:00
Richard Lewis
7660176079 Fix comment linting errors.
Stop listening and cleanup endpoints correctly.
2017-12-28 22:27:12 +00:00
Aidan Gauland
35780f5ae0 Remove use of deprecated React.PropTypes
Replace all uses of React.PropTypes with PropTypes and importing PropTypes from
'prop-types'.
2017-12-26 14:03:18 +13:00
Richard Lewis
baf472b4a3 Only show snapshot button when apps are maximised. 2017-12-19 17:16:38 +00:00
Richard Lewis
08bcfc5c4e Make sure that capabilities array is initialised. 2017-12-19 17:15:06 +00:00
Richard Lewis
83f9a4162b Request capabilities (e.g. ability to take snapshots) from widgets. 2017-12-16 09:16:24 +00:00
Richard Lewis
e63f5696a6 Screenshot handlers 2017-12-15 21:36:02 +00:00
Richard Lewis
f2ad7be3f3 Add event handlers and comments. 2017-12-15 16:56:02 +00:00
Richard Lewis
f410112983 Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into rxl881/snapshot 2017-12-15 10:18:56 +00:00
Richard Lewis
c739269777 Update widget title on edit. 2017-12-13 10:14:26 +00:00
Richard Lewis
c93266b6af Merge branch 'develop' of https://github.com/matrix-org/matrix-react-sdk into rxl881/titleBar 2017-12-11 13:08:49 +00:00
Richard Lewis
24db57bfb6 Fix api prefix. 2017-12-08 18:47:00 +00:00
Matthew Hodgson
f2d68e4601
Merge pull request #1649 from matrix-org/rxl881/titleBar
Add maximize / minimize apps drawer icons.
2017-12-08 19:18:45 +01:00
Richard Lewis
20917e1a07 Set page title from widget data, if available. 2017-12-08 15:12:48 +00:00
Richard Lewis
ed675fe791 Allow bypass of widget loading screen on hide / show. 2017-12-06 22:54:32 +00:00
Richard Lewis
e20db416f2 Add field to bypass riot widget loading screen. 2017-12-06 16:44:41 +00:00
Richard Lewis
3206527d73 Remove logging. 2017-12-05 21:59:44 +00:00
Richard Lewis
7f86ed35a3 Only show custom title if different from app name. 2017-12-05 21:49:11 +00:00
Richard Lewis
1415a83a61 Merge branch 'rxl881/titleBar' of https://github.com/matrix-org/matrix-react-sdk into rxl881/customTitle 2017-12-05 21:42:47 +00:00
Richard Lewis
d5d5397959 Set custom widget title. 2017-12-05 21:41:44 +00:00
Richard Lewis
9fd8deb16d Add maximize / minimize apps drawer icons. 2017-12-05 18:18:51 +00:00
Richard Lewis
49a2985515 Register message endpoints.
Store endpoint origins only.
2017-12-05 00:08:17 +00:00
Richard Lewis
c9b8aab0e0 Workings for future posterity - Can't access iframe content from parent. iframe needs to initiate. Postmessage data up the stack. 2017-12-03 19:44:59 +00:00
Richard Lewis
3a89b90e57 Add stub handler for image snapshot 2017-12-03 11:25:15 +00:00
Richard Lewis
5ff5ca4705 Remove logging and broken title fetching functions. 2017-11-30 14:50:30 +00:00
Richard Lewis
2cfbbb000e Refactor messaging listerners. 2017-11-30 10:20:29 +00:00
Richard Lewis
4f5f44ff38 Add widget postmessage API stub. 2017-11-29 22:16:22 +00:00
Luke Barnard
dad797d4a2 Run linting --fix 2017-11-16 13:19:36 +00:00
Richard Lewis
750e64deee Pass required props to TintableSvg. 2017-11-15 15:17:21 +00:00
Richard Lewis
59d405d4fa Use TintableSvgButtons for widget menubar icons. 2017-11-15 13:24:38 +00:00