mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-27 14:27:15 +00:00
Races lists - Add races compentition format partial
This commit is contained in:
1 parent
49c7660a5d
commit
05cdb4d2cb
8 files changed
+379
No files matched your search
+174
@@ -0,0 +1,174 @@
|
||||
/**
|
||||
* Competitions View Component for regatta races
|
||||
*/
|
||||
.phase {
|
||||
font-size: 1rem;
|
||||
margin-top: 2em;
|
||||
}
|
||||
.phase_head {
|
||||
padding: 1.333333333333333em 1.333333333333333em 2.666666666666667em 2em;
|
||||
background-color: #f2f2f2;
|
||||
border: 1px solid #dedede;
|
||||
border-radius: 0.333333333333333em 0.333333333333333em 0 0;
|
||||
font-weight: 600;
|
||||
color: #666;
|
||||
}
|
||||
.phase_head_title {
|
||||
text-transform: uppercase;
|
||||
float: left;
|
||||
}
|
||||
.phase_head_info {
|
||||
font-size: 0.866666666666667em;
|
||||
text-align: right;
|
||||
float: right;
|
||||
}
|
||||
.phase_head_info_item {
|
||||
display: inline-block;
|
||||
padding-left: 0.769230769230769em;
|
||||
margin-left: 0.769230769230769em;
|
||||
border-left: 1px solid #dedede;
|
||||
}
|
||||
.phase_head_info_item:first-child {
|
||||
border: none;
|
||||
padding-left: 0;
|
||||
margin-left: 0;
|
||||
}
|
||||
.regattalistitem .phase {
|
||||
margin: 0;
|
||||
}
|
||||
.regattalistitem .phase_head {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
border-bottom: 1px solid #dedede;
|
||||
}
|
||||
.fleet {
|
||||
font-size: 1rem;
|
||||
border: 1px solid #dedede;
|
||||
border-top: none;
|
||||
position: relative;
|
||||
}
|
||||
.fleet:last-child {
|
||||
border-radius: 0 0 0.333333333333333em 0.333333333333333em;
|
||||
}
|
||||
.fleet_corner {
|
||||
position: absolute;
|
||||
content: '';
|
||||
display: block;
|
||||
top: 1px;
|
||||
left: 1px;
|
||||
border-style: solid;
|
||||
border-width: 1em 1em 0 0;
|
||||
border-color: transparent;
|
||||
}
|
||||
.fleet_details {
|
||||
color: #333;
|
||||
position: absolute;
|
||||
top: 1.333333333333333em;
|
||||
left: 2em;
|
||||
width: 20%;
|
||||
}
|
||||
@media (min-width: 61em) {
|
||||
.fleet_details {
|
||||
width: 13%;
|
||||
}
|
||||
}
|
||||
.fleet_details_name {
|
||||
font-weight: 600;
|
||||
}
|
||||
.fleet_details_competitors {
|
||||
font-size: 0.866666666666667em;
|
||||
color: #666;
|
||||
}
|
||||
.fleet_races {
|
||||
padding: 0 1.333333333333333em 1% 25%;
|
||||
}
|
||||
@media (min-width: 61em) {
|
||||
.fleet_races {
|
||||
padding-left: 17%;
|
||||
}
|
||||
}
|
||||
.fleet_races_race {
|
||||
display: inline-block;
|
||||
width: 19%;
|
||||
margin: 1% 0 0 1%;
|
||||
height: 4em;
|
||||
line-height: 3.333333333333333em;
|
||||
background-color: #008fcc;
|
||||
border-radius: 0.2em;
|
||||
-webkit-transition: background 0.2s;
|
||||
-moz-transition: background 0.2s;
|
||||
transition: background 0.2s;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
padding: 0.333333333333333em 0.333333333333333em;
|
||||
}
|
||||
@media (min-width: 45em) {
|
||||
.fleet_races_race {
|
||||
width: 15.66%;
|
||||
line-height: inherit;
|
||||
}
|
||||
}
|
||||
@media (min-width: 61em) {
|
||||
.fleet_races_race {
|
||||
width: 9%;
|
||||
}
|
||||
}
|
||||
.fleet_races_race:hover {
|
||||
background-color: #0081b8;
|
||||
text-decoration: none;
|
||||
}
|
||||
.fleet_races_race_name,
|
||||
.fleet_races_race_date {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.fleet_races_race_name {
|
||||
font-size: 1.466666666666667em;
|
||||
font-weight: 700;
|
||||
}
|
||||
.fleet_races_race_name:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
width: 0.466666666666667em;
|
||||
height: 0.466666666666667em;
|
||||
background: url("../images/home/skip-forward.png") no-repeat center center;
|
||||
margin: 0 0 0.133333333333333em 0.133333333333333em;
|
||||
}
|
||||
.fleet_races_race_date {
|
||||
width: 100%;
|
||||
font-size: 0.666666666666667em;
|
||||
font-weight: 600;
|
||||
}
|
||||
.fleet_races_raceuntracked {
|
||||
background-color: #999;
|
||||
}
|
||||
.fleet_races_raceuntracked:hover {
|
||||
background-color: #8a8a8a;
|
||||
}
|
||||
.fleet_races_racelive {
|
||||
background-color: #e94a1b;
|
||||
}
|
||||
.fleet_races_racelive:hover {
|
||||
background-color: #d54115;
|
||||
}
|
||||
.fleet_races_raceplanned {
|
||||
color: #999;
|
||||
background-color: #fff;
|
||||
border: 1px solid #999;
|
||||
}
|
||||
.fleet_races_raceplanned:hover {
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
.fleet_races_raceplanned .fleet_races_race_name:after {
|
||||
display: none;
|
||||
}
|
||||
.regattalistitem .fleet {
|
||||
border: none;
|
||||
border-bottom: 1px solid #dedede;
|
||||
}
|
||||
.regattalistitem .fleet:last-of-type {
|
||||
border-radius: 0;
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.raceCompetition;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.DivElement;
|
||||
import com.google.gwt.dom.client.Element;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.RaceListFleetDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.RaceListRaceDTO;
|
||||
|
||||
public class RegattaCompetitionFleet extends Widget {
|
||||
|
||||
private static RegattaCompetitionFleetUiBinder uiBinder = GWT.create(RegattaCompetitionFleetUiBinder.class);
|
||||
|
||||
interface RegattaCompetitionFleetUiBinder extends UiBinder<Element, RegattaCompetitionFleet> {
|
||||
}
|
||||
|
||||
@UiField DivElement fleetCornerUi;
|
||||
@UiField DivElement fleetNameUi;
|
||||
@UiField DivElement competitorCountUi;
|
||||
@UiField DivElement racesContainerUi;
|
||||
|
||||
public RegattaCompetitionFleet(RaceListFleetDTO fleet) {
|
||||
setElement(uiBinder.createAndBindUi(this));
|
||||
this.competitorCountUi.setInnerText(fleet.getCompetitorCount() + " Comp. TODO");
|
||||
if (fleet.getFleet() != null) {
|
||||
fleetNameUi.setInnerText(fleet.getFleet().getFleetName());
|
||||
fleetCornerUi.getStyle().setProperty("borderTopColor", fleet.getFleet().getFleetColor());
|
||||
}
|
||||
}
|
||||
|
||||
public void addRace(RaceListRaceDTO race, String raceViewerURL) {
|
||||
RegattaCompetitionFleetRace competitionRace = new RegattaCompetitionFleetRace(race, raceViewerURL);
|
||||
racesContainerUi.appendChild(competitionRace.getElement());
|
||||
}
|
||||
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
||||
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared" xmlns:p='urn:import:com.sap.sailing.gwt.home.client.place.event.partials'>
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceCompetition.RegattaCompetitionResources" />
|
||||
<div addStyleNames="{local_res.css.fleet}">
|
||||
<div class="{local_res.css.fleet_corner}" ui:field="fleetCornerUi"></div>
|
||||
<div class="{local_res.css.fleet_details}">
|
||||
<div class="{local_res.css.fleet_details_name}" ui:field="fleetNameUi"></div>
|
||||
<div class="{local_res.css.fleet_details_competitors}" ui:field="competitorCountUi"></div>
|
||||
</div>
|
||||
<div class="{local_res.css.fleet_races}" ui:field="racesContainerUi"></div>
|
||||
</div>
|
||||
</ui:UiBinder>
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.raceCompetition;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.AnchorElement;
|
||||
import com.google.gwt.dom.client.DivElement;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.ui.UIObject;
|
||||
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.RaceListRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.race.RaceMetadataDTO.RaceTrackingState;
|
||||
import com.sap.sailing.gwt.ui.shared.race.RaceMetadataDTO.RaceViewState;
|
||||
|
||||
public class RegattaCompetitionFleetRace extends UIObject {
|
||||
|
||||
private static RegattaCompetitionFleetRaceUiBinder uiBinder = GWT.create(RegattaCompetitionFleetRaceUiBinder.class);
|
||||
|
||||
interface RegattaCompetitionFleetRaceUiBinder extends UiBinder<AnchorElement, RegattaCompetitionFleetRace> {
|
||||
}
|
||||
|
||||
@UiField RegattaCompetitionResources local_res;
|
||||
@UiField DivElement raceNameUi;
|
||||
@UiField DivElement raceDateUi;
|
||||
private final AnchorElement anchor;
|
||||
|
||||
public RegattaCompetitionFleetRace(RaceListRaceDTO race, String raceViewerUrl) {
|
||||
anchor = uiBinder.createAndBindUi(this);
|
||||
anchor.setHref(raceViewerUrl);
|
||||
local_res.css().ensureInjected();
|
||||
setupRaceState(race.getTrackingState(), race.getViewState());
|
||||
this.raceNameUi.setInnerText(race.getRaceName());
|
||||
if (race.getStart() != null) {
|
||||
this.raceDateUi.setInnerText(DateAndTimeFormatterUtil.defaultDateFormatter.render(race.getStart()));
|
||||
}
|
||||
setElement(anchor);
|
||||
}
|
||||
|
||||
private void setupRaceState(RaceTrackingState trackingState, RaceViewState viewState) {
|
||||
if (viewState == RaceViewState.RUNNING) {
|
||||
anchor.addClassName(local_res.css().fleet_races_racelive());
|
||||
} else if (viewState == RaceViewState.PLANNED || viewState == RaceViewState.SCHEDULED) {
|
||||
anchor.addClassName(local_res.css().fleet_races_raceplanned());
|
||||
}
|
||||
if (trackingState != RaceTrackingState.TRACKED_VALID_DATA) {
|
||||
anchor.addClassName(local_res.css().fleet_races_raceuntracked());
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
||||
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared" xmlns:p='urn:import:com.sap.sailing.gwt.home.client.place.event.partials'>
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceCompetition.RegattaCompetitionResources" />
|
||||
<a class="{local_res.css.fleet_races_race}" target="_blank">
|
||||
<div class="{local_res.css.fleet_races_race_name}" ui:field="raceNameUi"></div>
|
||||
<div class="{local_res.css.fleet_races_race_date} {res.mediaCss.hideonsmall}" ui:field="raceDateUi"></div>
|
||||
</a>
|
||||
</ui:UiBinder>
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.raceCompetition;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.resources.client.ClientBundle;
|
||||
import com.google.gwt.resources.client.CssResource;
|
||||
|
||||
public interface RegattaCompetitionResources extends ClientBundle {
|
||||
public static final RegattaCompetitionResources INSTANCE = GWT.create(RegattaCompetitionResources.class);
|
||||
|
||||
@Source("RegattaCompetition.gss")
|
||||
LocalCss css();
|
||||
|
||||
public interface LocalCss extends CssResource {
|
||||
String phase();
|
||||
String phase_head();
|
||||
String phase_head_title();
|
||||
String phase_head_info();
|
||||
String phase_head_info_item();
|
||||
String regattalistitem();
|
||||
String fleet();
|
||||
String fleet_corner();
|
||||
String fleet_details();
|
||||
String fleet_details_name();
|
||||
String fleet_details_competitors();
|
||||
String fleet_races();
|
||||
String fleet_races_race();
|
||||
String fleet_races_race_name();
|
||||
String fleet_races_race_date();
|
||||
String fleet_races_raceuntracked();
|
||||
String fleet_races_racelive();
|
||||
String fleet_races_raceplanned();
|
||||
}
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.raceCompetition;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.DivElement;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||
import com.sap.sailing.gwt.home.client.place.event.regatta.EventRegattaView.Presenter;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.RaceListFleetDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.RaceListRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.RaceListSeriesDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.race.RaceMetadataDTO.RaceTrackingState;
|
||||
|
||||
public class RegattaCompetitionSeries extends Composite {
|
||||
|
||||
private static RegattaCompetitionSeriesUiBinder uiBinder = GWT.create(RegattaCompetitionSeriesUiBinder.class);
|
||||
|
||||
interface RegattaCompetitionSeriesUiBinder extends UiBinder<HTMLPanel, RegattaCompetitionSeries> {
|
||||
}
|
||||
|
||||
@UiField DivElement seriesNameUi;
|
||||
@UiField DivElement competitorCountUi;
|
||||
@UiField DivElement raceCountUi;
|
||||
private final HTMLPanel containerUi;
|
||||
|
||||
public RegattaCompetitionSeries(Presenter presenter, RaceListSeriesDTO series) {
|
||||
initWidget(containerUi = uiBinder.createAndBindUi(this));
|
||||
this.seriesNameUi.setInnerText(series.getSeriesName());
|
||||
this.competitorCountUi.setInnerText(series.getCompetitorCount() + " Comp. TODO");
|
||||
this.raceCountUi.setInnerText(series.getRaceCount() + " Races TODO");
|
||||
for (RaceListFleetDTO fleet : series.getFleets()) {
|
||||
addFleet(presenter, fleet);
|
||||
}
|
||||
}
|
||||
|
||||
public void addFleet(Presenter presenter, RaceListFleetDTO fleet) {
|
||||
RegattaCompetitionFleet competitionFleet = new RegattaCompetitionFleet(fleet);
|
||||
for (RaceListRaceDTO race : fleet.getRaces()) {
|
||||
boolean tracked = race.getTrackingState() == RaceTrackingState.TRACKED_VALID_DATA;
|
||||
String raceViewerUrl = tracked ? presenter.getRaceViewerURL(race.getRegattaName(), race.getTrackedRaceName()) : null;
|
||||
competitionFleet.addRace(race, raceViewerUrl);
|
||||
}
|
||||
containerUi.add(competitionFleet);
|
||||
}
|
||||
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
||||
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared" xmlns:p='urn:import:com.sap.sailing.gwt.home.client.place.event.partials'>
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceCompetition.RegattaCompetitionResources" />
|
||||
<g:HTMLPanel addStyleNames="{local_res.css.phase}">
|
||||
<div class="{local_res.css.phase_head}">
|
||||
<div class="{local_res.css.phase_head_title}" ui:field="seriesNameUi"></div>
|
||||
<div class="{local_res.css.phase_head_info}">
|
||||
<div class="{local_res.css.phase_head_info_item}" ui:field="competitorCountUi"></div>
|
||||
<div class="{local_res.css.phase_head_info_item}" ui:field="raceCountUi"></div>
|
||||
</div>
|
||||
</div>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
Reference in new issue
Block a user