Races lists - Add races compentition format partial

This commit is contained in:
Benjamin Barth committed 2015-07-02 17:33:16 +02:00
1 parent 49c7660a5d
commit 05cdb4d2cb
8 files changed
+379

No files matched your search

@@ -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;
}
@@ -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());
}
}
@@ -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>
@@ -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());
}
}
}
@@ -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>
@@ -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();
}
}
@@ -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);
}
}
@@ -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>