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 ""
#: src/core/ChatProvider.js:450
#, javascript-format
msgid "You are muted for another ${ ttl } seconds"
msgstr ""
@ -81,35 +82,35 @@ msgstr ""
msgid "Invalid url :( Please check your mail again."
msgstr ""
#: src/ssr/Globe.jsx:32
#: src/ssr/Globe.jsx:37
msgid "PixelPlanet.Fun 3DGlobe"
msgstr ""
#: src/ssr/Globe.jsx:33
#: src/ssr/Globe.jsx:38
msgid "A 3D globe of our whole map"
msgstr ""
#: src/ssr/Globe.jsx:46
#: src/ssr/Globe.jsx:51
msgid "Double click on globe to go back."
msgstr ""
#: src/ssr/Globe.jsx:47
#: src/ssr/Globe.jsx:52
msgid "Loading..."
msgstr ""
#: src/ssr/PopUp.jsx:58
#: src/ssr/PopUp.jsx:62
msgid "ppfun"
msgstr ""
#: src/ssr/PopUp.jsx:59
#: src/ssr/PopUp.jsx:63
msgid "PixelPlanet.Fun PopUp"
msgstr ""
#: src/ssr/Main.jsx:67
#: src/ssr/Main.jsx:71
msgid "PixelPlanet.Fun"
msgstr ""
#: src/ssr/Main.jsx:68
#: src/ssr/Main.jsx:72
msgid "Place color pixels on an map styled canvas with other players online"
msgstr ""
@ -219,31 +220,7 @@ msgstr ""
msgid "You are not banned"
msgstr ""
#: src/routes/api/auth/logout.js:11
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/change_mail.js:22
#: src/routes/api/auth/register.js:24
msgid "This email provider is not allowed"
msgstr ""
@ -280,18 +257,50 @@ msgstr ""
msgid "Failed to establish session after register :("
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/delete_account.js:35
#: src/routes/api/auth/delete_account.js:36
msgid "You are not authenticated."
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/delete_account.js:45
#: src/routes/api/auth/delete_account.js:55
msgid "Incorrect password!"
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
msgid "PixelPlanet.fun Accounts"
msgstr ""
@ -337,48 +346,59 @@ msgstr ""
msgid "Top10"
msgstr ""
#: src/canvasesDesc.js:29
msgid "Our main canvas, a huge map of the world. Place everywhere you like"
#: src/canvasesDesc.js:27
msgid "Thoia"
msgstr ""
#: src/canvasesDesc.js:30
msgid "Our main canvas, a huge map of the world. Place everywhere you like"
msgstr ""
#: src/canvasesDesc.js:31
msgid ""
"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."
msgstr ""
#: src/canvasesDesc.js:31
#: src/canvasesDesc.js:32
msgid "Place Voxels on a 3D canvas with others"
msgstr ""
#: src/canvasesDesc.js:32
#: src/canvasesDesc.js:33
msgid "Special canvas to spread awareness of SARS-CoV2"
msgstr ""
#: src/canvasesDesc.js:33
#: src/canvasesDesc.js:34
msgid "Mirror of PixelZone"
msgstr ""
#: src/canvasesDesc.js:34
#: src/canvasesDesc.js:35
msgid "Mirror of PixelCanvas"
msgstr ""
#: src/canvasesDesc.js:35
#: src/canvasesDesc.js:36
msgid "Black and White canvas"
msgstr ""
#: src/canvasesDesc.js:36
#: src/canvasesDesc.js:37
msgid ""
"A canvas for the most active players from the the previous day. Daily "
"ranking updates at 00:00 UTC."
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
#, javascript-format
msgid "Welcome ${ name } to PixelPlanet, please verify your mail"
msgstr ""
#: src/core/MailProvider.js:67
#, javascript-format
msgid "Hello ${ name }"
msgstr ""
@ -446,4 +466,4 @@ msgstr ""
#: src/core/MailProvider.js:130
msgid "Couldn't find this mail in our database"
msgstr ""
msgstr ""

View File

@ -194,6 +194,7 @@ msgid "try again after ${ ti }min"
msgstr ""
#: src/store/actions/fetch.js:70
#, javascript-format
msgid "Connection error ${ code } :("
msgstr ""
@ -230,12 +231,6 @@ msgstr ""
msgid "You have new messages in chat"
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
msgid "Online Users on Canvas"
msgstr ""
@ -248,6 +243,13 @@ msgstr ""
msgid "Pixels placed"
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/windows/index.js:19
msgid "Canvas Selection"
@ -279,7 +281,7 @@ msgstr ""
#: src/components/Admintools.jsx:103
#: src/components/ModCanvastools.jsx:222
#: src/components/ModWatchtools.jsx:118
#: src/components/ModWatchtools.jsx:120
#: src/components/Window.jsx:157
#: src/components/Window.jsx:260
#: src/components/contextmenus/ChannelContextMenu.jsx:59
@ -310,6 +312,26 @@ msgstr ""
msgid "Resize"
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
msgid "Globe View"
msgstr ""
@ -322,26 +344,6 @@ msgstr ""
msgid "Open Palette"
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
msgid "Registration"
msgstr ""
@ -447,99 +449,6 @@ msgstr ""
msgid "Why?"
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
msgid "Place color pixels on a large canvas with other players online!"
msgstr ""
@ -609,6 +518,7 @@ msgid "Press ${ bindG } to toggle grid"
msgstr ""
#: src/components/windows/Help.jsx:64
#, javascript-format
msgid "Press ${ bindX } to toggle showing of pixel activity"
msgstr ""
@ -618,6 +528,7 @@ msgid "Press ${ bindH } to toggle historical view"
msgstr ""
#: src/components/windows/Help.jsx:66
#, javascript-format
msgid "Press ${ bindR } to copy coordinates"
msgstr ""
@ -639,6 +550,7 @@ msgid "Press ${ bindAUp }, ${ bindALeft }, ${ bindADown }, ${ bindARight } to mo
msgstr ""
#: src/components/windows/Help.jsx:70
#, javascript-format
msgid "Drag ${ mouseSymbol } mouse or ${ touchSymbol } pan to move"
msgstr ""
@ -648,6 +560,7 @@ msgid "Scroll ${ mouseSymbol } mouse wheel or ${ touchSymbol } pinch to zoom"
msgstr ""
#: src/components/windows/Help.jsx:72
#, javascript-format
msgid "Hold left ${ bindShift } for placing while moving mouse"
msgstr ""
@ -666,12 +579,14 @@ msgstr ""
#: src/components/windows/Help.jsx:75
#: src/components/windows/Help.jsx:87
#, javascript-format
msgid ""
"Click ${ mouseSymbol } middle mouse button or ${ touchSymbol } long-tap to "
"select current hovering color"
msgstr ""
#: src/components/windows/Help.jsx:81
#, javascript-format
msgid "Press ${ bindE } and ${ bindC } to fly up and down"
msgstr ""
@ -688,6 +603,7 @@ msgid ""
msgstr ""
#: src/components/windows/Help.jsx:84
#, javascript-format
msgid "${ mouseSymbol } Right click and drag mouse to pan"
msgstr ""
@ -710,9 +626,103 @@ msgid "Credit for the Palette of the Moon goes to ${ starhouseLink }."
msgstr ""
#: src/components/windows/Help.jsx:97
#, javascript-format
msgid "Credit for the Palette of the Top10 canvas goes to ${ vinikLink }."
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:56
msgid "Profile"
@ -826,14 +836,6 @@ msgid ""
"how the canvas was at that time."
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
msgid "Start chatting here"
msgstr ""
@ -850,6 +852,14 @@ msgstr ""
msgid "Channel settings"
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:105
msgid "Could not load captcha"
@ -931,13 +941,6 @@ msgstr ""
msgid "Password must be shorter than 60 characters."
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
msgid "Get IID"
msgstr ""
@ -946,6 +949,13 @@ msgstr ""
msgid "Copy"
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
msgid "Login to access more features and stats."
msgstr ""
@ -1020,77 +1030,77 @@ msgstr ""
msgid "Choose Canvas"
msgstr ""
#: src/components/Converter.jsx:216
#: src/components/Converter.jsx:217
msgid "Palette Download"
msgstr ""
#: src/components/Converter.jsx:218
#: src/components/Converter.jsx:219
#, javascript-format
msgid "Palette for ${ gimpLink }"
msgstr ""
#: src/components/Converter.jsx:236
#: src/components/Converter.jsx:240
msgid "Image Converter"
msgstr ""
#: src/components/Converter.jsx:237
#: src/components/Converter.jsx:241
msgid "Convert an image to canvas colors"
msgstr ""
#: src/components/Converter.jsx:256
#: src/components/Converter.jsx:260
msgid "Choose Strategy"
msgstr ""
#: src/components/Converter.jsx:294
#: src/components/Converter.jsx:298
msgid "Serpentine"
msgstr ""
#: src/components/Converter.jsx:296
#: src/components/Converter.jsx:300
msgid "Minimum Color Distance"
msgstr ""
#: src/components/Converter.jsx:323
#: src/components/Converter.jsx:327
msgid "Calculate like GIMP"
msgstr ""
#: src/components/Converter.jsx:327
#: src/components/Converter.jsx:331
msgid "Choose Color Mode"
msgstr ""
#: src/components/Converter.jsx:356
#: src/components/Converter.jsx:360
msgid "Add Grid (uncheck if you need a 1:1 template)"
msgstr ""
#: src/components/Converter.jsx:378
#: src/components/Converter.jsx:394
#: src/components/Converter.jsx:382
#: src/components/Converter.jsx:398
msgid "Offset"
msgstr ""
#: src/components/Converter.jsx:423
#: src/components/Converter.jsx:427
msgid "Scale Image"
msgstr ""
#: src/components/Converter.jsx:434
#: src/components/Converter.jsx:438
msgid "Width"
msgstr ""
#: src/components/Converter.jsx:465
#: src/components/Converter.jsx:469
msgid "Height"
msgstr ""
#: src/components/Converter.jsx:504
#: src/components/Converter.jsx:508
msgid "Keep Ratio"
msgstr ""
#: src/components/Converter.jsx:517
#: src/components/Converter.jsx:521
msgid "Anti Aliasing"
msgstr ""
#: src/components/Converter.jsx:531
#: src/components/Converter.jsx:535
msgid "Reset"
msgstr ""
#: src/components/Converter.jsx:549
#: src/components/Converter.jsx:553
msgid "Download Template"
msgstr ""
@ -1189,7 +1199,7 @@ msgstr ""
msgid "Countries by Pixels Today"
msgstr ""
#: src/core/chartSettings.js:352
#: src/core/chartSettings.js:351
msgid "Total Pixels placed per day"
msgstr ""
@ -1215,10 +1225,6 @@ msgstr ""
msgid "Click here to request a new verification mail."
msgstr ""
#: src/components/ChangeName.jsx:64
msgid "New Username"
msgstr ""
#: src/components/ChangePassword.jsx:21
msgid "Passwords do not match."
msgstr ""
@ -1239,6 +1245,10 @@ msgstr ""
msgid "Confirm New Password"
msgstr ""
#: src/components/ChangeName.jsx:64
msgid "New Username"
msgstr ""
#: src/components/ChangeMail.jsx:59
msgid ""
"Changed Mail successfully. We sent you a verification mail, "
@ -1339,14 +1349,14 @@ msgstr ""
#: src/components/ModCanvastools.jsx:330
#: src/components/ModCanvastools.jsx:403
#: src/components/ModCanvastools.jsx:486
#: src/components/ModWatchtools.jsx:174
#: src/components/ModWatchtools.jsx:176
msgid "Top-left corner"
msgstr ""
#: src/components/ModCanvastools.jsx:347
#: src/components/ModCanvastools.jsx:420
#: src/components/ModCanvastools.jsx:503
#: src/components/ModWatchtools.jsx:191
#: src/components/ModWatchtools.jsx:193
msgid "Bottom-right corner"
msgstr ""
@ -1370,54 +1380,6 @@ msgstr ""
msgid "Stop Cleaner"
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
msgid "IP Actions"
msgstr ""
@ -1450,8 +1412,52 @@ msgstr ""
msgid "User Name"
msgstr ""
#: src/components/contextmenus/ChannelContextMenu.jsx:46
msgid "Mute"
#: src/components/ModWatchtools.jsx:48
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 ""
#: src/components/contextmenus/UserContextMenu.jsx:49
@ -1466,6 +1472,10 @@ msgstr ""
msgid "Block"
msgstr ""
#: src/components/contextmenus/ChannelContextMenu.jsx:46
msgid "Mute"
msgstr ""
#: src/components/windows/Help.jsx:15
#: src/components/windows/Settings.jsx:87
msgctxt "keybinds"
@ -1478,11 +1488,6 @@ msgctxt "keybinds"
msgid "X"
msgstr ""
#: src/components/windows/Settings.jsx:103
msgctxt "keybinds"
msgid "M"
msgstr ""
#: src/components/windows/Help.jsx:17
#: src/components/windows/Settings.jsx:158
msgctxt "keybinds"
@ -1532,4 +1537,9 @@ msgstr ""
#: src/components/windows/Help.jsx:32
msgctxt "keybinds"
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",
"scripts": {
"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",
"minify-css": "node scripts/minifyCss.js",
"babel-node": "babel-node",
@ -23,11 +26,11 @@
"not IE_Mob 11"
],
"dependencies": {
"bcrypt": "^5.0.1",
"bcrypt": "^5.1.1",
"chart.js": "^3.9.1",
"compression": "^1.7.3",
"cookie": "^0.5.0",
"core-js": "^3.23.4",
"core-js": "^3.34.0",
"etag": "^1.8.1",
"express": "^4.17.2",
"express-session": "^1.17.2",
@ -36,7 +39,7 @@
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.1",
"mysql2": "^2.3.3",
"nodemailer": "^6.7.8",
"nodemailer": "^6.9.7",
"passport": "^0.6.0",
"passport-discord": "^0.1.4",
"passport-facebook": "^3.0.0",
@ -48,56 +51,56 @@
"react": "^18.2.0",
"react-chartjs-2": "^4.3.1",
"react-dom": "^18.2.0",
"react-icons": "^4.3.1",
"react-icons": "^4.12.0",
"react-redux": "^8.0.2",
"react-stay-scrolled": "^8.0.0",
"react-toggle": "^4.1.3",
"redis": "^4.3.1",
"redis": "^4.6.11",
"redux": "^4.1.2",
"redux-persist": "^6.0.0",
"redux-thunk": "^2.4.1",
"reselect": "^4.1.6",
"sequelize": "^6.21.6",
"sequelize": "^6.35.2",
"sharp": "^0.31.0",
"startaudiocontext": "^1.2.1",
"three": "^0.143.0",
"three-trackballcontrols": "^0.9.0",
"ttag": "^1.7.24",
"url-search-params-polyfill": "^8.1.1",
"winston": "^3.8.2",
"ttag": "^1.8.3",
"url-search-params-polyfill": "^8.2.5",
"winston": "^3.11.0",
"winston-daily-rotate-file": "^4.5.5",
"ws": "^8.4.0"
"ws": "^8.15.1"
},
"devDependencies": {
"@babel/cli": "^7.21.0",
"@babel/core": "^7.21.0",
"@babel/eslint-parser": "^7.19.1",
"@babel/node": "^7.20.7",
"@babel/plugin-transform-react-constant-elements": "^7.20.2",
"@babel/plugin-transform-react-inline-elements": "^7.21.0",
"@babel/preset-env": "^7.20.2",
"@babel/preset-react": "^7.18.6",
"babel-loader": "^8.2.3",
"@babel/cli": "^7.23.4",
"@babel/core": "^7.23.6",
"@babel/eslint-parser": "^7.23.3",
"@babel/node": "^7.22.19",
"@babel/plugin-transform-react-constant-elements": "^7.23.3",
"@babel/plugin-transform-react-inline-elements": "^7.23.3",
"@babel/preset-env": "^7.23.6",
"@babel/preset-react": "^7.23.3",
"babel-loader": "^9.1.3",
"babel-plugin-transform-react-pure-class-to-function": "^1.0.1",
"babel-plugin-transform-react-remove-prop-types": "^0.4.24",
"babel-plugin-ttag": "^1.8.5",
"clean-css": "^5.2.2",
"clean-css-loader": "^4.1.1",
"clean-css-loader": "^4.2.1",
"copy-webpack-plugin": "^11.0.0",
"css-loader": "^6.5.1",
"eslint": "^8.36.0",
"css-loader": "^6.8.1",
"eslint": "^8.55.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.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",
"webpack": "^5.67.0",
"webpack-bundle-analyzer": "^4.5.0",
"webpack-cli": "^4.9.2",
"webpack": "^5.89.0",
"webpack-bundle-analyzer": "^4.10.1",
"webpack-cli": "^5.1.4",
"webpack-node-externals": "^3.0.0"
},
"optionalDependencies": {

View File

@ -5,6 +5,7 @@
const path = require('path');
const fs = require('fs');
const { spawn } = require('node:child_process');
const webpack = require('webpack');
const minifyCss = require('./minifyCss');
@ -13,17 +14,41 @@ const clientConfig = require('../webpack.config.client.js');
const { getAllAvailableLocals } = clientConfig;
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) {
if (process.argv[i] == '--langs') {
const newLangs = process.argv[++i];
if (newLangs) langs = newLangs;
break;
switch (process.argv[i]) {
case '--langs': {
const newLangs = process.argv[++i];
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) {
return new Promise((resolve, reject) => {
webpack(webpackConfig).run((err, stats) => {
webpack(webpackConfig, (err, stats) => {
if (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() {
const st = Date.now();
// cleanup old files
fs.rmSync(path.resolve(__dirname, '..', 'node_modules', '.cache', 'webpack'), { recursive: true, force: true });
// fs.rmSync(path.resolve(__dirname, '..', 'dist', 'public', 'assets'), { recursive: true, force: true });
if (!recursion) {
fs.rmSync(path.resolve(__dirname, '..', 'node_modules', '.cache', 'webpack'), { recursive: true, force: true });
}
// decide which languages to build
let avlangs = getAllAvailableLocals();
@ -52,31 +157,41 @@ async function buildProduction() {
}
console.log('Building locales:', avlangs);
// server files
console.log('-----------------------------');
console.log(`Build server...`);
console.log('-----------------------------');
await compile(serverConfig({
development: false,
extract: false,
}));
const promises = [];
// client files
const st = Date.now();
for(let i = 0; i < avlangs.length; i += 1) {
const lang = avlangs[i];
console.log(`Build client for locale ${lang}...`);
console.log('-----------------------------');
await compile(clientConfig({
development: false,
analyze: false,
extract: false,
locale: lang,
clean: (i === 0),
}));
if (doBuildServer) {
promises.push(buildServer());
}
if (!recursion) {
console.log(
'Building one package seperately to populate cache and extract langs...',
);
await compile(clientConfig({
development: false,
analyze: false,
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();

View File

@ -13,13 +13,14 @@ const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
*/
process.chdir(__dirname);
function buildWebpackClientConfig(
module.exports = ({
development,
analyze,
locale,
locale = 'en',
extract,
clean,
) {
clean = true,
readonly,
}) => {
const ttag = {
resolve: {
translations: (locale !== 'en')
@ -43,7 +44,7 @@ function buildWebpackClientConfig(
target: 'web',
mode: (development) ? 'development' : 'production',
devtool: (development) ? 'inline-source-map' : false,
devtool: (development) ? 'source-map' : false,
entry: {
client:
@ -176,8 +177,9 @@ function buildWebpackClientConfig(
},
cache: {
type: 'filesystem',
},
type: 'filesystem',
readonly,
},
};
}
@ -190,42 +192,4 @@ function getAllAvailableLocals() {
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;