diff --git a/src/components/Global/TrainModal.vue b/src/components/Global/TrainModal.vue
index f2837e9..b22230c 100644
--- a/src/components/Global/TrainModal.vue
+++ b/src/components/Global/TrainModal.vue
@@ -1,18 +1,36 @@
+
+
+
+ {{ chosenTrain.timetableData.category }} {{ chosenTrain.trainNo }}
+ {{ chosenTrain.driverName }} •
+ {{ chosenTrain.timetableData.route.replace('|', ' > ') }}
+ •
+ {{ currentDistance(chosenTrain.timetableData.followingStops) }} km /
+ {{ chosenTrain.timetableData.routeDistance }} km
+ •
+ {{ displayTrainPosition(chosenTrain) }}
+ •
+ {{ chosenTrain.speed }}km/h
+
+
+
+
-
+
@@ -56,6 +94,19 @@ export default defineComponent({
@import '../../styles/responsive.scss';
@import '../../styles/card.scss';
+.top-info-bar-anim {
+ &-enter-active,
+ &-leave-active {
+ transition: all 150ms ease-in-out;
+ }
+
+ &-enter-from,
+ &-leave-to {
+ transform: translate(-50%, -50%) scale(0.8);
+ opacity: 0;
+ }
+}
+
.exit {
position: absolute;
top: 0;
@@ -63,7 +114,7 @@ export default defineComponent({
margin: 1em 2em;
- background-color: #00000077;
+ background-color: #000000;
outline: 2px solid white;
padding: 0.25em;
border-radius: 50%;
@@ -94,12 +145,30 @@ export default defineComponent({
overflow: hidden;
}
+.top-info-bar {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 100%;
+
+ padding: 0.5em 1em;
+ padding-right: 4em;
+ text-align: center;
+
+ overflow: hidden;
+
+ z-index: 101;
+
+ background-color: #000000dd;
+}
+
.content {
overflow: auto;
max-height: 95vh;
}
-@include smallScreen {
+@include midScreen {
.exit {
top: auto;
bottom: 0;
@@ -110,5 +179,13 @@ export default defineComponent({
width: 1.75rem;
}
}
+
+ .content {
+ padding-bottom: 3em;
+ }
+
+ .top-info-bar {
+ padding: 0.5em 1em;
+ }
}
diff --git a/src/components/TrainsView/TrainInfo.vue b/src/components/TrainsView/TrainInfo.vue
index fc97114..552797e 100644
--- a/src/components/TrainsView/TrainInfo.vue
+++ b/src/components/TrainsView/TrainInfo.vue
@@ -59,24 +59,7 @@
-
- {{ $t('trains.current-scenery') }} {{ train['currentStationName'] }}
-
-
-
- {{ $t('trains.current-scenery') }}
- {{ train['currentStationName'].replace(/.[a-zA-Z0-9]+.sc/, '') }} (offline)
-
-
-
- {{ $t('trains.current-signal') }} {{ train['signal'] }}
-
-
-
- {{ $t('trains.current-track') }} {{ train['connectedTrack'] }}
-
-
- ({{ displayDistance(train.distance) }})
+ {{ displayTrainPosition(train) }}
@@ -160,14 +143,11 @@ export default defineComponent({
grid-template-rows: 1fr;
padding: 1em;
+
background-color: #202020;
gap: 0.5em;
}
-.driver_position:first-letter {
- text-transform: capitalize;
-}
-
.timetable-id {
margin-right: 0.3em;
color: #d2d2d2;
diff --git a/src/mixins/trainInfoMixin.ts b/src/mixins/trainInfoMixin.ts
index fa6cb1b..28524d8 100644
--- a/src/mixins/trainInfoMixin.ts
+++ b/src/mixins/trainInfoMixin.ts
@@ -55,6 +55,21 @@ export default defineComponent({
: this.$t('trains.last-seen-ago', { minutes: diffMins });
},
+ displayTrainPosition(train: Train) {
+ let positionString = '';
+
+ if (train.currentStationHash)
+ positionString += this.$t('trains.current-scenery') + ' ' + train.currentStationName + ' ';
+
+ if (train.signal) positionString += this.$t('trains.current-signal') + ' ' + train.signal + ' ';
+
+ if (train.connectedTrack) positionString += this.$t('trains.current-track') + ' ' + train.connectedTrack + ' ';
+
+ if (train.distance) positionString += `(${this.displayDistance(train.distance)})`;
+
+ return positionString.charAt(0).toUpperCase() + positionString.slice(1);
+ },
+
displayStopList(stops: TrainStop[]): string | undefined {
if (!stops) return '';
@@ -62,11 +77,7 @@ export default defineComponent({
.reduce((acc: string[], stop: TrainStop, i: number) => {
if (stop.stopType.includes('ph') && !stop.stopNameRAW.includes('po.'))
acc.push(`${stop.stopName}`);
- else if (
- i > 0 &&
- i < stops.length - 1 &&
- !/po\.|sbl/gi.test(stop.stopNameRAW)
- )
+ else if (i > 0 && i < stops.length - 1 && !/po\.|sbl/gi.test(stop.stopNameRAW))
acc.push(`${stop.stopName}`);
return acc;
}, [])