From 1cdd9ba5cca0bb1c24ab3a9fa097f943865114f9 Mon Sep 17 00:00:00 2001 From: HF Date: Fri, 5 Jan 2024 00:48:29 +0100 Subject: [PATCH] finalize retiring canvases --- i18n/template-ssr.pot | 134 +++++----- i18n/template.pot | 317 ++++++++++++------------ src/components/Converter.jsx | 2 +- src/components/windows/Archive.jsx | 95 +++---- src/components/windows/CanvasSelect.jsx | 25 +- src/store/middleware/rendererHook.js | 14 ++ src/store/reducers/canvas.js | 136 ++++++---- 7 files changed, 377 insertions(+), 346 deletions(-) diff --git a/i18n/template-ssr.pot b/i18n/template-ssr.pot index c0a5c5b..38d36b6 100644 --- a/i18n/template-ssr.pot +++ b/i18n/template-ssr.pot @@ -98,14 +98,6 @@ msgstr "" msgid "Loading..." msgstr "" -#: src/ssr/Main.jsx:55 -msgid "PixelPlanet.Fun" -msgstr "" - -#: src/ssr/Main.jsx:56 -msgid "Place color pixels on an map styled canvas with other players online" -msgstr "" - #: src/ssr/PopUp.jsx:47 msgid "ppfun" msgstr "" @@ -114,6 +106,14 @@ msgstr "" msgid "PixelPlanet.Fun PopUp" msgstr "" +#: src/ssr/Main.jsx:55 +msgid "PixelPlanet.Fun" +msgstr "" + +#: src/ssr/Main.jsx:56 +msgid "Place color pixels on an map styled canvas with other players online" +msgstr "" + #: src/utils/validation.js:17 msgid "Email can't be empty." msgstr "" @@ -204,10 +204,6 @@ msgstr "" msgid "Submit" msgstr "" -#: src/routes/api/baninfo.js:32 -msgid "You are not banned" -msgstr "" - #: src/routes/api/modtools.js:53 msgid "You are not logged in" msgstr "" @@ -220,44 +216,8 @@ msgstr "" msgid "Just admins can do that" 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/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:44 -#: src/routes/api/auth/change_passwd.js:34 -#: src/routes/api/auth/delete_account.js:36 -msgid "You are not authenticated." -msgstr "" - -#: src/routes/api/auth/change_mail.js:53 -#: src/routes/api/auth/change_passwd.js:43 -#: 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." +#: src/routes/api/baninfo.js:32 +msgid "You are not banned" msgstr "" #: src/routes/api/auth/change_mail.js:22 @@ -265,23 +225,6 @@ msgstr "" msgid "This email provider is not allowed" 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 "" - -#: src/ssr/RedirectionPage.jsx:29 -msgid "You will be automatically redirected after 15s" -msgstr "" - -#: src/ssr/RedirectionPage.jsx:30 -#, javascript-format -msgid "Or ${ clickHere } to go back to pixelplanet" -msgstr "" - #: src/routes/api/auth/register.js:31 msgid "No Captcha given" msgstr "" @@ -314,6 +257,50 @@ msgstr "" msgid "Failed to establish session after register :(" 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/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:36 +msgid "You are not authenticated." +msgstr "" + +#: src/routes/api/auth/change_mail.js:53 +#: src/routes/api/auth/change_passwd.js:43 +#: 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/canvasesDesc.js:20 msgid "Earth" msgstr "" @@ -392,6 +379,19 @@ msgid "" "old world and all it entails." msgstr "" +#: src/ssr/RedirectionPage.jsx:19 +msgid "PixelPlanet.fun Accounts" +msgstr "" + +#: src/ssr/RedirectionPage.jsx:29 +msgid "You will be automatically redirected after 15s" +msgstr "" + +#: src/ssr/RedirectionPage.jsx:30 +#, javascript-format +msgid "Or ${ clickHere } to go back to pixelplanet" +msgstr "" + #: src/core/MailProvider.js:66 #, javascript-format msgid "Welcome ${ name } to PixelPlanet, please verify your mail" diff --git a/i18n/template.pot b/i18n/template.pot index 6bca8fa..6fa8a92 100644 --- a/i18n/template.pot +++ b/i18n/template.pot @@ -46,14 +46,6 @@ msgstr "" msgid "Hide Hidden Canvases" msgstr "" -#: src/ui/rendererFactory.js:30 -msgid "Canvas Error" -msgstr "" - -#: src/ui/rendererFactory.js:31 -msgid "Can't render 3D canvas, do you have WebGL2 disabled?" -msgstr "" - #: src/ui/PixelTransferController.js:70 msgid "Error :(" msgstr "" @@ -179,6 +171,14 @@ msgstr "" msgid "Error ${ retCode }" msgstr "" +#: src/ui/rendererFactory.js:30 +msgid "Canvas Error" +msgstr "" + +#: src/ui/rendererFactory.js:31 +msgid "Can't render 3D canvas, do you have WebGL2 disabled?" +msgstr "" + #: src/components/BanInfo.jsx:136 #: src/store/actions/index.js:7 msgid "OK" @@ -250,6 +250,14 @@ msgstr "" msgid "Pixels placed" msgstr "" +#: src/components/buttons/ChatButton.jsx:88 +msgid "Close Chat" +msgstr "" + +#: src/components/buttons/ChatButton.jsx:88 +msgid "Open Chat" +msgstr "" + #: src/components/buttons/CanvasSwitchButton.jsx:20 #: src/components/windows/index.js:19 msgid "Canvas Selection" @@ -263,14 +271,6 @@ msgstr "" msgid "Open Menu" msgstr "" -#: src/components/buttons/ChatButton.jsx:88 -msgid "Close Chat" -msgstr "" - -#: src/components/buttons/ChatButton.jsx:88 -msgid "Open Chat" -msgstr "" - #: src/components/HistorySelect.jsx:146 msgid "Loading" msgstr "" @@ -449,54 +449,6 @@ msgstr "" msgid "Why?" msgstr "" -#: src/components/windows/CanvasSelect.jsx:29 -msgid "" -"Select the canvas you want to use.\n" -"Every canvas is unique and has different palettes, cooldown and " -"requirements.\n" -"Archive of closed canvases can be accessed here:" -msgstr "" - -#: src/components/windows/CanvasSelect.jsx:37 -msgid "Archive" -msgstr "" - -#: src/components/windows/Archive.jsx:29 -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. And Some other canvases might outlive their " -"welcome and become useless." -msgstr "" - -#: src/components/windows/Archive.jsx:30 -msgid "Here we collect removed canvases to archive them in a proper way." -msgstr "" - -#: src/components/windows/Archive.jsx:35 -msgid "Removed Canvases with history available" -msgstr "" - -#: src/components/windows/Archive.jsx:53 -msgid "Political Compass Canvas" -msgstr "" - -#: src/components/windows/Archive.jsx:60 -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 cooldown 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/windows/Archive.jsx:61 -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." -msgstr "" - #: src/components/windows/Help.jsx:42 msgid "Place color pixels on a large canvas with other players online!" msgstr "" @@ -840,6 +792,55 @@ msgstr "" msgid "Submit" msgstr "" +#: src/components/windows/CanvasSelect.jsx:29 +msgid "" +"Select the canvas you want to use.\n" +"Every canvas is unique and has different palettes, cooldown and " +"requirements.\n" +"Archive of removed canvases can be accessed here:" +msgstr "" + +#: src/components/windows/CanvasSelect.jsx:37 +msgid "Archive" +msgstr "" + +#: src/components/windows/CanvasSelect.jsx:59 +msgid "Retired Canvases (history only)" +msgstr "" + +#: src/components/windows/Archive.jsx:16 +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." +msgstr "" + +#: src/components/windows/Archive.jsx:17 +msgid "" +"Here we collect removed canvases to archive them in a proper way. Which is " +"currently only one." +msgstr "" + +#: src/components/windows/Archive.jsx:19 +msgid "Political Compass Canvas" +msgstr "" + +#: src/components/windows/Archive.jsx:26 +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 cooldown 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/windows/Archive.jsx:27 +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." +msgstr "" + #: src/components/windows/Chat.jsx:180 msgid "Start chatting here" msgstr "" @@ -953,6 +954,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 "" @@ -977,58 +985,6 @@ msgstr "" msgid "Register" msgstr "" -#: src/components/CanvasItem.jsx:29 -msgid "Online Users" -msgstr "" - -#: src/components/CanvasItem.jsx:34 -msgid "Cooldown" -msgstr "" - -#: src/components/CanvasItem.jsx:40 -msgid "Stacking till" -msgstr "" - -#: src/components/CanvasItem.jsx:42 -msgid "Ranked" -msgstr "" - -#: src/components/CanvasItem.jsx:44 -msgid "Yes" -msgstr "" - -#: src/components/CanvasItem.jsx:44 -msgid "No" -msgstr "" - -#: src/components/CanvasItem.jsx:50 -msgid "Requirements" -msgstr "" - -#: src/components/CanvasItem.jsx:53 -msgid "User Account" -msgstr "" - -#: src/components/CanvasItem.jsx:55 -#, javascript-format -msgid "and ${ canvas.req } Pixels set" -msgstr "" - -#: src/components/CanvasItem.jsx:58 -msgid "Top 10 Daily Ranking" -msgstr "" - -#: src/components/CanvasItem.jsx:64 -msgid "Dimensions" -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/UserAreaContent.jsx:62 msgid "Today Placed Pixels" msgstr "" @@ -1187,6 +1143,79 @@ msgstr "" msgid "Ranking updates every 5 min. Daily rankings get reset at midnight UTC." msgstr "" +#: src/components/CanvasItem.jsx:29 +msgid "Online Users" +msgstr "" + +#: src/components/CanvasItem.jsx:34 +msgid "Cooldown" +msgstr "" + +#: src/components/CanvasItem.jsx:40 +msgid "Stacking till" +msgstr "" + +#: src/components/CanvasItem.jsx:42 +msgid "Ranked" +msgstr "" + +#: src/components/CanvasItem.jsx:44 +msgid "Yes" +msgstr "" + +#: src/components/CanvasItem.jsx:44 +msgid "No" +msgstr "" + +#: src/components/CanvasItem.jsx:50 +msgid "Requirements" +msgstr "" + +#: src/components/CanvasItem.jsx:53 +msgid "User Account" +msgstr "" + +#: src/components/CanvasItem.jsx:55 +#, javascript-format +msgid "and ${ canvas.req } Pixels set" +msgstr "" + +#: src/components/CanvasItem.jsx:58 +msgid "Top 10 Daily Ranking" +msgstr "" + +#: src/components/CanvasItem.jsx:64 +msgid "Dimensions" +msgstr "" + +#: src/core/chartSettings.js:30 +msgid "Top 10 Countries [pxls / day]" +msgstr "" + +#: src/core/chartSettings.js:127 +msgid "Players and Pixels per hour" +msgstr "" + +#: src/core/chartSettings.js:221 +msgid "Top 10 Players [pxls / day]" +msgstr "" + +#: src/core/chartSettings.js:294 +msgid "Countries by Pixels Today" +msgstr "" + +#: src/core/chartSettings.js:351 +msgid "Total Pixels placed per day" +msgstr "" + +#: src/components/LogInForm.jsx:77 +msgid "Name or Email" +msgstr "" + +#: src/components/LogInForm.jsx:88 +msgid "LogIn" +msgstr "" + #: src/components/UserMessages.jsx:28 msgid "" "Please verify your mail address or your account could get deleted after a " @@ -1205,10 +1234,6 @@ msgstr "" msgid "New Username" msgstr "" -#: src/components/DeleteAccount.jsx:66 -msgid "Yes, Delete My Account!" -msgstr "" - #: src/components/ChangePassword.jsx:21 msgid "Passwords do not match." msgstr "" @@ -1229,6 +1254,20 @@ msgstr "" msgid "Confirm New Password" msgstr "" +#: src/components/ChangeMail.jsx:59 +msgid "" +"Changed Mail successfully. We sent you a verification mail, " +"please verify your new mail address." +msgstr "" + +#: src/components/ChangeMail.jsx:87 +msgid "New Mail" +msgstr "" + +#: src/components/DeleteAccount.jsx:66 +msgid "Yes, Delete My Account!" +msgstr "" + #: src/components/SocialSettings.jsx:35 msgid "Block DMs" msgstr "" @@ -1253,14 +1292,6 @@ msgstr "" msgid "You have no users blocked" msgstr "" -#: src/components/LogInForm.jsx:77 -msgid "Name or Email" -msgstr "" - -#: src/components/LogInForm.jsx:88 -msgid "LogIn" -msgstr "" - #: src/components/ModCanvastools.jsx:168 msgid "Build image on canvas." msgstr "" @@ -1386,16 +1417,6 @@ msgstr "" msgid "User Name" msgstr "" -#: src/components/ChangeMail.jsx:59 -msgid "" -"Changed Mail successfully. We sent you a verification mail, " -"please verify your new mail address." -msgstr "" - -#: src/components/ChangeMail.jsx:87 -msgid "New Mail" -msgstr "" - #: src/components/ModWatchtools.jsx:48 msgid "Interval is invalid" msgstr "" @@ -1444,26 +1465,6 @@ msgstr "" msgid "(0 = infinite)" msgstr "" -#: src/core/chartSettings.js:30 -msgid "Top 10 Countries [pxls / day]" -msgstr "" - -#: src/core/chartSettings.js:127 -msgid "Players and Pixels per hour" -msgstr "" - -#: src/core/chartSettings.js:221 -msgid "Top 10 Players [pxls / day]" -msgstr "" - -#: src/core/chartSettings.js:294 -msgid "Countries by Pixels Today" -msgstr "" - -#: src/core/chartSettings.js:351 -msgid "Total Pixels placed per day" -msgstr "" - #: src/components/contextmenus/UserContextMenu.jsx:49 msgid "Ping" msgstr "" diff --git a/src/components/Converter.jsx b/src/components/Converter.jsx index bcf46dc..d6f597a 100644 --- a/src/components/Converter.jsx +++ b/src/components/Converter.jsx @@ -197,7 +197,7 @@ function Converter() { > { Object.keys(canvases).map((canvas) => ( - (canvases[canvas].v || canvases[canvas].ed + (canvases[canvas].v || (canvases[canvas].hid && !showHiddenCanvases)) ? null : ( diff --git a/src/components/windows/Archive.jsx b/src/components/windows/Archive.jsx index bab8b83..59cb93d 100644 --- a/src/components/windows/Archive.jsx +++ b/src/components/windows/Archive.jsx @@ -1,12 +1,8 @@ /* eslint-disable max-len */ -import React, { useCallback } from 'react'; -import { useDispatch, useSelector, shallowEqual } from 'react-redux'; +import React from 'react'; import { t } from 'ttag'; -import CanvasItem from '../CanvasItem'; -import { selectCanvas } from '../../store/actions'; - const imageStyle = { maxWidth: '20%', padding: 2, @@ -14,65 +10,34 @@ const imageStyle = { verticalAlign: 'middle', }; -const Archive = () => { - const [canvases, online] = useSelector((state) => [ - state.canvas.canvases, - state.ranks.online, - ], shallowEqual); - const dispatch = useDispatch(); - const selCanvas = useCallback((canvasId) => dispatch(selectCanvas(canvasId)), - [dispatch]); - - return ( -
-

- {t`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. And Some other canvases might outlive their welcome and become useless.`}
- {t`Here we collect removed canvases to archive them in a proper way.`} -

- { - (window.ssv?.backupurl) && ( - <> -

{t`Removed Canvases with history available`}

- { - Object.keys(canvases).map((canvasId) => ( - canvases[canvasId].ed - && ( - - ) - )) - } - - ) - } -

{t`Political Compass Canvas`}

- political-compass -

- {t`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 cooldown and 60s stacking. It got launched on May 11th and remained active for months till it got shut down on November 30th.`}
- {t`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.`} -

-

- Timelapse: - - Download - -

- political-compass -
- ); -}; +const Archive = () => ( +
+

+ {t`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.`}
+ {t`Here we collect removed canvases to archive them in a proper way. Which is currently only one.`} +

+

{t`Political Compass Canvas`}

+ political-compass +

+ {t`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 cooldown and 60s stacking. It got launched on May 11th and remained active for months till it got shut down on November 30th.`}
+ {t`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.`} +

+

+ Timelapse: + + Download + +

+ political-compass +
+); export default Archive; diff --git a/src/components/windows/CanvasSelect.jsx b/src/components/windows/CanvasSelect.jsx index d696314..255d760 100644 --- a/src/components/windows/CanvasSelect.jsx +++ b/src/components/windows/CanvasSelect.jsx @@ -28,7 +28,7 @@ const CanvasSelect = () => {

{t`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 of removed canvases can be accessed here:`}  canvases[i].ed)) + && ( + <> +

{t`Retired Canvases (history only)`}

+ { + Object.keys(canvases).map((canvasId) => ( + canvases[canvasId].ed + && ( + + ) + )) + } + + ) + } ); }; diff --git a/src/store/middleware/rendererHook.js b/src/store/middleware/rendererHook.js index 0d26cbc..8c5cf3d 100644 --- a/src/store/middleware/rendererHook.js +++ b/src/store/middleware/rendererHook.js @@ -58,6 +58,20 @@ export default (store) => (next) => (action) => { } else { initRenderer(store, is3D); } + + if (state.canvas.isHistoricalView) { + const { + historicalDate, + historicalTime, + historicalCanvasSize, + } = state.canvas; + renderer.updateHistoricalTime( + historicalDate, + historicalTime, + historicalCanvasSize, + ); + } + break; } diff --git a/src/store/reducers/canvas.js b/src/store/reducers/canvas.js index 5985a32..6433843 100644 --- a/src/store/reducers/canvas.js +++ b/src/store/reducers/canvas.js @@ -4,6 +4,7 @@ import { getIdFromObject, getHistoricalCanvasSize, getMaxTiledZoom, + dateToString, } from '../../core/utils'; @@ -45,6 +46,51 @@ export type CanvasState = { }; */ +/* + * checks if toggling historical view is neccessary + * in given state or if properties have to change. + * Changes the state inplace. + * @param state + * @return same state with fixed historical view + */ +function fixHistoryIfNeccessary(state, doClamp = true) { + const { + canvasEndDate, + isHistoricalView, + is3D, + } = state; + + if (is3D && isHistoricalView) { + state.isHistoricalView = false; + } else if (canvasEndDate && !isHistoricalView) { + state.isHistoricalView = true; + if (!state.historicalDate) { + state.historicalDate = dateToString(canvasEndDate); + state.historicalTime = '0000'; + } + } + if (state.isHistoricalView) { + const { + historicalDate, + canvasId, + canvasSize, + canvases, + scale, + viewscale, + } = state; + state.historicalCanvasSize = getHistoricalCanvasSize( + historicalDate, + canvasSize, + canvases[canvasId]?.historicalSizes, + ); + if (doClamp && (scale < 0.7 || viewscale < 0.7)) { + state.scale = 0.7; + state.viewscale = 0.7; + } + } + return state; +} + /* * parse url hash and sets view to coordinates * @param canvases Object with all canvas information @@ -74,7 +120,6 @@ function getViewFromURL(canvases) { size: canvasSize, } = canvas; const is3D = !!canvas.v; - const isHistoricalView = !!canvasEndDate; const x = parseInt(almost[1], 10); const y = parseInt(almost[2], 10); @@ -95,12 +140,12 @@ function getViewFromURL(canvases) { } if (!is3D && canvasId !== null) { - const minScale = (isHistoricalView) ? 0.7 : TILE_SIZE / canvasSize; + const minScale = TILE_SIZE / canvasSize; scale = clamp(scale, minScale, MAX_SCALE); view.length = 2; } - return { + return fixHistoryIfNeccessary({ canvasId, canvasIdent, canvasSize, @@ -114,20 +159,21 @@ function getViewFromURL(canvases) { selectedColor: clrIgnore, view, viewscale: scale, - isHistoricalView, + isHistoricalView: false, + historicalDate: null, scale, canvases, - }; + }, canvasId !== null); } catch (error) { const canvasd = canvases[DEFAULT_CANVAS_ID]; - return { + return fixHistoryIfNeccessary({ canvasId: DEFAULT_CANVAS_ID, canvasIdent: canvasd.ident, canvasSize: canvasd.size, historicalCanvasSize: canvasd.size, is3D: !!canvasd.v, - canvasStartDate: null, - canvasEndDate: null, + canvasStartDate: canvasd.sd, + canvasEndDate: canvasd.ed, canvasMaxTiledZoom: getMaxTiledZoom(canvasd.size), palette: new Palette(canvasd.colors, 0), clrIgnore: canvasd.cli || 0, @@ -135,22 +181,21 @@ function getViewFromURL(canvases) { view: [0, 0, 0], viewscale: DEFAULT_SCALE, isHistoricalView: false, + historicalDate: null, scale: DEFAULT_SCALE, canvases, - }; + }); } } const initialState = { ...getViewFromURL(DEFAULT_CANVASES), - historicalDate: null, historicalTime: null, showHiddenCanvases: false, hover: null, prevCanvasCoords: {}, }; - export default function canvasReducer( state = initialState, action, @@ -203,36 +248,21 @@ export default function canvasReducer( date, time, } = action; - const { - canvasSize, - canvases, - canvasId, - } = state; - const historicalCanvasSize = getHistoricalCanvasSize( - date, canvasSize, canvases[canvasId].historicalSizes, - ); - - return { + return fixHistoryIfNeccessary({ ...state, - historicalCanvasSize, historicalDate: date, historicalTime: time, - }; + }); } case 's/TGL_HISTORICAL_VIEW': { - const { - scale, - viewscale, - } = state; - return { + if (state.is3D || state.canvasEndDate) { + return state; + } + return fixHistoryIfNeccessary({ ...state, - scale: (scale < 0.7) ? 0.7 : scale, - viewscale: (viewscale < 0.7) ? 0.7 : viewscale, - isHistoricalView: !state.is3D && ( - !state.isHistoricalView || state.canvasEndDate - ), - }; + isHistoricalView: !state.isHistoricalView, + }); } case 's/TGL_HIDDEN_CANVASES': { @@ -289,7 +319,11 @@ export default function canvasReducer( case 's/SELECT_CANVAS': { let { canvasId } = action; - const { canvases, prevCanvasCoords, canvasId: prevCanvasId } = state; + const { + canvases, + prevCanvasCoords, + canvasId: prevCanvasId, + } = state; let canvas = canvases[canvasId]; if (!canvas) { canvasId = DEFAULT_CANVAS_ID; @@ -315,20 +349,13 @@ export default function canvasReducer( scale = prevCanvasCoords[canvasId].scale; selectedColor = prevCanvasCoords[canvasId].selectedColor; } - //--- - const isHistoricalView = !is3D && ( - state.isHistoricalView || !!canvasEndDate - ); - const historicalCanvasSize = getHistoricalCanvasSize( - state.historicalDate, - canvasSize, - canvas.historicalSizes, - ); const palette = new Palette(colors, 0); + if (!is3D) { view.length = 2; } - return { + + return fixHistoryIfNeccessary({ ...state, canvasId, canvasIdent, @@ -342,8 +369,6 @@ export default function canvasReducer( view, viewscale, scale, - isHistoricalView, - historicalCanvasSize, // remember view, scale and viewscale prevCanvasCoords: { ...state.prevCanvasCoords, @@ -354,12 +379,16 @@ export default function canvasReducer( selectedColor: state.selectedColor, }, }, - }; + }); } case 's/REC_ME': { const { canvases } = action; - let { canvasIdent, scale, view } = state; + let { + canvasIdent, + scale, + view, + } = state; let canvasId = getIdFromObject(canvases, canvasIdent); if (canvasId === null || ( @@ -378,29 +407,28 @@ export default function canvasReducer( colors, } = canvas; const palette = new Palette(colors, 0); - const isHistoricalView = !!canvasEndDate; if (!is3D) { - const minScale = (isHistoricalView) ? 0.7 : TILE_SIZE / canvasSize; + const minScale = TILE_SIZE / canvasSize; scale = clamp(scale, minScale, MAX_SCALE); view = [view[0], view[1]]; } - return { + return fixHistoryIfNeccessary({ ...state, canvasId, canvasIdent, canvasSize, is3D, canvasStartDate, + canvasEndDate, palette, clrIgnore, canvases, viewscale: scale, scale, - isHistoricalView, view, - }; + }); } default: