0
0
mirror of https://github.com/yude-jp/yude.jp synced 2025-10-14 20:28:37 +09:00

356 Commits

Author SHA1 Message Date
dependabot[bot]
ec7ef77e04 Bump webpack from 5.53.0 to 5.76.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.53.0 to 5.76.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.53.0...v5.76.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-14 17:29:50 +00:00
79246ee600 Merge pull request #21 from yudejp/dependabot/npm_and_yarn/minimatch-3.1.2
Bump minimatch from 3.0.4 to 3.1.2
2023-03-08 10:27:47 +09:00
98ad910a9b Merge pull request #22 from yudejp/dependabot/npm_and_yarn/loader-utils-2.0.4
Bump loader-utils from 2.0.0 to 2.0.4
2023-03-08 10:27:38 +09:00
fc90f87285 Merge pull request #19 from yudejp/dependabot/npm_and_yarn/terser-5.14.2
Bump terser from 5.9.0 to 5.14.2
2023-03-08 10:27:27 +09:00
b07d6412ff Merge pull request #18 from yudejp/dependabot/npm_and_yarn/moment-2.29.4
Bump moment from 2.29.1 to 2.29.4
2023-03-08 10:27:14 +09:00
dependabot[bot]
6d6365c240 Bump loader-utils from 2.0.0 to 2.0.4
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.0 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.0...v2.0.4)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-16 03:22:55 +00:00
dependabot[bot]
1dd86ac2c8 Bump minimatch from 3.0.4 to 3.1.2
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2.
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-10 18:24:43 +00:00
dependabot[bot]
496fe5ee4b Bump terser from 5.9.0 to 5.14.2
Bumps [terser](https://github.com/terser/terser) from 5.9.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 04:01:00 +00:00
dependabot[bot]
cdcce3a39b Bump moment from 2.29.1 to 2.29.4
Bumps [moment](https://github.com/moment/moment) from 2.29.1 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.1...2.29.4)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-08 09:16:19 +00:00
7f3a8f8230 Merge pull request #15 from yudejp/dependabot/npm_and_yarn/next-12.1.0
Bump next from 11.1.3 to 12.1.0
2022-02-19 14:50:46 +09:00
dependabot[bot]
fae52872f1 Bump next from 11.1.3 to 12.1.0
Bumps [next](https://github.com/vercel/next.js) from 11.1.3 to 12.1.0.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v11.1.3...v12.1.0)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-17 21:07:17 +00:00
1c8bf364dd Merge pull request #14 from yudejp/dependabot/npm_and_yarn/follow-redirects-1.14.8
Bump follow-redirects from 1.14.7 to 1.14.8
2022-02-17 11:54:04 +09:00
dependabot[bot]
ef653ed749 Bump follow-redirects from 1.14.7 to 1.14.8
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-15 12:14:34 +00:00
8deac1fede Merge pull request #12 from yudejp/dependabot/npm_and_yarn/follow-redirects-1.14.7
Bump follow-redirects from 1.14.4 to 1.14.7
2022-02-06 17:02:06 +09:00
3fb52ddcfa Merge pull request #13 from yudejp/dependabot/npm_and_yarn/nanoid-3.2.0
Bump nanoid from 3.1.25 to 3.2.0
2022-02-06 17:01:57 +09:00
dependabot[bot]
a36785dded Bump nanoid from 3.1.25 to 3.2.0
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.25 to 3.2.0.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.25...3.2.0)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-22 02:29:26 +00:00
c60270c1c6 Fix link to hidden services 2022-01-17 13:17:06 +09:00
1b7319617b Add link to metrics.torproject.org 2022-01-17 13:15:30 +09:00
dependabot[bot]
aa6f4417e7 Bump follow-redirects from 1.14.4 to 1.14.7
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.7.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.7)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-15 08:15:43 +00:00
ae6c8aa9c9 Merge branch 'master' of https://github.com/yudejp/yude.jp 2022-01-06 07:56:17 +09:00
9389cc55f7 Add host oracle-a1-1, Replace iframe with img for reducing requests 2022-01-06 07:56:14 +09:00
ba0e41579a Fix close button on WakaTime.js 2022-01-06 07:49:45 +09:00
b35caef45c Fix icon size on LangSelector 2022-01-02 18:34:06 +09:00
7ac1c7199f Merge branch 'master' of https://github.com/yudejp/yude.jp 2022-01-02 18:18:39 +09:00
f697eb9b85 Fix Font Awesome icon size 2022-01-02 18:18:31 +09:00
16bb6398e4 Remove weird space 2022-01-02 18:18:25 +09:00
02b1adcf55 Add "contents" 2021-12-29 06:41:51 +09:00
34e335037c Not passing lang parameters on external links 2021-12-28 05:29:08 +09:00
0cb27e3cda Update Minecraft required version 2021-12-28 05:28:18 +09:00
92459e594f Fix TS3 2021-12-27 06:09:39 +09:00
c30312a46a Update en.md 2021-12-26 11:09:54 +09:00
5531b3a3bf Remove link to Tor & I2P from footer 2021-12-26 10:34:05 +09:00
f0cf3729a0 Merge branch 'master' of https://github.com/yudejp/yude.jp 2021-12-26 07:35:50 +09:00
ec530601b4 Add services/ 2021-12-26 07:35:41 +09:00
30547e3b81 Fix i18n tag 2021-12-26 06:58:15 +09:00
2529afa286 Update README.md 2021-12-23 18:16:55 +09:00
b62f95d483 Add links to Tor, I2P 2021-12-22 06:28:44 +09:00
2bd3b69da1 Update icon size 2021-12-12 07:15:34 +09:00
5a0e87d7d4 Update icon size 2021-12-11 21:40:26 +09:00
b6f427d605 Fix image centering 2021-12-11 21:32:51 +09:00
92bb8b995c Remove FreeSpeech banner 2021-12-11 21:32:42 +09:00
52c8cd8d1c Fix: Discord playing data fetching 2021-12-11 21:13:44 +09:00
22385a42c8 Ignore @next/next/no-img-element, react-hooks/exhaustive-deps 2021-12-11 21:13:29 +09:00
99f776b861 Avoid using next/image 2021-12-11 19:19:50 +09:00
24327251ee Remove .env.local.sample 2021-12-11 19:13:37 +09:00
1f7456db3c Fix misc errors 2021-12-11 19:07:11 +09:00
a8321b6c60 This <Link> does not need query 2021-12-11 19:03:47 +09:00
ff98956a10 Cleanup 2021-12-11 19:01:18 +09:00
db6855fbc6 Remove microCMS 2021-12-11 18:57:22 +09:00
b446a2ebae Prepare for SSG 2021-12-11 18:55:57 +09:00
86844984d2 Add .DS_Store to .gitignore 2021-12-11 18:55:39 +09:00
a72a778a03 WIP 2021-12-11 18:17:20 +09:00
d9559dd072 WIP 2021-12-11 18:07:22 +09:00
c856a34867 Add out to .gitignore 2021-12-11 07:15:52 +09:00
d3283b12b2 https://github.com/vercel/next.js/issues/28596 2021-12-11 07:15:37 +09:00
8513ee795f Cleanup 2021-12-11 06:58:32 +09:00
49bd87b276 Merge branch 'master' of https://github.com/yudejp/yude.jp 2021-12-11 06:47:47 +09:00
a095e20b6b Remove /api/PlayerName 2021-12-11 06:42:23 +09:00
33dbec3339 bye Fitbit 2021-12-11 06:32:00 +09:00
6eb140fc0a Merge pull request #11 from yudejp/dependabot/npm_and_yarn/next-11.1.3
Bump next from 11.1.2 to 11.1.3
2021-12-09 12:15:50 +09:00
dependabot[bot]
08d054f8f6 Bump next from 11.1.2 to 11.1.3
Bumps [next](https://github.com/vercel/next.js) from 11.1.2 to 11.1.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v11.1.2...v11.1.3)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-09 03:10:12 +00:00
bed955aa95 Update README.md 2021-11-25 05:59:23 +09:00
37adbffcef Update server.js 2021-10-13 09:57:45 +09:00
b1a778b5d0 Update hostname 2021-10-13 09:45:36 +09:00
e32dde3363 Temporary remove Fitbit function 2021-10-11 11:50:37 +09:00
429407820f Delete hosts 2021-10-09 06:59:56 +09:00
4e8f0435f2 Update label 2021-10-08 13:58:39 +09:00
d764ae8f32 Update docs 2021-10-03 13:55:34 +09:00
db8a0af6ca Add "またはプレイヤー名" 2021-10-03 13:18:08 +09:00
9e2f51eb5f Add UUID lookup function
Now player's profile page works on IGN query too
2021-10-03 13:12:11 +09:00
979bbe2a7f Fix implementation of heartrate retrieving, Update styling 2021-10-02 14:23:12 +09:00
de69c49d46 Delete garbage comment 2021-10-02 12:49:27 +09:00
1411e37d8f Add sleep duration, heartrate on /profile 2021-10-02 12:45:12 +09:00
a08bd36c3e Add package: date-fns 2021-10-02 12:24:49 +09:00
aaa92c3a73 Add public keys 2021-09-27 08:03:20 +09:00
ea617dd8dc Fix 404 page @ minecraft/players/[uuid] 2021-09-26 13:36:23 +09:00
5276456ac2 Fix title during page loading 2021-09-26 13:24:10 +09:00
2b6ca4354d Fix: loading implementation 2021-09-26 12:52:37 +09:00
7e7066317c Remove console.log() for debug 2021-09-26 12:27:35 +09:00
3afef82031 Add yude.keys 2021-09-25 23:09:23 +09:00
4d0b82dee3 Update [uuid].js 2021-09-25 22:14:02 +09:00
c19e797fa4 Replace "class" to "className" 2021-09-25 21:53:57 +09:00
365559158d Add group badge @ /minecraft/players/[uuid] 2021-09-25 21:51:35 +09:00
967c0f77af Add biography on minecraft/players/[uuid] 2021-09-25 07:51:13 +09:00
85c649ddca Update ja.md 2021-09-24 19:24:18 +09:00
3898a6951d Avoid using toString() 2021-09-24 19:08:39 +09:00
7ad04ba8ef Update export default name 2021-09-24 19:07:48 +09:00
e3e4cc5a5e Fix page title @ /minecraft/players/[uuid] 2021-09-24 19:06:26 +09:00
a4982c7ef3 Fix: error handling on 404 2021-09-24 17:43:07 +09:00
c957d791a6 Update return format 2021-09-24 17:25:26 +09:00
971be8ab25 Replace "class" to "className" 2021-09-24 16:49:49 +09:00
eb46a60119 Remove weird comments 2021-09-24 16:49:07 +09:00
7629eb6c49 Implement basic user page for Minecraft server 2021-09-24 16:47:45 +09:00
f8357e2068 Add crafatar.com to trusted source of images 2021-09-24 16:47:27 +09:00
ee913461f1 Using next.config.js rewrite for UUID validation 2021-09-24 10:08:30 +09:00
b95c6b4cd5 [/minecraft/players/] Add basic function to retrieve player's data 2021-09-24 09:15:03 +09:00
b0b900cc10 Update comment 2021-09-24 08:10:26 +09:00
296e4d6298 Add redirects to Amazon wishlist, Scrapbox (via Next.js) 2021-09-22 08:23:29 +09:00
2c0bc0f5f6 Add unmet dependencies 2021-09-22 07:51:08 +09:00
73d159c1a6 Update packages 2021-09-22 07:46:38 +09:00
34df66d050 Fix: Do not pass children as props. 2021-09-22 07:43:10 +09:00
0258de61b0 Fix unused val, Add comments 2021-09-22 07:24:00 +09:00
958e9803fb Fix typo 2021-09-22 07:19:34 +09:00
7ee5d348dd Fix: avoid doing export default and val declare at the same time 2021-09-22 07:19:12 +09:00
24cf758cad Add alt to images 2021-09-22 07:13:49 +09:00
a8186fb801 Enable Next.js lint 2021-09-22 07:13:44 +09:00
65fbb55a33 Add redirects to wishlist, Scrapbox 2021-09-22 07:09:49 +09:00
b59a6b6926 Add .vercel to .gitignore 2021-09-22 07:07:59 +09:00
623db08e1a Merge pull request #10 from yudejp/dependabot/npm_and_yarn/nth-check-2.0.1
Bump nth-check from 2.0.0 to 2.0.1
2021-09-21 13:18:04 +09:00
dependabot[bot]
3a947d2932 Bump nth-check from 2.0.0 to 2.0.1
Bumps [nth-check](https://github.com/fb55/nth-check) from 2.0.0 to 2.0.1.
- [Release notes](https://github.com/fb55/nth-check/releases)
- [Commits](https://github.com/fb55/nth-check/compare/v2.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: nth-check
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-21 04:17:03 +00:00
yude
8f6953df10 Add server status for "saika" host 2021-09-21 13:16:09 +09:00
yude
3c7d783a9c Add link to my Amazon wishlist 2021-09-21 13:12:56 +09:00
39457ec092 Add posts/ 2021-09-06 10:39:12 +09:00
7099eac000 Add pkg: react-moment, Remove pkg: dayjs 2021-09-06 10:31:55 +09:00
c12ea87daf Add i18n key: "post_list" 2021-09-06 10:25:18 +09:00
d239a211fc Add env key: MICROCMS_API_KEY 2021-09-06 10:25:06 +09:00
aa4b214239 Add microcms-js-sdk, dayjs 2021-09-06 10:24:50 +09:00
aa10c2fee7 Remove link to mstdn.yude.jp (It's no longer public service) 2021-09-06 09:52:38 +09:00
3db0a78c29 Fix i18n key locations 2021-09-03 10:46:36 +09:00
8cb9b12b8a Merge pull request #9 from yudejp/dependabot/npm_and_yarn/next-11.1.1
Bump next from 11.1.0 to 11.1.1
2021-09-02 13:27:02 +09:00
dependabot[bot]
0a50795838 Bump next from 11.1.0 to 11.1.1
Bumps [next](https://github.com/vercel/next.js) from 11.1.0 to 11.1.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v11.1.0...v11.1.1)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 19:31:29 +00:00
51f67deb11 Update Footer.js 2021-08-28 14:37:30 +09:00
0d6a65e8f0 Rename files 2021-08-15 16:59:58 +09:00
bddc61768c Update icon 2021-08-15 16:59:54 +09:00
c2edfeb82c Move some translations to common.json 2021-08-15 16:59:34 +09:00
e6d61ff4ce Remove unused import (icon) 2021-08-14 10:32:55 +09:00
aafc72d5d9 Remove unused component 2021-08-14 10:29:27 +09:00
94c966d58c Add comments, Load default SEO config 2021-08-14 10:16:53 +09:00
fafd1f4533 Remove unused instructions 2021-08-14 10:16:41 +09:00
d923c686ae Add comments and SEO, Code organization 2021-08-14 10:12:42 +09:00
93c8be4214 Code organization, Add SEO 2021-08-14 10:12:37 +09:00
efb5e34b90 Add comments and SEO, Code organization 2021-08-14 10:12:22 +09:00
3802286327 Add next-seo.config.js 2021-08-14 10:11:50 +09:00
1287e54b43 Add SEO component on minecraft/ 2021-08-14 10:04:46 +09:00
d9279ee88f Add comments, code organization 2021-08-14 10:02:17 +09:00
95c6b29db0 Add pkg: next-seo 2021-08-14 10:00:29 +09:00
54e9f0cb61 Update dep: react, react-dom 2021-08-14 09:50:06 +09:00
93ec789a1b Merge pull request #8 from yudejp/dependabot/npm_and_yarn/next-11.1.0
Bump next from 10.2.3 to 11.1.0
2021-08-14 09:49:27 +09:00
299034c391 Add 404 page 2021-08-14 09:43:33 +09:00
4b673b8c9c Remove unused import 2021-08-14 09:42:18 +09:00
dependabot[bot]
6fcb31fb68 Bump next from 10.2.3 to 11.1.0
Bumps [next](https://github.com/vercel/next.js) from 10.2.3 to 11.1.0.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v10.2.3...v11.1.0)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-13 03:19:37 +00:00
9f95e24ede Remove garbage 2021-08-09 12:46:27 +09:00
d3bf8cc2f2 Update index.js 2021-08-09 12:46:10 +09:00
3fdfcd4359 Folder organizing, Modularize profile items 2021-08-09 12:45:48 +09:00
9532e0f48b Rename 2021-08-09 12:29:42 +09:00
8a0897cc00 Update FAMenu.js 2021-08-09 11:58:29 +09:00
29af6383a7 Update variable 2021-08-09 11:55:46 +09:00
c7c4177edd Remove garbage 2021-08-09 11:54:24 +09:00
9d77edd973 Revert "Try to fix CI"
This reverts commit 7f2411b2f6.
2021-08-09 11:47:11 +09:00
7f2411b2f6 Try to fix CI 2021-08-09 11:43:30 +09:00
ffc6acb9cb Update how to load icons 2021-08-09 11:33:00 +09:00
b1dabb8fb9 Fix icon 2021-08-09 11:25:03 +09:00
7932b63d60 Try to fix CI 2021-08-09 11:15:16 +09:00
18473ec7fd Rename 2021-08-09 11:07:49 +09:00
859aa2bbab Modularize banners 2021-08-09 11:04:26 +09:00
ba2a8a365c Add comments, menu for minecraft/ 2021-08-09 11:00:58 +09:00
0e7a1292e0 Remove garbage 2021-08-09 11:00:40 +09:00
8f185e05dc Modularize happybusy 2021-08-09 11:00:34 +09:00
d558d666b1 Update path of footer menu 2021-08-09 10:59:39 +09:00
97be65a6a4 Add menu for minecraft/ 2021-08-09 10:59:11 +09:00
23b791a9bf Revert "Add comments, load MinecraftMenu"
This reverts commit f530891563.
2021-08-09 10:56:07 +09:00
f530891563 Add comments, load MinecraftMenu 2021-08-09 10:55:45 +09:00
6f274deea8 Remove garbage 2021-08-09 10:55:24 +09:00
e7cda9d4c5 Remove garbage 2021-08-09 10:54:16 +09:00
460225328b Folder organizing (Discord related components) 2021-08-09 10:52:38 +09:00
34ed4f27cf Modularize index icons 2021-08-09 10:52:02 +09:00
b3e9d02025 Move files from /public/static to /public 2021-08-09 10:15:53 +09:00
b20e9d6271 Delete link to blog.yude.jp 2021-08-07 17:24:08 +09:00
97fdedc6ac Add badge: happybusy, Free Speech Online Blue Ribbon 2021-07-24 00:06:11 +09:00
291e83d732 Merge branch 'master' of https://github.com/yudejp/yude.jp 2021-07-21 09:18:15 +09:00
e94bf01439 Fix Nintendo SW logo on light mode 2021-07-21 09:17:44 +09:00
7da9e16b63 Merge pull request #7 from underecho/master
ページのリロード時に変更ボタンがずれる
2021-07-15 21:23:20 +09:00
under
8f58012cdb ページのリロード時に変更ボタンがずれる
close #6
2021-07-15 14:42:52 +09:00
0d21be23a1 Fix file name 2021-06-26 22:19:43 +09:00
8b4bce6251 Update URL of server status page 2021-06-26 22:08:12 +09:00
13601e4f28 Change URL of server status page 2021-06-26 22:08:01 +09:00
e2fd1f603c Update character style 2021-06-26 22:07:43 +09:00
12052f7aba Fix typo 2021-06-23 13:06:47 +09:00
157da46a07 Update minecraft.js 2021-06-23 13:05:02 +09:00
998fe67c15 Add padding 2021-06-22 17:59:40 +09:00
6e065045ad Place 4 icons in a row 2021-06-22 12:49:20 +09:00
0eecba7c88 Align button styling 2021-06-22 12:39:51 +09:00
518a2bc6ef Remove tooltip because it's quite buggy (currently considering another way) 2021-06-22 12:34:49 +09:00
2b18f5f759 Remove unused import 2021-06-22 12:34:29 +09:00
32f41aae32 Remove outline on ThemeSelector button 2021-06-22 12:29:09 +09:00
50ee7f1bb6 Merge branch 'master' of https://github.com/yudejp/yude.jp 2021-06-22 12:27:15 +09:00
870b970e00 Remove effect on focus 2021-06-22 12:27:08 +09:00
20b4f9b122 Merge pull request #5 from MISONLN41/patch-1
ツールチップが出る箇所全体にクリック判定をもたせる
2021-06-22 12:21:38 +09:00
65d075fb76 Apply dark-theme on dropdown menu content 2021-06-22 12:18:42 +09:00
b73c38a531 Remove underline on hover (@ global) 2021-06-22 12:18:21 +09:00
2921bbeca1 Apply dark-theme on LangSelector 2021-06-22 12:12:46 +09:00
81b9b82028 Change the icon of ThemeChanger 2021-06-22 12:08:26 +09:00
1bd8eab491 Fix styling 2021-06-22 10:29:22 +09:00
5009e95433 Change label of LangSelector 2021-06-22 10:26:45 +09:00
Misoni
8f8fdacbfd ツールチップが出る箇所全体にクリック判定をもたせる
場当たり的な対応です 無視してもらって構いません
2021-06-21 18:42:23 +09:00
c00d4f60a9 Add link to status.yude.jp 2021-06-20 16:59:03 +09:00
09184f93df Why did you try to change constant value LOL 2021-06-19 18:08:49 +09:00
fb1d20dd96 Fix online status when I'm offline 2021-06-19 18:01:47 +09:00
c14961d1d2 Add Nintendo SW 2021-06-17 20:33:47 +09:00
e7fb45a544 Update docs 2021-06-16 17:18:58 +09:00
f107f658c9 Fix tag for translation 2021-06-15 07:17:51 +09:00
35f1a49162 Add mutual links page 2021-06-15 07:15:32 +09:00
78615ee324 Update docs 2021-06-14 21:14:20 +09:00
52bedbd4c6 Update docs 2021-06-14 21:07:17 +09:00
89ca9e55ed Merge pull request #4 from yudejp/imgbot
[ImgBot] Optimize images
2021-06-14 19:19:30 +09:00
ImgBotApp
0a3c9daac4 [ImgBot] Optimize images
*Total -- 5,294.13kb -> 3,181.69kb (39.9%)

/public/static/images/busy_banner.png -- 6.39kb -> 2.66kb (58.32%)
/public/static/images/minecraft/lockette/chest.png -- 19.24kb -> 9.83kb (48.91%)
/public/static/images/minecraft/large_field.png -- 1,783.94kb -> 958.07kb (46.29%)
/public/static/images/minecraft/sugarcane.png -- 607.16kb -> 331.50kb (45.4%)
/public/static/images/dynmap.png -- 1,435.14kb -> 890.22kb (37.97%)
/public/static/images/minecraft/shrine.png -- 687.11kb -> 463.48kb (32.55%)
/public/static/images/minecraft/golem_trap.png -- 755.15kb -> 525.93kb (30.35%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2021-06-14 10:18:19 +00:00
c98b17938f Update rules 2021-06-14 18:47:55 +09:00
72b2043164 Update minecraft/ 2021-06-14 18:44:59 +09:00
e2fe3cd998 Change the way to inject translations 2021-06-14 12:48:30 +09:00
0a6341f2df Change expression 2021-06-14 12:38:36 +09:00
f8b4f7a20a Fix missing value 2021-06-14 12:38:00 +09:00
adfa4106e2 Change the way to inject translations 2021-06-14 12:36:18 +09:00
970d9cf352 Update README 2021-06-14 12:29:15 +09:00
94f6c60f23 Update dependencies 2021-06-11 18:47:33 +09:00
7f229336bd Update dependencies 2021-06-11 18:43:22 +09:00
5ccf701795 Minecraft 1.17 is released 2021-06-11 16:08:47 +09:00
ca8dcf7cf5 Fix status badge position on smartphone (or narrow width devices) 2021-06-02 15:06:27 +09:00
36d18de96d Add status of komachi, Update hostname of all servers 2021-06-02 14:23:04 +09:00
68679ca4e8 Fix syntax 2021-06-02 08:23:02 +09:00
cb460b9b7f Add player's head on online players listing 2021-06-02 08:15:01 +09:00
636863883a Add mc-heads.net to trusted domains list 2021-06-02 08:14:38 +09:00
40c98e4c1f Add status for "iroha" (on Oracle Cloud) 2021-06-01 17:09:29 +09:00
4e5eda745b Add link to account / device listing 2021-06-01 10:51:29 +09:00
290ece6aba Add margin-top on Dynmap button 2021-05-31 10:10:09 +09:00
8d2673ce02 Add copy button for server address 2021-05-31 10:09:14 +09:00
02aa9e97e1 Add server version 2021-05-31 10:06:04 +09:00
6d28753dd7 Restore API source 2021-05-31 10:03:55 +09:00
62925709f8 Add "Retrieving server status..." text 2021-05-31 09:59:14 +09:00
d7099acd8b Remove garbage 2021-05-30 18:31:01 +09:00
a52d5a2074 Fix status badge & name positioning 2021-05-30 18:26:40 +09:00
8406afaa29 Change data fetching / rendering method 2021-05-30 18:16:55 +09:00
48fc60bd07 Change data retrieving method 2021-05-30 17:59:08 +09:00
3dd345c10f Remove logging for debug, translate msgs for error handling 2021-05-30 14:11:40 +09:00
557ff11a82 Add link to minecraft/ 2021-05-30 13:46:29 +09:00
a1605c8970 Add button for Dynmap 2021-05-30 13:39:48 +09:00
ccfd1761cc Change API source, error handling 2021-05-30 13:37:20 +09:00
b532bb04d3 Change API source, Add server address 2021-05-30 13:31:17 +09:00
3400be0357 Add page "minecraft/" 2021-05-30 12:55:44 +09:00
c8c40d1257 Remove shadow 2021-05-30 11:30:22 +09:00
e7d9336a3d Delete margin on top 2021-05-30 11:16:22 +09:00
bb550f8185 Revert "Decrease top margin" and Delete top margin on Footer
This reverts commit ef9e13b66b.
2021-05-30 11:16:10 +09:00
ef9e13b66b Decrease top margin 2021-05-30 11:14:40 +09:00
3948147d64 Make widget for Public keys listing 2021-05-30 11:13:23 +09:00
d1d057cc84 Make widget for WakaTime 2021-05-30 10:44:57 +09:00
3ff7368f06 Add max-height scale 2021-05-30 10:39:24 +09:00
ca6c94090c Add translation: "閉じる" 2021-05-30 10:36:21 +09:00
d402ec85c2 Update margin settings 2021-05-30 10:36:03 +09:00
bb88dd6a02 Update README 2021-05-28 12:50:00 +09:00
622d43554f Update variables 2021-05-28 11:55:00 +09:00
8b3a484d08 Fix DiscordPlaying, Spotify 2021-05-28 11:43:00 +09:00
e7643e30a8 Add error handling, Update message format 2021-05-28 11:36:45 +09:00
cd93e4691d Add console logging (for ease of debug) 2021-05-28 11:33:22 +09:00
32064d4ba2 Try to use getServerSideProps(), Cleanup 2021-05-28 11:26:28 +09:00
ebf88ba96b Add Spotify #NowPlaying 2021-05-28 11:07:47 +09:00
dc8ccde80c Add translation for Spotify function 2021-05-28 10:42:54 +09:00
04abc7d4bf Add lib: useRequest.js 2021-05-28 10:42:42 +09:00
9ad8943b6d Add packages: axios, swr 2021-05-28 10:42:33 +09:00
ff919b2999 Fix DiscordPlaying: error handling 2021-05-28 10:42:03 +09:00
019bf3c4ad Add API route for Spotify 2021-05-28 07:51:36 +09:00
8ad79231a2 Add package: querystring 2021-05-28 07:35:40 +09:00
88e7a6abf9 Add .env.local for Spotify Web API 2021-05-28 07:35:30 +09:00
9f2e0cc407 Update margin 2021-05-28 07:27:11 +09:00
c33cebd4c1 Show underline on hover 2021-05-28 07:27:01 +09:00
52a21e952b Add WakaTime widget 2021-05-28 07:24:07 +09:00
11073186de Update README.md 2021-05-28 07:18:59 +09:00
37ac2d2f7a Update package.json 2021-05-28 07:18:37 +09:00
d41215438b Update margin 2021-05-27 23:57:11 +09:00
92060aeade Fix width of Discord status badge 2021-05-27 23:33:14 +09:00
9ad748affa Multilingual suport (hcunews/) 2021-05-27 10:31:55 +09:00
2e4456cb91 Preferable language switch on ToS page 2021-05-27 10:26:11 +09:00
12408fbc52 Add hcunews 2021-05-27 10:03:44 +09:00
cd574f0cc9 Fix circle position 2021-05-26 08:03:22 +09:00
a787f8d805 Update width 2021-05-26 08:01:46 +09:00
b65e165ac4 [WIP] Fix margin (on responsive) 2021-05-26 08:01:02 +09:00
ad8fa9d69d Cleanup margin styling 2021-05-26 07:53:02 +09:00
44493605fd Delete unused const 2021-05-26 07:52:23 +09:00
e2db2de68b Show nothing when nothing playing 2021-05-25 16:47:04 +09:00
6caa13923f Add playing status on profile 2021-05-25 16:45:46 +09:00
4d4483521d Add tooltip on index page 2021-05-24 16:51:13 +09:00
e9a1ac881e Update margin 2021-05-24 16:26:35 +09:00
51661aa5f7 Add link to Spaces on Matrix Network 2021-05-24 16:17:02 +09:00
MISONLN41
a985ed97e8 Append z-index to dropdown menu in LangSelector.js 2021-05-24 12:09:08 +09:00
3a70be536b Add Discord's status badge 2021-05-24 01:22:46 +09:00
c147a60690 Update yarn.lock 2021-05-23 17:05:25 +09:00
64c8bfdcaa Merge branch 'master' of https://github.com/yudejp/yude.jp
# Conflicts:
#	package-lock.json
#	package.json
#	yarn.lock
2021-05-23 17:03:01 +09:00
993918b617 Fix styling (centering) 2021-05-23 16:55:21 +09:00
55645aabbd Update / cleanup packages, Cleanup repository 2021-05-23 16:53:55 +09:00
8443002ca3 Merge pull request #3 from yudejp/dependabot/npm_and_yarn/postcss-8.2.10
Bump postcss from 8.2.4 to 8.2.10
2021-05-23 16:37:51 +09:00
dependabot[bot]
a5cd66a6fa Bump postcss from 8.2.4 to 8.2.10
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.4 to 8.2.10.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.4...8.2.10)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-23 07:36:43 +00:00
d02e2857ae Add en_US translations 2021-05-23 16:28:08 +09:00
21d696a391 Update link for ToS, GitHub Orgs 2021-05-23 16:27:51 +09:00
4887277013 Update global styling 2021-05-23 16:09:40 +09:00
5cee3eef6c Update filename for source .md 2021-05-23 16:09:35 +09:00
97c751feac Add tos.md 2021-05-23 16:09:24 +09:00
540e012a11 Setup ToS page 2021-05-23 16:02:08 +09:00
03ebe866f9 Load globals.css 2021-05-23 16:01:37 +09:00
0fa245e3b8 Update heading styling 2021-05-23 16:01:29 +09:00
49a957cba1 Add packages 2021-05-23 16:01:17 +09:00
e3a8ea3e5f Change style applying position 2021-05-23 15:48:06 +09:00
9e8429eb6f Load package for styling 2021-05-23 15:46:22 +09:00
3668206bd5 Add packages for styling, markdown rendering 2021-05-23 15:46:11 +09:00
396e7a0af0 Update configuration for raw-loader 2021-05-23 15:45:54 +09:00
b5bde482d7 Update base styling 2021-05-23 15:45:42 +09:00
68386bd8c2 Update translation 2021-05-23 15:45:24 +09:00
56b552cac3 Cleanup 2021-05-23 14:54:22 +09:00
7ff35ba2f9 Setup ToS page 2021-05-23 14:05:48 +09:00
4a7973fbf6 Integrate footer component 2021-05-23 14:02:27 +09:00
9130e072df Remove scrolling bar, Fix comments 2021-05-23 10:49:00 +09:00
bd4e059023 Cleanup 2021-05-23 10:46:33 +09:00
20582570fb Update next.config.js 2021-05-23 10:38:58 +09:00
a1cf438b97 Change component name 2021-05-23 10:37:23 +09:00
d1f0180c13 Remove console logging 2021-05-22 10:28:32 +09:00
3f205d95f5 Cleanup old code 2021-05-22 10:25:10 +09:00
5e068b05ca Switch button text by theme condition 2021-05-22 10:23:46 +09:00
efaf3180f6 Revert "Using "tailwind-darkmode-toggle" instead of "next-themes""
This reverts commit 37e1a5fca7.
2021-05-22 10:12:17 +09:00
ca2886afd0 Fix typo 2021-05-22 10:08:39 +09:00
37e1a5fca7 Using "tailwind-darkmode-toggle" instead of "next-themes" 2021-05-22 10:07:04 +09:00
yude
1131a1f9dc Add badge 2021-05-21 18:57:55 +09:00
fde368d833 Cleanup 2021-05-21 18:50:24 +09:00
e76d06ce0a Add dark-mode switcher 2021-05-21 18:36:19 +09:00
bfd432c11d Update README 2021-05-21 17:19:18 +09:00
d90e9cf0c4 Add house 2021-05-18 22:42:47 +09:00
85d6b65d88 Update link destination 2021-05-16 20:34:21 +09:00
0327678ca9 Update link to Mastodon instance 2021-05-15 07:00:09 +09:00
fa6b8370dc Fix link 2021-05-10 18:30:28 +09:00
53e79519a6 Update link 2021-05-10 07:48:54 +09:00
bd8578994e Change link 2021-05-09 22:27:19 +09:00
f5c6792bec Fix link to ToS 2021-05-01 21:32:04 +09:00
d5b19549e8 Fix z-index 2021-05-01 18:28:53 +09:00
357d7939f6 Add server status page 2021-04-21 17:17:07 +09:00
e473f53601 Add link to restored services 2021-04-20 07:32:00 +09:00
da34aa404b Removed stopped services 2021-04-19 18:40:13 +09:00
eacfb52068 Upgrade RAM 2021-04-07 18:15:36 +09:00
ce0b7d9b6a Add link to GitHub Organization 2021-03-31 05:44:36 +09:00
2b149d6eab Change GitHub username 2021-03-31 05:26:48 +09:00
63ba3146ff Update .gitignore 2021-03-17 22:57:10 +09:00
1664a306e0 Fix text wrapping 2021-03-15 14:56:18 +09:00
65c1fe54d5 Fix embed dest 2021-03-13 08:30:44 +09:00
e8a4407724 Update link to wiki.yude.jp 2021-03-09 10:01:07 +09:00
b546941b40 Add GPG publickey to fix broken link 2021-03-08 14:51:49 +09:00
17032fd526 Add public keys 2021-03-08 14:46:59 +09:00
7128518433 Update locale ids 2021-03-08 13:44:14 +09:00
3066f5c51a Update locale ids, Update my grade 2021-03-08 13:40:37 +09:00
b56be0976e Change darkMode to "media" 2021-03-08 13:40:06 +09:00
a5d189a401 Add packages, Update tailwind.config.js 2021-03-08 13:37:56 +09:00
4aa120e7a9 Update tailwind.config.js 2021-03-07 17:27:58 +09:00
6d1a5cd5be Set proper colors 2021-03-07 14:17:49 +09:00
b554e856a7 Set proper color 2021-03-06 01:46:16 +09:00
554cce901e Change darkMode option to "media" 2021-03-06 01:30:12 +09:00
a1d8cbb923 Cleanup repository (Delete Cloudflare, GitHub Actions related files) 2021-02-27 11:45:06 +09:00
b8dd78d89e Switch port number 2021-02-22 14:06:49 +09:00
aba80b9451 Add link to Twitter, Mastodon (don.yude.jp) 2021-02-22 14:06:44 +09:00
869c0089f3 Update styling, text format 2021-02-21 17:22:54 +09:00
5d22326555 Major update on profile page 2021-02-21 16:54:51 +09:00
d6d71e9bc3 Update localization 2021-02-21 16:54:42 +09:00
954a166d2e Add animation, allow animate-* to use hover: and focus: 2021-02-21 16:54:28 +09:00
104 changed files with 5308 additions and 16726 deletions

4
.babelrc Normal file
View File

@@ -0,0 +1,4 @@
{
"presets": [ "next/babel" ],
"plugins": [ "inline-react-svg" ]
}

8
.eslintrc.json Normal file
View File

@@ -0,0 +1,8 @@
{
"extends": "next/core-web-vitals",
"rules": {
"@next/next/no-document-import-in-page": "off",
"@next/next/no-img-element": "off",
"react-hooks/exhaustive-deps": "off"
}
}

View File

@@ -1,46 +0,0 @@
name: Cloudflare Workers
on:
push:
branches:
- master
jobs:
build-and-deploy:
name: Build and Deploy
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: setup node
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Cache dependencies
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install packages
run: yarn install --frozen-lockfile
- name: Build pages
run: yarn build
- name: Export
run: yarn export
- name: Add nojekyll
run: touch ./out/.nojekyll
- name: Publish to Cloudflare Workers
uses: cloudflare/wrangler-action@1.3.0
env:
USER: root
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
workingDirectory: './'

6
.gitignore vendored
View File

@@ -8,3 +8,9 @@ debug.log
dist
.next
yarn-error.log
.vimrc~
..vimrc.un~
.env.local
out
.vercel
.DS_Store

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"git.ignoreLimitWarning": true
}

View File

@@ -1,2 +1,13 @@
# yude.jp
Front page of [yude.jp](https://yude.jp).
![Vercel](https://vercelbadge.vercel.app/api/yudejp/yude.jp?style=for-the-badge)
<img alt="Next JS" src="https://img.shields.io/badge/nextjs-%23000000.svg?style=for-the-badge&logo=next.js&logoColor=white"/>
<img alt="TailwindCSS" src="https://img.shields.io/badge/tailwindcss-%2338B2AC.svg?style=for-the-badge&logo=tailwind-css&logoColor=white"/>\
Source code of [yude.jp](https://yude.jp).\
Built with [Next.js](https://nextjs.org/) and [Tailwind CSS](https://tailwindcss.com/) and deployed to [Cloudflare Pages](https://pages.cloudflare.com/).
## Development
1. Run `yarn` to install dependencies.
2. Run `yarn dev` to serve.
## License
This repository is provided under the MIT License.

17
docs/hcunews/en.md Normal file
View File

@@ -0,0 +1,17 @@
This is **unofficial** account and there's no guarantee of accuracy.
# Administrator
Run by [yude](https://yude.jp/profile), a student of Faculty of Information Science, Hiroshima City University, 2nd grade.
## Contact
* E-mail: [admin@yude.jp](mailto:admin@yude.jp)
* Twitter: [@yude_jp](https://twitter.com/yude_jp)
# How it works
Microsoft Power Automate get the RSS feed from Hiroshima City University Website and tweet when a new article is available. \
We are monitoring the following URLs:
* [お知らせ|広島市立大学](https://www.hiroshima-cu.ac.jp/news/)
* [お知らせ(在学生・保護者の方へ)|広島市立大学](https://www.hiroshima-cu.ac.jp/news_student/)
* [在学生・保護者の方へ|広島市立大学](https://www.hiroshima-cu.ac.jp/student/)
# Related links
* [広島市立大学](https://www.hiroshima-cu.ac.jp/)

16
docs/hcunews/ja.md Normal file
View File

@@ -0,0 +1,16 @@
このアカウントは**非公式**アカウントです。また、内容を保証するものではありません。
# 連絡先
広島市立大学 情報科学部 2年の [yude](https://yude.jp/profile) が管理しています。このアカウントについての連絡は下記までお願いします。
* 電子メール: [admin@yude.jp](mailto:admin@yude.jp)
* Twitter: [@yude_jp](https://twitter.com/yude_jp)
# 仕組み
Microsoft Power Automate によって広島市立大学 Web ページの RSS フィードを取得し、新しい記事が投稿されている場合にツイートします。\
次の URL を監視しています。
* [お知らせ|広島市立大学](https://www.hiroshima-cu.ac.jp/news/)
* [お知らせ(在学生・保護者の方へ)|広島市立大学](https://www.hiroshima-cu.ac.jp/news_student/)
* [在学生・保護者の方へ|広島市立大学](https://www.hiroshima-cu.ac.jp/student/)
# 関連リンク
* [広島市立大学](https://www.hiroshima-cu.ac.jp/)

35
docs/minecraft/en.md Normal file
View File

@@ -0,0 +1,35 @@
# Rules
The following applies in addition to [yude.jp Terms of Service](https://yude.jp/tos):
* You can build your house / facility / etc. anywhere in the world.
* Don't troll.
* Don't cheat.
# Part of the list of available commands ()
* `/ll`: Switch the visibility of spawn checker.
* `/mvspawn`: Teleport to spawn point of the world you're in.
# Convenient functionalities
## Bulk destruction
You can destroy wood logs and ore blocks at once by destroying with sneaking.\
## Block protection
You can protect your chests, doors, furnaces, etc. by pasting sign like the image below.\
You can also create a shared block by writing the player ID across multiple lines. \
![Chest Protection](/images/minecraft/lockette/chest.png)
## Skills
You can use skills powered by mcMMO.
## Warp
You can warp to registered points.
To show registered points, run `/warps`. To warp, run `/warp <name>`.
# Game specifications
* `keepInventory` is `true`, which means you won't drop inventory on death.
# Facility introduction
## Shrine (by shirachan_1204)
![Shrine](/images/minecraft/shrine.png)
## Iron Golem Trap (by yude & kuwazi_)
![Iron Golem Trap](/images/minecraft/golem_trap.png)
## Huge field (by yude & kuwazi_)
![Huge field](/images/minecraft/large_field.png)
## Giant sugar cane field (by yude)
![Giant sugar cane field ](/images/minecraft/sugarcane.png)

34
docs/minecraft/ja.md Normal file
View File

@@ -0,0 +1,34 @@
# ルール
[yude.jp サービス利用規約](https://yude.jp/tos) に加えて、以下が適用されます。
* ワールドのどこであっても自由に建築することができます。
* トロール (荒らし) を行わないでください。
* チートを行わないでください。
# 主な使用可能なコマンドの一覧
* `/ll`: スポーンチェッカーの表示を切り替えます。
* `/mvspawn`: ワールドのスポーン地点へ転移します。
# 便利機能
## 一括破壊
木や鉱石ブロックをスニーク (しゃがむ) しながら破壊すると一括破壊できます。
## ブロックの保護
看板を画像のように貼り付けることで、チェストやドア、かまどなどを保護できます。\
複数行に渡ってプレイヤー ID を書くことで、共有ブロックを作ることもできます。\
![Chest Protection](/images/minecraft/lockette/chest.png)
## スキル
mcMMO を導入しているので、プラグインによるスキルを利用できます。
## ワープ
登録されている地点へワープできます。
`/warps` で登録地点の一覧を表示し、`/warp (登録名)` でワープします。
# ゲームの仕様
* `keepInventory``true` になっています。したがって、死亡によるインベントリーのドロップはありません。
# 施設紹介
## 神社 (by shirachan_1204)
![神社](/images/minecraft/shrine.png)
## アイアンゴーレムトラップ (by yude & kuwazi_)
![アイアンゴーレムトラップ](/images/minecraft/golem_trap.png)
## 巨大畑 (by yude & kuwazi_)
![巨大畑](/images/minecraft/large_field.png)
## 巨大サトウキビ畑 (by yude)
![巨大サトウキビ畑](/images/minecraft/sugarcane.png)

14
docs/mutual/en.md Normal file
View File

@@ -0,0 +1,14 @@
# Mutual links
Publishing the website whose links to yude.jp.
## Link listing
### カービィ★KIRBYの家 `https://exout.net/~kirby3ds/`
[![kirby3ds](/images/mutual/kirby3ds.png)](https://exout.net/~kirby3ds/)
### こーげんやさい `https://nona-takahara.github.io/`
[![こーげんやさい](/images/mutual/nona-takahara.png)](https://nona-takahara.github.io/)
## To those who want to link yude.jp
Thank you! You can use the banner below to link this website.
[![yude.jp](/images/banner_new.png)](https://yude.jp)

14
docs/mutual/ja.md Normal file
View File

@@ -0,0 +1,14 @@
# 相互リンク
この Web サイトをリンクしてくださっている方のページを掲載します。
## リンク一覧
### カービィ★KIRBYの家 `https://exout.net/~kirby3ds/`
[![kirby3ds](/images/mutual/kirby3ds.png)](https://exout.net/~kirby3ds/)
### こーげんやさい `https://nona-takahara.github.io/`
[![こーげんやさい](/images/mutual/nona-takahara.png)](https://nona-takahara.github.io/)
## このサイトをリンクしてくださる方へ
ありがとうございます!以下のバナーを使用して、この Web サイトをリンクすることができます。
[![yude.jp](/images/banner_new.png)](https://yude.jp)

23
docs/services/en.md Normal file
View File

@@ -0,0 +1,23 @@
# Available services on yude.jp
## Softwares
* [AutoMuteUs](https://github.com/denverquane/automuteus)\
Among Us helper; API: [`galactus.yude.jp`](https://galactus.yude.jp)
* [Nextcloud](https://nc.yude.jp)
* [Mastodon](https://mstdn.yude.jp)
* [Misskey](https://misskey.yude.jp)
* [Pleroma](https//pleroma.yude.jp)
* TeamSpeak 3: `yude.jp`
* [Gitea](https://git.yude.jp)
* [h5ai](https://files.yude.jp)
* [JMusicBot (forked)](https://discord.com/oauth2/authorize?client_id=429638220456656896&scope=bot&permissions=338963472)
* [Owncast](https://live.yude.jp)
* [Minecraft Server](https://yude.jp/minecraft)
## Anonymous communication
### Tor
* Relay: [yudejp](https://metrics.torproject.org/rs.html#details/CF762EF3C86B104C301511894547C72371F952A4)
* Hidden Service: [yude3mzscyufx5u3zup72ium7tgecy3bd67p7t6vqhaywvr7e2gqpcqd.onion](http://yude3mzscyufx5u3zup72ium7tgecy3bd67p7t6vqhaywvr7e2gqpcqd.onion)
### I2P
* Hidden Service: [yudejp.i2p/?i2paddresshelper=55ivoba6mo3mqlwvw5lqz7lchxqew2kh77kwkn5shefrj2dp3coq.b32.i2p](http://yudejp.i2p/?i2paddresshelper=55ivoba6mo3mqlwvw5lqz7lchxqew2kh77kwkn5shefrj2dp3coq.b32.i2p)

23
docs/services/ja.md Normal file
View File

@@ -0,0 +1,23 @@
# yude.jp で運用中のサービス
## ソフトウェア
* [AutoMuteUs](https://github.com/denverquane/automuteus)\
Among Us の自動ミュートボット; API: [`galactus.yude.jp`](https://galactus.yude.jp)
* [Nextcloud](https://nc.yude.jp)
* [Mastodon](https://mstdn.yude.jp)
* [Misskey](https://misskey.yude.jp)
* [Pleroma](https//pleroma.yude.jp)
* TeamSpeak 3: `yude.jp`
* [Gitea](https://git.yude.jp)
* [h5ai](https://files.yude.jp)
* [JMusicBot (フォーク)](https://discord.com/oauth2/authorize?client_id=429638220456656896&scope=bot&permissions=338963472)
* [Owncast](https://live.yude.jp)
* [Minecraft サーバー](https://yude.jp/minecraft)
## 秘匿化ネットワーク
### Tor
* リレー: [yudejp](https://metrics.torproject.org/rs.html#details/CF762EF3C86B104C301511894547C72371F952A4)
* Hidden Service: [yude3mzscyufx5u3zup72ium7tgecy3bd67p7t6vqhaywvr7e2gqpcqd.onion](http://yude3mzscyufx5u3zup72ium7tgecy3bd67p7t6vqhaywvr7e2gqpcqd.onion)
### I2P
* Hidden Service: [yudejp.i2p/?i2paddresshelper=55ivoba6mo3mqlwvw5lqz7lchxqew2kh77kwkn5shefrj2dp3coq.b32.i2p](http://yudejp.i2p/?i2paddresshelper=55ivoba6mo3mqlwvw5lqz7lchxqew2kh77kwkn5shefrj2dp3coq.b32.i2p)

19
docs/tos/en.md Normal file
View File

@@ -0,0 +1,19 @@
# yude.jp Terms of Service
The following ToS apply to services running under the yude.jp domain.
## About service operation
Our services are run by yude for experimental purposes and there's no guarantee on them.\
Those may be suspended temporarily or permanently (e.g. for server maintenance) without any announcement.
## Prohibited actions
The actions listed below are prohibited on the service running under the yude.jp domain (especially on Mastodon instance).\
Our administrator or moderator may take some action against the violating user's account.
* Post images or movies for adults, or grotesque
* Violent language that deviates from common sense
* Chat spamming
* Cracking our server(s)
* Actions that the administrator or moderator deems inappropriate
In addition, the laws of Japan, where the server is running, apply.
## Misc
These ToS may be updated by the administrator without any announcement, but we will always notify you with in the Mastodon instance ([mstdn.yude.jp](https://mstdn.yude.jp)) or on our Twitter account ([@yudejp](https://twitter.com/yudejp) or [@yude_jp](https://twitter.com/yude_jp)).

18
docs/tos/ja.md Normal file
View File

@@ -0,0 +1,18 @@
# yude.jp サービス利用規約
yude.jp ドメイン以下に設置されているサービスについて、以下の利用規約が適用されます。
## サービス運用について
yude が実験的に運用しており、完全に無保証で提供されるものです。
事前の予告なくサーバーのメンテナンスを行う場合など、予告なくサービスの提供が一時停止、または永久に停止されることがあります。
## 禁止行為
以下の行為を、yude.jp で提供されるサービス、特に Mastodon インスタンス上において行うことを禁止します。 違反が見受けられた場合、管理者またはモデレーターによってアカウントに対し何らかの処分が下される可能性があります。
* 成人向け、またはグロテスクな画像・動画の投稿
* 常識を逸脱した暴言
* スパム行為
* サーバーへのクラック行為
* 管理者が不適切であると判断した行為
その他、サーバーの設置拠点である日本国の法律が適用されます。
## その他
この利用規約は管理者が利用者に対して了承を得ず更新することができますが、その際には必ず通知を Mastodon インスタンス内、または Twitter 上 ([@yudejp](https://twitter.com/yudejp) または [@yude_jp](https://twitter.com/yude_jp)) において行うものとします。

View File

@@ -1,9 +0,0 @@
{
"locales": ["en-US", "ja-JP"],
"defaultLocale": "ja-JP",
"pages": {
"/": ["index", "common"],
"/profile": ["profile", "common"],
"/status": ["status", "common"]
}
}

12
i18n/index.js Normal file
View File

@@ -0,0 +1,12 @@
var ja = require('./translations.ja.json');
var en = require('./translations.en.json')
const i18n = {
translations: {
ja: ja,
en: en,
},
defaultLang: 'ja'
}
module.exports = i18n;

67
i18n/translations.en.json Normal file
View File

@@ -0,0 +1,67 @@
{
"caption": "The requested page does not exist on this website.",
"return": "Return to top",
"footer": "This page is provided under the MIT License.",
"source": "Source code",
"tos": "yude.jp Terms of Service",
"yes_playing": "Playing {{playing}}",
"listening": "Listening to {{listening}}",
"close": "Close",
"mutual": "Mutual links",
"status": "Service Status",
"icon_1": "Icon: ",
"icon_2": " ",
"post_list": "Posts listing",
"hcunews": "About @hcunews",
"house": "yude's house",
"home": "Home",
"profile": "yude's profile",
"blog": "yude's blog",
"status": "yude.jp Server Status",
"house": "yude's house",
"discord": "yude.jp Discord Server",
"mastodon": "Mastodon instance",
"title": "Minecraft Multiplayer",
"playing": "{{count}} player(s) online.",
"no_one": "No one is playing.",
"offline": "Server is down.",
"address": "Server address",
"fail": "Failed to retrieve server status.",
"loading": "Retrieving server status...",
"version": "Version",
"about": "About yude",
"desc": "Description",
"school": "Faculty of Information Science, Hiroshima City University.",
"hiroshima": "Hiroshima, Japan",
"location": "Location",
"link": "Links",
"link_all": "To see all of yude's account, please visit ",
"link_all_late": ".",
"here": "here",
"mail": "E-mail",
"birth": "Birthday",
"date": "November the 19th, 2001",
"contact": "Accounts",
"belongs": "Organization",
"grade": "B2",
"keys": "Public keys",
"download": "Download",
"fingerprint": "Digital fingerprint",
"view": "View",
"device": "Devices",
"account": "Accounts",
"wishlist": "Amazon Wishlist",
"status": "Server Status",
"location": "Location",
"tottori": "Tottori, Japan",
"hiroshima": "Hiroshima, Japan",
"model": "Model",
"region": "Region",
"service": "Service",
"shape": "Shape",
"tos": "yude.jp Terms of Service",
"input": "en",
"services": "Services",
"contents": "Contents",
"Blog": "Weblog"
}

67
i18n/translations.ja.json Normal file
View File

@@ -0,0 +1,67 @@
{
"caption": "要求されたページはこのウェブサイト上に存在しません。",
"return": "トップページへ戻る",
"footer": "このページは MIT License のもと提供されています。",
"source": "ソースコード",
"tos": "yude.jp サービス利用規約",
"yes_playing": "{{playing}} をプレイ中",
"listening": "{{listening}} を再生中",
"close": "閉じる",
"mutual": "相互リンク",
"status": "サービスの状態",
"icon_1": "アイコン: ",
"icon_2": "さん",
"post_list": "記事一覧",
"hcunews": "@hcunews について",
"house": "ゆでハウス",
"home": "ホーム",
"profile": "yude のプロフィール",
"blog": "yude のブログ",
"status": "yude.jp サーバー情報",
"house": "ゆでハウス",
"discord": "yude.jp Discord サーバー",
"mastodon": "Mastodon インスタンス",
"title": "Minecraft マルチプレイ",
"playing": "{{count}} 人がプレイしています。",
"no_one": "現在、誰もログインしていません。",
"offline": "サーバーがオフラインのようです。",
"address": "サーバー アドレス",
"fail": "サーバーの状態を取得できませんでした。",
"loading": "サーバーの状態を取得しています...",
"version": "バージョン",
"about": "yude について",
"desc": "概要",
"school": "広島市立大学 情報科学部",
"hiroshima": "日本, 広島県",
"location": "所在地",
"link": "リンク",
"link_all": "yude が所持しているすべてのアカウントの一覧は、",
"link_all_late": "にあります。",
"here": "こちら",
"mail": "メール",
"birth": "生年月日",
"date": "2001年11月19日",
"contact": "アカウント",
"belongs": "所属",
"grade": "2年",
"keys": "公開鍵",
"download": "ダウンロード",
"fingerprint": "電子指紋",
"view": "閲覧",
"device": "デバイス",
"account": "アカウント",
"wishlist": "Amazon ほしいものリスト",
"status": "サーバー情報",
"location": "場所",
"tottori": "日本, 鳥取県",
"hiroshima": "日本, 広島県",
"model": "モデル",
"region": "リージョン",
"service": "サービス",
"shape": "シェイプ",
"tos": "yude.jp サービス利用規約",
"input": "ja",
"services": "サービス",
"contents": "コンテンツ",
"blog": "ブログ"
}

View File

@@ -1,5 +0,0 @@
{
"footer": "This page is licensed under the MIT License.",
"source": "Source code",
"tos": "yude.jp Terms of Service"
}

View File

@@ -1,3 +0,0 @@
{
"home": "Home"
}

View File

@@ -1,11 +0,0 @@
{
"about": "About yude",
"desc": "Description",
"school": "Faculty of Information Science, Hiroshima City University. (1st grade)",
"location": "Hiroshima, Japan",
"link": "Links",
"link_all": "To see all of yude's account, please visit ",
"link_all_late": ".",
"here": "here",
"mail": "E-mail"
}

View File

@@ -1,7 +0,0 @@
{
"status": "Server Status",
"location": "Location",
"tottori": "Tottori, Japan",
"hiroshima": "Hiroshima, Japan",
"model": "Model"
}

View File

@@ -1,5 +0,0 @@
{
"footer": "このページは MIT License の下でライセンスされています。",
"source": "ソースコード",
"tos": "yude.jp サービス利用規約"
}

View File

@@ -1,3 +0,0 @@
{
"home": "ホーム"
}

View File

@@ -1,11 +0,0 @@
{
"about": "yude について",
"desc": "概要",
"school": "広島市立大学 情報科学部 1年",
"location": "日本, 広島県",
"link": "リンク",
"link_all": "yude が所持しているすべてのアカウントの一覧は、",
"link_all_late": "にあります。",
"here": "こちら",
"mail": "メール"
}

View File

@@ -1,7 +0,0 @@
{
"status": "サーバー情報",
"location": "場所",
"tottori": "日本, 鳥取県",
"hiroshima": "日本, 広島県",
"model": "モデル"
}

2
next-env.d.ts vendored
View File

@@ -1,2 +0,0 @@
/// <reference types="next" />
/// <reference types="next/types/global" />

13
next-seo.config.js Normal file
View File

@@ -0,0 +1,13 @@
export default {
openGraph: {
type: 'website',
locale: 'ja_JP',
url: 'https://yude.jp/',
site_name: 'yude.jp',
},
twitter: {
handle: '@yudejp',
site: '@yudejp',
cardType: 'summary_large_image',
},
};

View File

@@ -1,15 +1,40 @@
const nextTranslate = require('next-translate')
module.exports = nextTranslate({
experimental: {
darkModeVariant: true
},
i18n: {
// These are all the locales you want to support in
// your application
locales: ['ja-JP', 'en-US'],
// This is the default locale you want to be used when visiting
// a non-locale prefixed path e.g. `/hello`
defaultLocale: 'ja-JP',
const rewrites = async () => {
return [
{
source: '/minecraft/players/:uuid(\[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})',
destination: '/minecraft/players/:uuid'
},
{
source: '/minecraft/players/:ign',
destination: '/minecraft/lookup/:ign'
}
})
]
}
module.exports = {
images: {
domains: ['mackerel.io', 'mc-heads.net', 'crafatar.com'],
},
webpack: function (config) {
config.module.rules.push({
test: /\.md$/,
use: 'raw-loader',
})
return config
},
async redirects() {
return [
{
source: '/wishlist',
destination: 'https://www.amazon.jp/hz/wishlist/ls/8WTKCPWKOJ2N?ref_=wl_share',
permanent: true,
},
{
source: '/scrapbox',
destination: 'https://scrapbox.io/yude',
permanent: true,
}
]
},
rewrites,
}

14255
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,10 +4,11 @@
"description": "Front page of yude.jp",
"main": "index.js",
"scripts": {
"dev": "next -p 3000",
"dev": "next",
"build": "next build",
"start": "next start",
"export": "next export"
"export": "next export",
"lint": "next lint"
},
"repository": {
"type": "git",
@@ -21,26 +22,44 @@
},
"homepage": "https://github.com/yudemoe/yude.jp#readme",
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.34",
"@fortawesome/free-brands-svg-icons": "^5.15.2",
"@fortawesome/free-solid-svg-icons": "^5.15.2",
"@fortawesome/react-fontawesome": "^0.1.14",
"@zeit/next-css": "^1.0.1",
"autoprefixer": "^10.2.4",
"next": "^10.0.6",
"next-themes": "^0.0.10",
"next-translate": "^1.0.2",
"@babel/core": "^7.15.5",
"@fortawesome/fontawesome-svg-core": "^1.2.36",
"@fortawesome/free-brands-svg-icons": "^5.15.4",
"@fortawesome/free-solid-svg-icons": "^5.15.4",
"@fortawesome/react-fontawesome": "^0.1.15",
"@tailwindcss/typography": "^0.4.0",
"autoprefixer": "^10.3.4",
"axios": "^0.21.4",
"date-fns": "^2.24.0",
"moment": "^2.29.4",
"next": "^12.1.0",
"next-export-i18n": "^1.2.1",
"next-seo": "^4.28.1",
"next-themes": "^0.0.15",
"next-translate": "^1.2.0",
"popper.js": "^1.16.1",
"postcss": "^8.2.4",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"tailwindcss": "^2.0.2",
"postcss": "^8.3.6",
"prop-types": "^15.7.2",
"querystring": "^0.2.1",
"raw-loader": "^4.0.2",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-markdown": "^7.0.1",
"react-moment": "^1.1.1",
"react-switch": "^6.0.0",
"remark-gfm": "^2.0.0",
"swr": "^1.0.1",
"tailwindcss": "^2.2.15",
"tailwindcss-filters": "^3.0.0",
"tailwindcss-responsive-embed": "^1.0.0"
"tailwindcss-responsive-embed": "^1.0.0",
"webpack": "^5.76.0"
},
"devDependencies": {
"@types/node": "^14.14.25",
"@types/react": "^17.0.1",
"typescript": "^4.1.3"
"@types/node": "^16.9.6",
"@types/react": "^17.0.24",
"babel-plugin-inline-react-svg": "^2.0.1",
"eslint": "7.32.0",
"eslint-config-next": "11.1.2",
"typescript": "^4.4.3"
}
}

21
pages/_app.js Normal file
View File

@@ -0,0 +1,21 @@
// Tailwind CSS
import 'tailwindcss/tailwind.css';
import "../styles/globals.css"
// Dark-mode related
import { ThemeProvider } from "next-themes";
// next-seo
import { DefaultSeo } from 'next-seo';
import SEO from '../next-seo.config';
function MyApp({ Component, pageProps }) {
return (
<ThemeProvider attribute="class">
<DefaultSeo {...SEO} />
<Component {...pageProps} />
</ThemeProvider>
);
}
export default MyApp;

18
pages/_document.js Normal file
View File

@@ -0,0 +1,18 @@
import React from "react";
import Document, { Html, Head, Main, NextScript } from "next/document";
class MyDocument extends Document {
render() {
return (
<Html>
<Head />
<body className="bg-gray-100 text-black dark:bg-gray-800 dark:text-white">
<Main />
<NextScript />
</body>
</Html>
);
}
}
export default MyDocument;

View File

@@ -0,0 +1,38 @@
// React
import React, { useState, useEffect } from 'react';
// Data fetching
import useSwr from 'swr'
const fetcher = (url) => fetch(url).then((res) => res.json())
// i18n
import { useTranslation, useLanguageQuery } from 'next-export-i18n';
export default function DiscordPlaying() {
const { t } = useTranslation();
const [query] = useLanguageQuery();
const { data, error } = useSwr(
`https://discord.com/api/guilds/723409709306216498/widget.json`,
fetcher
)
if (error){
console.log("[Discord API] データの取得に失敗しました。 / Failed to retrieve data.")
return <></>
} else {
if (!data) {
return <p>Loading...</p>
} else {
if (data.members) {
if (data.members[0].game) {
const yes_playing = t('yes_playing', {playing: data.members[0].game.name})
return <p>{yes_playing}</p>
} else {
return <></>
}
} else {
return <></>
}
}
}
}

View File

@@ -0,0 +1,46 @@
// React
import React, { useState, useEffect } from 'react';
// Data fetching
import axios from 'axios';
const App = () => {
const [data, setData] = useState({ hits: [] });
useEffect(() => {
const fetchData = async () => {
const result = await axios(
'https://discord.com/api/guilds/723409709306216498/widget.json',
);
setData(result.data);
};
fetchData();
}, []);
const str = JSON.stringify(data)
let status = 0
if (str.indexOf("status") !== -1){
status = data.members && data.members[0].status;
}
return (
<>
<div className="z-50 w-6 transform translate-y-3/4 -translate-x-full">
{
(() => {
if (status == 0) {
return <div className="text-gray-700 rounded-full bg-gray-500 flex w-6 h-6"></div>
}else{
if (status == "online"){
return <div className="text-green-700 rounded-full bg-green-500 flex w-6 h-6"></div>
} else if (status == "idle"){
return <div className="text-yellow-700 rounded-full bg-green-500 flex w-6 h-6"></div>
} else {
return <div className="text-yellow-700 rounded-full bg-red-500 flex w-6 h-6"></div>
}
}
})()
}
</div>
</>
)
}
export default App;

View File

@@ -0,0 +1,26 @@
// Tailwind CSS
import "tailwindcss/tailwind.css";
// Next.js
import Link from 'next/link';
// i18n
import { useTranslation, useLanguageQuery } from 'next-export-i18n';
export default function Footer(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
return (
<>
<div className="container mx-auto px-6">
<div className="flex flex-col items-center">
<div className="sm:w-full text-center py-6">
<p className="text-sm font-bold mb-2">
{t('footer')} / <Link href="https://github.com/yudejp/yude.jp"><a className="hover:underline">{t('source')}</a></Link>
</p>
</div>
</div>
</div>
</>
);
}

View File

@@ -0,0 +1,20 @@
// Next.js
import Link from 'next/link'
const HappyBusy = (props) => {
return (
<Link href="https://sites.google.com/site/happybusy/">
<a>
<img
src="/images/busy_banner.png"
width={200}
height={42}
alt="時間のないサイト運営者リング"
className="mx-auto"
/>
</a>
</Link>
)
}
export default HappyBusy

View File

@@ -1,12 +1,14 @@
import React from "react";
import Popper from "popper.js";
import { useRouter } from 'next/router'
import Link from 'next/link';
import { faLanguage } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
const Dropdown = ({ color }) => {
const router = useRouter()
const { locale, locales, defaultLocale, pathname } = router
// dropdown props
const [dropdownPopoverShow, setDropdownPopoverShow] = React.useState(false);
const btnDropdownRef = React.createRef();
@@ -28,8 +30,8 @@ const Dropdown = ({ color }) => {
return (
<>
<div className="relative inline-block text-left mr-2 float-right">
<button type="button" className="inline-flex justify-center w-full rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-100 focus:ring-indigo-500" id="options-menu" aria-haspopup="true" aria-expanded="true"
<div className="text-left mr-2 ml-2 my-3 float-right">
<button type="button" className="inline-flex justify-center rounded-md border border-gray-300 dark:border-gray-800 shadow-sm px-2 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 dark:bg-gray-700 dark:text-white focus:outline-none h-10" id="options-menu" aria-haspopup="true" aria-expanded="true"
style={{ transition: "all .15s ease" }}
ref={btnDropdownRef}
onClick={() => {
@@ -38,22 +40,20 @@ const Dropdown = ({ color }) => {
: openDropdownPopover();
}}
>
言語 / Languages
<svg className="-mr-1 ml-2 h-5 w-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<FontAwesomeIcon icon={faLanguage} size="3x" />
<svg className="-mr-1 ml-2 h-9 w-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
</svg>
</button>
<div ref={popoverDropdownRef} className={
(dropdownPopoverShow ? "block " : "hidden ") + "origin-top-right absolute right-0 mt-2 w-40 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5"}>
(dropdownPopoverShow ? "block " : "hidden ") + "z-10 origin-top-right absolute right-0 mt-2 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 dark:bg-gray-700"}>
<div className="py-1" role="menu" aria-orientation="vertical" aria-labelledby="options-menu">
<Link href="#" locale="ja-JP">
<a href="#" className="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900" role="menuitem">日本語</a>
</Link>
<Link href="#" locale="en-US">
<a href="#" className="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900" role="menuitem">English</a>
</Link>
<LanguageSwitcher lang="ja">
<a href="#" className="block px-4 py-2 text-gray-700 hover:bg-gray-100 hover:text-gray-700 dark:text-white dark:hover:bg-gray-800" role="menuitem">日本語</a>
</LanguageSwitcher>
<LanguageSwitcher lang="en">
<a href="#" className="block px-4 py-2 text-gray-700 hover:bg-gray-100 hover:text-gray-700 dark:text-white dark:hover:bg-gray-800" role="menuitem">English</a>
</LanguageSwitcher>
</div>
</div>
</div>

View File

@@ -1,52 +1,34 @@
// Next.js
import Head from "next/head"
import Link from "next/link"
// Tailwind CSS
import "tailwindcss/tailwind.css";
import useTranslation from 'next-translate/useTranslation'
import { useRouter } from 'next/router'
// React
import React, { useEffect, useState } from 'react'
// Components
import Footer from "./Footer/Footer"
import Navbar from "./Navbar"
const Layout = (props) => {
const { title, children } = props
const siteTitle = "yude.jp"
const router = useRouter()
const { locale, locales, defaultLocale, pathname } = router
const { t, lang } = useTranslation("common")
const footer = t('footer')
const source = t('source')
const tos = t('tos')
return (
<div className="page">
<Head>
<title>{title ? `${title} - ${siteTitle}` : siteTitle}</title>
<link rel="icon" href="/static/images/favicon.ico" />
<link rel="icon" href="/images/favicon.ico" />
</Head>
<body className="min-h-screen bg-gray-900 text-white subpixel-antialiased">
<main>
<div className="page-main">
<Navbar />
<div className="max-w-2xl mx-auto">
<div className="mx-2">
{children}
</div>
<style jsx global>{`
body {
text-align: center;
}
`}</style>
<div className="container mx-auto px-6">
<div className="mt-16 flex flex-col items-center">
<div className="sm:w-full text-center py-6">
<p className="text-sm font-bold mb-2 text-gray-400">
{footer} / <Link href="https://github.com/yudemoe/yude.jp"><a className="hover:underline">{source}</a></Link>
</p>
<p className="text-sm font-bold mb-2 text-gray-400">
<Link href="https://wiki.yude.jp/terms"><a className="hover:underline">{tos}</a></Link>
</p>
</div>
</div>
</div>
<Footer />
</main>
</body>
</div>
)
}

View File

@@ -0,0 +1,21 @@
// Next.js
import Link from 'next/link'
// Font Awesome
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
const FontAwesomeMenu = (props) => {
const { icon, dest, query } = props
return (
<div>
<Link href={{ pathname: dest, query: query }}>
<a>
<FontAwesomeIcon icon={icon} size="5x" className="w-9 h-9 fill-current inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" />
</a>
</Link>
</div>
)
}
export default FontAwesomeMenu

View File

@@ -0,0 +1,24 @@
// Next.js
import Link from 'next/link'
const MinecraftMenu = (props) => {
const { query } = props
if (!query) {
return <p>Loading...</p>
} else {
return (
<div>
<Link href={{ pathname: "/minecraft", query: query }}>
<a>
<svg className="fill-current text-black dark:text-white w-10 h-10 inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 304.8 304.8">
<path d="M 39.10262 126.138 L 39.16748 12.39574 L 152.7982 12.33506 L 266.4289 12.27438 L 266.4289 126.0773 L 266.4289 239.8803 L 152.7333 239.8803 L 39.03775 239.8803 L 39.10262 126.138 Z M 260.4857 126.0776 L 260.4857 18.55703 L 152.8628 18.55703 L 45.23985 18.55703 L 45.23985 126.0776 L 45.23985 233.5982 L 152.8628 233.5982 L 260.4857 233.5982 L 260.4857 126.0776 Z M 103.8963 162.9245 L 103.8963 126.0776 L 116.1702 126.0776 L 128.4441 126.0776 L 128.4441 113.8758 L 128.4441 101.674 L 152.8628 101.674 L 177.2814 101.674 L 177.2814 113.8758 L 177.2814 126.0776 L 189.3835 126.0776 L 201.4856 126.0776 L 201.6573 150.5415 C 201.7517 163.9967 201.829 180.5779 201.8291 187.3885 L 201.8293 199.7715 L 189.6869 199.7715 L 177.5446 199.7715 L 177.4776 187.5093 L 177.4106 175.2471 L 152.7982 175.1855 L 128.1857 175.1239 L 128.1857 187.4477 L 128.1857 199.7715 L 116.041 199.7715 L 103.8963 199.7715 L 103.8963 162.9245 Z M 79.34843 77.02888 L 79.34843 52.62534 L 103.7671 52.62534 L 128.1857 52.62534 L 128.1857 77.02888 L 128.1857 101.4324 L 103.7671 101.4324 L 79.34843 101.4324 L 79.34843 77.02888 Z M 177.5398 77.02888 L 177.5398 52.62534 L 201.9585 52.62534 L 226.3771 52.62534 L 226.3771 77.02888 L 226.3771 101.4324 L 201.9585 101.4324 L 177.5398 101.4324 L 177.5398 77.02888 Z"/>
</svg>
</a>
</Link>
</div>
)
}
}
export default MinecraftMenu

View File

@@ -0,0 +1,64 @@
// React
import React, { useState, useEffect } from 'react';
// i18n
import { useTranslation, useLanguageQuery } from 'next-export-i18n';
import axios from 'axios';
export default function Minecraft(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
const [data, setData] = useState({ hits: [] });
useEffect(() => {
const fetchData = async () => {
const result = await axios(
'https://api.mcsrvstat.us/2/yude.jp',
);
setData(result.data);
};
fetchData();
}, []);
if (data === undefined){
console.log("[Minecraft Query] データの取得に失敗しました。 / Failed to retrieve data.")
return (
<p>{t('fail')}</p>
)
}else{
const status = data.online
const player = data.players && data.players.online
return (
<div className="text-center">
{(() => {
if (status == true) {
if (player == undefined || player == 0) {
return <span>{t('no_one')}</span>
} else {
return <span>{t('playing', {count: player})}</span>
}}else if (status == false) {
return <span>{t('offline')}</span>
}else {
return <span>{t('loading')}</span>
}
})()}
{(() => {
if (data.players && data.players.list){
var list = [];
var url = [];
for (var i in data.players.list){
url.push('https://mc-heads.net/avatar/' + data.players.list[i])
}
for (var i in url){
list.push(<img src={url[i]} key={i} className="inline" height="50" width="50" alt={i}/>)
}
return <div>{list}</div>
}
})()}
</div>
)
}
}

View File

@@ -0,0 +1,33 @@
import React, { useState, useEffect } from 'react';
import axios from 'axios';
function App (props) {
const uuid = props;
const [data, setData] = useState({ hits: [] });
useEffect(() => {
const fetchData = async () => {
const result = await axios(
'https://playersbio.yude.jp/' + uuid.uuid,
);
setData(result.data);
};
fetchData();
}, []);
if (data === undefined){
console.log("[Minecraft: PlayersBio] データの取得に失敗しました。 / Failed to retrieve data.")
return <p></p>
}else {
if (data.toString() == "[object Object]"){
return <p>読み込み中...</p>
} else {
if (data.toString() == "") {
return <p>ひとことは設定されていません...</p>
} else {
return <p>ひとこと: <span className="italic">{data.toString()}</span></p>
}
}
};
}
export default App;

View File

@@ -0,0 +1,30 @@
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import { useRouter } from 'next/router'
function App (props) {
const uuid = props;
const [data, setData] = useState({ hits: [] });
useEffect(() => {
const fetchData = async () => {
const result = await axios(
'https://minecraft.yude.jp/group/' + uuid.uuid,
);
setData(result.data);
};
fetchData();
}, []);
if (data === undefined || data === null){
return <p></p>
}else {
if (data.toString() == "staff") {
return <span className="inline-flex items-center justify-center px-3 py-2 text-base font-bold leading-none text-indigo-100 bg-indigo-700 rounded ml-3">Staff</span>
} else {
return <></>
}
};
}
export default App;

View File

@@ -0,0 +1,15 @@
import React, { useState, useEffect } from 'react';
function App (props) {
const uuid = props;
return (
<img
src={"https://crafatar.com/renders/body/" + uuid.uuid}
width={110}
height={250}
/>
)
}
export default App;

View File

@@ -0,0 +1,65 @@
import React, { useState, useEffect } from 'react';
import axios from 'axios';
function App (props) {
const uuid = props;
const [data, setData] = useState({ hits: [] });
const timeAgo = (prevDate) => {
const diff = Number(new Date()) - prevDate;
const minute = 60 * 1000;
const hour = minute * 60;
const day = hour * 24;
const month = day * 30;
const year = day * 365;
switch (true) {
case diff < minute:
const seconds = Math.round(diff / 1000);
return `${seconds} 秒前`
case diff < hour:
return Math.round(diff / minute) + ' 分前';
case diff < day:
return Math.round(diff / hour) + ' 時間前';
case diff < month:
return Math.round(diff / day) + ' 日前';
case diff < year:
return Math.round(diff / month) + ' ヶ月前';
case diff > year:
return Math.round(diff / year) + ' 年前';
default:
return "";
}
};
useEffect(() => {
const fetchData = async () => {
const result = await axios(
'https://minecraft.yude.jp/last/' + uuid.uuid,
);
setData(result.data);
};
fetchData();
}, []);
if (data === undefined){
console.log("[Minecraft: 最終プレイ日時] データの取得に失敗しました。 / Failed to retrieve data.")
return <p></p>
}else {
if (data.toString() == "[object Object]") {
return <p>取得中です...</p>
} else {
if (data.toString() == "not_found") {
return <></>
} else {
let dateTime = new Date(parseInt(data.toString()) * 1000);
return (
<div className='has-tooltip'>
<span className='tooltip rounded shadow-lg p-1 bg-gray-100 text-red-500 -mt-8'>{dateTime.toLocaleDateString() + " " + dateTime.toLocaleTimeString()}</span>
最終ログイン: {timeAgo(dateTime)}
</div>
)
}
}
};
}
export default App;

View File

@@ -0,0 +1,44 @@
// React
import React, { useState, useEffect } from 'react';
// Data fetching
import axios from 'axios';
// i18n
import { useTranslation, useLanguageQuery } from 'next-export-i18n';
// Components
import LastPlayed from './LastPlayed'
function App (props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
const uuid = props;
const [data, setData] = useState({ hits: [] });
useEffect(() => {
const fetchData = async () => {
const result = await axios(
'https://minecraft.yude.jp/online/' + uuid.uuid,
);
setData(result.data);
};
fetchData();
}, []);
if (data === undefined){
console.log("[Minecraft: オンライン状況] データの取得に失敗しました。 / Failed to retrieve data.")
return <p></p>
}else {
if (data.toString() == "false") {
return <LastPlayed uuid={uuid.uuid} />
} else {
if (data.toString() == "true") {
return <p>オンライン</p>
} else {
return <p>取得中...</p>
}
}
};
}
export default App;

View File

@@ -0,0 +1,38 @@
// React
import React, { useState, useEffect } from 'react';
// Data fetching
import axios from 'axios';
function App (props) {
const uuid = props;
const [data, setData] = useState({ hits: [] });
useEffect(() => {
const fetchData = async () => {
let result = null;
try {
result = await axios('https://api.ashcon.app/mojang/v2/user/' + uuid.uuid);
setData(result.data);
} catch (err) {
result = 404;
setData(result);
}
};
fetchData();
}, []);
if (data === undefined){
console.log("[Minecraft: UUID to player's name] データの取得に失敗しました。 / Failed to retrieve data.")
return <>取得中...</>
}else {
if (data === 404) {
return <>404</>
} else {
return (
<>{data.username}</>
)
}
};
}
export default App;

View File

@@ -0,0 +1,39 @@
// Component
import Group from './Group';
// Data fetching
import useSwr from 'swr'
const fetcher = (url) => fetch(url).then((res) => res.json())
function App (props) {
const uuid = props;
const { data, error } = useSwr(
uuid.uuid ? `https://api.ashcon.app/mojang/v2/user/${uuid.uuid}` : null,
fetcher
)
if (error) {
return (
<>エラーが発生しました</>
)
} else {
if (!data) {
return (
<>読み込み中...</>
)
} else {
return (
<>
<div className='has-tooltip'>
<span className='tooltip rounded shadow-lg p-1 bg-gray-100 text-red-500 -mt-8 font-mono text-sm'>UUID: {uuid.uuid}</span>
<p className="text-2xl inline">{data.username}</p>
<Group uuid={uuid.uuid} />
</div>
</>
)
}
}
}
export default App;

View File

@@ -0,0 +1,25 @@
// Components
import Online from './Online'
import Head from './Head'
import PlayerNameHolder from './PlayerNameHolder'
import Biography from './Biography'
function App (props) {
const uuid = props;
return (
<div className="w-full flex flex-wrap">
<div>
<Head uuid={uuid.uuid} />
</div>
<div className="w-5"></div>
<div>
<p className="text-2xl text-mono"><PlayerNameHolder uuid={uuid.uuid} /></p>
<p><Online uuid={uuid.uuid} /></p>
<p><Biography uuid={uuid.uuid} /></p>
</div>
</div>
)
}
export default App;

View File

@@ -0,0 +1,9 @@
function App (props) {
return (
<div className="text-center">
<h2>入力された UUID またはプレイヤー名に該当するプレイヤーが見つかりませんでした</h2>
</div>
)
}
export default App;

View File

@@ -1,20 +1,32 @@
// Tailwind CSS
import "tailwindcss/tailwind.css";
import Popper from "popper.js";
// Next.js
import Link from 'next/link';
// Components
import LangSelector from "./LangSelector"
import ThemeSelector from "./ThemeSelector"
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
const Navbar = () => {
const { t } = useTranslation();
const [query] = useLanguageQuery();
return (
<>
<nav className='flex items-center flex-wrap p-3'>
<Link href='/'>
<a className='inline-flex items-center p-2 mr-4'>
<span className='text-xl text-white font-bold tracking-wide dark:text-white font-mono animate-heartbeat'>
<Link href={{ pathname: '/', query: query }}>
<a className='inline-flex items-center p-2'>
<span className='text-xl text-black font-bold tracking-wide dark:text-white font-mono animate-heartbeat'>
yude.jp
</span>
</a>
</Link>
<div className="origin-top-right absolute right-0">
<div className="absolute right-0">
<ThemeSelector />
<LangSelector />
</div>
</nav>

View File

@@ -0,0 +1,23 @@
// Next.js
import Link from 'next/link'
// Font Awesome
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
const Button = (props) => {
const { icon, dest, caption } = props
return (
<Link href={{ pathname: dest }}>
<a>
<button
className="bg-pink-600 text-white active:bg-pink-600 mt-3 font-bold text-sm px-6 py-3 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button"
>
<FontAwesomeIcon icon={icon} className="w-5 h-5 inline"/> {caption}
</button>
</a>
</Link>
)
}
export default Button

View File

@@ -0,0 +1,21 @@
// Next.js
import Link from 'next/link'
// Font Awesome
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
const Contact = (props) => {
const { icon, dest, caption } = props
return (
<div className="hover:underline">
<Link href={{ pathname: dest }}>
<a>
<FontAwesomeIcon icon={icon} size="5x" className="w-9 h-9 fill-current inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" />
<p className="font-mono text-xl">{caption}</p>
</a>
</Link>
</div>
)
}
export default Contact

View File

@@ -0,0 +1,35 @@
// Next.js
import Link from 'next/link'
const NintendoSW = () => {
return (
<div className="hover:underline">
<Link href="#">
<a>
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" className="w-12 h-12 inline lg:w-12 lg:h-12 md:w-12 md:h-12 fill-current text-black dark:text-white" viewBox="0 0 700 700">
<g transform="translate(-100.000000,900.000000) scale(0.100000,-0.100000)" fill="#FFFFF">
<path d="M2965 8314 c-481 -86 -868 -442 -990 -910 -44 -169 -47 -268 -42
-1579 3 -1204 4 -1232 24 -1325 111 -501 467 -858 973 -976 66 -15 150 -18
691 -21 560 -4 618 -3 633 12 15 15 16 208 16 2396 0 1622 -3 2386 -10 2400
-10 18 -27 19 -613 18 -476 -1 -619 -4 -682 -15z m905 -2400 l0 -2026 -407 5
c-375 4 -415 6 -490 25 -322 83 -561 331 -628 654 -22 101 -22 2589 -1 2688
60 281 255 514 518 619 132 53 193 59 621 60 l387 1 0 -2026z"/>
<path d="M3051 7329 c-63 -12 -159 -60 -210 -105 -105 -91 -157 -220 -149
-372 4 -79 9 -100 41 -164 47 -97 118 -168 215 -216 67 -33 84 -37 171 -40 79
-3 107 0 160 18 217 73 348 284 311 500 -43 257 -287 429 -539 379z"/>
<path d="M4757 8323 c-4 -3 -7 -1087 -7 -2409 0 -2181 1 -2402 16 -2408 27
-10 803 -6 899 4 406 46 764 293 959 660 25 47 58 126 75 175 63 188 61 138
61 1575 0 1147 -2 1318 -16 1391 -99 521 -496 914 -1018 1004 -70 12 -178 15
-526 15 -240 0 -440 -3 -443 -7z m1068 -2178 c156 -41 284 -160 336 -312 33
-94 32 -232 -1 -318 -61 -158 -181 -269 -335 -310 -250 -65 -516 86 -589 334
-22 76 -21 204 4 282 75 245 335 389 585 324z"/>
</g>
</svg>
<p className="font-mono text-xl">SW-5543-5143-8814</p>
</a>
</Link>
</div>
)
}
export default NintendoSW

View File

@@ -0,0 +1,91 @@
// React
import React, { useState, useEffect } from 'react';
// i18n
import { useTranslation, useLanguageQuery } from 'next-export-i18n';
// Font Awesome
import { faKey, faEye, faDownload } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
// Next.js
import Link from 'next/link'
export default function Modal() {
const [showModal, setShowModal] = React.useState(false);
const { t } = useTranslation();
const [query] = useLanguageQuery();
return (
<>
<button
className="bg-pink-600 text-white active:bg-pink-600 font-bold text-sm px-6 py-3 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button"
onClick={() => setShowModal(true)}
>
<FontAwesomeIcon icon={faKey} className="w-5 h-5 inline"/> {t('keys')}
</button>
{showModal ? (
<>
<div
className="justify-center items-center flex overflow-x-hidden overflow-y-auto fixed inset-0 z-50 outline-none focus:outline-none"
>
<div className="relative mx-auto w-4/5 max-h-1/2 -mt-96 max-w-3xl">
{/* Modal content */}
<div className="border-0 rounded-lg shadow-lg relative flex flex-col w-full bg-white outline-none focus:outline-none">
{/* Modal body */}
<div className="relative p-2 flex-auto text-black text-left">
<p className="text-2xl"><FontAwesomeIcon icon={faKey} className="w-5 h-5 inline"/> {t('keys')}</p>
<ul className="list-disc my-2">
<li>
<span className="font-bold">PGP&nbsp;</span>
<Link href="/yudejp.gpg">
<a className="hover:underline">
<FontAwesomeIcon icon={faDownload} className="w-5 h-5 inline"/>&nbsp;
{t('download')}
</a>
</Link>
<p>{t('fingerprint')}:</p>
<div className="overflow-x-auto">
<div className="whitespace-nowrap">
<code>3745 F270 DB4E 8975 6B07 62BE EB0F E5D9 25C4 A968</code>
</div>
</div>
</li>
<li>
<span className="font-bold">SSH&nbsp;</span>
<Link href="https://github.com/yude.keys">
<a className="hover:underline">
<FontAwesomeIcon icon={faEye} className="w-5 h-5 inline"/>&nbsp;
{t('view')}
</a>
</Link>
<p>{t('fingerprint')}:</p>
<div className="overflow-x-auto">
<div className="whitespace-nowrap">
<code>2048 SHA256:xwSL4DORWmroWdC6P0GU1m1yZl/cXqjo9rCCWqqO+Dc</code>
</div>
</div>
</li>
</ul>
</div>
{/* Modal footer for close button */}
<div className="flex items-center justify-end p-6 border-t border-solid border-blueGray-200 rounded-b">
<button
className="text-red-500 background-transparent font-bold uppercase px-6 py-2 text-sm outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button"
onClick={() => setShowModal(false)}
>
{t('close')}
</button>
</div>
</div>
</div>
</div>
</>
) : null}
</>
);
}

View File

@@ -0,0 +1,37 @@
// React
import React, { useState, useEffect } from 'react';
// Data fetching
import axios from 'axios';
// i18n
import { useTranslation, useLanguageQuery } from 'next-export-i18n';
function App () {
const { t } = useTranslation();
const [query] = useLanguageQuery();
const [data, setData] = useState({ hits: [] });
useEffect(() => {
const fetchData = async () => {
const result = await axios(
'https://vercel-spotify-api.vercel.app/api/Spotify',
);
setData(result.data);
};
fetchData();
}, []);
if (data === undefined){
console.log("[Spotify Web API] データの取得に失敗しました。 / Failed to retrieve data.")
return <p></p>
}else{
if (data.isPlaying){
const status = data.artist + ' / ' + data.title
return <p>{t('listening', {listening: status})}</p>
}else{
return <></>
}
};
}
export default App;

View File

@@ -0,0 +1,53 @@
// React
import React from 'react';
// Font Awesome
import { faUserClock } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
// i18n
import { useTranslation } from 'next-export-i18n';
export default function Modal() {
const [showModal, setShowModal] = React.useState(false);
const { t } = useTranslation();
return (
<>
<button
className="bg-pink-600 text-white active:bg-pink-600 font-bold text-sm px-6 py-3 rounded hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button"
onClick={() => setShowModal(true)}
>
<FontAwesomeIcon icon={faUserClock} className="w-5 h-5 inline"/> WakaTime
</button>
{showModal ? (
<>
<div
className="justify-center items-center flex overflow-x-hidden overflow-y-auto fixed inset-0 z-50 outline-none focus:outline-none"
>
<div className="relative mx-auto w-4/5 max-h-1/2 -mt-96 max-w-3xl">
{/* Modal content */}
<div className="border-0 rounded-lg shadow-lg relative flex flex-col w-full bg-white outline-none focus:outline-none">
{/* Modal body */}
<div className="relative p-2 flex-auto">
<figure><embed src="https://wakatime.com/share/@yude/6f15075a-b9d5-464a-8b4f-545d31933dfb.svg"></embed></figure>
</div>
{/* Modal footer for close button */}
<div className="flex items-center justify-end p-6 border-t border-solid border-blueGray-200 rounded-b">
<button
className="text-red-500 font-bold uppercase px-6 py-2 text-sm outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button"
onClick={() => setShowModal(false)}
>
{t('close')}
</button>
</div>
</div>
</div>
</div>
</>
) : null}
</>
);
}

View File

@@ -0,0 +1,30 @@
import "tailwindcss/tailwind.css";
import { useRouter } from 'next/router'
import React, { useEffect, useState } from 'react'
import { useTheme } from "next-themes";
import { faMoon, faSun } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
const ThemeSelector = (props) => {
const { title, children } = props
const [isMounted, setIsMounted] = useState(false);
const { theme, setTheme, getTheme } = useTheme();
useEffect(() => {
setIsMounted(true);
}, []);
const switchTheme = () => {
if (isMounted) {
setTheme(theme === "light" ? "dark" : "light");
}
};
return (
<button className="inline-flex rounded-md border border-gray-300 dark:border-gray-800 shadow-sm px-2 bg-white font-medium text-gray-700 hover:bg-gray-50 dark:bg-gray-700 dark:text-white my-3 py-1 text-2xl focus:outline-none" onClick={switchTheme}>
{theme !== undefined && (theme === "light" ? (
<FontAwesomeIcon icon={faMoon} className="w-10 h-7" />
) : (
<FontAwesomeIcon icon={faSun} className="w-10 h-7" />
))}
</button>
)
}
export default ThemeSelector

40
pages/hcunews.js Normal file
View File

@@ -0,0 +1,40 @@
// Base layout
import Layout from "./components/Layout"
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
// React
import React from "react"
import ReactMarkdown from "react-markdown"
// Markdown
import gfm from 'remark-gfm';
import ja from '../docs/hcunews/ja.md'
import en from '../docs/hcunews/en.md'
export default function HcuNews() {
const { t } = useTranslation();
const [query] = useLanguageQuery();
if (!query) {
return <p>Loading...</p>
} else {
return (
<Layout title={t('hcunews')}>
<div>
<h1>{t('hcunews')}</h1>
{query["lang"] === 'ja' ? (
<ReactMarkdown plugins={[gfm]}>
{ja}
</ReactMarkdown>
) : (
<ReactMarkdown plugins={[gfm]}>
{en}
</ReactMarkdown>
)}
</div>
</Layout>
)
}
}

22
pages/house.js Normal file
View File

@@ -0,0 +1,22 @@
// Base layout
import Layout from "./components/Layout"
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
// Next.js router
import { useRouter } from 'next/router'
export default function About(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
return (
<Layout title={t('house')}>
<div>
<p className="my-2 text-3xl text-center">{t('house')}</p>
<iframe className="w-full h-96" src="https://mackerel.io/embed/public/embed/4mVIU29WCRVZgHUxQPzWsfXo953uxiAegbjDb83hTQ7szesCunwdpVkBIzhnLc9i?period=1d" frameBorder="0" scrolling="no"></iframe>
</div>
</Layout>
)
}

View File

@@ -1,46 +1,68 @@
// Base layout
import Layout from "./components/Layout"
import Navbar from "./components/Navbar"
// Menu
import FAMenu from "./components/Menu/FontAwesomeMenu"
// Banner
import HappyBusy from "./components/Footer/HappyBusy"
// Next.js
import Link from 'next/link'
import { ReactElement } from 'react'
import { faDiscord, faGit, faMastodon } from '@fortawesome/free-brands-svg-icons'
import { faBlog, faBook, faUser, faServer } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import Image from 'next/image'
import useTranslation from 'next-translate/useTranslation'
import { useRouter } from 'next/router'
// i18n
import { useTranslation, useLanguageQuery } from 'next-export-i18n';
// React Router
import MinecraftMenu from "./components/Menu/MinecraftMenu"
// Font Awesome
import { faDiscord, faGit, faGithub } from '@fortawesome/free-brands-svg-icons'
import { faBook, faUser, faServer, faScrewdriver, faHeart } from '@fortawesome/free-solid-svg-icons'
export default function Index(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
// Translation
const router = useRouter()
const { locale, locales, defaultLocale, pathname } = router
const { t, lang } = useTranslation("index")
const home = t('home')
if (!query) {
return <p>Loading...</p>
} else {
return (
<>
<Layout title={t('home')}>
<div className="my-9 text-center">
<div className="m-10">
<img
className = "mx-auto"
src = "/images/avatar_riru.png"
alt = "yude's avatar"
width = {200}
height = {200}
/>
</div>
<Layout title={home}>
<Navbar />
<div className="my-9">
<div className="m-10">
<Image
src = "/static/images/avatar.png"
alt = "yude's avatar"
width = {200}
height = {200}
unoptimized = {true}
/>
{/* Index menu */}
<div className="grid grid-cols-3 gap-10">
<FAMenu dest="/profile" query={query} icon={faUser} />
<FAMenu dest="/server" query={query} icon={faServer} />
<FAMenu dest="/services" query={query} icon={faScrewdriver} />
<FAMenu dest="https://discord.gg/X6srY7X" icon={faDiscord} />
<FAMenu dest="https://github.com/yudejp" icon={faGithub} />
<FAMenu dest="https://git.yude.jp" icon={faGit} />
<MinecraftMenu query={query} />
<FAMenu dest="/mutual" icon={faHeart} query={query} />
</div>
{/* Banner */}
<div className="mx-auto mt-10">
<HappyBusy />
</div>
{/* Avatar by */}
<p className="mt-3 text-sm font-bold text-gray-900 dark:text-gray-400">{t('icon_1')}<Link href="https://twitter.com/R_I_R_U_"><a className="hover:underline">梨留りる {t('icon_2')}</a></Link></p>
</div>
<span><Link href="/profile"><a><FontAwesomeIcon icon={faUser} className="w-10 h-10 inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" /></a></Link></span>
<span className="ml-4"><Link href="https://blog.yude.jp"><a><FontAwesomeIcon icon={faBlog} className="w-10 h-10 inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" /></a></Link></span>
<span className="ml-4"><Link href="https://wiki.yude.jp"><a><FontAwesomeIcon icon={faBook} className="w-10 h-10 inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" /></a></Link></span>
<span className="ml-4"><Link href="https://discord.gg/X6srY7X"><a><FontAwesomeIcon icon={faDiscord} className="w-10 h-10 inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" /></a></Link></span>
<span className="ml-4"><Link href="https://git.yude.jp"><a><FontAwesomeIcon icon={faGit} className="w-10 h-10 inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" /></a></Link></span>
<span className="ml-4"><Link href="/status"><a><FontAwesomeIcon icon={faServer} className="w-10 h-10 inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" /></a></Link></span>
<span className="ml-4"><Link href="https://don.yude.jp"><a><FontAwesomeIcon icon={faMastodon} className="w-10 h-10 inline transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-110" /></a></Link></span>
<p></p>
</div>
</Layout>
</Layout>
</>
)
}
}

102
pages/minecraft.js Normal file
View File

@@ -0,0 +1,102 @@
// Base layout
import Layout from "./components/Layout"
// React Router etc.
import React, { useState, useEffect } from 'react';
import { useRouter } from 'next/router'
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
// Next.js
import Link from 'next/link'
// Custom pages
import Minecraft from './components/Minecraft'
// Font Awesome
import { faMap, faCopy } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
// React Markdown
import ReactMarkdown from "react-markdown"
import gfm from 'remark-gfm';
import ja from '../docs/minecraft/ja.md'
import en from '../docs/minecraft/en.md'
// next-seo
import { NextSeo } from 'next-seo';
export default function About(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
// Copy server address to clipboard
const copyText = () => {
navigator.clipboard.writeText("yude.jp");
};
if (!query) {
return <p>Loading...</p>
} else {
return (
<>
<NextSeo
title="yude.jp Minecraft マルチプレイ"
description="yude.jp 上に設置されている Minecraft: Java Edition のマルチプレイサーバーについて"
/>
<Layout title={t('title')}>
<div>
<p className="my-2 text-3xl text-center">{t('title')}</p>
<div className="w-full">
<img
src = "/images/dynmap.png"
alt = "Minecraft brief world map generated by Dynmap"
width = {1354}
height = {619}
/>
</div>
<div className="text-center">
<Minecraft />
<p>
<span>{t('address')}: <code>yude.jp</code></span>
<button
className="bg-pink-600 text-white active:bg-pink-600 font-bold text-sm px-2 py-2 ml-2 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button"
onClick={() => copyText()}
>
<FontAwesomeIcon icon={faCopy} className="w-5 h-5 inline"/>
</button>
</p>
<p>{t('version')}: 1.18.1</p>
<Link href="https://bluemap.yude.jp">
<a>
<button
className="bg-pink-600 text-white active:bg-pink-600 mt-3 font-bold text-sm px-6 py-3 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button">
<FontAwesomeIcon icon={faMap} className="w-5 h-5 inline"/> BlueMap
</button>
</a>
</Link>
</div>
{/* Load markdown contents */}
{query["lang"] === 'ja' ? (
<ReactMarkdown plugins={[gfm]}>
{ja}
</ReactMarkdown>
) : (
<ReactMarkdown plugins={[gfm]}>
{en}
</ReactMarkdown>
)}
</div>
</Layout>
</>
)
}
}

View File

@@ -0,0 +1,56 @@
// Base layout
import Layout from "../../components/Layout"
// React
import { useRouter } from 'next/router'
// Data fetching
import useSwr from 'swr'
const fetcher = (url) => fetch(url).then((res) => res.json())
// Components
import WrongUUID from '../../components/Minecraft/WrongUUID'
export default function UUID() {
const router = useRouter()
const { ign } = router.query
const { data, error } = useSwr(
ign ? `https://api.ashcon.app/mojang/v2/user/${ign}` : null,
fetcher
)
if (error) {
return (
<>
<Layout title="エラー - プレイヤー情報">
<p className="text-2xl">エラーが発生しました</p>
</Layout>
</>
)
} else {
if (!data) {
return (
<>
<Layout title="読み込み中... - プレイヤー情報">
<p className="text-2xl">読み込み中</p>
</Layout>
</>
)
} else {
if (data.code) {
return (
<>
<Layout title="404 - プレイヤー情報">
<WrongUUID />
</Layout>
</>
)
} else {
router.push('/minecraft/players/' + data.uuid)
return (
<p>リダイレクトしています...</p>
)
}
}
}
}

View File

@@ -0,0 +1,59 @@
// Base layout
import Layout from "../../components/Layout"
// React
import { useRouter } from 'next/router'
// Data fetching
import Players from '../../components/Minecraft/Players'
import useSwr from 'swr'
const fetcher = (url) => fetch(url).then((res) => res.json())
// Components
import WrongUUID from '../../components/Minecraft/WrongUUID'
export default function UUID() {
const router = useRouter()
const { uuid } = router.query
const { data, error } = useSwr(
uuid ? `https://api.ashcon.app/mojang/v2/user/${uuid}` : null,
fetcher
)
if (error) {
return (
<>
<Layout title="エラー - プレイヤー情報">
<p className="text-2xl">エラーが発生しました</p>
</Layout>
</>
)
} else {
if (!data) {
return (
<>
<Layout title="読み込み中... - プレイヤー情報">
<Players uuid={uuid} />
</Layout>
</>
)
} else {
if (!data.username) {
return (
<>
<Layout title="404 - プレイヤー情報">
<WrongUUID />
</Layout>
</>
)
} else {
return (
<>
<Layout title={data.username + " - " + "プレイヤー情報"}>
<Players uuid={uuid} />
</Layout>
</>
)
}
}
}
}

49
pages/mutual.js Normal file
View File

@@ -0,0 +1,49 @@
// Base layout
import Layout from "./components/Layout"
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
// React Router etc.
import { useRouter } from 'next/router'
import React from "react"
// React Markdown
import ReactMarkdown from "react-markdown"
import gfm from 'remark-gfm';
import ja from '../docs/mutual/ja.md'
import en from '../docs/mutual/en.md'
// next-seo
import { NextSeo } from 'next-seo';
export default function Tos(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
if (!query) {
return <p>Loading...</p>
} else {
return(
<>
<NextSeo
title="相互リンク"
description="yude.jp と相互にリンクを貼っている Web サイトの一覧"
/>
<Layout title={t('mutual')}>
<div>
{query["lang"] === 'ja' ? (
<ReactMarkdown plugins={[gfm]}>
{ja}
</ReactMarkdown>
) : (
<ReactMarkdown plugins={[gfm]}>
{en}
</ReactMarkdown>
)}
</div>
</Layout>
</>
)
}
}

View File

@@ -1,70 +1,139 @@
// Base layout
import Layout from "./components/Layout"
import Navbar from "./components/Navbar"
import useTranslation from 'next-translate/useTranslation'
import { faDiscord, faTwitter, faGithub, faKeybase, faInstagram } from '@fortawesome/free-brands-svg-icons'
import { faEnvelope, faBirthdayCake, faMapPin, faSchool } from '@fortawesome/free-solid-svg-icons'
// i18n
import { useTranslation, useLanguageQuery } from 'next-export-i18n';
// Font Awesome
import { faDiscord, faTwitter, faGithub, faKeybase, faInstagram, faMastodon, faSteam, faAmazon } from '@fortawesome/free-brands-svg-icons'
import { faEnvelope, faBirthdayCake, faMapPin, faSchool, faPhone, faBlog, faBookDead, faInfo, faBookmark, faLink, faMobile } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
// Next.js, React
import Link from 'next/link'
import Image from 'next/image'
import { useRouter } from 'next/router'
// Discord
import DiscordStatus from './components/Discord/DiscordStatus'
import DiscordPlaying from './components/Discord/DiscordPlaying'
export default function About(props) {
const router = useRouter()
const { locale, locales, defaultLocale, pathname } = router
const { t, lang } = useTranslation("profile")
const about = t('about')
const desc = t('desc')
const school = t('school')
const link = t('link')
const link_all = t('link_all')
const link_all_late = t('link_all_late')
const location = t('location')
const here = t('here')
const mail = t('mail')
// Custom component
import Spotify from './components/Profile/Spotify'
import WakaTime from './components/Profile/WakaTime'
import PublicKeys from './components/Profile/PublicKeys'
import Button from './components/Profile/Button'
import Contact from './components/Profile/Contact'
import NintendoSW from "./components/Profile/NintendoSW"
// next-seo
import { NextSeo } from 'next-seo';
export default function Profile(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
return (
<>
<NextSeo
title="yude のプロフィール"
/>
<Layout title={t('about')}>
<div className="text-center">
<Layout title={about}>
<Navbar />
<div className="my-9 mx-8">
{
// Heading
}
<div className="mb-5">
<p className="text-left text-4xl">{about}</p>
{
// Heading
}
<div>
<div className="flex mb-10 justify-center">
<img
className = "rounded-full hover:animate-rumble z-0 p-15"
src = "/images/avatar_mel.png"
alt = "yude's avatar"
width = {200}
height = {200}
unoptimized = {true}
/>
<DiscordStatus />
</div>
<p className="text-4xl transform -translate-y-4">yude</p>
<div>
<DiscordPlaying />
<Spotify />
</div>
</div>
{
// Description
}
<div>
<div className="text-left">
<p className="text-2xl"><FontAwesomeIcon icon={faInfo} className="w-5 h-5 inline"/> {t('desc')}</p>
</div>
<div className="my-2 text-left grid lg:grid-cols-3 md:grid-cols-2 sm:grid-cols-1 break-words">
<div>
<FontAwesomeIcon icon={faSchool} className="w-5 h-5 inline"/>
<p className="inline ml-4">{t('belongs')}</p>
<p className="ml-9">{t('school')}</p>
<p className="ml-9">{t('grade')}</p>
</div>
<div>
<FontAwesomeIcon icon={faBirthdayCake} className="w-5 h-5 inline"/>
<p className="inline ml-4">{t('birth')}</p>
<p className="ml-9">{t('date')}</p>
</div>
<div>
<FontAwesomeIcon icon={faMapPin} className="w-5 h-5 inline"/>
<p className="inline ml-4">{t('location')}</p>
<p className="ml-9">{t('hiroshima')}</p>
</div>
</div>
{
// Contents
}
<div>
<div className="text-left">
<p className="text-2xl"><FontAwesomeIcon icon={faBookDead} className="w-5 h-5 inline"/> {t('contents')}</p>
</div>
<div className="my-2 grid grid-cols-2 lg:grid-cols-5 md:grid-cols-3 sm:grid-cols-2justify-items-center gap-y-6">
<Contact dest="https://blog.yude.jp" icon={faBlog} caption={t('blog')} />
<Contact dest="https://scrapbox.io/yude" icon={faBookmark} caption="Scrapbox" />
</div>
</div>
{
// Contact
}
<div className="text-left my-6">
<p className="text-2xl"><FontAwesomeIcon icon={faPhone} className="w-5 h-5 inline"/> {t('contact')}</p>
</div>
<div className="my-2 grid grid-cols-2 lg:grid-cols-5 md:grid-cols-3 sm:grid-cols-2justify-items-center gap-y-6">
<Contact dest="https://twitter.com/yude_jp" icon={faTwitter} caption="@yude_jp" />
<Contact dest="#" icon={faDiscord} caption="yude#3205" />
<Contact dest="mailto:i@yude.jp" icon={faEnvelope} caption="i@yude.jp" />
<Contact dest="https://github.com/yude" icon={faGithub} caption="yude" />
<Contact dest="https://mstdn.yude.jp/@yude" icon={faMastodon} caption="@yude@mstdn.yude.jp" />
<Contact dest="https://keybase.io/yude" icon={faKeybase} caption="yude" />
<Contact dest="https://instagram.com/yude.jp" icon={faInstagram} caption="yude.jp" />
<Contact dest="https://steamcommunity.com/id/yudejp" icon={faSteam} caption="id/yudejp" />
<NintendoSW />
</div>
{
// Buttons
}
<div className="text-center my-6 space-x-5">
<WakaTime />
<PublicKeys />
<Button dest="https://scrapbox.io/yude/%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88" icon={faLink} caption={t('account')}/>
<Button dest="https://scrapbox.io/yude/%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9" icon={faMobile} caption={t('device')}/>
<Button dest="https://www.amazon.jp/hz/wishlist/ls/8WTKCPWKOJ2N?ref_=wl_share" icon={faAmazon} caption={t('wishlist')}/>
</div>
</div>
<p className="mt-3 text-sm font-bold text-gray-900 dark:text-gray-400">{t('icon_1')}<Link href="https://twitter.com/xmnts"><a className="hover:underline">Minkasy {t('icon_2')}</a></Link></p>
</div>
{
// Description
}
<div className="divide-y-2 divide-dashed">
<div><p className="text-left text-2xl">{desc}</p></div>
<div className="text-left">
<p><FontAwesomeIcon icon={faSchool} className="w-5 h-5 inline"/> {school}</p>
<p><FontAwesomeIcon icon={faMapPin} className="w-5 h-5 inline"/> {location}</p>
</div>
</div>
{
// Links
}
<div className="divide-y-2 divide-dashed">
<div><p className="text-left text-2xl">{link}</p></div>
<div className="text-left">
<p><FontAwesomeIcon icon={faTwitter} className="w-5 h-5 inline"/> Twitter: <Link href="https://twitter.com/yudejp"><a className="hover:underline">@yudejp</a></Link></p>
<p><FontAwesomeIcon icon={faDiscord} className="w-5 h-5 inline"/> Discord: <a className="hover:underline">yude#3205</a></p>
<p><FontAwesomeIcon icon={faEnvelope} className="w-5 h-5 inline"/> {mail}: <Link href="mailto:i@yude.jp"><a className="hover:underline">i@yude.jp</a></Link></p>
<p><FontAwesomeIcon icon={faGithub} className="w-5 h-5 inline"/> GitHub: <Link href="https://github.com/yudejp"><a className="hover:underline">yudejp</a></Link></p>
<p><FontAwesomeIcon icon={faKeybase} className="w-5 h-5 inline"/> Keybase: <Link href="https://keybase.io/yude"><a className="hover:underline">yude</a></Link></p>
<p><FontAwesomeIcon icon={faInstagram} className="w-5 h-5 inline"/> Instagram: <Link href="https://instagram.com/yude.jp"><a className="hover:underline">yude.jp</a></Link></p>
<p>{link_all}<Link href="https://wiki.yude.jp/links"><a className="hover:underline">{here}</a></Link>{link_all_late}</p>
</div>
</div>
</div>
</Layout>
</Layout>
</>
)
}

86
pages/server.js Normal file
View File

@@ -0,0 +1,86 @@
// Base layout
import Layout from "./components/Layout"
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
// next-seo
import { NextSeo } from 'next-seo';
export default function Server(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
return (
<>
<NextSeo
title="yude.jp サーバー上"
description="yude.jp 上に設置されているサーバーの一覧、情報"
/>
<Layout title={t('status')}>
<div className="my-9 text-center">
{
// Header
}
<div className="mb-5">
<p className="text-left text-4xl">{t('status')} <p className="md:inline font-mono text-base sm:">Powered / Generated by Mackerel.</p></p>
</div>
{
// sandy
}
<h2 className="text-2xl text-left font-bold leading-7 sm:text-3xl sm:truncate">sandy</h2>
<div className="flex xl:w-2/3 text-center">
<div className="flex-1"><p className="font-bold">CPU </p>i7-2600</div>
<div className="flex-1"><p className="font-bold">RAM </p>DDR3 24GB</div>
<div className="flex-1"><p className="font-bold">OS </p>Arch Linux</div>
<div className="flex-1"><p className="font-bold">{t('location')} </p>{t('hiroshima')}</div>
</div>
<a href="https://mackerel.io/orgs/yude/hosts/4dkbQuMQjvo/-/graphs/loadavg#period=10m"><img src="https://mackerel.io/embed/public/embed/heHnGhDanoIDlf7jjxUe9yPVrsG3deeH5ptD8suErrq5w46crWEIYdLfzLoukzfF.png?period=10m" className="w-full" /></a>
{
// oracle1
}
<h2 className="text-2xl text-left font-bold leading-7 sm:text-3xl sm:truncate">oracle1</h2>
<div className="flex xl:w-2/3 text-center">
<div className="flex-1"><p className="font-bold">{t('service')} </p>Oracle Cloud</div>
<div className="flex-1"><p className="font-bold">{t('shape')} </p>VM.Standard.E2.1.Micro</div>
<div className="flex-1"><p className="font-bold">RAM </p>1GB</div>
<div className="flex-1"><p className="font-bold">OS </p>Ubuntu 20.04 LTS</div>
<div className="flex-1"><p className="font-bold">{t('region')} </p>Japan Central (Osaka)</div>
</div>
<a href="https://mackerel.io/orgs/yude/hosts/4ftHfeojMCU/-/graphs/loadavg#period=10m"><img src="https://mackerel.io/embed/public/embed/vcn6LE4P2hh6GzvtMbIAWxsXpDh6eSoNyAXdhfYaj9yDN6FJwOHIiz9ktqToj1HG.png?period=10m" className="w-full" /></a>
{
// oracle2
}
<h2 className="text-2xl text-left font-bold leading-7 sm:text-3xl sm:truncate">oracle2</h2>
<div className="flex xl:w-2/3 text-center">
<div className="flex-1"><p className="font-bold">{t('service')} </p>Oracle Cloud</div>
<div className="flex-1"><p className="font-bold">{t('shape')} </p>VM.Standard.E2.1.Micro</div>
<div className="flex-1"><p className="font-bold">RAM </p>1GB</div>
<div className="flex-1"><p className="font-bold">OS </p>Ubuntu 20.04 LTS</div>
<div className="flex-1"><p className="font-bold">{t('region')} </p>Japan Central (Osaka)</div>
</div>
<a href="https://mackerel.io/orgs/yude/hosts/4frgQ1QuivJ/-/graphs/loadavg#period=10m"><img src="https://mackerel.io/embed/public/embed/wgmTz7aTgvwfyU6qVHrJJmQlpOHCUJK6qw0W9sJTX68WOI8TFtc27YvJ7dwkQEGv.png?period=10m" className="w-full" /></a>
{
// oracle-a1-1
}
<h2 className="text-2xl text-left font-bold leading-7 sm:text-3xl sm:truncate">oracle-a1-1</h2>
<div className="flex xl:w-2/3 text-center">
<div className="flex-1"><p className="font-bold">{t('service')} </p>Oracle Cloud</div>
<div className="flex-1"><p className="font-bold">{t('shape')} </p>VM.Standard.A1.Flex</div>
<div className="flex-1"><p className="font-bold">RAM </p>6GB</div>
<div className="flex-1"><p className="font-bold">OS </p>Ubuntu 20.04.3 LTS</div>
<div className="flex-1"><p className="font-bold">{t('region')} </p>Japan Central (Osaka)</div>
</div>
<a href="https://mackerel.io/orgs/yude/hosts/4qzeqT6kToQ/-/graphs/loadavg#period=10m"><img src="https://mackerel.io/embed/public/embed/2C7NdtqLgGFGPiO2IctDGuaMdjBwhXyp0i8imkaJT2GFI55syPaxxACEYIRWDHnS.png?period=10m" className="w-full" /></a>
</div>
</Layout>
</>
)
}

49
pages/services.js Normal file
View File

@@ -0,0 +1,49 @@
// Base layout
import Layout from "./components/Layout"
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
// React Router etc.
import { useRouter } from 'next/router'
import React from "react"
// React Markdown
import ReactMarkdown from "react-markdown"
import gfm from 'remark-gfm';
import ja from '../docs/services/ja.md'
import en from '../docs/services/en.md'
// next-seo
import { NextSeo } from 'next-seo';
export default function Tos(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
if (!query) {
return <p>Loading...</p>
} else {
return(
<>
<NextSeo
title="サービス"
description="yude.jp で運用中のサービス"
/>
<Layout title={t('services')}>
<div>
{query["lang"] === 'ja' ? (
<ReactMarkdown plugins={[gfm]}>
{ja}
</ReactMarkdown>
) : (
<ReactMarkdown plugins={[gfm]}>
{en}
</ReactMarkdown>
)}
</div>
</Layout>
</>
)
}
}

View File

@@ -1,106 +0,0 @@
import Layout from "./components/Layout"
import Navbar from "./components/Navbar"
import useTranslation from 'next-translate/useTranslation'
import { faDiscord, faTwitter, faGithub, faKeybase, faInstagram } from '@fortawesome/free-brands-svg-icons'
import { faEnvelope, faBirthdayCake, faMapPin, faSchool } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import Link from 'next/link'
import Image from 'next/image'
import { useRouter } from 'next/router'
export default function About(props) {
const router = useRouter()
const { locale, locales, defaultLocale, pathname } = router
const { t, lang } = useTranslation("status")
const status = t('status')
const location = t('location')
const tottori = t('tottori')
const hiroshima = t('hiroshima')
const model = t('model')
return (
<Layout title={status}>
<Navbar />
<div className="my-9 mx-9">
{
// Heading
}
<div className="mb-5">
<p className="text-left text-4xl">{status} <p className="md:inline font-mono text-base sm:">Powered / Generated by Datadog.</p></p>
</div>
{
// cherry Datadog
}
<h2 className="text-2xl text-left font-bold leading-7 sm:text-3xl sm:truncate">cherry</h2>
<div className="flex xl:w-2/3">
<div className="flex-1 bg-gray-900 text-white text-center rounded border border-gray-600"><p className="font-bold">CPU </p>i7-2600</div>
<div className="flex-1 bg-gray-900 text-white text-center rounded border border-gray-600"><p className="font-bold">RAM </p>DDR3 16GB</div>
<div className="flex-1 bg-gray-900 text-white text-center rounded border border-gray-600"><p className="font-bold">OS </p>Ubuntu Server 20.04.2 LTS</div>
<div className="flex-1 bg-gray-900 text-white text-center rounded border border-gray-600"><p className="font-bold">{location} </p>{hiroshima}</div>
</div>
<div className="grid xl:grid-cols-3 lg:grid-cols-2 md:grid-cols-1 sm:grid-cols-1 gap-1 my-2">
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=7a00f4dcae63a970d317bd719e4b79d7c63c9892dc15f51ed96fb91509d6f960&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=79a40b2e369373f28c2ba4a04cdf6dc6bbf773275baaa033dae5ee38f698c410&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=dcded34f258bb355e0cdb3286b87a1552dc3c3db13d6b1b510dc1a611dea6cd6&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=89bf832a795aa61af12a403d9fb1827cad3a9f661f8dc0ab3752a70034685684&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=27defe77f9612b4ce14e620eeeb1c95576ef457be88a8432b7ab7378f30fa8d5&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=e24e16fe6cfb3fc0f73273cfc7330c7e1911ce3fa8041342a527cb744c12bed0&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=7cacb18efe30d0d98f56be3d44f4d53548ddb95e35563fda90bceda965ea790b&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
</div>
{
// raspberry Datadog
}
<h2 className="text-2xl text-left font-bold leading-7 sm:text-3xl sm:truncate">raspberry</h2>
<div className="flex xl:w-2/3">
<div className="flex-1 bg-gray-900 text-white text-center rounded border border-gray-600"><p className="font-bold">{model} </p>Raspberry Pi 4 Model B Rev 1.2</div>
<div className="flex-1 bg-gray-900 text-white text-center rounded border border-gray-600"><p className="font-bold">RAM </p>4GB</div>
<div className="flex-1 bg-gray-900 text-white text-center rounded border border-gray-600"><p className="font-bold">OS </p>Raspbian GNU/Linux 10 (buster)</div>
<div className="flex-1 bg-gray-900 text-white text-center rounded border border-gray-600"><p className="font-bold">{location} </p>{tottori}</div>
</div>
<div className="grid xl:grid-cols-3 lg:grid-cols-2 md:grid-cols-1 sm:grid-cols-1 gap-1 my-2">
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=de18008333aa661dec2e2dda4109cdad982bee24eded93b15a57e73f55e8fa6d&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=5dc17d342bfc7ce83e09d790037fe8c41c2e0904bf4ba2dbfef704e068dc2862&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=a3a7ba07fab53dc6db37c7de60af791d1c4938a55de7f50ea1ab3bdb8924c0c4&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=89bf832a795aa61af12a403d9fb1827cad3a9f661f8dc0ab3752a70034685684&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=48a62405818c27c2bd3be2daf4398494f444e33ea1f5784f8f42d20ffe8782b8&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=c83f40c0b1c81b82d3bf4b9cbf2f0f98894ed3128604af511c27989fe5aef6a1&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
<div>
<iframe src="https://app.datadoghq.com/graph/embed?token=e111dbe6960f3c9427d4738ff23a7e55b89633978b539f1db3d0d69a9334e801&height=300&width=380&legend=true" className="w-96 h-64" frameBorder="0"></iframe>
</div>
</div>
</div>
</Layout>
)
}

40
pages/tos.js Normal file
View File

@@ -0,0 +1,40 @@
// Base layout
import Layout from "./components/Layout"
// i18n
import { useTranslation, useLanguageQuery, LanguageSwitcher } from 'next-export-i18n';
// Next.js, React
import { useRouter } from 'next/router'
import React from "react"
// React Markdown
import ReactMarkdown from "react-markdown"
import gfm from 'remark-gfm';
import ja from '../docs/tos/ja.md'
import en from '../docs/tos/en.md'
export default function Tos(props) {
const { t } = useTranslation();
const [query] = useLanguageQuery();
if (!query) {
return <p>Loading...</p>
} else {
return (
<Layout title={t('tos')}>
<div>
{query["lang"] === 'ja' ? (
<ReactMarkdown plugins={[gfm]}>
{ja}
</ReactMarkdown>
) : (
<ReactMarkdown plugins={[gfm]}>
{en}
</ReactMarkdown>
)}
</div>
</Layout>
)
}
}

View File

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

View File

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
public/images/brstrip.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
public/images/dynmap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 KiB

BIN
public/images/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

Before

Width:  |  Height:  |  Size: 241 KiB

After

Width:  |  Height:  |  Size: 241 KiB

View File

Before

Width:  |  Height:  |  Size: 340 KiB

After

Width:  |  Height:  |  Size: 340 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

67
public/yude.asc Normal file
View File

@@ -0,0 +1,67 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGBFtIIBEADvtdeDZreuQ/iktUbhSqAOwbmAVNqbuKYvIbxp1AKPlEVD3oxR
s+pnfLwMswobAT98VjQMHYnQM8hp4ngBgiZUqfh5RWO750TvlNIRRlG4vMoR06gP
maDVz6t0D+UPW0lnuPk7TnHOROPEQCJzjn+J8xd+a1wXHP9ExAOpGLjnjUDPZK2v
U7ls3j4/7YWa1/lpbccWbbnZ/siqbz1VE3F+RwXWtxzTIOyreriAAKY5se8Z/fE1
FYQlsDlAfFZa5K8+4LiTLongzBJpjwRsWiTYNQxpEUv47jWJuO2DgD5/8+bG4P/F
n4OC6GP4odwWZZnga/rIrbYM0rl6pCHzKxg9nrwba0ZsbO6H0++Inii3TIHT9Nm1
vBCHUMvoW3DEWD6SB/fut8nNCamQKJwAHp8wl/OCJ8vUbwM0tTiaC7ymRdQXehSG
5kWf4tSNAz9QJGQPyn3qFehuD59/B7yMdlIAExKH/fHtUknpb/KNJx8aIRfxC58X
e9syXLvNO1XBpI3dl7QWGVLSErVNtWTO3RSywjhDL73rZVxY4fJvz63eo0T/bIHp
YdL7ThdTr+PbwcRvmJrJmYqzSzg6kDT+jIyV3vNvUCb/m3nSm41Z4cSGMCU/9/Nm
7eUJRnWdFOeEfOrn3TRrbNXDMerXRe/+ITO4K5Xc1AD9I8ILXM/K4QV9iQARAQAB
tBJ5dWRlanAgPGlAeXVkZS5qcD6JBUwEEwEIAzYCGwMFCQWjmoAFCwkIBwIGFQoJ
CAsCBBYCAwECHgECF4AWIQQ3RfJw206JdWsHYr7rD+XZJcSpaAUCYRmCYjsUgAAA
AAASACBwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL2Rldi50by95dWRlL29wZW5w
Z3AtMzkyZIMUgAAAAAASAGhwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3d3dy5y
ZWRkaXQuY29tL3VzZXIveXVkZTExMTkvY29tbWVudHMvb253eHI2L29wZW5wZ3A0
ZnByMzc0NWYyNzBkYjRlODk3NTZiMDc2MmJlZWIwZmU1ZDkyNWM0YTk2Ly8UgAAA
AAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6eXVkZS5qcD90eXBlPVRYVFMUgAAA
AAASADhwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3R3aXR0ZXIuY29tL3l1ZGVf
dW5pdi9zdGF0dXMvMTQxNzI5ODQ4ODY5NDUwOTU4N1EUgAAAAAASADZwcm9vZkBt
ZXRhY29kZS5iaXpodHRwczovL3R3aXR0ZXIuY29tL3l1ZGVfanAvc3RhdHVzLzE0
MTcyOTc1MDYxNjIwMTIxNjBYFIAAAAAAEgA9cHJvb2ZAbWV0YWNvZGUuYml6aHR0
cHM6Ly9naXN0LmdpdGh1Yi5jb20veXVkZS80NmNkNDE3MWNjM2M3ZjZlNTQ1N2Vk
YWU2YzczMjJjMjYUgAAAAAASABtwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL21z
dGRuLnl1ZGUuanAvQHl1ZGVRFIAAAAAAEgA2cHJvb2ZAbWV0YWNvZGUuYml6aHR0
cHM6Ly90d2l0dGVyLmNvbS95dWRlX1JUL3N0YXR1cy8xNDE3Mjk4NTAxOTQwMTE3
NTA2PxSAAAAAABIAJHByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vZ2l0bGFiLmNv
bS95dWRlL2dpdGxhYl9wcm9vZj8UgAAAAAASACRwcm9vZkBtZXRhY29kZS5iaXpo
dHRwczovL2dpdC55dWRlLmpwL3l1ZGUvZ2l0ZWFfcHJvb2YACgkQ6w/l2SXEqWjY
BxAAtMXaDLJCq9qzP6jPs22R+LXM99Pmtf3QiJ/a9qa8L+qJBT2g7mXqlQGXBBy2
N0VY+IeTvNHc9hvuKrUVBLxOy7YWnf3D7jPlfttDQrQWVcvtn0//DwCf84Bzl+VC
NzB5Fc9FYP+qUv5d4+lsNaRcrO+L1Fr6HWcFDMeb6uKWEoFtKLLVVhrkGAbLOR2H
CAmJyspU4Zuw2vo/Cx5TE3IotGXidjYQXt50q0WxbggWYdRsS1E+gS7dMTaS/8+O
wcWb0/6QGR1U45gF6BVpF+IwGXGZRHvWykZ9e3xZx5OdjbsC0QRk2b0nxp/c1qN8
Ua1L3HurIqqr+yWuLae2DB6hgrpJEi2HwM6uj0LAVgkNG2EMv3cky1+nOsa5xzGy
t7OjUKAXX+XHnT2HRSlhET/e3Gqw4VFnTD876CbEPfbJ5aR5jB1lWKcMujiDsg35
E/pNkkeLpEy4D6+pZLt8+k+KDNwCazjzNil6aFm4ogSKRH5vmfaJyObLGqChD1bb
TfkJXzfIacYzf1L1KjNCLCPyxxUrjzyxHZZRAPm+bg7h494EM4hDoRevWJNdnm2C
GQlcZGI7pF4StQR+YkisgaLYBUyAjuerWaMrXp8NWYPdeJEeqDjTxmJyFZRRCVKR
CPq0IgEOOkdl1lgQxYEroFlvSgwWoJBNTTFu+LDg6ZuBwMa5Ag0EYEW0ggEQAN0h
PmgU7XV0dRqJ1/Mb1WpnnXsshVr3SGZoqUn4XVMRWEhLc3xzp3tLMPqCytLMddAF
rBaBItuOA+yE9w5Yqpt9Z1axrqA6TqzHbCBUPhacynPmS5VcnsZDOF/P67s1y0/L
RX6idF94ElEYgc1KAzj1wD5Q1bW2yIQUzjhgkDFhZOY4nqbSfg6NDbGQo3coquMs
YcLdnEBwPq95WSns62hr4naohMRalbFZDt+BydWvv8XoT2RkoQnWN35+332rUlu6
HECBtI+RBVtVwKWGymY8GFcSau20j+4JseSla6iA2XeXi9rN4Kj03n0Nx2L4NOAP
W0XfzlpFBBzhcthgJ8ahspIf9z+fvQbBQ9v9xq15/nj5sqLSBN6SZP1Q9ykXM63/
HzxSFTDUVyC3OFvS+FsVU08oG/QzfjHp4MWr1zVhAaLBZxDZt7nw5osec+/OgiAm
Tt9HU5UiUfbfa5nQEHMapOD/r0HJu5RFA3EHMmmr9Es63OKcNrCfrZzy3b/4mv0h
J3sDulsvgu1GSinI0oubU1OJ+l+hEPEvbV3B2xMm/m7anJUEa31GHuu5ZiZJSZZS
Hxa4m43X1mRfRnI8h4LNpXgGhm6wh+zO8xx4PztNPNq9zA+CYRlMTMI15xr78Ui6
eKzLE5/cliuPaP0CyHEEQNSxxsgk57mdO9xldoShABEBAAGJAjwEGAEIACYWIQQ3
RfJw206JdWsHYr7rD+XZJcSpaAUCYEW0ggIbDAUJBaOagAAKCRDrD+XZJcSpaGhO
D/0e8q1DCKQUud/BwfT6ELR488ojdIu9Jag0aGKul3qemnLnk3jSSoz5rNKHAemY
D6PUNeARU9Unksy88EJMB3GMlbnfrWwTEfMfE1eZSqntCo/xoL1mr013CZKMYlLT
K8J0oC5Y3ENi24R5BZIpsAnnqL3L6iPtuTRVkHMYpFgHgWnxRNqpdqbtXHu/1Z5l
XLhea7o6NF/Chrl73zTyI6qlrRftERVmyTB/TxbUFTAAXGoUO/Ag/rGt+uoLIjE3
usfeoc4KR4uqEKuVN/aLMNSrCYHPTZRltKK6w1XpdASIGFblnFzeT0xHHgI7xtmT
hyQPnHhyup9GHYqjj9J1A9BcvZh13gh5efnzEWfvSITpD3XALSRba5NhI3ex9Ene
UlKjlGYjxrgpSBtmk/pm6rYo+/YXZY62JhjMt+juBvhgQZQ9cpg003AMNnKY80/f
thpA+hR4xLPhAId7grWaAf5zdyqeKPBp+uAaJuf9Ii4VrR6rl0M+nHNLZR2mgN90
2z2nvKiGpMuMwLtelW86OAH3CZimx+kxbIO3yj0+mH8PvAKqTI1n5vT82124bLp6
avwOcnA246pF6S2k/VnfT8mhQwbUxwkKpvxoyvQDuqo5FcO2O19I6o8EakE8Iruo
6hJACt4WXbzR3gPBmptL32eJlo99ZV1gvY4Sy69EAtw2kg==
=dc5x
-----END PGP PUBLIC KEY BLOCK-----

BIN
public/yude.gpg Normal file

Binary file not shown.

1
public/yude.keys Normal file
View File

@@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfEH46roc6pn97+Bi0UxWaeogvN38U5/7W+s2TWAQfpE8gv7ibFwZ5FVvHguT8BbCkK8YuXW7Oug1n8S6o3ABhUQD/zGIuEBLVKO6BTUYNDpYNxmmXKZ+dbB1nz++bvson8pYv/MdkeeeRrmqVgmrZzDifgBqYicGep+LKobhXvgCX6Qb9cHC9MCx+3mUzT0RhwwxEL/AsBm6f5oPJZdnF3agnOi61KA+wrK7RPU5v88HY5jHb87irFjNbc2xvyoLJmx+ILyKIcdsaADiTdy2JX5fqsO4S3WFELK+utw1MgBnGt0ENaev2Tce9r2QuUZQYNpa1+vAcdsc0qcR2W9wV

View File

@@ -1,4 +1,22 @@
/* Start purging... */
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Stop purging. */
@layer base {
h1 {
@apply text-3xl my-3;
}
h2 {
@apply text-xl;
}
ul {
@apply list-disc mx-10
}
}
.tooltip {
@apply invisible absolute;
}
.has-tooltip:hover .tooltip {
@apply visible z-50;
}

View File

@@ -1,9 +1,6 @@
module.exports = {
future: {
purgeLayersByDefault: true,
},
purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'],
darkMode: "class", // or 'media' or 'class'
darkMode: "class",
theme: {
aspectRatio: {
none: 0,
@@ -11,7 +8,14 @@ module.exports = {
"16/9": [16, 9],
"4/3": [4, 3],
"21/9": [21, 9]
},
},
maxHeight: {
'0': '0',
'1/4': '25%',
'1/2': '50%',
'3/4': '75%',
'full': '100%',
},
filter: { // defaults to {}
'none': 'none',
'grayscale': 'grayscale(1)',
@@ -25,9 +29,19 @@ module.exports = {
extend: {
animation:{
blur: 'blur 2.5s linear infinite',
heartbeat: 'heartbeat 3s linear infinite'
heartbeat: 'heartbeat 3s linear infinite',
rumble: 'rumble 0.1s linear infinite',
},
keyframes:{
rumble: {
'0%': { transform: 'translate(0, 0)', filter: 'rotate(0)' },
'16.66%': { transform: 'translate(4px, -2px)', filter: 'rotate(-5deg)' },
'33.32%': { transform: 'translate(4px, 2px)', filter: 'rotate(5deg)' },
'49.98%': { transform: 'translate(0, 0)', filter: 'rotate(0)' },
'66.64%': { transform: 'translate(-4px, -2px)', filter: 'rotate(5deg)' },
'83.30%': { transform: 'translate(-4px, 2px)', filter: 'rotate(-5deg)' },
'100%': { transform: 'translate(0, 0)', filter: 'rotate(0)' },
},
blur: {
'0%, 100%': {filter: 'blur(8px)'},
'50%': {filter: 'blur(0px)'}
@@ -36,17 +50,28 @@ module.exports = {
'0%, 100%': {filter: 'drop-shadow(0px 0px 1px rgb(255, 255, 255))'},
'50%': {filter: 'drop-shadow(0px 0px 8px rgb(255, 255, 255))'}
},
}
translate: {
'1/7': '14.2857143%',
'2/7': '28.5714286%',
'3/7': '42.8571429%',
'4/7': '57.1428571%',
'5/7': '71.4285714%',
'6/7': '85.7142857%',
},
},
}
},
variants: {
filter: ['responsive'], // defaults to ['responsive']
backdropFilter: ['responsive'], // defaults to ['responsive']
animation: ['hover', 'focus'],
filter: ['responsive'],
backdropFilter: ['responsive'],
aspectRatio: ['responsive'],
nightwind: ['group-hover', 'active', 'focus'],
},
plugins: [
require('tailwindcss-filters'),
require("tailwindcss-responsive-embed"),
require("tailwindcss-aspect-ratio"),
require('@tailwindcss/typography'),
]
}

Some files were not shown because too many files have changed in this diff Show More