initial version of events page... not finished

This commit is contained in:
fmittag committed 2014-06-10 19:32:02 +02:00
1 parent c9b8c1bb17
commit ec151ba514
28 files changed
+522 -243

No files matched your search

@@ -0,0 +1,60 @@
package com.sap.sailing.gwt.home.client;
import java.util.Date;
import com.google.gwt.i18n.shared.DateTimeFormat;
/**
* Some date calculation functions as GWT does not support java.util.Calendar
* @author Frank
*
*/
public class DateUtil {
private static final DateTimeFormat dayFormat = DateTimeFormat.getFormat("d");
private static final DateTimeFormat monthFormat = DateTimeFormat.getFormat("M");
private static final DateTimeFormat yearFormat = DateTimeFormat.getFormat("yyyy");
private static final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
public static int getDayOfMonth(Date date) {
String s = dayFormat.format(date);
return Integer.parseInt(s);
}
public static int getMonth(Date date) {
String s = monthFormat.format(date);
return Integer.parseInt(s);
}
public static int getYear(Date date) {
String s = yearFormat.format(date);
return Integer.parseInt(s);
}
public static boolean isSameDayOfMonth(Date date1, Date date2) {
return getMonth(date1) == getMonth(date2);
}
public static boolean isSameMonth(Date date1, Date date2) {
return getMonth(date1) == getMonth(date2);
}
public static boolean isSameYear(Date date1, Date date2) {
return getYear(date1) == getYear(date2);
}
public static boolean isToday(Date date) {
Date now = new Date();
long diffInMillis = date.getTime() - now.getTime();
return Math.abs(diffInMillis) < DAY_IN_MILLIS && isSameDayOfMonth(date, now);
}
public static boolean isDayInFuture(Date date) {
Date now = new Date();
return date.after(now) && !isToday(date);
}
public static boolean isDayInPast(Date date) {
Date now = new Date();
return date.before(now) && !isToday(date);
}
}
@@ -38,7 +38,7 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio
@Override
public EventsView createEventsView(EventsActivity activity) {
return new TabletAndDesktopEventsView(activity);
return new TabletAndDesktopEventsView(getPlaceNavigator());
}
@Override
@@ -0,0 +1,52 @@
package com.sap.sailing.gwt.home.client.place.events;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gwt.user.client.ui.Composite;
import com.sap.sailing.gwt.home.client.DateUtil;
import com.sap.sailing.gwt.ui.shared.EventBaseDTO;
public abstract class AbstractEventsView extends Composite implements EventsView {
private final Map<Integer, List<EventBaseDTO>> recentEventsOrderedByYear;
private final List<EventBaseDTO> upcomingEvents;
public AbstractEventsView() {
recentEventsOrderedByYear = new HashMap<Integer, List<EventBaseDTO>>();
upcomingEvents = new ArrayList<EventBaseDTO>();
}
@Override
public void setEvents(List<EventBaseDTO> events) {
for(EventBaseDTO event: events) {
if(event.startDate != null) {
if(DateUtil.isDayInPast(event.startDate)) {
// recent event
int year = DateUtil.getYear(event.startDate);
List<EventBaseDTO> eventsOfYear = recentEventsOrderedByYear.get(year);
if(eventsOfYear == null) {
eventsOfYear = new ArrayList<EventBaseDTO>();
recentEventsOrderedByYear.put(year, eventsOfYear);
}
eventsOfYear.add(event);
} else {
// upcoming event
upcomingEvents.add(event);
}
}
}
updateEventsUI();
}
protected abstract void updateEventsUI();
public Map<Integer, List<EventBaseDTO>> getRecentEventsOrderedByYear() {
return recentEventsOrderedByYear;
}
public List<EventBaseDTO> getUpcomingEvents() {
return upcomingEvents;
}
}
@@ -4,11 +4,10 @@ import java.util.List;
import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.EventBaseDTO;
public class EventsActivity extends AbstractActivity {
@@ -22,9 +21,9 @@ public class EventsActivity extends AbstractActivity {
public void start(final AcceptsOneWidget panel, EventBus eventBus) {
final EventsView eventsView = clientFactory.createEventsView(EventsActivity.this);
panel.setWidget(eventsView.asWidget());
clientFactory.getSailingService().getEvents(new AsyncCallback<List<EventDTO>>() {
clientFactory.getSailingService().getPublicEventsOfAllSailingServers(new AsyncCallback<List<EventBaseDTO>>() {
@Override
public void onSuccess(List<EventDTO> events) {
public void onSuccess(List<EventBaseDTO> events) {
eventsView.setEvents(events);
}
@@ -34,8 +33,4 @@ public class EventsActivity extends AbstractActivity {
}
});
}
void goTo(Place place) {
clientFactory.getPlaceController().goTo(place);
}
}
@@ -124,7 +124,7 @@ public class EventsTable extends Composite {
nameColumn.setFieldUpdater(new FieldUpdater<EventDTO, SafeHtml>() {
@Override
public void update(int index, EventDTO object, SafeHtml value) {
activity.goTo(new EventPlace(object.id.toString()));
// activity.goTo(new EventPlace(object.id.toString()));
}
});
nameColumn.setSortable(true);
@@ -1,10 +1,12 @@
package com.sap.sailing.gwt.home.client.place.events;
import java.util.List;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.EventBaseDTO;
public interface EventsView {
Widget asWidget();
void setEvents(Iterable<EventDTO> events);
void setEvents(List<EventBaseDTO> events);
}
@@ -2,60 +2,52 @@ package com.sap.sailing.gwt.home.client.place.events;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.home.client.place.event.EventPlace;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.home.client.app.PlaceNavigator;
import com.sap.sailing.gwt.home.client.place.events.recent.EventsOverviewRecent;
import com.sap.sailing.gwt.home.client.place.events.upcoming.EventsOverviewUpcoming;
public class TabletAndDesktopEventsView extends Composite implements EventsView {
public class TabletAndDesktopEventsView extends AbstractEventsView {
private static EventsPageViewUiBinder uiBinder = GWT.create(EventsPageViewUiBinder.class);
interface EventsPageViewUiBinder extends UiBinder<Widget, TabletAndDesktopEventsView> {
}
private final EventsActivity activity;
@UiField
TextBox queryInput;
@UiField
Button searchButton;
@UiField
FlowPanel eventListPanel;
@UiField(provided=true)
EventsTable eventsTable;
public TabletAndDesktopEventsView(EventsActivity activity) {
@UiField(provided=true) EventsOverviewRecent recentEventsWidget;
@UiField(provided=true) EventsOverviewUpcoming upcomingEventsWidget;
@UiField Hyperlink recentEventsLink;
@UiField Hyperlink upcomingEventsLink;
public TabletAndDesktopEventsView(PlaceNavigator navigator) {
super();
this.activity = activity;
eventsTable = new EventsTable(activity);
recentEventsWidget = new EventsOverviewRecent(navigator);
upcomingEventsWidget = new EventsOverviewUpcoming(navigator);
initWidget(uiBinder.createAndBindUi(this));
queryInput.getElement().setId("queryInput");
}
public void setEvents(Iterable<EventDTO> events) {
eventListPanel.clear();
for (final EventDTO event : events) {
Anchor request = new Anchor(event.getName());
request.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent e) {
TabletAndDesktopEventsView.this.activity.goTo(new EventPlace(event.id.toString()));
}
});
eventListPanel.add(request);
}
eventsTable.setEvents(events);
@UiHandler("recentEventsLink")
void recentsEventsClicked(ClickEvent event) {
recentEventsWidget.setVisible(true);
// set style buttoninactive
upcomingEventsWidget.setVisible(false);
}
@UiHandler("searchButton")
void buttonClick(ClickEvent event) {
@UiHandler("upcomingEventsLink")
void upcomingEventsClicked(ClickEvent event) {
recentEventsWidget.setVisible(false);
upcomingEventsWidget.setVisible(true);
}
@Override
protected void updateEventsUI() {
recentEventsWidget.updateEvents(getRecentEventsOrderedByYear());
upcomingEventsWidget.updateEvents(getUpcomingEvents());
}
}
@@ -1,30 +1,35 @@
<!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:c="urn:import:com.google.gwt.user.cellview.client"
xmlns:e="urn:import:com.sap.sailing.gwt.home.client.place.events">
<ui:style>
.panel {
width: 100%;
background-color: rgb(255,255,255);
border: solid 1px black;
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared"
xmlns:p="urn:import:com.sap.sailing.gwt.home.client.place.events"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:with field="res" type="com.sap.sailing.gwt.home.client.HomeResources" />
<ui:style>
.eventsoverviewnavigation {
font-size: 16px;
font-size: 1rem;
margin: 1.875em 0;
}
</ui:style>
.eventsoverviewnavigation_button {
text-transform: uppercase;
margin-right: 0.625em;
}
</ui:style>
<g:VerticalPanel styleName="{style.panel}">
<g:HTMLPanel>
Events page
<div id="searchEventsInput">
<h2>Search event:</h2>
<label for="queryInput">Query:</label>
<g:TextBox ui:field="queryInput"/>
<g:Button ui:field="searchButton" text="Go!"/>
<g:HTMLPanel>
<div class="{style.eventsoverviewnavigation}">
<div class="{res.mainCss.grid}">
<div class="{res.mediaCss.small6} {res.mediaCss.columns}">
<g:Hyperlink ui:field="recentEventsLink" text="Recent Events" styleName="{res.mainCss.button} {style.eventsoverviewnavigation_button}" />
<g:Hyperlink ui:field="upcomingEventsLink" text="Upcoming Schedule" styleName="{res.mainCss.button} {style.eventsoverviewnavigation_button}" />
</div>
<div id="searchResults">
<h2>Events:</h2>
<g:FlowPanel ui:field="eventListPanel"/>
</div>
<e:EventsTable ui:field="eventsTable" />
</g:HTMLPanel>
</g:VerticalPanel>
</div>
</div>
<p:recent.EventsOverviewRecent ui:field='recentEventsWidget'/>
<p:upcoming.EventsOverviewUpcoming ui:field='upcomingEventsWidget'/>
<s:socialfooter.SocialFooter ui:field='socialFooter'/>
</g:HTMLPanel>
</ui:UiBinder>
@@ -0,0 +1,66 @@
package com.sap.sailing.gwt.home.client.place.events.recent;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gwt.core.client.GWT;
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.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.home.client.DateUtil;
import com.sap.sailing.gwt.home.client.app.PlaceNavigator;
import com.sap.sailing.gwt.home.client.shared.recentevent.RecentEvents;
import com.sap.sailing.gwt.ui.shared.EventBaseDTO;
public class EventsOverviewRecent extends Composite {
interface EventsOverviewUiBinder extends UiBinder<Widget, EventsOverviewRecent> {
}
private static EventsOverviewUiBinder uiBinder = GWT.create(EventsOverviewUiBinder.class);
private final PlaceNavigator navigator;
@UiField HTMLPanel htmlPanel;
private final Map<Integer, RecentEvents> recentEventsComposites;
public EventsOverviewRecent(PlaceNavigator navigator) {
this.navigator = navigator;
recentEventsComposites = new HashMap<Integer, RecentEvents>();
EventsOverviewRecentResources.INSTANCE.css().ensureInjected();
initWidget(uiBinder.createAndBindUi(this));
}
public void updateEvents(Map<Integer, List<EventBaseDTO>> recentEventsOrderedByYear) {
// remove old widgets
htmlPanel.clear();
recentEventsComposites.clear();
// recent events of this year
Date now = new Date();
int currentYear = DateUtil.getYear(now);
if(recentEventsOrderedByYear.get(currentYear) != null) {
RecentEvents recentEvents = new RecentEvents(navigator);
recentEvents.setEvents(recentEventsOrderedByYear.get(currentYear), null);
htmlPanel.add(recentEvents);
recentEventsComposites.put(currentYear, recentEvents);
}
currentYear--;
while (currentYear > 2010) {
if(recentEventsOrderedByYear.get(currentYear) != null) {
RecentEvents recentEvents = new RecentEvents(navigator);
recentEvents.setEvents(recentEventsOrderedByYear.get(currentYear), String.valueOf(currentYear));
htmlPanel.add(recentEvents);
recentEventsComposites.put(currentYear, recentEvents);
}
currentYear--;
}
}
}
@@ -4,7 +4,8 @@
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared">
<ui:with field="i18n" type="com.sap.sailing.gwt.home.client.i18n.TextMessages"/>
<ui:with field="res" type="com.sap.sailing.gwt.home.client.HomeResources" />
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.shared.eventsoverview.EventsOverviewResources" />
<g:HTMLPanel>
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.events.recent.EventsOverviewRecentResources" />
<g:HTMLPanel ui:field="htmlPanel">
<!-- The whole content will be created dynamically -->
</g:HTMLPanel>
</ui:UiBinder>
@@ -0,0 +1,15 @@
package com.sap.sailing.gwt.home.client.place.events.recent;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
public interface EventsOverviewRecentResources extends ClientBundle {
public static final EventsOverviewRecentResources INSTANCE = GWT.create(EventsOverviewRecentResources.class);
@Source("com/sap/sailing/gwt/home/client/place/events/recent/EventsOverviewRecent.css")
LocalCss css();
public interface LocalCss extends CssResource {
}
}
@@ -1,65 +1,12 @@
/**
* The overview over events
* The overview over upcoming events
*/
.eventteaser {
.eventsoverviewupcoming {
font-size: 16px;
font-size: 1rem;
display: inline-block;
margin-bottom: 2.8125em;
}
.eventteaser:hover {
text-decoration: none;
}
.eventteaser:hover .eventteaser_name {
text-decoration: underline;
}
.eventteaser:hover .eventteaser_image {
opacity: 0.9;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
filter: alpha(opacity=90);
}
.eventteaser_image {
position: relative;
}
.eventteaser_series {
position: absolute;
bottom: 0;
right: 0;
}
.eventteaser_name {
font-size: 1.375em;
font-weight: bold;
color: #008fcc;
margin-top: 0.3125em;
}
.eventteaser_location {
color: #222;
}
.eventsoverview {
font-size: 16px;
font-size: 1rem;
}
.eventsoverview_navigation {
margin: 1.875em 0;
}
.eventsoverview_navigation_button {
text-transform: uppercase;
margin-right: 0.625em;
}
.eventsoverview_contenthidden {
display: none;
}
.eventsoverview_contentrecent {
padding-bottom: 1.875em;
}
.eventsoverview_contentrecent_year {
border-top: 1px solid #ddd;
margin-top: 0.625em;
}
.eventsoverview_contentupcoming {
padding-bottom: 4.6875em;
}
.eventsoverview_contentupcoming_teaser {
.eventsoverviewupcoming_teaser {
font-size: 1.125em;
font-weight: bold;
color: #008fcc;
@@ -0,0 +1,32 @@
package com.sap.sailing.gwt.home.client.place.events.upcoming;
import java.util.List;
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;
import com.sap.sailing.gwt.home.client.app.PlaceNavigator;
import com.sap.sailing.gwt.ui.shared.EventBaseDTO;
public class EventsOverviewUpcoming extends Composite {
interface EventsOverviewUiBinder extends UiBinder<Widget, EventsOverviewUpcoming> {
}
private static EventsOverviewUiBinder uiBinder = GWT.create(EventsOverviewUiBinder.class);
private final PlaceNavigator navigator;
public EventsOverviewUpcoming(PlaceNavigator navigator) {
this.navigator = navigator;
EventsOverviewUpcomingResources.INSTANCE.css().ensureInjected();
initWidget(uiBinder.createAndBindUi(this));
}
public void updateEvents(List<EventBaseDTO> events) {
}
}
@@ -0,0 +1,44 @@
<!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">
<ui:with field="i18n" type="com.sap.sailing.gwt.home.client.i18n.TextMessages"/>
<ui:with field="res" type="com.sap.sailing.gwt.home.client.HomeResources" />
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.events.upcoming.EventsOverviewUpcomingResources" />
<g:HTMLPanel>
<!-- Page displays all upcoming events-->
<!--
<div class="{local_res.css.eventsoverviewupcoming}">{#each upcomingYear in upcomingYears}
<div class="{local_res.css.eventsoverviewupcoming}">
<div class="{res.mainCss.grid}">
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
<h2>{upcomingYear.title}</h2>
</div>
</div>
<div class="{local_res.css.eventslist_header}">
<div class="{res.mainCss.grid}">
<div class="{res.mediaCss.small3} {res.mediaCss.columns} {local_res.css.eventslist_header_item}">Date</div>
<div class="{res.mediaCss.small3} {res.mediaCss.columns} {local_res.css.eventslist_header_item}">Event</div>
<div class="{res.mediaCss.small4} {res.mediaCss.columns} {local_res.css.eventslist_header_item}">Location</div>
<div class="{res.mediaCss.small2} {res.mediaCss.columns} {local_res.css.eventslist_header_item} {local_res.css.eventslist_header_itemseries}">Series</div>
</div>
</div>{#each event in upcomingYear.events}
<div class="{local_res.css.eventslist_event}"><a href="event-overview.html" class="{res.mainCss.grid} {local_res.css.eventslist_event_link}">
<div class="{res.mediaCss.small3} {res.mediaCss.columns} {local_res.css.eventslist_event_item}">{event.date}</div>
<div class="{res.mediaCss.small3} {res.mediaCss.columns} {local_res.css.eventslist_event_item} {local_res.css.eventslist_event_itemname}">{event.name}</div>
<div class="{res.mediaCss.small4} {res.mediaCss.columns} {local_res.css.eventslist_event_item}">{event.venue.name}</div>
<div class="{res.mediaCss.small2} {res.mediaCss.columns} {local_res.css.eventslist_event_item} {local_res.css.eventslist_event_itemseries}">
<div data-labeltype="{event.series.id}" class="{res.mainCss.label}">{event.series.name}</div>
</div></a></div>{/each}
</div>{/each}
<div class="{local_res.css.eventsoverviewupcoming_teaser}">
<div class="{res.mainCss.grid}">
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">More Events To Be Announced Soon!</div>
</div>
</div>
</div>
-->
</g:HTMLPanel>
</ui:UiBinder>
@@ -0,0 +1,26 @@
package com.sap.sailing.gwt.home.client.place.events.upcoming;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
public interface EventsOverviewUpcomingResources extends ClientBundle {
public static final EventsOverviewUpcomingResources INSTANCE = GWT.create(EventsOverviewUpcomingResources.class);
@Source("com/sap/sailing/gwt/home/client/place/events/upcoming/EventsOverviewUpcoming.css")
LocalCss css();
public interface LocalCss extends CssResource {
String eventsoverviewupcoming();
String eventsoverviewupcoming_teaser();
String eventslist();
String eventslist_header();
String eventslist_header_item();
String eventslist_header_itemseries();
String eventslist_event();
String eventslist_event_itemname();
String eventslist_event_link();
String eventslist_event_item();
String eventslist_event_itemseries();
}
}
@@ -1,20 +0,0 @@
package com.sap.sailing.gwt.home.client.shared.eventsoverview;
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 EventsOverview extends Composite {
interface EventsOverviewUiBinder extends UiBinder<Widget, EventsOverview> {
}
private static EventsOverviewUiBinder uiBinder = GWT.create(EventsOverviewUiBinder.class);
public EventsOverview() {
EventsOverviewResources.INSTANCE.css().ensureInjected();
initWidget(uiBinder.createAndBindUi(this));
}
}
@@ -1,38 +0,0 @@
package com.sap.sailing.gwt.home.client.shared.eventsoverview;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
public interface EventsOverviewResources extends ClientBundle {
public static final EventsOverviewResources INSTANCE = GWT.create(EventsOverviewResources.class);
@Source("com/sap/sailing/gwt/home/client/shared/eventsoverview/EventsOverview.css")
LocalCss css();
public interface LocalCss extends CssResource {
String eventteaser();
String eventteaser_name();
String eventteaser_image();
String Microsoft();
String eventteaser_series();
String eventteaser_location();
String eventsoverview();
String eventsoverview_navigation();
String eventsoverview_navigation_button();
String eventsoverview_contenthidden();
String eventsoverview_contentrecent();
String eventsoverview_contentrecent_year();
String eventsoverview_contentupcoming();
String eventsoverview_contentupcoming_teaser();
String eventslist();
String eventslist_header();
String eventslist_header_item();
String eventslist_header_itemseries();
String eventslist_event();
String eventslist_event_itemname();
String eventslist_event_link();
String eventslist_event_item();
String eventslist_event_itemseries();
}
}
@@ -3,41 +3,3 @@
font-size: 1rem;
position: relative;
}
/**
* Events on the main page
*/
.eventteaser {
font-size: 16px;
font-size: 1rem;
display: inline-block;
margin-bottom: 2.8125em;
}
.eventteaser:hover {
text-decoration: none;
}
.eventteaser:hover .eventteaser_name {
text-decoration: underline;
}
.eventteaser:hover .eventteaser_image {
opacity: 0.9;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
filter: literal("alpha(opacity=90)");
}
.eventteaser_image {
position: relative;
}
.eventteaser_series {
position: absolute;
bottom: 0;
right: 0;
}
.eventteaser_name {
font-size: 1.375em;
font-weight: bold;
color: #008fcc;
margin-top: 0.3125em;
}
.eventteaser_location {
color: #222;
}
@@ -9,6 +9,7 @@ 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.app.PlaceNavigator;
import com.sap.sailing.gwt.home.client.shared.recentevent.RecentEvent;
import com.sap.sailing.gwt.ui.shared.EventDTO;
public class MainEvents extends Composite {
@@ -16,9 +16,9 @@
</div>
</div>
<div class="{res.mainCss.grid}">
<s:mainevents.RecentEvent ui:field='event1'/>
<s:mainevents.RecentEvent ui:field='event2'/>
<s:mainevents.RecentEvent ui:field='event3'/>
<s:recentevent.RecentEvent ui:field='event1'/>
<s:recentevent.RecentEvent ui:field='event2'/>
<s:recentevent.RecentEvent ui:field='event3'/>
</div>
<div class="{res.mainCss.grid} {res.mainCss.mainsection_navigation}">
<div class="{res.mediaCss.small12} {res.mediaCss.columns}"><a href="#" class="{res.mainCss.button}">Show All Events</a></div>
@@ -12,10 +12,5 @@ public interface MainEventsResources extends ClientBundle {
public interface LocalCss extends CssResource {
String mainevents();
String eventteaser();
String eventteaser_name();
String eventteaser_image();
String eventteaser_series();
String eventteaser_location();
}
}
@@ -0,0 +1,42 @@
/**
* Events on the main page
*/
.eventteaser {
font-size: 16px;
font-size: 1rem;
display: inline-block;
margin-bottom: 2.8125em;
}
.eventteaser:hover {
text-decoration: none;
}
.eventteaser:hover .eventteaser_name {
text-decoration: underline;
}
.eventteaser:hover .eventteaser_image {
opacity: 0.9;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
filter: literal("alpha(opacity=90)");
}
.eventteaser_image {
position: relative;
}
.eventteaser_series {
position: absolute;
bottom: 0;
right: 0;
}
.eventteaser_name {
font-size: 1.375em;
font-weight: bold;
color: #008fcc;
margin-top: 0.3125em;
}
.eventteaser_location {
color: #222;
}
.eventsoverviewrecent {
font-size: 16px;
font-size: 1rem;
}
@@ -1,4 +1,4 @@
package com.sap.sailing.gwt.home.client.shared.mainevents;
package com.sap.sailing.gwt.home.client.shared.recentevent;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.ImageElement;
@@ -15,7 +15,7 @@ import com.sap.sailing.gwt.home.client.app.PlaceNavigator;
import com.sap.sailing.gwt.home.client.place.event.EventPlace;
import com.sap.sailing.gwt.home.client.place.event.EventPlace.Tokenizer;
import com.sap.sailing.gwt.home.client.shared.EventDatesFormatterUtil;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.EventBaseDTO;
public class RecentEvent extends Composite {
@@ -25,7 +25,7 @@ public class RecentEvent extends Composite {
@UiField Anchor eventOverviewLink;
@UiField ImageElement eventImage;
private EventDTO event;
private EventBaseDTO event;
private final String defaultImageUrl = "http://static.sapsailing.com/newhome/default_event_photo.jpg";
@@ -38,10 +38,12 @@ public class RecentEvent extends Composite {
public RecentEvent(PlaceNavigator navigator) {
this.navigator = navigator;
RecentEventResources.INSTANCE.css().ensureInjected();
initWidget(uiBinder.createAndBindUi(this));
}
public void setEvent(EventDTO event) {
public void setEvent(EventBaseDTO event) {
this.event = event;
updateUI();
}
@@ -4,7 +4,7 @@
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared">
<ui:with field="i18n" type="com.sap.sailing.gwt.home.client.i18n.TextMessages"/>
<ui:with field="res" type="com.sap.sailing.gwt.home.client.HomeResources" />
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.shared.mainevents.MainEventsResources" />
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.shared.recentevent.RecentEventResources" />
<g:HTMLPanel>
<div class="{res.mediaCss.small12} {res.mediaCss.medium6} {res.mediaCss.large4} {res.mediaCss.columns}">
<g:Anchor ui:field="eventOverviewLink" styleName="{local_res.css.eventteaser}" href="javascript:;">
@@ -0,0 +1,21 @@
package com.sap.sailing.gwt.home.client.shared.recentevent;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
public interface RecentEventResources extends ClientBundle {
public static final RecentEventResources INSTANCE = GWT.create(RecentEventResources.class);
@Source("com/sap/sailing/gwt/home/client/shared/recentevent/RecentEvent.css")
LocalCss css();
public interface LocalCss extends CssResource {
String eventteaser();
String eventteaser_name();
String eventteaser_image();
String eventteaser_series();
String eventteaser_location();
String eventsoverviewrecent();
}
}
@@ -0,0 +1,59 @@
package com.sap.sailing.gwt.home.client.shared.recentevent;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.HeadingElement;
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.app.PlaceNavigator;
import com.sap.sailing.gwt.ui.shared.EventBaseDTO;
public class RecentEvents extends Composite {
@UiField DivElement recentEventsGrid;
@UiField DivElement headlineDiv;
@UiField HeadingElement titleHeading;
private final List<RecentEvent> recentEventComposites;
interface RecentEventsUiBinder extends UiBinder<Widget, RecentEvents> {
}
private static RecentEventsUiBinder uiBinder = GWT.create(RecentEventsUiBinder.class);
private final PlaceNavigator navigator;
public RecentEvents(PlaceNavigator navigator) {
this.navigator = navigator;
recentEventComposites = new ArrayList<RecentEvent>();
RecentEventResources.INSTANCE.css().ensureInjected();
initWidget(uiBinder.createAndBindUi(this));
}
public void setEvents(List<EventBaseDTO> events, String headlineText) {
recentEventsGrid.removeAllChildren();
recentEventComposites.clear();
if(headlineText != null) {
titleHeading.setInnerText(headlineText);
recentEventsGrid.appendChild(headlineDiv);
} else {
titleHeading.setInnerText("");
}
for(EventBaseDTO event: events) {
RecentEvent recentEvent = new RecentEvent(navigator);
recentEvent.setEvent(event);
recentEventComposites.add(recentEvent);
recentEventsGrid.appendChild(recentEvent.getElement());
}
}
}
@@ -0,0 +1,18 @@
<!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">
<ui:with field="i18n" type="com.sap.sailing.gwt.home.client.i18n.TextMessages"/>
<ui:with field="res" type="com.sap.sailing.gwt.home.client.HomeResources" />
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.shared.recentevent.RecentEventResources" />
<g:HTMLPanel>
<div class="{local_res.css.eventsoverviewrecent}">
<div ui:field="recentEventsGrid" class="{res.mainCss.grid}">
<div ui:field="headlineDiv" class="{res.mediaCss.small12} {res.mediaCss.columns}">
<h3 ui:field="titleHeading" />
</div>
<!-- the recent event widget will be inserted here -->
</div>
</div>
</g:HTMLPanel>
</ui:UiBinder>