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.
Files changed (360) hide show
  1. simwrapper-4.0.1/CONFIG-EXAMPLE.yaml +31 -0
  2. {simwrapper-4.0.0 → simwrapper-4.0.1}/PKG-INFO +54 -11
  3. {simwrapper-4.0.0 → simwrapper-4.0.1}/README.md +53 -10
  4. {simwrapper-4.0.0 → simwrapper-4.0.1}/pyproject.toml +1 -1
  5. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/FlaskApp.py +28 -8
  6. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/cli.py +1 -1
  7. simwrapper-4.0.0/simwrapper/static/assets/AggregateOd-BnuEf2uU.js → simwrapper-4.0.1/simwrapper/static/assets/AggregateOd-B4y8aYuC.js +1 -1
  8. simwrapper-4.0.0/simwrapper/static/assets/BackgroundMapOnTop-QBK8vW2Q.js → simwrapper-4.0.1/simwrapper/static/assets/BackgroundMapOnTop-CMoHelYK.js +1 -1
  9. simwrapper-4.0.0/simwrapper/static/assets/CalculationTable-BOJ8utvb.js → simwrapper-4.0.1/simwrapper/static/assets/CalculationTable-BKJ39V7b.js +1 -1
  10. simwrapper-4.0.1/simwrapper/static/assets/CarrierViewer-BMQAVXNF.css +1 -0
  11. simwrapper-4.0.1/simwrapper/static/assets/CarrierViewer-CBqkLqs3.js +1 -0
  12. simwrapper-4.0.0/simwrapper/static/assets/CollapsiblePanel-CvefXrxc.js → simwrapper-4.0.1/simwrapper/static/assets/CollapsiblePanel-CGEamBkr.js +1 -1
  13. simwrapper-4.0.0/simwrapper/static/assets/ColorMapSelector-Bf3M5mCd.js → simwrapper-4.0.1/simwrapper/static/assets/ColorMapSelector-B07ZL-2R.js +1 -1
  14. simwrapper-4.0.0/simwrapper/static/assets/ColorsAndWidths-DEBUaGLb.js → simwrapper-4.0.1/simwrapper/static/assets/ColorsAndWidths-DIJqI60j.js +1 -1
  15. simwrapper-4.0.0/simwrapper/static/assets/DashboardDataManager-B-7RGACG.js → simwrapper-4.0.1/simwrapper/static/assets/DashboardDataManager-BQP3prLI.js +1 -1
  16. simwrapper-4.0.0/simwrapper/static/assets/DrawingTool-tAu-EH_Y.js → simwrapper-4.0.1/simwrapper/static/assets/DrawingTool-CBau2IAH.js +1 -1
  17. simwrapper-4.0.0/simwrapper/static/assets/EventViewer-Cy2SBicp.js → simwrapper-4.0.1/simwrapper/static/assets/EventViewer-CSp2IN1v.js +2 -2
  18. simwrapper-4.0.0/simwrapper/static/assets/Flowmap-BSc-eQE6.js → simwrapper-4.0.1/simwrapper/static/assets/Flowmap-hgyHkho_.js +1 -1
  19. simwrapper-4.0.0/simwrapper/static/assets/GridMap-BxDBiFId.js → simwrapper-4.0.1/simwrapper/static/assets/GridMap-BoFPYcsV.js +1 -1
  20. simwrapper-4.0.0/simwrapper/static/assets/ImageView-DBfNfnie.js → simwrapper-4.0.1/simwrapper/static/assets/ImageView-D6uWvvAa.js +1 -1
  21. simwrapper-4.0.0/simwrapper/static/assets/LayerMap-RpGO8prv.js → simwrapper-4.0.1/simwrapper/static/assets/LayerMap-oLq7p3On.js +2 -2
  22. simwrapper-4.0.0/simwrapper/static/assets/LayoutManager-hDSnKq-e.js → simwrapper-4.0.1/simwrapper/static/assets/LayoutManager-BTKmNrLt.js +17 -17
  23. simwrapper-4.0.0/simwrapper/static/assets/LayoutManager-n4czqQtL.css → simwrapper-4.0.1/simwrapper/static/assets/LayoutManager-XvRWeyv7.css +1 -1
  24. simwrapper-4.0.0/simwrapper/static/assets/LegendBox-DP9bvbOC.js → simwrapper-4.0.1/simwrapper/static/assets/LegendBox-B08OK2Ch.js +1 -1
  25. simwrapper-4.0.0/simwrapper/static/assets/LegendColors-Dc2phs0j.js → simwrapper-4.0.1/simwrapper/static/assets/LegendColors-D4curWGf.js +1 -1
  26. simwrapper-4.0.0/simwrapper/static/assets/LineOffsetLayer-DHwgp4e-.js → simwrapper-4.0.1/simwrapper/static/assets/LineOffsetLayer-Be36pIP4.js +1 -1
  27. simwrapper-4.0.0/simwrapper/static/assets/LogisticsViewer-DrPJrWjx.js → simwrapper-4.0.1/simwrapper/static/assets/LogisticsViewer-BVe_kaMF.js +1 -1
  28. simwrapper-4.0.0/simwrapper/static/assets/MatrixViewer-BiTvgf5C.js → simwrapper-4.0.1/simwrapper/static/assets/MatrixViewer-l2gE0Jm1.js +4 -4
  29. simwrapper-4.0.0/simwrapper/static/assets/NetworkLinks-nIGegt65.js → simwrapper-4.0.1/simwrapper/static/assets/NetworkLinks-qgWYa7yh.js +1 -1
  30. simwrapper-4.0.0/simwrapper/static/assets/PathOffsetLayer-Cr9eVOW6.js → simwrapper-4.0.1/simwrapper/static/assets/PathOffsetLayer-QXIMy42N.js +1 -1
  31. simwrapper-4.0.0/simwrapper/static/assets/PathTraceLayer-CWlxcB9b.js → simwrapper-4.0.1/simwrapper/static/assets/PathTraceLayer-Bch_qDuL.js +1 -1
  32. simwrapper-4.0.0/simwrapper/static/assets/PieChartDemo-CSkOeB-5.js → simwrapper-4.0.1/simwrapper/static/assets/PieChartDemo-BytJL3ZF.js +1 -1
  33. simwrapper-4.0.0/simwrapper/static/assets/PlotlyDiagram-BPev_grK.js → simwrapper-4.0.1/simwrapper/static/assets/PlotlyDiagram-BXbfuZ9G.js +1 -1
  34. simwrapper-4.0.0/simwrapper/static/assets/PolygonsLayer.worker-DLKJcfYX.js → simwrapper-4.0.1/simwrapper/static/assets/PolygonsLayer.worker-BsI8I7o0.js +3 -3
  35. simwrapper-4.0.0/simwrapper/static/assets/RunConfigurator-p7sBmzAv.js → simwrapper-4.0.1/simwrapper/static/assets/RunConfigurator-DQJiHszX.js +1 -1
  36. simwrapper-4.0.0/simwrapper/static/assets/SankeyDiagram-DG5ynUvJ.js → simwrapper-4.0.1/simwrapper/static/assets/SankeyDiagram-PMBnbyLr.js +1 -1
  37. simwrapper-4.0.0/simwrapper/static/assets/ShapeFile-G3JHDwie.js → simwrapper-4.0.1/simwrapper/static/assets/ShapeFile-03xUN9L-.js +1 -1
  38. 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
  39. simwrapper-4.0.0/simwrapper/static/assets/TimeSlider-BargM0dx.js → simwrapper-4.0.1/simwrapper/static/assets/TimeSlider-bl3jMjHl.js +1 -1
  40. simwrapper-4.0.0/simwrapper/static/assets/TopSheet-D446bqo5.js → simwrapper-4.0.1/simwrapper/static/assets/TopSheet-9MJkamwe.js +1 -1
  41. simwrapper-4.0.0/simwrapper/static/assets/TransitDemand-BC8wOC11.js → simwrapper-4.0.1/simwrapper/static/assets/TransitDemand-CJJVWGuk.js +1 -1
  42. simwrapper-4.0.0/simwrapper/static/assets/VegaLite-BM8pC4P8.js → simwrapper-4.0.1/simwrapper/static/assets/VegaLite-CBHEOqZU.js +1 -1
  43. simwrapper-4.0.0/simwrapper/static/assets/VehicleAnimation-Chq_nGd8.js → simwrapper-4.0.1/simwrapper/static/assets/VehicleAnimation-HA2HQP4Y.js +1 -1
  44. simwrapper-4.0.0/simwrapper/static/assets/VehicleAnimation-CYkRtmy4.js → simwrapper-4.0.1/simwrapper/static/assets/VehicleAnimation-eK9UOm9A.js +1 -1
  45. simwrapper-4.0.0/simwrapper/static/assets/VideoPlayer-i4N0NmS8.js → simwrapper-4.0.1/simwrapper/static/assets/VideoPlayer-Dv8PbDvI.js +1 -1
  46. simwrapper-4.0.0/simwrapper/static/assets/VizConfigurator-CnciaWXL.js → simwrapper-4.0.1/simwrapper/static/assets/VizConfigurator-CGwo3zpl.js +1 -1
  47. simwrapper-4.0.0/simwrapper/static/assets/VuePlotly-Dk6fAVUL.js → simwrapper-4.0.1/simwrapper/static/assets/VuePlotly-D9-EaHZi.js +1 -1
  48. simwrapper-4.0.0/simwrapper/static/assets/WASMEventStreamer.worker-O8ZxohU4.js → simwrapper-4.0.1/simwrapper/static/assets/WASMEventStreamer.worker-Damh4Nll.js +4 -4
  49. simwrapper-4.0.0/simwrapper/static/assets/XmlViewer-Cn5iOb_I.js → simwrapper-4.0.1/simwrapper/static/assets/XmlViewer-CeUPBZXt.js +1 -1
  50. simwrapper-4.0.0/simwrapper/static/assets/XyHexagons-B7mhgTC4.js → simwrapper-4.0.1/simwrapper/static/assets/XyHexagons-DNyuZL1f.js +1 -1
  51. simwrapper-4.0.0/simwrapper/static/assets/XyTime-D6EH8_oq.js → simwrapper-4.0.1/simwrapper/static/assets/XyTime-Npy9r_qy.js +1 -1
  52. simwrapper-4.0.0/simwrapper/static/assets/ZoomButtons-DL0GlLeR.js → simwrapper-4.0.1/simwrapper/static/assets/ZoomButtons-DERh7Eho.js +1 -1
  53. simwrapper-4.0.0/simwrapper/static/assets/aggregate-od-Bp5Fmfpj.js → simwrapper-4.0.1/simwrapper/static/assets/aggregate-od-ykfZybwN.js +1 -1
  54. simwrapper-4.0.0/simwrapper/static/assets/arc-layer-Sm8rnz46.js → simwrapper-4.0.1/simwrapper/static/assets/arc-layer-Dn9ajLjf.js +1 -1
  55. simwrapper-4.0.0/simwrapper/static/assets/area-BqDxcvzv.js → simwrapper-4.0.1/simwrapper/static/assets/area-D-I6dGQB.js +1 -1
  56. simwrapper-4.0.1/simwrapper/static/assets/area-map-CR15-uE0.js +1 -0
  57. simwrapper-4.0.0/simwrapper/static/assets/bar-C-zLBD_y.js → simwrapper-4.0.1/simwrapper/static/assets/bar-BnBcDEQo.js +1 -1
  58. simwrapper-4.0.0/simwrapper/static/assets/bubble-gdCukjJ1.js → simwrapper-4.0.1/simwrapper/static/assets/bubble-BdlXQ49B.js +1 -1
  59. simwrapper-4.0.1/simwrapper/static/assets/carriers-hM0KIsoK.js +1 -0
  60. 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
  61. 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
  62. 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
  63. simwrapper-4.0.0/simwrapper/static/assets/flowmap-CWq3rIu0.js → simwrapper-4.0.1/simwrapper/static/assets/flowmap-t79drfay.js +1 -1
  64. simwrapper-4.0.0/simwrapper/static/assets/geojson-layer-2WUxY9vI.js → simwrapper-4.0.1/simwrapper/static/assets/geojson-layer-BJzM0td6.js +1 -1
  65. simwrapper-4.0.0/simwrapper/static/assets/gridmap-COG7oUd_.js → simwrapper-4.0.1/simwrapper/static/assets/gridmap-sfEiQxq6.js +1 -1
  66. simwrapper-4.0.0/simwrapper/static/assets/heatmap-Cr1q5k4i.js → simwrapper-4.0.1/simwrapper/static/assets/heatmap-V049cGOj.js +1 -1
  67. simwrapper-4.0.1/simwrapper/static/assets/hexagons--8f7-t--.js +1 -0
  68. 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
  69. simwrapper-4.0.0/simwrapper/static/assets/index-BLQxIDT1.css → simwrapper-4.0.1/simwrapper/static/assets/index-BFgQCBGP.css +1 -1
  70. simwrapper-4.0.0/simwrapper/static/assets/index-Dx5UFeF9.js → simwrapper-4.0.1/simwrapper/static/assets/index-BvhPezkX.js +5 -5
  71. simwrapper-4.0.0/simwrapper/static/assets/index-Bg-0nJY7.js → simwrapper-4.0.1/simwrapper/static/assets/index-C5ggn9H-.js +1 -1
  72. simwrapper-4.0.0/simwrapper/static/assets/index-CvKsqk8k.js → simwrapper-4.0.1/simwrapper/static/assets/index-CL0jgCgf.js +1 -1
  73. simwrapper-4.0.0/simwrapper/static/assets/index-Bdyv2sbz.js → simwrapper-4.0.1/simwrapper/static/assets/index-CsWoCkIA.js +1 -1
  74. simwrapper-4.0.0/simwrapper/static/assets/index-YpyCIT3v.js → simwrapper-4.0.1/simwrapper/static/assets/index-DsrLhKEb.js +1 -1
  75. simwrapper-4.0.0/simwrapper/static/assets/index-1f89C2vg.js → simwrapper-4.0.1/simwrapper/static/assets/index-txrVZiR_.js +1 -1
  76. 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
  77. simwrapper-4.0.1/simwrapper/static/assets/layermap-DdYBpDZ0.js +1 -0
  78. simwrapper-4.0.0/simwrapper/static/assets/line-8OUMvFnr.js → simwrapper-4.0.1/simwrapper/static/assets/line-Ch_EX0v9.js +1 -1
  79. simwrapper-4.0.0/simwrapper/static/assets/line-layer-CLGk9xnE.js → simwrapper-4.0.1/simwrapper/static/assets/line-layer-FsBfv74I.js +1 -1
  80. simwrapper-4.0.0/simwrapper/static/assets/links-diJ4jZXO.js → simwrapper-4.0.1/simwrapper/static/assets/links-xT8SMCIT.js +1 -1
  81. simwrapper-4.0.0/simwrapper/static/assets/lodash-jTVlOCKt.js → simwrapper-4.0.1/simwrapper/static/assets/lodash-BLxeWTQP.js +1 -1
  82. simwrapper-4.0.0/simwrapper/static/assets/matrix-Ny8B586B.js → simwrapper-4.0.1/simwrapper/static/assets/matrix-DnHe1cH1.js +1 -1
  83. 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
  84. simwrapper-4.0.0/simwrapper/static/assets/nprogress-C21mliK_.js → simwrapper-4.0.1/simwrapper/static/assets/nprogress-CUI5i0md.js +1 -1
  85. simwrapper-4.0.0/simwrapper/static/assets/papaparse.min-Dq7wJBkM.js → simwrapper-4.0.1/simwrapper/static/assets/papaparse.min-DKoG2MWZ.js +1 -1
  86. 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
  87. simwrapper-4.0.0/simwrapper/static/assets/pie-CKYjloei.js → simwrapper-4.0.1/simwrapper/static/assets/pie-Dr7l5Rkm.js +1 -1
  88. simwrapper-4.0.0/simwrapper/static/assets/plotly-D0Bb4M9s.js → simwrapper-4.0.1/simwrapper/static/assets/plotly-D-L3h402.js +1 -1
  89. simwrapper-4.0.0/simwrapper/static/assets/sankey-6Yc0C1HO.js → simwrapper-4.0.1/simwrapper/static/assets/sankey-CyJcX8mk.js +1 -1
  90. simwrapper-4.0.0/simwrapper/static/assets/scatter-CjrubrSz.js → simwrapper-4.0.1/simwrapper/static/assets/scatter-SqC5HFGM.js +1 -1
  91. 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
  92. simwrapper-4.0.0/simwrapper/static/assets/slideshow-B2q-tUq8.js → simwrapper-4.0.1/simwrapper/static/assets/slideshow-CBEV3mYI.js +1 -1
  93. 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
  94. simwrapper-4.0.0/simwrapper/static/assets/table-BxjEnSnP.js → simwrapper-4.0.1/simwrapper/static/assets/table-jL5TYkQ0.js +1 -1
  95. simwrapper-4.0.0/simwrapper/static/assets/text-PsmYndOh.js → simwrapper-4.0.1/simwrapper/static/assets/text-h7arvIN0.js +1 -1
  96. 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
  97. simwrapper-4.0.0/simwrapper/static/assets/tile-C7PBydy7.js → simwrapper-4.0.1/simwrapper/static/assets/tile-Ck3URzKY.js +1 -1
  98. simwrapper-4.0.0/simwrapper/static/assets/transit-GWWW99n0.js → simwrapper-4.0.1/simwrapper/static/assets/transit-atSN5QSD.js +1 -1
  99. simwrapper-4.0.0/simwrapper/static/assets/util-LfrgPD9b.js → simwrapper-4.0.1/simwrapper/static/assets/util-vCd5pz9J.js +1 -1
  100. simwrapper-4.0.0/simwrapper/static/assets/vega-hm6HCKnN.js → simwrapper-4.0.1/simwrapper/static/assets/vega-Bgrlftig.js +1 -1
  101. simwrapper-4.0.1/simwrapper/static/assets/vehicles-BBsy7Jzt.js +1 -0
  102. simwrapper-4.0.0/simwrapper/static/assets/video-CCW76QFJ.js → simwrapper-4.0.1/simwrapper/static/assets/video-DjkUchOu.js +1 -1
  103. simwrapper-4.0.0/simwrapper/static/assets/xml-Cc_EfoQp.js → simwrapper-4.0.1/simwrapper/static/assets/xml-DCyymAZS.js +1 -1
  104. simwrapper-4.0.1/simwrapper/static/assets/xytime-7qGwmDZI.js +1 -0
  105. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/index.html +2 -2
  106. simwrapper-4.0.0/simwrapper/static/assets/CarrierViewer-CyqBQEu7.css +0 -1
  107. simwrapper-4.0.0/simwrapper/static/assets/CarrierViewer-eXeST4f7.js +0 -1
  108. simwrapper-4.0.0/simwrapper/static/assets/area-map-CaQtlskC.js +0 -1
  109. simwrapper-4.0.0/simwrapper/static/assets/carriers-BU8kiMfh.js +0 -1
  110. simwrapper-4.0.0/simwrapper/static/assets/hexagons-CX9UbzLs.js +0 -1
  111. simwrapper-4.0.0/simwrapper/static/assets/layermap-CLT4oMca.js +0 -1
  112. simwrapper-4.0.0/simwrapper/static/assets/vehicles-PNXyekLP.js +0 -1
  113. simwrapper-4.0.0/simwrapper/static/assets/xytime-ChWIcT6w.js +0 -1
  114. simwrapper-4.0.0/simwrapper/storage.yaml +0 -18
  115. {simwrapper-4.0.0 → simwrapper-4.0.1}/.gitignore +0 -0
  116. {simwrapper-4.0.0 → simwrapper-4.0.1}/.pylintrc +0 -0
  117. {simwrapper-4.0.0 → simwrapper-4.0.1}/.versionrc +0 -0
  118. {simwrapper-4.0.0 → simwrapper-4.0.1}/.vscode/settings.json +0 -0
  119. {simwrapper-4.0.0 → simwrapper-4.0.1}/CHANGELOG.md +0 -0
  120. {simwrapper-4.0.0 → simwrapper-4.0.1}/LICENSE.txt +0 -0
  121. {simwrapper-4.0.0 → simwrapper-4.0.1}/MANIFEST.in +0 -0
  122. {simwrapper-4.0.0 → simwrapper-4.0.1}/Makefile +0 -0
  123. {simwrapper-4.0.0 → simwrapper-4.0.1}/patches/apply_pytables_patch.py +0 -0
  124. {simwrapper-4.0.0 → simwrapper-4.0.1}/patches/pytables-3.10.2.patch +0 -0
  125. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/GunicornServer.py +0 -0
  126. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/MiniFileServer.py +0 -0
  127. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/__init__.py +0 -0
  128. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/gunicorn_config.py +0 -0
  129. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/nginx.conf +0 -0
  130. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/simwrapper-flask-app.service +0 -0
  131. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/simwrapper-rclone.service +0 -0
  132. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/config/supervisord.conf +0 -0
  133. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/sites.py +0 -0
  134. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/404.html +0 -0
  135. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/404.html.bak +0 -0
  136. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/CNAME +0 -0
  137. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/README.md +0 -0
  138. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/AggregateDatasetStreamer.worker-C0WTuhxa.js +0 -0
  139. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/AggregateOd-aR9bhJaL.css +0 -0
  140. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/BackgroundMapOnTop-DptOe2tm.css +0 -0
  141. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/CalculationTable-ie-f6C8y.css +0 -0
  142. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/CollapsiblePanel-zCvUtCGk.css +0 -0
  143. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/ColorMapSelector-DzIjgrBt.css +0 -0
  144. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/Coords-CQQjH_Bj.js +0 -0
  145. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/CsvGzipParser.worker-BLBFQ-aV.js +0 -0
  146. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/DataFetcher.worker-BEGJ5mrK.js +0 -0
  147. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/DrawingTool-Cxz0mWSd.css +0 -0
  148. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/EventViewer-BDft6Wzn.css +0 -0
  149. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/Flowmap--zMRkn8n.css +0 -0
  150. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/GridMap-BAwSaBed.css +0 -0
  151. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/GzipFetcher.worker-BN1FeEl_.js +0 -0
  152. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/GzipFetcher.worker-Dil8PfAW.js +0 -0
  153. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/ImageView-Bh2HyJTN.css +0 -0
  154. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/LayerMap-oQQxnF8O.css +0 -0
  155. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/LegendBox-BJxkonIO.css +0 -0
  156. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/LegendStore-CGgeb9zL.js +0 -0
  157. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/LogisticsViewer-DcAXVGrY.css +0 -0
  158. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/MATSimEventStreamer.worker-Do4vvbuZ.js +0 -0
  159. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/MatrixViewer-B5u8FtkP.css +0 -0
  160. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/NetworkLinks-BU463xJY.css +0 -0
  161. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/NewXmlFetcher.worker-DqenmrSu.js +0 -0
  162. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/NewXmlFetcher.worker-fQRtinoY.js +0 -0
  163. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/PathTraceLayer-DnayuE36.css +0 -0
  164. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/PieChartDemo-DkgWM9v6.css +0 -0
  165. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/PlotlyDiagram-BdPQboat.css +0 -0
  166. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/RoadNetworkLoader.worker-CZSk_iwT.js +0 -0
  167. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/RoadNetworkLoader.worker-DWlRv2k1.js +0 -0
  168. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/RunConfigurator-Cka-r30l.css +0 -0
  169. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/SW_logo_icon_anim-Cyl7nwZq.gif +0 -0
  170. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/SW_logo_white-mbdplT21.png +0 -0
  171. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/SW_logo_yellow-Btlbhihn.png +0 -0
  172. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/SankeyDiagram-CACz4sdX.css +0 -0
  173. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/Set3-Dyl9Llxj.js +0 -0
  174. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/ShapeFile-DVEMvVwY.css +0 -0
  175. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TimeSlider-DKK7Kyeo.css +0 -0
  176. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TopSheet-C6eJGli3.css +0 -0
  177. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TopSheetWorker.worker-DZfZs6Iy.js +0 -0
  178. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TransitDemand-BB7pRKZu.css +0 -0
  179. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/TransitSupplyHelper.worker-1BijG__s.js +0 -0
  180. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VegaLite-DVfrWt8N.css +0 -0
  181. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VehicleAnimation-BFdy5eRi.css +0 -0
  182. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VehicleAnimation-C50drogW.css +0 -0
  183. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VideoPlayer-Cdz1McNz.css +0 -0
  184. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/VizConfigurator-pmbbASys.css +0 -0
  185. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/XmlViewer-hB_o1pGI.css +0 -0
  186. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/XyHexagons-l2j9r24G.css +0 -0
  187. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/XyTime-DT-ZW-1w.css +0 -0
  188. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/XytDataParser.worker-BavN8Lc3.js +0 -0
  189. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/ZoomButtons-CZq11kBt.css +0 -0
  190. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/aggregate-od-CxN1rXyi.css +0 -0
  191. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/arcs-B-65v31y.png +0 -0
  192. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/area-BtCARixv.css +0 -0
  193. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/area-map-CwgktcLJ.css +0 -0
  194. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/avro-Dd9UqmeZ.js +0 -0
  195. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/bar-BbDIFWK1.css +0 -0
  196. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/berlin-C-twquEa.jpg +0 -0
  197. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/bubble-CbGwYQfW.css +0 -0
  198. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/carriers-Bynfqluv.css +0 -0
  199. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/color-DZRtpOAM.js +0 -0
  200. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/comlink-DESosX-g.js +0 -0
  201. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/cubehelix-Bg3rkAQA.js +0 -0
  202. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/defaultLocale-VLpijIbO.js +0 -0
  203. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/draw-icon-dm-DbFh91q-.png +0 -0
  204. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/extends-CF3RwP-h.js +0 -0
  205. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/extent-Ccx1MofX.js +0 -0
  206. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/flowmap-CvjUZABP.css +0 -0
  207. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/fsum-CWwcR1RF.js +0 -0
  208. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/fxp-4YEvQr-_.js +0 -0
  209. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/gridmap-f31N4Owr.css +0 -0
  210. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/group-DobYzF2-.js +0 -0
  211. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/hcl-BuAPUl0w.js +0 -0
  212. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/heatmap-D_UHOruG.css +0 -0
  213. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/hexagons-CPOSxcyG.css +0 -0
  214. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/icon-blue-ramp-D1d4h-6x.png +0 -0
  215. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/icon-pie-chart-BS7BHQ_l.png +0 -0
  216. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/icon-stop-triangle-BjEDyLtU.png +0 -0
  217. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/index-B9fw0f6a.js +0 -0
  218. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/index-CrY58g0x.js +0 -0
  219. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/index-DgdUD6UN.js +0 -0
  220. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/index-_doEQLKC.js +0 -0
  221. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/layermap-CWKLShno.css +0 -0
  222. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zblosc-DmbwZN5J.so +0 -0
  223. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zblosc2-C2k_kvFi.so +0 -0
  224. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zbshuf-CAWqoiJv.so +0 -0
  225. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zbz2-YH5bcfd1.so +0 -0
  226. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zlz4-DBxVEC8C.so +0 -0
  227. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zlzf-B37RoVJN.so +0 -0
  228. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zszf-vmQ-rYRm.so +0 -0
  229. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zzfp-CxpSdQww.so +0 -0
  230. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/libH5Zzstd-BNHjSL5H.so +0 -0
  231. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/lil-gui.esm-D2cLj-mk.js +0 -0
  232. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/line-DONUOCo1.css +0 -0
  233. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/links-BdpHH8jO.css +0 -0
  234. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/links-BjFLDFnX.png +0 -0
  235. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/matrix-CwtPS1VI.css +0 -0
  236. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/matsim_event_streamer_bg-CzbXQAK4.wasm +0 -0
  237. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/min-D1slsF82.js +0 -0
  238. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/pie-ZUTwNf2R.css +0 -0
  239. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/plotly-DIuHo25J.css +0 -0
  240. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/points-CNz3arAg.png +0 -0
  241. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/polygons-BCSoK5vV.png +0 -0
  242. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/pow-BDr0uoeQ.js +0 -0
  243. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/rainbow-Dz4seJAz.js +0 -0
  244. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/range-OtVwhkKS.js +0 -0
  245. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/round-D-ROWHlE.js +0 -0
  246. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sankey-ChmfM_XB.css +0 -0
  247. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/scatter-CIhK1YX-.css +0 -0
  248. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/screenshots-Tas2EtGs.js +0 -0
  249. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sequential-CKBnvidU.js +0 -0
  250. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sidebar-BRi9n39r.png +0 -0
  251. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/slideshow-KikGqlRS.css +0 -0
  252. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sum-CB6J5KXz.js +0 -0
  253. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_minus-B3KtJjJs.jpg +0 -0
  254. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_minus_dm-BB92PyXK.jpg +0 -0
  255. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_north_arrow-BuDjRW21.png +0 -0
  256. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_north_arrow_dm-b3Ne7pdA.png +0 -0
  257. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_plus-_7XGt7Yq.jpg +0 -0
  258. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/sw_plus_dm-O9hpaAgy.jpg +0 -0
  259. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/table-B5iq16nn.css +0 -0
  260. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/table-NNqWMujx.png +0 -0
  261. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/text-Cz75an8R.css +0 -0
  262. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/thumbnail-B7gJwb8m.jpg +0 -0
  263. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/thumbnail-BWla1ZrP.jpg +0 -0
  264. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/thumbnail-B_QeHA-1.jpg +0 -0
  265. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/thumbnail-ywgPDHXm.jpg +0 -0
  266. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/tile-_Lm2YGSR.css +0 -0
  267. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/timer-D6Wzbp6M.js +0 -0
  268. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/transit-J9voF7aH.css +0 -0
  269. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/turf.es-DhhXp8l8.js +0 -0
  270. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/vega-9UM1ksay.css +0 -0
  271. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/vehicles-BmIdYWvk.css +0 -0
  272. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/video-Mp6RrM_l.css +0 -0
  273. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/vsp-2023-logo-kcRNuRsU.png +0 -0
  274. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/xml-D0uOEf4Q.css +0 -0
  275. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/xytime-BdF5XbHJ.css +0 -0
  276. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/year-DwdiMAWv.js +0 -0
  277. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/assets/zip-Db3GAX2E.js +0 -0
  278. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-bluered.png +0 -0
  279. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-inferno.png +0 -0
  280. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-picnic.png +0 -0
  281. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-salinity.png +0 -0
  282. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/colors/scale-viridis.png +0 -0
  283. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/css/font-awesome-5.7.1.css +0 -0
  284. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/data/build-index.js +0 -0
  285. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/data/index.html +0 -0
  286. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/icon-atlas.png +0 -0
  287. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/icon-stop-triangle.png +0 -0
  288. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/SW_favicon.png +0 -0
  289. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/SW_logo_icon_white.png +0 -0
  290. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/SW_logo_icon_yellow.png +0 -0
  291. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/draw-icon.svg +0 -0
  292. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas-2.svg +0 -0
  293. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas-3.png +0 -0
  294. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas-3.xcf +0 -0
  295. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas.png +0 -0
  296. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/icon-atlas.svg +0 -0
  297. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/arc.png +0 -0
  298. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/bmbf-logo.png +0 -0
  299. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/dfg.jpg +0 -0
  300. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/matsim-logo-blue.png +0 -0
  301. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/matsim-logo-white.png +0 -0
  302. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/metcouncil.png +0 -0
  303. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/mtc.png +0 -0
  304. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/mwcog.png +0 -0
  305. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/ohiodot.png +0 -0
  306. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/oregondot.png +0 -0
  307. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/psrc.png +0 -0
  308. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/sandag.jpg +0 -0
  309. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/semcog.jpg +0 -0
  310. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/sfcta-old.png +0 -0
  311. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/sfcta.png +0 -0
  312. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/tu-logo.png +0 -0
  313. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/logos/vsp-logo-300dpi.png +0 -0
  314. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/departure_board.svg +0 -0
  315. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_bike.svg +0 -0
  316. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_boat.svg +0 -0
  317. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_bus.svg +0 -0
  318. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_car.svg +0 -0
  319. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/directions_subway.svg +0 -0
  320. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/electric_car.svg +0 -0
  321. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/electric_rickshaw.svg +0 -0
  322. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/emoji_transportation.svg +0 -0
  323. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/ev_station.svg +0 -0
  324. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/group.svg +0 -0
  325. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/groups.svg +0 -0
  326. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/info.txt +0 -0
  327. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/local_gas_station.svg +0 -0
  328. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/local_parking.svg +0 -0
  329. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/local_shipping.svg +0 -0
  330. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/local_taxi.svg +0 -0
  331. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/motorcycle.svg +0 -0
  332. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/person.svg +0 -0
  333. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/route.svg +0 -0
  334. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/subway.svg +0 -0
  335. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/train.svg +0 -0
  336. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/transportation.svg +0 -0
  337. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/images/tile-icons/two_wheeler.svg +0 -0
  338. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/sax-wasm.wasm +0 -0
  339. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/sql-wasm.wasm +0 -0
  340. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/tu-logo-circle.jpg +0 -0
  341. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/tu-logo-circle.png +0 -0
  342. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/tu-logo.png +0 -0
  343. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/veh-curvy.png +0 -0
  344. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/veh-curvy2.png +0 -0
  345. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/veh-curvy3.png +0 -0
  346. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/veh-curvy5.png +0 -0
  347. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.eot +0 -0
  348. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.svg +0 -0
  349. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.ttf +0 -0
  350. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.woff +0 -0
  351. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-regular-400.woff2 +0 -0
  352. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.eot +0 -0
  353. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.svg +0 -0
  354. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.ttf +0 -0
  355. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.woff +0 -0
  356. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/webfonts/fa-solid-900.woff2 +0 -0
  357. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/zones/sandag.geojson.gz +0 -0
  358. {simwrapper-4.0.0 → simwrapper-4.0.1}/simwrapper/static/zones/zones.yaml +0 -0
  359. {simwrapper-4.0.0 → simwrapper-4.0.1}/tests/__init__.py +0 -0
  360. {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.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
- **simwrapper flask**
56
+ ### simwrapper run [config.yaml]
57
57
 
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.
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 flask` to browse your files and results!
64
-
65
- Normally it will serve the files from the folder the command was run. See docs.simwrapper.app/docs for details on passing in a configuration file with multiple mount points.
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
- **simwrapper serve**
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
- **simwrapper here**
110
+ ---
111
+ ### simwrapper here
72
112
 
73
- _Deprecated - use simwrapper flask instead_
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
- **simwrapper open [vsp|asim]**
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
- **simwrapper flask**
33
+ ### simwrapper run [config.yaml]
34
34
 
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.
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 flask` to browse your files and results!
41
-
42
- Normally it will serve the files from the folder the command was run. See docs.simwrapper.app/docs for details on passing in a configuration file with multiple mount points.
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
- **simwrapper serve**
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
- **simwrapper here**
87
+ ---
88
+ ### simwrapper here
49
89
 
50
- _Deprecated - use simwrapper flask instead_
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
- **simwrapper open [vsp|asim]**
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
 
@@ -1,5 +1,5 @@
1
1
  [project]
2
- version = "4.0.0"
2
+ version = "4.0.1"
3
3
  name = "simwrapper"
4
4
  description = "Run SimWrapper from Python"
5
5
  readme = "README.md"
@@ -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 STORAGE_ROOTS
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
- global STORAGE, STORAGE_ROOTS
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
- STORAGE_ROOTS = yaml.safe_load(f.read())
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 flask(config, port, debug):
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-Dx5UFeF9.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
+ 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-Dx5UFeF9.js";import{Y as r}from"./index-YpyCIT3v.js";import{T as n}from"./TopSheet-D446bqo5.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};
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}}