From 40d1ba137cd85f5b3fff29b6d92a042fd62e05ec Mon Sep 17 00:00:00 2001 From: Kai Boernert Date: Tue, 20 Jun 2017 15:29:47 +0200 Subject: [PATCH] added statistics to liverace view --- .../autoplay/client/nodes/IdleUpNextNode.java | 81 ++++++++++--------- .../client/nodes/LiveRaceWithRacemapNode.java | 42 +++++++++- ...iveRaceWithRacemapAndLeaderBoardPlace.java | 10 +++ ...ithRacemapAndLeaderBoardPresenterImpl.java | 39 +++++++++ ...LiveRaceWithRacemapAndLeaderBoardView.java | 3 + ...RaceWithRacemapAndLeaderBoardViewImpl.java | 41 ++++++++++ ...ceWithRacemapAndLeaderBoardViewImpl.ui.xml | 60 +++++++++++++- 7 files changed, 236 insertions(+), 40 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/IdleUpNextNode.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/IdleUpNextNode.java index 64cac123998..893ec8bcc28 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/IdleUpNextNode.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/IdleUpNextNode.java @@ -6,6 +6,7 @@ import java.util.Comparator; import java.util.Date; import java.util.Map; +import com.google.gwt.core.shared.GWT; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO; import com.sap.sailing.domain.common.dto.FleetDTO; @@ -44,46 +45,49 @@ public class IdleUpNextNode extends FiresPlaceNode { firePlaceChangeAndStartTimer(); if (raceTimesInfoProvider == null) { - - raceTimesInfoProvider = new RaceTimesInfoProvider(cf.getSailingService(), AutoplayHelper.asyncActionsExecutor, - cf.getErrorReporter(), new ArrayList(), 10000l); - raceTimesInfoProvider.reset(); - - StrippedLeaderboardDTO selectedLeaderboard = AutoplayHelper.getSelectedLeaderboard( - cf.getAutoPlayCtx().getEvent(), cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName()); - for (RaceColumnDTO race : selectedLeaderboard.getRaceList()) { - for (FleetDTO fleet : race.getFleets()) { - RegattaAndRaceIdentifier raceIdentifier = race.getRaceIdentifier(fleet); - if (raceIdentifier != null && !raceTimesInfoProvider.containsRaceIdentifier(raceIdentifier)) { - raceTimesInfoProvider.addRaceIdentifier(raceIdentifier, false); - } - } - } - raceTimesInfoProvider.forceTimesInfosUpdate(); - raceTimesInfoProvider.addRaceTimesInfoProviderListener(new RaceTimesInfoProviderListener() { - - @Override - public void raceTimesInfosReceived(Map raceTimesInfo, - long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest, - long clientTimeWhenResponseWasReceived) { - ArrayList> raceToStartOfRace = new ArrayList>(); - checkForRaceStarts(selectedLeaderboard, serverTimeDuringRequest, raceTimesInfoProvider, - raceToStartOfRace); - - Collections.sort(raceToStartOfRace, new Comparator>() { - - @Override - public int compare(Pair o1, - Pair o2) { - return Long.compare(o1.getB().getTime(), o2.getB().getTime()); - } - }); - place.setUpData(raceToStartOfRace); - - } - }); + createRaceTimeInfoProvider(); } + } + + private void createRaceTimeInfoProvider() { + raceTimesInfoProvider = new RaceTimesInfoProvider(cf.getSailingService(), AutoplayHelper.asyncActionsExecutor, + cf.getErrorReporter(), new ArrayList(), 10000l); + raceTimesInfoProvider.reset(); + + StrippedLeaderboardDTO selectedLeaderboard = AutoplayHelper.getSelectedLeaderboard( + cf.getAutoPlayCtx().getEvent(), cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName()); + for (RaceColumnDTO race : selectedLeaderboard.getRaceList()) { + for (FleetDTO fleet : race.getFleets()) { + RegattaAndRaceIdentifier raceIdentifier = race.getRaceIdentifier(fleet); + if (raceIdentifier != null && !raceTimesInfoProvider.containsRaceIdentifier(raceIdentifier)) { + raceTimesInfoProvider.addRaceIdentifier(raceIdentifier, false); + } + } + } + raceTimesInfoProvider.forceTimesInfosUpdate(); + raceTimesInfoProvider.addRaceTimesInfoProviderListener(new RaceTimesInfoProviderListener() { + + @Override + public void raceTimesInfosReceived(Map raceTimesInfo, + long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest, + long clientTimeWhenResponseWasReceived) { + ArrayList> raceToStartOfRace = new ArrayList>(); + checkForRaceStarts(selectedLeaderboard, serverTimeDuringRequest, raceTimesInfoProvider, + raceToStartOfRace); + + Collections.sort(raceToStartOfRace, new Comparator>() { + + @Override + public int compare(Pair o1, + Pair o2) { + return Long.compare(o1.getB().getTime(), o2.getB().getTime()); + } + }); + place.setUpData(raceToStartOfRace); + + } + }); }; /** @@ -107,6 +111,7 @@ public class IdleUpNextNode extends FiresPlaceNode { for (RaceColumnDTO race : currentLeaderboard.getRaceList()) { for (FleetDTO fleet : race.getFleets()) { RegattaAndRaceIdentifier raceIdentifier = race.getRaceIdentifier(fleet); + GWT.log("Checking starts " + raceIdentifier); if (raceIdentifier != null) { RaceTimesInfoDTO raceTimes = raceTimesInfos.get(raceIdentifier); if (raceTimes != null && raceTimes.startOfTracking != null && raceTimes.getStartOfRace() != null diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceWithRacemapNode.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceWithRacemapNode.java index 789f2d6faea..87eae3df9f6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceWithRacemapNode.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceWithRacemapNode.java @@ -1,5 +1,7 @@ package com.sap.sailing.gwt.autoplay.client.nodes; +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent; @@ -7,17 +9,31 @@ import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode; import com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard.LiveRaceWithRacemapAndLeaderBoardPlace; import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper; import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper.RVWrapper; +import com.sap.sailing.gwt.home.communication.event.sixtyinch.GetSixtyInchStatisticAction; +import com.sap.sailing.gwt.home.communication.event.sixtyinch.GetSixtyInchStatisticDTO; +import com.sap.sailing.gwt.ui.client.StringMessages; public class LiveRaceWithRacemapNode extends FiresPlaceNode { private final AutoPlayClientFactory cf; + protected LiveRaceWithRacemapAndLeaderBoardPlace place; + private Timer updateTimer; public LiveRaceWithRacemapNode(AutoPlayClientFactory cf) { super(LiveRaceWithRacemapNode.class.getName()); this.cf = cf; } + + @Override + public void onStop() { + super.onStop(); + if(updateTimer != null){ + updateTimer.cancel(); + } + } public void onStart() { + place = new LiveRaceWithRacemapAndLeaderBoardPlace(); AutoplayHelper.create(cf.getSailingService(), cf.getErrorReporter(), cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName(), cf.getAutoPlayCtx().getContextDefinition().getEventId(), cf.getAutoPlayCtx().getEvent(), cf.getEventBus(), cf.getDispatch(), cf.getAutoPlayCtx().getLiveRace(), @@ -34,7 +50,6 @@ public class LiveRaceWithRacemapNode extends FiresPlaceNode { @Override public void onSuccess(RVWrapper result) { - LiveRaceWithRacemapAndLeaderBoardPlace place = new LiveRaceWithRacemapAndLeaderBoardPlace(); place.setRaceMap(result.raceboardPerspective, result.csel); setPlaceToGo(place); firePlaceChangeAndStartTimer(); @@ -42,5 +57,30 @@ public class LiveRaceWithRacemapNode extends FiresPlaceNode { cf.getAutoPlayCtx().getLiveRace().getRaceName())); } }); + + + + updateTimer = new Timer(){ + + @Override + public void run() { + cf.getDispatch().execute(new GetSixtyInchStatisticAction(cf.getAutoPlayCtx().getLiveRace().getRaceName(), cf.getAutoPlayCtx().getLiveRace().getRegattaName()), + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + GWT.log("error getting data! " + caught.getMessage()); + caught.printStackTrace(); + } + + @Override + public void onSuccess(GetSixtyInchStatisticDTO result) { + place.setStatistic(result); + } + }); + } + + }; + updateTimer.scheduleRepeating(2000); }; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardPlace.java index 88a119e19cc..7b843596eb6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardPlace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardPlace.java @@ -2,6 +2,7 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapw import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.PlaceTokenizer; +import com.sap.sailing.gwt.home.communication.event.sixtyinch.GetSixtyInchStatisticDTO; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap; @@ -21,11 +22,16 @@ public class LiveRaceWithRacemapAndLeaderBoardPlace extends Place { private RaceMap raceMap; private Throwable error; private CompetitorSelectionModel raceMapSelectionProvider; + private GetSixtyInchStatisticDTO statistic; public void setRaceMap(RaceMap result, CompetitorSelectionModel csel) { this.raceMap = result; this.raceMapSelectionProvider = csel; } + + public GetSixtyInchStatisticDTO getStatistic() { + return statistic; + } public RaceMap getRaceMap() { return raceMap; @@ -43,4 +49,8 @@ public class LiveRaceWithRacemapAndLeaderBoardPlace extends Place { return raceMapSelectionProvider; } + public void setStatistic(GetSixtyInchStatisticDTO result) { + statistic = result; + } + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardPresenterImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardPresenterImpl.java index 88f513f3283..9f05bb59c30 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardPresenterImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardPresenterImpl.java @@ -1,22 +1,28 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard; import java.util.ArrayList; +import java.util.List; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; +import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured; import com.sap.sailing.gwt.autoplay.client.shared.SixtyInchLeaderBoard; +import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint; +import com.sap.sailing.gwt.ui.shared.WindDTO; +import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO; import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.player.Timer.PlayModes; @@ -32,10 +38,12 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl private int selected = -1; ArrayList compList = new ArrayList<>(); private com.sap.sse.gwt.client.player.Timer timer; + private AutoPlayClientFactory cf; public LiveRaceWithRacemapAndLeaderBoardPresenterImpl(LiveRaceWithRacemapAndLeaderBoardPlace place, AutoPlayClientFactory clientFactory, LiveRaceWithRacemapAndLeaderBoardView LifeRaceWithRacemapViewImpl) { super(place, clientFactory); + this.cf = clientFactory; this.view = LifeRaceWithRacemapViewImpl; selectionTimer = new Timer() { @Override @@ -82,6 +90,37 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl selected = 0; } selectionTimer.schedule(SWITCH_COMPETITOR_DELAY); + + updateStatistics(); + } + + private void updateStatistics() { + String windSpeed = null; + if (getPlace().getRaceMap().getLastCombinedWindTrackInfoDTO() != null) { + for (WindSource windSource : getPlace().getRaceMap() + .getLastCombinedWindTrackInfoDTO().windTrackInfoByWindSource.keySet()) { + WindTrackInfoDTO windTrackInfoDTO = getPlace().getRaceMap() + .getLastCombinedWindTrackInfoDTO().windTrackInfoByWindSource.get(windSource); + switch (windSource.getType()) { + case COMBINED: + if (!windTrackInfoDTO.windFixes.isEmpty()) { + WindDTO windDTO = windTrackInfoDTO.windFixes.get(0); + double speedInKnots = windDTO.dampenedTrueWindSpeedInKnots; + NumberFormat numberFormat = NumberFormat.getFormat("0.0"); + windSpeed = numberFormat.format(speedInKnots) + " " + StringMessages.INSTANCE.knotsUnit(); + } + break; + default: + } + } + } + + + + List sortedCompetitors = leaderboardPanel.getLeaderboardTable().getVisibleItems(); + if (sortedCompetitors.size() > 0) { + view.setStatistic(windSpeed,getPlace().getStatistic().getDistance(), AutoplayHelper.durationOfCurrentLiveRaceRunning()); + } } private void onSelect(CompetitorDTO marked) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardView.java index 053efb4a39f..616c35652bd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardView.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard; import com.google.gwt.user.client.ui.AcceptsOneWidget; +import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.gwt.autoplay.client.shared.SixtyInchLeaderBoard; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap; @@ -19,4 +20,6 @@ public interface LiveRaceWithRacemapAndLeaderBoardView { void scrollLeaderBoardToTop(); void onStop(); + + void setStatistic(String windSpeed, Distance distance, long timeSinceStart); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardViewImpl.java index 8ebe326cbfa..641cd3b11f6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardViewImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardViewImpl.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard; import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Timer; @@ -8,8 +9,10 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ResizeComposite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.gwt.autoplay.client.shared.SixtyInchLeaderBoard; +import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap; import com.sap.sse.gwt.client.panels.ResizableFlowPanel; @@ -21,6 +24,21 @@ public class LiveRaceWithRacemapAndLeaderBoardViewImpl extends ResizeComposite i @UiField ResizableFlowPanel leaderBoardHolder; + + @UiField + Label statisticValue1; + @UiField + Label statisticProperty1; + @UiField + Label statisticValue2; + @UiField + Label statisticProperty2; + @UiField + Label statisticValue3; + @UiField + Label statisticProperty3; + + private NumberFormat compactFormat = NumberFormat.getFormat("#.0"); private RaceMap rawRaceMap; @@ -75,5 +93,28 @@ public class LiveRaceWithRacemapAndLeaderBoardViewImpl extends ResizeComposite i } }.schedule(50); } + + @Override + public void setStatistic(String windinfo, Distance distance, long duration) { + statisticProperty1.setText(StringMessages.INSTANCE.windSpeed()); + if(windinfo == null || windinfo.isEmpty()){ + statisticValue1.setText(StringMessages.INSTANCE.noDataFound()); + }else{ + statisticValue1.setText(windinfo); + } + + statisticProperty2.setText(StringMessages.INSTANCE.distance()); + if(distance == null){ + statisticValue2 + .setText(StringMessages.INSTANCE.noDataFound()); + }else{ + statisticValue2 + .setText(compactFormat.format(distance.getSeaMiles()) + " " + StringMessages.INSTANCE.seaMiles()); + } + + statisticProperty3.setText(StringMessages.INSTANCE.durationPlain()); + statisticValue3.setText(compactFormat.format(duration/1000f/60f) + " " + StringMessages.INSTANCE.minutes()); + } } + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardViewImpl.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardViewImpl.ui.xml index a888ecfeba7..4ccfdbf56a7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardViewImpl.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/liveraceloop/racemapwithleaderboard/LiveRaceWithRacemapAndLeaderBoardViewImpl.ui.xml @@ -17,7 +17,8 @@ position: absolute; display: inline-block; right: 0px; - height: 100%; + top: 0px; + bottom: 80px; width: 65%; } @@ -45,6 +46,48 @@ font-size: 20px; text-align: center; } + + .statistics { + position: absolute; + background-color: black; + width: 65%; + right: 0px; + bottom: 0px; + height: 80px; + font-size: 1rem; + display: flex; + -webkit-align-items: center; + -moz-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; + background: #333; + border-top: .3125em solid #f0ab00; + padding: .9375em 0; + } + + .info-overlay__item { + text-align: center; + color: #fff; + -webkit-box-flex: 1; + -webkit-flex: 1 0 auto; + -moz-box-flex: 1; + -ms-flex: 1 0 auto; + flex: 1 0 auto; + border-right: 1px solid #999; + } + + .info-overlay__item__value { + font-size: 1.5em; + } + + .info-overlay__item__property { + font-size: 1em; + font-weight: 700; + text-transform: uppercase; + } + + + 10.3 kts + Wind + + + 10.3 kts + Wind + + + 10.3 kts + Wind + + \ No newline at end of file