diff --git a/src/components/TrainsView/TrainInfo.vue b/src/components/TrainsView/TrainInfo.vue index 97d4585..16f6123 100644 --- a/src/components/TrainsView/TrainInfo.vue +++ b/src/components/TrainsView/TrainInfo.vue @@ -2,26 +2,24 @@
- - #{{ train.timetableData.timetableId }} + ? + #{{ train.timetableData.timetableId }} - - TWR - SKR - - - {{ train.timetableData.category }} - -  {{ train.trainNo }} - | - - {{ train.driverName }} | - - {{ train.driverLevel < 2 ? 'L' : `${train.driverLevel} lvl` }} - - - ? + + TWR + SKR + + + {{ train.timetableData.category }}  + {{ train.trainNo }} + + | + {{ train.driverName }} + | + + {{ train.driverLevel < 2 ? 'L' : `${train.driverLevel} lvl` }} +
@@ -44,9 +42,7 @@
- - -1 ? (exp < 2 ? '#26B0D9' : `hsl(${-exp * 5 + 100}, 75%, 50%)`) : '#666'; - return `color: ${textColor};`; + return `color: ${textColor}; ${isSupporter ? 'text-shadow: 0 0 10px ' + textColor : ''};`; }, statusClasses(occupiedTo: string) { diff --git a/src/scripts/managers/trainFilterManager.ts b/src/scripts/managers/trainFilterManager.ts index df7e6ed..674ab58 100644 --- a/src/scripts/managers/trainFilterManager.ts +++ b/src/scripts/managers/trainFilterManager.ts @@ -1,115 +1,120 @@ -import { TrainFilter } from "../../types/Trains/TrainOptionsTypes"; -import { TrainFilterType } from "../enums/TrainFilterType"; -import Train from "../interfaces/Train"; -import TrainStop from "../interfaces/TrainStop"; +import { TrainFilter } from '../../types/Trains/TrainOptionsTypes'; +import { TrainFilterType } from '../enums/TrainFilterType'; +import Train from '../interfaces/Train'; +import TrainStop from '../interfaces/TrainStop'; function confirmedPercentage(stops: TrainStop[] | undefined) { - if (!stops) return -1; + if (!stops) return -1; - return Number(((stops.filter((stop) => stop.confirmed).length / stops.length) * 100).toFixed(0)); -}; + return Number(((stops.filter((stop) => stop.confirmed).length / stops.length) * 100).toFixed(0)); +} function currentDelay(stops: TrainStop[] | undefined) { - if (!stops) return -Infinity; + if (!stops) return -Infinity; - const delay = - stops.find((stop, i) => (i == 0 && !stop.confirmed) || (i > 0 && stops[i - 1].confirmed && !stop.confirmed)) - ?.departureDelay || 0; + const delay = + stops.find((stop, i) => (i == 0 && !stop.confirmed) || (i > 0 && stops[i - 1].confirmed && !stop.confirmed)) + ?.departureDelay || 0; - return delay; -}; + return delay; +} function filterTrainList(trainList: Train[], searchedTrain: string, searchedDriver: string, filters: TrainFilter[]) { - return trainList.filter( - (train) => { - const isFiltered = filters.every(f => { - if (f.isActive) return true; + return trainList.filter((train) => { + const isFiltered = filters.every((f) => { + if (f.isActive) return true; - if (!train.timetableData) return filters.find(filter => filter.id == TrainFilterType.noTimetable)!.isActive; + if (!train.timetableData) return filters.find((filter) => filter.id == TrainFilterType.noTimetable)!.isActive; - switch (f.id) { - case TrainFilterType.comments: - return !train.timetableData.followingStops.some(stop => stop.comments); - - case TrainFilterType.twr: - return !train.timetableData.TWR; - - case TrainFilterType.skr: - return !train.timetableData.SKR; - - case TrainFilterType.passenger: - return !/^[AMRE]\D{2}$/.test(train.timetableData.category); - - case TrainFilterType.freight: - return !train.timetableData.category.startsWith('T'); - - case TrainFilterType.other: - return !/^[PXZL]\D{2}$/.test(train.timetableData.category); - - default: - return true; - } - }) + switch (f.id) { + case TrainFilterType.comments: + return !train.timetableData.followingStops.some((stop) => stop.comments); - return (searchedTrain.length > 0 ? train.trainNo.toString().startsWith(searchedTrain) : true) && - (searchedDriver.length > 0 ? train.driverName.toLowerCase().startsWith(searchedDriver.toLowerCase()) : true) && isFiltered - } + case TrainFilterType.twr: + return !train.timetableData.TWR; + case TrainFilterType.skr: + return !train.timetableData.SKR; + + case TrainFilterType.passenger: + return !/^[AMRE]\D{2}$/.test(train.timetableData.category); + + case TrainFilterType.freight: + return !train.timetableData.category.startsWith('T'); + + case TrainFilterType.other: + return !/^[PXZL]\D{2}$/.test(train.timetableData.category); + + default: + return true; + } + }); + + return ( + (searchedTrain.length > 0 ? train.trainNo.toString().startsWith(searchedTrain) : true) && + (searchedDriver.length > 0 ? train.driverName.toLowerCase().startsWith(searchedDriver.toLowerCase()) : true) && + (!train.timetableData ? !train.online : true) && + isFiltered ); + }); } function sortTrainList(trainList: Train[], sorterActive: { id: string; dir: number }) { - return trainList.sort((a: Train, b: Train) => { - switch (sorterActive.id) { - case 'mass': - if (a.mass > b.mass) return sorterActive.dir; - return -sorterActive.dir; + return trainList.sort((a: Train, b: Train) => { + switch (sorterActive.id) { + case 'id': + if ((a.timetableData?.timetableId || -1) > (b.timetableData?.timetableId || -1)) return sorterActive.dir; - case 'distance': - if ((a.timetableData?.routeDistance || -1) > (b.timetableData?.routeDistance || -1)) return sorterActive.dir; + return -sorterActive.dir; - return -sorterActive.dir; + case 'mass': + if (a.mass > b.mass) return sorterActive.dir; + return -sorterActive.dir; - case 'progress': - if (confirmedPercentage(a.timetableData?.followingStops) > confirmedPercentage(b.timetableData?.followingStops)) - return sorterActive.dir; + case 'distance': + if ((a.timetableData?.routeDistance || -1) > (b.timetableData?.routeDistance || -1)) return sorterActive.dir; - return -sorterActive.dir; + return -sorterActive.dir; - case 'delay': - if (currentDelay(a.timetableData?.followingStops) > currentDelay(b.timetableData?.followingStops)) - return sorterActive.dir; + case 'progress': + if (confirmedPercentage(a.timetableData?.followingStops) > confirmedPercentage(b.timetableData?.followingStops)) + return sorterActive.dir; - return -sorterActive.dir; + return -sorterActive.dir; - case 'speed': - if (a.speed > b.speed) return sorterActive.dir; - return -sorterActive.dir; + case 'delay': + if (currentDelay(a.timetableData?.followingStops) > currentDelay(b.timetableData?.followingStops)) + return sorterActive.dir; - case 'timetable': - if (a.trainNo > b.trainNo) return sorterActive.dir; - return -sorterActive.dir; + return -sorterActive.dir; - case 'length': - if (a.length > b.length) return sorterActive.dir; - return -sorterActive.dir; + case 'speed': + if (a.speed > b.speed) return sorterActive.dir; + return -sorterActive.dir; - default: - break; - } + case 'timetable': + if (a.trainNo > b.trainNo) return sorterActive.dir; + return -sorterActive.dir; - return 0; - }); + case 'length': + if (a.length > b.length) return sorterActive.dir; + return -sorterActive.dir; + + default: + break; + } + + return 0; + }); } export function filteredTrainList( - trainList: Train[], - searchedTrain: string, - searchedDriver: string, - sorterActive: { id: string; dir: number }, - filters: TrainFilter[] + trainList: Train[], + searchedTrain: string, + searchedDriver: string, + sorterActive: { id: string; dir: number }, + filters: TrainFilter[] ) { - - const filtered = filterTrainList(trainList, searchedTrain, searchedDriver, filters); - return [...sortTrainList(filtered, sorterActive)]; -}; \ No newline at end of file + const filtered = filterTrainList(trainList, searchedTrain, searchedDriver, filters); + return [...sortTrainList(filtered, sorterActive)]; +} diff --git a/src/views/TrainsView.vue b/src/views/TrainsView.vue index 92b74e3..dfac6ba 100644 --- a/src/views/TrainsView.vue +++ b/src/views/TrainsView.vue @@ -2,7 +2,7 @@