mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 21:30:57 +00:00
Initial commit of live races ui (work in progress)
This commit is contained in:
1 parent
42eed4d004
commit
d49d41974e
12 files changed
+742
-1
No files matched your search
+197
@@ -0,0 +1,197 @@
|
||||
/**
|
||||
* Races List Live
|
||||
*/
|
||||
.race {
|
||||
color: #333;
|
||||
font-size: 1rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
.race:last-of-type .race_item {
|
||||
border: none;
|
||||
}
|
||||
.race_fleetcorner {
|
||||
width: 1em;
|
||||
vertical-align: top;
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
}
|
||||
.race_fleetcorner_icon {
|
||||
width: 1em;
|
||||
margin-right: -2.333333333333333em;
|
||||
position: relative;
|
||||
top: 1px;
|
||||
left: 1px;
|
||||
border-style: solid;
|
||||
border-color: transparent;
|
||||
border-width: 1em 1em 0 0;
|
||||
}
|
||||
.race_item {
|
||||
text-align: left;
|
||||
vertical-align: baseline;
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
white-space: nowrap;
|
||||
padding: 1.4em 0.666666666666667em 0.733333333333333em 1.333333333333333em;
|
||||
}
|
||||
.race_item .button {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.race_item:first-of-type {
|
||||
padding-left: 2em;
|
||||
}
|
||||
.race_itemrank:after {
|
||||
content: '.';
|
||||
}
|
||||
.race_itemshort {
|
||||
width: 5em;
|
||||
}
|
||||
.race_itemlong {
|
||||
width: 32.5%;
|
||||
}
|
||||
.race_itemwind {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.race_itemname {
|
||||
font-weight: 600;
|
||||
}
|
||||
.race_itemname:before {
|
||||
content: '';
|
||||
border-style: solid;
|
||||
border-color: transparent;
|
||||
border-width: 1em 1em 0 0;
|
||||
float: left;
|
||||
margin-left: -2em;
|
||||
-webkit-transform: translateY(-1.4em);
|
||||
-moz-transform: translateY(-1.4em);
|
||||
-ms-transform: translateY(-1.4em);
|
||||
transform: translateY(-1.4em);
|
||||
}
|
||||
.race_itemwinner {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: middle;
|
||||
min-width: 13.333333333333334em;
|
||||
max-width: 16.666666666666668em;
|
||||
}
|
||||
.race_item_flag {
|
||||
max-width: 1.6em;
|
||||
max-height: 1.6em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.race_item_position {
|
||||
margin-right: 0.333333333333333em;
|
||||
}
|
||||
.race_item_winner {
|
||||
margin-left: 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.race_itemwinner {
|
||||
padding: 0.733333333333333em 1.333333333333333em;
|
||||
}
|
||||
.race_itemcenter {
|
||||
text-align: center;
|
||||
}
|
||||
.race_itemright {
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
padding-left: 0;
|
||||
padding-right: 0.666666666666667em;
|
||||
padding-top: 0.666666666666667em;
|
||||
}
|
||||
.race_itemright_button {
|
||||
padding: 0.666666666666667em;
|
||||
}
|
||||
.race_itemstatus {
|
||||
position: relative;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.race_itemstatus_progressbar {
|
||||
height: 3px;
|
||||
position: relative;
|
||||
top: 3px;
|
||||
max-width: 5.333333333333333em;
|
||||
background-color: #dedede;
|
||||
}
|
||||
.race_itemstatus_progressbar_progress {
|
||||
height: 100%;
|
||||
background-color: #efaa00;
|
||||
}
|
||||
.racewinners .race_item {
|
||||
padding: 1.2em 0.666666666666667em 1.2em 1.333333333333333em;
|
||||
}
|
||||
.racewinners .race_item:nth-last-child(1) {
|
||||
display: none;
|
||||
}
|
||||
@media (min-width: 61em) {
|
||||
.racewinners .race_item:nth-last-child(1) {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
.racewinners .race_itemname {
|
||||
vertical-align: middle;
|
||||
}
|
||||
.race_fleetcornerblue:before {
|
||||
border-top-color: #00f;
|
||||
}
|
||||
.race_fleetcornerred:before {
|
||||
border-top-color: #f00;
|
||||
}
|
||||
.race_fleetcornersilver:before {
|
||||
border-top-color: #c0c0c0;
|
||||
}
|
||||
.race_fleetcornergold:before {
|
||||
border-top-color: #ffd700;
|
||||
}
|
||||
.race_fleetcorneryellow:before {
|
||||
border-top-color: #ff0;
|
||||
}
|
||||
.raceslist {
|
||||
width: 100%;
|
||||
font-size: 1rem;
|
||||
margin-top: 1em;
|
||||
border: 1px solid #dedede;
|
||||
border-radius: 0.333333333333333em;
|
||||
border-spacing: 0;
|
||||
border-collapse: separate;
|
||||
}
|
||||
.raceslist_head {
|
||||
color: #666;
|
||||
background-color: #f2f2f2;
|
||||
border-bottom: 1px solid #dedede;
|
||||
text-transform: uppercase;
|
||||
font-weight: 600;
|
||||
border-radius: 0.333333333333333em 0 0 0.333333333333333em;
|
||||
}
|
||||
.raceslist_head_item {
|
||||
padding: 0.666666666666667em 0.666666666666667em 0.666666666666667em 1.333333333333333em;
|
||||
text-align: left;
|
||||
}
|
||||
.raceslist_head_item img {
|
||||
max-width: none;
|
||||
}
|
||||
.raceslist_head_item:first-of-type {
|
||||
padding-left: 2em;
|
||||
}
|
||||
.raceslist_head_itemicon {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.raceslist_head_itemflag {
|
||||
max-width: 1.6em;
|
||||
max-height: 1.6em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.raceslist_head_item_winner {
|
||||
margin-left: 0.333333333333333em;
|
||||
}
|
||||
.raceslist_head_itemcenter {
|
||||
text-align: center;
|
||||
}
|
||||
.raceslist_head_itemright {
|
||||
text-align: right;
|
||||
}
|
||||
.raceslist_head_itembutton {
|
||||
width: 14.666666666666666em;
|
||||
}
|
||||
.raceslistlive {
|
||||
font-size: 1rem;
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.raceListLive;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.TableElement;
|
||||
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.Widget;
|
||||
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRacesDTO;
|
||||
|
||||
public class RacesListLive extends Composite implements RefreshableWidget<LiveRacesDTO> {
|
||||
|
||||
private static RacesListLiveUiBinder uiBinder = GWT.create(RacesListLiveUiBinder.class);
|
||||
|
||||
interface RacesListLiveUiBinder extends UiBinder<Widget, RacesListLive> {
|
||||
}
|
||||
|
||||
@UiField TableElement table;
|
||||
@UiField RacesListLiveHead listHead;
|
||||
|
||||
public RacesListLive() {
|
||||
RacesListLiveResources.INSTANCE.css().ensureInjected();
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setData(LiveRacesDTO data, long nextUpdate, int updateNo) {
|
||||
table.removeAllChildren();
|
||||
table.appendChild(listHead.getElement());
|
||||
for (LiveRaceDTO race : data.getRaces()) {
|
||||
table.appendChild(new RacesListLiveRow(race).getElement());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
<!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:r="urn:import:com.sap.sailing.gwt.home.client.place.event.partials.raceListLive">
|
||||
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<ui:with field="i18n_ubi" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
|
||||
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources" />
|
||||
<g:HTMLPanel>
|
||||
<div class="{local_res.css.raceslistlive}">
|
||||
<h3>
|
||||
TODO <!-- <ui:text from='{i18n_ubi.i18nRegattaListviewLiveNow}' /> -->
|
||||
</h3>
|
||||
<table class="{local_res.css.raceslist}" ui:field="table">
|
||||
<r:RacesListLiveHead ui:field="listHead"/>
|
||||
</table>
|
||||
</div>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.raceListLive;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
|
||||
public class RacesListLiveHead extends Composite {
|
||||
|
||||
private static RacesListLiveHeadUiBinder uiBinder = GWT.create(RacesListLiveHeadUiBinder.class);
|
||||
|
||||
interface RacesListLiveHeadUiBinder extends UiBinder<Widget, RacesListLiveHead> {
|
||||
}
|
||||
|
||||
public RacesListLiveHead() {
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
}
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
<!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:r="urn:import:com.sap.sailing.gwt.home.client.place.event.partials.raceListLive">
|
||||
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<ui:with field="i18n_ubi" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
|
||||
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources" />
|
||||
<g:HTMLPanel tag="thead">
|
||||
<tr class="{local_res.css.raceslist_head}">
|
||||
<th class="{local_res.css.raceslist_head_item}">
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item}">
|
||||
<ui:text from='{i18n.regatta}' />
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item}">
|
||||
<ui:text from='{i18n.race}' />
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.showonlarge}">
|
||||
<ui:text from='{i18n.fleet}' />
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item}">
|
||||
<ui:text from='{i18n.start}' />
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.showonlarge}">
|
||||
TODOFLAG <!-- <ui:text from='{i18n.flag}' /> -->
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item}">
|
||||
<ui:text from='{i18n.wind}' />
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.hideonsmall}">
|
||||
<ui:text from='{i18n.from}' />
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.showonlarge}">
|
||||
TODOAREA <!-- <ui:text from='{i18n.area}' /> -->
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.showonlarge}">
|
||||
<ui:text from='{i18n.course}' />
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item}">
|
||||
<ui:text from='{i18n.status}' />
|
||||
</th>
|
||||
<th class="{local_res.css.raceslist_head_item} {local_res.css.raceslist_head_itembutton}">
|
||||
TODOWATCH <!-- <ui:text from='{i18n_ubi.i18nRegattaHeadersButton}' /> -->
|
||||
</th>
|
||||
</tr>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.raceListLive;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.resources.client.ClientBundle;
|
||||
import com.google.gwt.resources.client.CssResource;
|
||||
|
||||
public interface RacesListLiveResources extends ClientBundle {
|
||||
public static final RacesListLiveResources INSTANCE = GWT.create(RacesListLiveResources.class);
|
||||
|
||||
@Source("RacesListLive.gss")
|
||||
LocalCss css();
|
||||
|
||||
public interface LocalCss extends CssResource {
|
||||
String race();
|
||||
String race_item();
|
||||
String race_fleetcorner();
|
||||
String race_fleetcorner_icon();
|
||||
String button();
|
||||
String race_itemrank();
|
||||
String race_itemshort();
|
||||
String race_itemlong();
|
||||
String race_itemwind();
|
||||
String race_itemname();
|
||||
String race_itemwinner();
|
||||
String race_item_flag();
|
||||
String race_item_position();
|
||||
String race_item_winner();
|
||||
String race_itemcenter();
|
||||
String race_itemright();
|
||||
String race_itemright_button();
|
||||
String race_itemstatus();
|
||||
String race_itemstatus_progressbar();
|
||||
String race_itemstatus_progressbar_progress();
|
||||
String racewinners();
|
||||
String race_fleetcornerblue();
|
||||
String race_fleetcornerred();
|
||||
String race_fleetcornersilver();
|
||||
String race_fleetcornergold();
|
||||
String race_fleetcorneryellow();
|
||||
String raceslist();
|
||||
String raceslist_head();
|
||||
String raceslist_head_item();
|
||||
String raceslist_head_itemicon();
|
||||
String raceslist_head_itemflag();
|
||||
String raceslist_head_item_winner();
|
||||
String raceslist_head_itemcenter();
|
||||
String raceslist_head_itemright();
|
||||
String raceslist_head_itembutton();
|
||||
String raceslistlive();
|
||||
}
|
||||
}
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.raceListLive;
|
||||
|
||||
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.dom.client.ImageElement;
|
||||
import com.google.gwt.dom.client.Style.Unit;
|
||||
import com.google.gwt.dom.client.TableCellElement;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.Event;
|
||||
import com.google.gwt.user.client.EventListener;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.common.client.LinkUtil;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRaceDTO;
|
||||
|
||||
public class RacesListLiveRow extends Composite {
|
||||
|
||||
private static RacesListLiveRowUiBinder uiBinder = GWT.create(RacesListLiveRowUiBinder.class);
|
||||
|
||||
interface RacesListLiveRowUiBinder extends UiBinder<Widget, RacesListLiveRow> {
|
||||
}
|
||||
|
||||
@UiField DivElement fleetCorner;
|
||||
@UiField TableCellElement regatta;
|
||||
@UiField TableCellElement race;
|
||||
@UiField TableCellElement fleetName;
|
||||
@UiField TableCellElement start;
|
||||
@UiField ImageElement flag;
|
||||
@UiField TableCellElement wind;
|
||||
@UiField TableCellElement from;
|
||||
@UiField TableCellElement area;
|
||||
@UiField TableCellElement course;
|
||||
@UiField DivElement statusText;
|
||||
@UiField DivElement statusProgress;
|
||||
@UiField AnchorElement watchNowAnchor;
|
||||
|
||||
private DateTimeFormat startTimeFormat = DateTimeFormat.getFormat(PredefinedFormat.HOUR24_MINUTE);
|
||||
|
||||
public RacesListLiveRow(LiveRaceDTO raceData) {
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
initEventListener(raceData);
|
||||
setData(raceData);
|
||||
}
|
||||
|
||||
void setData(LiveRaceDTO raceData) {
|
||||
fleetCorner.getStyle().setBorderColor(raceData.getFleetColor()); // TODO border-top-color!?
|
||||
regatta.setInnerText(raceData.getRegattaName());
|
||||
race.setInnerText(raceData.getRaceName());
|
||||
fleetName.setInnerText(raceData.getFleetName());
|
||||
start.setInnerText(raceData.getStart() == null ? "-" : startTimeFormat.format(raceData.getStart()));
|
||||
// flag.setSrc(""); TODO
|
||||
wind.setInnerText("TODO Wind");
|
||||
from.setInnerText("TODO From");
|
||||
area.setInnerText("TODO Area");
|
||||
course.setInnerText("TODO Course");
|
||||
statusText.setInnerText("TODO Status");
|
||||
statusProgress.getStyle().setWidth(50, Unit.PCT);
|
||||
}
|
||||
|
||||
private void initEventListener(final LiveRaceDTO raceData) {
|
||||
Event.sinkEvents(watchNowAnchor, Event.ONCLICK);
|
||||
Event.setEventListener(watchNowAnchor, new EventListener() {
|
||||
@Override
|
||||
public void onBrowserEvent(Event event) {
|
||||
if (LinkUtil.handleLinkClick(event)) {
|
||||
// TODO
|
||||
Window.alert("Watch now: " + raceData.getRegattaName() + " " + raceData.getRaceName());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
<!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:r="urn:import:com.sap.sailing.gwt.home.client.place.event.partials.raceListLive">
|
||||
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<ui:with field="i18n_ubi" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
|
||||
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources" />
|
||||
<g:HTMLPanel tag="tbody">
|
||||
<tr class="{local_res.css.race}">
|
||||
<td class="{local_res.css.race_fleetcorner}">
|
||||
<div style="border-top-color: blue" class="{local_res.css.race_fleetcorner_icon}" ui:field="fleetCorner"></div>
|
||||
</td>
|
||||
<td class="{local_res.css.race_item} {local_res.css.race_itemname}" ui:field="regatta"></td>
|
||||
<td class="{local_res.css.race_item} {local_res.css.race_itemname}" ui:field="race"></td>
|
||||
<td class="{local_res.css.race_item} {res.mediaCss.showonlarge}" ui:field="fleetName"></td>
|
||||
<td class="{local_res.css.race_item}" ui:field="start"></td>
|
||||
<td class="{local_res.css.race_item} {res.mediaCss.showonlarge}">
|
||||
<img src="" class="{local_res.css.race_item_flag}" ui:field="flag"/>
|
||||
</td>
|
||||
<td class="{local_res.css.race_item}" ui:field="wind"></td>
|
||||
<td class="{local_res.css.race_item} {res.mediaCss.hideonsmall}" ui:field="from"></td>
|
||||
<td class="{local_res.css.race_item} {res.mediaCss.showonlarge}" ui:field="area"></td>
|
||||
<td class="{local_res.css.race_item} {res.mediaCss.showonlarge}" ui:field="course"></td>
|
||||
<td class="{local_res.css.race_item} {local_res.css.race_itemstatus}">
|
||||
<div ui:field="statusText"></div>
|
||||
<div class="{local_res.css.race_itemstatus_progressbar}">
|
||||
<div class="{local_res.css.race_itemstatus_progressbar_progress}" ui:field="statusProgress"></div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="{local_res.css.race_item} {local_res.css.race_itemright}">
|
||||
<a class="{res.mainCss.button} {res.mainCss.buttonstrong} {res.mainCss.buttonred} {res.mainCss.buttonarrowrightwhite}" ui:field="watchNowAnchor">
|
||||
TODO <!-- <ui:text from='{i18n_ubi.i18nRegattaButtonsWatchNow}' /> -->
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
.cellTableWidget {
|
||||
}
|
||||
|
||||
.cellTableFirstColumn {
|
||||
}
|
||||
|
||||
.cellTableLastColumn {
|
||||
}
|
||||
|
||||
.cellTableFooter {
|
||||
}
|
||||
|
||||
.cellTableHeader {
|
||||
}
|
||||
|
||||
.cellTableCell {
|
||||
}
|
||||
|
||||
.cellTableFirstColumnFooter {
|
||||
}
|
||||
|
||||
.cellTableFirstColumnHeader {
|
||||
}
|
||||
|
||||
.cellTableLastColumnFooter {
|
||||
}
|
||||
|
||||
.cellTableLastColumnHeader {
|
||||
}
|
||||
|
||||
.cellTableSortableHeader {
|
||||
}
|
||||
|
||||
.cellTableSortableHeader:hover {
|
||||
}
|
||||
|
||||
.cellTableSortedHeaderAscending {
|
||||
}
|
||||
|
||||
.cellTableSortedHeaderDescending {
|
||||
}
|
||||
|
||||
.cellTableEvenRow {
|
||||
}
|
||||
|
||||
.cellTableEvenRowCell {
|
||||
}
|
||||
|
||||
.cellTableOddRow {
|
||||
}
|
||||
|
||||
.cellTableOddRowCell {
|
||||
}
|
||||
|
||||
.cellTableHoveredRow {
|
||||
}
|
||||
|
||||
.cellTableHoveredRowCell {
|
||||
}
|
||||
|
||||
.cellTableKeyboardSelectedRow {
|
||||
}
|
||||
|
||||
.cellTableKeyboardSelectedRowCell {
|
||||
}
|
||||
|
||||
.cellTableSelectedRow {
|
||||
}
|
||||
|
||||
.cellTableSelectedRowCell {
|
||||
}
|
||||
|
||||
.cellTableKeyboardSelectedCell {
|
||||
}
|
||||
|
||||
.cellTableLoading {
|
||||
}
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
package com.sap.sailing.gwt.home.client.place.event.partials.racelist;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
|
||||
import com.google.gwt.user.cellview.client.CellTable;
|
||||
import com.google.gwt.user.cellview.client.CellTable.Style;
|
||||
import com.google.gwt.user.cellview.client.Column;
|
||||
import com.google.gwt.user.cellview.client.Header;
|
||||
import com.google.gwt.user.cellview.client.RowStyles;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.cellview.client.TextHeader;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.sap.sailing.gwt.common.client.SharedResources;
|
||||
import com.sap.sailing.gwt.common.client.SharedResources.MediaCss;
|
||||
import com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources;
|
||||
import com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources.LocalCss;
|
||||
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRacesDTO;
|
||||
|
||||
|
||||
public class RaceList extends Composite implements RefreshableWidget<LiveRacesDTO> {
|
||||
|
||||
private static final LocalCss CSS = RacesListLiveResources.INSTANCE.css();
|
||||
private static final MediaCss MEDIA_CSS = SharedResources.INSTANCE.mediaCss();
|
||||
private static final StringMessages I18N = StringMessages.INSTANCE;
|
||||
|
||||
private static final CustomResources RESOURCES = GWT.create(CustomResources.class);
|
||||
private final CellTable<LiveRaceDTO> cellTable = new CellTable<LiveRaceDTO>(0, RESOURCES);
|
||||
private final DateTimeFormat startTimeFormat = DateTimeFormat.getFormat(PredefinedFormat.HOUR24_MINUTE);
|
||||
|
||||
interface CustomResources extends CellTable.Resources {
|
||||
@Override
|
||||
@Source("RaceList.css")
|
||||
public Style cellTableStyle();
|
||||
}
|
||||
|
||||
public RaceList() {
|
||||
CSS.ensureInjected();
|
||||
cellTable.addStyleName(CSS.raceslist());
|
||||
cellTable.setRowStyles(new RowStyles<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getStyleNames(LiveRaceDTO row, int rowIndex) {
|
||||
return CSS.race();
|
||||
}
|
||||
});
|
||||
initColumns();
|
||||
initWidget(cellTable);
|
||||
}
|
||||
|
||||
private void initColumns() {
|
||||
TextColumn<LiveRaceDTO> fleetCornerColumn = new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return "";
|
||||
}
|
||||
};
|
||||
fleetCornerColumn.setCellStyleNames(CSS.race_fleetcorner());
|
||||
this.cellTable.addColumn(fleetCornerColumn, getStyledHeader(""));
|
||||
|
||||
this.cellTable.addColumn(getStyledColumn(new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return object.getRegattaName();
|
||||
}
|
||||
}, CSS.race_itemname()), getStyledHeader(I18N.regatta()));
|
||||
|
||||
this.cellTable.addColumn(getStyledColumn(new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return object.getRaceName();
|
||||
}
|
||||
}, CSS.race_itemname()), getStyledHeader(I18N.race()));
|
||||
|
||||
add(I18N.fleet(), new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return object.getFleetName();
|
||||
}
|
||||
}, MEDIA_CSS.showonlarge());
|
||||
|
||||
add(I18N.start(), new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return object.getStart() == null ? "-" : startTimeFormat.format(object.getStart());
|
||||
}
|
||||
});
|
||||
|
||||
add("TODO FLAG", new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return "TODO FLAG";
|
||||
}
|
||||
});
|
||||
|
||||
add(I18N.wind(), new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return "TODO WIND";
|
||||
}
|
||||
});
|
||||
|
||||
add(I18N.from(), new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return "TODO FROM";
|
||||
}
|
||||
}, MEDIA_CSS.hideonsmall());
|
||||
|
||||
add("TODO AREA", new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return "TODO AREA";
|
||||
}
|
||||
}, MEDIA_CSS.showonlarge());
|
||||
|
||||
add(I18N.course(), new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return "TODO COURSE";
|
||||
}
|
||||
}, MEDIA_CSS.showonlarge());
|
||||
|
||||
add(I18N.status(), new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return "TODO STATUS";
|
||||
}
|
||||
});
|
||||
|
||||
this.cellTable.addColumn(getStyledColumn(new TextColumn<LiveRaceDTO>() {
|
||||
@Override
|
||||
public String getValue(LiveRaceDTO object) {
|
||||
return "TODO WATCH NOW";
|
||||
}
|
||||
}, CSS.race_itemright()), getStyledHeader("", CSS.raceslist_head_itembutton()));
|
||||
|
||||
}
|
||||
|
||||
private Header<?> getStyledHeader(String headerText, String... additionalStyles) {
|
||||
Header<String> header = new TextHeader(headerText);
|
||||
header.setHeaderStyleNames(createStyleNameString(CSS.raceslist_head_item(), additionalStyles));
|
||||
return header;
|
||||
}
|
||||
|
||||
private <C> Column<LiveRaceDTO, C> getStyledColumn(Column<LiveRaceDTO, C> column, String... additionalStyles) {
|
||||
column.setCellStyleNames(createStyleNameString(CSS.race_item(), additionalStyles));
|
||||
return column;
|
||||
}
|
||||
|
||||
private void add(String headerText, Column<LiveRaceDTO, ?> column, String... mediaStyle) {
|
||||
this.cellTable.addColumn(getStyledColumn(column, mediaStyle), getStyledHeader(headerText, mediaStyle));
|
||||
}
|
||||
|
||||
private String createStyleNameString(String primaryStyle, String... additionalStyles) {
|
||||
assert primaryStyle != null : "primaryStyle parameter cannot be null";
|
||||
StringBuilder styleName = new StringBuilder(primaryStyle);
|
||||
for (int i = 0; i < additionalStyles.length; i++) {
|
||||
styleName.append(" ").append(additionalStyles[i]);
|
||||
}
|
||||
return styleName.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setData(LiveRacesDTO data, long nextUpdate, int updateNo) {
|
||||
this.cellTable.setRowData(data.getRaces());
|
||||
this.cellTable.setPageSize(data.getRaces().size());
|
||||
}
|
||||
|
||||
}
|
||||
+3
@@ -7,6 +7,7 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||
import com.sap.sailing.gwt.common.client.controls.tabbar.TabView;
|
||||
import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceList;
|
||||
import com.sap.sailing.gwt.home.client.place.event.regatta.EventRegattaView;
|
||||
import com.sap.sailing.gwt.home.client.place.event.regatta.EventRegattaView.Presenter;
|
||||
import com.sap.sailing.gwt.home.client.place.event.regatta.RegattaTabView;
|
||||
@@ -44,6 +45,7 @@ public class RegattaOverviewTabView extends Composite implements RegattaTabView<
|
||||
// TODO CF
|
||||
RefreshManager refreshManager = new RefreshManager(this, new AutomaticBatchingDispatch(new SimpleDispatch(null)));
|
||||
|
||||
refreshManager.add(raceList, new GetLiveRacesAction(currentPresenter.getCtx().getEventDTO().getId()));
|
||||
refreshManager.add(liveRaces, new GetLiveRacesAction(currentPresenter.getCtx().getEventDTO().getId()));
|
||||
refreshManager.add(content2, new OtherAction());
|
||||
|
||||
@@ -61,6 +63,7 @@ public class RegattaOverviewTabView extends Composite implements RegattaTabView<
|
||||
private static MyBinder ourUiBinder = GWT.create(MyBinder.class);
|
||||
private Presenter currentPresenter;
|
||||
|
||||
@UiField RaceList raceList;
|
||||
@UiField LiveRacesContent liveRaces;
|
||||
@UiField OtherContent content2;
|
||||
|
||||
|
||||
+4
-1
@@ -1,10 +1,13 @@
|
||||
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
|
||||
xmlns:g='urn:import:com.google.gwt.user.client.ui'
|
||||
xmlns:o="urn:import:com.sap.sailing.gwt.home.client.place.event.regatta.tabs.overview">
|
||||
xmlns:o="urn:import:com.sap.sailing.gwt.home.client.place.event.regatta.tabs.overview"
|
||||
xmlns:r="urn:import:com.sap.sailing.gwt.home.client.place.event.partials.racelist">
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<g:HTMLPanel>
|
||||
<div class="{res.mediaCss.grid}">
|
||||
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
|
||||
<h2>Live Races</h2>
|
||||
<r:RaceList ui:field="raceList"/>
|
||||
<h2>Content 1</h2>
|
||||
<o:LiveRacesContent ui:field="liveRaces" />
|
||||
<h2>Content 2</h2>
|
||||
|
||||
Reference in new issue
Block a user