Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SwimResults

© Copyright 2022-2025 - SwimResults & Konrad Weiß
© Copyright 2022-2026 - SwimResults & Konrad Weiß

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.2.4.

Expand Down
2 changes: 1 addition & 1 deletion src/app/app.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

<div class="footer">
<img class="footer-logo" src="assets/logo.svg" alt="SwimResults logo">
<span class="footer-text">&copy; 2025 - SwimResults</span>
<span class="footer-text">&copy; 2026 - SwimResults</span>
<span class="footer-text">
<a href="https://swimresults.de/" target="_blank">Homepage</a>
<a href="https://swimresults.de/impressum" target="_blank">Impressum</a>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,20 @@
class="livetiming-grid-element"
panelTitle="{{'COMMON.EVENT.SINGULAR' | translate}} {{event.event.number}} - {{event.event.relay_distance ? event.event.relay_distance : event.event.distance}}m {{'COMMON.STYLE.' + event.event.style.name + '.NAME' | translate}} {{event.event.name_extension}} {{'COMMON.GENDER.' + event.event.gender + '.NAME' | translate}}"
>
@if (meeting) {
<sr-livetiming-table
[starts]="starts"
[athletes]="following"
[meeting]="meeting"
[config]="config"
></sr-livetiming-table>
@if (heat?.is_pre_list) {
<sr-no-content>
<p>{{ 'LIVE.PRE_LIST_WARNING' | translate }}</p>
<sr-btn [routerLink]="'/m/' + meetingId + '/event/' + event.event.number + '/'"><mat-icon>flag</mat-icon> {{ 'LIVE.OPEN_EVENT_BUTTON' | translate }}</sr-btn>
</sr-no-content>
} @else {
@if (meeting) {
<sr-livetiming-table
[starts]="starts"
[athletes]="following"
[meeting]="meeting"
[config]="config"
></sr-livetiming-table>
}
}
</sr-panel>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {Subscription} from "rxjs";
import {RouteService} from "../../../../core/service/route.service";
import {StartListTileConfig} from "../../../../core/model/start/start-list-tile-config.model";
import {HeatImpl} from "../../../../core/model/start/heat.model";
import {ActivatedRoute} from "@angular/router";
import {ActivatedRoute, RouterLink} from "@angular/router";
import {FetchingModel} from "../../../../core/model/common/fetching.model";
import {SpinnerComponent} from '../../../../shared/elements/spinner/spinner.component';
import {LivetimingHeaderComponent} from './livetiming-header/livetiming-header.component';
Expand All @@ -18,6 +18,8 @@ import {LivetimingControlsComponent} from './livetiming-controls/livetiming-cont
import {TranslateModule} from '@ngx-translate/core';
import {UserDataService} from "../../../../core/service/user-data.service";
import {AthleteRelation} from "../../../../core/model/user/follower.model";
import {MatIcon} from "@angular/material/icon";
import {BtnComponent} from "../../../../shared/elements/buttons/btn/btn.component";

export interface ChangeHeatEvent {
name: "event" | "heat" | "all" | "nothing";
Expand All @@ -32,7 +34,7 @@ export interface LiveSettingsData {
selector: 'sr-livetiming',
templateUrl: './livetiming.component.html',
styleUrls: ['./livetiming.component.scss'],
imports: [SpinnerComponent, LivetimingHeaderComponent, PanelComponent, LivetimingTableComponent, NoContentComponent, LivetimingControlsComponent, TranslateModule]
imports: [SpinnerComponent, LivetimingHeaderComponent, PanelComponent, LivetimingTableComponent, NoContentComponent, LivetimingControlsComponent, TranslateModule, RouterLink, MatIcon, BtnComponent]
})
export class LivetimingComponent implements OnInit, OnDestroy {
private routeService = inject(RouteService);
Expand Down Expand Up @@ -220,6 +222,10 @@ export class LivetimingComponent implements OnInit, OnDestroy {
const st: StartImpl[] = []
const ls: StartImpl[] = [];

if (this.meeting && this.meeting.location && this.meeting.location.lanes) {
this.lanes = this.meeting.location.lanes;
}

for (const start of starts) {
const s = new StartImpl(start)
if (!this.heatFinished && s.hasResult()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ sr-panel {
font-weight: 600;
border-radius: 999px;
padding: 4px 10px;
background-color: colors.$color-bg-contrast;
color: colors.$color-text-main;
background-color: colors.$color-btn-first;
color: white;
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/assets/i18n/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,9 @@
"NO_LIVETIMING_MESSAGE": "Pro tento závod není k dispozici časomíra",
"NO_LIVETIMING_YET_MESSAGE": "Časomíra je k dispozici až po zveřejnění startovní listiny",
"NO_STARTS_MESSAGE": "Momentálně nejsou k dispozici žádné starty pro časomíru",
"STREAM_BUTTON_TEXT": "Livestream na {{platform}}"
"STREAM_BUTTON_TEXT": "Livestream na {{platform}}",
"PRE_LIST_WARNING": "Pro tento závod je momentálně k dispozici pouze startovní listina. Správné rozdělení do rozplaveb bude zveřejněno bezprostředně po jejím zveřejnění.",
"OPEN_EVENT_BUTTON": "Zobrazit závod"
},
"MEETINGS": {
"LIST": {
Expand Down
4 changes: 3 additions & 1 deletion src/assets/i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,9 @@
"NO_LIVETIMING_MESSAGE": "Für diese Veranstaltung gibt es leider kein Livetiming.",
"NO_LIVETIMING_YET_MESSAGE": "Das Livetiming ist erst nach Veröffentlichung des Meldeergebnisses verfügbar.",
"NO_CONTENT_MESSAGE": "Inhalt konnte nicht geladen werden.",
"STREAM_BUTTON_TEXT": "Livestream auf {{platform}}"
"STREAM_BUTTON_TEXT": "Livestream auf {{platform}}",
"PRE_LIST_WARNING": "Für diesen Lauf gibt es aktuell nur eine Startliste. Die korrekte Laufeinteilung wird unmittelbar nach dem Setzen veröffentlicht.",
"OPEN_EVENT_BUTTON": "Wettkampf anzeigen"
},
"AUTH": {
"LOGOUT": {
Expand Down
4 changes: 3 additions & 1 deletion src/assets/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,9 @@
"NO_LIVETIMING_MESSAGE": "This meeting does not support the livetiming feature.",
"NO_LIVETIMING_YET_MESSAGE": "The livetiming will be available after the start list has been published.",
"NO_CONTENT_MESSAGE": "Unable to load content.",
"STREAM_BUTTON_TEXT": "Livestream on {{platform}}"
"STREAM_BUTTON_TEXT": "Livestream on {{platform}}",
"PRE_LIST_WARNING": "For this heat there is currently only a start list available. The correct heat assignment will be published shortly after the set has been made.",
"OPEN_EVENT_BUTTON": "Show Event"
},
"AUTH": {
"LOGOUT": {
Expand Down
4 changes: 3 additions & 1 deletion src/assets/i18n/ua.json
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,9 @@
"NO_STARTS_MESSAGE": "Наразі немає доступних стартів для прямої трансляції.",
"NO_LIVETIMING_MESSAGE": "Ці змаганя не підтримують функцію прямої трансляції.",
"NO_LIVETIMING_YET_MESSAGE": "Пряма трансляція буде доступна після публікації протоколу змагань.",
"NO_CONTENT_MESSAGE": "Не вдалося завантажити вміст."
"NO_CONTENT_MESSAGE": "Не вдалося завантажити вміст.",
"PRE_LIST_WARNING": "Для цього запливу наразі доступен лише стартовый протокол. Правильное распределение по заплывам будет опубликовано сразу после его публикации.",
"OPEN_EVENT_BUTTON": "Показать событие"
},
"AUTH": {
"LOGOUT": {
Expand Down
Loading