Add web frontend and refactor core to use OsmError
- Refactor core.py: replace sys.exit() calls with OsmError exceptions
so the library is safe to use from Flask and other callers
- Add fetch_sibling_routes and fetch_route_master_routes to core.py
- Add Flask web frontend (web/app.py, templates, static assets):
- Map view with Leaflet; full route drawn in grey on load
- Sidebar stop list; active-slot UX for From/To selection
- Segment preview and download (full route or selected segment)
- Include-stops toggle applied client-side
- Bookmarkable URLs: GET /<relation_id>
- Clear selection button
- Other directions panel (sibling routes from same route_master)
- route_master handling: draws all member routes in colour on map
with links to each individual direction
- Add SVG favicon
- Add py.typed marker; add .gitignore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
d3e6d7ac42
commit
e0ade9e5ab
13 changed files with 1049 additions and 20 deletions
68
web/static/style.css
Normal file
68
web/static/style.css
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
html, body {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#main-row {
|
||||
height: calc(100vh - 56px); /* subtract navbar height */
|
||||
}
|
||||
|
||||
#sidebar {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
#map {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.slot-box {
|
||||
border: 2px solid #dee2e6;
|
||||
border-radius: 6px;
|
||||
padding: 0.4rem 0.6rem;
|
||||
cursor: pointer;
|
||||
min-height: 2.2rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
transition: border-color 0.15s;
|
||||
}
|
||||
|
||||
.slot-box.active {
|
||||
border-color: #0d6efd;
|
||||
background: #f0f5ff;
|
||||
}
|
||||
|
||||
.slot-box .placeholder {
|
||||
color: #adb5bd;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.slot-box .pencil {
|
||||
color: #0d6efd;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
#stop-list .stop-item {
|
||||
cursor: pointer;
|
||||
padding: 0.25rem 0.5rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
#stop-list .stop-item:hover {
|
||||
background: #e9ecef;
|
||||
}
|
||||
|
||||
#stop-list .stop-item.is-from {
|
||||
background: #d1e7dd;
|
||||
}
|
||||
|
||||
#stop-list .stop-item.is-to {
|
||||
background: #f8d7da;
|
||||
}
|
||||
|
||||
.leaflet-container {
|
||||
font-family: inherit;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue