Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
0da2c8e
Initial commit, re-target npm deploy and change tagline
tomstephen Dec 10, 2025
bcf3f60
Stop the deploy command trying (and failing) to set relative paths. D…
tomstephen Dec 10, 2025
4111886
misc splash page reformatting
tomstephen Dec 10, 2025
64aeb01
add aeq plugin, copied from xml viewer
tomstephen Dec 10, 2025
3bf93e2
Add to plugin repo
tomstephen Dec 10, 2025
92ac3d9
Flesh out reader.vue, add file system to extend http fs
tomstephen Dec 10, 2025
bfcfeb9
Clean up sqlite calls
tomstephen Dec 10, 2025
002d84c
update templates, config access, add yaml parsing, etc
tomstephen Dec 10, 2025
60dfa8f
Successfully reading tables from spatialite database
tomstephen Dec 10, 2025
ab746f9
remove comment
tomstephen Dec 10, 2025
5630df1
Complete architecture for dashboards etc
tomstephen Dec 10, 2025
fbe8332
refine dashboard functionality
tomstephen Dec 11, 2025
3ff2fd3
Remote hosted demo
tomstephen Dec 11, 2025
fc324e9
hit s3 bucket files, not the aws console
tomstephen Dec 11, 2025
8e9823f
Extend file system to support S3
tomstephen Dec 11, 2025
dbf1a86
Drop custom map component, use the existing one
tomstephen Dec 11, 2025
cddbb9e
.
tomstephen Dec 11, 2025
2f3f9cc
Trim comments
tomstephen Dec 11, 2025
d9ab411
Refactor
tomstephen Dec 11, 2025
61ea651
Add style by param
tomstephen Dec 11, 2025
165746b
Map centering and zoom
tomstephen Dec 11, 2025
ad6bb26
Adds ability to join another (results) database
tomstephen Dec 11, 2025
0b5490c
many small fixes
tomstephen Dec 11, 2025
56caa30
Revert irrelevant changes
tomstephen Dec 12, 2025
10b294a
Dont track changes to package-lock.json, bloating PR
tomstephen Dec 12, 2025
ca717dc
Did that last one wrong
tomstephen Dec 12, 2025
3ac4c54
Revert changes to scripts in package.json
tomstephen Dec 12, 2025
c499cad
drop erroneous notes
tomstephen Dec 12, 2025
935ac4c
Refactor of styling
tomstephen Dec 12, 2025
37cac33
stop tracking changes on package-lock.json
tomstephen Dec 12, 2025
dd767fe
.
tomstephen Dec 12, 2025
acfe7dd
Scaling by meters/pixels options
tomstephen Dec 12, 2025
ef9e36a
Main .vue refactor
tomstephen Dec 12, 2025
ab5b885
tweaks
tomstephen Dec 12, 2025
37c5383
Add dataRange to colours
tomstephen Dec 15, 2025
7ea39c7
Add ability to filter sql query from yaml
tomstephen Dec 15, 2025
b632dc3
Fix map resize bug
tomstephen Dec 15, 2025
16bbdd8
Manually defined legends
tomstephen Dec 16, 2025
b6896dc
.
tomstephen Dec 16, 2025
ead28f1
Fix S3 support for panels opening webworkers
tomstephen Dec 17, 2025
5031d56
revert changes to tile.vue
tomstephen Dec 17, 2025
5994627
Remove localhost from datasources on splash
tomstephen Dec 17, 2025
97e5c7a
add manual linewidths to styling
tomstephen Dec 17, 2025
4472d1f
Fix basemap and uncolour tiles
tomstephen Dec 17, 2025
8eb53a0
style tweaking in tile panel, plotly now supports fixed axis
tomstephen Dec 18, 2025
5e3ccbe
Meter or pixels for radius units
tomstephen Dec 18, 2025
23f42c3
Removed dark-matter, use internal options
tomstephen Dec 18, 2025
04d1677
Linting
tomstephen Dec 18, 2025
808e3cb
Drop dark matter
tomstephen Dec 18, 2025
0d843d7
rounding out styling, more careful loading and memory management, doc…
tomstephen Dec 19, 2025
b20fbeb
Cleaning, add sqlfilter to joined db
tomstephen Dec 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
<link href="/images/SW_favicon.png" rel="icon" type="image/png" />

<!-- descriptive things -->
<title>SimWrapper</title>
<title>AequilibraE Explore</title>
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The HTML title change from "SimWrapper" to "AequilibraE Explore" affects all instances of the application. According to the PR description, this type of customization shouldn't be merged back. Consider making the title configurable through build-time environment variables or configuration files rather than hardcoding it.

Copilot uses AI. Check for mistakes.
<meta content="SimWrapper" name="twitter:title" />
<meta content="SimWrapper" name="og:title" />
<meta content="From the VSP team at TU-Berlin" name="twitter:description" />
Expand Down
5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
"blob-util": "^2.0.2",
"buefy": "^0.9.29",
"bulma": "^1.0.0",
"cartocolor": "^5.0.2",
"color-string": "^1.9.1",
"colormap": "^2.3.1",
"comlink": "^4.4.2",
Expand Down Expand Up @@ -119,6 +120,10 @@
"sax-wasm": "^2.2.4",
"shallow-equal": "^1.2.1",
"shapefile": "^0.6.6",
"spatialite": "^0.1.0",
"spl.js": "^0.1.2",
"sql.js": "^1.13.0",
"sqlite3": "^5.1.7",
Comment on lines +123 to +126
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The package.json includes sqlite3 and spatialite packages which are Node.js native modules that cannot run in browser environments. SimWrapper is a client-side browser application as mentioned in the PR description. These dependencies will likely cause build failures or runtime errors. The spl.js package appears to be the correct browser-compatible SQLite library - consider removing sqlite3 and spatialite from dependencies unless they're used in a Node.js build process.

Copilot uses AI. Check for mistakes.
"the-new-css-reset": "^1.7.3",
"threads": "^1.7.0",
"three": "^0.127.0",
Expand Down
1 change: 1 addition & 0 deletions src/Globals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ export interface FileSystemConfig {
example?: boolean
isGithub?: boolean
isZIB?: boolean
isS3?: boolean // AWS S3 bucket with public access
flask?: boolean // Flask filesystem supports OMX open matrix API - see https://github.com/simwrapper/omx-server
}

Expand Down
30 changes: 25 additions & 5 deletions src/components/LegendColors.vue
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
<template lang="pug">

.legend-colors.flex-col
h4 {{ title }}
p {{ description }}
h4(v-if="title") {{ title }}
p(v-if="description") {{ description }}
ul.list-items
li.legend-row(v-for="item in items" :key="item.value + item.value[0]")
.item-label(v-if="item.label") {{ item.label }}
.item-swatch(:style="`backgroundColor: rgb(${item.color})`")
li.legend-row(v-for="(item, idx) in items" :key="item.label + idx")
// Subtitle
span.legend-subtitle(v-if="item.type === 'subtitle'") {{ item.label }}
// Feature entry
template(v-else)
.item-swatch(v-if="item.shape === 'line' || item.type === 'line'"
:style="`width:32px;height:${item.size||4}px;background:rgb(${item.color});border-radius:2px;align-self:center;`"
)
.item-swatch(v-else-if="item.shape === 'polygon' || item.type === 'polygon'"
:style="`width:20px;height:20px;background:rgb(${item.color});border-radius:4px;border:1px solid #888;display:inline-block;`"
)
.item-swatch(v-else-if="item.shape === 'circle' || item.type === 'circle'"
:style="`width:${item.size||12}px;height:${item.size||12}px;background:rgb(${item.color});border-radius:50%;border:1px solid #888;display:inline-block;`"
)
.item-label {{ item.label }}
Comment on lines +7 to +21
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The LegendColors component now expects legend items with flexible shape/type fields ('line', 'polygon', 'circle', 'subtitle') but the existing LegendItem interface in Globals.ts only defines type as LegendItemType enum (line, box). The AequilibraEReader builds legend items with string type/shape values which don't match the interface. Consider extending the LegendItem interface or creating a separate type for the AequilibraE legend format to ensure type safety.

Copilot uses AI. Check for mistakes.

</template>

Expand All @@ -32,6 +45,13 @@ export default defineComponent({
margin: 0;
}

.legend-subtitle {
font-weight: bold;
margin-top: 0.5em;
margin-bottom: 0.25em;
display: block;
}

.item-label {
margin: '0 0.5rem 0.0rem 0';
font-weight: 'bold';
Expand Down
1 change: 1 addition & 0 deletions src/dash-panels/_allPanels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export const panelLookup: { [key: string]: AsyncComponent } = {
xml: defineAsyncComponent(() => import('./xml.vue')),

// full-screen map visualizations:
aequilibrae: defineAsyncComponent(() => import('./aequilibrae.vue')),
carriers: defineAsyncComponent(() => import('./carriers.vue')),
flowmap: defineAsyncComponent(() => import('./flowmap.vue')),
links: defineAsyncComponent(() => import('./links.vue')),
Expand Down
49 changes: 49 additions & 0 deletions src/dash-panels/aequilibrae.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<template lang="pug">
aeq-reader.aeq-panel(
:root="fileSystemConfig.slug"
:subfolder="subfolder"
:config="config"
:thumbnail="false"
@isLoaded="isLoaded"
@error="$emit('error', $event)"
)

</template>

<script lang="ts">
import { defineComponent } from 'vue'
import type { PropType } from 'vue'

import AeqReader from '@/plugins/aequilibrae/AequilibraEReader.vue'

export default defineComponent({
name: 'AequilibraEPanel',
components: { AeqReader },
props: {
config: Object,
datamanager: Object,
fileSystemConfig: Object,
subfolder: String,
yamlConfig: String,
},
methods: {
isLoaded() {
this.$emit('isLoaded')
},
},
})
</script>

<style scoped lang="scss">
@import '@/styles.scss';

.aeq-panel {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
display: flex;
flex-direction: column;
}
</style>
39 changes: 30 additions & 9 deletions src/dash-panels/tile.vue
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
<template lang="pug">
.content
.tiles-container(v-if="imagesAreLoaded")
.tile(v-for="(value, index) in this.dataSet.data" v-bind:style="{ 'background-color': colors[index % colors.length]}" @click="")
.tile(
v-for="(value, index) in this.dataSet.data"
:style="getTileStyle(index)"
@click=""
)
a(:href="value[urlIndex]" target="_blank" :class="{ 'is-not-clickable': !value[urlIndex] }")
p.tile-title {{ value[tileNameIndex] }}
p.tile-value {{ value[tileValueIndex] }}
p.tile-title(:style="{ color: tileTextColor }") {{ value[tileNameIndex] }}
p.tile-value(:style="{ color: tileTextColor }") {{ value[tileValueIndex] }}
.tile-image(v-if="value[tileImageIndex] != undefined && checkIfItIsACustomIcon(value[tileImageIndex])" :style="{'background': base64Images[index], 'background-size': 'contain'}")
img.tile-image(v-else-if="value[tileImageIndex] != undefined && checkIfIconIsInAssetsFolder(value[tileImageIndex])" v-bind:src="getLocalImage(value[tileImageIndex].trim())" :style="{'background': ''}")
font-awesome-icon.tile-image(v-else-if="value[tileImageIndex] != undefined" :icon="value[tileImageIndex].trim()" size="2xl" :style="{'background': '', 'color': 'black'}")
Expand Down Expand Up @@ -45,6 +49,10 @@ export default defineComponent({
dataSet: {} as { data?: any; x?: any[]; y?: any[]; allRows?: any },
YAMLrequirementsOverview: { dataset: '' },
colors: [
'#dddddd00', // light gray
'#dddddd00', // light gray
'#dddddd00', // light gray
'#dddddd00', // light gray
Comment on lines +52 to +55
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tile component now uses transparent background colors (#dddddd00) for the first 4 tiles. This dramatically changes the visual appearance of all tile panels throughout the application, not just for AequilibraE. This could be a breaking change for existing dashboards. If this styling is specific to AequilibraE needs, consider implementing it as an optional tile configuration rather than changing the default colors for all tiles.

Copilot uses AI. Check for mistakes.
'#F08080', // Light coral pink
'#FFB6C1', // Pale pink
'#FFDAB9', // peach
Expand Down Expand Up @@ -117,6 +125,12 @@ export default defineComponent({
fileApi(): HTTPFileSystem {
return new HTTPFileSystem(this.fileSystemConfig, globalStore)
},
tileBorderColor(): string {
return this.globalState.isDarkMode ? '#fff' : '#000';
},
tileTextColor(): string {
return this.globalState.isDarkMode ? '#fff' : '#363636';
},
},
async mounted() {
this.dataSet = await this.loadFile()
Expand Down Expand Up @@ -227,6 +241,14 @@ export default defineComponent({
}
return false
},

getTileStyle(index: number) {
return {
'background-color': this.colors[index % this.colors.length],
'border': '1px solid ' + this.tileBorderColor,
'color': this.tileTextColor
}
},
},
})
</script>
Expand Down Expand Up @@ -277,13 +299,13 @@ export default defineComponent({
padding: 20px;
min-width: 250px;
font-family: $fancyFont;
border-color: v-bind(tileBorderColor);
}

.tile .tile-value {
font-size: 2rem;
font-size: 3rem;
font-weight: bold;
width: 100%;
color: #363636; // var(--text) but always the color from the light mode.
grid-column-start: 2;
grid-column-end: 4;
text-align: center;
Expand All @@ -292,10 +314,9 @@ export default defineComponent({

.tile .tile-title {
width: 100%;
font-size: 1.4rem;
height: 5rem;
font-size: 2.5rem;
// height: 3.5rem;
margin-bottom: 0;
color: #363636; // var(--text) but always the color from the light mode.
text-align: center;
grid-column-start: 1;
grid-column-end: 5;
Expand All @@ -314,4 +335,4 @@ export default defineComponent({

@media only screen and (max-width: 640px) {
}
</style>
</style>
63 changes: 5 additions & 58 deletions src/fileSystemConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,66 +134,13 @@ let fileSystems: FileSystemConfig[] = [
// ----------- End. Below here, these are editable: -------------------

{
name: 'VSP/ZIB LakeFS',
hidden: true,
slug: 'vsp-zib',
description: 'Public VSP data at Zuse Institute Berlin',
baseURL: 'https://download.lake-daki.zib.de/?PATH=vsp&dir=matsim',
isZIB: true,
// 'https://download.lake-daki.zib.de/?PATH=vsp&dir=matsim%2Fcountries%2Fde%2Fberlin%2Fberlin-v6.4%2Foutput%2Fberlin-v6.4-10pct',
},
{
name: 'VSP TU-Berlin',
slug: 'public',
description: 'Public data at VSP / TU Berlin',
baseURL: 'https://svn.vsp.tu-berlin.de/repos/public-svn/matsim/scenarios/countries',
thumbnail: '/simwrapper/images/thumb-chart.jpg',
skipList: ['episim/battery'],
},
{
name: 'Berlin Open Scenario v6',
slug: 'open-berlin',
description: 'Standard dashboard from the MATSim SimWrapper contrib',
thumbnail: 'images/thumb-localfiles.jpg',
baseURL:
'https://svn.vsp.tu-berlin.de/repos/public-svn/matsim/scenarios/countries/de/berlin/berlin-v6.4/output/berlin-v6.4-10pct/',
example: true,
},
{
name: 'Hamburg RealLabHH',
slug: 'reallabhh',
description: 'Hamburg, Germany',
description_de: 'Hamburg, Deutschland',
baseURL:
'https://svn.vsp.tu-berlin.de/repos/public-svn/matsim/scenarios/countries/de/hamburg/hamburg-v2/hamburg-v2.2/viz',
thumbnail: '/simwrapper/images/thumb-localfiles.jpg',
example: true,
},
{
name: 'Berlin BENE Project',
slug: 'bene',
description: 'widescreen, in German',
baseURL:
'https://svn.vsp.tu-berlin.de/repos/public-svn/matsim/scenarios/countries/de/berlin/projects/bene/website',
thumbnail: '/simwrapper/images/thumb-localfiles.jpg',
hidden: false,
example: true,
},
{
name: 'Visualization Examples',
slug: 'examples',
description: 'Various SimWrapper data vis types',
thumbnail: 'images/thumb-localfiles.jpg',
baseURL: 'https://svn.vsp.tu-berlin.de/repos/public-svn/shared/simwrapper',
example: true,
},
{
name: 'Additional Sample Data',
slug: 'sample-data',
description: 'Sample data from various cities',
name: '"Chicago Regional" Example',
slug: 'aequilibrae-example',
description: 'Example model using the AequilibraE plugin',
thumbnail: 'images/thumb-localfiles.jpg',
baseURL: 'https://svn.vsp.tu-berlin.de/repos/public-svn/shared/sample-data',
example: true,
baseURL: 'https://aequilibrae-simwrapper-demo.s3.amazonaws.com/',
isS3: true,
},
Comment on lines 136 to 144
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fileSystemConfig example data sources have been completely replaced with a single AequilibraE example. The PR description states "we don't want to suggest merging these back to the original SimWrapper project." This change removes all the default VSP/TU-Berlin examples that are part of the core SimWrapper experience. Please revert these changes or ensure they're in a separate configuration file that doesn't affect the base application.

Copilot uses AI. Check for mistakes.
{
name: 'Localhost:8000',
Expand Down
Loading
Loading