From 9d2fef5e73b2f9216ec476b78e647edc43c2e79b Mon Sep 17 00:00:00 2001 From: izawartka <59137928+izawartka@users.noreply.github.com> Date: Mon, 18 Aug 2025 21:51:08 +0200 Subject: [PATCH] Added export animation +Added svg export animation *Moved Constants.originalPublicBuildUrl to Constants.svgExport.originalPublicBuildUrl --- src/components/map/Map.css | 16 ++++++++++++++++ src/components/sidemenu/ExportViewButton.js | 19 ++++++++++++++++--- src/helpers/constants.js | 6 +++++- src/helpers/exportHelper.js | 2 +- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/components/map/Map.css b/src/components/map/Map.css index 19a3566..721e29a 100644 --- a/src/components/map/Map.css +++ b/src/components/map/Map.css @@ -6,6 +6,22 @@ background-color: var(--map-background-color); } +.map.export-border::after { + border: 5px solid var(--map-text-color); + content: ""; + position: absolute; + + width: 100%; + width: -moz-available; + width: -webkit-fill-available; + width: stretch; + + height: 100%; + height: -moz-available; + height: -webkit-fill-available; + height: stretch; +} + .export-container { position: relative; width: 100%; diff --git a/src/components/sidemenu/ExportViewButton.js b/src/components/sidemenu/ExportViewButton.js index 4de3556..a9ee8bc 100644 --- a/src/components/sidemenu/ExportViewButton.js +++ b/src/components/sidemenu/ExportViewButton.js @@ -1,14 +1,27 @@ -import { useContext } from "react"; +import { useCallback, useContext } from "react"; import SceneryContext from "../../contexts/SceneryContext"; +import SideMenuContext from "../../contexts/SideMenuContext"; import ExportHelper from "../../helpers/exportHelper"; +import Constants from "../../helpers/constants"; export default function ExportViewButton() { const { scenery } = useContext(SceneryContext); + const { setSideMenuOpen } = useContext(SideMenuContext); + + const onButtonClick = useCallback(async () => { + const mapElement = document.querySelector('.map'); + + setSideMenuOpen(false); + await new Promise(resolve => setTimeout(resolve, Constants.svgExport.hidePanelDuration)); + mapElement.classList.add('export-border'); + await new Promise(resolve => setTimeout(resolve, Constants.svgExport.borderDuration)); + mapElement.classList.remove('export-border'); - const onButtonClick = () => { const filename = (scenery.getName() || 'export') + '.svg'; ExportHelper.exportSvg(filename); - }; + + setSideMenuOpen(true); + }, [scenery, setSideMenuOpen]); return (
diff --git a/src/helpers/constants.js b/src/helpers/constants.js index 54ed8f4..9fd877c 100644 --- a/src/helpers/constants.js +++ b/src/helpers/constants.js @@ -1,6 +1,5 @@ const Constants = { buildVersion: '1.6.2', - originalPublicBuildUrl: 'https://maseuko.pl/soft/td2-visualizer-2/', // do NOT change map: { zoomSensitivity: 0.002, zoomMin: 0.03, @@ -31,6 +30,11 @@ const Constants = { skipPlatforms: false, resolveElectrificationStepMode: false, }, + svgExport: { + hidePanelDuration: 500, + borderDuration: 100, + originalPublicBuildUrl: 'https://maseuko.pl/soft/td2-visualizer-2/', // do NOT change + }, warnings: { all: false, // enable all warnings trackObjectCannotBeApplied: false, diff --git a/src/helpers/exportHelper.js b/src/helpers/exportHelper.js index 28397cf..3623371 100644 --- a/src/helpers/exportHelper.js +++ b/src/helpers/exportHelper.js @@ -116,7 +116,7 @@ function addMetadata(svg) { const description = document.createElementNS('http://purl.org/dc/elements/1.1/', 'dc:description'); description.textContent = `Exported using TD2 Visualizer v${Constants.buildVersion}`; const source = document.createElementNS('http://purl.org/dc/elements/1.1/', 'dc:source'); - source.textContent = Constants.originalPublicBuildUrl; + source.textContent = Constants.svgExport.originalPublicBuildUrl; rdf.appendChild(description); rdf.appendChild(source);