Compare commits

...

138 Commits
v2.0 ... 3.0

Author SHA1 Message Date
David Ralph
a17ce90e07 Final
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
2020-07-19 21:16:13 +01:00
David Ralph
3f6aea4ae4 update readme 2020-07-19 18:49:59 +01:00
David Ralph
563804c415 work
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
2020-07-19 13:27:44 +01:00
David Ralph
7c055d6aff More Settings
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
2020-07-18 22:00:34 +01:00
David Ralph
3e80586620 Progress
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
Co-authored-by: Isaac Saunders <contact@eartharoid.me>
2020-07-17 23:46:01 +01:00
David Ralph
0464afea27 soon
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
Co-authored-by: Wessel Tip <discord@go2it.eu>
2020-07-17 15:28:59 +01:00
David Ralph
298a7da3b7 wessel pls 2020-07-16 21:38:43 +01:00
David Ralph
9c7bfafa23 Fix Clock
Co-authored-by: Wessel Tip <discord@go2it.eu>
2020-07-16 20:02:26 +01:00
David Ralph
752ce62f24 Merge branch 'master' of https://github.com/mue/mue 2020-07-16 17:41:03 +01:00
David Ralph
f458a69781 Work more on settings and update modal etc
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
Co-authored-by: Wessel Tip <discord@go2it.eu>
2020-07-16 17:40:24 +01:00
David Ralph
e967cebdc8 Merge pull request #91 from mue/dependabot/npm_and_yarn/material-ui/core-4.11.0
Bump @material-ui/core from 4.10.0 to 4.11.0
2020-07-16 11:46:36 +01:00
David Ralph
d9a4c76a8e Merge branch 'master' of https://github.com/mue/mue 2020-07-16 11:46:09 +01:00
David Ralph
771b374a0b it works now 2020-07-16 11:45:48 +01:00
dependabot-preview[bot]
10d11a39c6 Bump @material-ui/core from 4.10.0 to 4.11.0
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.10.0 to 4.11.0.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/v4.11.0/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.11.0/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-16 07:10:39 +00:00
David Ralph
2e36a58b78 Update README.md 2020-07-15 21:24:48 +01:00
David Ralph
2283492c2c why
oops
2020-07-15 21:24:24 +01:00
David Ralph
0d017fa362 oops 2020-07-15 21:22:23 +01:00
David Ralph
0c6022aa2d Settings! (Almost finished)
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
Co-authored-by: Wessel Tip <discord@go2it.eu>
2020-07-15 21:06:21 +01:00
David Ralph
da5a4da97b improve mue building 2020-06-19 21:01:10 +01:00
David Ralph
69189fce79 Merge pull request #86 from mue/dependabot/npm_and_yarn/eslint-7.1.0
Bump eslint from 6.8.0 to 7.1.0
2020-05-30 13:31:39 +01:00
David Ralph
93b90eda5d Merge pull request #85 from mue/dependabot/npm_and_yarn/material-ui/core-4.10.0
Bump @material-ui/core from 4.9.14 to 4.10.0
2020-05-30 13:31:31 +01:00
dependabot-preview[bot]
10738a5f8b Bump eslint from 6.8.0 to 7.1.0
Bumps [eslint](https://github.com/eslint/eslint) from 6.8.0 to 7.1.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v6.8.0...v7.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 07:24:58 +00:00
dependabot-preview[bot]
d8620b64de Bump @material-ui/core from 4.9.14 to 4.10.0
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.14 to 4.10.0.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.10.0/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 07:23:45 +00:00
David Ralph
d0874f7f6a Merge pull request #84 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.14
Bump @material-ui/core from 4.9.12 to 4.9.14
2020-05-12 09:25:05 +01:00
dependabot-preview[bot]
99c3a0525c Bump @material-ui/core from 4.9.12 to 4.9.14
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.12 to 4.9.14.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.14/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 07:23:05 +00:00
David Ralph
88cc56d9d4 Merge pull request #81 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.12
Bump @material-ui/core from 4.9.11 to 4.9.12
2020-04-28 10:05:29 +01:00
dependabot-preview[bot]
aa600ba8c9 Bump @material-ui/core from 4.9.11 to 4.9.12
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.11 to 4.9.12.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.12/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-27 07:33:31 +00:00
David Ralph
69b3a983db webp support for api 2020-04-22 15:22:22 +01:00
David Ralph
148c38085a Merge pull request #79 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.10
Bump @material-ui/core from 4.9.9 to 4.9.10
2020-04-13 10:50:07 +01:00
dependabot-preview[bot]
dc5757f7db Bump @material-ui/core from 4.9.9 to 4.9.10
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.9 to 4.9.10.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.10/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-13 07:24:47 +00:00
David Ralph
6a7ecd005e Merge pull request #78 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.9
Bump @material-ui/core from 4.9.8 to 4.9.9
2020-04-06 09:09:42 +01:00
dependabot-preview[bot]
839d7bab79 Bump @material-ui/core from 4.9.8 to 4.9.9
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.8 to 4.9.9.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.9/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-06 07:49:40 +00:00
David Ralph
da4e1cbc81 Optimise the code and add a test for something 2020-04-03 19:42:46 +01:00
David Ralph
127045bbf6 revert 2020-03-31 11:38:33 +01:00
David Ralph
267d38f06e Merge pull request #77 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.8
Bump @material-ui/core from 4.9.7 to 4.9.8
2020-03-30 10:49:32 +01:00
dependabot-preview[bot]
7db55dddbd Bump @material-ui/core from 4.9.7 to 4.9.8
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.7 to 4.9.8.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.8/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-30 07:37:09 +00:00
David Ralph
6970984941 Merge pull request #76 from mue/dependabot/npm_and_yarn/react-scripts-3.4.1
Bump react-scripts from 3.4.0 to 3.4.1
2020-03-23 12:54:29 +00:00
dependabot-preview[bot]
2ad283abb8 Bump react-scripts from 3.4.0 to 3.4.1
Bumps [react-scripts](https://github.com/facebook/create-react-app/tree/HEAD/packages/react-scripts) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/facebook/create-react-app/releases)
- [Changelog](https://github.com/facebook/create-react-app/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/create-react-app/commits/react-scripts@3.4.1/packages/react-scripts)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-23 07:48:23 +00:00
David Ralph
8091fc7dbd Merge branch 'master' of https://github.com/mue/mue 2020-03-20 22:19:19 +00:00
David Ralph
4054b10714 remove useless code to fix an error 2020-03-20 22:19:07 +00:00
David Ralph
b5ef757a00 Merge pull request #75 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.7
Bump @material-ui/core from 4.9.5 to 4.9.7
2020-03-20 22:02:11 +00:00
David Ralph
389a8bfdb8 add april fools 2020-03-20 21:56:42 +00:00
dependabot-preview[bot]
f54ce58b21 Bump @material-ui/core from 4.9.5 to 4.9.7
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.5 to 4.9.7.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/HEAD/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-19 07:16:44 +00:00
David Ralph
20b33346d0 Merge pull request #72 from mue/dependabot/npm_and_yarn/react-scripts-3.4.0
Bump react-scripts from 3.3.1 to 3.4.0
2020-03-02 09:22:20 +00:00
David Ralph
8843fac900 Merge branch 'master' into dependabot/npm_and_yarn/react-scripts-3.4.0 2020-03-02 09:18:37 +00:00
David Ralph
bb4760d2c9 Merge pull request #74 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.5
Bump @material-ui/core from 4.9.4 to 4.9.5
2020-03-02 09:18:27 +00:00
dependabot-preview[bot]
48e4e50fc7 Bump @material-ui/core from 4.9.4 to 4.9.5
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.4 to 4.9.5.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.5/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 07:36:59 +00:00
David Ralph
e396ba2465 Merge branch 'master' into dependabot/npm_and_yarn/react-scripts-3.4.0 2020-02-29 14:24:48 +00:00
David Ralph
2ee44a6e18 Merge pull request #73 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.4
Bump @material-ui/core from 4.9.3 to 4.9.4
2020-02-24 07:40:06 +00:00
dependabot-preview[bot]
ad094ccfdc Bump @material-ui/core from 4.9.3 to 4.9.4
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.3 to 4.9.4.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.4/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 07:22:56 +00:00
David Ralph
5c5ec92eb6 Merge branch 'master' into dependabot/npm_and_yarn/react-scripts-3.4.0 2020-02-17 10:56:47 +00:00
David Ralph
2857c13434 Merge pull request #71 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.3
Bump @material-ui/core from 4.9.1 to 4.9.3
2020-02-17 10:56:27 +00:00
dependabot-preview[bot]
9cb00fffba Bump react-scripts from 3.3.1 to 3.4.0
Bumps [react-scripts](https://github.com/facebook/create-react-app/tree/HEAD/packages/react-scripts) from 3.3.1 to 3.4.0.
- [Release notes](https://github.com/facebook/create-react-app/releases)
- [Changelog](https://github.com/facebook/create-react-app/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/create-react-app/commits/react-scripts@3.4.0/packages/react-scripts)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-17 07:23:51 +00:00
dependabot-preview[bot]
b6907a5aa0 Bump @material-ui/core from 4.9.1 to 4.9.3
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.1 to 4.9.3.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.3/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-17 07:23:00 +00:00
David Ralph
45af502520 Merge pull request #69 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.1
Bump @material-ui/core from 4.9.0 to 4.9.1
2020-02-03 10:02:19 +00:00
dependabot-preview[bot]
e05d65401e Bump @material-ui/core from 4.9.0 to 4.9.1
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.9.0 to 4.9.1.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.1/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-03 07:31:46 +00:00
David Ralph
2ab09ff582 Update package.json 2020-01-31 17:57:33 +00:00
David Ralph
c871512e87 Merge pull request #68 from mue/dependabot/npm_and_yarn/react-scripts-3.3.1
Bump react-scripts from 3.3.0 to 3.3.1
2020-01-31 17:57:00 +00:00
dependabot-preview[bot]
f821cf2314 Bump react-scripts from 3.3.0 to 3.3.1
Bumps [react-scripts](https://github.com/facebook/create-react-app/tree/HEAD/packages/react-scripts) from 3.3.0 to 3.3.1.
- [Release notes](https://github.com/facebook/create-react-app/releases)
- [Changelog](https://github.com/facebook/create-react-app/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/create-react-app/commits/react-scripts@3.3.1/packages/react-scripts)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-31 07:23:23 +00:00
David Ralph
76d24340c1 Merge pull request #67 from mue/dependabot/npm_and_yarn/material-ui/core-4.9.0
Bump @material-ui/core from 4.8.3 to 4.9.0
2020-01-27 13:15:59 +00:00
David Ralph
e2b7789eba mue 2020-01-27 13:15:47 +00:00
dependabot-preview[bot]
e6ead89cdc Bump @material-ui/core from 4.8.3 to 4.9.0
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.8.3 to 4.9.0.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.9.0/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-23 07:18:52 +00:00
David Ralph
a97b969e6f bump 2020-01-19 18:48:26 +00:00
David Ralph
f9c129786c fix, hopefully 2020-01-19 18:48:00 +00:00
David Ralph
e149b57fb6 Update README.md 2020-01-14 20:05:19 +00:00
David Ralph
82417dc230 Merge pull request #66 from mue/dependabot/npm_and_yarn/material-ui/core-4.8.3
Bump @material-ui/core from 4.8.2 to 4.8.3
2020-01-07 12:18:12 +00:00
dependabot-preview[bot]
c5ae4fc9b4 Bump @material-ui/core from 4.8.2 to 4.8.3
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.8.2 to 4.8.3.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.8.3/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-07 07:23:26 +00:00
David Ralph
e8ba860592 2020 2020-01-01 00:04:20 +00:00
David Ralph
62bfd162e3 Merge pull request #65 from mue/dependabot/npm_and_yarn/material-ui/core-4.8.2
Bump @material-ui/core from 4.8.1 to 4.8.2
2019-12-31 11:24:39 +00:00
dependabot-preview[bot]
80c5c9cfb0 Bump @material-ui/core from 4.8.1 to 4.8.2
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.8.1 to 4.8.2.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.8.2/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-31 07:14:22 +00:00
David Ralph
19e3fce5b6 Update README.md 2019-12-27 22:17:27 +00:00
David Ralph
5aafb4228b fix readme 2019-12-27 22:10:50 +00:00
Alex S
43101b7ded Update README.md 2019-12-27 22:07:41 +00:00
David Ralph
88c8428ae2 oops 2019-12-26 13:47:15 +00:00
David Ralph
1055427e33 Icons for chrome://extensions page? 2019-12-26 13:15:31 +00:00
David Ralph
85a3ce0769 AM/PM hotfix 2019-12-26 12:10:39 +00:00
David Ralph
5c682eac26 Merge pull request #64 from mue/dependabot/npm_and_yarn/material-ui/core-4.8.1
Bump @material-ui/core from 4.8.0 to 4.8.1
2019-12-25 09:48:58 +00:00
dependabot-preview[bot]
4db5104181 Bump @material-ui/core from 4.8.0 to 4.8.1
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.8.1/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-25 07:10:10 +00:00
David Ralph
d18020e4bd add note for opera 2019-12-22 10:43:37 +00:00
David Ralph
2772cfdefc fix doc 2019-12-21 18:23:14 +00:00
David Ralph
92efb3ed23 make building mue good 2019-12-21 18:19:21 +00:00
David Ralph
f7acd0188d Merge pull request #63 from muetab/dependabot/npm_and_yarn/material-ui/core-4.8.0
Bump @material-ui/core from 4.7.0 to 4.8.0
2019-12-21 17:32:57 +00:00
dependabot-preview[bot]
7fa5cf7f7d Bump @material-ui/core from 4.7.0 to 4.8.0
Bumps [@material-ui/core](https://github.com/mui-org/material-ui/tree/HEAD/packages/material-ui) from 4.7.0 to 4.8.0.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v4.8.0/packages/material-ui)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-21 17:30:28 +00:00
David Ralph
722f2711ae Update README.md 2019-12-14 19:16:23 +00:00
David Ralph
30dcc789ed 0.7.0 2019-12-14 11:02:46 +00:00
David Ralph
dc013deaad soon 2019-12-13 12:58:51 +00:00
David Ralph
7f49a412aa remove part no longer required 2019-12-10 09:34:05 +00:00
David Ralph
4e774d9ea3 Merge pull request #62 from AugustArchive/readme
fix url for Yanderella
2019-12-10 09:33:24 +00:00
August (Chris)
30c05f03bf fix url for Yanderella 2019-12-09 15:27:05 -07:00
David Ralph
2edd9b4b07 move logos to muetab/branding repo 2019-12-09 22:07:04 +00:00
David Ralph
24e261165b Update LICENSE 2019-12-08 16:41:10 +00:00
David Ralph
39188d5988 Update README.md 2019-12-04 12:08:25 +00:00
David Ralph
e175a1edfa cleanup 2019-12-03 11:01:58 +00:00
David Ralph
6f7b6d2337 clear 2019-12-03 10:42:52 +00:00
David Ralph
97c6fa58d9 Cleanup 2019-12-02 20:22:15 +00:00
David Ralph
ec66e8c9f9 actually no 3 clause 2019-12-02 19:17:51 +00:00
David Ralph
35a60f07b6 Switch to BSD-4-Clause 2019-12-02 19:14:59 +00:00
David Ralph
50da14cce6 Cleanup 2019-12-02 12:27:19 +00:00
David Ralph
d45fec5028 Documentation and ESLint 2019-12-01 22:00:05 +00:00
David Ralph
77f2522a80 Update README.md 2019-12-01 21:45:39 +00:00
David Ralph
92d0d7efae License logo files under CC-BY-4.0 2019-12-01 21:45:01 +00:00
David Ralph
a6c1a21088 Update README.md 2019-12-01 21:44:21 +00:00
David Ralph
983a6727e2 Progress, crediting Pexels etc 2019-12-01 13:29:07 +00:00
David Ralph
5da8731017 make it lighter 2019-11-29 13:26:36 +00:00
David Ralph
b78f4ccf26 oops 2019-11-29 12:16:43 +00:00
David Ralph
2fa7567cf3 improve 2019-11-29 12:12:34 +00:00
David Ralph
cde3743ff8 experimental 2019-11-29 12:04:12 +00:00
David Ralph
1a165f4f1d Create CODE_OF_CONDUCT.md 2019-11-29 11:52:54 +00:00
David Ralph
56944b3a07 remove offline photos that don't work very well 2019-11-25 10:04:35 +00:00
David Ralph
6c39a751a1 logos 2019-11-17 19:42:30 +00:00
David Ralph
2f7fd62d5c Update FUNDING.yml 2019-11-11 14:03:34 +00:00
David Ralph
af8223d818 Update bug-report.md 2019-11-06 21:37:27 +00:00
David Ralph
298f43bda2 Merge pull request #61 from ohlookitsderpy/revert-60-all-contributors/add-ohlookitsderpy
Revert "docs: add ohlookitsderpy as a contributor"
2019-11-06 21:20:18 +00:00
David Ralph
7c8c0cfb85 Revert "docs: add ohlookitsderpy as a contributor" 2019-11-06 21:20:06 +00:00
David Ralph
1e99676ff8 Merge pull request #60 from ohlookitsderpy/all-contributors/add-ohlookitsderpy
docs: add ohlookitsderpy as a contributor
2019-11-06 21:19:07 +00:00
allcontributors[bot]
3638e67f28 docs: create .all-contributorsrc 2019-11-06 21:18:48 +00:00
allcontributors[bot]
2d42753e77 docs: update README.md 2019-11-06 21:18:47 +00:00
Mr Brickly
39969cde6d stuff 2019-11-06 19:03:17 +00:00
David Ralph
40452b71bf eat all the cheese, push all the things 2019-10-22 15:44:49 +01:00
David Ralph
ab1a7cdf5f fix readme 2019-10-22 13:26:09 +01:00
David Ralph
bdfae155ab general cleanup and stuff 2019-10-21 20:04:30 +01:00
David Ralph
4ff9ef3545 consistency 2019-10-20 21:32:24 +01:00
David Ralph
9f21ffe5f0 Remove no longer needed cookie code 2019-10-20 21:27:18 +01:00
David Ralph
5be47d798b readme 2019-10-20 15:47:35 +01:00
David Ralph
c7e19aad03 re-add opera 2019-10-20 15:39:12 +01:00
David Ralph
df630e953a update 2019-10-20 14:24:23 +01:00
David Ralph
b5a0cbe0b2 Improvements 2019-10-20 13:39:01 +01:00
David Ralph
aa6400b41f Merge pull request #58 from eartharoid/master
Change time format
2019-10-13 14:24:33 -04:00
Eartharoid
735ee6def9 Update Clock.jsx 2019-10-13 19:14:31 +01:00
David Ralph
9414a35fe8 the strings are the same 2019-10-06 10:37:57 +01:00
David Ralph
13e5beadf6 Merge pull request #57 from Cyber28/master
Fix clock adding a 0 before the time
2019-10-06 10:37:14 +01:00
Adam
3c398df411 Fix clock adding a 0 before the time 2019-10-06 11:35:01 +02:00
David Ralph
27fb91e9a9 Make Cyber happier
https://u.derpyenterprises.org/gxjQ
2019-10-06 10:31:32 +01:00
David Ralph
5e5214ad0c fix quotes 2019-10-05 14:59:53 +01:00
David Ralph
90eb9a424a Merge pull request #56 from MrSheldon/master
Changed my name and added more quotes
2019-10-03 19:11:56 +02:00
Roee Lupo
9f961ffdde Fixed formatting 2019-10-03 20:11:02 +03:00
Roee Lupo
576d829c40 new quotes 2019-10-03 17:48:30 +03:00
Roee Lupo
c6e9e2226a Changing my name ktnx 2019-10-03 17:39:47 +03:00
88 changed files with 1506 additions and 673 deletions

2
.env Normal file
View File

@@ -0,0 +1,2 @@
GENERATE_SOURCEMAP=false
INLINE_RUNTIME_CHUNK=false

1
.github/FUNDING.yml vendored
View File

@@ -1,2 +1,3 @@
github: ohlookitsderpy
patreon: ohlookitsderpy
ko_fi: ohlookitsderpy

View File

@@ -14,8 +14,7 @@ A clear and concise description of what the bug is.
Steps to reproduce the behaviour:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
4. See error in console (Ctrl + Shift + I)
**Expected behaviour**
A clear and concise description of what you expected to happen.
@@ -24,10 +23,12 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Windows]
- Browser [e.g. Chrome, Firefox]
- Version [e.g. 70]
- Resolution [e.g 1920x1080]
- OS: [e.g. Windows, Ubuntu]
- OS Version: [e.g 10, 19.10]
- Browser: [e.g. Chrome, Firefox]
- Browser Version: [e.g. 70]
- Mue Version: [e.g. 0.5]
- Resolution: [e.g 1920x1080]
**Additional context**
Add any other context about the problem here.

9
.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
# Directories
node_modules/
.vscode/
build/
# Files
package-lock.json
yarn-error.log
yarn.lock

76
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at github@muetab.xyz. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq

42
LICENSE
View File

@@ -1,21 +1,29 @@
MIT License
BSD 3-Clause License
Copyright (c) 2018-2019 David Ralph (ohlookitsderpy)
Copyright (c) 2018-2020 Mue Tab
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

144
README.md
View File

@@ -1,73 +1,101 @@
<img src='assets/logo/logo_horizontal.png'>
<img src="https://raw.githubusercontent.com/mue/branding/master/logo/logo_round.png" align="left" width="180px" height="180px"/>
<img align="left" width="0" height="192px" hspace="10"/>
# Mue
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/fba7ad7fc6e14fe0bc2a8d53dbf0bb41)](https://www.codacy.com/app/ohlookitsderpy/Mue?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=ohlookitsderpy/Mue&amp;utm_campaign=Badge_Grade)
[![Discord Badge](https://discordapp.com/api/guilds/336039472250748928/widget.png)](https://discord.gg/HJmmmTB)
> <a href="https://muetab.xyz/">Mue</a>
<a href='https://ko-fi.com/ohlookitsderpy' target='_blank'><img height='36' src='assets/kofi.png' alt='Buy me a coffee at ko-fi.com' /></a>
<a href='https://patreon.com/ohlookitsderpy' target='_blank'><img height='36' src='assets/patreon.png' alt='Become a patron on patreon.com' /></a>
[![License](https://img.shields.io/badge/license-BSD%203-blue?style=flat-square)](/LICENSE) [![Discord](https://img.shields.io/discord/659129207208804381?label=discord&color=7289DA&style=flat-square)](https://discord.gg/zv8C9F8) [![Code Size]( https://img.shields.io/github/languages/code-size/mue/mue?color=green&label=size&style=flat-square)]()
<br>
[![Microsoft Edge](https://img.shields.io/badge/dynamic/json?style=flat-square&label=microsoft%20edge&query=%24.version&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Faepnglgjfokepefimhbnibfjekidhmja)]() [![](https://img.shields.io/amo/v/mue?label=firefox&style=flat-square)]() [![](https://img.shields.io/chrome-web-store/v/bngmbednanpcfochchhgbkookpiaiaid?label=chrome&style=flat-square)]()
Fast, open and free-to-use new tab page for most modern browsers.
Mue is a fast, open and free-to-use browser extension that gives a new, fresh and customizable tab page to most modern browsers
*This is the code for the extension. If you are looking for the website code, please go [here](https://github.com/TurboMarshmello/muetab.xyz).*
<br>
## Table of contents
* [Screenshot](#screenshot)
* [Features](#features)
* [Planned Features](#planned-features)
* [Installation](#installation)
* [Chrome](#chrome)
* [Firefox](#firefox)
* [Chromium](#edge-chromium)
* [Opera/Other](#operaother)
* [Contributing](#development)
* [Requirements](#requirements)
* [Starting](#starting)
* [Building](#building)
* [Credits](#credits)
* [Maintainers](#maintainers)
* [Contributors]()
* [Other](#other)
## Screenshot
*May be updated in the future*
![Screenshot](assets/screenshot.jpg)
## Features
* Fast and free
* Supports multiple browsers
* Actively developed and opensource
* Automatically updating API (with no tracking!) with new photos and offline mode
* ~~Multiple language support~~
* ~~Settings feature - enable/disable features!~~
* Search bar, ~~update modal, copy button and more!~~
* Actively developed and open source
* Automatically updating API (no tracking) with new photos, quotes and offline mode
* Search bar
* Settings - enable/disable various features and customise parts of Mue
* Update modal, copy button and more!
* Mue has been recently rewritten with React and is missing the features that are crossed out *
## Planned Features
* Multilingual support
## Installation
*A demo of the tab can be found [here](https://mue.now.sh)*
### Chrome
<a href='https://chrome.google.com/webstore/detail/mue/bngmbednanpcfochchhgbkookpiaiaid'><img src='assets/chrome.png' target='_blank'></a>
[![Chrome Web Store Logo](assets/chrome.png)](https://chrome.google.com/webstore/detail/mue/bngmbednanpcfochchhgbkookpiaiaid)
<br>
[Chrome Web Store](https://chrome.google.com/webstore/detail/mue/bngmbednanpcfochchhgbkookpiaiaid)
Link: [Chrome Web Store](https://chrome.google.com/webstore/detail/mue/bngmbednanpcfochchhgbkookpiaiaid)
Development: Read the [Development](#development) section.
### Firefox
<a href='https://addons.mozilla.org/firefox/addon/mue'><img src='assets/firefox.png' target='_blank'></a>
[![Firefox Add-ons Logo](assets/firefox.png)](https://addons.mozilla.org/firefox/addon/mue)
<br>
[Firefox Add-ons](https://addons.mozilla.org/firefox/addon/mue)
Link: [Firefox Add-ons](https://addons.mozilla.org/firefox/addon/mue)
### Edge (Chromium)
[Microsoft Edge Addons](https://microsoftedge.microsoft.com/addons/detail/aepnglgjfokepefimhbnibfjekidhmja)
Development: Read the [Development](#development) section.
### Opera/Other
Link: [GitHub Releases](https://github.com/ohlookitsderpy/Mue/releases)
Link: [GitHub Releases](https://github.com/mue/mue/releases)
Development/Other: Read the [Development](#development) section.
### Development
<h5>Requirements</h5>
#### Requirements
<ol>
<li><a href='https://git-scm.com'>Git</a> (optional)</li>
<li><a href='https://nodejs.org'>Node.js</a></li>
<li><a href='https://nodejs.org'>Node.JS</a></li>
<li>A suitable browser</li>
</ol>
<h5>Starting</h5>
<ol>
<li> <code>git clone https://github.com/ohlookitsderpy/Mue</code> (If you don't have Git just go to <b>Clone or
download</b> and click <b>Download ZIP</b>)
<li> Open a terminal and run these commands: (in the Mue directory)
<li> <code>yarn</code> (or <code>npm install</code>)
<li> <code>yarn start</code> (or <code>npm start</code>)
<li> Start developing! (See the sections below for how to set up a developer copy of the extension.)
<li> clone the repository using <code>git clone https://github.com/mue/mue.git</code>
<li> run <code>yarn</code> or <code>npm i</code> to install all needed dependencies
<li> run <code>yarn start</code> or <code>npm start</code> to start testing
<li> Code your heart out! (See the sections below for how to build the extension)
</ol>
<h2>Building</h5>
<details>
<summary><b>Chrome</b> (Click to expand)</summary>
<summary><b>Chrome/Edge (Chromium)</b> (Click to expand)</summary>
<ol>
<li> Rename <code>manifest-chrome.json</code> to <code>manifest.json</code>
<li> <code>yarn run build</code> or <code>npm run build</code>
<li> Rename <code>manifest-chrome.json</code> in the "manfiest" folder to <code>manifest.json</code> in "build"
<li> Visit <code>chrome://extensions</code> in Chrome
<li> Click <b>Load unpacked</b> (Make sure <b>Developer Mode</b> is on)
<li> Go to the directory containing Mue and click <b>ok</b>
<li> Go to the directory containing the built copy of Mue and click <b>ok</b>
<li> Enjoy your new tab!
</details>
<details>
<summary><b>Opera</b> (Click to expand)</summary>
<ol>
<li> Rename <code>manifest-opera.json</code> to <code>manifest.json</code>
<li> <code>yarn run build</code> or <code>npm run build</code>
<li> Rename <code>manifest-opera.json</code> in the "manfiest" folder to <code>manifest.json</code> in "build"
<li> Copy <codebackground-opera.js</code> in the "manifest" folder to "build"
<li> Visit <code>about://extensions</code> in Opera
<li> Click <b>Load unpacked extension...</b> (Make sure <b>Developer Mode</b> is on)
<li> Go to the directory containing Mue and click <b>ok</b>
@@ -75,9 +103,10 @@ Development/Other: Read the [Development](#development) section.
</details>
<details>
<summary><b>Firefox</b> (Click to expand)</summary>
<i>Note: I'm currently trying to find a better method to do this, but this works for now.</i>
<ol>
<li> Rename <code>manifest-firefox.json</code> to <code>manifest.json</code>
<li> <code>yarn run build</code> or <code>npm run build</code>
<li> Rename <code>manifest-firefox.json</code> in the "manfiest" folder to <code>manifest.json</code> in "build"
<li> Move <code>manifest/background-opera.js</code> to <code>build/background-opera.js</code>
<li> Visit <code>about:debugging#addons</code> in Firefox
<li> Click <b>Load Temporary Add-on</b>
<li> Go to the directory containing Mue and click on the <b>manifest.json</b>
@@ -88,48 +117,27 @@ Development/Other: Read the [Development](#development) section.
<summary><b>Other</b> (Click to expand)</summary>
<i>Note: To get the full new tab experience, set your browser to open the <code>index.html</code> on startup and tab open!</i>
<ol>
<li> <code>yarn run build</code> or <code>npm run build</code>
<li> Open the <code>index.html</code> in your browser
<li> Enjoy your new tab!
</ol>
</details>
## Screenshot
*Will be updated if needed*
<img src='assets/screenshot.jpg'>
## Credits
### Maintainers
[ohlookitsderpy](https://github.com/ohlookitsderpy)
[ohlookitsderpy](https://github.com/ohlookitsderpy) - Founder, Lead development, Photographer <br>
[TurboMarshmello](https://github.com/TurboMarshmello) - Name, Lead design, Photographer <br>
[TurboMarshmello](https://github.com/TurboMarshmello)
### Contributors
[Wessel](https://github.com/Wessel) - Development <br>
[Isaac](https://github.com/eartharoid) - QA, Development, Photographer <br>
[Chris](https://github.com/auguwu) - Development <br>
### Other
[TurboMarshmello](https://github.com/TurboMarshmello) - Portions of original code, name idea
[Pexels](https://pexels.com) - Stock photos used for offline mode
[Opera Forum](https://forums.opera.com/topic/25046/how-to-disable-completely-the-speed-dial/14) - Portions of code to add Opera support
[Opera Forum](https://forums.opera.com/topic/25046/how-to-disable-completely-the-speed-dial/14) - Portions of code to add Opera support <br>
[Google Fonts](https://fonts.google.com/specimen/Lexend+Deca) - Lexend Deca font
### Translations
[ohlookitsderpy](https://github.com/ohlookitsderpy) - English (Quotes and Messages)
[Yanderella](https://github.com/tomiedev) - Italian (Quotes and Messages)
Pepehound - Spanish (Quotes and Messages)
Candystick - Portuguese (Some Quotes)
[PassTheWessel](https://github.com/PassTheWessel) - Dutch (Messages)
[Yanderella](https://github.com/tomiedev) and [ohlookitsderpy](https://github.com/ohlookitsderpy) - French (Messages)
[untocodes](https://github.com/untocodes) - Finnish and German (Messages)
[dondish](https://github.com/dondish) - Hebrew and Russian (Messages)
[MrSheldon](https://github.com/MrSheldon) - Arabic and Swedish (Messages)
*Feel free to pull request with other translations!*
and all the contributors <3
And many thanks to [Highholding](https://discord.bio/p/highholding), [Noa Shapira](#), [Roee Lupo](https://github.com/MrSheldon), [Jeroen](#), [Glasvegas](https://twitter.com/_glasvegas), [Anders](https://github.com/FuryingFox/), [Oded Shapira](https://twitter.com/dondishdev) and [Nikka Lai](#) for letting us use their wonderful photographs

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 KiB

After

Width:  |  Height:  |  Size: 276 KiB

View File

@@ -0,0 +1,14 @@
/* eslint-disable no-undef */
// Original code sourced from https://forums.opera.com/topic/25046/how-to-disable-completely-the-speed-dial/14
chrome.tabs.onCreated.addListener((tab) => {
if (tab.status === 'complete' && tab.url === 'chrome://startpage/') chrome.tabs.update(tab.id, {
url: chrome.extension.getURL('index.html')
});
});
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
if (changeInfo.status === 'complete' && tab.url === 'chrome://startpage/') chrome.tabs.update(tabId, {
url: chrome.extension.getURL('index.html')
});
});

18
manifest/chrome.json Normal file
View File

@@ -0,0 +1,18 @@
{
"manifest_version": 2,
"offline_enabled": true,
"name": "Mue",
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
"version": "3.0.0",
"browser_action": {
"default_icon": "./icons/extension-icon.png"
},
"chrome_url_overrides": {
"newtab": "index.html"
},
"icons": {
"16": "./icons/16x16-circle.png",
"48": "./icons/48x48-circle.png",
"128": "./icons/128x128-circle.png"
}
}

15
manifest/firefox.json Normal file
View File

@@ -0,0 +1,15 @@
{
"manifest_version": 2,
"name": "Mue",
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
"version": "3.0.0",
"browser_action": {
"default_icon": "./icons/extension-icon.png"
},
"chrome_url_overrides": {
"newtab": "index.html"
},
"chrome_settings_overrides": {
"homepage": "index.html"
}
}

17
manifest/opera.json Normal file
View File

@@ -0,0 +1,17 @@
{
"manifest_version": 2,
"name": "Mue",
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
"version": "3.0.0",
"browser_action": {
"default_icon": "./icons/extension-icon.png"
},
"background": {
"scripts": [
"./background-opera.js"
]
},
"permissions": [
"tabs"
]
}

View File

@@ -1,29 +1,40 @@
{
"name": "mue",
"author": "ohlookitsderpy",
"private": true,
"author": "David \"ohlookitsderpy\" Ralph <d.ralph@muetab.xyz> (https://derpyenterprises.org)",
"maintainers": [
"David \"ohlookitsderpy\" Ralph <d.ralph@muetab.xyz> (https://derpyenterprises.org)",
"Alex \"TurboMarshmello\" Sparkes <a.sparkes@muetab.xyz> (https://github.com/TurboMarshmello)"
],
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
"license": "MIT",
"version": "2.0.0",
"repository": {
"url": "github:mue/mue"
},
"homepage": "https://muetab.xyz",
"bugs": "https://github.com/mue/mue/issues/new?assignees=&labels=bug&template=bug-report.md&title=%5BBUG%5D",
"license": "BSD-3-Clause",
"version": "3.0.0",
"dependencies": {
"@material-ui/core": "^4.4.3",
"@material-ui/icons": "^4.4.3",
"react": "^16.10.1",
"react-dom": "^16.10.1",
"react-scripts": "3.1.2",
"unfetch": "^4.1.0"
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"@muetab/quotes": "^1.0.0",
"copy-text-to-clipboard": "^2.2.0",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-modal": "^3.11.2",
"react-scripts": "3.4.1",
"supports-webp": "^2.0.1"
},
"devDependencies": {
"eslint": "^6.5.0",
"npm-run-all": "^4.1.5",
"sass": "^1.22.12"
"eslint": "^7.3.0",
"node-sass": "^4.14.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"sass": "sass --watch src/scss:src/css --style compressed",
"start-all": "npm-run-all -p start sass"
"chrome": "cp manifest/chrome.json build/manifest.json",
"firefox": "cp manifest/firefox.json build/manifest.json",
"opera": "cp manifest/opera.json build/manifest.json && cp manifest/background-opera.js build/"
},
"eslintConfig": {
"extends": "react-app"
@@ -36,8 +47,7 @@
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
"last 1 firefox version"
]
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1,15 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<link rel='apple-touch-icon' sizes='180x180' href='apple-touch-icon.png'>
<link rel='icon' type='image/png' sizes='32x32' href='favicon-32x32.png'>
<link rel='icon' type='image/png' sizes='16x16' href='favicon-16x16.png'>
<title>New Tab</title>
</head>
<body>
<noscript>You need to enable JavaScript to use Mue.</noscript>
<div id='root'></div>
</body>
</html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<link rel='icon' type='image/png' sizes='32x32' href='./icons/favicon-32x32.png'>
<link rel='icon' type='image/png' sizes='16x16' href='./icons/favicon-16x16.png'>
<title>New Tab</title>
</head>
<body>
<noscript>You need to enable JavaScript to use Mue.</noscript>
<div id='root'></div>
</body>
</html>

View File

@@ -1,15 +0,0 @@
{
"short_name": "Mue New Tab",
"name": "Fast, open and free-to-use new tab page for most modern browsers.",
"icons": [
{
"src": "favicon-32x32.png",
"sizes": "96x96 64x64 32x32 24x24 16x16",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 737 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 390 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 737 KiB

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 472 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 280 KiB

View File

@@ -1,66 +1,91 @@
//* Imports
import React from 'react';
import Fetch from 'unfetch';
import Clock from './modules/Clock';
import Greeting from './modules/Greeting';
import Quote from './modules/Quote';
import Search from './modules/Search';
import Credit from './modules/Credit';
import './css/index.css';
import Background from './components/Background';
import Clock from './components/Clock';
import Greeting from './components/Greeting';
import Quote from './components/Quote';
import Search from './components/Search';
import Credit from './components/Credit';
import Navbar from './components/Navbar';
import Toast from './components/Toast';
import Modal from 'react-modal';
import './scss/index.scss';
//* Functions
const getCookie = (cookiename) => {
const cookiestring = RegExp('' + cookiename + '[^;]+').exec(document.cookie);
return unescape(!!cookiestring ? cookiestring.toString().replace(/^[^=]+./,'') : '');
};
const randomInt = (min, max) => { return Math.floor(Math.random() * (max - min + 1)) + min; };
const Settings = React.lazy(() => import('./components/Settings'));
const Update = React.lazy(() => import('./components/Update'));
const renderLoader = () => <div></div>;
//* App
export default class App extends React.Component {
// Render all the modules
// Modal stuff
constructor(props) {
super(props);
this.state = {
settingsModal: false,
updateModal: false
};
}
setDefaultSettings() {
localStorage.clear();
localStorage.setItem('time', true);
localStorage.setItem('greeting', true);
localStorage.setItem('background', true);
localStorage.setItem('quote', true);
localStorage.setItem('searchBar', true);
localStorage.setItem('blur', 0);
localStorage.setItem('copyButton', false);
localStorage.setItem('seconds', false);
localStorage.setItem('24hour', false);
localStorage.setItem('offlineMode', false);
localStorage.setItem('webp', false);
localStorage.setItem('events', true);
localStorage.setItem('customBackgroundColour', '');
localStorage.setItem('customBackground', '');
localStorage.setItem('greetingName', '');
// Set theme depending on user preferred
//if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) localStorage.setItem('darkTheme', true);
//else localStorage.setItem('darkTheme', false);
localStorage.setItem('darkTheme', false);
// Finally we set this to true so it doesn't run the function on every load
localStorage.setItem('firstRun', true);
window.location.reload();
}
// Render all the components
render() {
if (!localStorage.getItem('firstRun')) this.setDefaultSettings();
let modalClassList = 'Modal';
const darkTheme = localStorage.getItem('darkTheme');
if (darkTheme === 'true') modalClassList = 'Modal dark';
return (
<React.Fragment>
<div id='backgroundImage'></div>
<Background/>
<div id='center'>
<Search/>
<div id='center'>
<Greeting/>
<Clock/>
<Quote/>
<Credit/>
</div>
<Navbar settingsModalOpen={() => this.setState({ settingsModal: true })} updateModalOpen={() => this.setState({ updateModal: true })} />
<Greeting/>
<Clock/>
<Quote />
<Credit/>
<Toast/>
<React.Suspense fallback={renderLoader()}>
<Modal isOpen={this.state.settingsModal} className={modalClassList} overlayClassName="Overlay" ariaHideApp={false}>
<Settings modalClose={() => this.setState({ settingsModal: false })} setDefaultSettings={() => this.setDefaultSettings()} />
</Modal>
<Modal isOpen={this.state.updateModal} className={modalClassList} overlayClassName="Overlay" ariaHideApp={false}>
<Update modalClose={() => this.setState({ updateModal: false })} />
</Modal>
</React.Suspense>
</div>
</React.Fragment>
);
}
// Set background: Attempt to get one from the API first, and if that fails then use the offline ones.
async getAndSetBackground() {
const root = document.getElementById('root');
try {
let data = await Fetch('https://api.muetab.xyz/getImage?category=Outdoors');
data = await data.json();
const checkRepeat = getCookie('backgroundimageurl');
document.getElementById('photographer').innerText = `Photo by ${data.photographer}`;
document.getElementById('location').innerText = `${data.location}`;
if (checkRepeat !== root.style.backgroundImage) root.style.backgroundImage = `url(${data.file})`;
else {
/*let data = await Fetch('https://api.muetab.xyz/getImage?category=Outdoors');
data = await data.json();*/
document.cookie = 'backgroundimageurl; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
root.style.backgroundImage = `url(${data.file})`;
document.cookie = `backgroundimageurl=${data.file}`;
}
} catch (e) {
document.getElementById('backgroundCredits').style.display = 'none';
document.getElementById('photographer').innerText = 'Photo from Pexels';
root.style.backgroundImage = `url(../offline-images/${randomInt(1, 25)}.jpeg)`;
}
}
componentDidMount() {
this.getAndSetBackground();
}
}

View File

@@ -0,0 +1,70 @@
//* Imports
import React from 'react';
import supportsWebP from 'supports-webp';
export default class Background extends React.Component {
doOffline() {
const photo = Math.floor(Math.random() * (20 - 1 + 1)) + 1; // There are 20 images in the offline-images folder
document.getElementById('backgroundCredits').style.display = 'none'; // Hide the location icon
let photographer; // Photographer credit
let pixabayNumbers = [2, 3, 9, 11, 13, 14, 15]; // As there are a lot of Pixabay photos, we shorten the code a bit here
if (pixabayNumbers.includes(photo)) photographer = 'Pixabay';
else switch (photo) {
case 1: photographer = 'Tirachard Kumtanom'; break;
case 4: photographer = 'Sohail Na'; break;
case 7: photographer = 'Miriam Espacio'; break;
case 10: photographer = 'NO NAME'; break;
case 20: photographer = 'Fabian Wiktor'; break;
default: photographer = 'Unknown'; break;
}
document.getElementById('backgroundImage').setAttribute('style', `-webkit-filter:blur(${localStorage.getItem('blur')}px); background-image: url(../offline-images/${photo}.jpeg)`); // Set background and blur etc
document.getElementById('photographer').innerText = `Photo by ${photographer} (Pexels)`; // Set the credit
}
async setBackground() {
const enabled = localStorage.getItem('offlineMode');
if (enabled === 'true') return this.doOffline();
const colour = localStorage.getItem('customBackgroundColour');
if (colour) {
document.getElementById('backgroundCredits').style.display = 'none'; // Hide the location icon
return document.getElementById('backgroundImage').setAttribute('style', `-webkit-filter:blur(${localStorage.getItem('blur')}px); background-color: ${colour}`); // Set background and blur etc
}
const custom = localStorage.getItem('customBackground');
if (custom) {
document.getElementById('backgroundCredits').style.display = 'none'; // Hide the location icon
return document.getElementById('backgroundImage').setAttribute('style', `-webkit-filter:blur(${localStorage.getItem('blur')}px); background-image: url(${custom})`); // Set background and blur etc
}
try { // First we try and get an image from the API...
let requestURL;
const enabled = localStorage.getItem('webp');
if (await supportsWebP && enabled === 'true') requestURL = 'https://api.muetab.xyz/getImage?webp=true';
else requestURL = 'https://api.muetab.xyz/getImage?category=Outdoors';
let data = await fetch(requestURL);
data = await data.json();
document.getElementById('backgroundImage').setAttribute('style', `-webkit-filter:blur(${localStorage.getItem('blur')}px); background-image: url(${data.file})`); // Set background and blur etc
document.getElementById('photographer').innerText = `Photo by ${data.photographer}`; // Set the credit
document.getElementById('location').innerText = `${data.location}`; // Set the location tooltip
} catch (e) { // ..and if that fails we load one locally
this.doOffline();
}
}
componentDidMount() {
const enabled = localStorage.getItem('background');
if (enabled === 'false') {
document.getElementById('backgroundCredits').style.display = 'none';
return;
}
this.setBackground();
}
render() {
return null; // React gets annoyed if I don't put anything here or use "return;"
}
}

54
src/components/Clock.jsx Normal file
View File

@@ -0,0 +1,54 @@
import React from 'react';
export default class Clock extends React.Component {
constructor(...args) {
super(...args);
this.timer = undefined;
this.state = {
date: '',
ampm: ''
};
}
startTime(time = localStorage.getItem('seconds') === 'true' ? (1000 - Date.now() % 1000) : (60000 - Date.now() % 60000)) {
this.timer = setTimeout(() => {
const now = new Date();
let sec = '';
if (localStorage.getItem('seconds') === 'true') sec = `:${('00' + now.getSeconds()).slice(-2)}`;
if (localStorage.getItem('24hour') === 'true') {
this.setState({
date: `${('00' + now.getHours()).slice(-2)}:${('00' + now.getMinutes()).slice(-2)}${sec}`
});
} else {
// 12 hour support
let hours = now.getHours();
if (hours > 12) hours -= 12;
this.setState({
date: `${('00' + hours).slice(-2)}:${('00' + now.getMinutes()).slice(-2)}${sec}`,
ampm: now.getHours() > 11 ? 'PM' : 'AM'
});
}
this.startTime();
}, time);
}
componentDidMount() {
const enabled = localStorage.getItem('time');
if (enabled === 'false') return;
this.startTime(0);
}
render() {
return <h1 className='clock'>
{this.state.date}
<span className='ampm'>
{this.state.ampm}
</span>
</h1>;
}
}

19
src/components/Credit.jsx Normal file
View File

@@ -0,0 +1,19 @@
/* eslint-disable */
//* Imports
import RoomIcon from '@material-ui/icons/Room';
import React from 'react';
export default class Credit extends React.Component {
render() {
return (
<div className='credits'>
{/*<h1 id='location'></h1>*/}
<h1 id='photographer'/>
<div id='backgroundCredits' className='tooltip'>
<RoomIcon className='locationicon'/>
<span className='tooltiptext' id='location'/>
</div>
</div>
);
}
}

View File

@@ -0,0 +1,63 @@
import React from 'react';
export default class Greeting extends React.Component {
constructor(...args) {
super(...args);
this.state = {
greeting: ''
};
}
doEvents(time, message) {
const enabled = localStorage.getItem('events');
if (enabled === 'false') return message;
// Get current month & day
const m = time.getMonth(); // Current month
const d = time.getDate(); // Current Date
if (m === 11 && d === 25) message = 'Merry Christmas'; // If it's December 25th, set the greeting string to "Merry Christmas"
else if (m === 0 && d === 1) message = 'Happy new year'; // If the date is January 1st, set the greeting string to "Happy new year"
else if (m === 9 && d === 31) message = 'Happy Halloween'; // If it's October 31st, set the greeting string to "Happy Halloween"
return message;
}
getGreeting() {
const now = new Date();
const hour = now.getHours();
let message = 'Good evening'; // Set the default greeting string to "Good evening"
if (hour < 12) message = 'Good morning'; // If it's before 12am, set the greeting string to "Good morning"
else if (hour < 18) message = 'Good afternoon'; // If it's before 6pm, set the greeting string to "Good afternoon"
// Events
message = this.doEvents(now, message);
// Name
let name = '';
let data = localStorage.getItem('greetingName');
if (typeof data === 'string') {
data = data.replace(/\s/g, ' ');
if (data.length > 0) name = `, ${data}`;
}
// Set the state to the greeting string
this.setState({
greeting: `${message}${name}`
});
}
componentDidMount() {
const enabled = localStorage.getItem('greeting');
if (enabled === 'false') return;
this.getGreeting();
}
render() {
return <h1 className='greeting'>
{this.state.greeting}
</h1>;
}
}

23
src/components/Navbar.jsx Normal file
View File

@@ -0,0 +1,23 @@
//* Imports
import RefreshIcon from '@material-ui/icons/Refresh';
import Gear from '@material-ui/icons/Settings';
import NewReleases from '@material-ui/icons/NewReleases';
import React from 'react';
export default class Navbar extends React.Component {
render() {
return (
<div className='navbar-container'>
<div className='navbar1'>
<Gear className='settings-icon' onClick={this.props.settingsModalOpen} />
</div>
<div className='navbar2'>
<RefreshIcon className='refreshicon' onClick={() => window.location.reload()} />
</div>
<div className='navbar3'>
<NewReleases className='refreshicon' onClick={this.props.updateModalOpen} />
</div>
</div>
);
}
}

64
src/components/Quote.jsx Normal file
View File

@@ -0,0 +1,64 @@
//* Imports
import React from 'react';
import Quotes from '@muetab/quotes';
import copy from 'copy-text-to-clipboard';
import FileCopy from '@material-ui/icons/AttachFile';
export default class Quote extends React.Component {
constructor(...args) {
super(...args);
this.state = {
quote: '',
author: ''
};
}
doOffline() {
const quote = Quotes.random(); // Get a random quote from our local package
this.setState({
quote: '"' + quote.quote + '"',
author: quote.author
}); // Set the quote
}
async getQuote() {
const enabled = localStorage.getItem('offlineMode');
if (enabled === 'true') return this.doOffline();
try { // First we try and get a quote from the API...
let data = await fetch('https://api.muetab.xyz/getQuote');
data = await data.json();
if (data.statusCode === 429) this.doOffline(); // If we hit the ratelimit, we fallback to local quotes
this.setState({
quote: '"' + data.quote + '"',
author: data.author
});
} catch (e) { // ..and if that fails we load one locally
this.doOffline();
}
}
copyQuote() {
copy(`${this.state.quote} - ${this.state.author}`);
let toast = document.getElementById('toast');
toast.className = 'show';
setTimeout(() => { toast.className = toast.className.replace('show', ''); }, 3000);
}
componentDidMount() {
const enabled = localStorage.getItem('quote');
if (enabled === 'false') return;
this.getQuote();
}
render() {
let copy = <FileCopy className='copyButton' onClick={() => this.copyQuote() }></FileCopy>;
const enabled = localStorage.getItem('copyButton');
if (enabled === 'false') copy = '';
return [
<h1 className='quote'>{`${this.state.quote}`}</h1>,
<h1 className='quoteauthor'>{this.state.author} {copy}</h1>,
];
}
}

28
src/components/Search.jsx Normal file
View File

@@ -0,0 +1,28 @@
//* Imports
import React from 'react';
export default class Search extends React.Component {
render() {
const enabled = localStorage.getItem('searchbar');
if (enabled === 'false') return (<div></div>);
const searchEngine = localStorage.getItem('searchEngine');
let url;
switch (searchEngine) {
case 'duckduckgo': url = 'https://duckduckgo.com'; break;
case 'google': url = 'https://google.com/search'; break;
case 'bing': url = 'https://bing.com/search'; break;
default: url = 'https://duckduckgo.com'; break;
}
return (
<div id='searchBar' className='searchbar'>
<form id='searchBar' className='searchbarform' action={url}>
<input type='text' placeholder='Search' name='q' id='searchtext' className='searchtext'/>
<div className='blursearcbBG'/>
</form>
</div>
);
}
}

223
src/components/Settings.jsx Normal file
View File

@@ -0,0 +1,223 @@
// eslint-disable
import React from 'react';
import ExpandMore from '@material-ui/icons/ExpandMore';
export default class Settings extends React.Component {
setItem(key, value) {
let old = localStorage.getItem(key);
let val = true;
if (old !== null && !value) {
if (old === 'true') val = false;
if (old === 'false') val = true;
}
localStorage.setItem(key, val);
//document.getElementById(`${key}Status`).innerHTML = val === true ? 'ON' : 'OFF';
// console.log(`[DEBUG] setItem(${key}, ${old} -> ${val})`);
}
toggleExtra(element, element2) {
(element.style.display === 'none' || !element.style.display) ? element.style.display = 'block' : element.style.display = 'none';
(element2.style.transform === 'rotate(-180deg)') ? element2.style.transform = 'rotate(0)' : element2.style.transform = 'rotate(-180deg)';
}
saveStuff() {
localStorage.setItem('blur', document.getElementById('blurRange').value); // this is better than inline onChange for performance
localStorage.setItem('greetingName', document.getElementById('greetingName').value);
localStorage.setItem('customBackground', document.getElementById('customBackground').value);
//if (!document.getElementById('customBackgroundColour').enabled === 'false') localStorage.setItem('customBackgroundColour', document.getElementById('customBackgroundColour').value);
window.location.reload();
}
resetItem(key) {
switch (key) {
case 'greetingName': document.getElementById('greetingName').value = ''; break;
case 'customBackgroundColour':
localStorage.setItem('customBackgroundColour', '');
document.getElementById('customBackgroundColour').enabled = 'false';
break;
case 'customBackground': document.getElementById('customBackground').value = ''; break;
case 'blur':
localStorage.setItem('blur', 0);
document.getElementById('blurRange').value = 0;
document.getElementById('blurAmount').innerText = '0';
break;
default: console.log('[ERROR] resetItem requires a key!');
}
this.showToast();
}
showToast() {
let toast = document.getElementById('toast');
toast.innerText = 'Reset successfully!';
toast.className = 'show';
setTimeout(() => { toast.className = toast.className.replace('show', ''); }, 3000);
}
componentDidMount() {
document.getElementById('greetingName').value = localStorage.getItem('greetingName');
document.getElementById('customBackground').value = localStorage.getItem('customBackground');
/*const hex = localStorage.getItem('customBackgroundColour');
if (!hex === '') {
document.getElementById('customBackgroundColour').value = hex;
document.getElementById('customBackgroundHex').innerText = hex;
}*/
for (const key of Object.keys(localStorage)) {
let value = localStorage.getItem(key);
if (key === 'blur') {
document.getElementById('blurAmount').innerText = value;
document.getElementById('blurRange').value = value;
}
const tag = document.getElementById(`${key}Status`);
if (tag) {
switch (value) {
case 'true': value = true; break;
case 'false': value = false; break;
default: value = true;
}
tag.checked = value;
}
}
document.addEventListener('keyup', (event) => {
if (event.keyCode === 13) this.saveStuff();
});
}
render() {
return <div className="content">
<span className="closeModal" onClick={this.props.modalClose}>&times;</span>
<h1>Settings</h1>
<p>Edit different components to make Mue your new tab.</p>
<div className='columns'>
<div className='group'>
<div className='section'>
<h4>Time</h4>
<ExpandMore className='expandIcons' onClick={() => this.toggleExtra(document.getElementsByClassName('extraSettings')[0], document.getElementsByClassName('expandIcons')[0])} />
<label className="switch">
<input type="checkbox" onClick={()=> this.setItem('time')} id='timeStatus' />
<span className="slider round"></span>
</label>
<li className="extraSettings">
<ul>
<input name="1" type="checkbox" onClick={()=> this.setItem('seconds')} id='secondsStatus' />
<label htmlFor="1">Seconds</label>
</ul>
<ul>
<input name="2" type="checkbox" onClick={()=> this.setItem('24hour')} id='24hourStatus' />
<label htmlFor="2">24 Hour</label>
</ul>
</li>
</div>
</div>
<div style={{ "lineHeight": "1px" }} className='section'>
<h4>Greeting</h4>
<ExpandMore className='expandIcons' onClick={() => this.toggleExtra(document.getElementsByClassName('extraSettings')[1], document.getElementsByClassName('expandIcons')[1])} />
<label className="switch">
<input type="checkbox" onClick={()=> this.setItem('greeting')} id='greetingStatus' />
<span className="slider round"></span>
</label>
<li className="extraSettings">
<ul>
<input name="3" type="checkbox" onClick={()=> this.setItem('events')} id='eventsStatus' />
<label htmlFor="3">Events</label>
</ul>
<ul>
<p>Name for greeting <span className="modalLink" onClick={() => this.resetItem('greetingName')}>Reset</span></p>
<input type='text' id='greetingName'></input>
</ul>
</li>
</div>
<div className='section'>
<h4>Quote</h4>
<ExpandMore className='expandIcons' onClick={() => this.toggleExtra(document.getElementsByClassName('extraSettings')[2], document.getElementsByClassName('expandIcons')[2])} />
<label className="switch">
<input type="checkbox" onClick={()=> this.setItem('quote')} id='quoteStatus' />
<span className="slider"></span>
</label>
<li className="extraSettings">
<ul>
<input name="5" type="checkbox" onClick={()=> this.setItem('copyButton')} id='copyButtonStatus' />
<label htmlFor="5">Copy Button</label>
</ul>
</li>
</div>
<div className='section'>
<h4>Background</h4>
<ExpandMore className='expandIcons' onClick={() => this.toggleExtra(document.getElementsByClassName('extraSettings')[3], document.getElementsByClassName('expandIcons')[3])} />
<label className="switch">
<input type="checkbox" onClick={()=> this.setItem('background')} id='backgroundStatus' />
<span className="slider"></span>
</label>
<li className="extraSettings">
<ul>
<p>Adjust Blur (<span id='blurAmount'></span>%) <span className="modalLink" onClick={() => this.resetItem('blur')}>Reset</span></p>
</ul>
<ul>
<input className="range" type="range" min="0" max="100" id='blurRange' onInput={() => document.getElementById('blurAmount').innerText = document.getElementById('blurRange').value} />
</ul>
<ul>
<p>Custom Background URL <span className="modalLink" onClick={() => this.resetItem('customBackground')}>Reset</span></p>
<input type='text' id='customBackground'></input>
</ul>
{ /*<ul>
<p>Custom Background Colour <span className="modalLink" onClick={() => this.resetItem('customBackgroundColour')}>Reset</span></p>
<input name='colour' type='color' id='customBackgroundColour' onChange={() => document.getElementById('customBackgroundHex').innerText = document.getElementById('customBackgroundColour').value}></input>
<label for='colour' id='customBackgroundHex'>#00000</label>
</ul> */}
</li>
</div>
<div className='section'>
<h4>Search Bar</h4>
{/* <ExpandMore className='expandIcons' onClick={() => this.toggleExtra(document.getElementsByClassName('extraSettings')[4], document.getElementsByClassName('expandIcons')[4])} /> */ }
<label className="switch">
<input type="checkbox" onClick={()=> this.setItem('searchBar')} id='searchBarStatus' />
<span className="slider"></span>
</label>
{/* <li className="extraSettings">
<ul>
<label htmlFor="4">Search Engine</label>
<select name="4" id='searchBar'>
<option value="duckduckgo">DuckDuckGo</option>
<option value="google">Google</option>
<option value="bing">Bing</option>
<option value="custom">Custom</option>
</select>
</ul>
</li> */}
</div>
<div className='section'>
<h4>Offline Mode</h4>
<label className="switch">
<input type="checkbox" onClick={()=> this.setItem('offlineMode')} id='offlineModeStatus' />
<span className="slider"></span>
</label>
</div>
<h3>Experimental</h3>
<div className='section'>
<h4>Enable WebP</h4>
<label className="switch">
<input type="checkbox" onClick={()=> this.setItem('webp')} id='webpStatus' />
<span className="slider"></span>
</label>
</div>
<div className='section'>
<h4>Dark Theme</h4>
<label className="switch">
<input type="checkbox" onClick={()=> this.setItem('darkTheme')} id='darkThemeStatus' />
<span className="slider"></span>
</label>
</div>
<button className="apply" onClick={() => this.saveStuff()}>Apply</button>
<button className="reset" onClick={() => this.props.setDefaultSettings()}>Reset</button>
</div>
</div>;
}
}

15
src/components/Toast.jsx Normal file
View File

@@ -0,0 +1,15 @@
//* Imports
import React from 'react';
import FileCopy from '@material-ui/icons/AttachFile';
export default class Toast extends React.Component {
render() {
return (
<div id='toast'>
<FileCopy className="copyButton"/>
<hr />
Quote Copied!
</div>
);
}
}

46
src/components/Update.jsx Normal file
View File

@@ -0,0 +1,46 @@
import React from 'react';
export default class Update extends React.Component {
constructor(...args) {
super(...args);
this.state = {
title: 'Loading...',
date: '',
content: 'Loading...'
};
}
async getUpdate() {
const enabled = localStorage.getItem('offlineMode');
if (enabled === 'true') return this.setState({
title: 'Offline',
content: 'Cannot get update logs while in offline mode'
});
try { // First we try and get a quote from the API...
let data = await fetch('https://api.muetab.xyz/getUpdate');
data = await data.json();
this.setState({
title: data.title,
content: data.content
});
} catch (e) {
this.setState({
title: 'Error',
content: 'Could not connect to the server!'
});
}
}
componentDidMount() {
this.getUpdate();
}
render() {
return <div className="content">
<span className="closeModal" onClick={this.props.modalClose}>&times;</span>
<h1 dangerouslySetInnerHTML={{__html: this.state.title}}></h1>
<p dangerouslySetInnerHTML={{__html: this.state.content}}></p>
</div>;
}
}

View File

@@ -1 +0,0 @@
.App-clock{font-size:4em;margin:0;text-shadow:0 0 25px rgba(0,0,0,.3)}.App-ampm-specifier{font-size:.5em}.App-greeting{margin:0;font-size:1.6em;text-shadow:0 0 25px rgba(0,0,0,.3)}.App-quote{font-size:.8em;text-shadow:0 0 25px rgba(0,0,0,.3)}@media screen and (min-width: 600px){.App-quote{margin-left:30%;margin-right:30%}}.App-quote-author{font-size:.9em;letter-spacing:.5px;margin:0;text-shadow:0 0 25px rgba(0,0,0,.3)}i.material-icons,h1.App-quote-author{display:inline}.search-bar{position:absolute;left:20px;top:20px;display:flex;flex-direction:row;display:block;color:#fff;font-family:"Lexend Deca"}.search-bar button{cursor:pointer;outline:none;display:inline}.search-bar button i.material-icons{text-shadow:0 0 25px rgba(0,0,0,.3)}.search-bar input[type=text]{font-size:calc(5px + 1.2vmin);background:none;border:2px solid #fff;padding:10px;color:#fff;position:absolute;box-shadow:0 0 25px rgba(0,0,0,.3);z-index:1}.input.searchText{border:none}.searchbarform{display:flex;flex-direction:row;box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}#location{margin-bottom:-10px}#location,#photographer{font-size:calc(10px + 1.2vmin);text-shadow:0 0 25px rgba(0,0,0,.3);text-overflow:ellipsis}#photographer{position:absolute;bottom:10px;left:50px;width:1000px}.tooltip{position:absolute;bottom:15px;left:10px}.personicon,.locationicon{font-size:calc(10px + 1.2vmin)}.MuiSvgIcon-root{position:absolute;bottom:2px;left:2px;width:100em;height:100em;font-size:2rem;text-shadow:0 2px 25px rgba(0,0,0,.3)}.credits{bottom:2px;left:0px;position:absolute;text-align:left;min-width:50px}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted #000}.tooltip .tooltiptext{visibility:hidden;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:20px;position:absolute;z-index:1;position:absolute;bottom:40px;left:60px;margin-left:-60px;opacity:0;transition:opacity 1s}.tooltip:hover .tooltiptext{visibility:visible;opacity:1}#center{margin-left:2vw;margin-right:2vw;display:flex;flex-direction:column;justify-content:center;font-size:calc(10px + 2vmin);text-align:center}::placeholder{color:#fff;opacity:1}:-ms-input-placeholder{color:#fff}#root{background-size:cover;background-repeat:no-repeat;background-position:center center;background-attachment:fixed;min-height:100vh;display:grid;color:#fff}.App-link{color:#61dafb}body{background:#2f3640;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Lexend Deca";overflow:hidden}@font-face{font-family:"Lexend Deca";src:url("/./fonts/LexendDeca-Regular.woff2") format("woff2"),url("/./fonts/LexendDeca-Regular.woff") format("woff"),url("/./fonts/LexendDeca.ttf") format("truetype")}/*# sourceMappingURL=index.css.map */

View File

@@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["../scss/modules/_clock.scss","../scss/modules/_greeting.scss","../scss/modules/_quote.scss","../scss/modules/_search.scss","../scss/modules/_credit.scss","../scss/modules/_miscellaneous.scss","../scss/index.scss"],"names":[],"mappings":"AAAA,WACI,cACA,SACA,oCAGJ,oBACE,eCPF,cACI,SACA,gBACA,oCCHJ,WACE,eACA,oCAGF,qCACE,WACE,gBACA,kBAIJ,kBACE,eACA,oBACA,SACA,oCAGF,qCACE,eCpBF,YACI,kBACA,UACA,SACA,aACA,mBACA,cACA,WACA,0BACA,mBACI,eACA,aAIA,eAHA,oCACI,oCAIR,6BACI,8BACA,gBACA,sBACA,aACA,WACA,kBACA,mCACA,UAIR,kBACI,YAGJ,eACI,aACA,mBACA,6CCnCJ,UACI,oBAGJ,wBACI,+BACA,oCACA,uBAGJ,cACE,kBACA,YACA,UACA,aAGF,SACE,kBACA,YACA,UAGF,0BACE,+BAGF,iBACE,kBACA,WACA,SACA,YACA,aACA,eACA,sCAGF,SACI,WACA,SACA,kBACA,gBACA,eAGJ,SACI,kBACA,qBACA,8BAEA,sBACI,kBACA,sBACA,WACA,kBACA,kBACA,aACA,kBACA,UACA,kBACA,YACA,UACA,kBAEA,UACA,sBAIR,4BACE,mBACA,UCxEF,QACI,gBACA,iBACA,aACA,sBACA,uBACA,6BACA,kBAGJ,cACE,WACA,UAGF,uBACE,WCTF,MACI,sBACA,4BACA,kCACA,4BACA,iBACA,aACA,WAGJ,UACI,cAGJ,KACI,mBACA,SACA,mCACA,kCACA,0BACA,gBAGJ,WACI,0BACA","file":"index.css"}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,16 +0,0 @@
body {
margin: 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-family: 'Lexend Deca';
}
@font-face {
font-family: 'Lexend Deca'; /* IE9 Compat Modes */
src: url('/src/fonts/LexendDeca-Regular.woff2') format('woff2'), /* Super Modern Browsers */
url('/src/fonts/LexendDeca-Regular.woff') format('woff'), /* Pretty Modern Browsers */
url('/src/fonts/LexendDeca.ttf') format('truetype'); /* Safari, Android, iOS */
}
code {
font-family: 'Lexend Deca';
}

View File

@@ -1,15 +1,10 @@
//* Imports
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
import * as serviceWorker from './serviceWorker';
import App from './App';
//* Render
ReactDOM.render(
<App />,
<App/>,
document.getElementById('root')
);
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
// Was unregister(), now register() - Derpy
serviceWorker.register();

View File

@@ -1,48 +0,0 @@
import React from 'react';
const checkTime = (i) => {
if (i < 10) i = '0' + i;
return i;
};
export default class Clock extends React.Component {
constructor(...args) {
super(...args);
this.state = {
date: ``,
ampm: ``,
};
}
startTime() {
const today = new Date();
let h = today.getHours();
const ampm = h >= 12 ? 'PM' : 'AM';
const m = checkTime(today.getMinutes());
// const s = checkTime(today.getSeconds());
if (h > 12) h = h - 12;
if (h < 12) this.setState({ date: '0' + h + ':' + m, ampm: ampm });
else this.setState({ date: h + ':' + m, ampm: ampm });
this.timeout = setTimeout(() => this.startTime(), 500);
}
componentDidMount() {
this.startTime();
}
componentWillUnmount() {
clearTimeout(this.timeout);
}
render() {
return <h1 className='App-clock'>
{this.state.date}
<span className='App-ampm-specifier'>
{this.state.ampm}
</span>
</h1>;
}
}

View File

@@ -1,17 +0,0 @@
/* eslint-disable */
import RoomIcon from '@material-ui/icons/Room';
import React from 'react';
export default class Search extends React.Component {
render() {
return (
<div className='credits'>
{/* <h1 id='location'></h1> */}
<h1 id='photographer'></h1>
<div id='backgroundCredits' className='tooltip'><RoomIcon className='locationicon'/>
<span className='tooltiptext' id='location'></span>
</div>
</div>
);
}
}

View File

@@ -1,26 +0,0 @@
import React from 'react';
export default class Greeting extends React.Component {
constructor(...args) {
super(...args);
this.state = {
greeting: ``
};
}
getGreeting() {
const h = new Date().getHours();
let t = 'Good evening'; // Set the default time string to "Good evening"
if (h < 12) t = 'Good morning'; // If it's before 12am, set the time string to "Good morning"
else if (h < 18) t = 'Good afternoon'; // If it's before 6pm, set the time string to "Good afternoon"
this.setState({ greeting: t }); // Set the state to the time string
}
componentDidMount() {
this.getGreeting();
}
render() {
return <h1 className='App-greeting'>{this.state.greeting}</h1>;
}
}

View File

@@ -1,37 +0,0 @@
import React from 'react';
import Fetch from 'unfetch';
import quotes from '../quotes.json';
export default class Quote extends React.Component {
constructor(...args) {
super(...args);
this.state = {
quote: ``,
author: ``
};
}
async getQuote() {
try {
let data = await Fetch('https://api.muetab.xyz/getQuote');
data = await data.json();
this.setState({ quote: data.quote, author: data.author });
} catch (e) {
const randomInt = (min, max) => { return Math.floor(Math.random() * (max - min + 1)) + min; };
const num = randomInt(1, 20);
this.setState({ quote: quotes[num].quote, author: quotes[num].author });
}
}
componentDidMount() {
this.getQuote();
}
render() {
return [
<h1 className='App-quote'>{`"${this.state.quote}"`}</h1>,
// <i class="material-icons">perm_identity</i>,
<h1 className='App-quote-author'>{`${this.state.author}`}</h1>,
];
}
}

View File

@@ -1,14 +0,0 @@
import React from 'react';
export default class Search extends React.Component {
render() {
return (
<div id='searchBar' className='search-bar'>
<form id='searchBar' className='searchbarform' action='https://duckduckgo.com/' onSubmit={('search();')}>
<input type='text' placeholder='Search' name='q' id='searchText' className='searchText' />
<div className='blursearcbBG' />
</form>
</div>
);
}
}

View File

@@ -1,21 +0,0 @@
import React from 'react';
export default class UpdateModal extends React.Component {
openModal() {
}
componentDidMount() {
}
componentWillUnmount() {
if (!this.timeout) return;
clearTimeout(this.timeout);
}
render() {
return;
}
}

View File

@@ -1,82 +0,0 @@
{
"1": {
"author": "Robert De Niro",
"quote": "Time goes on. So whatever youre going to do, do it. Do it now. Dont wait."
},
"2": {
"author": "Walt Disney",
"quote": "All our dreams can come true, if we have the courage to pursue them."
},
"3": {
"author": "Confucius",
"quote": "It does not matter how slowly you go as long as you do not stop."
},
"4": {
"author": "Roy T. Bennett",
"quote": "Believe in yourself. You are braver than you think, more talented than you know, and capable of more than you imagine."
},
"5": {
"author": "Wayne Dyer",
"quote": "If you believe it will work out, youll see opportunities. If you believe it wont, you will see obstacles."
},
"6": {
"author": "George Addair",
"quote": "Everything youve ever wanted is on the other side of fear."
},
"7": {
"author": "Winston Churchill",
"quote": "Success is not final, failure is not fatal: it is the courage to continue that counts."
},
"8": {
"author": "Paulo Coelho",
"quote": "There is only one thing that makes a dream impossible to achieve: the fear of failure"
},
"9": {
"author": "Brian Tracy",
"quote": "Your true success in life begins only when you make the commitment to become excellent at what you do."
},
"10": {
"author": "Chantal Sutherland",
"quote": "Believe in yourself, take on your challenges, dig deep within yourself to conquer fears. Never let anyone bring you down. You got to keep going."
},
"11": {
"author": "Les Brown",
"quote": "Too many of us are not living our dreams because we are living our fears."
},
"12": {
"author": "Bob Riley",
"quote": "Hard times dont create heroes. It is during the hard times when the hero within us is revealed."
},
"13": {
"author": "Jack Canfield",
"quote": "If you can tune into your purpose and really align with it, setting goals so that your vision is an expression of that purpose, then life flows much more easily."
},
"14": {
"author": "Napolean Hill",
"quote": "Whatever the mind can conceive and believe, it can achieve."
},
"15": {
"author": "Jim Rohn",
"quote": "Dont wish it were easier. Wish you were better."
},
"16": {
"author": "Serena Williams",
"quote": "A champion is defined not by their wins but by how they can recover when they fall."
},
"17": {
"author": "Sheryl Sandberg",
"quote": "Motivation comes from working on things we care about."
},
"18": {
"author": "Reese Witherspoon",
"quote": "With the right kind of coaching and determination you can accomplish anything."
},
"19": {
"author": "Hazrat Inayat Khan",
"quote": "Some people look for a beautiful place. Others make a place beautiful."
},
"20": {
"author": "Albert Einstein",
"quote": "Life is like riding a bicycle. To keep your balance, you must keep moving."
}
}

View File

@@ -1,33 +1,64 @@
/* Imports */
@import 'modules/clock';
@import 'modules/greeting';
@import 'modules/quote';
@import 'modules/search';
@import 'modules/credit';
@import 'modules/miscellaneous';
#root {
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
min-height: 100vh;
display: grid;
color: white;
}
.App-link {
color: #61dafb;
}
@import 'modules/navbar';
@import 'modules/modal';
@import 'modules/settings';
@import 'modules/toast';
body {
background: #2f3640;
margin: 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-family: 'Lexend Deca';
font-family: 'Lexend Deca', sans-serif;
overflow: hidden;
}
#center {
margin-left: 2vw;
margin-right: 2vw;
display: flex;
flex-direction: column;
justify-content: center;
font-size: calc(10px + 2vmin);
text-align: center;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
}
::placeholder {
color: #ffffff;
opacity: 1;
}
#root {
min-height: 100vh;
display: grid;
color: white;
}
#backgroundImage {
height: 100vh;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-attachment: fixed;
z-index: 0;
border: none;
transform: scale(1.1);
}
@font-face {
font-family: 'Lexend Deca';
src: url('/./fonts/LexendDeca-Regular.woff2') format('woff2');

View File

@@ -1,9 +1,10 @@
.App-clock {
.clock {
font-size: 4em;
//text-shadow: 5px 2px rgba(0, 0, 0, 0.8);
margin: 0;
text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
// text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
}
.App-ampm-specifier {
.ampm {
font-size: 0.5em;
}

View File

@@ -1,7 +1,3 @@
#location {
margin-bottom: -10px;
}
#location,
#photographer {
font-size: calc(10px + 1.2vmin);
@@ -9,6 +5,10 @@
text-overflow: ellipsis;
}
#location {
margin-bottom: -10px;
}
#photographer {
position: absolute;
bottom: 10px;
@@ -16,15 +16,9 @@
width: 1000px;
}
.tooltip {
position: absolute;
bottom: 15px;
left: 10px;
}
.personicon,
.locationicon {
font-size: calc(10px + 1.2vmin);
cursor: pointer;
}
.MuiSvgIcon-root {
@@ -34,7 +28,6 @@
width: 100em;
height: 100em;
font-size: 2rem;
text-shadow: 0 2px 25px rgba(0, 0, 0, 0.3);
}
.credits {
@@ -49,6 +42,10 @@
position: relative;
display: inline-block;
border-bottom: 1px dotted black;
bottom: 15px;
left: 10px;
-webkit-filter: drop-shadow(0px 3px 3px rgba(0, 0, 0, 0.4));
filter: drop-shadow(0px 3px 3px rgba(0, 0, 0, 0.4));
.tooltiptext {
visibility: hidden;
@@ -59,11 +56,9 @@
padding: 20px;
position: absolute;
z-index: 1;
position: absolute;
bottom: 40px;
left: 60px;
margin-left: -60px;
/* Fade in tooltip - takes 1 second to go from 0% to 100% opac: */
opacity: 0;
transition: opacity 1s;
}

View File

@@ -1,5 +1,4 @@
.App-greeting {
.greeting {
margin: 0;
font-size: 1.6em;
text-shadow: 0 0 25px rgba(0,0,0,0.3);
}

View File

@@ -1,20 +0,0 @@
#center {
margin-left: 2vw;
margin-right: 2vw;
display: flex;
flex-direction: column;
justify-content: center;
font-size: calc(10px + 2vmin);
text-align: center;
}
::placeholder {
color: #ffffff;
opacity: 1;
/* Firefox */
}
:-ms-input-placeholder {
/* Internet Explorer 10-11 */
color: #ffffff;
}

View File

@@ -0,0 +1,65 @@
.Modal {
color: #000;
background-color: #fff;
box-shadow: 0 0 200px rgba(0, 0, 0, 0.3);
border: none;
opacity: 1;
z-index: -2;
padding: 20px;
cursor: hand;
&:focus {
outline: 0;
}
}
.modalLink {
color: #5352ed;
cursor: pointer;
&:hover {
opacity: 0.8;
}
}
.closeModal {
float: right;
font-size: 2em;
cursor: pointer;
&:hover {
color: grey;
}
}
.dark {
background-color: #2f3542 !important;
color: white !important;
}
.ReactModal__Html--open,
.ReactModal__Body--open {
overflow: hidden; /* prevents background page from scrolling when the modal is open */
}
.Overlay {
position: fixed;
z-index: 999999;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100vw;
height: 90vh;
display: flex;
align-items: baseline;
justify-content: center;
margin-top: 20px;
}
.ReactModal__Content {
width: 500px;
max-width: 600px;
max-height: calc(100vh - 10vh);
box-shadow: 0 0 30px 0 rgba(0, 0, 0, 0.25);
overflow-y: auto;
position: relative;
}

View File

@@ -0,0 +1,26 @@
%navbar {
position: absolute;
text-align: right;
min-width: 50px;
cursor: pointer;
-webkit-filter: drop-shadow(0px 3px 3px rgba(0, 0, 0, 0.4));
filter: drop-shadow(0px 3px 3px rgba(0, 0, 0, 0.4));
}
.navbar1 {
@extend %navbar;
top: 50px;
right: 0px;
}
.navbar2 {
@extend %navbar;
top: 50px;
right: 50px;
}
.navbar3 {
@extend %navbar;
top: 50px;
right: 100px;
}

View File

@@ -1,23 +1,52 @@
.App-quote {
.quote {
font-size: 0.8em;
text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
}
@media screen and (min-width: 600px) {
.App-quote {
.quote {
margin-left: 30%;
margin-right: 30%;
}
}
.App-quote-author {
.quoteauthor {
font-size: 0.9em;
letter-spacing: 0.5px;
margin: 0;
text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
}
.quoteAuthor, .copyButton {
display: inline;
font-size: 0.8em;
position: relative !important;
display: block;
margin: 0 auto;
}
.copyButton {
cursor: pointer;
vertical-align: middle;
float: middle;
margin: 0 auto;
text-align: right;
transform: rotate(45deg);
}
i.material-icons,
h1.App-quote-author {
h1.quoteauthor {
display: inline;
}
button.copyButton {
background: transparent;
border: none;
color: #fff;
padding: 20px 20px;
text-align: center;
text-decoration: none;
font-size: 20px;
cursor: pointer;
border-radius: 5px;
display: table-cell
}

View File

@@ -1,4 +1,4 @@
.search-bar {
.searchbar {
position: absolute;
left: 20px;
top: 20px;
@@ -6,32 +6,20 @@
flex-direction: row;
display: block;
color: #ffff;
font-family: 'Lexend Deca';
button {
cursor: pointer;
outline: none;
i.material-icons {
text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
}
display: inline;
}
font-family: 'Lexend Deca', sans-serif;;
input[type=text] {
font-size: calc(5px + 1.2vmin);
background: none;
background: transparent;
border: 2px solid #ffff;
padding: 10px;
color: #ffff;
position: absolute;
box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
z-index: 1;
}
}
.input.searchText {
.input.searchtext {
border: none;
}

View File

@@ -0,0 +1,229 @@
$gradient: linear-gradient(90deg, #ffb032 0%, #dd3b67 100%);
.switch {
position: relative;
/* display: inline-block; */
width: 60px;
height: 34px;
float: right;
input {
opacity: 0;
width: 0;
height: 0;
}
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
border-radius: 34px;
&:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
border-radius: 50%;
}
&.round:before {
border-radius: 50%;
}
}
input {
&[type=text] {
width: 200px;
padding: 0.5rem 1rem;
box-sizing: border-box;
border-image-slice: 1;
border-image-source: $gradient;
outline: none;
font-family: 'Lexend Deca', sans-serif;
background: transparent;
}
&:checked + .slider {
background: $gradient;
&:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
}
&:focus + .slider {
box-shadow: 0 0 1px #e67e22;
}
}
::-webkit-scrollbar {
width: 5px;
background: #555;
}
h4, .switch, .expandIcons {
display: inline;
font-size: 1.4em;
font-weight: 100;
}
h4, #engines {
display: inline;
}
.section {
margin-bottom: 20px;
}
%settingsButton {
height: 45px;
width: 130px;
text-align: center;
border: none;
transition: 0.25s;
color: #fff;
cursor: pointer;
display: inline-block;
box-shadow: 20px #000;
font-size: 1.3em;
position: relative;
&:hover {
transform: translateY(-0.10em);
}
&:before {
content: '';
position: absolute;
width: 0%;
top: 0;
left: 0;
height: 100%;
transition: 0.3s linear;
z-index: -1;
color: #fff;
}
&:hover:before {
width: 100%;
}
&:active {
outline: none;
}
}
.apply {
@extend %settingsButton;
background-color: #dd3b67;
&:before {
background: $gradient;
}
}
.reset {
@extend %settingsButton;
background-color: #ffb032;
margin-left: 20px;
&:before {
background: linear-gradient(90deg, #dd3b67 0%, #ffb032 100%);
}
}
.expandIcons {
position: relative;
font-size: 25px;
vertical-align: middle;
display: inline-flex;
cursor: pointer;
transition-duration: 0.5s;
}
.extraSettings {
display: none;
border-left: 10px solid;
border-image-slice: 1;
border-width: 5px;
border-image-source: linear-gradient(to bottom, #ffb032 0%, #dd3b67 100%);
> p {
margin: 0;
padding: 0;
}
}
ul {
padding-left: 5px;
margin: 0;
> label {
vertical-align: middle;
}
}
li {
margin-top: 1px;
}
.range {
-webkit-appearance: none;
width: 200px;
height: 15px;
background: #ccc;
border-radius: 12px;
outline: none;
background: #ecf0f1;
border-radius: 12px;
box-shadow: 0 0 100px rgba(0, 0, 0, 0.3);
&::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 25px;
height: 25px;
border-radius: 12px;
background: $gradient;
cursor: pointer;
}
&::-moz-range-thumb {
width: 25px;
height: 25px;
border-radius: 12px;
background: $gradient;
cursor: pointer;
}
}
input[type=color] {
border-radius: 100%;
height: 30px;
width: 30px;
box-shadow: 0 0 1rem 0 rgba(0, 0, 0, .2);
border: none;
outline: none;
-webkit-appearance: none;
vertical-align: middle;
&::-webkit-color-swatch-wrapper {
padding: 0;
}
&::-webkit-color-swatch {
border: none;
border-radius: 100%;
}
}

View File

@@ -0,0 +1,97 @@
#toast {
visibility: hidden;
text-align: center;
position: fixed;
z-index: 2;
bottom: 30px;
padding: 10px;
box-shadow: 0 0 1rem 0 rgba(0, 0, 0, .2);
// backdrop-filter: blur(20px); stupid firefox :(
border-radius: 10px;
background: #fff;
color: #000;
text-align: left;
font-size: 16px;
width: auto;
bottom: 30px;
right: 30px;
&.show {
visibility: visible;
-webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s;
animation: fadein 0.5s, fadeout 0.5s 2.5s;
}
> img {
height: 20px;
width: auto;
float: left;
}
> hr {
margin-left: 10px;
margin-right: 10px;
}
}
.copyButton, hr {
display: inline;
vertical-align: middle;
}
hr {
height: 20px;
width: 1px;
margin: 0;
margin-left: 10px;
margin-right: 10px;
}
@-webkit-keyframes fadein {
from {
bottom: 0;
opacity: 0;
}
to {
bottom: 30px;
opacity: 1;
}
}
@keyframes fadein {
from {
bottom: 0;
opacity: 0;
}
to {
bottom: 30px;
opacity: 1;
}
}
@-webkit-keyframes fadeout {
from {
bottom: 30px;
opacity: 1;
}
to {
bottom: 0;
opacity: 0;
}
}
@keyframes fadeout {
from {
bottom: 30px;
opacity: 1;
}
to {
bottom: 0;
opacity: 0;
}
}

View File

@@ -1,135 +0,0 @@
// This optional code is used to register a service worker.
// register() is not called by default.
// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on subsequent visits to a page, after all the
// existing tabs open on the page have been closed, since previously cached
// resources are updated in the background.
// To learn more about the benefits of this model and instructions on how to
// opt-in, read https://bit.ly/CRA-PWA
const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' ||
// 127.0.0.1/8 is considered localhost for IPv4.
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
);
export function register(config) {
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
// The URL constructor is available in all browsers that support SW.
const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
if (publicUrl.origin !== window.location.origin) {
// Our service worker won't work if PUBLIC_URL is on a different origin
// from what our page is served on. This might happen if a CDN is used to
// serve assets; see https://github.com/facebook/create-react-app/issues/2374
return;
}
window.addEventListener('load', () => {
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
if (isLocalhost) {
// This is running on localhost. Let's check if a service worker still exists or not.
checkValidServiceWorker(swUrl, config);
// Add some additional logging to localhost, pointing developers to the
// service worker/PWA documentation.
navigator.serviceWorker.ready.then(() => {
console.log(
'This web app is being served cache-first by a service ' +
'worker. To learn more, visit https://bit.ly/CRA-PWA'
);
});
} else {
// Is not localhost. Just register service worker
registerValidSW(swUrl, config);
}
});
}
}
function registerValidSW(swUrl, config) {
navigator.serviceWorker
.register(swUrl)
.then(registration => {
registration.onupdatefound = () => {
const installingWorker = registration.installing;
if (installingWorker == null) {
return;
}
installingWorker.onstatechange = () => {
if (installingWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
// At this point, the updated precached content has been fetched,
// but the previous service worker will still serve the older
// content until all client tabs are closed.
console.log(
'New content is available and will be used when all ' +
'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
);
// Execute callback
if (config && config.onUpdate) {
config.onUpdate(registration);
}
} else {
// At this point, everything has been precached.
// It's the perfect time to display a
// "Content is cached for offline use." message.
console.log('Content is cached for offline use.');
// Execute callback
if (config && config.onSuccess) {
config.onSuccess(registration);
}
}
}
};
};
})
.catch(error => {
console.error('Error during service worker registration:', error);
});
}
function checkValidServiceWorker(swUrl, config) {
// Check if the service worker can be found. If it can't reload the page.
fetch(swUrl)
.then(response => {
// Ensure service worker exists, and that we really are getting a JS file.
const contentType = response.headers.get('content-type');
if (
response.status === 404 ||
(contentType != null && contentType.indexOf('javascript') === -1)
) {
// No service worker found. Probably a different app. Reload the page.
navigator.serviceWorker.ready.then(registration => {
registration.unregister().then(() => {
window.location.reload();
});
});
} else {
// Service worker found. Proceed as normal.
registerValidSW(swUrl, config);
}
})
.catch(() => {
console.log(
'No internet connection found. App is running in offline mode.'
);
});
}
export function unregister() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready.then(registration => {
registration.unregister();
});
}
}