mirror of
https://github.com/Spythere/stacjownik.git
synced 2026-05-03 05:18:11 +00:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 916f6070ac | |||
| a74ab6eb2a | |||
| 985c699ced | |||
| 7e0e9146a5 | |||
| 30a0f05922 | |||
| a30e04ca96 | |||
| 1852d3e234 | |||
| a17bf6c03f | |||
| 766b08bc15 | |||
| cd1a4fa734 | |||
| acbe761068 | |||
| 44f6cf4232 |
@@ -0,0 +1,17 @@
|
||||
name: Deploy to Firebase Hosting on merge
|
||||
'on':
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
build_and_deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: yarn && yarn build
|
||||
- uses: FirebaseExtended/action-hosting-deploy@v0
|
||||
with:
|
||||
repoToken: '${{ secrets.GITHUB_TOKEN }}'
|
||||
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_STACJOWNIK_TD2 }}'
|
||||
channelId: live
|
||||
projectId: stacjownik-td2
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "stacjownik",
|
||||
"version": "1.26.0",
|
||||
"version": "1.26.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
<div class="stock-list">
|
||||
<ul>
|
||||
<li
|
||||
v-for="({ vehicleName, vehicleCargo, images, imagesFallbacks }, i) in thumbnailNames"
|
||||
v-for="(
|
||||
{ vehicleName, vehicleCargo, images, imagesFallbacks, vehicleString }, i
|
||||
) in thumbnailNames"
|
||||
:key="i"
|
||||
>
|
||||
<div class="stock-text">
|
||||
@@ -13,7 +15,7 @@
|
||||
<span>
|
||||
<VehicleThumbnail
|
||||
v-for="(thumbnailImage, imageIndex) in images"
|
||||
:vehicle-name="vehicleName"
|
||||
:vehicle-name="vehicleString"
|
||||
:img-name="thumbnailImage"
|
||||
:fallback-name="imagesFallbacks[imageIndex]"
|
||||
/>
|
||||
@@ -63,7 +65,8 @@ export default defineComponent({
|
||||
images: [] as string[],
|
||||
imagesFallbacks: [] as string[],
|
||||
vehicleName,
|
||||
vehicleCargo
|
||||
vehicleCargo,
|
||||
vehicleString
|
||||
};
|
||||
|
||||
// Generowanie członów EN57
|
||||
|
||||
@@ -5,10 +5,9 @@
|
||||
:src="`https://static.spythere.eu/thumbnails/v2/${imgName}.png`"
|
||||
height="60"
|
||||
loading="lazy"
|
||||
:data-mouseover="vehicleName"
|
||||
data-tooltip-type="VehiclePreviewTooltip"
|
||||
:data-tooltip-content="vehicleName"
|
||||
:data-load-status="imgStatus"
|
||||
data-tooltip-type="VehiclePreviewTooltip"
|
||||
@error="onImageError"
|
||||
@load="onImageLoad"
|
||||
/>
|
||||
|
||||
@@ -9,7 +9,11 @@
|
||||
</span>
|
||||
|
||||
<span>
|
||||
<strong class="text--primary">
|
||||
<strong
|
||||
data-tooltip-type="BaseTooltip"
|
||||
:data-tooltip-content="getCategoryExplanation(timetable.trainCategoryCode)"
|
||||
class="text--primary tooltip-help"
|
||||
>
|
||||
{{ timetable.trainCategoryCode }}
|
||||
</strong>
|
||||
<strong> {{ timetable.trainNo }}</strong>
|
||||
@@ -83,9 +87,10 @@ import dateMixin from '../../../mixins/dateMixin';
|
||||
import modalTrainMixin from '../../../mixins/modalTrainMixin';
|
||||
import styleMixin from '../../../mixins/styleMixin';
|
||||
import { useApiStore } from '../../../store/apiStore';
|
||||
import trainCategoryMixin from '../../../mixins/trainCategoryMixin';
|
||||
|
||||
export default defineComponent({
|
||||
mixins: [dateMixin, modalTrainMixin, styleMixin],
|
||||
mixins: [dateMixin, modalTrainMixin, styleMixin, trainCategoryMixin],
|
||||
|
||||
data() {
|
||||
return {
|
||||
|
||||
@@ -73,15 +73,20 @@
|
||||
>
|
||||
<span class="timetable-general">
|
||||
<span class="general-info">
|
||||
<span class="info-number">
|
||||
<strong>{{ row.train.timetableData!.category }}</strong>
|
||||
{{ row.train.trainNo }}
|
||||
|
||||
<span>
|
||||
<b
|
||||
data-tooltip-type="BaseTooltip"
|
||||
:data-tooltip-content="getCategoryExplanation(row.train.timetableData!.category)"
|
||||
class="text--primary tooltip-help"
|
||||
>
|
||||
{{ row.train.timetableData!.category }}
|
||||
</b>
|
||||
<b> {{ row.train.trainNo }}</b>
|
||||
<span v-if="row.checkpointStop.comments" :title="row.checkpointStop.comments">
|
||||
<img src="/images/icon-warning.svg" />
|
||||
</span>
|
||||
</span>
|
||||
|
|
||||
•
|
||||
<span>
|
||||
{{ row.train.driverName }}
|
||||
</span>
|
||||
@@ -180,13 +185,14 @@ import { useApiStore } from '../../store/apiStore';
|
||||
import { ActiveScenery, Station } from '../../typings/common';
|
||||
import { SceneryTimetableRow } from './typings';
|
||||
import { getTrainStopStatus, stopStatusPriority } from './utils';
|
||||
import trainCategoryMixin from '../../mixins/trainCategoryMixin';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'SceneryTimetable',
|
||||
|
||||
components: { Loading, ScheduledTrainStatus },
|
||||
|
||||
mixins: [dateMixin, routerMixin, modalTrainMixin],
|
||||
mixins: [dateMixin, routerMixin, modalTrainMixin, trainCategoryMixin],
|
||||
|
||||
props: {
|
||||
station: {
|
||||
@@ -243,7 +249,7 @@ export default defineComponent({
|
||||
return this.onlineScenery.scheduledTrains
|
||||
.filter(
|
||||
(ct) =>
|
||||
ct.timetablePathElement.stationName == sceneryName &&
|
||||
// ct.timetablePathElement.stationName == sceneryName &&
|
||||
ct.train.region == this.mainStore.region.id &&
|
||||
this.chosenCheckpoint &&
|
||||
ct.checkpointStop.stopNameRAW.toLowerCase() == this.chosenCheckpoint.toLowerCase()
|
||||
|
||||
@@ -23,6 +23,7 @@ export default defineComponent({
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 0.5em;
|
||||
white-space: pre-line;
|
||||
|
||||
padding: 0.25em 0.5em;
|
||||
border-radius: 0.25em;
|
||||
|
||||
@@ -28,12 +28,15 @@
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<strong>
|
||||
<span v-if="train.timetableData" class="text--primary"
|
||||
>{{ train.timetableData.category }} </span
|
||||
>
|
||||
<span class="train-number">{{ train.trainNo }}</span>
|
||||
</strong>
|
||||
<b
|
||||
v-if="train.timetableData"
|
||||
data-tooltip-type="BaseTooltip"
|
||||
:data-tooltip-content="getCategoryExplanation(train.timetableData.category)"
|
||||
class="text--primary tooltip-help"
|
||||
>
|
||||
{{ train.timetableData.category }}
|
||||
</b>
|
||||
<b class="train-number">{{ train.trainNo }}</b>
|
||||
<span>•</span>
|
||||
<b
|
||||
class="level-badge driver"
|
||||
@@ -181,9 +184,10 @@ import { useApiStore } from '../../store/apiStore';
|
||||
import StockList from '../Global/StockList.vue';
|
||||
import modalTrainMixin from '../../mixins/modalTrainMixin';
|
||||
import { Train } from '../../typings/common';
|
||||
import trainCategoryMixin from '../../mixins/trainCategoryMixin';
|
||||
|
||||
export default defineComponent({
|
||||
mixins: [trainInfoMixin, styleMixin, modalTrainMixin],
|
||||
mixins: [trainInfoMixin, styleMixin, modalTrainMixin, trainCategoryMixin],
|
||||
components: { ProgressBar, StockList },
|
||||
|
||||
props: {
|
||||
|
||||
+41
-1
@@ -48,7 +48,47 @@
|
||||
"footer": {
|
||||
"discord": "Stacjownik Discord server"
|
||||
},
|
||||
"categories": {
|
||||
"EI": "domestic express",
|
||||
"EC": "international express",
|
||||
"EN": "domestic night express",
|
||||
|
||||
"MP": "intervoivodeship bullet",
|
||||
"MO": "intervoivodeship regio",
|
||||
"MM": "international bullet",
|
||||
"MH": "intervoivodeship night bullet",
|
||||
|
||||
"RP": "voivodeship bullet",
|
||||
"RM": "international voivodeship regio",
|
||||
"RO": "voivodeship regio",
|
||||
"RA": "voivodeship regio (urban)",
|
||||
|
||||
"PW": "empty passenger",
|
||||
"PX": "empty passenger test drive",
|
||||
|
||||
"TC": "international freight (intermodal)",
|
||||
"TG": "international freight (organized cargo)",
|
||||
"TR": "international freight (unorganized cargo)",
|
||||
"TD": "domestic freight (intermodal)",
|
||||
"TM": "domestic freight (organized cargo)",
|
||||
"TN": "domestic freight (unorganized cargo)",
|
||||
"TK": "freight (for stations & sidings)",
|
||||
"TS": "empty freight test drive",
|
||||
"TH": "locomotive rolling stock (over 3 vehicles)",
|
||||
|
||||
"LT": "freight locomotive only",
|
||||
"LP": "passenger locomotive only",
|
||||
"LS": "shunting locomotive only",
|
||||
"LZ": "shunting locomotive only",
|
||||
|
||||
"ZN": "inspection / diagnostic type",
|
||||
"ZU": "other maintenance type",
|
||||
|
||||
"E": "electric loco",
|
||||
"J": "EMU",
|
||||
"S": "diesel loco",
|
||||
"M": "DMU"
|
||||
},
|
||||
"vehicle-preview": {
|
||||
"loading": "Loading preview...",
|
||||
"error": "Oops! The vehicle preview seems to be missing! :/"
|
||||
@@ -123,7 +163,7 @@
|
||||
"search-train": "Train no.",
|
||||
"search-driver": "Driver name",
|
||||
"search-dispatcher": "Dispatcher name",
|
||||
"search-station": "Scenery name",
|
||||
"search-station": "Scenery name / #",
|
||||
"search-author": "Timetable author name",
|
||||
"search-issuedFrom": "Issuing scenery name",
|
||||
"search-via": "Via scenery name",
|
||||
|
||||
+42
-1
@@ -45,6 +45,47 @@
|
||||
"footer": {
|
||||
"discord": "Serwer Discord Stacjownika"
|
||||
},
|
||||
"categories": {
|
||||
"EI": "ekspres krajowy",
|
||||
"EC": "ekspres międzynarodowy",
|
||||
"EN": "ekspres krajowy nocny",
|
||||
|
||||
"MP": "międzywojewódzki pospieszny",
|
||||
"MO": "międzywojewódzki osobowy",
|
||||
"MM": "międzynarodowy pospieszny",
|
||||
"MH": "międzywojewódzki pospieszny (nocny)",
|
||||
|
||||
"RP": "wojewódzki pospieszny",
|
||||
"RO": "wojewódzki osobowy",
|
||||
"RM": "wojewódzki osobowy międzynarodowy",
|
||||
"RA": "wojewódzki osobowy algomeracyjny",
|
||||
|
||||
"PW": "pasażerski próżny - służbowy",
|
||||
"PX": "pasażerski próżny próbny",
|
||||
|
||||
"TC": "towarowy międzynarodowy intermodalny",
|
||||
"TG": "towarowy międzynarodowy masowy",
|
||||
"TR": "towarowy międzynarodowy niemasowy",
|
||||
"TD": "towarowy krajowy intermodalny",
|
||||
"TM": "towarowy krajowy masowy",
|
||||
"TN": "towarowy krajowy niemasowy",
|
||||
"TK": "towarowy zdawczy",
|
||||
"TS": "towarowy próżny próbny",
|
||||
"TH": "skład lokomotyw (powyżej 3 pojazdów)",
|
||||
|
||||
"LT": "lokomotywa towarowa luzem",
|
||||
"LP": "lokomotywa pasażerska luzem",
|
||||
"LS": "lokomotywa manewrowa luzem",
|
||||
"LZ": "lokomotywa dla poc. utrzymaniowo-naprawczych",
|
||||
|
||||
"ZN": "inspekcyjny / diagnostyczny",
|
||||
"ZU": "inny utrzymaniowy",
|
||||
|
||||
"E": "elektrowóz",
|
||||
"J": "EZT",
|
||||
"S": "spalinowóz",
|
||||
"M": "SZT"
|
||||
},
|
||||
"vehicle-preview": {
|
||||
"loading": "Ładowanie podglądu...",
|
||||
"error": "Ups! Nie znaleziono podglądu pojazdu! :/"
|
||||
@@ -119,7 +160,7 @@
|
||||
"search-train": "Nr pociągu / #",
|
||||
"search-driver": "Nick maszynisty",
|
||||
"search-dispatcher": "Nick dyżurnego",
|
||||
"search-station": "Nazwa scenerii",
|
||||
"search-station": "Nazwa scenerii / #",
|
||||
"search-author": "Nick autora rozkładu jazdy",
|
||||
"search-issuedFrom": "Sceneria początkowa",
|
||||
"search-via": "Przez scenerię",
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
methods: {
|
||||
getCategoryExplanation(categoryCode: string) {
|
||||
const categoryKey = categoryCode.slice(0, 2);
|
||||
const vehicleTypeKey = categoryCode.slice(-1);
|
||||
|
||||
return `${this.$t('categories.' + categoryKey)}\n(${this.$t('categories.' + vehicleTypeKey)})`;
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -104,7 +104,7 @@ export const useMainStore = defineStore('mainStore', {
|
||||
arrivalRouteExt: arrival,
|
||||
departureRouteExt: departure,
|
||||
stationName: station.split(' ').slice(0, -1).join(' '),
|
||||
stationHash: station.split(' ').slice(-1).join(' ')
|
||||
stationHash: station.split(' ').slice(-1).join(' ').replace('.sc', '')
|
||||
};
|
||||
})
|
||||
}
|
||||
@@ -281,7 +281,11 @@ export const useMainStore = defineStore('mainStore', {
|
||||
if (!scheduledTrains) return;
|
||||
|
||||
scheduledTrains.forEach(({ train, checkpointStop, timetablePathElement, ...v }) => {
|
||||
if (scenery.name != timetablePathElement.stationName) return;
|
||||
if (
|
||||
scenery.name != timetablePathElement.stationName &&
|
||||
scenery.hash != timetablePathElement.stationHash
|
||||
)
|
||||
return;
|
||||
|
||||
scenery.scheduledTrains.push({ train, checkpointStop, timetablePathElement, ...v });
|
||||
|
||||
|
||||
@@ -308,6 +308,10 @@ a.a-button {
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.tooltip-help {
|
||||
cursor: help;
|
||||
}
|
||||
|
||||
@include smallScreen {
|
||||
::-webkit-scrollbar {
|
||||
width: 0.5em;
|
||||
|
||||
@@ -267,7 +267,10 @@ export default defineComponent({
|
||||
const timestampTo = timestampFrom ? timestampFrom + 86400000 : undefined;
|
||||
|
||||
if (dispatcher) queries.push(`dispatcherName=${dispatcher}`);
|
||||
if (station) queries.push(`stationName=${station}`);
|
||||
|
||||
if (station.startsWith("#")) queries.push(`stationHash=${station.slice(1)}`);
|
||||
else if (station.length > 0) queries.push(`stationName=${station}`);
|
||||
|
||||
if (timestampFrom && timestampTo)
|
||||
queries.push(`timestampFrom=${timestampFrom}`, `timestampTo=${timestampTo}`);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user