simwrapper 4.0.0__tar.gz → 4.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- simwrapper-4.0.1/CONFIG-EXAMPLE.yaml +31 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/PKG-INFO +54 -11
- {simwrapper-4.0.0 → simwrapper-4.0.1}/README.md +53 -10
- {simwrapper-4.0.0 → simwrapper-4.0.1}/pyproject.toml +1 -1
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/FlaskApp.py +28 -8
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/cli.py +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/AggregateOd-BnuEf2uU.js → simwrapper-4.0.1/simwrapper/static/assets/AggregateOd-B4y8aYuC.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/BackgroundMapOnTop-QBK8vW2Q.js → simwrapper-4.0.1/simwrapper/static/assets/BackgroundMapOnTop-CMoHelYK.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/CalculationTable-BOJ8utvb.js → simwrapper-4.0.1/simwrapper/static/assets/CalculationTable-BKJ39V7b.js +1 -1
- simwrapper-4.0.1/simwrapper/static/assets/CarrierViewer-BMQAVXNF.css +1 -0
- simwrapper-4.0.1/simwrapper/static/assets/CarrierViewer-CBqkLqs3.js +1 -0
- simwrapper-4.0.0/simwrapper/static/assets/CollapsiblePanel-CvefXrxc.js → simwrapper-4.0.1/simwrapper/static/assets/CollapsiblePanel-CGEamBkr.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/ColorMapSelector-Bf3M5mCd.js → simwrapper-4.0.1/simwrapper/static/assets/ColorMapSelector-B07ZL-2R.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/ColorsAndWidths-DEBUaGLb.js → simwrapper-4.0.1/simwrapper/static/assets/ColorsAndWidths-DIJqI60j.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/DashboardDataManager-B-7RGACG.js → simwrapper-4.0.1/simwrapper/static/assets/DashboardDataManager-BQP3prLI.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/DrawingTool-tAu-EH_Y.js → simwrapper-4.0.1/simwrapper/static/assets/DrawingTool-CBau2IAH.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/EventViewer-Cy2SBicp.js → simwrapper-4.0.1/simwrapper/static/assets/EventViewer-CSp2IN1v.js +2 -2
- simwrapper-4.0.0/simwrapper/static/assets/Flowmap-BSc-eQE6.js → simwrapper-4.0.1/simwrapper/static/assets/Flowmap-hgyHkho_.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/GridMap-BxDBiFId.js → simwrapper-4.0.1/simwrapper/static/assets/GridMap-BoFPYcsV.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/ImageView-DBfNfnie.js → simwrapper-4.0.1/simwrapper/static/assets/ImageView-D6uWvvAa.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/LayerMap-RpGO8prv.js → simwrapper-4.0.1/simwrapper/static/assets/LayerMap-oLq7p3On.js +2 -2
- simwrapper-4.0.0/simwrapper/static/assets/LayoutManager-hDSnKq-e.js → simwrapper-4.0.1/simwrapper/static/assets/LayoutManager-BTKmNrLt.js +17 -17
- simwrapper-4.0.0/simwrapper/static/assets/LayoutManager-n4czqQtL.css → simwrapper-4.0.1/simwrapper/static/assets/LayoutManager-XvRWeyv7.css +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/LegendBox-DP9bvbOC.js → simwrapper-4.0.1/simwrapper/static/assets/LegendBox-B08OK2Ch.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/LegendColors-Dc2phs0j.js → simwrapper-4.0.1/simwrapper/static/assets/LegendColors-D4curWGf.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/LineOffsetLayer-DHwgp4e-.js → simwrapper-4.0.1/simwrapper/static/assets/LineOffsetLayer-Be36pIP4.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/LogisticsViewer-DrPJrWjx.js → simwrapper-4.0.1/simwrapper/static/assets/LogisticsViewer-BVe_kaMF.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/MatrixViewer-BiTvgf5C.js → simwrapper-4.0.1/simwrapper/static/assets/MatrixViewer-l2gE0Jm1.js +4 -4
- simwrapper-4.0.0/simwrapper/static/assets/NetworkLinks-nIGegt65.js → simwrapper-4.0.1/simwrapper/static/assets/NetworkLinks-qgWYa7yh.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/PathOffsetLayer-Cr9eVOW6.js → simwrapper-4.0.1/simwrapper/static/assets/PathOffsetLayer-QXIMy42N.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/PathTraceLayer-CWlxcB9b.js → simwrapper-4.0.1/simwrapper/static/assets/PathTraceLayer-Bch_qDuL.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/PieChartDemo-CSkOeB-5.js → simwrapper-4.0.1/simwrapper/static/assets/PieChartDemo-BytJL3ZF.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/PlotlyDiagram-BPev_grK.js → simwrapper-4.0.1/simwrapper/static/assets/PlotlyDiagram-BXbfuZ9G.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/PolygonsLayer.worker-DLKJcfYX.js → simwrapper-4.0.1/simwrapper/static/assets/PolygonsLayer.worker-BsI8I7o0.js +3 -3
- simwrapper-4.0.0/simwrapper/static/assets/RunConfigurator-p7sBmzAv.js → simwrapper-4.0.1/simwrapper/static/assets/RunConfigurator-DQJiHszX.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/SankeyDiagram-DG5ynUvJ.js → simwrapper-4.0.1/simwrapper/static/assets/SankeyDiagram-PMBnbyLr.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/ShapeFile-G3JHDwie.js → simwrapper-4.0.1/simwrapper/static/assets/ShapeFile-03xUN9L-.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/ShapeFile.vue_vue_type_style_index_0_scoped_e007a3ab_lang-DN1-OeLb.js → simwrapper-4.0.1/simwrapper/static/assets/ShapeFile.vue_vue_type_style_index_0_scoped_e007a3ab_lang-Cg9d3qEn.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/TimeSlider-BargM0dx.js → simwrapper-4.0.1/simwrapper/static/assets/TimeSlider-bl3jMjHl.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/TopSheet-D446bqo5.js → simwrapper-4.0.1/simwrapper/static/assets/TopSheet-9MJkamwe.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/TransitDemand-BC8wOC11.js → simwrapper-4.0.1/simwrapper/static/assets/TransitDemand-CJJVWGuk.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/VegaLite-BM8pC4P8.js → simwrapper-4.0.1/simwrapper/static/assets/VegaLite-CBHEOqZU.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/VehicleAnimation-Chq_nGd8.js → simwrapper-4.0.1/simwrapper/static/assets/VehicleAnimation-HA2HQP4Y.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/VehicleAnimation-CYkRtmy4.js → simwrapper-4.0.1/simwrapper/static/assets/VehicleAnimation-eK9UOm9A.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/VideoPlayer-i4N0NmS8.js → simwrapper-4.0.1/simwrapper/static/assets/VideoPlayer-Dv8PbDvI.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/VizConfigurator-CnciaWXL.js → simwrapper-4.0.1/simwrapper/static/assets/VizConfigurator-CGwo3zpl.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/VuePlotly-Dk6fAVUL.js → simwrapper-4.0.1/simwrapper/static/assets/VuePlotly-D9-EaHZi.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/WASMEventStreamer.worker-O8ZxohU4.js → simwrapper-4.0.1/simwrapper/static/assets/WASMEventStreamer.worker-Damh4Nll.js +4 -4
- simwrapper-4.0.0/simwrapper/static/assets/XmlViewer-Cn5iOb_I.js → simwrapper-4.0.1/simwrapper/static/assets/XmlViewer-CeUPBZXt.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/XyHexagons-B7mhgTC4.js → simwrapper-4.0.1/simwrapper/static/assets/XyHexagons-DNyuZL1f.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/XyTime-D6EH8_oq.js → simwrapper-4.0.1/simwrapper/static/assets/XyTime-Npy9r_qy.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/ZoomButtons-DL0GlLeR.js → simwrapper-4.0.1/simwrapper/static/assets/ZoomButtons-DERh7Eho.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/aggregate-od-Bp5Fmfpj.js → simwrapper-4.0.1/simwrapper/static/assets/aggregate-od-ykfZybwN.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/arc-layer-Sm8rnz46.js → simwrapper-4.0.1/simwrapper/static/assets/arc-layer-Dn9ajLjf.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/area-BqDxcvzv.js → simwrapper-4.0.1/simwrapper/static/assets/area-D-I6dGQB.js +1 -1
- simwrapper-4.0.1/simwrapper/static/assets/area-map-CR15-uE0.js +1 -0
- simwrapper-4.0.0/simwrapper/static/assets/bar-C-zLBD_y.js → simwrapper-4.0.1/simwrapper/static/assets/bar-BnBcDEQo.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/bubble-gdCukjJ1.js → simwrapper-4.0.1/simwrapper/static/assets/bubble-BdlXQ49B.js +1 -1
- simwrapper-4.0.1/simwrapper/static/assets/carriers-hM0KIsoK.js +1 -0
- simwrapper-4.0.0/simwrapper/static/assets/column-layer-B_vGb0cu.js → simwrapper-4.0.1/simwrapper/static/assets/column-layer-CwQpY9i6.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/cut-by-mercator-bounds-dHh4KvEa.js → simwrapper-4.0.1/simwrapper/static/assets/cut-by-mercator-bounds-xMe5Xf6r.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/data-filter-CcA44fC7.js → simwrapper-4.0.1/simwrapper/static/assets/data-filter-BD_Wkfmn.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/flowmap-CWq3rIu0.js → simwrapper-4.0.1/simwrapper/static/assets/flowmap-t79drfay.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/geojson-layer-2WUxY9vI.js → simwrapper-4.0.1/simwrapper/static/assets/geojson-layer-BJzM0td6.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/gridmap-COG7oUd_.js → simwrapper-4.0.1/simwrapper/static/assets/gridmap-sfEiQxq6.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/heatmap-Cr1q5k4i.js → simwrapper-4.0.1/simwrapper/static/assets/heatmap-V049cGOj.js +1 -1
- simwrapper-4.0.1/simwrapper/static/assets/hexagons--8f7-t--.js +1 -0
- simwrapper-4.0.0/simwrapper/static/assets/icon-manager-4L4Jj_60.js → simwrapper-4.0.1/simwrapper/static/assets/icon-manager-VCgL6dLz.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/index-BLQxIDT1.css → simwrapper-4.0.1/simwrapper/static/assets/index-BFgQCBGP.css +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/index-Dx5UFeF9.js → simwrapper-4.0.1/simwrapper/static/assets/index-BvhPezkX.js +5 -5
- simwrapper-4.0.0/simwrapper/static/assets/index-Bg-0nJY7.js → simwrapper-4.0.1/simwrapper/static/assets/index-C5ggn9H-.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/index-CvKsqk8k.js → simwrapper-4.0.1/simwrapper/static/assets/index-CL0jgCgf.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/index-Bdyv2sbz.js → simwrapper-4.0.1/simwrapper/static/assets/index-CsWoCkIA.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/index-YpyCIT3v.js → simwrapper-4.0.1/simwrapper/static/assets/index-DsrLhKEb.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/index-1f89C2vg.js → simwrapper-4.0.1/simwrapper/static/assets/index-txrVZiR_.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/layer-extension-BmqUZxw2.js → simwrapper-4.0.1/simwrapper/static/assets/layer-extension-Cpk9-dEi.js +1 -1
- simwrapper-4.0.1/simwrapper/static/assets/layermap-DdYBpDZ0.js +1 -0
- simwrapper-4.0.0/simwrapper/static/assets/line-8OUMvFnr.js → simwrapper-4.0.1/simwrapper/static/assets/line-Ch_EX0v9.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/line-layer-CLGk9xnE.js → simwrapper-4.0.1/simwrapper/static/assets/line-layer-FsBfv74I.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/links-diJ4jZXO.js → simwrapper-4.0.1/simwrapper/static/assets/links-xT8SMCIT.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/lodash-jTVlOCKt.js → simwrapper-4.0.1/simwrapper/static/assets/lodash-BLxeWTQP.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/matrix-Ny8B586B.js → simwrapper-4.0.1/simwrapper/static/assets/matrix-DnHe1cH1.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/moving-icons-vehicles-layer-Z6_8kqfL.js → simwrapper-4.0.1/simwrapper/static/assets/moving-icons-vehicles-layer-BGxe9T_u.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/nprogress-C21mliK_.js → simwrapper-4.0.1/simwrapper/static/assets/nprogress-CUI5i0md.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/papaparse.min-Dq7wJBkM.js → simwrapper-4.0.1/simwrapper/static/assets/papaparse.min-DKoG2MWZ.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/path-layer-B2IpFprj.js → simwrapper-4.0.1/simwrapper/static/assets/path-layer-BJ-_QCeU.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/pie-CKYjloei.js → simwrapper-4.0.1/simwrapper/static/assets/pie-Dr7l5Rkm.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/plotly-D0Bb4M9s.js → simwrapper-4.0.1/simwrapper/static/assets/plotly-D-L3h402.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/sankey-6Yc0C1HO.js → simwrapper-4.0.1/simwrapper/static/assets/sankey-CyJcX8mk.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/scatter-CjrubrSz.js → simwrapper-4.0.1/simwrapper/static/assets/scatter-SqC5HFGM.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/set-rtl-text-plugin-C7Dw7oWj.js → simwrapper-4.0.1/simwrapper/static/assets/set-rtl-text-plugin-C15y_Scn.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/slideshow-B2q-tUq8.js → simwrapper-4.0.1/simwrapper/static/assets/slideshow-CBEV3mYI.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/solid-polygon-layer-BfIR0E2S.js → simwrapper-4.0.1/simwrapper/static/assets/solid-polygon-layer-B2eWl8cz.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/table-BxjEnSnP.js → simwrapper-4.0.1/simwrapper/static/assets/table-jL5TYkQ0.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/text-PsmYndOh.js → simwrapper-4.0.1/simwrapper/static/assets/text-h7arvIN0.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/text-layer-CfGqqJIM.js → simwrapper-4.0.1/simwrapper/static/assets/text-layer-D-rJTu6F.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/tile-C7PBydy7.js → simwrapper-4.0.1/simwrapper/static/assets/tile-Ck3URzKY.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/transit-GWWW99n0.js → simwrapper-4.0.1/simwrapper/static/assets/transit-atSN5QSD.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/util-LfrgPD9b.js → simwrapper-4.0.1/simwrapper/static/assets/util-vCd5pz9J.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/vega-hm6HCKnN.js → simwrapper-4.0.1/simwrapper/static/assets/vega-Bgrlftig.js +1 -1
- simwrapper-4.0.1/simwrapper/static/assets/vehicles-BBsy7Jzt.js +1 -0
- simwrapper-4.0.0/simwrapper/static/assets/video-CCW76QFJ.js → simwrapper-4.0.1/simwrapper/static/assets/video-DjkUchOu.js +1 -1
- simwrapper-4.0.0/simwrapper/static/assets/xml-Cc_EfoQp.js → simwrapper-4.0.1/simwrapper/static/assets/xml-DCyymAZS.js +1 -1
- simwrapper-4.0.1/simwrapper/static/assets/xytime-7qGwmDZI.js +1 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/index.html +2 -2
- simwrapper-4.0.0/simwrapper/static/assets/CarrierViewer-CyqBQEu7.css +0 -1
- simwrapper-4.0.0/simwrapper/static/assets/CarrierViewer-eXeST4f7.js +0 -1
- simwrapper-4.0.0/simwrapper/static/assets/area-map-CaQtlskC.js +0 -1
- simwrapper-4.0.0/simwrapper/static/assets/carriers-BU8kiMfh.js +0 -1
- simwrapper-4.0.0/simwrapper/static/assets/hexagons-CX9UbzLs.js +0 -1
- simwrapper-4.0.0/simwrapper/static/assets/layermap-CLT4oMca.js +0 -1
- simwrapper-4.0.0/simwrapper/static/assets/vehicles-PNXyekLP.js +0 -1
- simwrapper-4.0.0/simwrapper/static/assets/xytime-ChWIcT6w.js +0 -1
- simwrapper-4.0.0/simwrapper/storage.yaml +0 -18
- {simwrapper-4.0.0 → simwrapper-4.0.1}/.gitignore +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/.pylintrc +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/.versionrc +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/.vscode/settings.json +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/CHANGELOG.md +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/LICENSE.txt +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/MANIFEST.in +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/Makefile +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/patches/apply_pytables_patch.py +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/patches/pytables-3.10.2.patch +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/GunicornServer.py +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/MiniFileServer.py +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/__init__.py +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/gunicorn_config.py +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/nginx.conf +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/simwrapper-flask-app.service +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/simwrapper-rclone.service +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/supervisord.conf +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/sites.py +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/404.html +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/404.html.bak +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/CNAME +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/README.md +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/AggregateDatasetStreamer.worker-C0WTuhxa.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/AggregateOd-aR9bhJaL.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/BackgroundMapOnTop-DptOe2tm.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/CalculationTable-ie-f6C8y.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/CollapsiblePanel-zCvUtCGk.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/ColorMapSelector-DzIjgrBt.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/Coords-CQQjH_Bj.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/CsvGzipParser.worker-BLBFQ-aV.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/DataFetcher.worker-BEGJ5mrK.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/DrawingTool-Cxz0mWSd.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/EventViewer-BDft6Wzn.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/Flowmap--zMRkn8n.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/GridMap-BAwSaBed.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/GzipFetcher.worker-BN1FeEl_.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/GzipFetcher.worker-Dil8PfAW.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/ImageView-Bh2HyJTN.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/LayerMap-oQQxnF8O.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/LegendBox-BJxkonIO.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/LegendStore-CGgeb9zL.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/LogisticsViewer-DcAXVGrY.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/MATSimEventStreamer.worker-Do4vvbuZ.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/MatrixViewer-B5u8FtkP.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/NetworkLinks-BU463xJY.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/NewXmlFetcher.worker-DqenmrSu.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/NewXmlFetcher.worker-fQRtinoY.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/PathTraceLayer-DnayuE36.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/PieChartDemo-DkgWM9v6.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/PlotlyDiagram-BdPQboat.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/RoadNetworkLoader.worker-CZSk_iwT.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/RoadNetworkLoader.worker-DWlRv2k1.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/RunConfigurator-Cka-r30l.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/SW_logo_icon_anim-Cyl7nwZq.gif +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/SW_logo_white-mbdplT21.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/SW_logo_yellow-Btlbhihn.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/SankeyDiagram-CACz4sdX.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/Set3-Dyl9Llxj.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/ShapeFile-DVEMvVwY.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TimeSlider-DKK7Kyeo.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TopSheet-C6eJGli3.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TopSheetWorker.worker-DZfZs6Iy.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TransitDemand-BB7pRKZu.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TransitSupplyHelper.worker-1BijG__s.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VegaLite-DVfrWt8N.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VehicleAnimation-BFdy5eRi.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VehicleAnimation-C50drogW.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VideoPlayer-Cdz1McNz.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VizConfigurator-pmbbASys.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/XmlViewer-hB_o1pGI.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/XyHexagons-l2j9r24G.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/XyTime-DT-ZW-1w.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/XytDataParser.worker-BavN8Lc3.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/ZoomButtons-CZq11kBt.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/aggregate-od-CxN1rXyi.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/arcs-B-65v31y.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/area-BtCARixv.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/area-map-CwgktcLJ.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/avro-Dd9UqmeZ.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/bar-BbDIFWK1.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/berlin-C-twquEa.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/bubble-CbGwYQfW.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/carriers-Bynfqluv.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/color-DZRtpOAM.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/comlink-DESosX-g.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/cubehelix-Bg3rkAQA.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/defaultLocale-VLpijIbO.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/draw-icon-dm-DbFh91q-.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/extends-CF3RwP-h.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/extent-Ccx1MofX.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/flowmap-CvjUZABP.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/fsum-CWwcR1RF.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/fxp-4YEvQr-_.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/gridmap-f31N4Owr.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/group-DobYzF2-.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/hcl-BuAPUl0w.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/heatmap-D_UHOruG.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/hexagons-CPOSxcyG.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/icon-blue-ramp-D1d4h-6x.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/icon-pie-chart-BS7BHQ_l.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/icon-stop-triangle-BjEDyLtU.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/index-B9fw0f6a.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/index-CrY58g0x.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/index-DgdUD6UN.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/index-_doEQLKC.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/layermap-CWKLShno.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zblosc-DmbwZN5J.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zblosc2-C2k_kvFi.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zbshuf-CAWqoiJv.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zbz2-YH5bcfd1.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zlz4-DBxVEC8C.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zlzf-B37RoVJN.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zszf-vmQ-rYRm.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zzfp-CxpSdQww.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zzstd-BNHjSL5H.so +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/lil-gui.esm-D2cLj-mk.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/line-DONUOCo1.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/links-BdpHH8jO.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/links-BjFLDFnX.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/matrix-CwtPS1VI.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/matsim_event_streamer_bg-CzbXQAK4.wasm +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/min-D1slsF82.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/pie-ZUTwNf2R.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/plotly-DIuHo25J.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/points-CNz3arAg.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/polygons-BCSoK5vV.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/pow-BDr0uoeQ.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/rainbow-Dz4seJAz.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/range-OtVwhkKS.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/round-D-ROWHlE.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sankey-ChmfM_XB.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/scatter-CIhK1YX-.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/screenshots-Tas2EtGs.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sequential-CKBnvidU.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sidebar-BRi9n39r.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/slideshow-KikGqlRS.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sum-CB6J5KXz.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_minus-B3KtJjJs.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_minus_dm-BB92PyXK.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_north_arrow-BuDjRW21.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_north_arrow_dm-b3Ne7pdA.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_plus-_7XGt7Yq.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_plus_dm-O9hpaAgy.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/table-B5iq16nn.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/table-NNqWMujx.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/text-Cz75an8R.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/thumbnail-B7gJwb8m.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/thumbnail-BWla1ZrP.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/thumbnail-B_QeHA-1.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/thumbnail-ywgPDHXm.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/tile-_Lm2YGSR.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/timer-D6Wzbp6M.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/transit-J9voF7aH.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/turf.es-DhhXp8l8.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/vega-9UM1ksay.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/vehicles-BmIdYWvk.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/video-Mp6RrM_l.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/vsp-2023-logo-kcRNuRsU.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/xml-D0uOEf4Q.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/xytime-BdF5XbHJ.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/year-DwdiMAWv.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/zip-Db3GAX2E.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-bluered.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-inferno.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-picnic.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-salinity.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-viridis.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/css/font-awesome-5.7.1.css +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/data/build-index.js +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/data/index.html +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/icon-atlas.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/icon-stop-triangle.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/SW_favicon.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/SW_logo_icon_white.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/SW_logo_icon_yellow.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/draw-icon.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas-2.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas-3.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas-3.xcf +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/arc.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/bmbf-logo.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/dfg.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/matsim-logo-blue.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/matsim-logo-white.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/metcouncil.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/mtc.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/mwcog.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/ohiodot.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/oregondot.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/psrc.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/sandag.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/semcog.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/sfcta-old.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/sfcta.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/tu-logo.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/vsp-logo-300dpi.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/departure_board.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_bike.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_boat.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_bus.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_car.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_subway.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/electric_car.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/electric_rickshaw.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/emoji_transportation.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/ev_station.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/group.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/groups.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/info.txt +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/local_gas_station.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/local_parking.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/local_shipping.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/local_taxi.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/motorcycle.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/person.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/route.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/subway.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/train.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/transportation.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/two_wheeler.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/sax-wasm.wasm +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/sql-wasm.wasm +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/tu-logo-circle.jpg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/tu-logo-circle.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/tu-logo.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/veh-curvy.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/veh-curvy2.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/veh-curvy3.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/veh-curvy5.png +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.eot +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.ttf +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.woff +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.woff2 +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.eot +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.svg +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.ttf +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.woff +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.woff2 +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/zones/sandag.geojson.gz +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/zones/zones.yaml +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/tests/__init__.py +0 -0
- {simwrapper-4.0.0 → simwrapper-4.0.1}/uv.lock +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# config-example.yaml
|
|
2
|
+
# This file defines storage locations and any
|
|
3
|
+
# front-page "readme" material in markdown
|
|
4
|
+
# ------------------------------------------------
|
|
5
|
+
|
|
6
|
+
# --- STORAGE ----------------------
|
|
7
|
+
# **Local/network mounts only: no http URLs here**
|
|
8
|
+
# Each key defines a starting point in the local filesystem.
|
|
9
|
+
# (if no config is found, the current working folder is shared)
|
|
10
|
+
storage:
|
|
11
|
+
data:
|
|
12
|
+
path: '/Users/billy/data'
|
|
13
|
+
description: 'Local data on my laptop'
|
|
14
|
+
vsp-public:
|
|
15
|
+
path: '/Users/billy/public-svn'
|
|
16
|
+
description: 'VSP/TU-Berlin public datasets'
|
|
17
|
+
|
|
18
|
+
# --- FRONT-PAGE TEXT -------------
|
|
19
|
+
# Readme can either be a .md markdown filename,
|
|
20
|
+
# or you can put markdown text directly in this file with "readme: |"
|
|
21
|
+
#
|
|
22
|
+
tagline: 'Transport simulation data visualizer'
|
|
23
|
+
# readme: 'readme.md'
|
|
24
|
+
# # or
|
|
25
|
+
# readme: |
|
|
26
|
+
# Welcome to My SimWrapper
|
|
27
|
+
# ========================
|
|
28
|
+
# Markdown text here
|
|
29
|
+
# - notes 1
|
|
30
|
+
# - notes 2
|
|
31
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simwrapper
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.1
|
|
4
4
|
Summary: Run SimWrapper from Python
|
|
5
5
|
Project-URL: Homepage, https://docs.simwrapper.app
|
|
6
6
|
Project-URL: Repository, https://github.com/simwrapper/simwrapper-python-tools
|
|
@@ -53,31 +53,72 @@ project, available separately at https://github.com/simwrapper/simwrapper. No mo
|
|
|
53
53
|
|
|
54
54
|
`simwrapper` knows four commands.
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
### simwrapper run [config.yaml]
|
|
57
57
|
|
|
58
|
-
starts a _local instance of the SimWrapper website_ running on your machine and
|
|
58
|
+
starts a _local instance of the SimWrapper website_ running on your machine and usually listening on port 4999. Run this command if you have a machine on your local network which contains outputs you'd like to view (such as a modeling server), and that machine has not been set up with any other file sharing software such as NGINX or Apache.
|
|
59
59
|
|
|
60
60
|
- This command is designed to support the use case where an agency has (1) a local network with files stored on a central "modeling server" or file server, and also (2) desktop machines or laptops on the local network that wish to access those files using SimWrapper.
|
|
61
61
|
- Ultimately you may decide that you want to put simwrapper behind a proxy server such as those listed, for improved performance, features, and security.
|
|
62
62
|
|
|
63
|
-
This is especially useful if you use cloud-based storage such as AWS or Azure. You can **mount your cloud storage** to a local folder using a tool such as [Rclone mount](https://rclone.org/commands/rclone_mount/), and use this `simwrapper
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
This is especially useful if you use cloud-based storage such as AWS or Azure. You can **mount your cloud storage** to a local folder using a tool such as [Rclone mount](https://rclone.org/commands/rclone_mount/), and use this `simwrapper run` to browse your files and results!
|
|
64
|
+
|
|
65
|
+
**Options:**
|
|
66
|
+
|
|
67
|
+
`simwrapper run [config-file.yaml]` will read configuration from specified file.
|
|
68
|
+
|
|
69
|
+
- If not provided, simwrapper will serve the files found in the current working folder. If provided, the YAML file can provide three sections:
|
|
70
|
+
|
|
71
|
+
- **storage** - a list of mount points (folders) that simwrapper should share
|
|
72
|
+
- **tagline** - the front page tagline, default "Transport simulation data visualizer"
|
|
73
|
+
- **readme** - Markdown filename or raw markdown text to be shown on front page
|
|
74
|
+
|
|
75
|
+
**Example: config.yaml:**
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
# --- STORAGE ----------------------
|
|
79
|
+
# **Local/network mounts only: no http URLs here**
|
|
80
|
+
# Each key defines a starting point in the local filesystem.
|
|
81
|
+
# (if no config is found, the current working folder is shared)
|
|
82
|
+
storage:
|
|
83
|
+
data:
|
|
84
|
+
path: '/Users/billy/data'
|
|
85
|
+
description: 'Local data on my laptop'
|
|
86
|
+
vsp-public:
|
|
87
|
+
path: '/Users/billy/public-svn'
|
|
88
|
+
description: 'VSP/TU-Berlin public datasets'
|
|
89
|
+
|
|
90
|
+
# --- FRONT-PAGE TEXT -------------
|
|
91
|
+
# Readme can either be a .md markdown filename,
|
|
92
|
+
# or you can put markdown text directly in this file with "readme: |"
|
|
93
|
+
#
|
|
94
|
+
tagline: 'Transport simulation data visualizer'
|
|
95
|
+
readme: 'readme.md'
|
|
96
|
+
# # or...
|
|
97
|
+
# readme: |
|
|
98
|
+
# Welcome to My SimWrapper
|
|
99
|
+
# ========================
|
|
100
|
+
# Markdown text here
|
|
101
|
+
# - notes 1
|
|
102
|
+
# - notes 2
|
|
103
|
+
```
|
|
66
104
|
|
|
67
|
-
|
|
105
|
+
---
|
|
106
|
+
### simwrapper serve
|
|
68
107
|
|
|
69
108
|
starts a local file server in the current directory. Run this command, then browse to either <https://vsp.berlin/simwrapper> or <https://activitysim.github.io/dashboard> to view your local folder outputs.
|
|
70
109
|
|
|
71
|
-
|
|
110
|
+
---
|
|
111
|
+
### simwrapper here
|
|
72
112
|
|
|
73
|
-
_Deprecated - use simwrapper
|
|
113
|
+
_Deprecated - "use simwrapper run" instead_
|
|
74
114
|
|
|
75
115
|
starts a _local copy of the SimWrapper website_ usually listening on port 8050. Run this command instead of `simwrapper serve` if you have a machine on your local network which contains outputs you'd like to view (such as a modeling server), and that machine has not been set up with any other file sharing software such as NGINX or Apache.
|
|
76
116
|
|
|
77
117
|
- This command is designed to support the use case where an agency has (1) a local network with files stored on a central "modeling server" or file server, and also (2) desktop machines or laptops on the local network that wish to access those files using SimWrapper.
|
|
78
118
|
- Note, it's not a battle-tested multi-threaded web proxy server such as Apache, NGINX, or Gunicorn. Ultimately you may decide that you want to put simwrapper behind a proxy server such as those listed, for improved performance, features, and security.
|
|
79
119
|
|
|
80
|
-
|
|
120
|
+
---
|
|
121
|
+
### simwrapper open [vsp|asim]
|
|
81
122
|
|
|
82
123
|
opens a new web browser tab AND a local file server in the current directory. The site will only operate as long as you keep that local server running, so don't close the command window.
|
|
83
124
|
|
|
@@ -87,6 +128,8 @@ opens a new web browser tab AND a local file server in the current directory. Th
|
|
|
87
128
|
|
|
88
129
|
All three simwrapper commands start a small local file server, listening on a local port number. The site will only operate as long as you keep that local server running: quitting the command with CTRL-C or closing the command window will shut down the server.
|
|
89
130
|
|
|
131
|
+
---
|
|
132
|
+
|
|
90
133
|
## Security
|
|
91
134
|
|
|
92
135
|
When `simwrapper` is running, it listens for connections on your network interface. Your computer's **firewall rules and router settings** determine whether other machines on the network can access the folder, or not.
|
|
@@ -109,7 +152,7 @@ This requires Homebrew, which supplies the `brew` command.
|
|
|
109
152
|
brew install mkcert nss # installs mkcert command
|
|
110
153
|
mkcert localhost # Create PEM key/cert files for "localhost"
|
|
111
154
|
mkcert -install # Installs certificates in browser
|
|
112
|
-
|
|
155
|
+
````
|
|
113
156
|
|
|
114
157
|
This creates two files: `localhost.pem` and `localhost-key.pem`. Move them somewhere where you cn find them.
|
|
115
158
|
|
|
@@ -30,31 +30,72 @@ project, available separately at https://github.com/simwrapper/simwrapper. No mo
|
|
|
30
30
|
|
|
31
31
|
`simwrapper` knows four commands.
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
### simwrapper run [config.yaml]
|
|
34
34
|
|
|
35
|
-
starts a _local instance of the SimWrapper website_ running on your machine and
|
|
35
|
+
starts a _local instance of the SimWrapper website_ running on your machine and usually listening on port 4999. Run this command if you have a machine on your local network which contains outputs you'd like to view (such as a modeling server), and that machine has not been set up with any other file sharing software such as NGINX or Apache.
|
|
36
36
|
|
|
37
37
|
- This command is designed to support the use case where an agency has (1) a local network with files stored on a central "modeling server" or file server, and also (2) desktop machines or laptops on the local network that wish to access those files using SimWrapper.
|
|
38
38
|
- Ultimately you may decide that you want to put simwrapper behind a proxy server such as those listed, for improved performance, features, and security.
|
|
39
39
|
|
|
40
|
-
This is especially useful if you use cloud-based storage such as AWS or Azure. You can **mount your cloud storage** to a local folder using a tool such as [Rclone mount](https://rclone.org/commands/rclone_mount/), and use this `simwrapper
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
This is especially useful if you use cloud-based storage such as AWS or Azure. You can **mount your cloud storage** to a local folder using a tool such as [Rclone mount](https://rclone.org/commands/rclone_mount/), and use this `simwrapper run` to browse your files and results!
|
|
41
|
+
|
|
42
|
+
**Options:**
|
|
43
|
+
|
|
44
|
+
`simwrapper run [config-file.yaml]` will read configuration from specified file.
|
|
45
|
+
|
|
46
|
+
- If not provided, simwrapper will serve the files found in the current working folder. If provided, the YAML file can provide three sections:
|
|
47
|
+
|
|
48
|
+
- **storage** - a list of mount points (folders) that simwrapper should share
|
|
49
|
+
- **tagline** - the front page tagline, default "Transport simulation data visualizer"
|
|
50
|
+
- **readme** - Markdown filename or raw markdown text to be shown on front page
|
|
51
|
+
|
|
52
|
+
**Example: config.yaml:**
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
# --- STORAGE ----------------------
|
|
56
|
+
# **Local/network mounts only: no http URLs here**
|
|
57
|
+
# Each key defines a starting point in the local filesystem.
|
|
58
|
+
# (if no config is found, the current working folder is shared)
|
|
59
|
+
storage:
|
|
60
|
+
data:
|
|
61
|
+
path: '/Users/billy/data'
|
|
62
|
+
description: 'Local data on my laptop'
|
|
63
|
+
vsp-public:
|
|
64
|
+
path: '/Users/billy/public-svn'
|
|
65
|
+
description: 'VSP/TU-Berlin public datasets'
|
|
66
|
+
|
|
67
|
+
# --- FRONT-PAGE TEXT -------------
|
|
68
|
+
# Readme can either be a .md markdown filename,
|
|
69
|
+
# or you can put markdown text directly in this file with "readme: |"
|
|
70
|
+
#
|
|
71
|
+
tagline: 'Transport simulation data visualizer'
|
|
72
|
+
readme: 'readme.md'
|
|
73
|
+
# # or...
|
|
74
|
+
# readme: |
|
|
75
|
+
# Welcome to My SimWrapper
|
|
76
|
+
# ========================
|
|
77
|
+
# Markdown text here
|
|
78
|
+
# - notes 1
|
|
79
|
+
# - notes 2
|
|
80
|
+
```
|
|
43
81
|
|
|
44
|
-
|
|
82
|
+
---
|
|
83
|
+
### simwrapper serve
|
|
45
84
|
|
|
46
85
|
starts a local file server in the current directory. Run this command, then browse to either <https://vsp.berlin/simwrapper> or <https://activitysim.github.io/dashboard> to view your local folder outputs.
|
|
47
86
|
|
|
48
|
-
|
|
87
|
+
---
|
|
88
|
+
### simwrapper here
|
|
49
89
|
|
|
50
|
-
_Deprecated - use simwrapper
|
|
90
|
+
_Deprecated - "use simwrapper run" instead_
|
|
51
91
|
|
|
52
92
|
starts a _local copy of the SimWrapper website_ usually listening on port 8050. Run this command instead of `simwrapper serve` if you have a machine on your local network which contains outputs you'd like to view (such as a modeling server), and that machine has not been set up with any other file sharing software such as NGINX or Apache.
|
|
53
93
|
|
|
54
94
|
- This command is designed to support the use case where an agency has (1) a local network with files stored on a central "modeling server" or file server, and also (2) desktop machines or laptops on the local network that wish to access those files using SimWrapper.
|
|
55
95
|
- Note, it's not a battle-tested multi-threaded web proxy server such as Apache, NGINX, or Gunicorn. Ultimately you may decide that you want to put simwrapper behind a proxy server such as those listed, for improved performance, features, and security.
|
|
56
96
|
|
|
57
|
-
|
|
97
|
+
---
|
|
98
|
+
### simwrapper open [vsp|asim]
|
|
58
99
|
|
|
59
100
|
opens a new web browser tab AND a local file server in the current directory. The site will only operate as long as you keep that local server running, so don't close the command window.
|
|
60
101
|
|
|
@@ -64,6 +105,8 @@ opens a new web browser tab AND a local file server in the current directory. Th
|
|
|
64
105
|
|
|
65
106
|
All three simwrapper commands start a small local file server, listening on a local port number. The site will only operate as long as you keep that local server running: quitting the command with CTRL-C or closing the command window will shut down the server.
|
|
66
107
|
|
|
108
|
+
---
|
|
109
|
+
|
|
67
110
|
## Security
|
|
68
111
|
|
|
69
112
|
When `simwrapper` is running, it listens for connections on your network interface. Your computer's **firewall rules and router settings** determine whether other machines on the network can access the folder, or not.
|
|
@@ -86,7 +129,7 @@ This requires Homebrew, which supplies the `brew` command.
|
|
|
86
129
|
brew install mkcert nss # installs mkcert command
|
|
87
130
|
mkcert localhost # Create PEM key/cert files for "localhost"
|
|
88
131
|
mkcert -install # Installs certificates in browser
|
|
89
|
-
|
|
132
|
+
````
|
|
90
133
|
|
|
91
134
|
This creates two files: `localhost.pem` and `localhost-key.pem`. Move them somewhere where you cn find them.
|
|
92
135
|
|
|
@@ -27,15 +27,13 @@ logger = logging.getLogger('simwrapper')
|
|
|
27
27
|
|
|
28
28
|
# STORAGE LOCATIONS -------------------------------------------------
|
|
29
29
|
# Default is to just share the content of the starting folder.
|
|
30
|
-
|
|
31
30
|
STORAGE = {
|
|
32
31
|
"Server": "./",
|
|
33
32
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
33
|
STORAGE_ROOTS = {
|
|
37
34
|
"Server": { "path": "./", "description": os.getcwd()}
|
|
38
35
|
}
|
|
36
|
+
CONFIG = {"storage": STORAGE_ROOTS}
|
|
39
37
|
|
|
40
38
|
# ------------------------------------------------
|
|
41
39
|
def nocache(view):
|
|
@@ -113,7 +111,7 @@ class File(Resource):
|
|
|
113
111
|
class Storage(Resource):
|
|
114
112
|
@nocache
|
|
115
113
|
def get(self):
|
|
116
|
-
return
|
|
114
|
+
return CONFIG
|
|
117
115
|
|
|
118
116
|
# ------------------------------------------------
|
|
119
117
|
class Omx(Resource):
|
|
@@ -200,22 +198,45 @@ def serve_static_files(path):
|
|
|
200
198
|
|
|
201
199
|
|
|
202
200
|
def setupStorageRoots(config, port):
|
|
203
|
-
|
|
201
|
+
"""
|
|
202
|
+
If a config file was passed in, read the config from file and set things up
|
|
203
|
+
accordingly.
|
|
204
|
+
Config may have these keys: storage, readme, tagline
|
|
205
|
+
"""
|
|
206
|
+
global CONFIG, STORAGE, STORAGE_ROOTS
|
|
204
207
|
|
|
205
208
|
if config:
|
|
206
209
|
with open(config, 'r') as f:
|
|
207
|
-
|
|
210
|
+
|
|
211
|
+
YAML = yaml.safe_load(f.read())
|
|
212
|
+
|
|
213
|
+
# front page text
|
|
214
|
+
tagline = "tagline" in YAML and YAML["tagline"] or ""
|
|
215
|
+
readme = "readme" in YAML and YAML["readme"] or ""
|
|
216
|
+
if readme and not '\n' in readme:
|
|
217
|
+
with open(readme, 'r') as r:
|
|
218
|
+
readme = r.read()
|
|
219
|
+
|
|
220
|
+
# storage locations
|
|
208
221
|
STORAGE = {}
|
|
222
|
+
if "storage" in YAML:
|
|
223
|
+
STORAGE_ROOTS = YAML["storage"]
|
|
209
224
|
|
|
210
225
|
for root in STORAGE_ROOTS:
|
|
211
226
|
STORAGE[root] = '' + STORAGE_ROOTS[root]["path"]
|
|
212
|
-
|
|
213
227
|
# putting this here, but the website will replace the path given
|
|
214
228
|
# with the window href location. That way, whatever URL/ipaddr the
|
|
215
229
|
# user entered to reach the flask server will be used.
|
|
216
230
|
for root in STORAGE_ROOTS:
|
|
217
231
|
STORAGE_ROOTS[root]["path"] = f"http://localhost:{port}"
|
|
218
232
|
|
|
233
|
+
CONFIG = {
|
|
234
|
+
"storage": STORAGE_ROOTS,
|
|
235
|
+
"tagline": tagline,
|
|
236
|
+
"readme": readme
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
print('HELLO', CONFIG)
|
|
219
240
|
|
|
220
241
|
def startGunicorn(port, debug):
|
|
221
242
|
from .GunicornServer import GunicornServer
|
|
@@ -235,7 +256,6 @@ def startGunicorn(port, debug):
|
|
|
235
256
|
def startFlask(config=None, port=4999, debug=False):
|
|
236
257
|
print('\n--- SET UP: storage roots')
|
|
237
258
|
setupStorageRoots(config,port)
|
|
238
|
-
print(STORAGE)
|
|
239
259
|
|
|
240
260
|
print('\n--- START-FLASK', config, port)
|
|
241
261
|
print(f'--- If link below does not work, try server name or localhost: http://localhost:{port}\n\n')
|
|
@@ -74,7 +74,7 @@ def here():
|
|
|
74
74
|
@click.option('--debug', is_flag=True, default=False, help="Debug mode")
|
|
75
75
|
# @click.option('--cert', default=None, help="PEM Certificate filename. Provide both a certificate and key to serve HTTPS")
|
|
76
76
|
# @click.option('--key', default=None, help="PEM Key filename. Provide both a certificate and key to serve HTTPS")
|
|
77
|
-
def
|
|
77
|
+
def run(config, port, debug):
|
|
78
78
|
"""Run the SimWrapper 'flask' app for local or networked files
|
|
79
79
|
|
|
80
80
|
CONFIG is the path to the config.py file containing the root paths to be served. Defaults to the current folder if not provided.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as c,n as h,g as n,H as S,h as f,q as y,C as g,t as u}from"./index-Dx5UFeF9.js";import{r as w}from"./index-CrY58g0x.js";import{c as F,l as x}from"./turf.es-DhhXp8l8.js";import{n as b}from"./nprogress-C21mliK_.js";import{C as L,p as v}from"./Coords-CQQjH_Bj.js";import{r as C}from"./index-Bdyv2sbz.js";import{Y as k}from"./index-YpyCIT3v.js";import{f as M}from"./util-LfrgPD9b.js";import{C as T}from"./CollapsiblePanel-CvefXrxc.js";import{Z as D}from"./ZoomButtons-DL0GlLeR.js";import"./fxp-4YEvQr-_.js";import"./extends-CF3RwP-h.js";const $={messages:{en:{linewidth:"Line widths:",legend:"Legend:"},de:{linewidth:"Linienbreite:",legend:"Legende:"}}},z=c({name:"LegendBoxOD",i18n:$,props:{rows:{type:Array,required:!0}}});var O=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("div",{attrs:{id:"legend-container"}},[i("p",{staticClass:"title"},[e._v(e._s(e.$t("legend")))]),e._l(e.rows,function(s){return i("div",{staticClass:"legend-item"},[typeof s=="string"&&s.includes("#")?i("div",{staticClass:"legend-col",style:{"background-color":s}}):e._e(),typeof s=="string"&&!s.includes("#")&&s=="↓"?i("div",{staticClass:"legend-element1"},[e._v(e._s(s))]):e._e(),typeof s=="string"&&!s.includes("#")&&s!="↓"?i("div",{staticClass:"legend-element2"},[e._v(e._s(s))]):e._e()])})],2)},A=[],V=h(z,O,A,!1,null,"3d3d9829");const j=V.exports,E=c({name:"LineFilterSlider",props:{initialValue:{type:Number,required:!0}},data:()=>({sliderValue:0,options:{size:"is-small",indicator:!0,min:0,max:100,"tooltip-always":!0,tooltip:!0,data:[0,1,2,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,"Alle"]}}),mounted(){this.options["custom-formatter"]=t=>""+this.options.data[t],this.sliderValue=this.initialValue,this.sliderValue=this.options.data.includes(this.initialValue)?this.options.data.indexOf(this.initialValue):0,this.options.max=this.options.data.length-1},watch:{sliderValue(t){this.$emit("change",this.options.data[t])}}});var I=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("b-slider",e._b({staticClass:"time-slider",attrs:{"tooltip-always":""},model:{value:e.sliderValue,callback:function(s){e.sliderValue=s},expression:"sliderValue"}},"b-slider",e.options,!1),e._l(e.options.data,function(s,o){return i("b-slider-tick",{key:o,attrs:{value:o}})}),1)},R=[],W=h(E,I,R,!1,null,"db28c001");const Y=W.exports,P={messages:{en:{linewidth:"Line widths:",legend:"Legend:",trips:"trips"},de:{linewidth:"Linienbreite:",legend:"Legende:",trips:"Fahrten"}}},B=c({name:"LineFilterSlider",i18n:P,props:{rows:{type:Array,required:!0}}});var X=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("div",{attrs:{id:"scale-container"}},[i("p",{staticClass:"title"},[e._v(e._s(e.$t("linewidth")))]),i("div",{staticClass:"scale-element"},[e._v(e._s("|↔︎|"))]),i("div",{staticClass:"scale-scale"},[e._v(e._s(`~ ${this.rows[0]} `+e.$t("trips")))]),i("p")])},N=[],G=h(B,X,N,!1,null,"05aee5dc");const q=G.exports,H=c({name:"TimeSliderX",components:{},props:{useRange:Boolean,all:String,stops:{type:Array,required:!0}},data:()=>({sliderValue:0}),computed:{allStops(){return[...this.all?[this.all]:[],...this.stops]},stopLabel(){return Array.isArray(this.sliderValue)?`${this.allStops[this.sliderValue[0]]} : ${this.allStops[this.sliderValue[1]]}`:this.allStops[this.sliderValue]}},watch:{useRange(t){t?this.sliderValue=[1,this.allStops.length-1]:this.sliderValue=this.sliderValue[0]},sliderValue(){const t=Array.isArray(this.sliderValue)?[this.allStops[this.sliderValue[0]],this.allStops[this.sliderValue[1]]]:this.allStops[this.sliderValue];this.$emit("change",t)}},mounted(){},methods:{}});var Z=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("div",{staticClass:"time-slider"},[i("b-slider",{attrs:{min:0,max:e.stops.length,tooltip:!1},model:{value:e.sliderValue,callback:function(s){e.sliderValue=s},expression:"sliderValue"}},e._l(e.allStops,function(s,o){return i("b-slider-tick",{key:s,attrs:{value:o}})}),1),i("p",[i("b",[e._v(e._s(e.stopLabel))])])],1)},K=[],U=h(H,Z,K,!1,null,"e8e0a0de");const J=U.exports,Q=c({name:"ScaleSlider",props:{stops:{type:Array,required:!0},initialValue:{type:Number,required:!0}},data:()=>({sliderValue:1,options:{"tooltip-always":!0,min:0,size:"is-small",max:100,indicator:!0,data:[],"custom-formatter":{}}}),mounted(){this.options["custom-formatter"]=t=>""+this.options.data[t],this.options.max=this.stops.length-1,this.options.data=this.stops,this.sliderValue=this.stops.includes(this.initialValue)?this.stops.indexOf(this.initialValue):0},watch:{sliderValue(){this.sliderChangedEvent()}},methods:{sliderChangedEvent(){this.$emit("change",this.options.data[this.sliderValue])}}});var ee=function(){var e=this,i=e._self._c;return e._self._setupProxy,e.options.data.length?i("b-slider",e._b({staticClass:"time-slider",model:{value:e.sliderValue,callback:function(s){e.sliderValue=s},expression:"sliderValue"}},"b-slider",e.options,!1),e._l(e.options.data,function(s,o){return i("b-slider-tick",{key:o,attrs:{value:o}})}),1):e._e()},te=[],ie=h(Q,ee,te,!1,null,"44e9347b");const se=ie.exports;function oe(t){return new Worker("/assets/AggregateDatasetStreamer.worker-C0WTuhxa.js",{name:t?.name})}const ae={messages:{en:{legend:"Legend:",lineWidth:"Line width:",lineWidths:"Line widths",hide:"Hide smaller than",time:"Filter",duration:"Duration",circle:"Centroids",showCentroids:"Show centroids",showNumbers:"Show totals",total:"Totals for",origins:"Origins",dest:"Destinations"},de:{}}},d=n.state.locale.startsWith("de")?"Alle >>":"All >>",re=0,_=[1,3,5,10,25,50,100,150,200,300,400,450,500,1e3,5e3],ne=c({name:"AggregateOD",i18n:ae,components:{CollapsiblePanel:T,LegendBox:j,LineFilterSlider:Y,ScaleBox:q,ScaleSlider:se,TimeSlider:J,ZoomButtons:D},props:{root:{type:String,required:!0},subfolder:{type:String,required:!0},yamlConfig:String,config:Object,thumbnail:Boolean},data:()=>({globalState:n.state,isFinishedLoading:!1,myState:{subfolder:"",yamlConfig:"",thumbnail:!1},vizDetails:{csvFile:"",shpFile:"",dbfFile:"",projection:"",scaleFactor:1,title:"",description:"",mapIsIndependent:!1},standaloneYAMLconfig:{csvFile:"",shpFile:"",dbfFile:"",projection:"",scaleFactor:1,title:"",description:"",mapIsIndependent:!1},YAMLrequirementsOD:{shpFile:"",dbfFile:"",csvFile:"",projection:"",scaleFactor:1},containerId:`c${Math.floor(1e12*Math.random())}`,mapId:`map-c${Math.floor(1e12*Math.random())}`,centroids:{},centroidSource:{},linkData:{},spiderLinkFeatureCollection:{},zoneData:{},dailyData:{},marginals:{},hoveredStateId:0,rowName:"",colName:"",headers:[],geojson:{},idColumn:"",mapIsIndependent:!1,showTimeRange:!1,showCentroids:!0,showCentroidLabels:!0,isOrigin:!0,selectedCentroid:0,maxZonalTotal:0,loadingText:"Aggregierte Quell-Ziel Muster",mymap:{},project:{},scaleFactor:1,scaleValues:_,currentScale:_[0],currentTimeBin:d,allTimeBinsLabel:d,lineFilter:0,projection:"",hoverId:null,_mapExtentXYXY:null,_maximum:null,bounceTimeSlider:{},bounceScaleSlider:{},bounceLineFilter:{},resizer:null,isMapMoving:!1,isDarkMode:!1,csvWorker:null}),computed:{fileSystem(){const t=this.$store.state.svnProjects.filter(e=>e.slug===this.root);if(t.length===0)throw console.log("no such project"),Error;return t[0]},fileApi(){return new S(this.fileSystem,n)},isMobile(){const t=window,e=document,i=e.documentElement,s=e.getElementsByTagName("body")[0],o=t.innerWidth||i.clientWidth||s.clientWidth;return t.innerHeight||i.clientHeight||s.clientHeight,o<640},legendRows(){return["#00aa66","#880033","↓","↑"]},scaleRows(){return[Math.min(Math.round((1200*Math.pow(this.currentScale,-1)+20)*Math.sqrt(this.scaleFactor)),1e3*this.scaleFactor)]}},methods:{setupResizer(){this.resizer=new ResizeObserver(()=>{this.mymap&&this.mymap.resize()});const t=document.getElementById(this.containerId);this.resizer.observe(t)},configureSettings(){(this.vizDetails.lineWidths||this.vizDetails.lineWidth)&&(this.currentScale=this.vizDetails.lineWidth||this.vizDetails.lineWidths||1),this.vizDetails.hideSmallerThan&&(this.lineFilter=this.vizDetails.hideSmallerThan)},handleMapMotion(){const t={longitude:this.mymap.getCenter().lng,latitude:this.mymap.getCenter().lat,bearing:this.mymap.getBearing(),zoom:this.mymap.getZoom(),pitch:this.mymap.getPitch()};this.mapIsIndependent||this.$store.commit("setMapCamera",t),this.isMapMoving||(this.isMapMoving=!0)},async getVizDetails(){if(this.config)this.validateYAML(),this.vizDetails=Object.assign({},this.config);else try{const t=this.myState.yamlConfig.indexOf("/")>-1?this.myState.yamlConfig:this.myState.subfolder+"/"+this.myState.yamlConfig,e=await this.fileApi.getFileText(t);this.standaloneYAMLconfig=Object.assign({},k.parse(e)),this.validateYAML(),this.setVizDetails()}catch(t){console.error(""+t),this.$emit("error",""+t)}this.$emit("title",this.vizDetails.title),this.scaleFactor=this.vizDetails.scaleFactor,this.projection=this.vizDetails.projection,this.mapIsIndependent=!!this.vizDetails.mapIsIndependent,this.idColumn=this.vizDetails.idColumn?this.vizDetails.idColumn:"id",b.done()},validateYAML(){const t=new RegExp(".*(yml|yaml)$").test(this.myState.yamlConfig);let e={};t?e=this.standaloneYAMLconfig:e=this.config;for(const i in this.YAMLrequirementsOD)i in e||this.$emit("error",{type:f.ERROR,msg:`${this.yamlConfig}: missing required key: ${i}`,desc:""})},setVizDetails(){this.vizDetails=Object.assign({},this.vizDetails,this.standaloneYAMLconfig);const t=this.vizDetails.title?this.vizDetails.title:"Aggregate OD";this.$emit("title",t)},async findFilenameFromWildcard(t){let e=t.indexOf("/")>-1?t.substring(0,t.lastIndexOf("/")):this.subfolder;const{files:i}=await this.fileApi.getDirectory(e);let s=t.indexOf("/")===-1?t:t.substring(t.lastIndexOf("/")+1);const o=M(i,s);if(o.length===1)return`${e}/${o[0]}`;throw Error("File not found: "+t)},async loadFiles(){try{this.loadingText="Dateien laden...";const t=await this.findFilenameFromWildcard(`${this.myState.subfolder}/${this.vizDetails.shpFile}`),e=await this.findFilenameFromWildcard(`${this.myState.subfolder}/${this.vizDetails.dbfFile}`),i=await this.fileApi.getFileBlob(t),s=await C.arraybuffer(i),o=await this.fileApi.getFileBlob(e),a=await C.arraybuffer(o);return{shpFile:s,dbfFile:a}}catch(t){const e=t;let i=e.statusText||""+e;return e.url&&(i+=": "+e.url),console.error(i),this.loadingText=""+t,this.$emit("error",i),null}},async setupMap(){try{this.mymap=new y.Map({container:this.mapId,style:n.getters.mapStyle,logoPosition:"top-left"})}catch{console.error("HUH?");return}try{const t=localStorage.getItem(this.$route.fullPath+"-bounds");if(t){const e=JSON.parse(t),i=this.isMobile?0:1,s={top:50*i,bottom:50*i,right:100*i,left:50*i};this.$store.commit("setMapCamera",{longitude:.5*(e[0]+e[2]),latitude:.5*(e[1]+e[3]),zoom:8,pitch:0,bearing:0,jump:!0})}}catch{}if(this.mymap.on("click",this.handleEmptyClick),this.mymap.on("load",this.mapIsReady),this.mymap.on("move",this.handleMapMotion),this.thumbnail){let t=document.getElementsByClassName("mapboxgl-ctrl mapboxgl-ctrl-attrib mapboxgl-compact");for(const e of t)e.setAttribute("style","display: none");t=document.getElementsByClassName("mapboxgl-ctrl mapboxgl-ctrl-group");for(const e of t)e.setAttribute("style","display: none");t=document.getElementsByClassName("mapboxgl-ctrl-logo");for(const e of t)e.setAttribute("style","display: none")}else{let t=document.getElementsByClassName("mapboxgl-ctrl-logo");for(const e of t)e.setAttribute("style","margin-bottom: 3rem;")}},handleEmptyClick(t){this.mymap.queryRenderedFeatures(t.point).filter(e=>e.source==="centroids"||e.source==="spider-source").length===0&&(this.fadeUnselectedLinks(-1),this.selectedCentroid=0,this.isMobile)},async mapIsReady(){const t=await this.loadFiles();t&&(this.geojson=await this.processShapefile(t),this.geojson&&this.loadCSVData()),b.done()},createSpiderLinks(){this.spiderLinkFeatureCollection={type:"FeatureCollection",features:[]};for(const t of Object.keys(this.linkData)){const e=this.linkData[t];if(!(e.daily<=this.lineFilter))try{const i=this.centroids[e.orig].geometry.coordinates,s=this.centroids[e.dest].geometry.coordinates,o=i[1]-s[1]>0?"#00aa66":"#880033",r={id:t,orig:e.orig||0,dest:e.dest||0,daily:e.daily||0,color:o,fade:.7};r[d]=e.daily,e.values.forEach((m,l)=>{r[this.headers[l]]=m??0});const p={type:"Feature",properties:r,geometry:{type:"LineString",coordinates:[i,s]}};this.spiderLinkFeatureCollection.features.push(p)}catch{}}},updateSpiderLinks(){this.createSpiderLinks(),this.selectedCentroid?this.fadeUnselectedLinks(this.selectedCentroid):this.mymap.getSource("spider-source").setData(this.spiderLinkFeatureCollection)},buildSpiderLinks(){this.mymap.getSource("spider-source")||(this.createSpiderLinks(),this.mymap.addSource("spider-source",{data:this.spiderLinkFeatureCollection,type:"geojson"})),this.mymap.getLayer("spider-layer")&&this.mymap.removeLayer("spider-layer"),this.mymap.addLayer({id:"spider-layer",source:"spider-source",type:"line",paint:{"line-color":["get","color"],"line-width":["*",1/500*this.scaleFactor,["get","daily"]],"line-offset":["*",.5,["get","daily"]],"line-opacity":["get","fade"]},filter:[">",["get",this.currentTimeBin],0]},"centroid-layer"),this.changedScale(this.currentScale);const t=this;this.mymap.on("click","spider-layer",function(e){t.clickedOnSpiderLink(e)}),this.mymap.on("mousemove","spider-layer",function(e){t.mymap.getCanvas().style.cursor=e?"pointer":"grab"}),this.mymap.on("mouseleave","spider-layer",function(){t.mymap.getCanvas().style.cursor="grab"})},clickedOrigins(){this.isOrigin=!0,this.updateCentroidLabels(),this.convertRegionColors(this.geojson),this.mymap.getSource("shpsource").setData(this.geojson)},clickedDestinations(){this.isOrigin=!1,this.updateCentroidLabels(),this.convertRegionColors(this.geojson),this.mymap.getSource("shpsource").setData(this.geojson)},updateCentroidLabels(){const t=this.isOrigin?"{dailyFrom}":"{dailyTo}",e=this.isOrigin?"widthFrom":"widthTo";this.mymap.getLayer("centroid-layer")&&this.mymap.removeLayer("centroid-layer"),this.mymap.getLayer("centroid-label-layer")&&this.mymap.removeLayer("centroid-label-layer"),this.showCentroids&&this.mymap.addLayer({layout:{visibility:this.thumbnail?"none":"visible"},id:"centroid-layer",source:"centroids",type:"circle",paint:{"circle-color":"#ec0","circle-radius":["get",e],"circle-stroke-width":2,"circle-stroke-color":"white"},filter:[">",["get",this.isOrigin?"dailyFrom":"dailyTo"],0]}),this.showCentroidLabels&&this.mymap.addLayer({id:"centroid-label-layer",source:"centroids",type:"symbol",layout:{"text-field":t,"text-size":11},paint:this.showCentroids?{}:{"text-halo-color":"white","text-halo-width":2},filter:[">",["get",this.isOrigin?"dailyFrom":"dailyTo"],0]})},unselectAllCentroids(){this.fadeUnselectedLinks(-1),this.selectedCentroid=0},clickedOnCentroid(t){t.originalEvent.stopPropagating=!0;const i=t.features[0].properties.id;if(i===this.selectedCentroid){this.unselectAllCentroids();return}this.selectedCentroid=i,this.fadeUnselectedLinks(i)},fadeUnselectedLinks(t){const e=this.mymap;for(const i of this.spiderLinkFeatureCollection.features){const s=i.properties.id.split(":");let o=s[0]===String(t)||s[1]===String(t)?.7:re;t===-1&&(o=.7),i.properties.fade=o}e.getSource("spider-source").setData(this.spiderLinkFeatureCollection)},clickedOnSpiderLink(t){if(t.originalEvent.stopPropagating)return;const e=t.features[0].properties,i=Math.round(1e4*e.daily*this.scaleFactor)/1e4;let s=0;const o=""+e.dest+":"+e.orig;this.linkData[o]&&(s=Math.round(1e4*this.linkData[o].daily*this.scaleFactor)/1e4);const a=i+s;let r=`<h1><b>${a} Bidirectional Trip${a!==1?"s":""}</b></h1>`;r+='<p style="width: max-content">_________________________</p>',r+=`<p style="width: max-content">${i} trip${i!==1?"s":""} // ${s} reverse trip${s!==1?"s":""}</p>`,new y.Popup({closeOnClick:!0}).setLngLat(t.lngLat).setHTML(r).addTo(this.mymap)},convertRegionColors(t){for(const e of t.features){if(!e.properties)continue;let o=128+127*(1-(this.isOrigin?e.properties.dailyFrom:e.properties.dailyTo)/this.maxZonalTotal);o||(o=255),e.properties.blue=o}},handleCentroidsForTimeOfDayChange(t){const e={type:"FeatureCollection",features:[]};for(const s of this.geojson.features){const o=this.buildSingleCentroid(s);o.properties.id=s.id;const a=this.calculateCentroidValuesForZone(t,s);o.properties.dailyFrom=Math.round(1e4*a.from*this.scaleFactor)/1e4,o.properties.dailyTo=Math.round(1e4*a.to*this.scaleFactor)/1e4;let r=Math.log10(o.properties.dailyFrom);o.properties.widthFrom=6+r*3.5,r=Math.log10(o.properties.dailyTo),o.properties.widthTo=6+r*3.5,s.properties||(s.properties={}),s.properties.dailyFrom=a.from,s.properties.dailyTo=a.to,o.properties.dailyFrom+o.properties.dailyTo>0&&(e.features.push(o),s.properties&&(this.centroids[s.properties[this.idColumn]]=o))}this.centroidSource=e,this.mymap.getSource("centroids").setData(this.centroidSource),this.updateCentroidLabels()},calculateCentroidValuesForZone(t,e){let i=0,s=0;if(t===d)return s=e.properties.dailyTo,i=e.properties.dailyFrom,{from:i,to:s};const o=this.marginals.from[e.id],a=this.marginals.to[e.id];if(Array.isArray(t)){let p=this.headers.indexOf(t[0])-1;p<0&&(p=0);const m=this.headers.indexOf(t[1])-1;for(let l=p;l<=m;l++)i+=o?Math.round(o[l]):0,s+=a?Math.round(a[l]):0;return{from:i,to:s}}const r=this.headers.indexOf(t)-1;return i=o?Math.round(o[r]):0,s=a?Math.round(a[r]):0,{from:i,to:s}},buildSingleCentroid(t){t.properties||(t.properties={});let e;if(this.vizDetails.centroidColumn){let i=t.properties[this.vizDetails.centroidColumn];Array.isArray(i)||(i=i.split(",").map(s=>parseFloat(s))),e={type:"Feature",geometry:{type:"Point",coordinates:i},properties:{id:t.id},id:t.id}}else e=F(t),e.properties.id=t.id,e.id=t.id;return e},buildCentroids(t){const e={type:"FeatureCollection",features:[]};try{for(const i of t.features){if(!i.id)continue;i.properties||(i.properties={});const s=this.buildSingleCentroid(i);let o=Math.round(this.marginals.rowTotal[i.id]),a=Math.round(this.marginals.colTotal[i.id]);o||(o=0),a||(a=0),s.properties.dailyFrom=o*this.scaleFactor,s.properties.dailyTo=a*this.scaleFactor;let r=Math.log10(s.properties.dailyFrom);s.properties.widthFrom=6+r*3.5,r=Math.log10(s.properties.dailyTo),s.properties.widthTo=6+r*3.5,o&&(this.maxZonalTotal=Math.max(this.maxZonalTotal,o)),a&&(this.maxZonalTotal=Math.max(this.maxZonalTotal,a)),i.properties||(i.properties={}),i.properties.dailyFrom=o,i.properties.dailyTo=a,s.properties.dailyFrom+s.properties.dailyTo>0&&(e.features.push(s),i.properties&&(this.centroids[i.id]=s),this.updateMapExtent(s.geometry.coordinates))}}catch{this.$emit("error","Error creating centroids, does centroid column exist?")}this.centroidSource=e,this.mymap.getSource("centroids")||this.mymap.addSource("centroids",{data:this.centroidSource,type:"geojson"}),this.updateCentroidLabels(),this.mymap.on("click","centroid-layer",i=>{this.clickedOnCentroid(i)}),this.mymap.on("mousemove","centroid-layer",i=>{this.mymap.getCanvas().style.cursor=i?"pointer":"grab"}),this.mymap.on("mouseleave","centroid-layer",()=>{this.mymap.getCanvas().style.cursor="grab"})},setMapExtent(){localStorage.setItem(this.$route.fullPath+"-bounds",JSON.stringify(this._mapExtentXYXY));const t=this.thumbnail?{animate:!1}:{padding:{top:25,bottom:25,right:100,left:100},animate:!1};this.mymap.fitBounds(this._mapExtentXYXY,t)},setupKeyListeners(){window.addEventListener("keyup",t=>{t.keyCode===27&&this.pressedEscape()}),window.addEventListener("keydown",t=>{t.keyCode===38&&this.pressedArrowKey(-1),t.keyCode===40&&this.pressedArrowKey(1)})},processGeojson(){for(const t of this.geojson.features){const e=t.properties;e.dailyFrom!==0||e.dailyTo!==0?t.properties.isVisible=!0:t.properties.isVisible=!1}},async processShapefile(t){this.loadingText="Verkehrsnetz bauarbeiten...";const e=await w(t.shpFile,t.dbfFile);e.features.length>150&&(this.lineFilter=10),this.loadingText="Koordinaten berechnen...";for(const i of e.features){const s=i.properties;if(!this.idColumn&&s&&(this.idColumn=Object.keys(s)[0]),!(this.idColumn in s)){this.$emit("error",`Shapefile does not contain ID column "${this.idColumn}"`);return}i.properties&&(i.id=i.properties[this.idColumn]);try{i.geometry.type==="MultiPolygon"?this.convertMultiPolygonCoordinatesToWGS84(i):this.convertPolygonCoordinatesToWGS84(i)}catch(o){console.error("ERR with feature: "+i),console.error(o)}}return e},convertPolygonCoordinatesToWGS84(t){for(const e of t.geometry.coordinates){const i=[];for(const s of e){const o=L.toLngLat(this.projection,s);i.push(o)}e.length=0,e.push(...i)}},origConvertMultiPolygonCoordinatesToWGS84(t){for(const e of t.geometry.coordinates){const i=e[0],s=[];for(const o of i){const a=v(this.projection,"WGS84",o);s.push(a)}e[0]=s}},convertMultiPolygonCoordinatesToWGS84(t){t.geometry.coordinates=this.recurseWGS84(t.geometry.coordinates)},recurseWGS84(t){const e=[];for(let i of t)Array.isArray(i[0])?e.push(this.recurseWGS84(i)):e.push(v(this.projection,"WGS84",i));return e},async getDailyDataSummary(){const t={},e={},i={},s={};for(const o of Object.keys(this.zoneData)){i[o]=Array(this.headers.length-1).fill(0);for(const a of Object.keys(this.zoneData[o])){t[o]||(t[o]=0),e[a]||(e[a]=0),this.dailyData[o][a]&&(t[o]+=this.dailyData[o][a],e[a]+=this.dailyData[o][a]),s[a]||(s[a]=Array(this.headers.length-1).fill(0));for(let r=0;r<this.headers.length-1;r++)this.zoneData[o][a][r]&&(i[o][r]+=this.zoneData[o][a][r],s[a][r]+=this.zoneData[o][a][r])}}return{rowTotal:t,colTotal:e,from:i,to:s}},async loadCSVData(){this.loadingText="Load CSV data...";let t="";try{t=await this.findFilenameFromWildcard(`${this.myState.subfolder}/${this.vizDetails.csvFile}`)}catch{this.$store.commit("error",`Error loading ${this.myState.subfolder}/${this.vizDetails.csvFile}`);return}this.csvWorker=new oe,this.csvWorker.onmessage=e=>{const i=e.data;i.status?this.loadingText=i.status:i.error?(this.csvWorker?.terminate(),this.loadingText=i.error,this.$emit("error",{type:f.ERROR,msg:`Aggr.OD: Error loading "${this.myState.subfolder}/${this.vizDetails.csvFile}"`,desc:"Check the path and filename"})):i.finished&&(this.csvWorker?.terminate(),this.finishedLoadingData(i))},this.csvWorker.postMessage({fileSystem:this.fileSystem,filePath:t})},async finishedLoadingData(t){console.log(222,"done"),this.loadingText="Building diagram...",this.isFinishedLoading=!0,await this.$nextTick(),this.rowName=t.rowName,this.colName=t.colName,this.headers=t.headers,this.dailyData=t.dailyZoneData,this.zoneData=t.zoneData,this.linkData=t.dailyLinkData,this.marginals=await this.getDailyDataSummary(),this.buildCentroids(this.geojson),this.convertRegionColors(this.geojson),this.addGeojsonToMap(this.geojson),this.setMapExtent(),this.buildSpiderLinks(),this.setupKeyListeners(),this.loadingText=""},updateMapExtent(t){this._mapExtentXYXY[0]=Math.min(this._mapExtentXYXY[0],t[0]),this._mapExtentXYXY[1]=Math.min(this._mapExtentXYXY[1],t[1]),this._mapExtentXYXY[2]=Math.max(this._mapExtentXYXY[2],t[0]),this._mapExtentXYXY[3]=Math.max(this._mapExtentXYXY[3],t[1])},addGeojsonToMap(t){this.processGeojson(),this.addGeojsonLayers(t),this.addNeighborhoodHoverEffects()},addGeojsonLayers(t){this.mymap.getSource("shpsource")||this.mymap.addSource("shpsource",{data:t,type:"geojson"}),this.mymap.getLayer("shplayer-fill")&&this.mymap.removeLayer("shplayer-fill"),this.mymap.addLayer({id:"shplayer-fill",source:"shpsource",type:"fill",paint:{"fill-color":["rgb",["get","blue"],["get","blue"],255],"fill-opacity":.5}},"water"),this.mymap.getLayer("shplayer-border")&&this.mymap.removeLayer("shplayer-border"),this.mymap.addLayer({id:"shplayer-border",source:"shpsource",type:"line",paint:{"line-color":"#66f","line-opacity":.5,"line-width":["case",["boolean",["feature-state","hover"],!1],3,1]},filter:["==","isVisible",!0]},"centroid-layer")},addNeighborhoodHoverEffects(){const t=this;this.mymap.on("mousemove","shplayer-fill",function(e){const i=t.mymap;e.features.length>0&&(t.hoveredStateId&&i.setFeatureState({source:"shpsource",id:t.hoveredStateId},{hover:!1}),t.hoveredStateId=e.features[0].properties[t.idColumn],i.setFeatureState({source:"shpsource",id:t.hoveredStateId},{hover:!0}))}),this.mymap.on("mouseleave","shplayer-fill",function(){const e=t.mymap;t.hoveredStateId&&e.setFeatureState({source:"shpsource",id:t.hoveredStateId},{hover:!1}),t.hoveredStateId=null})},offsetLineByMeters(t,e){try{return x(t,e,{units:"meters"})}catch{}return t},pressedEscape(){this.unselectAllCentroids()},pressedArrowKey(t){},changedTimeSlider(t){this.currentTimeBin=t;const e=this.currentScale/500*this.scaleFactor;if(this.showTimeRange==!1)this.mymap.setPaintProperty("spider-layer","line-width",["*",e,["get",t]]),this.mymap.setPaintProperty("spider-layer","line-offset",["*",.5*e,["get",t]]);else{const i=["+"];let s=!1;for(const o of this.headers)o===t[0]&&(s=!0),o!==d&&(s&&i.push(["get",o]),o===t[1]&&(s=!1));this.mymap.setPaintProperty("spider-layer","line-width",["*",e,i]),this.mymap.setPaintProperty("spider-layer","line-offset",["*",.5*e,i])}this.handleCentroidsForTimeOfDayChange(t)},changedScale(t){this.isFinishedLoading&&(this.currentScale=t,this.changedTimeSlider(this.currentTimeBin))},changedLineFilter(t){t===d?this.lineFilter=1/0:this.lineFilter=t,this.updateSpiderLinks()}},watch:{"globalState.viewState"(t){if(this.mapIsIndependent)return;if(!this.mymap||this.isMapMoving||this.thumbnail){this.isMapMoving=!1;return}const{bearing:e,longitude:i,latitude:s,zoom:o,pitch:a}=t;if(o)try{this.mymap.off("move",this.handleMapMotion),this.mymap.jumpTo({bearing:e,zoom:o,center:[i,s],pitch:a}),this.mymap.on("move",this.handleMapMotion)}catch{}},"$store.state.colorScheme"(){this.isDarkMode=this.$store.state.colorScheme===g.DarkMode,this.mymap&&(this.mymap.setStyle(n.getters.mapStyle),this.mymap.on("style.load",()=>{this.buildCentroids(this.geojson),this.buildSpiderLinks(),this.addGeojsonToMap(this.geojson)}))},"$store.state.resizeEvents"(){this.mymap&&this.mymap.resize()},showTimeRange(){},showCentroids(){this.updateCentroidLabels()},showCentroidLabels(){this.updateCentroidLabels()}},async created(){this._mapExtentXYXY=[180,90,-180,-90],this._maximum=0},async mounted(){n.commit("setFullScreen",!this.thumbnail),this.isDarkMode=this.$store.state.colorScheme===g.DarkMode,this.bounceTimeSlider=u.debounce(this.changedTimeSlider,100),this.bounceScaleSlider=u.debounce(this.changedScale,50),this.bounceLineFilter=u.debounce(this.changedLineFilter,250),this.myState.thumbnail=this.thumbnail,this.myState.yamlConfig=this.yamlConfig||"",this.myState.subfolder=this.subfolder,await this.getVizDetails(),!this.thumbnail&&(this.setupMap(),this.configureSettings(),this.setupResizer())},beforeDestroy(){this.resizer?.disconnect(),this.csvWorker&&this.csvWorker.terminate()},destroyed(){n.commit("setFullScreen",!1)}});var le=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("div",{staticClass:"mycomponent",attrs:{id:e.containerId}},[e.thumbnail?e._e():i("zoom-buttons",{staticClass:"zoom-buttons"}),i("div",{staticClass:"map-container"},[i("div",{staticClass:"mymap",attrs:{id:e.mapId}}),i("div",{directives:[{name:"show",rawName:"v-show",value:!e.thumbnail&&e.loadingText,expression:"!thumbnail && loadingText"}],staticClass:"status-blob"},[i("p",[e._v(e._s(e.loadingText))])]),!e.thumbnail&&!e.loadingText?i("div",{staticClass:"lower-left"},[i("div",{staticClass:"subheading"},[e._v(e._s(e.$t("lineWidths")))]),i("scale-slider",{staticClass:"scale-slider",attrs:{stops:e.scaleValues,initialValue:e.currentScale},on:{change:e.bounceScaleSlider}}),i("div",{staticClass:"subheading"},[e._v(e._s(e.$t("hide")))]),i("line-filter-slider",{staticClass:"scale-slider",attrs:{initialValue:e.lineFilter},on:{change:e.bounceLineFilter}})],1):e._e(),!e.thumbnail&&!e.isMobile?i("div",{staticClass:"lower-right"},[i("legend-box",{staticClass:"complication",attrs:{rows:e.legendRows}}),i("scale-box",{staticClass:"complication",attrs:{rows:e.scaleRows}})],1):e._e()]),e.thumbnail?e._e():i("div",{staticClass:"widgets",style:{padding:e.yamlConfig?"0 0.5rem 0.5rem 0.5rem":"0 0"}},[this.headers.length>2?i("div",{staticClass:"widget-column",staticStyle:{"min-width":"8rem"}},[i("h4",{staticClass:"heading"},[e._v(e._s(e.$t("time")))]),i("b-checkbox",{staticClass:"checkbox",model:{value:e.showTimeRange,callback:function(s){e.showTimeRange=s},expression:"showTimeRange"}},[e._v(e._s(e.$t("duration")))]),i("time-slider",{staticClass:"xtime-slider",attrs:{useRange:e.showTimeRange,stops:e.headers,all:e.allTimeBinsLabel},on:{change:e.bounceTimeSlider}})],1):e._e(),i("div",{staticClass:"widget-column"},[i("h4",{staticClass:"heading"},[e._v(e._s(e.$t("circle")))]),i("b-checkbox",{staticClass:"checkbox",model:{value:e.showCentroids,callback:function(s){e.showCentroids=s},expression:"showCentroids"}},[e._v(" "+e._s(e.$t("showCentroids")))]),i("b-checkbox",{staticClass:"checkbox",model:{value:e.showCentroidLabels,callback:function(s){e.showCentroidLabels=s},expression:"showCentroidLabels"}},[e._v(" "+e._s(e.$t("showNumbers")))])],1),i("div",{staticClass:"widget-column",staticStyle:{margin:"0 0 0 auto"}},[i("h4",{staticClass:"heading"},[e._v(e._s(e.$t("total")))]),i("b-button",{staticClass:"is-small",class:{"is-link":e.isOrigin,"is-active":e.isOrigin},on:{click:e.clickedOrigins}},[e._v(e._s(e.$t("origins")))]),i("b-button",{staticClass:"is-small",class:{"is-link":!e.isOrigin,"is-active":!e.isOrigin},attrs:{hint:"Hide"},on:{click:e.clickedDestinations}},[e._v(e._s(e.$t("dest")))])],1)])],1)},de=[],ce=h(ne,le,de,!1,null,"1ff16231");const we=ce.exports;export{we as default};
|
|
1
|
+
import{d as c,n as h,g as n,H as S,h as f,q as y,C as g,t as u}from"./index-BvhPezkX.js";import{r as w}from"./index-CrY58g0x.js";import{c as F,l as x}from"./turf.es-DhhXp8l8.js";import{n as b}from"./nprogress-CUI5i0md.js";import{C as L,p as v}from"./Coords-CQQjH_Bj.js";import{r as C}from"./index-CsWoCkIA.js";import{Y as k}from"./index-DsrLhKEb.js";import{f as M}from"./util-vCd5pz9J.js";import{C as T}from"./CollapsiblePanel-CGEamBkr.js";import{Z as D}from"./ZoomButtons-DERh7Eho.js";import"./fxp-4YEvQr-_.js";import"./extends-CF3RwP-h.js";const $={messages:{en:{linewidth:"Line widths:",legend:"Legend:"},de:{linewidth:"Linienbreite:",legend:"Legende:"}}},z=c({name:"LegendBoxOD",i18n:$,props:{rows:{type:Array,required:!0}}});var O=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("div",{attrs:{id:"legend-container"}},[i("p",{staticClass:"title"},[e._v(e._s(e.$t("legend")))]),e._l(e.rows,function(s){return i("div",{staticClass:"legend-item"},[typeof s=="string"&&s.includes("#")?i("div",{staticClass:"legend-col",style:{"background-color":s}}):e._e(),typeof s=="string"&&!s.includes("#")&&s=="↓"?i("div",{staticClass:"legend-element1"},[e._v(e._s(s))]):e._e(),typeof s=="string"&&!s.includes("#")&&s!="↓"?i("div",{staticClass:"legend-element2"},[e._v(e._s(s))]):e._e()])})],2)},A=[],V=h(z,O,A,!1,null,"3d3d9829");const j=V.exports,E=c({name:"LineFilterSlider",props:{initialValue:{type:Number,required:!0}},data:()=>({sliderValue:0,options:{size:"is-small",indicator:!0,min:0,max:100,"tooltip-always":!0,tooltip:!0,data:[0,1,2,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,"Alle"]}}),mounted(){this.options["custom-formatter"]=t=>""+this.options.data[t],this.sliderValue=this.initialValue,this.sliderValue=this.options.data.includes(this.initialValue)?this.options.data.indexOf(this.initialValue):0,this.options.max=this.options.data.length-1},watch:{sliderValue(t){this.$emit("change",this.options.data[t])}}});var I=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("b-slider",e._b({staticClass:"time-slider",attrs:{"tooltip-always":""},model:{value:e.sliderValue,callback:function(s){e.sliderValue=s},expression:"sliderValue"}},"b-slider",e.options,!1),e._l(e.options.data,function(s,o){return i("b-slider-tick",{key:o,attrs:{value:o}})}),1)},R=[],W=h(E,I,R,!1,null,"db28c001");const Y=W.exports,P={messages:{en:{linewidth:"Line widths:",legend:"Legend:",trips:"trips"},de:{linewidth:"Linienbreite:",legend:"Legende:",trips:"Fahrten"}}},B=c({name:"LineFilterSlider",i18n:P,props:{rows:{type:Array,required:!0}}});var X=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("div",{attrs:{id:"scale-container"}},[i("p",{staticClass:"title"},[e._v(e._s(e.$t("linewidth")))]),i("div",{staticClass:"scale-element"},[e._v(e._s("|↔︎|"))]),i("div",{staticClass:"scale-scale"},[e._v(e._s(`~ ${this.rows[0]} `+e.$t("trips")))]),i("p")])},N=[],G=h(B,X,N,!1,null,"05aee5dc");const q=G.exports,H=c({name:"TimeSliderX",components:{},props:{useRange:Boolean,all:String,stops:{type:Array,required:!0}},data:()=>({sliderValue:0}),computed:{allStops(){return[...this.all?[this.all]:[],...this.stops]},stopLabel(){return Array.isArray(this.sliderValue)?`${this.allStops[this.sliderValue[0]]} : ${this.allStops[this.sliderValue[1]]}`:this.allStops[this.sliderValue]}},watch:{useRange(t){t?this.sliderValue=[1,this.allStops.length-1]:this.sliderValue=this.sliderValue[0]},sliderValue(){const t=Array.isArray(this.sliderValue)?[this.allStops[this.sliderValue[0]],this.allStops[this.sliderValue[1]]]:this.allStops[this.sliderValue];this.$emit("change",t)}},mounted(){},methods:{}});var Z=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("div",{staticClass:"time-slider"},[i("b-slider",{attrs:{min:0,max:e.stops.length,tooltip:!1},model:{value:e.sliderValue,callback:function(s){e.sliderValue=s},expression:"sliderValue"}},e._l(e.allStops,function(s,o){return i("b-slider-tick",{key:s,attrs:{value:o}})}),1),i("p",[i("b",[e._v(e._s(e.stopLabel))])])],1)},K=[],U=h(H,Z,K,!1,null,"e8e0a0de");const J=U.exports,Q=c({name:"ScaleSlider",props:{stops:{type:Array,required:!0},initialValue:{type:Number,required:!0}},data:()=>({sliderValue:1,options:{"tooltip-always":!0,min:0,size:"is-small",max:100,indicator:!0,data:[],"custom-formatter":{}}}),mounted(){this.options["custom-formatter"]=t=>""+this.options.data[t],this.options.max=this.stops.length-1,this.options.data=this.stops,this.sliderValue=this.stops.includes(this.initialValue)?this.stops.indexOf(this.initialValue):0},watch:{sliderValue(){this.sliderChangedEvent()}},methods:{sliderChangedEvent(){this.$emit("change",this.options.data[this.sliderValue])}}});var ee=function(){var e=this,i=e._self._c;return e._self._setupProxy,e.options.data.length?i("b-slider",e._b({staticClass:"time-slider",model:{value:e.sliderValue,callback:function(s){e.sliderValue=s},expression:"sliderValue"}},"b-slider",e.options,!1),e._l(e.options.data,function(s,o){return i("b-slider-tick",{key:o,attrs:{value:o}})}),1):e._e()},te=[],ie=h(Q,ee,te,!1,null,"44e9347b");const se=ie.exports;function oe(t){return new Worker("/assets/AggregateDatasetStreamer.worker-C0WTuhxa.js",{name:t?.name})}const ae={messages:{en:{legend:"Legend:",lineWidth:"Line width:",lineWidths:"Line widths",hide:"Hide smaller than",time:"Filter",duration:"Duration",circle:"Centroids",showCentroids:"Show centroids",showNumbers:"Show totals",total:"Totals for",origins:"Origins",dest:"Destinations"},de:{}}},d=n.state.locale.startsWith("de")?"Alle >>":"All >>",re=0,_=[1,3,5,10,25,50,100,150,200,300,400,450,500,1e3,5e3],ne=c({name:"AggregateOD",i18n:ae,components:{CollapsiblePanel:T,LegendBox:j,LineFilterSlider:Y,ScaleBox:q,ScaleSlider:se,TimeSlider:J,ZoomButtons:D},props:{root:{type:String,required:!0},subfolder:{type:String,required:!0},yamlConfig:String,config:Object,thumbnail:Boolean},data:()=>({globalState:n.state,isFinishedLoading:!1,myState:{subfolder:"",yamlConfig:"",thumbnail:!1},vizDetails:{csvFile:"",shpFile:"",dbfFile:"",projection:"",scaleFactor:1,title:"",description:"",mapIsIndependent:!1},standaloneYAMLconfig:{csvFile:"",shpFile:"",dbfFile:"",projection:"",scaleFactor:1,title:"",description:"",mapIsIndependent:!1},YAMLrequirementsOD:{shpFile:"",dbfFile:"",csvFile:"",projection:"",scaleFactor:1},containerId:`c${Math.floor(1e12*Math.random())}`,mapId:`map-c${Math.floor(1e12*Math.random())}`,centroids:{},centroidSource:{},linkData:{},spiderLinkFeatureCollection:{},zoneData:{},dailyData:{},marginals:{},hoveredStateId:0,rowName:"",colName:"",headers:[],geojson:{},idColumn:"",mapIsIndependent:!1,showTimeRange:!1,showCentroids:!0,showCentroidLabels:!0,isOrigin:!0,selectedCentroid:0,maxZonalTotal:0,loadingText:"Aggregierte Quell-Ziel Muster",mymap:{},project:{},scaleFactor:1,scaleValues:_,currentScale:_[0],currentTimeBin:d,allTimeBinsLabel:d,lineFilter:0,projection:"",hoverId:null,_mapExtentXYXY:null,_maximum:null,bounceTimeSlider:{},bounceScaleSlider:{},bounceLineFilter:{},resizer:null,isMapMoving:!1,isDarkMode:!1,csvWorker:null}),computed:{fileSystem(){const t=this.$store.state.svnProjects.filter(e=>e.slug===this.root);if(t.length===0)throw console.log("no such project"),Error;return t[0]},fileApi(){return new S(this.fileSystem,n)},isMobile(){const t=window,e=document,i=e.documentElement,s=e.getElementsByTagName("body")[0],o=t.innerWidth||i.clientWidth||s.clientWidth;return t.innerHeight||i.clientHeight||s.clientHeight,o<640},legendRows(){return["#00aa66","#880033","↓","↑"]},scaleRows(){return[Math.min(Math.round((1200*Math.pow(this.currentScale,-1)+20)*Math.sqrt(this.scaleFactor)),1e3*this.scaleFactor)]}},methods:{setupResizer(){this.resizer=new ResizeObserver(()=>{this.mymap&&this.mymap.resize()});const t=document.getElementById(this.containerId);this.resizer.observe(t)},configureSettings(){(this.vizDetails.lineWidths||this.vizDetails.lineWidth)&&(this.currentScale=this.vizDetails.lineWidth||this.vizDetails.lineWidths||1),this.vizDetails.hideSmallerThan&&(this.lineFilter=this.vizDetails.hideSmallerThan)},handleMapMotion(){const t={longitude:this.mymap.getCenter().lng,latitude:this.mymap.getCenter().lat,bearing:this.mymap.getBearing(),zoom:this.mymap.getZoom(),pitch:this.mymap.getPitch()};this.mapIsIndependent||this.$store.commit("setMapCamera",t),this.isMapMoving||(this.isMapMoving=!0)},async getVizDetails(){if(this.config)this.validateYAML(),this.vizDetails=Object.assign({},this.config);else try{const t=this.myState.yamlConfig.indexOf("/")>-1?this.myState.yamlConfig:this.myState.subfolder+"/"+this.myState.yamlConfig,e=await this.fileApi.getFileText(t);this.standaloneYAMLconfig=Object.assign({},k.parse(e)),this.validateYAML(),this.setVizDetails()}catch(t){console.error(""+t),this.$emit("error",""+t)}this.$emit("title",this.vizDetails.title),this.scaleFactor=this.vizDetails.scaleFactor,this.projection=this.vizDetails.projection,this.mapIsIndependent=!!this.vizDetails.mapIsIndependent,this.idColumn=this.vizDetails.idColumn?this.vizDetails.idColumn:"id",b.done()},validateYAML(){const t=new RegExp(".*(yml|yaml)$").test(this.myState.yamlConfig);let e={};t?e=this.standaloneYAMLconfig:e=this.config;for(const i in this.YAMLrequirementsOD)i in e||this.$emit("error",{type:f.ERROR,msg:`${this.yamlConfig}: missing required key: ${i}`,desc:""})},setVizDetails(){this.vizDetails=Object.assign({},this.vizDetails,this.standaloneYAMLconfig);const t=this.vizDetails.title?this.vizDetails.title:"Aggregate OD";this.$emit("title",t)},async findFilenameFromWildcard(t){let e=t.indexOf("/")>-1?t.substring(0,t.lastIndexOf("/")):this.subfolder;const{files:i}=await this.fileApi.getDirectory(e);let s=t.indexOf("/")===-1?t:t.substring(t.lastIndexOf("/")+1);const o=M(i,s);if(o.length===1)return`${e}/${o[0]}`;throw Error("File not found: "+t)},async loadFiles(){try{this.loadingText="Dateien laden...";const t=await this.findFilenameFromWildcard(`${this.myState.subfolder}/${this.vizDetails.shpFile}`),e=await this.findFilenameFromWildcard(`${this.myState.subfolder}/${this.vizDetails.dbfFile}`),i=await this.fileApi.getFileBlob(t),s=await C.arraybuffer(i),o=await this.fileApi.getFileBlob(e),a=await C.arraybuffer(o);return{shpFile:s,dbfFile:a}}catch(t){const e=t;let i=e.statusText||""+e;return e.url&&(i+=": "+e.url),console.error(i),this.loadingText=""+t,this.$emit("error",i),null}},async setupMap(){try{this.mymap=new y.Map({container:this.mapId,style:n.getters.mapStyle,logoPosition:"top-left"})}catch{console.error("HUH?");return}try{const t=localStorage.getItem(this.$route.fullPath+"-bounds");if(t){const e=JSON.parse(t),i=this.isMobile?0:1,s={top:50*i,bottom:50*i,right:100*i,left:50*i};this.$store.commit("setMapCamera",{longitude:.5*(e[0]+e[2]),latitude:.5*(e[1]+e[3]),zoom:8,pitch:0,bearing:0,jump:!0})}}catch{}if(this.mymap.on("click",this.handleEmptyClick),this.mymap.on("load",this.mapIsReady),this.mymap.on("move",this.handleMapMotion),this.thumbnail){let t=document.getElementsByClassName("mapboxgl-ctrl mapboxgl-ctrl-attrib mapboxgl-compact");for(const e of t)e.setAttribute("style","display: none");t=document.getElementsByClassName("mapboxgl-ctrl mapboxgl-ctrl-group");for(const e of t)e.setAttribute("style","display: none");t=document.getElementsByClassName("mapboxgl-ctrl-logo");for(const e of t)e.setAttribute("style","display: none")}else{let t=document.getElementsByClassName("mapboxgl-ctrl-logo");for(const e of t)e.setAttribute("style","margin-bottom: 3rem;")}},handleEmptyClick(t){this.mymap.queryRenderedFeatures(t.point).filter(e=>e.source==="centroids"||e.source==="spider-source").length===0&&(this.fadeUnselectedLinks(-1),this.selectedCentroid=0,this.isMobile)},async mapIsReady(){const t=await this.loadFiles();t&&(this.geojson=await this.processShapefile(t),this.geojson&&this.loadCSVData()),b.done()},createSpiderLinks(){this.spiderLinkFeatureCollection={type:"FeatureCollection",features:[]};for(const t of Object.keys(this.linkData)){const e=this.linkData[t];if(!(e.daily<=this.lineFilter))try{const i=this.centroids[e.orig].geometry.coordinates,s=this.centroids[e.dest].geometry.coordinates,o=i[1]-s[1]>0?"#00aa66":"#880033",r={id:t,orig:e.orig||0,dest:e.dest||0,daily:e.daily||0,color:o,fade:.7};r[d]=e.daily,e.values.forEach((m,l)=>{r[this.headers[l]]=m??0});const p={type:"Feature",properties:r,geometry:{type:"LineString",coordinates:[i,s]}};this.spiderLinkFeatureCollection.features.push(p)}catch{}}},updateSpiderLinks(){this.createSpiderLinks(),this.selectedCentroid?this.fadeUnselectedLinks(this.selectedCentroid):this.mymap.getSource("spider-source").setData(this.spiderLinkFeatureCollection)},buildSpiderLinks(){this.mymap.getSource("spider-source")||(this.createSpiderLinks(),this.mymap.addSource("spider-source",{data:this.spiderLinkFeatureCollection,type:"geojson"})),this.mymap.getLayer("spider-layer")&&this.mymap.removeLayer("spider-layer"),this.mymap.addLayer({id:"spider-layer",source:"spider-source",type:"line",paint:{"line-color":["get","color"],"line-width":["*",1/500*this.scaleFactor,["get","daily"]],"line-offset":["*",.5,["get","daily"]],"line-opacity":["get","fade"]},filter:[">",["get",this.currentTimeBin],0]},"centroid-layer"),this.changedScale(this.currentScale);const t=this;this.mymap.on("click","spider-layer",function(e){t.clickedOnSpiderLink(e)}),this.mymap.on("mousemove","spider-layer",function(e){t.mymap.getCanvas().style.cursor=e?"pointer":"grab"}),this.mymap.on("mouseleave","spider-layer",function(){t.mymap.getCanvas().style.cursor="grab"})},clickedOrigins(){this.isOrigin=!0,this.updateCentroidLabels(),this.convertRegionColors(this.geojson),this.mymap.getSource("shpsource").setData(this.geojson)},clickedDestinations(){this.isOrigin=!1,this.updateCentroidLabels(),this.convertRegionColors(this.geojson),this.mymap.getSource("shpsource").setData(this.geojson)},updateCentroidLabels(){const t=this.isOrigin?"{dailyFrom}":"{dailyTo}",e=this.isOrigin?"widthFrom":"widthTo";this.mymap.getLayer("centroid-layer")&&this.mymap.removeLayer("centroid-layer"),this.mymap.getLayer("centroid-label-layer")&&this.mymap.removeLayer("centroid-label-layer"),this.showCentroids&&this.mymap.addLayer({layout:{visibility:this.thumbnail?"none":"visible"},id:"centroid-layer",source:"centroids",type:"circle",paint:{"circle-color":"#ec0","circle-radius":["get",e],"circle-stroke-width":2,"circle-stroke-color":"white"},filter:[">",["get",this.isOrigin?"dailyFrom":"dailyTo"],0]}),this.showCentroidLabels&&this.mymap.addLayer({id:"centroid-label-layer",source:"centroids",type:"symbol",layout:{"text-field":t,"text-size":11},paint:this.showCentroids?{}:{"text-halo-color":"white","text-halo-width":2},filter:[">",["get",this.isOrigin?"dailyFrom":"dailyTo"],0]})},unselectAllCentroids(){this.fadeUnselectedLinks(-1),this.selectedCentroid=0},clickedOnCentroid(t){t.originalEvent.stopPropagating=!0;const i=t.features[0].properties.id;if(i===this.selectedCentroid){this.unselectAllCentroids();return}this.selectedCentroid=i,this.fadeUnselectedLinks(i)},fadeUnselectedLinks(t){const e=this.mymap;for(const i of this.spiderLinkFeatureCollection.features){const s=i.properties.id.split(":");let o=s[0]===String(t)||s[1]===String(t)?.7:re;t===-1&&(o=.7),i.properties.fade=o}e.getSource("spider-source").setData(this.spiderLinkFeatureCollection)},clickedOnSpiderLink(t){if(t.originalEvent.stopPropagating)return;const e=t.features[0].properties,i=Math.round(1e4*e.daily*this.scaleFactor)/1e4;let s=0;const o=""+e.dest+":"+e.orig;this.linkData[o]&&(s=Math.round(1e4*this.linkData[o].daily*this.scaleFactor)/1e4);const a=i+s;let r=`<h1><b>${a} Bidirectional Trip${a!==1?"s":""}</b></h1>`;r+='<p style="width: max-content">_________________________</p>',r+=`<p style="width: max-content">${i} trip${i!==1?"s":""} // ${s} reverse trip${s!==1?"s":""}</p>`,new y.Popup({closeOnClick:!0}).setLngLat(t.lngLat).setHTML(r).addTo(this.mymap)},convertRegionColors(t){for(const e of t.features){if(!e.properties)continue;let o=128+127*(1-(this.isOrigin?e.properties.dailyFrom:e.properties.dailyTo)/this.maxZonalTotal);o||(o=255),e.properties.blue=o}},handleCentroidsForTimeOfDayChange(t){const e={type:"FeatureCollection",features:[]};for(const s of this.geojson.features){const o=this.buildSingleCentroid(s);o.properties.id=s.id;const a=this.calculateCentroidValuesForZone(t,s);o.properties.dailyFrom=Math.round(1e4*a.from*this.scaleFactor)/1e4,o.properties.dailyTo=Math.round(1e4*a.to*this.scaleFactor)/1e4;let r=Math.log10(o.properties.dailyFrom);o.properties.widthFrom=6+r*3.5,r=Math.log10(o.properties.dailyTo),o.properties.widthTo=6+r*3.5,s.properties||(s.properties={}),s.properties.dailyFrom=a.from,s.properties.dailyTo=a.to,o.properties.dailyFrom+o.properties.dailyTo>0&&(e.features.push(o),s.properties&&(this.centroids[s.properties[this.idColumn]]=o))}this.centroidSource=e,this.mymap.getSource("centroids").setData(this.centroidSource),this.updateCentroidLabels()},calculateCentroidValuesForZone(t,e){let i=0,s=0;if(t===d)return s=e.properties.dailyTo,i=e.properties.dailyFrom,{from:i,to:s};const o=this.marginals.from[e.id],a=this.marginals.to[e.id];if(Array.isArray(t)){let p=this.headers.indexOf(t[0])-1;p<0&&(p=0);const m=this.headers.indexOf(t[1])-1;for(let l=p;l<=m;l++)i+=o?Math.round(o[l]):0,s+=a?Math.round(a[l]):0;return{from:i,to:s}}const r=this.headers.indexOf(t)-1;return i=o?Math.round(o[r]):0,s=a?Math.round(a[r]):0,{from:i,to:s}},buildSingleCentroid(t){t.properties||(t.properties={});let e;if(this.vizDetails.centroidColumn){let i=t.properties[this.vizDetails.centroidColumn];Array.isArray(i)||(i=i.split(",").map(s=>parseFloat(s))),e={type:"Feature",geometry:{type:"Point",coordinates:i},properties:{id:t.id},id:t.id}}else e=F(t),e.properties.id=t.id,e.id=t.id;return e},buildCentroids(t){const e={type:"FeatureCollection",features:[]};try{for(const i of t.features){if(!i.id)continue;i.properties||(i.properties={});const s=this.buildSingleCentroid(i);let o=Math.round(this.marginals.rowTotal[i.id]),a=Math.round(this.marginals.colTotal[i.id]);o||(o=0),a||(a=0),s.properties.dailyFrom=o*this.scaleFactor,s.properties.dailyTo=a*this.scaleFactor;let r=Math.log10(s.properties.dailyFrom);s.properties.widthFrom=6+r*3.5,r=Math.log10(s.properties.dailyTo),s.properties.widthTo=6+r*3.5,o&&(this.maxZonalTotal=Math.max(this.maxZonalTotal,o)),a&&(this.maxZonalTotal=Math.max(this.maxZonalTotal,a)),i.properties||(i.properties={}),i.properties.dailyFrom=o,i.properties.dailyTo=a,s.properties.dailyFrom+s.properties.dailyTo>0&&(e.features.push(s),i.properties&&(this.centroids[i.id]=s),this.updateMapExtent(s.geometry.coordinates))}}catch{this.$emit("error","Error creating centroids, does centroid column exist?")}this.centroidSource=e,this.mymap.getSource("centroids")||this.mymap.addSource("centroids",{data:this.centroidSource,type:"geojson"}),this.updateCentroidLabels(),this.mymap.on("click","centroid-layer",i=>{this.clickedOnCentroid(i)}),this.mymap.on("mousemove","centroid-layer",i=>{this.mymap.getCanvas().style.cursor=i?"pointer":"grab"}),this.mymap.on("mouseleave","centroid-layer",()=>{this.mymap.getCanvas().style.cursor="grab"})},setMapExtent(){localStorage.setItem(this.$route.fullPath+"-bounds",JSON.stringify(this._mapExtentXYXY));const t=this.thumbnail?{animate:!1}:{padding:{top:25,bottom:25,right:100,left:100},animate:!1};this.mymap.fitBounds(this._mapExtentXYXY,t)},setupKeyListeners(){window.addEventListener("keyup",t=>{t.keyCode===27&&this.pressedEscape()}),window.addEventListener("keydown",t=>{t.keyCode===38&&this.pressedArrowKey(-1),t.keyCode===40&&this.pressedArrowKey(1)})},processGeojson(){for(const t of this.geojson.features){const e=t.properties;e.dailyFrom!==0||e.dailyTo!==0?t.properties.isVisible=!0:t.properties.isVisible=!1}},async processShapefile(t){this.loadingText="Verkehrsnetz bauarbeiten...";const e=await w(t.shpFile,t.dbfFile);e.features.length>150&&(this.lineFilter=10),this.loadingText="Koordinaten berechnen...";for(const i of e.features){const s=i.properties;if(!this.idColumn&&s&&(this.idColumn=Object.keys(s)[0]),!(this.idColumn in s)){this.$emit("error",`Shapefile does not contain ID column "${this.idColumn}"`);return}i.properties&&(i.id=i.properties[this.idColumn]);try{i.geometry.type==="MultiPolygon"?this.convertMultiPolygonCoordinatesToWGS84(i):this.convertPolygonCoordinatesToWGS84(i)}catch(o){console.error("ERR with feature: "+i),console.error(o)}}return e},convertPolygonCoordinatesToWGS84(t){for(const e of t.geometry.coordinates){const i=[];for(const s of e){const o=L.toLngLat(this.projection,s);i.push(o)}e.length=0,e.push(...i)}},origConvertMultiPolygonCoordinatesToWGS84(t){for(const e of t.geometry.coordinates){const i=e[0],s=[];for(const o of i){const a=v(this.projection,"WGS84",o);s.push(a)}e[0]=s}},convertMultiPolygonCoordinatesToWGS84(t){t.geometry.coordinates=this.recurseWGS84(t.geometry.coordinates)},recurseWGS84(t){const e=[];for(let i of t)Array.isArray(i[0])?e.push(this.recurseWGS84(i)):e.push(v(this.projection,"WGS84",i));return e},async getDailyDataSummary(){const t={},e={},i={},s={};for(const o of Object.keys(this.zoneData)){i[o]=Array(this.headers.length-1).fill(0);for(const a of Object.keys(this.zoneData[o])){t[o]||(t[o]=0),e[a]||(e[a]=0),this.dailyData[o][a]&&(t[o]+=this.dailyData[o][a],e[a]+=this.dailyData[o][a]),s[a]||(s[a]=Array(this.headers.length-1).fill(0));for(let r=0;r<this.headers.length-1;r++)this.zoneData[o][a][r]&&(i[o][r]+=this.zoneData[o][a][r],s[a][r]+=this.zoneData[o][a][r])}}return{rowTotal:t,colTotal:e,from:i,to:s}},async loadCSVData(){this.loadingText="Load CSV data...";let t="";try{t=await this.findFilenameFromWildcard(`${this.myState.subfolder}/${this.vizDetails.csvFile}`)}catch{this.$store.commit("error",`Error loading ${this.myState.subfolder}/${this.vizDetails.csvFile}`);return}this.csvWorker=new oe,this.csvWorker.onmessage=e=>{const i=e.data;i.status?this.loadingText=i.status:i.error?(this.csvWorker?.terminate(),this.loadingText=i.error,this.$emit("error",{type:f.ERROR,msg:`Aggr.OD: Error loading "${this.myState.subfolder}/${this.vizDetails.csvFile}"`,desc:"Check the path and filename"})):i.finished&&(this.csvWorker?.terminate(),this.finishedLoadingData(i))},this.csvWorker.postMessage({fileSystem:this.fileSystem,filePath:t})},async finishedLoadingData(t){console.log(222,"done"),this.loadingText="Building diagram...",this.isFinishedLoading=!0,await this.$nextTick(),this.rowName=t.rowName,this.colName=t.colName,this.headers=t.headers,this.dailyData=t.dailyZoneData,this.zoneData=t.zoneData,this.linkData=t.dailyLinkData,this.marginals=await this.getDailyDataSummary(),this.buildCentroids(this.geojson),this.convertRegionColors(this.geojson),this.addGeojsonToMap(this.geojson),this.setMapExtent(),this.buildSpiderLinks(),this.setupKeyListeners(),this.loadingText=""},updateMapExtent(t){this._mapExtentXYXY[0]=Math.min(this._mapExtentXYXY[0],t[0]),this._mapExtentXYXY[1]=Math.min(this._mapExtentXYXY[1],t[1]),this._mapExtentXYXY[2]=Math.max(this._mapExtentXYXY[2],t[0]),this._mapExtentXYXY[3]=Math.max(this._mapExtentXYXY[3],t[1])},addGeojsonToMap(t){this.processGeojson(),this.addGeojsonLayers(t),this.addNeighborhoodHoverEffects()},addGeojsonLayers(t){this.mymap.getSource("shpsource")||this.mymap.addSource("shpsource",{data:t,type:"geojson"}),this.mymap.getLayer("shplayer-fill")&&this.mymap.removeLayer("shplayer-fill"),this.mymap.addLayer({id:"shplayer-fill",source:"shpsource",type:"fill",paint:{"fill-color":["rgb",["get","blue"],["get","blue"],255],"fill-opacity":.5}},"water"),this.mymap.getLayer("shplayer-border")&&this.mymap.removeLayer("shplayer-border"),this.mymap.addLayer({id:"shplayer-border",source:"shpsource",type:"line",paint:{"line-color":"#66f","line-opacity":.5,"line-width":["case",["boolean",["feature-state","hover"],!1],3,1]},filter:["==","isVisible",!0]},"centroid-layer")},addNeighborhoodHoverEffects(){const t=this;this.mymap.on("mousemove","shplayer-fill",function(e){const i=t.mymap;e.features.length>0&&(t.hoveredStateId&&i.setFeatureState({source:"shpsource",id:t.hoveredStateId},{hover:!1}),t.hoveredStateId=e.features[0].properties[t.idColumn],i.setFeatureState({source:"shpsource",id:t.hoveredStateId},{hover:!0}))}),this.mymap.on("mouseleave","shplayer-fill",function(){const e=t.mymap;t.hoveredStateId&&e.setFeatureState({source:"shpsource",id:t.hoveredStateId},{hover:!1}),t.hoveredStateId=null})},offsetLineByMeters(t,e){try{return x(t,e,{units:"meters"})}catch{}return t},pressedEscape(){this.unselectAllCentroids()},pressedArrowKey(t){},changedTimeSlider(t){this.currentTimeBin=t;const e=this.currentScale/500*this.scaleFactor;if(this.showTimeRange==!1)this.mymap.setPaintProperty("spider-layer","line-width",["*",e,["get",t]]),this.mymap.setPaintProperty("spider-layer","line-offset",["*",.5*e,["get",t]]);else{const i=["+"];let s=!1;for(const o of this.headers)o===t[0]&&(s=!0),o!==d&&(s&&i.push(["get",o]),o===t[1]&&(s=!1));this.mymap.setPaintProperty("spider-layer","line-width",["*",e,i]),this.mymap.setPaintProperty("spider-layer","line-offset",["*",.5*e,i])}this.handleCentroidsForTimeOfDayChange(t)},changedScale(t){this.isFinishedLoading&&(this.currentScale=t,this.changedTimeSlider(this.currentTimeBin))},changedLineFilter(t){t===d?this.lineFilter=1/0:this.lineFilter=t,this.updateSpiderLinks()}},watch:{"globalState.viewState"(t){if(this.mapIsIndependent)return;if(!this.mymap||this.isMapMoving||this.thumbnail){this.isMapMoving=!1;return}const{bearing:e,longitude:i,latitude:s,zoom:o,pitch:a}=t;if(o)try{this.mymap.off("move",this.handleMapMotion),this.mymap.jumpTo({bearing:e,zoom:o,center:[i,s],pitch:a}),this.mymap.on("move",this.handleMapMotion)}catch{}},"$store.state.colorScheme"(){this.isDarkMode=this.$store.state.colorScheme===g.DarkMode,this.mymap&&(this.mymap.setStyle(n.getters.mapStyle),this.mymap.on("style.load",()=>{this.buildCentroids(this.geojson),this.buildSpiderLinks(),this.addGeojsonToMap(this.geojson)}))},"$store.state.resizeEvents"(){this.mymap&&this.mymap.resize()},showTimeRange(){},showCentroids(){this.updateCentroidLabels()},showCentroidLabels(){this.updateCentroidLabels()}},async created(){this._mapExtentXYXY=[180,90,-180,-90],this._maximum=0},async mounted(){n.commit("setFullScreen",!this.thumbnail),this.isDarkMode=this.$store.state.colorScheme===g.DarkMode,this.bounceTimeSlider=u.debounce(this.changedTimeSlider,100),this.bounceScaleSlider=u.debounce(this.changedScale,50),this.bounceLineFilter=u.debounce(this.changedLineFilter,250),this.myState.thumbnail=this.thumbnail,this.myState.yamlConfig=this.yamlConfig||"",this.myState.subfolder=this.subfolder,await this.getVizDetails(),!this.thumbnail&&(this.setupMap(),this.configureSettings(),this.setupResizer())},beforeDestroy(){this.resizer?.disconnect(),this.csvWorker&&this.csvWorker.terminate()},destroyed(){n.commit("setFullScreen",!1)}});var le=function(){var e=this,i=e._self._c;return e._self._setupProxy,i("div",{staticClass:"mycomponent",attrs:{id:e.containerId}},[e.thumbnail?e._e():i("zoom-buttons",{staticClass:"zoom-buttons"}),i("div",{staticClass:"map-container"},[i("div",{staticClass:"mymap",attrs:{id:e.mapId}}),i("div",{directives:[{name:"show",rawName:"v-show",value:!e.thumbnail&&e.loadingText,expression:"!thumbnail && loadingText"}],staticClass:"status-blob"},[i("p",[e._v(e._s(e.loadingText))])]),!e.thumbnail&&!e.loadingText?i("div",{staticClass:"lower-left"},[i("div",{staticClass:"subheading"},[e._v(e._s(e.$t("lineWidths")))]),i("scale-slider",{staticClass:"scale-slider",attrs:{stops:e.scaleValues,initialValue:e.currentScale},on:{change:e.bounceScaleSlider}}),i("div",{staticClass:"subheading"},[e._v(e._s(e.$t("hide")))]),i("line-filter-slider",{staticClass:"scale-slider",attrs:{initialValue:e.lineFilter},on:{change:e.bounceLineFilter}})],1):e._e(),!e.thumbnail&&!e.isMobile?i("div",{staticClass:"lower-right"},[i("legend-box",{staticClass:"complication",attrs:{rows:e.legendRows}}),i("scale-box",{staticClass:"complication",attrs:{rows:e.scaleRows}})],1):e._e()]),e.thumbnail?e._e():i("div",{staticClass:"widgets",style:{padding:e.yamlConfig?"0 0.5rem 0.5rem 0.5rem":"0 0"}},[this.headers.length>2?i("div",{staticClass:"widget-column",staticStyle:{"min-width":"8rem"}},[i("h4",{staticClass:"heading"},[e._v(e._s(e.$t("time")))]),i("b-checkbox",{staticClass:"checkbox",model:{value:e.showTimeRange,callback:function(s){e.showTimeRange=s},expression:"showTimeRange"}},[e._v(e._s(e.$t("duration")))]),i("time-slider",{staticClass:"xtime-slider",attrs:{useRange:e.showTimeRange,stops:e.headers,all:e.allTimeBinsLabel},on:{change:e.bounceTimeSlider}})],1):e._e(),i("div",{staticClass:"widget-column"},[i("h4",{staticClass:"heading"},[e._v(e._s(e.$t("circle")))]),i("b-checkbox",{staticClass:"checkbox",model:{value:e.showCentroids,callback:function(s){e.showCentroids=s},expression:"showCentroids"}},[e._v(" "+e._s(e.$t("showCentroids")))]),i("b-checkbox",{staticClass:"checkbox",model:{value:e.showCentroidLabels,callback:function(s){e.showCentroidLabels=s},expression:"showCentroidLabels"}},[e._v(" "+e._s(e.$t("showNumbers")))])],1),i("div",{staticClass:"widget-column",staticStyle:{margin:"0 0 0 auto"}},[i("h4",{staticClass:"heading"},[e._v(e._s(e.$t("total")))]),i("b-button",{staticClass:"is-small",class:{"is-link":e.isOrigin,"is-active":e.isOrigin},on:{click:e.clickedOrigins}},[e._v(e._s(e.$t("origins")))]),i("b-button",{staticClass:"is-small",class:{"is-link":!e.isOrigin,"is-active":!e.isOrigin},attrs:{hint:"Hide"},on:{click:e.clickedDestinations}},[e._v(e._s(e.$t("dest")))])],1)])],1)},de=[],ce=h(ne,le,de,!1,null,"1ff16231");const we=ce.exports;export{we as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as m,g as r,q as p,C as n,n as l}from"./index-
|
|
1
|
+
import{d as m,g as r,q as p,C as n,n as l}from"./index-BvhPezkX.js";const h=m({name:"BackgroundMapOnTop",components:{},data:()=>({containerId:`c${Math.floor(1e12*Math.random())}`,globalState:r.state,isDarkMode:!1,isMapMoving:!1,mapId:`map-${Math.floor(1e12*Math.random())}`,layerId:Math.floor(1e12*Math.random()),mymap:{},resizer:null,isMapReady:!1}),computed:{},methods:{setupResizer(){this.resizer=new ResizeObserver(()=>{this.mymap.resize()});const t=document.getElementById(this.containerId);this.resizer.observe(t)},handleMapMotion(){if(!this.isMapReady)return;const t={longitude:this.mymap.getCenter().lng,latitude:this.mymap.getCenter().lat,bearing:this.mymap.getBearing(),zoom:this.mymap.getZoom(),pitch:this.mymap.getPitch()};this.$store.commit("setMapCamera",t),this.isMapMoving||(this.isMapMoving=!0)},setupMap(){const t=r.state.mapStyles;try{this.mymap=new p.Map({container:this.mapId,style:this.isDarkMode?t.transparentDark:t.transparentLight,logoPosition:"top-left"});const{jump:e,initial:o,startup:i,...s}=this.globalState.viewState;s.center=[s.longitude,s.latitude],this.mymap.jumpTo(s)}catch(e){console.error("HUH?"+e);return}this.mymap.on("load",this.mapIsReady);let a=document.getElementsByClassName("mapboxgl-ctrl mapboxgl-ctrl-attrib mapboxgl-compact");for(const e of a)e.setAttribute("style","display: none");a=document.getElementsByClassName("mapboxgl-ctrl mapboxgl-ctrl-group");for(const e of a)e.setAttribute("style","display: none");a=document.getElementsByClassName("mapboxgl-ctrl-logo");for(const e of a)e.setAttribute("style","display: none")},async mapIsReady(){this.isMapReady=!0,this.setupResizer(),this.mymap.on("move",this.handleMapMotion)},viewMoved(t){if(!this.isMapReady)return;if(!this.mymap||this.isMapMoving){this.isMapMoving=!1;return}const{bearing:a,longitude:e,latitude:o,zoom:i,pitch:s}=t;!e||!o||!i||(this.mymap.off("move",this.handleMapMotion),this.mymap.jumpTo({bearing:a,zoom:i,center:[e,o],pitch:s}),this.mymap.on("move",this.handleMapMotion))}},watch:{"globalState.viewState"(t){this.viewMoved(t)},"$store.state.colorScheme"(){if(this.isDarkMode=this.$store.state.colorScheme===n.DarkMode,!this.mymap)return;const t=r.state.mapStyles;this.mymap.setStyle(this.isDarkMode?t.transparentDark:t.transparentLight),this.mymap.on("style.load",()=>{})},"$store.state.resizeEvents"(){this.mymap&&this.mymap.resize()}},beforeDestroy(){this.resizer?.disconnect()},mounted(){this.isDarkMode=this.$store.state.colorScheme===n.DarkMode,this.setupMap()}});var d=function(){var a=this,e=a._self._c;return a._self._setupProxy,e("div",{staticClass:"mymaplibre-map",attrs:{id:a.containerId}},[e("div",{staticClass:"mymap",attrs:{id:a.mapId}})])},c=[],y=l(h,d,c,!1,null,"f469fa8b");const u=y.exports;export{u as B};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as l,g as s,H as a,n as o}from"./index-
|
|
1
|
+
import{d as l,g as s,H as a,n as o}from"./index-BvhPezkX.js";import{Y as r}from"./index-DsrLhKEb.js";import{T as n}from"./TopSheet-9MJkamwe.js";const f="url('assets/thumbnail.jpg') no-repeat;",h=l({name:"CalculationTable",components:{TopSheet:n},props:{root:{type:String,required:!0},subfolder:{type:String,required:!0},yamlConfig:String,config:Object,thumbnail:Boolean},data:()=>({globalState:s.state,allConfigFiles:{dashboards:{},topsheets:{},vizes:{},configs:{}},files:[],isLoaded:!1,vizDetails:{title:"",description:"",thumbnail:""}}),computed:{fileApi(){return new a(this.fileSystem,s)},fileSystem(){const i=this.$store.state.svnProjects.filter(t=>t.slug===this.root);if(i.length===0)throw console.log("no such project"),Error;return i[0]},urlThumbnail(){return f}},methods:{async getVizDetails(){if(!this.fileApi)return;try{const t=await this.fileApi.getFileText(this.subfolder+"/"+this.yamlConfig);this.vizDetails=r.parse(t)}catch(t){console.error("failed "+t),this.$emit("error",""+t)}const i=this.vizDetails.title?this.vizDetails.title:"Table";this.$emit("title",i)}},async mounted(){await this.getVizDetails(),this.allConfigFiles=await this.fileApi.findAllYamlConfigs(this.subfolder);const{files:i}=await this.fileApi.getDirectory(this.subfolder);this.files=i,this.isLoaded=!0,this.thumbnail}}),c="/assets/table-NNqWMujx.png";var u=function(){var t=this,e=t._self._c;return t._self._setupProxy,e("div",{staticClass:"my-component",class:{"hide-thumbnail":!t.thumbnail},attrs:{oncontextmenu:"return false"}},[t.thumbnail?e("img",{staticClass:"thumb",attrs:{src:c,width:128}}):t._e(),!t.thumbnail&&t.isLoaded?e("div",{staticClass:"topsheet"},[e("p",{staticClass:"header"},[t._v(t._s(t.subfolder))]),e("h2",[t._v(t._s(t.vizDetails.title))]),e("p",[t._v(t._s(t.vizDetails.description))]),e("hr"),e("TopSheet",{tag:"component",staticClass:"dash-card",attrs:{fileSystemConfig:t.fileSystem,subfolder:t.subfolder,config:t.vizDetails,yaml:t.yamlConfig,files:t.files,cardTitle:t.vizDetails.title,cardId:"table1",allConfigFiles:t.allConfigFiles}})],1):t._e()])},m=[],d=o(h,u,m,!1,null,"73ee6118");const _=d.exports;export{_ as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-v-4edd26f9]:root{--bg: #edebe4;--bgBold: #ffffff;--bgBrowser: #7c839f;--bgCardFrame: white;--bgCardFrame2: #f8f8f8;--bgCream: #eef2ec;--bgCream2: #dddcd7;--bgCream3: #dddce7;--bgCream4: #e4e3f4;--bgCream5: #f8f8f8;--bgIconBar: #575462;--bgError: #fea;--bgDashboard: #e3e3e0;--bgDashboardHeader: #3b4a72;--bgHideButton: #ece9f5;--bgHover: #eaeaea;--bgHover2: #9191bd;--bgLayerPanel: linear-gradient(150deg, #d5dcf1, #dbf2ea);--bgPanel: #fff;--bgPanel2: #ededed;--bgPanel3: #e4e4e4;--bgMapPanel: #fff;--bgMapWater: #e6eaf1;--bgTag: #fdffa3;--bgSplash: #eaeaef;--bgSplashPage: linear-gradient(25deg, #ebe9f4, #e4ebf7, #e0f4f7);--bgScrollbar: #888888aa;--bgTabBanner: linear-gradient(150deg, #345be6, #29d299);--bgTreeItem: #d9f5cb;--gradientEthereal: linear-gradient(45deg, #ecf2ff, #f0f1fd, #e6f7fb);--highlightActiveSection: #65d68f;--text: #363636;--textBold: #12063a;--textBlack: #060606;--textFancy: #564c9d;--textPale: #777777;--textVeryPale: #bbbbcc;--textPanel: #616672;--link: #196096;--linkHover: #079f6f;--linkActive: #bbf1ca;--iconShowHide: #dbf2ea;--shadowMode: 0px 0px 6px 6px rgba(0, 0, 0, .12);--borderThin: 1px solid #cce;--borderDashboard: 3px solid #d4dbdd;--borderFaint: 1px solid #cccccc;--borderSymbology: 1px solid #b3c0c4;--beige: #ffeead;--yellow: $colorYellow;--splitPanel: #d4dbdd;--borderColor: #66666633;--borderZoomButtons: 1px solid var(--borderColor);--scaleBorder: 1px solid #7974a0;--scaleBg: #ffffff;--sliderThumb: #29d09a;--yellowHighlight: #20513a;--opacityLogo: opacity(70%);--opacityAttribution: opacity(70%)}.dark-mode[data-v-4edd26f9]{--bg: #2d3133;--bgBold: #000414;--bgBrowser: #56696e;--bgCardFrame: #14141a;--bgCardFrame2: #202028;--bgCream: #282c2f;--bgCream2: #33373a;--bgCream3: #344857;--bgCream4: #304453;--bgCream5: #344857;--bgDashboard: #222a35;--bgDashboardHeader: #304163;--bgError: #fea;--bgHideButton: #32455a;--bgHover: #433b53;--bgHover2: #34618b;--bgLayerPanel: linear-gradient(150deg, #3d3753, #183d36);--bgMapPanel: #181818;--bgMapWater: #1e3048;--bgPanel: #2a3c4f;--bgPanel2: #32455a;--bgPanel3: #2f3b49;--bgScrollbar: #77777788;--bgSplash: #2a3c4f;--bgSplashPage: linear-gradient(25deg, #142e3c, #28242e);--bgTabBanner: linear-gradient(150deg, #253845, #1d3486);--bgTag: #2a3c4f;--bgTreeItem: #216a6d;--gradientEthereal: linear-gradient(45deg, #1c1f26, #1e2a36, #1d313c);--highlightActiveSection: #65d68f;--text: #c6c1b9;--textBold: white;--textBlack: white;--textFancy: #a5c4e2;--textPale: #aaaaaa;--textPanel: #9caccf;--textVeryPale: #778;--link: #65d68f;--linkHover: #a8ffc8;--linkActive: #145240;--shadowMode: 0px 0px 6px 6px rgba(192, 192, 255, .3);--borderThin: 1px solid #447;--borderDashboard: 3px solid #616169;--borderSymbology: 1px solid #616169;--borderFaint: 1px solid #484848;--splitPanel: #2e343f;--borderColor: #00000088;--borderZoomButtons: 1px solid #777;--scaleBorder: 1px solid #728cab;--scaleBg: #283d50;--opacityLogo: opacity(40%);--opacityAttribution: opacity(60%);--yellowHighlight: #edf6ae;--iconShowHide: #183d36}*[data-v-4edd26f9]{scrollbar-width:thin;scrollbar-color:#454 #2a3c4f}*[data-v-4edd26f9]::-webkit-scrollbar{width:10px}*[data-v-4edd26f9]::-webkit-scrollbar-track{background:var(--bgPanel3)}*[data-v-4edd26f9]::-webkit-scrollbar-thumb{background-color:var(--textVeryPale);border-radius:6px}.carrier-viewer[data-v-4edd26f9]{position:absolute;top:0;bottom:0;pointer-events:none;min-height:10rem}.container-1[data-v-4edd26f9]{display:flex;height:100%}.carrier-viewer.hide-thumbnail[data-v-4edd26f9]{background:none}.main-panel[data-v-4edd26f9]{position:relative;flex:1;background-color:var(--bgBold)}h4[data-v-4edd26f9]{border-top:1px solid #bbb;margin:1rem .25rem .5rem;padding-top:.25rem;font-weight:700;font-size:1.1rem}.right-panel[data-v-4edd26f9]{color:var(--text);display:flex;flex-direction:column;font-size:.8rem;pointer-events:auto;background-color:var(--bgPanel3);width:auto;max-width:fit-content;padding:0 .25rem}.nav[data-v-4edd26f9]{grid-area:title;display:flex;flex-direction:row;margin:0;padding:0 .5rem 0 1rem}.nav a[data-v-4edd26f9]{font-weight:700;color:#fff;text-decoration:none}.nav a.router-link-exact-active[data-v-4edd26f9]{color:#fff}.nav p[data-v-4edd26f9]{margin:auto .5rem auto 0;padding:0;color:#fff}.speed-block[data-v-4edd26f9]{margin-top:1rem}.legend-block[data-v-4edd26f9]{margin-top:2rem}.speed-slider[data-v-4edd26f9]{flex:1;width:100%;margin:0rem .25rem .25rem 0rem;font-weight:700}.big[data-v-4edd26f9]{padding:0rem 0;font-size:2rem;line-height:3.75rem;font-weight:700}.anim[data-v-4edd26f9]{pointer-events:auto}.speed-label[data-v-4edd26f9]{font-size:.8rem;font-weight:700}.clock[data-v-4edd26f9]{grid-area:clock;width:273px;background-color:#000c;border:3px solid white;margin-bottom:1.2rem;color:#fff}.clock p[data-v-4edd26f9]{text-align:center;padding:1rem}.tooltip[data-v-4edd26f9]{padding:5rem;background-color:#ccc;z-index:-1}.panel-items[data-v-4edd26f9]{display:flex;flex-direction:column;margin:0;max-height:100%;height:100%;width:100%}h3[data-v-4edd26f9]{font-size:1.2rem;padding:0}input[data-v-4edd26f9]{border:none;background-color:#235;color:#ccc}.carrier[data-v-4edd26f9]{padding:.25rem .5rem;margin:0 0rem;color:var(--text)}.carrier[data-v-4edd26f9]:nth-of-type(odd){background:var(--bgPanel2)}.carrier-details[data-v-4edd26f9]{font-weight:400;margin-left:.5rem;animation:slide-up-4edd26f9 .25s ease;color:#fff}.carrier-details .carrier[data-v-4edd26f9]:hover{cursor:pointer;background-color:#363645}.carrier[data-v-4edd26f9]:hover{color:var(--link)}.carrier-title[data-v-4edd26f9]{margin-top:.1rem;display:flex;flex-direction:row}.carrier-title i[data-v-4edd26f9]{opacity:.3;margin-top:.2rem;margin-left:-.2rem;margin-right:.4rem}.carrier-title:hover i[data-v-4edd26f9]{opacity:.7}.carrier.selected[data-v-4edd26f9]{font-weight:700;background-color:#363645;box-shadow:0 0 3px #0000004d inset;color:#fff}.carrier-list[data-v-4edd26f9]{user-select:none;flex:1;overflow-y:auto;overflow-x:hidden;cursor:pointer}.detail-area[data-v-4edd26f9]{user-select:none;flex:1;overflow-x:hidden;cursor:pointer;margin:0 .25rem .25rem}.carrier-section[data-v-4edd26f9]{margin-top:.25rem;margin-bottom:.25rem}@keyframes slide-up-4edd26f9{0%{opacity:0}to{opacity:1}}.playback-stuff[data-v-4edd26f9]{grid-area:playback;padding:0rem 2rem 2rem;pointer-events:auto}.leaf[data-v-4edd26f9]{padding-left:1rem}.leaf[data-v-4edd26f9]:hover{color:#9acd32}.tour.selected[data-v-4edd26f9]{background-color:var(--textFancy);font-weight:700;color:var(--bgPanel3)}.shipment-in-tour[data-v-4edd26f9]{background-color:#497c7e}.detail-list[data-v-4edd26f9]{width:250px;overflow-y:auto;overflow-x:hidden}.detail-list pre[data-v-4edd26f9]{font-family:Arial;padding:0;line-height:.8rem;background-color:var(--bgPanel);color:var(--text)}.switches[data-v-4edd26f9]{display:flex}.switches p[data-v-4edd26f9]{flex:1;margin:auto 0}.slider[data-v-4edd26f9]{flex:4;margin-right:0 1rem}.detail-buttons[data-v-4edd26f9],.switchbox[data-v-4edd26f9]{margin:0 .25rem .5rem}.xmessage[data-v-4edd26f9]{position:absolute;bottom:0;z-index:10;background-color:var(--bgPanel2);padding:.5rem 1rem}.dropdown[data-v-4edd26f9]{margin-bottom:.5rem}@media only screen and (max-width: 640px){.nav[data-v-4edd26f9]{padding:.5rem}.clock[data-v-4edd26f9]{text-align:center}.right-side[data-v-4edd26f9]{font-size:.7rem;margin-right:.25rem}.big[data-v-4edd26f9]{padding:0 0rem;margin-top:.5rem;font-size:1.3rem;line-height:2rem}.side-section[data-v-4edd26f9]{margin-left:0}.extra-buttons[data-v-4edd26f9]{margin-right:1rem}}
|