Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c2f7eef146 | |||
| b34f8229cc | |||
| f1eee97d46 | |||
| d93be0b9be | |||
| 5190eed7ee | |||
| a6f284270e | |||
| 08422caa96 | |||
| 3a70d8f6a6 | |||
| e3e5eb3460 | |||
| 1819569234 |
@@ -62,24 +62,24 @@
|
||||
crossorigin
|
||||
/>
|
||||
|
||||
<link rel="preload" as="image" href="/images/icon-pl.svg" />
|
||||
<link rel="preload" as="image" href="/images/stacjownik-header-logo.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-dispatcher.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-train.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-arrow-asc.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-arrow-desc.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-filter2.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-stats.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-gnr.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-pojazdownik.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-diamond.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-stats.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-filter2.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-user.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-like.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-gnr.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-spawn.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-timetableAll.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-timetableUnconfirmed.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-timetableConfirmed.svg" />
|
||||
<link rel="preload" as="image" href="/images/icon-discord.png" />
|
||||
|
||||
<link rel="prefetch" as="image" href="/images/icon-arrow-asc.svg" />
|
||||
<link rel="prefetch" as="image" href="/images/icon-diamond.svg" />
|
||||
|
||||
<!-- Static OpenGraph meta -->
|
||||
<meta name="description" content="Pomocnik maszynisty i dyżurnego symulatora Train Driver 2" />
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "stacjownik",
|
||||
"version": "1.31.0",
|
||||
"version": "1.31.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-cz" viewBox="0 0 640 480">
|
||||
<path fill="#fff" d="M0 0h640v240H0z"/>
|
||||
<path fill="#d7141a" d="M0 240h640v240H0z"/>
|
||||
<path fill="#11457e" d="M360 240 0 0v480z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 225 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-de" viewBox="0 0 640 480">
|
||||
<path fill="#fc0" d="M0 320h640v160H0z"/>
|
||||
<path fill="#000001" d="M0 0h640v160H0z"/>
|
||||
<path fill="red" d="M0 160h640v160H0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 221 B |
|
Before Width: | Height: | Size: 504 B After Width: | Height: | Size: 504 B |
@@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-it" viewBox="0 0 640 480">
|
||||
<g fill-rule="evenodd" stroke-width="1pt">
|
||||
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||
<path fill="#009246" d="M0 0h213.3v480H0z"/>
|
||||
<path fill="#ce2b37" d="M426.7 0H640v480H426.7z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 289 B |
|
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 219 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ru" viewBox="0 0 640 480">
|
||||
<path fill="#fff" d="M0 0h640v160H0z"/>
|
||||
<path fill="#0039a6" d="M0 160h640v160H0z"/>
|
||||
<path fill="#d52b1e" d="M0 320h640v160H0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 225 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-se" viewBox="0 0 640 480">
|
||||
<path fill="#005293" d="M0 0h640v480H0z"/>
|
||||
<path fill="#fecb00" d="M176 0v192H0v96h176v192h96V288h368v-96H272V0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 209 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-sk" viewBox="0 0 640 480">
|
||||
<path fill="#ee1c25" d="M0 0h640v480H0z"/>
|
||||
<path fill="#0b4ea2" d="M0 0h640v320H0z"/>
|
||||
<path fill="#fff" d="M0 0h640v160H0z"/>
|
||||
<path fill="#fff" d="M233 370.8c-43-20.7-104.6-61.9-104.6-143.2 0-81.4 4-118.4 4-118.4h201.3s3.9 37 3.9 118.4S276 350 233 370.8"/>
|
||||
<path fill="#ee1c25" d="M233 360c-39.5-19-96-56.8-96-131.4s3.6-108.6 3.6-108.6h184.8s3.5 34 3.5 108.6C329 303.3 272.5 341 233 360"/>
|
||||
<path fill="#fff" d="M241.4 209c10.7.2 31.6.6 50.1-5.6 0 0-.4 6.7-.4 14.4s.5 14.4.5 14.4c-17-5.7-38.1-5.8-50.2-5.7v41.2h-16.8v-41.2c-12-.1-33.1 0-50.1 5.7 0 0 .5-6.7.5-14.4s-.5-14.4-.5-14.4c18.5 6.2 39.4 5.8 50 5.6v-25.9c-9.7 0-23.7.4-39.6 5.7 0 0 .5-6.6.5-14.4 0-7.7-.5-14.4-.5-14.4 15.9 5.3 29.9 5.8 39.6 5.7-.5-16.4-5.3-37-5.3-37s9.9.7 13.8.7 13.8-.7 13.8-.7-4.8 20.6-5.3 37c9.7.1 23.7-.4 39.6-5.7 0 0-.5 6.7-.5 14.4s.5 14.4.5 14.4a119 119 0 0 0-39.7-5.7v26z"/>
|
||||
<path fill="#0b4ea2" d="M233 263.3c-19.9 0-30.5 27.5-30.5 27.5s-6-13-22.2-13c-11 0-19 9.7-24.2 18.8 20 31.7 51.9 51.3 76.9 63.4 25-12 57-31.7 76.9-63.4-5.2-9-13.2-18.8-24.2-18.8-16.2 0-22.2 13-22.2 13S253 263.3 233 263.3"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ua" viewBox="0 0 640 480">
|
||||
<g fill-rule="evenodd" stroke-width="1pt">
|
||||
<path fill="gold" d="M0 0h640v480H0z"/>
|
||||
<path fill="#0057b8" d="M0 0h640v240H0z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 232 B |
|
Before Width: | Height: | Size: 34 KiB |
@@ -5,11 +5,11 @@
|
||||
|
||||
<div class="language-select">
|
||||
<button :data-active="$i18n.locale == 'pl'" @click="store.changeLocale('pl')">
|
||||
<img src="/images/icon-pl.svg" alt="" width="45" />
|
||||
<FlagIcon :language-id="0" width="2.5em" />
|
||||
</button>
|
||||
|
||||
<button :data-active="$i18n.locale == 'en'" @click="store.changeLocale('en')">
|
||||
<img src="/images/icon-en.svg" alt="" width="45" />
|
||||
<FlagIcon :language-id="1" width="2.5em" />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -116,6 +116,7 @@
|
||||
<script setup lang="ts">
|
||||
import Card from '../Global/Card.vue';
|
||||
import { useMainStore } from '../../store/mainStore';
|
||||
import FlagIcon from '../Global/FlagIcon.vue';
|
||||
|
||||
const store = useMainStore();
|
||||
|
||||
@@ -157,7 +158,7 @@ a.link {
|
||||
justify-content: center;
|
||||
margin: 0.5em 0;
|
||||
|
||||
button[data-active='false'] img {
|
||||
button[data-active='false'] ::v-deep(img) {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
<template>
|
||||
<div class="flag-icon">
|
||||
<img
|
||||
:src="languageFlagSrc"
|
||||
alt="language flag"
|
||||
:style="{
|
||||
width: width
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { getLanguageNameById } from '../../utils/languageUtils';
|
||||
|
||||
const props = defineProps({
|
||||
languageId: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
|
||||
width: {
|
||||
type: String
|
||||
}
|
||||
});
|
||||
|
||||
const languageFlagSrc = computed(
|
||||
() => `/images/flags/${getLanguageNameById(props.languageId)}.svg`
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.flag-icon {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flag-icon img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
@@ -1,23 +1,22 @@
|
||||
<template>
|
||||
<li class="dispatcher-history-entry">
|
||||
<div class="entry-info">
|
||||
<span>
|
||||
<span>
|
||||
<span class="entry-info-left">
|
||||
<div class="station-info">
|
||||
<router-link :to="`/journal/dispatchers?search-station=${entry.stationName}`">
|
||||
<b>{{ entry.stationName }}</b>
|
||||
</router-link>
|
||||
|
||||
<b class="text--grayed"> #{{ entry.stationHash }}</b>
|
||||
</span>
|
||||
•
|
||||
<b
|
||||
v-if="entry.dispatcherLevel !== null"
|
||||
class="level-badge dispatcher"
|
||||
:style="calculateExpStyle(entry.dispatcherLevel, entry.dispatcherIsSupporter)"
|
||||
>
|
||||
{{ entry.dispatcherLevel >= 2 ? entry.dispatcherLevel : 'L' }}
|
||||
</b>
|
||||
<b style="margin-left: 5px">
|
||||
•
|
||||
<b
|
||||
v-if="entry.dispatcherLevel !== null"
|
||||
class="level-badge dispatcher"
|
||||
:style="calculateExpStyle(entry.dispatcherLevel, entry.dispatcherIsSupporter)"
|
||||
>
|
||||
{{ entry.dispatcherLevel >= 2 ? entry.dispatcherLevel : 'L' }}
|
||||
</b>
|
||||
|
||||
<span
|
||||
v-if="apiStore.donatorsData.includes(entry.dispatcherName)"
|
||||
data-tooltip-type="DonatorTooltip"
|
||||
@@ -37,7 +36,11 @@
|
||||
>
|
||||
{{ entry.dispatcherName }}
|
||||
</router-link>
|
||||
</b>
|
||||
|
||||
<span class="dispatcher-language" v-if="entry.dispatcherLanguageId != null">
|
||||
<FlagIcon :language-id="entry.dispatcherLanguageId" width="1.75em" />
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span v-if="entry.timestampTo">
|
||||
@@ -118,6 +121,7 @@ import dateMixin from '../../../mixins/dateMixin';
|
||||
import styleMixin from '../../../mixins/styleMixin';
|
||||
import { useApiStore } from '../../../store/apiStore';
|
||||
import StationStatusBadge from '../../Global/StationStatusBadge.vue';
|
||||
import FlagIcon from '../../Global/FlagIcon.vue';
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
@@ -125,7 +129,7 @@ export default defineComponent({
|
||||
showExtraInfo: { type: Boolean, required: true }
|
||||
},
|
||||
|
||||
components: { StationStatusBadge },
|
||||
components: { StationStatusBadge, FlagIcon },
|
||||
mixins: [dateMixin, styleMixin],
|
||||
emits: ['toggleShowExtraInfo'],
|
||||
|
||||
@@ -164,6 +168,11 @@ export default defineComponent({
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.dispatcher-language {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.entry-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
@@ -185,6 +194,15 @@ export default defineComponent({
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.station-info {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
gap: 0.25em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.status-list {
|
||||
display: flex;
|
||||
overflow: auto;
|
||||
@@ -198,11 +216,15 @@ export default defineComponent({
|
||||
border-radius: 1em;
|
||||
}
|
||||
|
||||
@include responsive.smallScreen{
|
||||
@include responsive.smallScreen {
|
||||
.entry-info {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.station-info {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -71,6 +71,10 @@
|
||||
<router-link v-else :to="`/journal/timetables?search-driver=${timetable.driverName}`">
|
||||
<strong>{{ timetable.driverName }}</strong>
|
||||
</router-link>
|
||||
|
||||
<div v-if="timetable.driverLanguageId != null">
|
||||
<FlagIcon :language-id="timetable.driverLanguageId" width="1.75em" />
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<span class="general-time">
|
||||
@@ -110,8 +114,10 @@ import dateMixin from '../../../mixins/dateMixin';
|
||||
import styleMixin from '../../../mixins/styleMixin';
|
||||
import { useApiStore } from '../../../store/apiStore';
|
||||
import trainCategoryMixin from '../../../mixins/trainCategoryMixin';
|
||||
import FlagIcon from '../../Global/FlagIcon.vue';
|
||||
|
||||
export default defineComponent({
|
||||
components: { FlagIcon },
|
||||
mixins: [dateMixin, styleMixin, trainCategoryMixin],
|
||||
|
||||
data() {
|
||||
@@ -191,7 +197,7 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
|
||||
@include responsive.smallScreen{
|
||||
@include responsive.smallScreen {
|
||||
.item-general {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
</span>
|
||||
<span v-else>{{ onlineScenery.dispatcherName }}</span>
|
||||
</router-link>
|
||||
|
||||
<FlagIcon :languageId="onlineScenery.dispatcherLanguageId" width="1.25em" />
|
||||
</div>
|
||||
|
||||
<div class="info-bottom">
|
||||
@@ -51,9 +53,11 @@ import styleMixin from '../../../mixins/styleMixin';
|
||||
import StationStatusBadge from '../../Global/StationStatusBadge.vue';
|
||||
import { ActiveScenery } from '../../../typings/common';
|
||||
import { useApiStore } from '../../../store/apiStore';
|
||||
import FlagIcon from '../../Global/FlagIcon.vue';
|
||||
|
||||
export default defineComponent({
|
||||
mixins: [styleMixin, dateMixin, routerMixin],
|
||||
components: { StationStatusBadge, FlagIcon },
|
||||
|
||||
data() {
|
||||
return {
|
||||
@@ -66,8 +70,7 @@ export default defineComponent({
|
||||
type: Object as PropType<ActiveScenery>,
|
||||
required: false
|
||||
}
|
||||
},
|
||||
components: { StationStatusBadge }
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -146,6 +146,14 @@
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td class="station-dispatcher-lang">
|
||||
<FlagIcon
|
||||
v-if="station.onlineInfo && station.onlineInfo.dispatcherLanguageId != -1"
|
||||
:language-id="station.onlineInfo.dispatcherLanguageId"
|
||||
width="2.25em"
|
||||
/>
|
||||
</td>
|
||||
|
||||
<td class="station-dispatcher-exp">
|
||||
<span
|
||||
v-if="station.onlineInfo && station.onlineInfo?.dispatcherExp != -1"
|
||||
@@ -344,11 +352,13 @@ import { useTooltipStore } from '../../store/tooltipStore';
|
||||
import { getChangedFilters } from '../../managers/stationFilterManager';
|
||||
import { ActiveSorter, HeadIdsType, headIconsIds, headIds } from './typings';
|
||||
import { filterStations, sortStations } from './utils';
|
||||
import { getLanguageNameById } from '../../utils/languageUtils';
|
||||
import FlagIcon from '../Global/FlagIcon.vue';
|
||||
|
||||
export default defineComponent({
|
||||
emits: ['toggleDonationCard'],
|
||||
|
||||
components: { Loading, StationStatusBadge },
|
||||
components: { Loading, StationStatusBadge, FlagIcon },
|
||||
mixins: [styleMixin, dateMixin],
|
||||
|
||||
data: () => ({
|
||||
@@ -495,6 +505,10 @@ thead th {
|
||||
width: 12em;
|
||||
}
|
||||
|
||||
&.dispatcher-lang {
|
||||
width: 6em;
|
||||
}
|
||||
|
||||
&.dispatcher-lvl {
|
||||
width: 6em;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ export const headIds = [
|
||||
'min-lvl',
|
||||
'status',
|
||||
'dispatcher',
|
||||
'dispatcher-lang',
|
||||
'dispatcher-lvl',
|
||||
'routes-single',
|
||||
'routes-double',
|
||||
|
||||
@@ -210,6 +210,11 @@ export const sortStations = (a: Station, b: Station, sorter: ActiveSorter) => {
|
||||
diff = (a.onlineInfo?.dispatcherExp || 0) - (b.onlineInfo?.dispatcherExp || 0);
|
||||
break;
|
||||
|
||||
case 'dispatcher-lang':
|
||||
diff =
|
||||
(a.onlineInfo?.dispatcherLanguageId ?? -1) - (b.onlineInfo?.dispatcherLanguageId ?? -1);
|
||||
break;
|
||||
|
||||
case 'routes-single':
|
||||
diff =
|
||||
(a.generalInfo?.routes.single.filter((r) => !r.hidden && !r.isInternal).length ?? -1) -
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
|
||||
<span v-else>{{ train.driverName }}</span>
|
||||
</div>
|
||||
|
||||
<div class="train-language-flag">
|
||||
<FlagIcon :language-id="train.driverLanguageId" width="1.75em" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -199,10 +203,11 @@ import trainInfoMixin from '../../mixins/trainInfoMixin';
|
||||
import trainCategoryMixin from '../../mixins/trainCategoryMixin';
|
||||
import ProgressBar from '../Global/ProgressBar.vue';
|
||||
import StockList from '../Global/StockList.vue';
|
||||
import FlagIcon from '../Global/FlagIcon.vue';
|
||||
|
||||
export default defineComponent({
|
||||
mixins: [trainInfoMixin, styleMixin, trainCategoryMixin],
|
||||
components: { ProgressBar, StockList },
|
||||
components: { ProgressBar, StockList, FlagIcon },
|
||||
|
||||
props: {
|
||||
train: {
|
||||
|
||||
@@ -337,6 +337,7 @@
|
||||
"min-lvl": "Scenery\nlevel",
|
||||
"status": "Status",
|
||||
"dispatcher": "Dispatcher",
|
||||
"dispatcher-lang": "Language",
|
||||
"dispatcher-lvl": "Dispatcher\nlevel",
|
||||
"routes-single": "1-track\nroutes",
|
||||
"routes-double": "2-track\nroutes",
|
||||
|
||||
@@ -334,6 +334,7 @@
|
||||
"min-lvl": "Poziom\nscenerii",
|
||||
"status": "Status",
|
||||
"dispatcher": "Dyżurny",
|
||||
"dispatcher-lang": "Język",
|
||||
"dispatcher-lvl": "Poziom\ndyżurnego",
|
||||
"routes-single": "Szlaki\n1-torowe",
|
||||
"routes-double": "Szlaki\n2-torowe",
|
||||
|
||||
@@ -87,6 +87,7 @@ export const useMainStore = defineStore('mainStore', {
|
||||
online: Boolean(train.online),
|
||||
driverId: train.driverId,
|
||||
driverName: train.driverName,
|
||||
driverLanguageId: train.driverLanguageId,
|
||||
currentStationName: train.currentStationName,
|
||||
currentStationHash: train.currentStationHash,
|
||||
connectedTrack: train.connectedTrack,
|
||||
@@ -258,6 +259,7 @@ export const useMainStore = defineStore('mainStore', {
|
||||
dispatcherIsSupporter: false,
|
||||
dispatcherStatus: Status.ActiveDispatcher.FREE,
|
||||
dispatcherTimestamp: -1,
|
||||
dispatcherLanguageId: -1,
|
||||
|
||||
isOnline: false,
|
||||
|
||||
@@ -304,6 +306,7 @@ export const useMainStore = defineStore('mainStore', {
|
||||
dispatcherIsSupporter: scenery.dispatcherIsSupporter,
|
||||
dispatcherStatus: scenery.dispatcherStatus,
|
||||
dispatcherTimestamp: dispatcherTimestamp,
|
||||
dispatcherLanguageId: scenery.dispatcherLanguageId,
|
||||
|
||||
isOnline: scenery.isOnline == 1,
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ export namespace API {
|
||||
dispatcherLevel: number | null;
|
||||
dispatcherRate: number;
|
||||
dispatcherIsSupporter: boolean;
|
||||
dispatcherLanguageId: number | null;
|
||||
dispatcherStatus?: number;
|
||||
isOnline: boolean;
|
||||
lastOnlineTimestamp: number;
|
||||
@@ -114,6 +115,7 @@ export namespace API {
|
||||
dispatcherId: number;
|
||||
dispatcherName: string;
|
||||
dispatcherIsSupporter: boolean;
|
||||
dispatcherLanguageId: number;
|
||||
stationName: string;
|
||||
stationHash: string;
|
||||
region: string;
|
||||
@@ -152,6 +154,7 @@ export namespace API {
|
||||
driverId: number;
|
||||
driverIsSupporter: boolean;
|
||||
driverLevel?: number;
|
||||
driverLanguageId: number;
|
||||
|
||||
currentStationName: string;
|
||||
currentStationHash?: string;
|
||||
@@ -221,6 +224,7 @@ export namespace API {
|
||||
driverName: string;
|
||||
driverLevel: number | null;
|
||||
driverIsSupporter: boolean;
|
||||
driverLanguageId: number | null;
|
||||
|
||||
route: string;
|
||||
twr: number;
|
||||
|
||||
@@ -60,6 +60,7 @@ export interface Train {
|
||||
distance: number;
|
||||
connectedTrack: string;
|
||||
driverId: number;
|
||||
driverLanguageId: number;
|
||||
trainNo: number;
|
||||
driverName: string;
|
||||
driverLevel: number;
|
||||
@@ -162,6 +163,7 @@ export interface ActiveScenery {
|
||||
dispatcherIsSupporter: boolean;
|
||||
dispatcherStatus: Status.ActiveDispatcher | number;
|
||||
dispatcherTimestamp: number | null;
|
||||
dispatcherLanguageId: number;
|
||||
isOnline: boolean;
|
||||
stationTrains: Train[];
|
||||
scheduledTrains: CheckpointTrain[];
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
export const languageFlagNames = ['pl', 'en', 'de', 'cz', 'sk', 'ru', 'se', 'ua', 'it'];
|
||||
|
||||
export function getLanguageNameById(languageId: number) {
|
||||
return languageFlagNames[languageId] ?? 'pl';
|
||||
}
|
||||
@@ -29,10 +29,7 @@
|
||||
data-tooltip-type="HtmlTooltip"
|
||||
:data-tooltip-content="`<b>${$t('app.language-tooltip-content')}</b>`"
|
||||
>
|
||||
<img
|
||||
:src="`/images/icon-${mainStore.currentLocale}.svg`"
|
||||
alt="change language flag icon"
|
||||
/>
|
||||
<FlagIcon :language-id="mainStore.currentLocale == 'pl' ? 0 : 1" />
|
||||
</button>
|
||||
|
||||
<a
|
||||
@@ -85,6 +82,7 @@ import { reactive } from 'vue';
|
||||
import { provide } from 'vue';
|
||||
import { ActiveSorter } from '../components/StationsView/typings';
|
||||
import { onMounted } from 'vue';
|
||||
import FlagIcon from '../components/Global/FlagIcon.vue';
|
||||
|
||||
const filterInitStates = { ...initFilters };
|
||||
|
||||
@@ -93,7 +91,8 @@ export default defineComponent({
|
||||
StationTable,
|
||||
StationFilterCard,
|
||||
StationStats,
|
||||
DonationCard
|
||||
DonationCard,
|
||||
FlagIcon
|
||||
},
|
||||
|
||||
data: () => ({
|
||||
|
||||