import json files via read file

update translation templates
make sure webpack builds in root
transpile passport-reddit
don't use babel for webpack config
This commit is contained in:
HF 2022-08-16 02:43:48 +02:00
parent 7e2ef92c53
commit 54e482a8d7
28 changed files with 372 additions and 476 deletions

View File

@ -95,38 +95,38 @@ msgid ""
"one (Note: you can use those links just once)" "one (Note: you can use those links just once)"
msgstr "" msgstr ""
#: src/ssr/Win.jsx:32 #: src/ssr/Win.jsx:31
msgid "PixelPlanet.Fun Window" msgid "PixelPlanet.Fun Window"
msgstr "" msgstr ""
#: src/ssr/Win.jsx:33 #: src/ssr/Win.jsx:32
msgid "PixelPlanet.Fun Windows" msgid "PixelPlanet.Fun Windows"
msgstr "" msgstr ""
#: src/ssr/Main.jsx:58 #: src/ssr/Globe.jsx:33
msgid "PixelPlanet.Fun"
msgstr ""
#: src/ssr/Main.jsx:59
msgid "Place color pixels on an map styled canvas with other players online"
msgstr ""
#: src/ssr/Globe.jsx:34
msgid "PixelPlanet.Fun 3DGlobe" msgid "PixelPlanet.Fun 3DGlobe"
msgstr "" msgstr ""
#: src/ssr/Globe.jsx:35 #: src/ssr/Globe.jsx:34
msgid "A 3D globe of our whole map" msgid "A 3D globe of our whole map"
msgstr "" msgstr ""
#: src/ssr/Globe.jsx:48 #: src/ssr/Globe.jsx:47
msgid "Double click on globe to go back." msgid "Double click on globe to go back."
msgstr "" msgstr ""
#: src/ssr/Globe.jsx:49 #: src/ssr/Globe.jsx:48
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr ""
#: src/ssr/Main.jsx:54
msgid "PixelPlanet.Fun"
msgstr ""
#: src/ssr/Main.jsx:55
msgid "Place color pixels on an map styled canvas with other players online"
msgstr ""
#: src/core/mail.js:71 #: src/core/mail.js:71
#, javascript-format #, javascript-format
msgid "" msgid ""
@ -271,6 +271,22 @@ msgstr ""
msgid "Server error occured" msgid "Server error occured"
msgstr "" msgstr ""
#: src/routes/api/modtools.js:53
msgid "You are not logged in"
msgstr ""
#: src/routes/api/modtools.js:65
msgid "You are not allowed to access this page"
msgstr ""
#: src/routes/api/modtools.js:207
msgid "Just admins can do that"
msgstr ""
#: src/routes/api/baninfo.js:24
msgid "You are not banned"
msgstr ""
#: src/utils/validation.js:17 #: src/utils/validation.js:17
msgid "Email can't be empty." msgid "Email can't be empty."
msgstr "" msgstr ""
@ -319,22 +335,6 @@ msgstr ""
msgid "Password must be shorter than 60 characters." msgid "Password must be shorter than 60 characters."
msgstr "" msgstr ""
#: src/routes/api/modtools.js:53
msgid "You are not logged in"
msgstr ""
#: src/routes/api/modtools.js:65
msgid "You are not allowed to access this page"
msgstr ""
#: src/routes/api/modtools.js:207
msgid "Just admins can do that"
msgstr ""
#: src/routes/api/baninfo.js:24
msgid "You are not banned"
msgstr ""
#: src/routes/api/auth/register.js:26 #: src/routes/api/auth/register.js:26
msgid "No Captcha given" msgid "No Captcha given"
msgstr "" msgstr ""
@ -355,27 +355,6 @@ msgstr ""
msgid "Failed to establish session after register :(" msgid "Failed to establish session after register :("
msgstr "" msgstr ""
#: src/routes/api/auth/change_mail.js:38
#: src/routes/api/auth/change_passwd.js:34
#: src/routes/api/auth/delete_account.js:34
msgid "You are not authenticated."
msgstr ""
#: src/routes/api/auth/change_mail.js:47
#: src/routes/api/auth/change_passwd.js:43
#: src/routes/api/auth/delete_account.js:44
msgid "Incorrect password!"
msgstr ""
#: src/routes/api/auth/logout.js:11
msgid "You are not even logged in."
msgstr ""
#: src/routes/api/auth/delete_account.js:54
#: src/routes/api/auth/logout.js:20
msgid "Server error when logging out."
msgstr ""
#: src/routes/api/auth/verify.js:22 #: src/routes/api/auth/verify.js:22
#: src/routes/api/auth/verify.js:29 #: src/routes/api/auth/verify.js:29
msgid "Mail verification" msgid "Mail verification"
@ -391,6 +370,27 @@ msgid ""
"request a new one." "request a new one."
msgstr "" msgstr ""
#: src/routes/api/auth/logout.js:11
msgid "You are not even logged in."
msgstr ""
#: src/routes/api/auth/delete_account.js:54
#: src/routes/api/auth/logout.js:20
msgid "Server error when logging out."
msgstr ""
#: src/routes/api/auth/change_mail.js:38
#: src/routes/api/auth/change_passwd.js:34
#: src/routes/api/auth/delete_account.js:34
msgid "You are not authenticated."
msgstr ""
#: src/routes/api/auth/change_mail.js:47
#: src/routes/api/auth/change_passwd.js:43
#: src/routes/api/auth/delete_account.js:44
msgid "Incorrect password!"
msgstr ""
#: src/ssr/RedirectionPage.jsx:19 #: src/ssr/RedirectionPage.jsx:19
msgid "PixelPlanet.fun Accounts" msgid "PixelPlanet.fun Accounts"
msgstr "" msgstr ""
@ -404,69 +404,69 @@ msgstr ""
msgid "Or ${ clickHere } to go back to pixelplanet" msgid "Or ${ clickHere } to go back to pixelplanet"
msgstr "" msgstr ""
#: src/canvasesDesc.js:18 #: src/canvasesDesc.js:19
msgid "Earth" msgid "Earth"
msgstr "" msgstr ""
#: src/canvasesDesc.js:19 #: src/canvasesDesc.js:20
msgid "Moon" msgid "Moon"
msgstr "" msgstr ""
#: src/canvasesDesc.js:20 #: src/canvasesDesc.js:21
msgid "3D Canvas" msgid "3D Canvas"
msgstr "" msgstr ""
#: src/canvasesDesc.js:21 #: src/canvasesDesc.js:22
msgid "Coronavirus" msgid "Coronavirus"
msgstr "" msgstr ""
#: src/canvasesDesc.js:22 #: src/canvasesDesc.js:23
msgid "PixelZone" msgid "PixelZone"
msgstr "" msgstr ""
#: src/canvasesDesc.js:23 #: src/canvasesDesc.js:24
msgid "PixelCanvas" msgid "PixelCanvas"
msgstr "" msgstr ""
#: src/canvasesDesc.js:24 #: src/canvasesDesc.js:25
msgid "1bit" msgid "1bit"
msgstr "" msgstr ""
#: src/canvasesDesc.js:25 #: src/canvasesDesc.js:26
msgid "Top10" msgid "Top10"
msgstr "" msgstr ""
#: src/canvasesDesc.js:28 #: src/canvasesDesc.js:29
msgid "Our main canvas, a huge map of the world. Place everywhere you like" msgid "Our main canvas, a huge map of the world. Place everywhere you like"
msgstr "" msgstr ""
#: src/canvasesDesc.js:29 #: src/canvasesDesc.js:30
msgid "" msgid ""
"Moon canvas. Safe space for art. No flags or large text (unless part of " "Moon canvas. Safe space for art. No flags or large text (unless part of "
"art) or art larger than 1.5k x 1.5k pixels." "art) or art larger than 1.5k x 1.5k pixels."
msgstr "" msgstr ""
#: src/canvasesDesc.js:30 #: src/canvasesDesc.js:31
msgid "Place Voxels on a 3D canvas with others" msgid "Place Voxels on a 3D canvas with others"
msgstr "" msgstr ""
#: src/canvasesDesc.js:31 #: src/canvasesDesc.js:32
msgid "Special canvas to spread awareness of SARS-CoV2" msgid "Special canvas to spread awareness of SARS-CoV2"
msgstr "" msgstr ""
#: src/canvasesDesc.js:32 #: src/canvasesDesc.js:33
msgid "Mirror of PixelZone" msgid "Mirror of PixelZone"
msgstr "" msgstr ""
#: src/canvasesDesc.js:33 #: src/canvasesDesc.js:34
msgid "Mirror of PixelCanvas" msgid "Mirror of PixelCanvas"
msgstr "" msgstr ""
#: src/canvasesDesc.js:34 #: src/canvasesDesc.js:35
msgid "Black and White canvas" msgid "Black and White canvas"
msgstr "" msgstr ""
#: src/canvasesDesc.js:35 #: src/canvasesDesc.js:36
msgid "" msgid ""
"A canvas for the most active players from the the previous day. Daily " "A canvas for the most active players from the the previous day. Daily "
"ranking updates at 00:00 UTC." "ranking updates at 00:00 UTC."

View File

@ -54,109 +54,109 @@ msgstr ""
msgid "Didn't get an answer from pixelplanet. Maybe try to refresh?" msgid "Didn't get an answer from pixelplanet. Maybe try to refresh?"
msgstr "" msgstr ""
#: src/ui/placePixel.js:203 #: src/ui/placePixel.js:202
msgid "Invalid Canvas" msgid "Invalid Canvas"
msgstr "" msgstr ""
#: src/ui/placePixel.js:204 #: src/ui/placePixel.js:203
msgid "This canvas doesn't exist" msgid "This canvas doesn't exist"
msgstr "" msgstr ""
#: src/ui/placePixel.js:207 #: src/ui/placePixel.js:206
#: src/ui/placePixel.js:211 #: src/ui/placePixel.js:210
#: src/ui/placePixel.js:215 #: src/ui/placePixel.js:214
msgid "Invalid Coordinates" msgid "Invalid Coordinates"
msgstr "" msgstr ""
#: src/ui/placePixel.js:208 #: src/ui/placePixel.js:207
msgid "x out of bounds" msgid "x out of bounds"
msgstr "" msgstr ""
#: src/ui/placePixel.js:212 #: src/ui/placePixel.js:211
msgid "y out of bounds" msgid "y out of bounds"
msgstr "" msgstr ""
#: src/ui/placePixel.js:216 #: src/ui/placePixel.js:215
msgid "z out of bounds" msgid "z out of bounds"
msgstr "" msgstr ""
#: src/ui/placePixel.js:219 #: src/ui/placePixel.js:218
msgid "Wrong Color" msgid "Wrong Color"
msgstr "" msgstr ""
#: src/ui/placePixel.js:220 #: src/ui/placePixel.js:219
msgid "Invalid color selected" msgid "Invalid color selected"
msgstr "" msgstr ""
#: src/ui/placePixel.js:223 #: src/ui/placePixel.js:222
msgid "Just for registered Users" msgid "Just for registered Users"
msgstr "" msgstr ""
#: src/ui/placePixel.js:224 #: src/ui/placePixel.js:223
msgid "You have to be logged in to place on this canvas" msgid "You have to be logged in to place on this canvas"
msgstr "" msgstr ""
#: src/ui/placePixel.js:227 #: src/ui/placePixel.js:226
msgid "Place more :)" msgid "Place more :)"
msgstr "" msgstr ""
#: src/ui/placePixel.js:229 #: src/ui/placePixel.js:228
msgid "You can not access this canvas yet. You need to place more pixels" msgid "You can not access this canvas yet. You need to place more pixels"
msgstr "" msgstr ""
#: src/ui/placePixel.js:232 #: src/ui/placePixel.js:231
msgid "Pixel protected!" msgid "Pixel protected!"
msgstr "" msgstr ""
#: src/ui/placePixel.js:239 #: src/ui/placePixel.js:238
msgid "Please prove that you are human" msgid "Please prove that you are human"
msgstr "" msgstr ""
#: src/ui/placePixel.js:243 #: src/ui/placePixel.js:242
msgid "No Proxies Allowed :(" msgid "No Proxies Allowed :("
msgstr "" msgstr ""
#: src/ui/placePixel.js:244 #: src/ui/placePixel.js:243
msgid "You are using a Proxy." msgid "You are using a Proxy."
msgstr "" msgstr ""
#: src/ui/placePixel.js:247 #: src/ui/placePixel.js:246
msgid "Not allowed" msgid "Not allowed"
msgstr "" msgstr ""
#: src/ui/placePixel.js:248 #: src/ui/placePixel.js:247
msgid "Just the Top10 of yesterday can place here" msgid "Just the Top10 of yesterday can place here"
msgstr "" msgstr ""
#: src/ui/placePixel.js:251 #: src/ui/placePixel.js:250
msgid "You are weird" msgid "You are weird"
msgstr "" msgstr ""
#: src/ui/placePixel.js:253 #: src/ui/placePixel.js:252
msgid "Server got confused by your pixels. Are you playing on multiple devices?" msgid "Server got confused by your pixels. Are you playing on multiple devices?"
msgstr "" msgstr ""
#: src/ui/placePixel.js:256 #: src/ui/placePixel.js:255
msgid "Banned" msgid "Banned"
msgstr "" msgstr ""
#: src/ui/placePixel.js:260 #: src/ui/placePixel.js:259
msgid "Range Banned" msgid "Range Banned"
msgstr "" msgstr ""
#: src/ui/placePixel.js:261 #: src/ui/placePixel.js:260
msgid "Your Internet Provider is banned from playing this game" msgid "Your Internet Provider is banned from playing this game"
msgstr "" msgstr ""
#: src/ui/placePixel.js:264 #: src/ui/placePixel.js:263
msgid "Weird" msgid "Weird"
msgstr "" msgstr ""
#: src/ui/placePixel.js:265 #: src/ui/placePixel.js:264
msgid "Couldn't set Pixel" msgid "Couldn't set Pixel"
msgstr "" msgstr ""
#: src/ui/placePixel.js:270 #: src/ui/placePixel.js:269
#, javascript-format #, javascript-format
msgid "Error ${ retCode }" msgid "Error ${ retCode }"
msgstr "" msgstr ""
@ -261,11 +261,6 @@ msgstr ""
msgid "Open Chat" msgid "Open Chat"
msgstr "" msgstr ""
#: src/components/buttons/CanvasSwitchButton.jsx:22
#: src/components/windows/index.js:19
msgid "Canvas Selection"
msgstr ""
#: src/components/buttons/ExpandMenuButton.jsx:22 #: src/components/buttons/ExpandMenuButton.jsx:22
msgid "Close Menu" msgid "Close Menu"
msgstr "" msgstr ""
@ -274,6 +269,11 @@ msgstr ""
msgid "Open Menu" msgid "Open Menu"
msgstr "" msgstr ""
#: src/components/buttons/CanvasSwitchButton.jsx:22
#: src/components/windows/index.js:19
msgid "Canvas Selection"
msgstr ""
#: src/components/HistorySelect.jsx:144 #: src/components/HistorySelect.jsx:144
msgid "Loading" msgid "Loading"
msgstr "" msgstr ""
@ -311,18 +311,6 @@ msgstr ""
msgid "Resize" msgid "Resize"
msgstr "" msgstr ""
#: src/components/buttons/GlobeButton.jsx:34
msgid "Globe View"
msgstr ""
#: src/components/buttons/PalselButton.jsx:30
msgid "Close Palette"
msgstr ""
#: src/components/buttons/PalselButton.jsx:30
msgid "Open Palette"
msgstr ""
#: src/components/BanInfo.jsx:76 #: src/components/BanInfo.jsx:76
#: src/components/buttons/HelpButton.jsx:22 #: src/components/buttons/HelpButton.jsx:22
#: src/components/windows/index.js:13 #: src/components/windows/index.js:13
@ -343,6 +331,18 @@ msgstr ""
msgid "Make Screenshot" msgid "Make Screenshot"
msgstr "" msgstr ""
#: src/components/buttons/GlobeButton.jsx:34
msgid "Globe View"
msgstr ""
#: src/components/buttons/PalselButton.jsx:30
msgid "Close Palette"
msgstr ""
#: src/components/buttons/PalselButton.jsx:30
msgid "Open Palette"
msgstr ""
#: src/components/BanInfo.jsx:81 #: src/components/BanInfo.jsx:81
#: src/components/Captcha.jsx:77 #: src/components/Captcha.jsx:77
#: src/components/ChangeMail.jsx:72 #: src/components/ChangeMail.jsx:72
@ -477,6 +477,124 @@ msgstr ""
msgid "Enter Characters" msgid "Enter Characters"
msgstr "" msgstr ""
#: src/components/windows/Settings.jsx:86
msgid "Show Grid"
msgstr ""
#: src/components/windows/Settings.jsx:91
msgid "Turn on grid to highlight pixel borders."
msgstr ""
#: src/components/windows/Settings.jsx:94
msgid "Show Pixel Activity"
msgstr ""
#: src/components/windows/Settings.jsx:99
msgid "Show circles where pixels are placed."
msgstr ""
#: src/components/windows/Settings.jsx:102
msgid "Disable Game Sounds"
msgstr ""
#: src/components/windows/Settings.jsx:108
msgid "All sound effects will be disabled."
msgstr ""
#: src/components/windows/Settings.jsx:112
msgid ""
"Your Browser doesn't allow us to use AudioContext to play sounds. Do you "
"have some privacy feature blocking us?"
msgstr ""
#: src/components/windows/Settings.jsx:118
msgid "Enable chat notifications"
msgstr ""
#: src/components/windows/Settings.jsx:122
msgid "Play a sound when new chat messages arrive"
msgstr ""
#: src/components/windows/Settings.jsx:125
msgid "Auto Zoom In"
msgstr ""
#: src/components/windows/Settings.jsx:130
msgid ""
"Zoom in instead of placing a pixel when you tap the canvas and your zoom is "
"small."
msgstr ""
#: src/components/windows/Settings.jsx:133
msgid "Compact Palette"
msgstr ""
#: src/components/windows/Settings.jsx:138
msgid "Display Palette in a compact form that takes less screen space."
msgstr ""
#: src/components/windows/Settings.jsx:141
msgid "Potato Mode"
msgstr ""
#: src/components/windows/Settings.jsx:145
msgid "For when you are playing on a potato."
msgstr ""
#: src/components/Converter.jsx:376
#: src/components/windows/Settings.jsx:148
msgid "Light Grid"
msgstr ""
#: src/components/windows/Settings.jsx:152
msgid "Show Grid in white instead of black."
msgstr ""
#: src/components/windows/Settings.jsx:156
msgid "Historical View"
msgstr ""
#: src/components/windows/Settings.jsx:161
msgid "Check out past versions of the canvas."
msgstr ""
#: src/components/windows/Settings.jsx:166
msgid "Themes"
msgstr ""
#: src/components/windows/Settings.jsx:171
msgid "How pixelplanet should look like."
msgstr ""
#: src/components/windows/Settings.jsx:178
msgid "Select Language"
msgstr ""
#: src/components/windows/UserArea.jsx:31
#: src/components/windows/UserArea.jsx:50
msgid "Profile"
msgstr ""
#: src/components/windows/UserArea.jsx:53
msgid "Ranking"
msgstr ""
#: src/components/windows/UserArea.jsx:56
msgid "Converter"
msgstr ""
#: src/components/windows/UserArea.jsx:62
msgid "Modtools"
msgstr ""
#: src/components/windows/UserArea.jsx:63
msgid "Loading..."
msgstr ""
#: src/components/windows/UserArea.jsx:70
msgid "Consider joining us on Guilded:"
msgstr ""
#: src/components/windows/Help.jsx:42 #: src/components/windows/Help.jsx:42
msgid "Place color pixels on a large canvas with other players online!" msgid "Place color pixels on a large canvas with other players online!"
msgstr "" msgstr ""
@ -650,122 +768,15 @@ msgstr ""
msgid "Credit for the Palette of the Top10 canvas goes to ${ vinikLink }." msgid "Credit for the Palette of the Top10 canvas goes to ${ vinikLink }."
msgstr "" msgstr ""
#: src/components/windows/Settings.jsx:134 #: src/components/windows/CanvasSelect.jsx:27
msgid "Show Grid"
msgstr ""
#: src/components/windows/Settings.jsx:139
msgid "Turn on grid to highlight pixel borders."
msgstr ""
#: src/components/windows/Settings.jsx:142
msgid "Show Pixel Activity"
msgstr ""
#: src/components/windows/Settings.jsx:147
msgid "Show circles where pixels are placed."
msgstr ""
#: src/components/windows/Settings.jsx:150
msgid "Disable Game Sounds"
msgstr ""
#: src/components/windows/Settings.jsx:156
msgid "All sound effects will be disabled."
msgstr ""
#: src/components/windows/Settings.jsx:160
msgid "" msgid ""
"Your Browser doesn't allow us to use AudioContext to play sounds. Do you " "Select the canvas you want to use. Every canvas is unique and has "
"have some privacy feature blocking us?" "different palettes, cooldown and requirements. Archive of closed canvases "
"can be accessed here:"
msgstr "" msgstr ""
#: src/components/windows/Settings.jsx:166 #: src/components/windows/CanvasSelect.jsx:35
msgid "Enable chat notifications" msgid "Archive"
msgstr ""
#: src/components/windows/Settings.jsx:170
msgid "Play a sound when new chat messages arrive"
msgstr ""
#: src/components/windows/Settings.jsx:173
msgid "Auto Zoom In"
msgstr ""
#: src/components/windows/Settings.jsx:178
msgid ""
"Zoom in instead of placing a pixel when you tap the canvas and your zoom is "
"small."
msgstr ""
#: src/components/windows/Settings.jsx:181
msgid "Compact Palette"
msgstr ""
#: src/components/windows/Settings.jsx:186
msgid "Display Palette in a compact form that takes less screen space."
msgstr ""
#: src/components/windows/Settings.jsx:189
msgid "Potato Mode"
msgstr ""
#: src/components/windows/Settings.jsx:193
msgid "For when you are playing on a potato."
msgstr ""
#: src/components/Converter.jsx:376
#: src/components/windows/Settings.jsx:196
msgid "Light Grid"
msgstr ""
#: src/components/windows/Settings.jsx:200
msgid "Show Grid in white instead of black."
msgstr ""
#: src/components/windows/Settings.jsx:204
msgid "Historical View"
msgstr ""
#: src/components/windows/Settings.jsx:209
msgid "Check out past versions of the canvas."
msgstr ""
#: src/components/windows/Settings.jsx:214
msgid "Themes"
msgstr ""
#: src/components/windows/Settings.jsx:219
msgid "How pixelplanet should look like."
msgstr ""
#: src/components/windows/Settings.jsx:226
msgid "Select Language"
msgstr ""
#: src/components/windows/UserArea.jsx:31
#: src/components/windows/UserArea.jsx:50
msgid "Profile"
msgstr ""
#: src/components/windows/UserArea.jsx:53
msgid "Ranking"
msgstr ""
#: src/components/windows/UserArea.jsx:56
msgid "Converter"
msgstr ""
#: src/components/windows/UserArea.jsx:62
msgid "Modtools"
msgstr ""
#: src/components/windows/UserArea.jsx:63
msgid "Loading..."
msgstr ""
#: src/components/windows/UserArea.jsx:70
msgid "Consider joining us on Guilded:"
msgstr "" msgstr ""
#: src/components/windows/Register.jsx:85 #: src/components/windows/Register.jsx:85
@ -845,17 +856,6 @@ msgid ""
"how the canvas was at that time." "how the canvas was at that time."
msgstr "" msgstr ""
#: src/components/windows/CanvasSelect.jsx:33
msgid ""
"Select the canvas you want to use. Every canvas is unique and has "
"different palettes, cooldown and requirements. Archive of closed canvases "
"can be accessed here:"
msgstr ""
#: src/components/windows/CanvasSelect.jsx:41
msgid "Archive"
msgstr ""
#: src/components/windows/Chat.jsx:143 #: src/components/windows/Chat.jsx:143
msgid "Start chatting here" msgid "Start chatting here"
msgstr "" msgstr ""
@ -928,14 +928,6 @@ msgstr ""
msgid "Password must be shorter than 60 characters." msgid "Password must be shorter than 60 characters."
msgstr "" msgstr ""
#: src/components/GetIID.jsx:44
msgid "Get IID"
msgstr ""
#: src/components/GetIID.jsx:53
msgid "Copy"
msgstr ""
#: src/components/ChangeMail.jsx:91 #: src/components/ChangeMail.jsx:91
#: src/components/ChangeName.jsx:68 #: src/components/ChangeName.jsx:68
#: src/components/ChangePassword.jsx:109 #: src/components/ChangePassword.jsx:109
@ -1103,6 +1095,14 @@ msgstr ""
msgid "Download Template" msgid "Download Template"
msgstr "" msgstr ""
#: src/components/GetIID.jsx:44
msgid "Get IID"
msgstr ""
#: src/components/GetIID.jsx:53
msgid "Copy"
msgstr ""
#: src/components/CanvasItem.jsx:29 #: src/components/CanvasItem.jsx:29
msgid "Online Users" msgid "Online Users"
msgstr "" msgstr ""
@ -1208,15 +1208,15 @@ msgstr ""
msgid "Yes, Delete My Account!" msgid "Yes, Delete My Account!"
msgstr "" msgstr ""
#: src/components/SocialSettings.jsx:37 #: src/components/SocialSettings.jsx:24
msgid "Block all Private Messages" msgid "Block all Private Messages"
msgstr "" msgstr ""
#: src/components/SocialSettings.jsx:55 #: src/components/SocialSettings.jsx:37
msgid "Unblock Users" msgid "Unblock Users"
msgstr "" msgstr ""
#: src/components/SocialSettings.jsx:80 #: src/components/SocialSettings.jsx:62
msgid "You have no users blocked" msgid "You have no users blocked"
msgstr "" msgstr ""
@ -1394,19 +1394,24 @@ msgid "(0 = infinite)"
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:15 #: src/components/windows/Help.jsx:15
#: src/components/windows/Settings.jsx:135 #: src/components/windows/Settings.jsx:87
msgctxt "keybinds" msgctxt "keybinds"
msgid "G" msgid "G"
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:16 #: src/components/windows/Help.jsx:16
#: src/components/windows/Settings.jsx:143 #: src/components/windows/Settings.jsx:95
msgctxt "keybinds" msgctxt "keybinds"
msgid "X" msgid "X"
msgstr "" msgstr ""
#: src/components/windows/Settings.jsx:103
msgctxt "keybinds"
msgid "M"
msgstr ""
#: src/components/windows/Help.jsx:17 #: src/components/windows/Help.jsx:17
#: src/components/windows/Settings.jsx:206 #: src/components/windows/Settings.jsx:158
msgctxt "keybinds" msgctxt "keybinds"
msgid "H" msgid "H"
msgstr "" msgstr ""
@ -1454,9 +1459,4 @@ msgstr ""
#: src/components/windows/Help.jsx:32 #: src/components/windows/Help.jsx:32
msgctxt "keybinds" msgctxt "keybinds"
msgid "C" msgid "C"
msgstr ""
#: src/components/windows/Settings.jsx:151
msgctxt "keybinds"
msgid "M"
msgstr "" msgstr ""

102
package-lock.json generated
View File

@ -33,12 +33,10 @@
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^4.3.1", "react-icons": "^4.3.1",
"react-redux": "^8.0.2", "react-redux": "^8.0.2",
"react-responsive": "^8.2.0",
"react-stay-scrolled": "^8.0.0", "react-stay-scrolled": "^8.0.0",
"react-toggle": "^4.1.3", "react-toggle": "^4.1.3",
"redis": "^4.2.0", "redis": "^4.2.0",
"redux": "^4.1.2", "redux": "^4.1.2",
"redux-logger": "^3.0.6",
"redux-persist": "^6.0.0", "redux-persist": "^6.0.0",
"redux-thunk": "^2.4.1", "redux-thunk": "^2.4.1",
"reselect": "^4.1.6", "reselect": "^4.1.6",
@ -4329,11 +4327,6 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/css-mediaquery": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
"integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q=="
},
"node_modules/cssesc": { "node_modules/cssesc": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@ -4402,11 +4395,6 @@
"integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==", "integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==",
"dev": true "dev": true
}, },
"node_modules/deep-diff": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz",
"integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug=="
},
"node_modules/deep-equal": { "node_modules/deep-equal": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
@ -6237,11 +6225,6 @@
"hunspell-tojson": "bin/hunspell-tojson.js" "hunspell-tojson": "bin/hunspell-tojson.js"
} }
}, },
"node_modules/hyphenate-style-name": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
"integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
},
"node_modules/iconv-lite": { "node_modules/iconv-lite": {
"version": "0.4.24", "version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@ -7296,14 +7279,6 @@
"semver": "bin/semver" "semver": "bin/semver"
} }
}, },
"node_modules/matchmediaquery": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz",
"integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==",
"dependencies": {
"css-mediaquery": "^0.1.2"
}
},
"node_modules/media-typer": { "node_modules/media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@ -8852,23 +8827,6 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
}, },
"node_modules/react-responsive": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-8.2.0.tgz",
"integrity": "sha512-iagCqVrw4QSjhxKp3I/YK6+ODkWY6G+YPElvdYKiUUbywwh9Ds0M7r26Fj2/7dWFFbOpcGnJE6uE7aMck8j5Qg==",
"dependencies": {
"hyphenate-style-name": "^1.0.0",
"matchmediaquery": "^0.3.0",
"prop-types": "^15.6.1",
"shallow-equal": "^1.1.0"
},
"engines": {
"node": ">= 0.10"
},
"peerDependencies": {
"react": ">=16.8.0"
}
},
"node_modules/react-stay-scrolled": { "node_modules/react-stay-scrolled": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/react-stay-scrolled/-/react-stay-scrolled-8.0.0.tgz", "resolved": "https://registry.npmjs.org/react-stay-scrolled/-/react-stay-scrolled-8.0.0.tgz",
@ -8965,14 +8923,6 @@
"@babel/runtime": "^7.9.2" "@babel/runtime": "^7.9.2"
} }
}, },
"node_modules/redux-logger": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz",
"integrity": "sha512-JoCIok7bg/XpqA1JqCqXFypuqBbQzGQySrhFzewB7ThcnysTO30l4VCst86AuB9T9tuT03MAA56Jw2PNhRSNCg==",
"dependencies": {
"deep-diff": "^0.3.5"
}
},
"node_modules/redux-persist": { "node_modules/redux-persist": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz",
@ -9475,11 +9425,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/shallow-equal": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
"integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
},
"node_modules/sharp": { "node_modules/sharp": {
"version": "0.30.7", "version": "0.30.7",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz",
@ -14360,11 +14305,6 @@
} }
} }
}, },
"css-mediaquery": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
"integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q=="
},
"cssesc": { "cssesc": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@ -14410,11 +14350,6 @@
"integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==", "integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==",
"dev": true "dev": true
}, },
"deep-diff": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz",
"integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug=="
},
"deep-equal": { "deep-equal": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
@ -15820,11 +15755,6 @@
"integrity": "sha512-4DwmFAvlz+ChsqLDsZT2cwBsYNXh+oWboemxXtafwKIyItq52xfR4e4kr017sLAoPaSYVofSOvPUfmOAhXyYvw==", "integrity": "sha512-4DwmFAvlz+ChsqLDsZT2cwBsYNXh+oWboemxXtafwKIyItq52xfR4e4kr017sLAoPaSYVofSOvPUfmOAhXyYvw==",
"dev": true "dev": true
}, },
"hyphenate-style-name": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
"integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
},
"iconv-lite": { "iconv-lite": {
"version": "0.4.24", "version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@ -16610,14 +16540,6 @@
} }
} }
}, },
"matchmediaquery": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz",
"integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==",
"requires": {
"css-mediaquery": "^0.1.2"
}
},
"media-typer": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@ -17743,17 +17665,6 @@
} }
} }
}, },
"react-responsive": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-8.2.0.tgz",
"integrity": "sha512-iagCqVrw4QSjhxKp3I/YK6+ODkWY6G+YPElvdYKiUUbywwh9Ds0M7r26Fj2/7dWFFbOpcGnJE6uE7aMck8j5Qg==",
"requires": {
"hyphenate-style-name": "^1.0.0",
"matchmediaquery": "^0.3.0",
"prop-types": "^15.6.1",
"shallow-equal": "^1.1.0"
}
},
"react-stay-scrolled": { "react-stay-scrolled": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/react-stay-scrolled/-/react-stay-scrolled-8.0.0.tgz", "resolved": "https://registry.npmjs.org/react-stay-scrolled/-/react-stay-scrolled-8.0.0.tgz",
@ -17827,14 +17738,6 @@
"@babel/runtime": "^7.9.2" "@babel/runtime": "^7.9.2"
} }
}, },
"redux-logger": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz",
"integrity": "sha512-JoCIok7bg/XpqA1JqCqXFypuqBbQzGQySrhFzewB7ThcnysTO30l4VCst86AuB9T9tuT03MAA56Jw2PNhRSNCg==",
"requires": {
"deep-diff": "^0.3.5"
}
},
"redux-persist": { "redux-persist": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz",
@ -18203,11 +18106,6 @@
"kind-of": "^6.0.2" "kind-of": "^6.0.2"
} }
}, },
"shallow-equal": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
"integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
},
"sharp": { "sharp": {
"version": "0.30.7", "version": "0.30.7",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz",

View File

@ -8,9 +8,9 @@
"description": "Unlimited planet canvas for placing pixels", "description": "Unlimited planet canvas for placing pixels",
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
"build": "babel-node scripts/build.js && npm run minify-css", "build": "node scripts/build.js && npm run minify-css",
"build:dev": "webpack --env extract --config ./webpack.config.server.babel.js && webpack --env extract --env development --config ./webpack.config.client.babel.js && npm run minify-css", "build:dev": "webpack --env extract --config ./webpack.config.server.js && webpack --env extract --env development --config ./webpack.config.client.js && npm run minify-css",
"minify-css": "babel-node scripts/minifyCss.js", "minify-css": "node scripts/minifyCss.js",
"babel-node": "babel-node", "babel-node": "babel-node",
"lint": "cd $INIT_CWD && eslint --ext .jsx --ext .js", "lint": "cd $INIT_CWD && eslint --ext .jsx --ext .js",
"lint:src": "eslint --ext .jsx --ext .js src" "lint:src": "eslint --ext .jsx --ext .js src"
@ -29,8 +29,8 @@
"etag": "^1.8.1", "etag": "^1.8.1",
"express": "^4.17.2", "express": "^4.17.2",
"express-session": "^1.17.2", "express-session": "^1.17.2",
"image-q": "^4.0.0",
"js-file-download": "^0.4.12", "js-file-download": "^0.4.12",
"image-q": "^4.0.0",
"morgan": "^1.10.0", "morgan": "^1.10.0",
"multer": "^1.4.4", "multer": "^1.4.4",
"mysql2": "^2.3.3", "mysql2": "^2.3.3",
@ -47,12 +47,10 @@
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^4.3.1", "react-icons": "^4.3.1",
"react-redux": "^8.0.2", "react-redux": "^8.0.2",
"react-responsive": "^8.2.0",
"react-stay-scrolled": "^8.0.0", "react-stay-scrolled": "^8.0.0",
"react-toggle": "^4.1.3", "react-toggle": "^4.1.3",
"redis": "^4.2.0", "redis": "^4.2.0",
"redux": "^4.1.2", "redux": "^4.1.2",
"redux-logger": "^3.0.6",
"redux-persist": "^6.0.0", "redux-persist": "^6.0.0",
"redux-thunk": "^2.4.1", "redux-thunk": "^2.4.1",
"reselect": "^4.1.6", "reselect": "^4.1.6",

View File

@ -3,9 +3,10 @@
* Lets split that here * Lets split that here
*/ */
import webpack from 'webpack'; const webpack = require('webpack');
import serverConfig from '../webpack.config.server.babel.js'; const serverConfig = require('../webpack.config.server.js');
import clientConfig, {getAllAvailableLocals} from '../webpack.config.client.babel.js'; const clientConfig = require('../webpack.config.client.js');
const { getAllAvailableLocals } = clientConfig;
function compile(webpackConfig) { function compile(webpackConfig) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {

View File

@ -4,17 +4,16 @@
* so files beginning with "theme-" in the src/styles folder will * so files beginning with "theme-" in the src/styles folder will
* be read and automatically added. * be read and automatically added.
* *
* @flow
*/ */
/* eslint-disable import/no-extraneous-dependencies */ /* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable no-console */ /* eslint-disable no-console */
import fs from 'fs'; const fs = require('fs');
import path from 'path'; const path = require('path');
import CleanCSS from 'clean-css'; const CleanCSS = require('clean-css');
import crypto from 'crypto'; const crypto = require('crypto');
import mkdirp from 'mkdirp'; const mkdirp = require('mkdirp');
const assetdir = path.resolve(__dirname, '..', 'dist', 'public', 'assets'); const assetdir = path.resolve(__dirname, '..', 'dist', 'public', 'assets');
const builddir = path.resolve(__dirname, '..', 'dist'); const builddir = path.resolve(__dirname, '..', 'dist');
@ -71,4 +70,4 @@ if (require.main === module) {
doMinifyCss(); doMinifyCss();
} }
export default minifyCss; module.exports = minifyCss;

View File

@ -22,8 +22,7 @@ import {
createPngBackup, createPngBackup,
incrementialBackupRedis, incrementialBackupRedis,
} from './core/tilesBackup'; } from './core/tilesBackup';
// eslint-disable-next-line import/no-unresolved import canvases from './core/canvases';
import canvases from './canvases.json';
/* /*
* use low cpu priority * use low cpu priority

View File

@ -4,9 +4,10 @@
* *
*/ */
import canvases from './canvases.json'; import canvases from './core/canvases';
import ttag from './core/ttag'; import ttag from './core/ttag';
/* eslint-disable max-len */ /* eslint-disable max-len */
function getCanvases(t) { function getCanvases(t) {
@ -55,7 +56,6 @@ function getCanvases(t) {
return localicedCanvases; return localicedCanvases;
} }
const lCanvases = {}; const lCanvases = {};
(() => { (() => {
const langs = Object.keys(ttag); const langs = Object.keys(ttag);

View File

@ -19,8 +19,7 @@ import {
TILE_SIZE, TILE_SIZE,
} from './constants'; } from './constants';
import logger from './logger'; import logger from './logger';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
const METHODS = { const METHODS = {
/* /*

View File

@ -11,8 +11,7 @@ import RedisCanvas from '../data/redis/RedisCanvas';
import logger from './logger'; import logger from './logger';
import { getChunkOfPixel } from './utils'; import { getChunkOfPixel } from './utils';
import { TILE_SIZE } from './constants'; import { TILE_SIZE } from './constants';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
import Palette from './Palette'; import Palette from './Palette';

View File

@ -20,8 +20,7 @@ import { protectCanvasArea } from './Image';
import { setPixelByOffset } from './setPixel'; import { setPixelByOffset } from './setPixel';
import { TILE_SIZE, EVENT_USER_NAME } from './constants'; import { TILE_SIZE, EVENT_USER_NAME } from './constants';
import chatProvider from './ChatProvider'; import chatProvider from './ChatProvider';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
// steps in minutes for event stages // steps in minutes for event stages
// STEPS[5] is event duration, adjusted from 10 to 8 on 2022.04.26 // STEPS[5] is event duration, adjusted from 10 to 8 on 2022.04.26

View File

@ -10,8 +10,7 @@ import PixelUpdate from '../socket/packets/PixelUpdateServer';
import { setPixelByOffset } from './setPixel'; import { setPixelByOffset } from './setPixel';
import { TILE_SIZE } from './constants'; import { TILE_SIZE } from './constants';
import { CANVAS_ID } from '../data/redis/Event'; import { CANVAS_ID } from '../data/redis/Event';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
const TARGET_RADIUS = 62; const TARGET_RADIUS = 62;

View File

@ -31,8 +31,7 @@ import {
getIPofIID, getIPofIID,
getIIDofIP, getIIDofIP,
} from '../data/sql/IPInfo'; } from '../data/sql/IPInfo';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
import { import {
imageABGR2Canvas, imageABGR2Canvas,
protectCanvasArea, protectCanvasArea,

9
src/core/assets.js Normal file
View File

@ -0,0 +1,9 @@
import path from 'path';
import { readFileSync } from 'fs';
export const assets = JSON.parse(readFileSync(
path.resolve(__dirname, './assets.json'),
));
export const styleassets = JSON.parse(readFileSync(
path.resolve(__dirname, './styleassets.json'),
));

8
src/core/canvases.js Normal file
View File

@ -0,0 +1,8 @@
import path from 'path';
import { readFileSync } from 'fs';
const canvases = JSON.parse(readFileSync(
path.resolve(__dirname, './canvases.json'),
));
export default canvases;

View File

@ -12,8 +12,7 @@ import {
setPixelByCoords, setPixelByCoords,
} from './setPixel'; } from './setPixel';
import rankings from './ranking'; import rankings from './ranking';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
import { THREE_CANVAS_HEIGHT, THREE_TILE_SIZE, TILE_SIZE } from './constants'; import { THREE_CANVAS_HEIGHT, THREE_TILE_SIZE, TILE_SIZE } from './constants';

View File

@ -4,7 +4,6 @@
* various api endpoints. * various api endpoints.
* *
*/ */
// eslint-disable-next-line import/no-unresolved
import { getLocalicedCanvases } from '../canvasesDesc'; import { getLocalicedCanvases } from '../canvasesDesc';
import { USE_MAILER } from './config'; import { USE_MAILER } from './config';
import chatProvider from './ChatProvider'; import chatProvider from './ChatProvider';

View File

@ -16,8 +16,7 @@ import { getChunkOfPixel } from './utils';
import Palette from './Palette'; import Palette from './Palette';
import { TILE_SIZE } from './constants'; import { TILE_SIZE } from './constants';
import { BACKUP_DIR } from './config'; import { BACKUP_DIR } from './config';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
export default async function rollbackToDate( export default async function rollbackToDate(
canvasId, // number canvasId, // number

View File

@ -8,8 +8,7 @@ import {
getOffsetOfPixel, getOffsetOfPixel,
} from './utils'; } from './utils';
import pixelCache from './PixelCache'; import pixelCache from './PixelCache';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
/** /**

View File

@ -7,8 +7,7 @@ import fs from 'fs';
import { Worker } from 'worker_threads'; import { Worker } from 'worker_threads';
import logger from './logger'; import logger from './logger';
// eslint-disable-next-line import/no-unresolved import canvases from './canvases';
import canvases from './canvases.json';
import RedisCanvas from '../data/redis/RedisCanvas'; import RedisCanvas from '../data/redis/RedisCanvas';
import { TILE_FOLDER } from './config'; import { TILE_FOLDER } from './config';

View File

@ -16,7 +16,7 @@ import captcha from './captcha';
import resetPassword from './reset_password'; import resetPassword from './reset_password';
import api from './api'; import api from './api';
import assets from './assets.json'; // eslint-disable-line import/no-unresolved import { assets } from '../core/assets';
import { expressTTag } from '../core/ttag'; import { expressTTag } from '../core/ttag';
import generateGlobePage from '../ssr/Globe'; import generateGlobePage from '../ssr/Globe';
import generateWinPage from '../ssr/Win'; import generateWinPage from '../ssr/Win';

View File

@ -7,8 +7,7 @@
import fs from 'fs'; import fs from 'fs';
import express from 'express'; import express from 'express';
// eslint-disable-next-line import/no-unresolved import canvases from '../core/canvases';
import canvases from './canvases.json';
import { getMaxTiledZoom } from '../core/utils'; import { getMaxTiledZoom } from '../core/utils';
import { TILE_FOLDER } from '../core/config'; import { TILE_FOLDER } from '../core/config';

View File

@ -4,8 +4,7 @@
import WebSocket from 'ws'; import WebSocket from 'ws';
import logger from '../core/logger'; import logger from '../core/logger';
// eslint-disable-next-line import/no-unresolved import canvases from '../core/canvases';
import canvases from './canvases.json';
import Counter from '../utils/Counter'; import Counter from '../utils/Counter';
import { getIPFromRequest, getHostFromRequest } from '../utils/ip'; import { getIPFromRequest, getHostFromRequest } from '../utils/ip';

View File

@ -8,8 +8,7 @@
import { getTTag } from '../core/ttag'; import { getTTag } from '../core/ttag';
/* this will be set by webpack */ /* this will be set by webpack */
// eslint-disable-next-line import/no-unresolved import { assets } from '../core/assets';
import assets from './assets.json';
import { ASSET_SERVER } from '../core/config'; import { ASSET_SERVER } from '../core/config';
import globeCss from '../styles/globe.css'; import globeCss from '../styles/globe.css';

View File

@ -7,11 +7,7 @@
import { langCodeToCC } from '../utils/location'; import { langCodeToCC } from '../utils/location';
import ttags, { getTTag } from '../core/ttag'; import ttags, { getTTag } from '../core/ttag';
/* this one is set by webpack */ import { styleassets, assets } from '../core/assets';
// eslint-disable-next-line import/no-unresolved
import assets from './assets.json';
// eslint-disable-next-line import/no-unresolved
import styleassets from './styleassets.json';
import { ASSET_SERVER, BACKUP_URL } from '../core/config'; import { ASSET_SERVER, BACKUP_URL } from '../core/config';

View File

@ -8,8 +8,7 @@
import { getTTag } from '../core/ttag'; import { getTTag } from '../core/ttag';
/* this will be set by webpack */ /* this will be set by webpack */
// eslint-disable-next-line import/no-unresolved import { assets } from '../core/assets';
import assets from './assets.json';
import { ASSET_SERVER } from '../core/config'; import { ASSET_SERVER } from '../core/config';
/* /*

View File

@ -1,17 +1,22 @@
/** /**
* webpack config for client files
*/ */
import fs from 'fs'; const fs = require('fs');
import path from 'path'; const path = require('path');
import webpack from 'webpack'; const process = require('process');
import AssetsPlugin from 'assets-webpack-plugin'; const webpack = require('webpack');
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; const AssetsPlugin = require('assets-webpack-plugin');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
// make sure we build in root dir
process.chdir(__dirname);
/* /*
* Emit a file with assets paths * Emit a file with assets paths
*/ */
const assetPlugin = new AssetsPlugin({ const assetPlugin = new AssetsPlugin({
path: path.resolve(__dirname, 'dist'), path: path.resolve('dist'),
filename: 'assets.json', filename: 'assets.json',
update: true, update: true,
entrypoints: true, entrypoints: true,
@ -19,7 +24,7 @@ const assetPlugin = new AssetsPlugin({
}); });
export function buildWebpackClientConfig( function buildWebpackClientConfig(
development, development,
analyze, analyze,
locale, locale,
@ -28,14 +33,14 @@ export function buildWebpackClientConfig(
const ttag = { const ttag = {
resolve: { resolve: {
translations: (locale !== 'default') translations: (locale !== 'default')
? path.resolve(__dirname, 'i18n', `${locale}.po`) ? path.resolve('i18n', `${locale}.po`)
: locale, : locale,
}, },
}; };
if (extract) { if (extract) {
ttag.extract = { ttag.extract = {
output: path.resolve(__dirname, 'i18n', 'template.pot'), output: path.resolve('i18n', 'template.pot'),
}; };
} }
@ -55,21 +60,20 @@ export function buildWebpackClientConfig(
name: 'client', name: 'client',
target: 'web', target: 'web',
context: __dirname,
mode: (development) ? 'development' : 'production', mode: (development) ? 'development' : 'production',
devtool: (development) ? 'eval' : false, devtool: (development) ? 'eval' : false,
entry: { entry: {
[(locale !== 'default') ? `client-${locale}` : 'client']: [(locale !== 'default') ? `client-${locale}` : 'client']:
[path.resolve(__dirname, 'src', 'client.js')], [path.resolve('src', 'client.js')],
[(locale !== 'default') ? `globe-${locale}` : 'globe']: [(locale !== 'default') ? `globe-${locale}` : 'globe']:
[path.resolve(__dirname, 'src', 'globe.js')], [path.resolve('src', 'globe.js')],
[(locale !== 'default') ? `win-${locale}` : 'win']: [(locale !== 'default') ? `win-${locale}` : 'win']:
[path.resolve(__dirname, 'src', 'win.js')], [path.resolve('src', 'win.js')],
}, },
output: { output: {
path: path.resolve(__dirname, 'dist', 'public', 'assets'), path: path.resolve('dist', 'public', 'assets'),
publicPath: '/assets/', publicPath: '/assets/',
filename: '[name].[chunkhash:8].js', filename: '[name].[chunkhash:8].js',
chunkFilename: (locale !== 'default') chunkFilename: (locale !== 'default')
@ -87,7 +91,7 @@ export function buildWebpackClientConfig(
/* /*
* if we don't do that,we might load different versions of three * if we don't do that,we might load different versions of three
*/ */
three: path.resolve(__dirname, './node_modules/three'), three: path.resolve('node_modules', 'three'),
}, },
extensions: ['.js', '.jsx'], extensions: ['.js', '.jsx'],
}, },
@ -122,9 +126,9 @@ export function buildWebpackClientConfig(
test: /\.(js|jsx)$/, test: /\.(js|jsx)$/,
loader: 'babel-loader', loader: 'babel-loader',
include: [ include: [
path.resolve(__dirname, 'src'), path.resolve('src'),
...['image-q'].map((moduleName) => ( ...['image-q'].map((moduleName) => (
path.resolve(__dirname + '/node_modules/' + moduleName) path.resolve('node_modules', moduleName)
)) ))
], ],
options: { options: {
@ -188,8 +192,8 @@ export function buildWebpackClientConfig(
}; };
} }
export function getAllAvailableLocals() { function getAllAvailableLocals() {
const langDir = path.resolve(__dirname, 'i18n'); const langDir = path.resolve('i18n');
const langs = fs.readdirSync(langDir) const langs = fs.readdirSync(langDir)
.filter((e) => (e.endsWith('.po') && !e.startsWith('ssr'))) .filter((e) => (e.endsWith('.po') && !e.startsWith('ssr')))
.map((l) => l.slice(0, -3)); .map((l) => l.slice(0, -3));
@ -223,7 +227,7 @@ function buildWebpackClientConfigAllLangs() {
* @param analyze launch BundleAnalyzerPlugin after build * @param analyze launch BundleAnalyzerPlugin after build
* @return webpack configuration * @return webpack configuration
*/ */
export default ({ module.exports = ({
development, analyze, extract, locale, development, analyze, extract, locale,
}) => { }) => {
if (extract || analyze || locale || development) { if (extract || analyze || locale || development) {
@ -233,3 +237,6 @@ export default ({
} }
return buildWebpackClientConfigAllLangs(development); return buildWebpackClientConfigAllLangs(development);
}; };
module.exports.buildWebpackClientConfig = buildWebpackClientConfig;
module.exports.getAllAvailableLocals = getAllAvailableLocals;

View File

@ -1,14 +1,19 @@
/* /*
* webpack config to build server files
*/ */
import fs from 'fs'; const fs = require('fs');
import path from 'path'; const path = require('path');
import webpack from 'webpack'; const process = require('process');
import nodeExternals from 'webpack-node-externals'; const webpack = require('webpack');
import GeneratePackageJsonPlugin from 'generate-package-json-webpack-plugin'; const nodeExternals = require('webpack-node-externals');
import CopyPlugin from 'copy-webpack-plugin'; const GeneratePackageJsonPlugin = require('generate-package-json-webpack-plugin');
const CopyPlugin = require('copy-webpack-plugin');
import pkg from './package.json'; const pkg = require('./package.json');
// make sure we build in root dir
process.chdir(__dirname);
const basePackageValues = { const basePackageValues = {
name: pkg.name, name: pkg.name,
@ -20,19 +25,17 @@ const basePackageValues = {
}, },
dependencies: { dependencies: {
mysql2: '', mysql2: '',
bufferutil: '',
'utf-8-validate': '', 'utf-8-validate': '',
bufferutil: '', bufferutil: '',
}, },
}; };
const ttag = {}; const ttag = {};
const babelPlugins = [ const babelPlugins = [
['ttag', ttag], ['ttag', ttag],
]; ];
export default ({ module.exports = ({
development, extract, development, extract,
}) => { }) => {
/* /*
@ -40,7 +43,7 @@ export default ({
*/ */
if (extract) { if (extract) {
ttag.extract = { ttag.extract = {
output: path.resolve(__dirname, 'i18n', 'template-ssr.pot'), output: path.resolve('i18n', 'template-ssr.pot'),
}; };
ttag.discover = ['t', 'jt']; ttag.discover = ['t', 'jt'];
} }
@ -49,7 +52,7 @@ export default ({
* worker threads need to be their own * worker threads need to be their own
* entry points * entry points
*/ */
const workersDir = path.resolve(__dirname, 'src', 'workers'); const workersDir = path.resolve('src', 'workers');
const workerEntries = {}; const workerEntries = {};
fs.readdirSync(workersDir) fs.readdirSync(workersDir)
.filter((e) => e.endsWith('.js')) .filter((e) => e.endsWith('.js'))
@ -63,19 +66,15 @@ export default ({
name: 'server', name: 'server',
target: 'node', target: 'node',
context: __dirname,
mode: (development) ? 'development' : 'production', mode: (development) ? 'development' : 'production',
entry: { entry: {
server: [path.resolve(__dirname, 'src', 'server.js')], server: [path.resolve('src', 'server.js')],
backup: [path.resolve(__dirname, 'src', 'backup.js')], backup: [path.resolve('src', 'backup.js')],
...workerEntries, ...workerEntries,
}, },
output: { output: {
library: {
type: 'commonjs2',
},
clean: true, clean: true,
}, },
@ -88,9 +87,7 @@ export default ({
{ {
test: /\.(js|jsx)$/, test: /\.(js|jsx)$/,
loader: 'babel-loader', loader: 'babel-loader',
include: [ include: [ path.resolve('src') ],
path.resolve(__dirname, 'src'),
],
options: { options: {
cacheDirectory: false, cacheDirectory: false,
plugins: babelPlugins, plugins: babelPlugins,
@ -117,11 +114,17 @@ export default ({
], ],
}, },
externalsPresets: {
// exclude native node modules (path, fs, etc.)
node: true,
},
externals: [ externals: [
/\/canvases\.json$/, nodeExternals({
/\/styleassets\.json$/, // passport-reddit is an ESM module
/\/assets\.json$/, // bundle it, then we don't have to import it
nodeExternals(), allowlist: [ /^passport-/ ],
}),
], ],
plugins: [ plugins: [
@ -131,36 +134,28 @@ export default ({
}), }),
// create package.json for deployment // create package.json for deployment
new GeneratePackageJsonPlugin(basePackageValues, { new GeneratePackageJsonPlugin(basePackageValues, {
sourcePackageFilenames: [ sourcePackageFilenames: [ path.resolve('package.json') ],
path.resolve(__dirname, 'package.json'), // provided by node itself
], excludeDependencies: ['node:buffer'],
}), }),
new CopyPlugin({ new CopyPlugin({
patterns: [ patterns: [
{ {
from: path.resolve(__dirname, 'public'), from: path.resolve('public'),
to: path.resolve(__dirname, 'dist', 'public'), to: path.resolve('dist', 'public'),
}, },
path.resolve(__dirname, 'src', 'canvases.json'), path.resolve('src', 'canvases.json'),
{ {
from: path.resolve( from: path.resolve('deployment', 'example-ecosystem.yml'),
__dirname, 'deployment', 'example-ecosystem.yml' to: path.resolve('dist', 'ecosystem.yml'),
),
to: path.resolve(
__dirname, 'dist', 'ecosystem.yml'
),
}, },
{ {
from: path.resolve( from: path.resolve('deployment', 'example-ecosystem-backup.yml'),
__dirname, 'deployment', 'example-ecosystem-backup.yml' to: path.resolve('dist', 'ecosystem-backup.yml'),
),
to: path.resolve(
__dirname, 'dist', 'ecosystem-backup.yml'
),
}, },
{ {
from: path.resolve(__dirname, 'deployment', 'captchaFonts'), from: path.resolve('deployment', 'captchaFonts'),
to: path.resolve(__dirname, 'dist', 'captchaFonts'), to: path.resolve('dist', 'captchaFonts'),
}, },
], ],
}), }),
@ -176,8 +171,8 @@ export default ({
node: { node: {
global: false, global: false,
__filename: false,
__dirname: false, __dirname: false,
__filename: false,
}, },
}; };
}; };