use multiple processes while building

extract langs on production builds not on dev
update webpack
This commit is contained in:
HF 2023-12-12 22:17:57 +01:00
parent ab840c6f23
commit b5ccda251c
6 changed files with 4512 additions and 3985 deletions

View File

@ -29,6 +29,7 @@ msgid "You are muted for another ${ timeMin } minutes"
msgstr "" msgstr ""
#: src/core/ChatProvider.js:450 #: src/core/ChatProvider.js:450
#, javascript-format
msgid "You are muted for another ${ ttl } seconds" msgid "You are muted for another ${ ttl } seconds"
msgstr "" msgstr ""
@ -81,35 +82,35 @@ msgstr ""
msgid "Invalid url :( Please check your mail again." msgid "Invalid url :( Please check your mail again."
msgstr "" msgstr ""
#: src/ssr/Globe.jsx:32 #: src/ssr/Globe.jsx:37
msgid "PixelPlanet.Fun 3DGlobe" msgid "PixelPlanet.Fun 3DGlobe"
msgstr "" msgstr ""
#: src/ssr/Globe.jsx:33 #: src/ssr/Globe.jsx:38
msgid "A 3D globe of our whole map" msgid "A 3D globe of our whole map"
msgstr "" msgstr ""
#: src/ssr/Globe.jsx:46 #: src/ssr/Globe.jsx:51
msgid "Double click on globe to go back." msgid "Double click on globe to go back."
msgstr "" msgstr ""
#: src/ssr/Globe.jsx:47 #: src/ssr/Globe.jsx:52
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr ""
#: src/ssr/PopUp.jsx:58 #: src/ssr/PopUp.jsx:62
msgid "ppfun" msgid "ppfun"
msgstr "" msgstr ""
#: src/ssr/PopUp.jsx:59 #: src/ssr/PopUp.jsx:63
msgid "PixelPlanet.Fun PopUp" msgid "PixelPlanet.Fun PopUp"
msgstr "" msgstr ""
#: src/ssr/Main.jsx:67 #: src/ssr/Main.jsx:71
msgid "PixelPlanet.Fun" msgid "PixelPlanet.Fun"
msgstr "" msgstr ""
#: src/ssr/Main.jsx:68 #: src/ssr/Main.jsx:72
msgid "Place color pixels on an map styled canvas with other players online" msgid "Place color pixels on an map styled canvas with other players online"
msgstr "" msgstr ""
@ -219,31 +220,7 @@ msgstr ""
msgid "You are not banned" msgid "You are not banned"
msgstr "" msgstr ""
#: src/routes/api/auth/logout.js:11 #: src/routes/api/auth/change_mail.js:22
msgid "You are not even logged in."
msgstr ""
#: src/routes/api/auth/delete_account.js:55
#: src/routes/api/auth/logout.js:20
msgid "Server error when logging out."
msgstr ""
#: src/routes/api/auth/verify.js:26
#: src/routes/api/auth/verify.js:35
msgid "Mail verification"
msgstr ""
#: src/routes/api/auth/verify.js:27
msgid "You are now verified :)"
msgstr ""
#: src/routes/api/auth/verify.js:35
msgid ""
"Your mail verification code is invalid or already expired :(, please "
"request a new one."
msgstr ""
#: src/routes/api/auth/change_mail.js:21
#: src/routes/api/auth/register.js:24 #: src/routes/api/auth/register.js:24
msgid "This email provider is not allowed" msgid "This email provider is not allowed"
msgstr "" msgstr ""
@ -280,18 +257,50 @@ msgstr ""
msgid "Failed to establish session after register :(" msgid "Failed to establish session after register :("
msgstr "" msgstr ""
#: src/routes/api/auth/change_mail.js:43 #: src/routes/api/auth/verify.js:26
#: src/routes/api/auth/verify.js:35
msgid "Mail verification"
msgstr ""
#: src/routes/api/auth/verify.js:27
msgid "You are now verified :)"
msgstr ""
#: src/routes/api/auth/verify.js:35
msgid ""
"Your mail verification code is invalid or already expired :(, please "
"request a new one."
msgstr ""
#: src/routes/api/auth/logout.js:11
msgid "You are not even logged in."
msgstr ""
#: src/routes/api/auth/delete_account.js:65
#: src/routes/api/auth/logout.js:20
msgid "Server error when logging out."
msgstr ""
#: src/routes/api/auth/change_mail.js:44
#: src/routes/api/auth/change_passwd.js:34 #: src/routes/api/auth/change_passwd.js:34
#: src/routes/api/auth/delete_account.js:35 #: src/routes/api/auth/delete_account.js:36
msgid "You are not authenticated." msgid "You are not authenticated."
msgstr "" msgstr ""
#: src/routes/api/auth/change_mail.js:52 #: src/routes/api/auth/change_mail.js:53
#: src/routes/api/auth/change_passwd.js:43 #: src/routes/api/auth/change_passwd.js:43
#: src/routes/api/auth/delete_account.js:45 #: src/routes/api/auth/delete_account.js:55
msgid "Incorrect password!" msgid "Incorrect password!"
msgstr "" msgstr ""
#: src/routes/api/auth/delete_account.js:46
msgid "Muted users can not delete their account."
msgstr ""
#: src/routes/api/auth/change_mail.js:62
msgid "Muted users can not do this."
msgstr ""
#: src/ssr/RedirectionPage.jsx:19 #: src/ssr/RedirectionPage.jsx:19
msgid "PixelPlanet.fun Accounts" msgid "PixelPlanet.fun Accounts"
msgstr "" msgstr ""
@ -337,48 +346,59 @@ msgstr ""
msgid "Top10" msgid "Top10"
msgstr "" msgstr ""
#: src/canvasesDesc.js:29 #: src/canvasesDesc.js:27
msgid "Our main canvas, a huge map of the world. Place everywhere you like" msgid "Thoia"
msgstr "" msgstr ""
#: src/canvasesDesc.js:30 #: src/canvasesDesc.js:30
msgid "Our main canvas, a huge map of the world. Place everywhere you like"
msgstr ""
#: src/canvasesDesc.js:31
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:31 #: src/canvasesDesc.js:32
msgid "Place Voxels on a 3D canvas with others" msgid "Place Voxels on a 3D canvas with others"
msgstr "" msgstr ""
#: src/canvasesDesc.js:32 #: src/canvasesDesc.js:33
msgid "Special canvas to spread awareness of SARS-CoV2" msgid "Special canvas to spread awareness of SARS-CoV2"
msgstr "" msgstr ""
#: src/canvasesDesc.js:33 #: src/canvasesDesc.js:34
msgid "Mirror of PixelZone" msgid "Mirror of PixelZone"
msgstr "" msgstr ""
#: src/canvasesDesc.js:34 #: src/canvasesDesc.js:35
msgid "Mirror of PixelCanvas" msgid "Mirror of PixelCanvas"
msgstr "" msgstr ""
#: src/canvasesDesc.js:35 #: src/canvasesDesc.js:36
msgid "Black and White canvas" msgid "Black and White canvas"
msgstr "" msgstr ""
#: src/canvasesDesc.js:36 #: src/canvasesDesc.js:37
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."
msgstr "" msgstr ""
#: src/canvasesDesc.js:38
msgid ""
"Thoia World Canvas. Advanced fictional worldbuilding and arts. Abandon the "
"old world and all it entails."
msgstr ""
#: src/core/MailProvider.js:66 #: src/core/MailProvider.js:66
#, javascript-format #, javascript-format
msgid "Welcome ${ name } to PixelPlanet, please verify your mail" msgid "Welcome ${ name } to PixelPlanet, please verify your mail"
msgstr "" msgstr ""
#: src/core/MailProvider.js:67 #: src/core/MailProvider.js:67
#, javascript-format
msgid "Hello ${ name }" msgid "Hello ${ name }"
msgstr "" msgstr ""
@ -446,4 +466,4 @@ msgstr ""
#: src/core/MailProvider.js:130 #: src/core/MailProvider.js:130
msgid "Couldn't find this mail in our database" msgid "Couldn't find this mail in our database"
msgstr "" msgstr ""

View File

@ -194,6 +194,7 @@ msgid "try again after ${ ti }min"
msgstr "" msgstr ""
#: src/store/actions/fetch.js:70 #: src/store/actions/fetch.js:70
#, javascript-format
msgid "Connection error ${ code } :(" msgid "Connection error ${ code } :("
msgstr "" msgstr ""
@ -230,12 +231,6 @@ msgstr ""
msgid "You have new messages in chat" msgid "You have new messages in chat"
msgstr "" msgstr ""
#: src/components/Converter.jsx:561
#: src/components/CoordinatesBox.jsx:31
#: src/components/ModWatchtools.jsx:371
msgid "Copy to Clipboard"
msgstr ""
#: src/components/OnlineBox.jsx:40 #: src/components/OnlineBox.jsx:40
msgid "Online Users on Canvas" msgid "Online Users on Canvas"
msgstr "" msgstr ""
@ -248,6 +243,13 @@ msgstr ""
msgid "Pixels placed" msgid "Pixels placed"
msgstr "" msgstr ""
#: src/components/Converter.jsx:565
#: src/components/CoordinatesBox.jsx:31
#: src/components/ModWatchtools.jsx:378
#: src/components/ModWatchtools.jsx:396
msgid "Copy to Clipboard"
msgstr ""
#: src/components/buttons/CanvasSwitchButton.jsx:20 #: src/components/buttons/CanvasSwitchButton.jsx:20
#: src/components/windows/index.js:19 #: src/components/windows/index.js:19
msgid "Canvas Selection" msgid "Canvas Selection"
@ -279,7 +281,7 @@ msgstr ""
#: src/components/Admintools.jsx:103 #: src/components/Admintools.jsx:103
#: src/components/ModCanvastools.jsx:222 #: src/components/ModCanvastools.jsx:222
#: src/components/ModWatchtools.jsx:118 #: src/components/ModWatchtools.jsx:120
#: src/components/Window.jsx:157 #: src/components/Window.jsx:157
#: src/components/Window.jsx:260 #: src/components/Window.jsx:260
#: src/components/contextmenus/ChannelContextMenu.jsx:59 #: src/components/contextmenus/ChannelContextMenu.jsx:59
@ -310,6 +312,26 @@ msgstr ""
msgid "Resize" msgid "Resize"
msgstr "" msgstr ""
#: src/components/BanInfo.jsx:75
#: src/components/buttons/HelpButton.jsx:20
#: src/components/windows/index.js:13
msgid "Help"
msgstr ""
#: src/components/buttons/SettingsButton.jsx:21
#: src/components/windows/index.js:14
msgid "Settings"
msgstr ""
#: src/components/buttons/LogInButton.jsx:20
#: src/components/windows/index.js:15
msgid "User Area"
msgstr ""
#: src/components/buttons/DownloadButton.jsx:36
msgid "Make Screenshot"
msgstr ""
#: src/components/buttons/GlobeButton.jsx:34 #: src/components/buttons/GlobeButton.jsx:34
msgid "Globe View" msgid "Globe View"
msgstr "" msgstr ""
@ -322,26 +344,6 @@ msgstr ""
msgid "Open Palette" msgid "Open Palette"
msgstr "" msgstr ""
#: src/components/buttons/SettingsButton.jsx:21
#: src/components/windows/index.js:14
msgid "Settings"
msgstr ""
#: src/components/BanInfo.jsx:75
#: src/components/buttons/HelpButton.jsx:20
#: src/components/windows/index.js:13
msgid "Help"
msgstr ""
#: src/components/buttons/LogInButton.jsx:20
#: src/components/windows/index.js:15
msgid "User Area"
msgstr ""
#: src/components/buttons/DownloadButton.jsx:36
msgid "Make Screenshot"
msgstr ""
#: src/components/windows/index.js:16 #: src/components/windows/index.js:16
msgid "Registration" msgid "Registration"
msgstr "" msgstr ""
@ -447,99 +449,6 @@ msgstr ""
msgid "Why?" msgid "Why?"
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/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 ""
@ -609,6 +518,7 @@ msgid "Press ${ bindG } to toggle grid"
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:64 #: src/components/windows/Help.jsx:64
#, javascript-format
msgid "Press ${ bindX } to toggle showing of pixel activity" msgid "Press ${ bindX } to toggle showing of pixel activity"
msgstr "" msgstr ""
@ -618,6 +528,7 @@ msgid "Press ${ bindH } to toggle historical view"
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:66 #: src/components/windows/Help.jsx:66
#, javascript-format
msgid "Press ${ bindR } to copy coordinates" msgid "Press ${ bindR } to copy coordinates"
msgstr "" msgstr ""
@ -639,6 +550,7 @@ msgid "Press ${ bindAUp }, ${ bindALeft }, ${ bindADown }, ${ bindARight } to mo
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:70 #: src/components/windows/Help.jsx:70
#, javascript-format
msgid "Drag ${ mouseSymbol } mouse or ${ touchSymbol } pan to move" msgid "Drag ${ mouseSymbol } mouse or ${ touchSymbol } pan to move"
msgstr "" msgstr ""
@ -648,6 +560,7 @@ msgid "Scroll ${ mouseSymbol } mouse wheel or ${ touchSymbol } pinch to zoom"
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:72 #: src/components/windows/Help.jsx:72
#, javascript-format
msgid "Hold left ${ bindShift } for placing while moving mouse" msgid "Hold left ${ bindShift } for placing while moving mouse"
msgstr "" msgstr ""
@ -666,12 +579,14 @@ msgstr ""
#: src/components/windows/Help.jsx:75 #: src/components/windows/Help.jsx:75
#: src/components/windows/Help.jsx:87 #: src/components/windows/Help.jsx:87
#, javascript-format
msgid "" msgid ""
"Click ${ mouseSymbol } middle mouse button or ${ touchSymbol } long-tap to " "Click ${ mouseSymbol } middle mouse button or ${ touchSymbol } long-tap to "
"select current hovering color" "select current hovering color"
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:81 #: src/components/windows/Help.jsx:81
#, javascript-format
msgid "Press ${ bindE } and ${ bindC } to fly up and down" msgid "Press ${ bindE } and ${ bindC } to fly up and down"
msgstr "" msgstr ""
@ -688,6 +603,7 @@ msgid ""
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:84 #: src/components/windows/Help.jsx:84
#, javascript-format
msgid "${ mouseSymbol } Right click and drag mouse to pan" msgid "${ mouseSymbol } Right click and drag mouse to pan"
msgstr "" msgstr ""
@ -710,9 +626,103 @@ msgid "Credit for the Palette of the Moon goes to ${ starhouseLink }."
msgstr "" msgstr ""
#: src/components/windows/Help.jsx:97 #: src/components/windows/Help.jsx:97
#, javascript-format
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: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:380
#: 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:36 #: src/components/windows/UserArea.jsx:36
#: src/components/windows/UserArea.jsx:56 #: src/components/windows/UserArea.jsx:56
msgid "Profile" msgid "Profile"
@ -826,14 +836,6 @@ msgid ""
"how the canvas was at that time." "how the canvas was at that time."
msgstr "" msgstr ""
#: src/components/windows/ForgotPassword.jsx:58
msgid "Sent you a mail with instructions to reset your password."
msgstr ""
#: src/components/windows/ForgotPassword.jsx:69
msgid "Enter your mail address and we will send you a new password:"
msgstr ""
#: src/components/windows/Chat.jsx:180 #: src/components/windows/Chat.jsx:180
msgid "Start chatting here" msgid "Start chatting here"
msgstr "" msgstr ""
@ -850,6 +852,14 @@ msgstr ""
msgid "Channel settings" msgid "Channel settings"
msgstr "" msgstr ""
#: src/components/windows/ForgotPassword.jsx:58
msgid "Sent you a mail with instructions to reset your password."
msgstr ""
#: src/components/windows/ForgotPassword.jsx:69
msgid "Enter your mail address and we will send you a new password:"
msgstr ""
#: src/components/Captcha.jsx:51 #: src/components/Captcha.jsx:51
#: src/components/Captcha.jsx:105 #: src/components/Captcha.jsx:105
msgid "Could not load captcha" msgid "Could not load captcha"
@ -931,13 +941,6 @@ msgstr ""
msgid "Password must be shorter than 60 characters." msgid "Password must be shorter than 60 characters."
msgstr "" msgstr ""
#: src/components/ChangeMail.jsx:91
#: src/components/ChangeName.jsx:68
#: src/components/ChangePassword.jsx:109
#: src/components/LanguageSelect.jsx:80
msgid "Save"
msgstr ""
#: src/components/GetIID.jsx:44 #: src/components/GetIID.jsx:44
msgid "Get IID" msgid "Get IID"
msgstr "" msgstr ""
@ -946,6 +949,13 @@ msgstr ""
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""
#: src/components/ChangeMail.jsx:91
#: src/components/ChangeName.jsx:68
#: src/components/ChangePassword.jsx:109
#: src/components/LanguageSelect.jsx:80
msgid "Save"
msgstr ""
#: src/components/LogInArea.jsx:19 #: src/components/LogInArea.jsx:19
msgid "Login to access more features and stats." msgid "Login to access more features and stats."
msgstr "" msgstr ""
@ -1020,77 +1030,77 @@ msgstr ""
msgid "Choose Canvas" msgid "Choose Canvas"
msgstr "" msgstr ""
#: src/components/Converter.jsx:216 #: src/components/Converter.jsx:217
msgid "Palette Download" msgid "Palette Download"
msgstr "" msgstr ""
#: src/components/Converter.jsx:218 #: src/components/Converter.jsx:219
#, javascript-format #, javascript-format
msgid "Palette for ${ gimpLink }" msgid "Palette for ${ gimpLink }"
msgstr "" msgstr ""
#: src/components/Converter.jsx:236 #: src/components/Converter.jsx:240
msgid "Image Converter" msgid "Image Converter"
msgstr "" msgstr ""
#: src/components/Converter.jsx:237 #: src/components/Converter.jsx:241
msgid "Convert an image to canvas colors" msgid "Convert an image to canvas colors"
msgstr "" msgstr ""
#: src/components/Converter.jsx:256 #: src/components/Converter.jsx:260
msgid "Choose Strategy" msgid "Choose Strategy"
msgstr "" msgstr ""
#: src/components/Converter.jsx:294 #: src/components/Converter.jsx:298
msgid "Serpentine" msgid "Serpentine"
msgstr "" msgstr ""
#: src/components/Converter.jsx:296 #: src/components/Converter.jsx:300
msgid "Minimum Color Distance" msgid "Minimum Color Distance"
msgstr "" msgstr ""
#: src/components/Converter.jsx:323 #: src/components/Converter.jsx:327
msgid "Calculate like GIMP" msgid "Calculate like GIMP"
msgstr "" msgstr ""
#: src/components/Converter.jsx:327 #: src/components/Converter.jsx:331
msgid "Choose Color Mode" msgid "Choose Color Mode"
msgstr "" msgstr ""
#: src/components/Converter.jsx:356 #: src/components/Converter.jsx:360
msgid "Add Grid (uncheck if you need a 1:1 template)" msgid "Add Grid (uncheck if you need a 1:1 template)"
msgstr "" msgstr ""
#: src/components/Converter.jsx:378 #: src/components/Converter.jsx:382
#: src/components/Converter.jsx:394 #: src/components/Converter.jsx:398
msgid "Offset" msgid "Offset"
msgstr "" msgstr ""
#: src/components/Converter.jsx:423 #: src/components/Converter.jsx:427
msgid "Scale Image" msgid "Scale Image"
msgstr "" msgstr ""
#: src/components/Converter.jsx:434 #: src/components/Converter.jsx:438
msgid "Width" msgid "Width"
msgstr "" msgstr ""
#: src/components/Converter.jsx:465 #: src/components/Converter.jsx:469
msgid "Height" msgid "Height"
msgstr "" msgstr ""
#: src/components/Converter.jsx:504 #: src/components/Converter.jsx:508
msgid "Keep Ratio" msgid "Keep Ratio"
msgstr "" msgstr ""
#: src/components/Converter.jsx:517 #: src/components/Converter.jsx:521
msgid "Anti Aliasing" msgid "Anti Aliasing"
msgstr "" msgstr ""
#: src/components/Converter.jsx:531 #: src/components/Converter.jsx:535
msgid "Reset" msgid "Reset"
msgstr "" msgstr ""
#: src/components/Converter.jsx:549 #: src/components/Converter.jsx:553
msgid "Download Template" msgid "Download Template"
msgstr "" msgstr ""
@ -1189,7 +1199,7 @@ msgstr ""
msgid "Countries by Pixels Today" msgid "Countries by Pixels Today"
msgstr "" msgstr ""
#: src/core/chartSettings.js:352 #: src/core/chartSettings.js:351
msgid "Total Pixels placed per day" msgid "Total Pixels placed per day"
msgstr "" msgstr ""
@ -1215,10 +1225,6 @@ msgstr ""
msgid "Click here to request a new verification mail." msgid "Click here to request a new verification mail."
msgstr "" msgstr ""
#: src/components/ChangeName.jsx:64
msgid "New Username"
msgstr ""
#: src/components/ChangePassword.jsx:21 #: src/components/ChangePassword.jsx:21
msgid "Passwords do not match." msgid "Passwords do not match."
msgstr "" msgstr ""
@ -1239,6 +1245,10 @@ msgstr ""
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: src/components/ChangeName.jsx:64
msgid "New Username"
msgstr ""
#: src/components/ChangeMail.jsx:59 #: src/components/ChangeMail.jsx:59
msgid "" msgid ""
"Changed Mail successfully. We sent you a verification mail, " "Changed Mail successfully. We sent you a verification mail, "
@ -1339,14 +1349,14 @@ msgstr ""
#: src/components/ModCanvastools.jsx:330 #: src/components/ModCanvastools.jsx:330
#: src/components/ModCanvastools.jsx:403 #: src/components/ModCanvastools.jsx:403
#: src/components/ModCanvastools.jsx:486 #: src/components/ModCanvastools.jsx:486
#: src/components/ModWatchtools.jsx:174 #: src/components/ModWatchtools.jsx:176
msgid "Top-left corner" msgid "Top-left corner"
msgstr "" msgstr ""
#: src/components/ModCanvastools.jsx:347 #: src/components/ModCanvastools.jsx:347
#: src/components/ModCanvastools.jsx:420 #: src/components/ModCanvastools.jsx:420
#: src/components/ModCanvastools.jsx:503 #: src/components/ModCanvastools.jsx:503
#: src/components/ModWatchtools.jsx:191 #: src/components/ModWatchtools.jsx:193
msgid "Bottom-right corner" msgid "Bottom-right corner"
msgstr "" msgstr ""
@ -1370,54 +1380,6 @@ msgstr ""
msgid "Stop Cleaner" msgid "Stop Cleaner"
msgstr "" msgstr ""
#: src/components/ModWatchtools.jsx:48
msgid "Interval is invalid"
msgstr ""
#: src/components/ModWatchtools.jsx:122
msgid "Check who placed in an area"
msgstr ""
#: src/components/ModWatchtools.jsx:123
msgid "Canvas"
msgstr ""
#: src/components/ModWatchtools.jsx:142
msgid "Interval"
msgstr ""
#: src/components/ModWatchtools.jsx:157
msgid "IID (optional)"
msgstr ""
#: src/components/ModWatchtools.jsx:236
msgid "Get Pixels"
msgstr ""
#: src/components/ModWatchtools.jsx:267
msgid "Get Users"
msgstr ""
#: src/components/ModIIDtools.jsx:20
msgid "You must enter a duration"
msgstr ""
#: src/components/ModIIDtools.jsx:24
msgid "You must enter an IID"
msgstr ""
#: src/components/ModIIDtools.jsx:53
msgid "IID Actions"
msgstr ""
#: src/components/ModIIDtools.jsx:80
msgid "Enter Reason"
msgstr ""
#: src/components/ModIIDtools.jsx:97
msgid "(0 = infinite)"
msgstr ""
#: src/components/Admintools.jsx:109 #: src/components/Admintools.jsx:109
msgid "IP Actions" msgid "IP Actions"
msgstr "" msgstr ""
@ -1450,8 +1412,52 @@ msgstr ""
msgid "User Name" msgid "User Name"
msgstr "" msgstr ""
#: src/components/contextmenus/ChannelContextMenu.jsx:46 #: src/components/ModWatchtools.jsx:48
msgid "Mute" msgid "Interval is invalid"
msgstr ""
#: src/components/ModWatchtools.jsx:124
msgid "Check who placed in an area"
msgstr ""
#: src/components/ModWatchtools.jsx:125
msgid "Canvas"
msgstr ""
#: src/components/ModWatchtools.jsx:144
msgid "Interval"
msgstr ""
#: src/components/ModWatchtools.jsx:159
msgid "IID (optional)"
msgstr ""
#: src/components/ModWatchtools.jsx:239
msgid "Get Pixels"
msgstr ""
#: src/components/ModWatchtools.jsx:271
msgid "Get Users"
msgstr ""
#: src/components/ModIIDtools.jsx:20
msgid "You must enter a duration"
msgstr ""
#: src/components/ModIIDtools.jsx:24
msgid "You must enter an IID"
msgstr ""
#: src/components/ModIIDtools.jsx:53
msgid "IID Actions"
msgstr ""
#: src/components/ModIIDtools.jsx:80
msgid "Enter Reason"
msgstr ""
#: src/components/ModIIDtools.jsx:97
msgid "(0 = infinite)"
msgstr "" msgstr ""
#: src/components/contextmenus/UserContextMenu.jsx:49 #: src/components/contextmenus/UserContextMenu.jsx:49
@ -1466,6 +1472,10 @@ msgstr ""
msgid "Block" msgid "Block"
msgstr "" msgstr ""
#: src/components/contextmenus/ChannelContextMenu.jsx:46
msgid "Mute"
msgstr ""
#: src/components/windows/Help.jsx:15 #: src/components/windows/Help.jsx:15
#: src/components/windows/Settings.jsx:87 #: src/components/windows/Settings.jsx:87
msgctxt "keybinds" msgctxt "keybinds"
@ -1478,11 +1488,6 @@ 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:158 #: src/components/windows/Settings.jsx:158
msgctxt "keybinds" msgctxt "keybinds"
@ -1532,4 +1537,9 @@ msgstr ""
#: src/components/windows/Help.jsx:32 #: src/components/windows/Help.jsx:32
msgctxt "keybinds" msgctxt "keybinds"
msgid "C" msgid "C"
msgstr "" msgstr ""
#: src/components/windows/Settings.jsx:103
msgctxt "keybinds"
msgid "M"
msgstr ""

7649
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,10 @@
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
"build": "node scripts/build.js", "build": "node scripts/build.js",
"build:dev": "webpack --env extract --config ./webpack.config.server.js && webpack --env extract --env development --config ./webpack.config.client.js && npm run minify-css", "build:server": "webpack --env extract --config ./webpack.config.server.js",
"build:client": "node scripts/build.js --client",
"build:dev": "webpack --config ./webpack.config.server.js && webpack --env development --config ./webpack.config.client.js && npm run minify-css",
"update-browserlist": "browserslist --update-db",
"deploy": "ssh pixelplanet /home/pixelpla/rebuild.sh", "deploy": "ssh pixelplanet /home/pixelpla/rebuild.sh",
"minify-css": "node scripts/minifyCss.js", "minify-css": "node scripts/minifyCss.js",
"babel-node": "babel-node", "babel-node": "babel-node",
@ -23,11 +26,11 @@
"not IE_Mob 11" "not IE_Mob 11"
], ],
"dependencies": { "dependencies": {
"bcrypt": "^5.0.1", "bcrypt": "^5.1.1",
"chart.js": "^3.9.1", "chart.js": "^3.9.1",
"compression": "^1.7.3", "compression": "^1.7.3",
"cookie": "^0.5.0", "cookie": "^0.5.0",
"core-js": "^3.23.4", "core-js": "^3.34.0",
"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",
@ -36,7 +39,7 @@
"morgan": "^1.10.0", "morgan": "^1.10.0",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"mysql2": "^2.3.3", "mysql2": "^2.3.3",
"nodemailer": "^6.7.8", "nodemailer": "^6.9.7",
"passport": "^0.6.0", "passport": "^0.6.0",
"passport-discord": "^0.1.4", "passport-discord": "^0.1.4",
"passport-facebook": "^3.0.0", "passport-facebook": "^3.0.0",
@ -48,56 +51,56 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-chartjs-2": "^4.3.1", "react-chartjs-2": "^4.3.1",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^4.3.1", "react-icons": "^4.12.0",
"react-redux": "^8.0.2", "react-redux": "^8.0.2",
"react-stay-scrolled": "^8.0.0", "react-stay-scrolled": "^8.0.0",
"react-toggle": "^4.1.3", "react-toggle": "^4.1.3",
"redis": "^4.3.1", "redis": "^4.6.11",
"redux": "^4.1.2", "redux": "^4.1.2",
"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",
"sequelize": "^6.21.6", "sequelize": "^6.35.2",
"sharp": "^0.31.0", "sharp": "^0.31.0",
"startaudiocontext": "^1.2.1", "startaudiocontext": "^1.2.1",
"three": "^0.143.0", "three": "^0.143.0",
"three-trackballcontrols": "^0.9.0", "three-trackballcontrols": "^0.9.0",
"ttag": "^1.7.24", "ttag": "^1.8.3",
"url-search-params-polyfill": "^8.1.1", "url-search-params-polyfill": "^8.2.5",
"winston": "^3.8.2", "winston": "^3.11.0",
"winston-daily-rotate-file": "^4.5.5", "winston-daily-rotate-file": "^4.5.5",
"ws": "^8.4.0" "ws": "^8.15.1"
}, },
"devDependencies": { "devDependencies": {
"@babel/cli": "^7.21.0", "@babel/cli": "^7.23.4",
"@babel/core": "^7.21.0", "@babel/core": "^7.23.6",
"@babel/eslint-parser": "^7.19.1", "@babel/eslint-parser": "^7.23.3",
"@babel/node": "^7.20.7", "@babel/node": "^7.22.19",
"@babel/plugin-transform-react-constant-elements": "^7.20.2", "@babel/plugin-transform-react-constant-elements": "^7.23.3",
"@babel/plugin-transform-react-inline-elements": "^7.21.0", "@babel/plugin-transform-react-inline-elements": "^7.23.3",
"@babel/preset-env": "^7.20.2", "@babel/preset-env": "^7.23.6",
"@babel/preset-react": "^7.18.6", "@babel/preset-react": "^7.23.3",
"babel-loader": "^8.2.3", "babel-loader": "^9.1.3",
"babel-plugin-transform-react-pure-class-to-function": "^1.0.1", "babel-plugin-transform-react-pure-class-to-function": "^1.0.1",
"babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babel-plugin-transform-react-remove-prop-types": "^0.4.24",
"babel-plugin-ttag": "^1.8.5", "babel-plugin-ttag": "^1.8.5",
"clean-css": "^5.2.2", "clean-css": "^5.2.2",
"clean-css-loader": "^4.1.1", "clean-css-loader": "^4.2.1",
"copy-webpack-plugin": "^11.0.0", "copy-webpack-plugin": "^11.0.0",
"css-loader": "^6.5.1", "css-loader": "^6.8.1",
"eslint": "^8.36.0", "eslint": "^8.55.0",
"eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-base": "^15.0.0", "eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-import": "^2.29.0",
"eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-react": "^7.32.2", "eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-hooks": "^4.6.0",
"generate-package-json-webpack-plugin": "^2.6.0", "generate-package-json-webpack-plugin": "^2.6.0",
"ttag-cli": "^1.9.3", "ttag-cli": "^1.10.9",
"ttag-po-loader": "0.0.2", "ttag-po-loader": "0.0.2",
"webpack": "^5.67.0", "webpack": "^5.89.0",
"webpack-bundle-analyzer": "^4.5.0", "webpack-bundle-analyzer": "^4.10.1",
"webpack-cli": "^4.9.2", "webpack-cli": "^5.1.4",
"webpack-node-externals": "^3.0.0" "webpack-node-externals": "^3.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {

View File

@ -5,6 +5,7 @@
const path = require('path'); const path = require('path');
const fs = require('fs'); const fs = require('fs');
const { spawn } = require('node:child_process');
const webpack = require('webpack'); const webpack = require('webpack');
const minifyCss = require('./minifyCss'); const minifyCss = require('./minifyCss');
@ -13,17 +14,41 @@ const clientConfig = require('../webpack.config.client.js');
const { getAllAvailableLocals } = clientConfig; const { getAllAvailableLocals } = clientConfig;
let langs = 'all'; let langs = 'all';
let doBuildServer = false;
let doBuildClient = false;
let parallel = false;
let recursion = false;
for (let i = 0; i < process.argv.length; i += 1) { for (let i = 0; i < process.argv.length; i += 1) {
if (process.argv[i] == '--langs') { switch (process.argv[i]) {
const newLangs = process.argv[++i]; case '--langs': {
if (newLangs) langs = newLangs; const newLangs = process.argv[++i];
break; if (newLangs) langs = newLangs;
break;
}
case '--client':
doBuildClient = true;
break;
case `--server`:
doBuildServer = true;
break;
case '--parallel':
parallel = true;
break;
case '--recursion':
recursion = true;
break;
default:
// nothing
} }
} }
if (!doBuildServer && !doBuildClient) {
doBuildServer = true;
doBuildClient = true;
}
function compile(webpackConfig) { function compile(webpackConfig) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
webpack(webpackConfig).run((err, stats) => { webpack(webpackConfig, (err, stats) => {
if (err) { if (err) {
return reject(err); return reject(err);
} }
@ -34,10 +59,90 @@ function compile(webpackConfig) {
}); });
} }
function buildServer() {
console.log('-----------------------------');
console.log(`Build server...`);
console.log('-----------------------------');
const ts = Date.now();
return new Promise((resolve, reject) => {
const serverCompile = spawn('npm', ['run', 'build:server']);
serverCompile.stdout.on('data', (data) => {
console.log(data.toString());
});
serverCompile.stderr.on('data', (data) => {
console.error(data.toString());
});
serverCompile.on('close', (code) => {
if (code) {
reject(new Error('Server compilation failed!'));
} else {
console.log('---------------------------------------');
console.log(`Server Compilation finished in ${Math.floor((Date.now() - ts) / 1000)}s`);
console.log('---------------------------------------');
resolve();
}
});
});
}
function buildClients(slangs) {
return new Promise((resolve, reject) => {
const clientCompile = spawn('npm', ['run', 'build', '--', '--client', '--recursion', '--langs', slangs.join(',')]);
clientCompile.stdout.on('data', (data) => {
console.log(data.toString());
});
clientCompile.stderr.on('data', (data) => {
console.error(data.toString());
});
clientCompile.on('close', (code) => {
if (code) {
reject(new Error('Client compilation failed!'));
} else {
resolve();
}
});
});
}
async function buildClientsSync(avlangs) {
for(let i = 0; i < avlangs.length; i += 1) {
const lang = avlangs[i];
console.log(`Build client for locale ${lang}...`);
await compile(clientConfig({
development: false,
analyze: false,
extract: false,
locale: lang,
clean: false,
readonly: recursion,
}));
}
}
function buildClientsParallel(avlangs) {
const st = Date.now();
const numProc = 3;
let nump = Math.floor(avlangs.length / numProc);
if (!nump) nump = 1;
const promises = [];
while (avlangs.length >= nump) {
const slangs = avlangs.splice(0, nump);
promises.push(buildClients(slangs));
}
if (avlangs.length) {
promises.push(buildClientsSync(avlangs));
}
return Promise.all(promises);
}
async function buildProduction() { async function buildProduction() {
const st = Date.now();
// cleanup old files // cleanup old files
fs.rmSync(path.resolve(__dirname, '..', 'node_modules', '.cache', 'webpack'), { recursive: true, force: true }); if (!recursion) {
// fs.rmSync(path.resolve(__dirname, '..', 'dist', 'public', 'assets'), { recursive: true, force: true }); fs.rmSync(path.resolve(__dirname, '..', 'node_modules', '.cache', 'webpack'), { recursive: true, force: true });
}
// decide which languages to build // decide which languages to build
let avlangs = getAllAvailableLocals(); let avlangs = getAllAvailableLocals();
@ -52,31 +157,41 @@ async function buildProduction() {
} }
console.log('Building locales:', avlangs); console.log('Building locales:', avlangs);
// server files const promises = [];
console.log('-----------------------------');
console.log(`Build server...`);
console.log('-----------------------------');
await compile(serverConfig({
development: false,
extract: false,
}));
// client files if (doBuildServer) {
const st = Date.now(); promises.push(buildServer());
for(let i = 0; i < avlangs.length; i += 1) { }
const lang = avlangs[i];
console.log(`Build client for locale ${lang}...`); if (!recursion) {
console.log('-----------------------------'); console.log(
await compile(clientConfig({ 'Building one package seperately to populate cache and extract langs...',
development: false, );
analyze: false, await compile(clientConfig({
extract: false, development: false,
locale: lang, analyze: false,
clean: (i === 0), extract: true,
})); locale: avlangs.shift(),
clean: true,
readonly: false,
}));
}
if (doBuildClient) {
if (parallel) {
promises.push(buildClientsParallel(avlangs));
} else {
promises.push(buildClientsSync(avlangs));
}
}
await Promise.all(promises);
if (!recursion) {
await minifyCss();
console.log(`Finished building in ${(Date.now() - st) / 1000}s`);
} else {
console.log(`Worker done in ${(Date.now() - st) / 1000}s`);
} }
console.log(`Finished building in ${(Date.now() - st) / 1000}s`);
await minifyCss();
} }
buildProduction(); buildProduction();

View File

@ -13,13 +13,14 @@ const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
*/ */
process.chdir(__dirname); process.chdir(__dirname);
function buildWebpackClientConfig( module.exports = ({
development, development,
analyze, analyze,
locale, locale = 'en',
extract, extract,
clean, clean = true,
) { readonly,
}) => {
const ttag = { const ttag = {
resolve: { resolve: {
translations: (locale !== 'en') translations: (locale !== 'en')
@ -43,7 +44,7 @@ function buildWebpackClientConfig(
target: 'web', target: 'web',
mode: (development) ? 'development' : 'production', mode: (development) ? 'development' : 'production',
devtool: (development) ? 'inline-source-map' : false, devtool: (development) ? 'source-map' : false,
entry: { entry: {
client: client:
@ -176,8 +177,9 @@ function buildWebpackClientConfig(
}, },
cache: { cache: {
type: 'filesystem', type: 'filesystem',
}, readonly,
},
}; };
} }
@ -190,42 +192,4 @@ function getAllAvailableLocals() {
return langs; return langs;
} }
/*
* return array of webpack configuartions for all languages
*/
function buildWebpackClientConfigAllLangs() {
const langs = getAllAvailableLocals();
const webpackConfigClient = [];
for (let l = 0; l < langs.length; l += 1) {
const lang = langs[l];
const cfg = buildWebpackClientConfig(false, false, lang, false, false);
webpackConfigClient.push(cfg);
}
return webpackConfigClient;
}
/*
* Per default get configuration of all packages
* If any argument is given, it will only get one
* ('default' aka english if locale is unset)
*
* @param development If development mode
* @param extract if translatable strings get in i18n templates should
* get updated
* @param locale language get single configuration of specific locale
* @param analyze launch BundleAnalyzerPlugin after build
* @return webpack configuration
*/
module.exports = ({
development, analyze, extract, locale, clean,
}) => {
if (extract || analyze || locale || development || clean) {
return buildWebpackClientConfig(
development, analyze, locale || 'en', extract, clean,
);
}
return buildWebpackClientConfig(false, false, 'en', false, true);
};
module.exports.buildWebpackClientConfig = buildWebpackClientConfig;
module.exports.getAllAvailableLocals = getAllAvailableLocals; module.exports.getAllAvailableLocals = getAllAvailableLocals;