change webpack config variables from arguments to env

This commit is contained in:
HF 2021-02-01 20:16:01 +01:00
parent 14762e302b
commit c45a7bab7f
9 changed files with 1218 additions and 875 deletions

View File

@ -255,6 +255,10 @@ Run `npm run lint:src` to check for code errors and warnings or `npm run lint --
Please do not produce too many additional warnings.
[ttag](https://github.com/ttag-org/ttag/) is used for handling translations. For server-side rendering the `Accept-Language` header gets checked and the first locale used and on-the-fly translated (`src/core/ttag.js` provides the functions for it). On the client-side a seperate bundle for every language gets provided.
To update the language definitions in `i18n/template.pot` and `i18n/template-ssr.pot` run
```
npm run extract
```
You can use `npm run babel-node ./your/script.js` to execute a script with local babel.

View File

@ -3,7 +3,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"Project-Id-Version: \n"
"PO-Revision-Date: 2021-01-31 11:31+0100\n"
"PO-Revision-Date: 2021-02-01 20:15+0100\n"
"Last-Translator: \n"
"Language-Team: Dzongkha\n"
"Language: dz\n"
@ -134,42 +134,41 @@ msgstr "གཟུགས་ཀྱི་ཡན་ལག ཁར་ཁིར།"
msgid "Pixels placed"
msgstr "གློག་རིག་ཡོངས་འབྲེལ། སྐུ་དང་མཆོད་རྟེན་གྱི་སྲོག་ཤིང༌།"
#: src/components/CanvasSelectModal.jsx:67
#: src/components/CanvasSwitchButton.jsx:20
#: src/components/CanvasSelectModal.jsx:67 src/components/CanvasSwitchButton.jsx:20
msgid "Canvas Selection"
msgstr ""
msgstr "རྒྱ་ལས་ཐོན་པའི་ཁ་ཤ་དར་རས། ཟོགཔོ་ཕར་བསལ་ནི།"
#: src/components/DownloadButton.jsx:37
msgid "Make Screenshot"
msgstr ""
msgstr "གསར་གཏོད་འབད་མི། གསལ་གཞི། ཀྲོབ་མདའི་མདེའུ། "
#: src/components/LogInButton.jsx:20 src/components/UserAreaModal.jsx:160
msgid "User Area"
msgstr ""
msgstr "རྩེདམོ་རྩེ་མི། ལུང་ཕྱོགས། "
#: src/components/SettingsButton.jsx:20 src/components/SettingsModal.jsx:267
msgid "Settings"
msgstr ""
msgstr "ཟོགཔོ་ཕར་བསལ་ནི།"
#: src/components/HelpButton.jsx:20
msgid "Help"
msgstr ""
msgstr "གྲོགས་རམ།"
#: src/components/Chat.jsx:143
msgid "Channel settings"
msgstr ""
msgstr "ཕྱོགས་གཅིག་ཤུགས་བཏོན། ཟོགཔོ་ཕར་བསལ་ནི།"
#: src/components/Chat.jsx:152
msgid "maximize"
msgstr ""
msgstr "ཡོངས་སྤྱོད།"
#: src/components/Chat.jsx:168
msgid "Start chatting here"
msgstr ""
msgstr "གོ་སྐབས། ངག་གཤིས། ཚུར། "
#: src/components/Chat.jsx:200
msgid "Chat here"
msgstr ""
msgstr "ངག་གཤིས། ཚུར།"
#: src/components/Chat.jsx:220
msgid "You must be logged in to chat"
@ -177,58 +176,59 @@ msgstr ""
#: src/components/PalselButton.jsx:25
msgid "Close Palette"
msgstr ""
msgstr "ཁེ་བཙོང༌། རྩྭ་གདན། "
#: src/components/PalselButton.jsx:25
msgid "Open Palette"
msgstr ""
msgstr "ཀུན་མཐོང་མཛད་རིམ། རྩྭ་གདན"
#: src/components/GlobeButton.jsx:31
msgid "Globe View"
msgstr ""
msgstr "ཐད་རིལ་རི། གཟུགས་སྣང༌། "
#: src/components/UserContextMenu.jsx:72
msgid "Ping"
msgstr ""
msgstr "གསལ་བསྒྲགས་འབད་བ།"
#: src/components/UserContextMenu.jsx:97
msgid "DM"
msgstr ""
msgstr "གང་ཟག་གི་མིང་ཚབ། ཁ་འཐེན། "
#: src/components/UserContextMenu.jsx:107
msgid "Block"
msgstr ""
msgstr "ཁང་སྡེ། "
#: src/components/HelpModal.jsx:34 src/components/HelpModal.jsx:35
msgid "Privacy Policy"
msgstr ""
msgstr "རང་གསང༌། ཉེན་ལེན་གན་ཡིག "
#: src/components/HelpModal.jsx:36 src/components/HelpModal.jsx:37
msgid "Terms of Service"
msgstr ""
msgstr "གནས་ཡུན་དང་ཆ་རྐྱེན། "
#: src/components/HelpModal.jsx:40
msgid "your IP"
msgstr ""
msgstr "ཁྱོད་ར། གློག་རིག་ཡོངས་འབྲེལ། ཁ་གསལ་སྦེ་བྲི་ནི།"
#: src/components/HelpModal.jsx:46
msgid "Place color pixels on a large canvas with other players online!"
msgstr ""
"གནས་གཟུང་བ། ཚིག་དོན་ཁ་གསལ་ཡོད་པ། གྲུ་བཞི། གཅིག ཁྱབ་ཆེ་ཏོག་ཏོ། རྒྱ་ལས་ཐོན་པའི་ཁ་ཤ་དར་རས། གཅིག་ཁར་ཟེར་བའི་དོན། "
"རྩེདམོ་རྩེ་མི།"
#: src/components/HelpModal.jsx:47
msgid ""
"Our main canvas is a huge worldmap, you can place wherever you like, but you "
"will have to wait a specific Cooldown between pixels. You can check out the "
"cooldown and requiremnts on the Canvas Selection menu (globe button on top). "
"Some canvases have a different cooldown for replacing a user-set pixels than "
"placing on a unset pixel. i.e. 4s/7s means 4s on fresh pixels and 7s on "
"already set pixels."
"Our main canvas is a huge worldmap, you can place wherever you like, but you will have to "
"wait a specific Cooldown between pixels. You can check out the cooldown and requiremnts on "
"the Canvas Selection menu (globe button on top). Some canvases have a different cooldown "
"for replacing a user-set pixels than placing on a unset pixel. i.e. 4s/7s means 4s on "
"fresh pixels and 7s on already set pixels."
msgstr ""
#: src/components/HelpModal.jsx:51
msgid ""
"Higher zoomlevels take some time to update, the 3D globe gets updated at "
"least once per day."
"Higher zoomlevels take some time to update, the 3D globe gets updated at least once per "
"day."
msgstr ""
#: src/components/HelpModal.jsx:52
@ -249,8 +249,8 @@ msgstr ""
#: src/components/HelpModal.jsx:57
msgid ""
"The bare map data that we use, together with converted OpenStreetMap tiles "
"for orientation, can be downloaded from mega.nz here: "
"The bare map data that we use, together with converted OpenStreetMap tiles for "
"orientation, can be downloaded from mega.nz here: "
msgstr ""
#: src/components/HelpModal.jsx:59
@ -260,9 +260,9 @@ msgstr ""
#: src/components/HelpModal.jsx:61
#, javascript-format
msgid ""
"If you got detected as proxy, but you are none, please go to our "
"${ guildedLink } or send us an e-mail with ${ getIPLink } to ${ mailLink }. "
"Do not post your IP anywhere else. We are sorry for the inconvenience."
"If you got detected as proxy, but you are none, please go to our ${ guildedLink } or send "
"us an e-mail with ${ getIPLink } to ${ mailLink }. Do not post your IP anywhere else. We "
"are sorry for the inconvenience."
msgstr ""
#: src/components/HelpModal.jsx:63 src/components/HelpModal.jsx:80
@ -303,8 +303,7 @@ msgstr ""
#: src/components/HelpModal.jsx:72 src/components/HelpModal.jsx:83
#, javascript-format
msgid ""
"Press ${ bindAUp }, ${ bindALeft }, ${ bindADown }, ${ bindARight } to move"
msgid "Press ${ bindAUp }, ${ bindALeft }, ${ bindADown }, ${ bindARight } to move"
msgstr ""
#: src/components/HelpModal.jsx:73
@ -322,9 +321,7 @@ msgstr ""
#: src/components/HelpModal.jsx:76
#, javascript-format
msgid ""
"Hold right ${ bindShift } for placing while moving mouse according to "
"historical view"
msgid "Hold right ${ bindShift } for placing while moving mouse according to historical view"
msgstr ""
#: src/components/HelpModal.jsx:77 src/components/HelpModal.jsx:88
@ -334,8 +331,8 @@ msgstr ""
#: src/components/HelpModal.jsx:78 src/components/HelpModal.jsx:90
msgid ""
"Click ${ mouseSymbol } middle mouse button or ${ touchSymbol } long-tap to "
"select current hovering color"
"Click ${ mouseSymbol } middle mouse button or ${ touchSymbol } long-tap to select current "
"hovering color"
msgstr ""
#: src/components/HelpModal.jsx:84
@ -350,8 +347,8 @@ msgstr ""
#: src/components/HelpModal.jsx:86
#, javascript-format
msgid ""
"${ mouseSymbol } Scroll mouse wheel or hold ${ mouseSymbol } middle mouse "
"button and drag to zoom"
"${ mouseSymbol } Scroll mouse wheel or hold ${ mouseSymbol } middle mouse button and drag "
"to zoom"
msgstr ""
#: src/components/HelpModal.jsx:87
@ -360,8 +357,7 @@ msgstr ""
#: src/components/HelpModal.jsx:89
#, javascript-format
msgid ""
"${ mouseSymbol } Right click or ${ touchSymbol } double-tap to remove a pixel"
msgid "${ mouseSymbol } Right click or ${ touchSymbol } double-tap to remove a pixel"
msgstr ""
#: src/components/HelpModal.jsx:92
@ -371,14 +367,13 @@ msgstr ""
#: src/components/HelpModal.jsx:97
#, javascript-format
msgid ""
"This site is protected by reCAPTCHA and the Google ${ reCaptchaPP } and "
"${ reCaptchaTOS } apply."
"This site is protected by reCAPTCHA and the Google ${ reCaptchaPP } and ${ reCaptchaTOS } "
"apply."
msgstr ""
#: src/components/HelpModal.jsx:103
msgid ""
"This site is protected by hCAPTCHA and its ${ hCaptchaPP } and "
"${ hCaptchaTOS } apply."
"This site is protected by hCAPTCHA and its ${ hCaptchaPP } and ${ hCaptchaTOS } apply."
msgstr ""
#: src/components/HelpModal.jsx:113
@ -426,9 +421,7 @@ msgid "Auto Zoom In"
msgstr ""
#: src/components/SettingsModal.jsx:153
msgid ""
"Zoom in instead of placing a pixel when you tap the canvas and your zoom is "
"small."
msgid "Zoom in instead of placing a pixel when you tap the canvas and your zoom is small."
msgstr ""
#: src/components/SettingsModal.jsx:158
@ -475,8 +468,8 @@ msgstr ""
msgid "Register new account here"
msgstr ""
#: src/components/ForgotPasswordModal.jsx:20
#: src/components/RegisterModal.jsx:21 src/components/UserAreaModal.jsx:130
#: src/components/ForgotPasswordModal.jsx:20 src/components/RegisterModal.jsx:21
#: src/components/UserAreaModal.jsx:130
msgid "Consider joining us on Guilded:"
msgstr ""
@ -534,16 +527,16 @@ msgstr ""
#: src/components/ArchiveModal.jsx:20
msgid ""
"While we tend to not delete canvases, some canvases are started for fun or "
"as a request by users who currently like a meme. Those canvases can get "
"boring after a while and after weeks of no major change and if they really "
"aren't worth being kept active, we decide to remove them."
"While we tend to not delete canvases, some canvases are started for fun or as a request by "
"users who currently like a meme. Those canvases can get boring after a while and after "
"weeks of no major change and if they really aren't worth being kept active, we decide "
"to remove them."
msgstr ""
#: src/components/ArchiveModal.jsx:22
msgid ""
"Here we collect those canvases to archive them in a proper way (which is "
"currently just one)."
"Here we collect those canvases to archive them in a proper way (which is currently just "
"one)."
msgstr ""
#: src/components/ArchiveModal.jsx:24
@ -552,17 +545,17 @@ msgstr ""
#: src/components/ArchiveModal.jsx:31
msgid ""
"This canvas got requested during a time of political conflicts on the main "
"Earth canvas. It was a 1024x1024 representation of the political compass "
"with a 5s coolodwn and 60s stacking. It got launched on May 11th and "
"remained active for months till it got shut down on November 30th."
"This canvas got requested during a time of political conflicts on the main Earth canvas. "
"It was a 1024x1024 representation of the political compass with a 5s coolodwn and 60s "
"stacking. It got launched on May 11th and remained active for months till it got shut down "
"on November 30th."
msgstr ""
#: src/components/ArchiveModal.jsx:32
msgid ""
"We decided to archive it as a timelapse with lossless encoded webm. Taking a "
"screenshot from the timelapse results in a perfect 1:1 representation of how "
"the canvas was at that time."
"We decided to archive it as a timelapse with lossless encoded webm. Taking a screenshot "
"from the timelapse results in a perfect 1:1 representation of how the canvas was at that "
"time."
msgstr ""
#: src/components/ArchiveModal.jsx:50
@ -571,9 +564,8 @@ msgstr ""
#: src/components/CanvasSelectModal.jsx:29
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:"
"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/CanvasSelectModal.jsx:37
@ -761,8 +753,8 @@ msgstr ""
#: src/components/Admintools.jsx:313
msgid ""
"Set protection of areas (if you need finer grained control, "
"use protect with image upload and alpha layers)"
"Set protection of areas (if you need finer grained control, use protect "
"with image upload and alpha layers)"
msgstr ""
#: src/components/Admintools.jsx:392
@ -945,8 +937,8 @@ msgstr ""
#: src/components/ChangeMail.jsx:89
msgid ""
"Changed Mail successfully. We sent you a verification mail, "
"please verify your new mail adress."
"Changed Mail successfully. We sent you a verification mail, please verify "
"your new mail adress."
msgstr ""
#: src/components/ChangeMail.jsx:119

View File

@ -422,7 +422,7 @@ msgid ""
"This site is protected by hCAPTCHA and its ${ hCaptchaPP } and "
"${ hCaptchaTOS } apply."
msgstr ""
"Ce site est protégé par hCAPTCHA et son ${ hCaptchaPP } et ${ hCaptcha TOS } "
"Ce site est protégé par hCAPTCHA et son ${ hCaptchaPP } et ${ hCaptchaTOS } "
"s'appliquent."
#: src/components/HelpModal.jsx:113

File diff suppressed because it is too large Load Diff

View File

@ -1,677 +0,0 @@
"Copied!"
"Error :("
"Didn't get an answer from pixelplanet. Maybe try to refresh?"
"OK"
"Invalid Canvas"
"This canvas doesn't exist"
"Invalid Coordinates"
"x out of bounds"
"y out of bounds"
"z out of bounds"
"Wrong Color"
"Invalid color selected"
"Just for registered Users"
"You have to be logged in to place on this canvas"
"Place more :)"
"You can not access this canvas yet. You need to place more pixels"
"Pixel protected!"
"No Proxies Allowed :("
"You are using a Proxy."
"Weird"
"Couldn't set Pixel"
"Error ${ retCode }"
"Close"
"Close Menu"
"Open Menu"
"Close Chat"
"Open Chat"
"Copy to Clipboard"
"User online"
"Pixels placed"
"Canvas Selection"
"Make Screenshot"
"User Area"
"Settings"
"Help"
"Channel settings"
"maximize"
"Start chatting here"
"Chat here"
"You must be logged in to chat"
"Close Palette"
"Open Palette"
"Globe View"
"Ping"
"DM"
"Block"
"Privacy Policy"
"Terms of Service"
"your IP"
"Place color pixels on a large canvas with other players online!"
""
"Our main canvas is a huge worldmap, you can place wherever you like, but "
"you will have to wait a specific Cooldown between pixels. You can check out "
"the cooldown and requiremnts on the Canvas Selection menu (globe button on "
"top). Some canvases have a different cooldown for replacing a user-set "
"pixels than placing on a unset pixel. i.e. 4s/7s means 4s on fresh pixels "
"and 7s on already set pixels."
""
"Higher zoomlevels take some time to update, the 3D globe gets updated at "
"least once per day."
"Have fun!"
"recommended"
"Source on "
"Map Data"
""
"The bare map data that we use, together with converted OpenStreetMap tiles "
"for orientation, can be downloaded from mega.nz here: "
"Detected as Proxy?"
""
"If you got detected as proxy, but you are none, please go to our ${ "
"guildedLink } or send us an e-mail with ${ getIPLink } to ${ mailLink }. Do "
"not post your IP anywhere else. We are sorry for the inconvenience."
"Controls"
"Click a color in palette to select it"
"Press ${ bindG } to toggle grid"
"Press ${ bindX } to toggle showing of pixel activity"
"Press ${ bindH } to toggle historical view"
"Press ${ bindR } to copy coordinates"
"Press ${ bindQ } or ${ bindE } to zoom"
"Press ${ bindW }, ${ bindA }, ${ bindS }, ${ bindD } to move"
"Press ${ bindAUp }, ${ bindALeft }, ${ bindADown }, ${ bindARight } to move"
"Drag ${ mouseSymbol } mouse or ${ touchSymbol } pan to move"
"Scroll ${ mouseSymbol } mouse wheel or ${ touchSymbol } pinch to zoom"
"Hold left ${ bindShift } for placing while moving mouse"
""
"Hold right ${ bindShift } for placing while moving mouse according to "
"historical view"
"${ mouseSymbol } Left click or ${ touchSymbol } tap to place a pixel"
""
"Click ${ mouseSymbol } middle mouse button or ${ touchSymbol } long-tap to "
"select current hovering color"
"Press ${ bindE } and ${ bindC } to fly up and down"
"${ mouseSymbol } Hold left mouse button and drag mouse to rotate"
""
"${ mouseSymbol } Scroll mouse wheel or hold ${ mouseSymbol } middle mouse "
"button and drag to zoom"
"${ mouseSymbol } Right click and drag mouse to pan"
""
"${ mouseSymbol } Right click or ${ touchSymbol } double-tap to remove a "
"pixel"
"Partners:"
""
"This site is protected by reCAPTCHA and the Google ${ reCaptchaPP } and ${ "
"reCaptchaTOS } apply."
""
"This site is protected by hCAPTCHA and its ${ hCaptchaPP } and ${ "
"hCaptchaTOS } apply."
"Welcome to PixelPlanet.fun"
"Mute"
"Show Grid"
"Turn on grid to highlight pixel borders."
"Show Pixel Activity"
"Show circles where pixels are placed."
"Disable Game Sounds"
"All sound effects will be disabled."
"Enable chat notifications"
"Play a sound when new chat messages arrive"
"Auto Zoom In"
""
"Zoom in instead of placing a pixel when you tap the canvas and your zoom is "
"small."
"Compact Palette"
"Display Palette in a compact form that takes less screen space."
"Potato Mode"
"For when you are playing on a potato."
"Light Grid"
"Show Grid in white instead of black."
"Historical View"
"Check out past versions of the canvas."
"Themes"
"How pixelplanet should look like."
"Register new account here"
"Consider joining us on Guilded:"
"Register New Account"
"Login to access more features and stats."
"Login with Name or Mail:"
"I forgot my Password."
"or login with:"
"or register here:"
"Register"
"Profile"
"Ranking"
"Converter"
"Admintools"
"Modtools"
"Loading..."
""
"While we tend to not delete canvases, some canvases are started for fun or "
"as a request by users who currently like a meme. Those canvases can get "
"boring after a while and after weeks of no major change and if they really "
"aren't worth being kept active, we decide to remove them."
""
"Here we collect those canvases to archive them in a proper way (which is "
"currently just one)."
"Political Compass Canvas"
""
"This canvas got requested during a time of political conflicts on the main "
"Earth canvas. It was a 1024x1024 representation of the political compass "
"with a 5s coolodwn and 60s stacking. It got launched on May 11th and "
"remained active for months till it got shut down on November 30th."
""
"We decided to archive it as a timelapse with lossless encoded webm. Taking "
"a screenshot from the timelapse results in a perfect 1:1 representation of "
"how the canvas was at that time."
"Canvas Archive"
""
"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:"
"Archive"
"Enter your mail adress and we will send you a new password:"
"Restore my Password"
"Chat"
"Error"
"Name or Email"
"Password"
"LogIn"
"Todays Placed Pixels"
"Daily Rank"
"Placed Pixels"
"Total Rank"
"Your name is: ${ name }"
"Log out"
"Change Username"
"Change Mail"
"Change Password"
"Delete Account"
"Social Settings"
"Total"
"Daily"
"Ranking updates every 5 min. Daily rankings get reset at midnight UTC."
"Cooldown"
"Stacking till"
"Ranked"
"Requirements"
"User Account"
"and ${ canvas.req } Pixels set"
"Dimensions"
"Sent you a mail with instructions to reset your password."
"Email"
"Submit"
"Cancel"
"Name"
"Confirm Password"
"Build image on canvas."
"Build image and set it to protected."
"Build image, but reset cooldown to unset-pixel cd."
"Image Upload"
"Upload images to canvas"
"File"
"Coordinates in X_Y format:"
"Pixel Protection"
""
"Set protection of areas (if you need finer grained control, "
"use protect with image upload and alpha layers)"
"Rollback to Date"
"Rollback an area of the canvas to a set date (00:00 UTC)"
"IP Actions"
"Do stuff with IPs (one IP per line)"
"Manage Moderators"
"Remove Moderator"
"There are no mods"
"Assign new Mod"
"Enter UserName of new Mod"
"User Name"
"Choose Canvas"
"Palette Download"
"Palette for ${ gimpLink }"
"Credit for the Palette of the Moon goes to ${ starhouseLink }."
"Image Converter"
"Convert an image to canvas colors"
"Choose Strategy"
"Choose Color Mode"
"Add Grid (uncheck if you need a 1:1 template)"
"Offset"
"Scale Image"
"Width"
"Height"
"Keep Ratio"
"Anti Aliasing"
"Reset"
"Download Template"
"Email can't be empty."
"Email should be at least 5 characters long."
"Email can't be longer than 40 characters."
"Email should at least contain a dot"
"Email should contain a @"
"Name can't be empty."
"Name must be at least 4 characters long"
"Name must be shorter than 26 characters"
"Name contains invalid character like @, /, \\ or #"
"No password given."
"Password must be at least 6 characters long."
"Password must be shorter than 60 characters."
"Could not connect to server, please try again later :("
"I think we experienced some error :("
"Block all Private Messages"
"Unblock Users"
"You have no users blocked"
""
"Changed Mail successfully. We sent you a verification mail, "
"please verify your new mail adress."
"New Mail"
"Save"
"Passwords do not match."
"Changed Password successfully."
"Old Password"
"New Password"
"Confirm New Password"
"Yes, Delete My Account!"
"A new verification mail is getting sent to you."
"You successfully linked your mc account."
"You denied."
""
"Please verify your mail address \n"
"or your account could get deleted after a few days."
"Click here to request a new verification mail."
"You requested to link your mc account ${ minecraftname }."
"Accept"
"Deny"
"New Username"
"Place color pixels on an map styled canvas with other players online"
"Double click on globe to go back."
"Loading..."
"PixelPlanet.Fun 3DGlobe"
"A 3D globe of our whole map"
"You sent an empty password or invalid data :("
"This password-reset link isn't valid anymore :("
"Your passwords do not match :("
"User doesn't exist in our database :("
"Passowrd successfully changed."
"Invalid url :( Please check your mail again."
"This passwort reset link is wrong or already expired, please request a new "
"one (Note: you can use those links just once)"
""
"We already sent you a verification mail, you can request another one in ${ "
"minLeft } minutes."
"Welcome ${ name } to PixelPlanet, plese verify your mail"
"Hello ${ name }"
""
"welcome to our little community of pixelplacers, to use your account, you "
"have to verify your mail. You can do that here: "
"Click to Verify"
"Or by copying following url:"
"Have fun and don't hesitate to contact us if you encouter any problems :)"
"Thanks"
""
"We already sent you a mail with instructions. Please wait before requesting "
"another mail."
"Couldn't find this mail in our database"
"You forgot your password for PixelPlanet? Get a new one here"
"Hello"
""
"You requested to get a new password. You can change your password within "
"the next 30min here: "
"Reset Password"
""
"If you did not request this mail, please just ignore it (the ip that "
"requested this mail was ${ ip })."
"Click here"
"to go back to pixelplanet"
"Hello ${ name }, you can set your new password here:"
"New Password"
"Confirm New Password"
"Submit"
"PixelPlanet.fun Password Reset"
"Reset your password here"
"Email can't be empty."
"Email should be at least 5 characters long."
"Email can't be longer than 40 characters."
"Email should at least contain a dot"
"Email should contain a @"
"Name can't be empty."
"Name must be at least 4 characters long"
"Name must be shorter than 26 characters"
"Name contains invalid character like @, /, \\ or #"
"No password given."
"Password must be at least 6 characters long."
"Password must be shorter than 60 characters."
"Could not connect to server, please try again later :("
"I think we experienced some error :("
"You are not authenticated."
"Incorrect password!"
"You are not even logged in."
"Mail verification"
"You are now verified :)"
""
"Your mail verification code is invalid or already expired :(, please "
"request a new one."
"E-Mail already in use."
"Username already in use."
"Failed to create new user :("
"Failed to establish session after register :("
"You will be automatically redirected after 15s"
"Or ${ clickHere } to go back to pixelplanet"
"PixelPlanet.fun Accounts"
"Earth"
"Moon"
"3D Canvas"
"Coronavirus"
"PixelZone"
"PixelCanvas"
"1bit"
"Our main canvas, a huge map of the world. Place everywhere you like"
"Moon canvas. Safe space for art. No flags or large text (unless part of art)"
"Place Voxels on a 3D canvas with others"
"Special canvas to spread awareness of SARS-CoV2"
"Mirror of PixelZone"
"Mirror of PixelCanvas"
"Black and White canvas"

View File

@ -12,6 +12,7 @@
"build": "babel-node scripts/run prebuild && npm run webpack",
"clean": "babel-node scripts/run clean",
"webpack": "webpack --config ./webpack.config.web.babel.js && parallel-webpack --config ./webpack.config.client.babel.js",
"extract": "webpack --env extract --config ./webpack.config.web.babel.js && webpack --env extract --config ./webpack.config.client.babel.js",
"babel-node": "cd $INIT_CWD && babel-node",
"lint": "cd $INIT_CWD && eslint --ext .jsx --ext .js",
"lint:src": "eslint --ext .jsx --ext .js src",

View File

@ -87,8 +87,6 @@ export const CHAT_CHANNELS = [
name: 'en',
}, {
name: 'int',
}, {
name: 'pol',
}, {
name: 'art',
},

View File

@ -21,7 +21,12 @@ const assetPlugin = new AssetsPlugin({
});
export function buildWebpackClientConfig(development, analyze, locale) {
export function buildWebpackClientConfig(
development,
analyze,
locale,
extract,
) {
const ttag = {
resolve: {
translations: (locale !== 'default')
@ -30,10 +35,10 @@ export function buildWebpackClientConfig(development, analyze, locale) {
},
};
if (locale === 'default') {
if (extract) {
ttag.extract = {
output: path.resolve(__dirname, 'i18n', 'template.pot'),
}
};
}
const babelPlugins = [
@ -117,7 +122,7 @@ export function buildWebpackClientConfig(development, analyze, locale) {
path.resolve(__dirname, 'src'),
],
options: {
cacheDirectory: true,
cacheDirectory: !extract,
babelrc: false,
presets: [
['@babel/preset-env', {
@ -199,7 +204,10 @@ export function buildWebpackClientConfig(development, analyze, locale) {
},
/*
* this does not much tbqh
* maybe some day in the future it might be
* better than babel-loader cacheDirectory,
* but right now it isn't
*
cache: {
type: 'filesystem',
cacheDirectory: path.resolve(
@ -218,7 +226,7 @@ export function buildWebpackClientConfig(development, analyze, locale) {
*/
function buildWebpackClientConfigAllLangs(development, analyze) {
let webpackConfigClient = [
buildWebpackClientConfig(development, analyze, 'default'),
buildWebpackClientConfig(development, analyze, 'default', false),
];
/*
* get available translations
@ -234,7 +242,13 @@ function buildWebpackClientConfigAllLangs(development, analyze) {
return webpackConfigClient;
}
export default buildWebpackClientConfigAllLangs(
process.argv.includes('--debug'),
process.argv.includes('--analyse') || process.argv.includes('--analyze'),
);
export default ({
debug, analyze, extract, locale,
}) => {
if (extract || locale) {
return buildWebpackClientConfig(
debug, analyze, locale || 'default', extract,
);
}
return buildWebpackClientConfigAllLangs(debug, analyze);
};

View File

@ -2,7 +2,6 @@
*/
import path from 'path';
import fs from 'fs';
import webpack from 'webpack';
import nodeExternals from 'webpack-node-externals';
import GeneratePackageJsonPlugin from 'generate-package-json-webpack-plugin';
@ -10,18 +9,6 @@ import GeneratePackageJsonPlugin from 'generate-package-json-webpack-plugin';
import patch from './scripts/patch';
import pkg from './package.json';
const isDebug = process.argv.includes('--debug');
/*
* check which ssr translations are available
* Maybe we will use thi later to auto-populat src/core/ttag.js
*
const langDir = path.resolve(__dirname, 'i18n');
const langs = fs.readdirSync(langDir)
.filter((e) => (e.endsWith('.po') && e.startsWith('ssr')));
fs.writeFileSync(path.resolve(langDir, 'ssr-list.json'), JSON.stringify(langs));
*/
patch();
const basePackageValues = {
@ -37,6 +24,8 @@ const basePackageValues = {
},
};
const ttag = {};
const babelPlugins = [
'@babel/transform-flow-strip-types',
['@babel/plugin-proposal-decorators', { legacy: true }],
@ -51,116 +40,122 @@ const babelPlugins = [
'@babel/transform-react-inline-elements',
'transform-react-remove-prop-types',
'transform-react-pure-class-to-function',
['ttag', {
extract: {
output: path.resolve(__dirname, 'i18n', 'template-ssr.pot'),
},
discover: ['t', 'jt'],
}],
['ttag', ttag],
];
export default {
name: 'web',
target: 'node',
export default ({
debug, extract,
}) => {
if (extract) {
ttag.extract = {
output: path.resolve(__dirname, 'i18n', 'template-ssr.pot'),
};
ttag.discover = ['t', 'jt'];
}
context: __dirname,
mode: (isDebug) ? 'development' : 'production',
return {
name: 'web',
target: 'node',
entry: {
web: [path.resolve(__dirname, 'src', 'web.js')],
backup: [path.resolve(__dirname, 'src', 'backup.js')],
},
context: __dirname,
mode: (debug) ? 'development' : 'production',
output: {
path: path.resolve(__dirname, 'build'),
libraryTarget: 'commonjs2',
},
entry: {
web: [path.resolve(__dirname, 'src', 'web.js')],
backup: [path.resolve(__dirname, 'src', 'backup.js')],
},
resolve: {
extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'],
},
output: {
path: path.resolve(__dirname, 'build'),
libraryTarget: 'commonjs2',
},
module: {
rules: [
{
test: /\.(js|jsx|ts|tsx)$/,
loader: 'babel-loader',
include: [
path.resolve(__dirname, 'src'),
],
options: {
cacheDirectory: isDebug,
resolve: {
extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'],
},
babelrc: false,
presets: [
['@babel/preset-env', {
targets: {
node: pkg.engines.node.replace(/^\D+/g, ''),
},
modules: false,
useBuiltIns: false,
debug: false,
}],
'@babel/typescript',
'@babel/react',
module: {
rules: [
{
test: /\.(js|jsx|ts|tsx)$/,
loader: 'babel-loader',
include: [
path.resolve(__dirname, 'src'),
],
plugins: babelPlugins,
},
},
{
test: /\.css/,
use: [
{
loader: 'css-loader',
options: {
importLoaders: 1,
sourceMap: false,
modules: false,
},
options: {
cacheDirectory: false,
babelrc: false,
presets: [
['@babel/preset-env', {
targets: {
node: pkg.engines.node.replace(/^\D+/g, ''),
},
modules: false,
useBuiltIns: false,
debug: false,
}],
'@babel/typescript',
'@babel/react',
],
plugins: babelPlugins,
},
],
},
{
test: [/\.po$/],
loader: 'ttag-po-loader',
},
],
},
externals: [
/\/proxies\.json$/,
/\/canvases\.json$/,
/^\.\/styleassets\.json$/,
/^\.\/assets\.json$/,
nodeExternals(),
],
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': isDebug ? '"development"' : '"production"',
'process.env.BROWSER': false,
}),
// create package.json for deployment
new GeneratePackageJsonPlugin(basePackageValues, {
sourcePackageFilenames: [
path.resolve(__dirname, 'package.json'),
},
{
test: /\.css/,
use: [
{
loader: 'css-loader',
options: {
importLoaders: 1,
sourceMap: false,
modules: false,
},
},
],
},
{
test: [/\.po$/],
loader: 'ttag-po-loader',
},
],
}),
],
},
stats: {
colors: true,
reasons: false,
hash: false,
version: false,
timings: true,
chunkModules: false,
},
externals: [
/\/proxies\.json$/,
/\/canvases\.json$/,
/^\.\/styleassets\.json$/,
/^\.\/assets\.json$/,
nodeExternals(),
],
node: {
global: false,
__filename: false,
__dirname: false,
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': debug ? '"development"' : '"production"',
'process.env.BROWSER': false,
}),
// create package.json for deployment
new GeneratePackageJsonPlugin(basePackageValues, {
sourcePackageFilenames: [
path.resolve(__dirname, 'package.json'),
],
}),
],
stats: {
colors: true,
reasons: false,
hash: false,
version: false,
timings: true,
chunkModules: false,
},
node: {
global: false,
__filename: false,
__dirname: false,
},
};
};