mirror of
https://github.com/Spythere/stacjownik.git
synced 2026-05-04 13:58:12 +00:00
format & lint
This commit is contained in:
+77
-77
@@ -1,77 +1,77 @@
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
methods: {
|
||||
localeDate(dateString: string, locale: string) {
|
||||
return new Date(dateString).toLocaleDateString(locale == 'pl' ? 'pl-PL' : 'en-GB', {
|
||||
weekday: 'long',
|
||||
day: 'numeric',
|
||||
month: '2-digit',
|
||||
year: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
});
|
||||
},
|
||||
|
||||
localeDay(dateString: string, locale: string) {
|
||||
return new Date(dateString).toLocaleDateString(locale == 'pl' ? 'pl-PL' : 'en-GB', {
|
||||
day: 'numeric',
|
||||
month: '2-digit',
|
||||
year: 'numeric',
|
||||
});
|
||||
},
|
||||
|
||||
localeDateTime(dateString: string, locale: string) {
|
||||
return new Date(dateString).toLocaleString(locale == 'pl' ? 'pl-PL' : 'en-GB', {
|
||||
timeStyle: 'short',
|
||||
dateStyle: 'medium'
|
||||
});
|
||||
},
|
||||
|
||||
localeTime(dateString: string, locale: string) {
|
||||
return new Date(dateString).toLocaleTimeString(locale == 'pl' ? 'pl-PL' : 'en-GB', {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
});
|
||||
},
|
||||
|
||||
stringToDate(dateString?: string) {
|
||||
return dateString ? new Date(dateString) : null;
|
||||
},
|
||||
|
||||
parseDateToTimeString(date: Date | null) {
|
||||
return (
|
||||
date?.toLocaleTimeString('pl-PL', {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
}) || ''
|
||||
);
|
||||
},
|
||||
|
||||
timestampToString(timestamp: number | null) {
|
||||
return timestamp
|
||||
? new Date(timestamp).toLocaleTimeString('pl-PL', {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
})
|
||||
: '';
|
||||
},
|
||||
|
||||
calculateDuration(timestampMs: number, showSeconds = false) {
|
||||
const secondsTotal = Math.floor(timestampMs / 1000);
|
||||
const minsTotal = Math.round(timestampMs / 60000);
|
||||
const hoursTotal = Math.floor(minsTotal / 60);
|
||||
const minsInHour = minsTotal % 60;
|
||||
|
||||
return minsTotal >= 60
|
||||
? `${this.$t('journal.hours', { value: hoursTotal }, hoursTotal)} ${this.$t(
|
||||
'journal.minutes',
|
||||
{ value: minsInHour },
|
||||
minsInHour
|
||||
)}`
|
||||
: showSeconds && secondsTotal <= 60
|
||||
? this.$t('journal.seconds', { value: secondsTotal }, secondsTotal)
|
||||
: this.$t('journal.minutes', { value: minsTotal }, minsTotal);
|
||||
},
|
||||
},
|
||||
});
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
methods: {
|
||||
localeDate(dateString: string, locale: string) {
|
||||
return new Date(dateString).toLocaleDateString(locale == 'pl' ? 'pl-PL' : 'en-GB', {
|
||||
weekday: 'long',
|
||||
day: 'numeric',
|
||||
month: '2-digit',
|
||||
year: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
});
|
||||
},
|
||||
|
||||
localeDay(dateString: string, locale: string) {
|
||||
return new Date(dateString).toLocaleDateString(locale == 'pl' ? 'pl-PL' : 'en-GB', {
|
||||
day: 'numeric',
|
||||
month: '2-digit',
|
||||
year: 'numeric'
|
||||
});
|
||||
},
|
||||
|
||||
localeDateTime(dateString: string, locale: string) {
|
||||
return new Date(dateString).toLocaleString(locale == 'pl' ? 'pl-PL' : 'en-GB', {
|
||||
timeStyle: 'short',
|
||||
dateStyle: 'medium'
|
||||
});
|
||||
},
|
||||
|
||||
localeTime(dateString: string, locale: string) {
|
||||
return new Date(dateString).toLocaleTimeString(locale == 'pl' ? 'pl-PL' : 'en-GB', {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
});
|
||||
},
|
||||
|
||||
stringToDate(dateString?: string) {
|
||||
return dateString ? new Date(dateString) : null;
|
||||
},
|
||||
|
||||
parseDateToTimeString(date: Date | null) {
|
||||
return (
|
||||
date?.toLocaleTimeString('pl-PL', {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
}) || ''
|
||||
);
|
||||
},
|
||||
|
||||
timestampToString(timestamp: number | null) {
|
||||
return timestamp
|
||||
? new Date(timestamp).toLocaleTimeString('pl-PL', {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
})
|
||||
: '';
|
||||
},
|
||||
|
||||
calculateDuration(timestampMs: number, showSeconds = false) {
|
||||
const secondsTotal = Math.floor(timestampMs / 1000);
|
||||
const minsTotal = Math.round(timestampMs / 60000);
|
||||
const hoursTotal = Math.floor(minsTotal / 60);
|
||||
const minsInHour = minsTotal % 60;
|
||||
|
||||
return minsTotal >= 60
|
||||
? `${this.$t('journal.hours', { value: hoursTotal }, hoursTotal)} ${this.$t(
|
||||
'journal.minutes',
|
||||
{ value: minsInHour },
|
||||
minsInHour
|
||||
)}`
|
||||
: showSeconds && secondsTotal <= 60
|
||||
? this.$t('journal.seconds', { value: secondsTotal }, secondsTotal)
|
||||
: this.$t('journal.minutes', { value: minsTotal }, minsTotal);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -7,7 +7,7 @@ export default defineComponent({
|
||||
},
|
||||
|
||||
getImage(name: string) {
|
||||
return new URL(`../assets/${name}`, import.meta.url).href;
|
||||
return new URL(`../assets/${name}`, import.meta.url).href;
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
+27
-26
@@ -1,26 +1,27 @@
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
data() {
|
||||
return {
|
||||
preventKeyDown: false,
|
||||
};
|
||||
},
|
||||
|
||||
activated() {
|
||||
window.addEventListener('keydown', this.handleKeyDown);
|
||||
},
|
||||
|
||||
deactivated() {
|
||||
window.removeEventListener('keydown', this.handleKeyDown);
|
||||
},
|
||||
|
||||
methods: {
|
||||
onKeyDownFunction() {},
|
||||
|
||||
handleKeyDown(e: KeyboardEvent) {
|
||||
if (!e.key) return;
|
||||
if (e.key.toLowerCase() == 'f' && !this.preventKeyDown && !e.ctrlKey && !e.altKey) this.onKeyDownFunction();
|
||||
},
|
||||
},
|
||||
});
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
data() {
|
||||
return {
|
||||
preventKeyDown: false
|
||||
};
|
||||
},
|
||||
|
||||
activated() {
|
||||
window.addEventListener('keydown', this.handleKeyDown);
|
||||
},
|
||||
|
||||
deactivated() {
|
||||
window.removeEventListener('keydown', this.handleKeyDown);
|
||||
},
|
||||
|
||||
methods: {
|
||||
onKeyDownFunction() {},
|
||||
|
||||
handleKeyDown(e: KeyboardEvent) {
|
||||
if (!e.key) return;
|
||||
if (e.key.toLowerCase() == 'f' && !this.preventKeyDown && !e.ctrlKey && !e.altKey)
|
||||
this.onKeyDownFunction();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,26 +1,29 @@
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
data: () => ({
|
||||
observer: null as IntersectionObserver | null,
|
||||
observerTarget: null as Element | null,
|
||||
}),
|
||||
|
||||
methods: {
|
||||
mountObserver(actionFunction: () => void, target: Element) {
|
||||
this.observer = new IntersectionObserver((entries) => {
|
||||
console.log(entries);
|
||||
|
||||
if (entries[0].intersectionRatio > 0.5) actionFunction();
|
||||
}, { threshold: 0.2 });
|
||||
|
||||
this.observer.observe(target);
|
||||
},
|
||||
|
||||
unmountObserver() {
|
||||
if (!this.observerTarget) return;
|
||||
|
||||
this.observer?.unobserve(this.observerTarget);
|
||||
},
|
||||
},
|
||||
});
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
data: () => ({
|
||||
observer: null as IntersectionObserver | null,
|
||||
observerTarget: null as Element | null
|
||||
}),
|
||||
|
||||
methods: {
|
||||
mountObserver(actionFunction: () => void, target: Element) {
|
||||
this.observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
console.log(entries);
|
||||
|
||||
if (entries[0].intersectionRatio > 0.5) actionFunction();
|
||||
},
|
||||
{ threshold: 0.2 }
|
||||
);
|
||||
|
||||
this.observer.observe(target);
|
||||
},
|
||||
|
||||
unmountObserver() {
|
||||
if (!this.observerTarget) return;
|
||||
|
||||
this.observer?.unobserve(this.observerTarget);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
import { Ref, defineComponent } from 'vue';
|
||||
import { useStore } from '../store/store';
|
||||
|
||||
export default defineComponent({
|
||||
data() {
|
||||
return {
|
||||
store: useStore(),
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
chosenTrain() {
|
||||
return this.store.trainList.find((train) => train.trainId == this.store.chosenModalTrainId);
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
selectModalTrain(trainId: string, target?: EventTarget | null) {
|
||||
this.store.chosenModalTrainId = trainId;
|
||||
document.body.classList.add('no-scroll');
|
||||
if (target) this.store.modalLastClickedTarget = target;
|
||||
},
|
||||
|
||||
closeModal() {
|
||||
this.store.chosenModalTrainId = undefined;
|
||||
|
||||
setTimeout(() => {
|
||||
(this.store.modalLastClickedTarget as any)?.focus();
|
||||
document.body.classList.remove('no-scroll');
|
||||
}, 150);
|
||||
},
|
||||
},
|
||||
});
|
||||
import { defineComponent } from 'vue';
|
||||
import { useStore } from '../store/store';
|
||||
|
||||
export default defineComponent({
|
||||
data() {
|
||||
return {
|
||||
store: useStore()
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
chosenTrain() {
|
||||
return this.store.trainList.find((train) => train.trainId == this.store.chosenModalTrainId);
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
selectModalTrain(trainId: string, target?: EventTarget | null) {
|
||||
this.store.chosenModalTrainId = trainId;
|
||||
document.body.classList.add('no-scroll');
|
||||
if (target) this.store.modalLastClickedTarget = target;
|
||||
},
|
||||
|
||||
closeModal() {
|
||||
this.store.chosenModalTrainId = undefined;
|
||||
|
||||
setTimeout(() => {
|
||||
(this.store.modalLastClickedTarget as any)?.focus();
|
||||
document.body.classList.remove('no-scroll');
|
||||
}, 150);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
import { defineComponent, h } from 'vue';
|
||||
import imageMixin from './imageMixin';
|
||||
|
||||
export default defineComponent({
|
||||
mixins: [imageMixin],
|
||||
|
||||
data() {
|
||||
return {
|
||||
icons: {
|
||||
arrow: this.getIcon('arrow-asc'),
|
||||
},
|
||||
|
||||
showReturnButton: false,
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
scrollToTop() {
|
||||
window.scrollTo({ top: 0 });
|
||||
},
|
||||
|
||||
handleScroll() {
|
||||
this.showReturnButton = window.scrollY > window.innerHeight * 0.35;
|
||||
},
|
||||
},
|
||||
|
||||
activated() {
|
||||
window.addEventListener('wheel', this.handleScroll);
|
||||
},
|
||||
|
||||
deactivated() {
|
||||
window.removeEventListener('wheel', this.handleScroll);
|
||||
},
|
||||
});
|
||||
import { defineComponent } from 'vue';
|
||||
import imageMixin from './imageMixin';
|
||||
|
||||
export default defineComponent({
|
||||
mixins: [imageMixin],
|
||||
|
||||
data() {
|
||||
return {
|
||||
icons: {
|
||||
arrow: this.getIcon('arrow-asc')
|
||||
},
|
||||
|
||||
showReturnButton: false
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
scrollToTop() {
|
||||
window.scrollTo({ top: 0 });
|
||||
},
|
||||
|
||||
handleScroll() {
|
||||
this.showReturnButton = window.scrollY > window.innerHeight * 0.35;
|
||||
}
|
||||
},
|
||||
|
||||
activated() {
|
||||
window.addEventListener('wheel', this.handleScroll);
|
||||
},
|
||||
|
||||
deactivated() {
|
||||
window.removeEventListener('wheel', this.handleScroll);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -2,12 +2,11 @@ import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
methods: {
|
||||
|
||||
navigateTo(path: string, query?: {}) {
|
||||
this.$router.push({
|
||||
path,
|
||||
query,
|
||||
query
|
||||
});
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,25 +1,24 @@
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
methods: {
|
||||
getControlTypeAbbrev(controlType: string) {
|
||||
switch (controlType) {
|
||||
case 'mechaniczne':
|
||||
return 'M';
|
||||
case 'SCS-SPK':
|
||||
return 'S/S';
|
||||
case 'ręczne':
|
||||
return 'R';
|
||||
case 'mechaniczne+SPK':
|
||||
return 'M';
|
||||
case 'ręczne+SPK':
|
||||
return 'R';
|
||||
case 'mechaniczne+SCS':
|
||||
return 'M';
|
||||
default:
|
||||
return controlType;
|
||||
}
|
||||
|
||||
}
|
||||
methods: {
|
||||
getControlTypeAbbrev(controlType: string) {
|
||||
switch (controlType) {
|
||||
case 'mechaniczne':
|
||||
return 'M';
|
||||
case 'SCS-SPK':
|
||||
return 'S/S';
|
||||
case 'ręczne':
|
||||
return 'R';
|
||||
case 'mechaniczne+SPK':
|
||||
return 'M';
|
||||
case 'ręczne+SPK':
|
||||
return 'R';
|
||||
case 'mechaniczne+SCS':
|
||||
return 'M';
|
||||
default:
|
||||
return controlType;
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
+54
-52
@@ -1,52 +1,54 @@
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
methods: {
|
||||
calculateExpStyle(exp: number, isSupporter = false): string {
|
||||
const bgColor = exp > -1 ? (exp < 2 ? '#26B0D9' : `hsl(${-exp * 5 + 100}, 85%, 50%)`) : '#666';
|
||||
|
||||
const fontColor = exp > 14 || exp == -1 ? 'white' : 'black';
|
||||
const boxShadow = isSupporter ? `box-shadow: 0 0 6px 2px ${bgColor};` : '';
|
||||
|
||||
return `background-color: ${bgColor}; color: ${fontColor}; ${boxShadow};`;
|
||||
},
|
||||
|
||||
calculateTextExpStyle(exp: number, isSupporter = false): string {
|
||||
const textColor = exp > -1 ? (exp < 2 ? '#26B0D9' : `hsl(${-exp * 5 + 100}, 75%, 50%)`) : '#666';
|
||||
|
||||
return `color: ${textColor}; ${isSupporter ? 'text-shadow: 0 0 6px ' + textColor : ''};`;
|
||||
},
|
||||
|
||||
statusClasses(occupiedTo: string) {
|
||||
let className = '';
|
||||
|
||||
switch (occupiedTo) {
|
||||
case 'WOLNA':
|
||||
className = 'free';
|
||||
break;
|
||||
case 'KOŃCZY':
|
||||
className = 'ending';
|
||||
break;
|
||||
case 'NIEZALOGOWANY':
|
||||
className = 'not-signed';
|
||||
break;
|
||||
case 'BEZ LIMITU':
|
||||
className = 'no-limit';
|
||||
break;
|
||||
case 'NIEDOSTĘPNY':
|
||||
className = 'unavailable';
|
||||
break;
|
||||
case 'Z/W':
|
||||
className = 'brb';
|
||||
break;
|
||||
case 'BRAK MIEJSCA':
|
||||
className = 'no-space';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return className;
|
||||
},
|
||||
},
|
||||
});
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
methods: {
|
||||
calculateExpStyle(exp: number, isSupporter = false): string {
|
||||
const bgColor =
|
||||
exp > -1 ? (exp < 2 ? '#26B0D9' : `hsl(${-exp * 5 + 100}, 85%, 50%)`) : '#666';
|
||||
|
||||
const fontColor = exp > 14 || exp == -1 ? 'white' : 'black';
|
||||
const boxShadow = isSupporter ? `box-shadow: 0 0 6px 2px ${bgColor};` : '';
|
||||
|
||||
return `background-color: ${bgColor}; color: ${fontColor}; ${boxShadow};`;
|
||||
},
|
||||
|
||||
calculateTextExpStyle(exp: number, isSupporter = false): string {
|
||||
const textColor =
|
||||
exp > -1 ? (exp < 2 ? '#26B0D9' : `hsl(${-exp * 5 + 100}, 75%, 50%)`) : '#666';
|
||||
|
||||
return `color: ${textColor}; ${isSupporter ? 'text-shadow: 0 0 6px ' + textColor : ''};`;
|
||||
},
|
||||
|
||||
statusClasses(occupiedTo: string) {
|
||||
let className = '';
|
||||
|
||||
switch (occupiedTo) {
|
||||
case 'WOLNA':
|
||||
className = 'free';
|
||||
break;
|
||||
case 'KOŃCZY':
|
||||
className = 'ending';
|
||||
break;
|
||||
case 'NIEZALOGOWANY':
|
||||
className = 'not-signed';
|
||||
break;
|
||||
case 'BEZ LIMITU':
|
||||
className = 'no-limit';
|
||||
break;
|
||||
case 'NIEDOSTĘPNY':
|
||||
className = 'unavailable';
|
||||
break;
|
||||
case 'Z/W':
|
||||
className = 'brb';
|
||||
break;
|
||||
case 'BRAK MIEJSCA':
|
||||
className = 'no-space';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return className;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -11,39 +11,39 @@ export default defineComponent({
|
||||
main: [
|
||||
{
|
||||
name: 'speed',
|
||||
unit: 'km/h',
|
||||
unit: 'km/h'
|
||||
},
|
||||
{
|
||||
name: 'length',
|
||||
unit: 'm',
|
||||
unit: 'm'
|
||||
},
|
||||
{
|
||||
name: 'mass',
|
||||
unit: 't',
|
||||
multiplier: 0.001,
|
||||
},
|
||||
multiplier: 0.001
|
||||
}
|
||||
],
|
||||
|
||||
position: [
|
||||
{
|
||||
name: 'scenery',
|
||||
prop: 'currentStationName',
|
||||
prop: 'currentStationName'
|
||||
},
|
||||
{
|
||||
name: 'route',
|
||||
prop: 'connectedTrack',
|
||||
prop: 'connectedTrack'
|
||||
},
|
||||
{
|
||||
name: 'signal',
|
||||
prop: 'signal',
|
||||
prop: 'signal'
|
||||
},
|
||||
{
|
||||
name: 'distance',
|
||||
prop: 'distance',
|
||||
unit: 'm',
|
||||
},
|
||||
],
|
||||
},
|
||||
unit: 'm'
|
||||
}
|
||||
]
|
||||
}
|
||||
}),
|
||||
|
||||
methods: {
|
||||
@@ -64,11 +64,15 @@ export default defineComponent({
|
||||
positionString += this.$t('trains.current-scenery') + ' ';
|
||||
|
||||
if (train.currentStationHash) positionString += train.currentStationName + ' ';
|
||||
else positionString += train['currentStationName'].replace(/.[a-zA-Z0-9]+.sc/, '') + ' (offline) ';
|
||||
else
|
||||
positionString +=
|
||||
train['currentStationName'].replace(/.[a-zA-Z0-9]+.sc/, '') + ' (offline) ';
|
||||
|
||||
if (train.signal) positionString += this.$t('trains.current-signal') + ' ' + train.signal + ' ';
|
||||
if (train.signal)
|
||||
positionString += this.$t('trains.current-signal') + ' ' + train.signal + ' ';
|
||||
|
||||
if (train.connectedTrack) positionString += this.$t('trains.current-track') + ' ' + train.connectedTrack + ' ';
|
||||
if (train.connectedTrack)
|
||||
positionString += this.$t('trains.current-track') + ' ' + train.connectedTrack + ' ';
|
||||
|
||||
if (train.distance) positionString += `(${this.displayDistance(train.distance)})`;
|
||||
|
||||
@@ -81,9 +85,17 @@ export default defineComponent({
|
||||
return stops
|
||||
.reduce((acc: string[], stop: TrainStop, i: number) => {
|
||||
if (stop.stopType.includes('ph') && !stop.stopNameRAW.includes('po.'))
|
||||
acc.push(`<strong style='color:${stop.confirmed ? 'springgreen' : 'white'}'>${stop.stopName}</strong>`);
|
||||
acc.push(
|
||||
`<strong style='color:${stop.confirmed ? 'springgreen' : 'white'}'>${
|
||||
stop.stopName
|
||||
}</strong>`
|
||||
);
|
||||
else if (i > 0 && i < stops.length - 1 && !/po\.|sbl/gi.test(stop.stopNameRAW))
|
||||
acc.push(`<span style='color:${stop.confirmed ? 'springgreen' : 'lightgray'}'>${stop.stopName}</span>`);
|
||||
acc.push(
|
||||
`<span style='color:${stop.confirmed ? 'springgreen' : 'lightgray'}'>${
|
||||
stop.stopName
|
||||
}</span>`
|
||||
);
|
||||
return acc;
|
||||
}, [])
|
||||
.join(' > ');
|
||||
@@ -94,16 +106,22 @@ export default defineComponent({
|
||||
},
|
||||
|
||||
confirmedPercentage(stops: TrainStop[]) {
|
||||
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)
|
||||
);
|
||||
},
|
||||
|
||||
currentDelay(stops: TrainStop[]) {
|
||||
const delay =
|
||||
stops.find((stop, i) => (i == 0 && !stop.confirmed) || (i > 0 && stops[i - 1].confirmed && !stop.confirmed))
|
||||
?.departureDelay || 0;
|
||||
stops.find(
|
||||
(stop, i) =>
|
||||
(i == 0 && !stop.confirmed) || (i > 0 && stops[i - 1].confirmed && !stop.confirmed)
|
||||
)?.departureDelay || 0;
|
||||
|
||||
if (delay > 0) return `<span style='color: salmon'>${this.$t('trains.delayed')} ${delay} min</span>`;
|
||||
else if (delay < 0) return `<span style='color: lightgreen'>${this.$t('trains.preponed')} ${delay} min</span>`;
|
||||
if (delay > 0)
|
||||
return `<span style='color: salmon'>${this.$t('trains.delayed')} ${delay} min</span>`;
|
||||
else if (delay < 0)
|
||||
return `<span style='color: lightgreen'>${this.$t('trains.preponed')} ${delay} min</span>`;
|
||||
else return this.$t('trains.on-time');
|
||||
},
|
||||
|
||||
@@ -118,7 +136,7 @@ export default defineComponent({
|
||||
|
||||
getSceneriesWithComments(timetableData: Train['timetableData']) {
|
||||
const commentList =
|
||||
timetableData?.followingStops.reduce((acc, stop, i) => {
|
||||
timetableData?.followingStops.reduce((acc, stop) => {
|
||||
if (stop.comments) acc.push(stop.stopNameRAW);
|
||||
|
||||
return acc;
|
||||
@@ -138,6 +156,6 @@ export default defineComponent({
|
||||
onImageError(e: Event) {
|
||||
const imageEl = e.target as HTMLImageElement;
|
||||
imageEl.src = this.getImage('unknown.png');
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -2,12 +2,12 @@ import { useRegisterSW } from 'virtual:pwa-register/vue';
|
||||
|
||||
export default () => {
|
||||
const { needRefresh, updateServiceWorker, offlineReady } = useRegisterSW({
|
||||
immediate: true,
|
||||
immediate: true
|
||||
});
|
||||
|
||||
return {
|
||||
needRefresh,
|
||||
updateServiceWorker,
|
||||
offlineReady,
|
||||
offlineReady
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user