mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 11:23:50 +00:00
Merge remote-tracking branch 'server/gwt' into gwt
This commit is contained in:
commit
4847513f33
11 files changed
+402
-26
No files matched your search
@@ -0,0 +1,99 @@
|
||||
/** Add css rules here for your application. */
|
||||
/*
|
||||
body #calendar:after
|
||||
content: " ";
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
*/
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
font-size: 1px;
|
||||
height: 0px;
|
||||
line-height: 0px;
|
||||
margin: -1px 0 0;
|
||||
width: 100%; }
|
||||
|
||||
.cover {
|
||||
left: -1000px;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: -1000px; }
|
||||
|
||||
body {
|
||||
background: url(images/header_bg.png) 0 0 repeat-x;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
line-height: 1;
|
||||
font-size: 62.5%;
|
||||
margin-top: 0; }
|
||||
|
||||
/** Example rules used by the template application (remove for your app) */
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
font-weight: bold;
|
||||
color: #777777;
|
||||
margin: 40px 0px 70px;
|
||||
text-align: center;}
|
||||
|
||||
table {
|
||||
border-collapse: separate; }
|
||||
|
||||
table td, table th {
|
||||
vertical-align: bottom;
|
||||
line-height: 1.3;
|
||||
padding-top: 2px;}
|
||||
|
||||
|
||||
.LogoAndTitlePanel {
|
||||
margin: 0 0 24px 0;
|
||||
height: 58px; }
|
||||
|
||||
.LogoAndTitlePanel:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden; }
|
||||
|
||||
.sapLogo {
|
||||
float: left;
|
||||
margin: 8px 0 0 0; }
|
||||
|
||||
.sailingAnalyticsLabelPanel {
|
||||
margin: 10px 0 0 0;
|
||||
border: 1px solid red;}
|
||||
|
||||
.sailingAnalyticsLabel {
|
||||
float: left;
|
||||
color: #fff;
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
margin: 20px 0 0 0; }
|
||||
|
||||
.leaderboardLabel {
|
||||
border-bottom: 2px solid #007dc0;
|
||||
font-weight: bold;
|
||||
padding: 0 0 6px 0; }
|
||||
|
||||
.refreshAndSettings {
|
||||
background: #f2f2f2;
|
||||
border-bottom: 2px solid #fff;
|
||||
border-top: 2px solid #fff;
|
||||
height: 30px; }
|
||||
|
||||
.refreshAndSettings table td {
|
||||
padding: 0 10px 0 0;}
|
||||
.refreshAndSettings table table td{
|
||||
padding: 0 0 0 0;}
|
||||
|
||||
.race-name {
|
||||
margin: 2px 10px 0 0;
|
||||
line-height: 1.0;
|
||||
float: left;}
|
||||
|
||||
input.magnifier{
|
||||
display: block;
|
||||
margin: 3px auto 0 auto !important;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<!doctype html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<title>SAP Sailing Analytics Race Board</title>
|
||||
|
||||
<script type="text/javascript" language="javascript" src="com.sap.sailing.gwt.ui.RaceBoard/com.sap.sailing.gwt.ui.RaceBoard.nocache.js"></script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
|
||||
<!-- RECOMMENDED if your web app will not function without JavaScript enabled -->
|
||||
<noscript>
|
||||
<div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
|
||||
Your web browser must have JavaScript enabled
|
||||
in order for this application to display correctly.
|
||||
</div>
|
||||
</noscript>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
+23
-8
@@ -24,27 +24,26 @@ public class QuickRanksListBoxComposite extends Composite implements CompetitorS
|
||||
private final List<QuickRankDAO> quickRankList;
|
||||
private final List<CompetitorDAO> competitorList;
|
||||
private final ListBox quickRankListBox;
|
||||
private final boolean hasMultiSelection;
|
||||
|
||||
public QuickRanksListBoxComposite(boolean hasMultiSelection) {
|
||||
public QuickRanksListBoxComposite(final boolean hasMultiSelection) {
|
||||
this.competitorSelectionChangeListeners = new HashSet<CompetitorSelectionChangeListener>();
|
||||
this.hasMultiSelection = hasMultiSelection;
|
||||
quickRankListBox = new ListBox(hasMultiSelection);
|
||||
|
||||
quickRankListBox.addChangeHandler(new ChangeHandler() {
|
||||
@Override
|
||||
public void onChange(ChangeEvent event) {
|
||||
fireCompetitorSelectionChanged(Collections.singletonList(getSelectedCompetitor()));
|
||||
onSelectionChanged();
|
||||
}
|
||||
});
|
||||
quickRankListBox.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
CompetitorDAO selectedCompetitor = getSelectedCompetitor();
|
||||
List<CompetitorDAO> selectedCompetitorsCollection = Collections.emptyList();
|
||||
if (selectedCompetitor != null) {
|
||||
Collections.singletonList(selectedCompetitor);
|
||||
}
|
||||
fireCompetitorSelectionChanged(selectedCompetitorsCollection);
|
||||
onSelectionChanged();
|
||||
}
|
||||
});
|
||||
|
||||
quickRankList = new ArrayList<QuickRankDAO>();
|
||||
competitorList = new ArrayList<CompetitorDAO>();
|
||||
VerticalPanel vp = new VerticalPanel();
|
||||
@@ -54,6 +53,21 @@ public class QuickRanksListBoxComposite extends Composite implements CompetitorS
|
||||
initWidget(vp);
|
||||
}
|
||||
|
||||
private void onSelectionChanged()
|
||||
{
|
||||
List<CompetitorDAO> selectedCompetitors = null;
|
||||
if(hasMultiSelection) {
|
||||
selectedCompetitors = getSelectedCompetitors();
|
||||
} else {
|
||||
CompetitorDAO selectedCompetitor = getSelectedCompetitor();
|
||||
if (selectedCompetitor != null) {
|
||||
selectedCompetitors = new ArrayList<CompetitorDAO>();
|
||||
selectedCompetitors.add(selectedCompetitor);
|
||||
}
|
||||
}
|
||||
fireCompetitorSelectionChanged(selectedCompetitors);
|
||||
}
|
||||
|
||||
public void fillQuickRanks(List<QuickRankDAO> quickRanks, boolean isSorted) {
|
||||
List<CompetitorDAO> oldSelection = getSelectedCompetitors();
|
||||
|
||||
@@ -109,6 +123,7 @@ public class QuickRanksListBoxComposite extends Composite implements CompetitorS
|
||||
}
|
||||
i++;
|
||||
}
|
||||
System.out.println("Anzahl Selected competitors: " + result.size());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+9
-16
@@ -35,8 +35,8 @@ import com.google.gwt.maps.client.overlay.MarkerOptions;
|
||||
import com.google.gwt.maps.client.overlay.Polyline;
|
||||
import com.google.gwt.maps.client.overlay.PolylineOptions;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Panel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
@@ -183,7 +183,7 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
||||
return dist;
|
||||
}
|
||||
|
||||
public void loadMapsAPI(final Grid grid, final int gridRow, final int gridColumn) {
|
||||
public void loadMapsAPI(final Panel parentPanel) {
|
||||
Maps.loadMapsApi(mapsAPIKey, "2", false, new Runnable() {
|
||||
public void run() {
|
||||
map = new MapWidget();
|
||||
@@ -191,11 +191,10 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
||||
map.addControl(new MenuMapTypeControl());
|
||||
map.addControl(new ScaleControl());
|
||||
// Add the map to the HTML host page
|
||||
map.setSize("100%", "100%");
|
||||
map.setScrollWheelZoomEnabled(true);
|
||||
map.setContinuousZoom(true);
|
||||
|
||||
grid.setWidget(gridRow, gridColumn, map);
|
||||
parentPanel.add(map);
|
||||
map.setSize("100%", "100%");
|
||||
|
||||
imageResources = new RaceMapResources(map);
|
||||
|
||||
@@ -245,9 +244,9 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
||||
|
||||
@Override
|
||||
public void onCompetitorSelectionChange(List<CompetitorDAO> newSelectedCompetitors) {
|
||||
for (CompetitorDAO competitorDAO : newSelectedCompetitors) {
|
||||
for (CompetitorDAO competitorDAO : selectedMapCompetitors) {
|
||||
|
||||
if (!selectedMapCompetitors.contains(competitorDAO)) {
|
||||
if (!newSelectedCompetitors.contains(competitorDAO)) {
|
||||
// "lowlight" currently selected competitor
|
||||
Marker highlightedMarker = boatMarkers.get(competitorDAO);
|
||||
if (highlightedMarker != null) {
|
||||
@@ -255,20 +254,18 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
||||
map.removeOverlay(highlightedMarker);
|
||||
map.addOverlay(lowlightedMarker);
|
||||
boatMarkers.put(competitorDAO, lowlightedMarker);
|
||||
selectedMapCompetitors.remove(competitorDAO);
|
||||
}
|
||||
} else {
|
||||
Marker lowlightedMarker = boatMarkers.get(competitorDAO);
|
||||
if (lowlightedMarker != null) {
|
||||
if (lowlightedMarker == null) {
|
||||
Marker highlightedMarker = createBoatMarker(competitorDAO, true);
|
||||
map.removeOverlay(lowlightedMarker);
|
||||
map.addOverlay(highlightedMarker);
|
||||
boatMarkers.put(competitorDAO, highlightedMarker);
|
||||
}
|
||||
// add the competitor even if not currently contained in map
|
||||
selectedMapCompetitors.add(competitorDAO);
|
||||
}
|
||||
}
|
||||
selectedMapCompetitors.clear();
|
||||
selectedMapCompetitors.addAll(newSelectedCompetitors);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -993,10 +990,6 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
||||
lastShownFix.put(competitorDAO, indexOfLastShownFix);
|
||||
}
|
||||
|
||||
public Set<CompetitorDAO> getSelectedMapCompetitors() {
|
||||
return selectedMapCompetitors;
|
||||
}
|
||||
|
||||
public RaceMapSettings getSettings() {
|
||||
return settings;
|
||||
}
|
||||
|
||||
+5
-2
@@ -9,6 +9,7 @@ import com.google.gwt.event.logical.shared.ValueChangeEvent;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeHandler;
|
||||
import com.google.gwt.maps.client.geom.LatLng;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.AbsolutePanel;
|
||||
import com.google.gwt.user.client.ui.CheckBox;
|
||||
import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
@@ -115,9 +116,11 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe
|
||||
grid.getColumnFormatter().setWidth(0, "20%");
|
||||
grid.getColumnFormatter().setWidth(1, "80%");
|
||||
grid.getCellFormatter().setHeight(2, 1, "100%");
|
||||
|
||||
AbsolutePanel mapPanel = new AbsolutePanel();
|
||||
mapPanel.setSize("100%", "100%");
|
||||
grid.setWidget(2, 1, mapPanel);
|
||||
raceMap = new RaceMap(sailingService, errorReporter, timer);
|
||||
raceMap.loadMapsAPI(grid, 2, 1);
|
||||
raceMap.loadMapsAPI(mapPanel);
|
||||
|
||||
setMapDisplayOptions();
|
||||
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.RootPanel;
|
||||
import com.sap.sailing.gwt.ui.client.AbstractEntryPoint;
|
||||
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
|
||||
|
||||
public class RaceBoardEntryPoint extends AbstractEntryPoint {
|
||||
@Override
|
||||
public void onModuleLoad() {
|
||||
|
||||
super.onModuleLoad();
|
||||
sailingService.getLeaderboardNames(new AsyncCallback<List<String>>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<String> leaderboardNames) {
|
||||
|
||||
String leaderboardName = Window.Location.getParameter("name");
|
||||
|
||||
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringConstants);
|
||||
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
|
||||
|
||||
RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, leaderboardName,
|
||||
RaceBoardEntryPoint.this, stringConstants);
|
||||
|
||||
String padding = Window.Location.getParameter("padding");
|
||||
|
||||
if (padding != null && Boolean.valueOf(padding)) {
|
||||
raceBoardPanel.addStyleName("leftPaddedPanel");
|
||||
}
|
||||
|
||||
RootPanel.get().add(logoAndTitlePanel);
|
||||
RootPanel.get().add(raceBoardPanel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable t) {
|
||||
reportError("Error trying to obtain list of leaderboard names: " + t.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.logical.shared.CloseEvent;
|
||||
import com.google.gwt.event.logical.shared.CloseHandler;
|
||||
import com.google.gwt.event.logical.shared.OpenEvent;
|
||||
import com.google.gwt.event.logical.shared.OpenHandler;
|
||||
import com.google.gwt.user.client.ui.AbsolutePanel;
|
||||
import com.google.gwt.user.client.ui.DisclosurePanel;
|
||||
import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Panel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.RaceMap;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
|
||||
|
||||
public class RaceBoardPanel extends FormPanel implements Component<RaceBoardSettings> {
|
||||
|
||||
private final SailingServiceAsync sailingService;
|
||||
|
||||
private final ErrorReporter errorReporter;
|
||||
|
||||
private final StringMessages stringConstants;
|
||||
|
||||
private String raceBoardName;
|
||||
|
||||
private static RaceBoardResources resources = GWT.create(RaceBoardResources.class);
|
||||
|
||||
private List<DisclosurePanel> collapsablePanels;
|
||||
|
||||
public RaceBoardPanel(SailingServiceAsync sailingService, String raceBoardName, ErrorReporter errorReporter,
|
||||
final StringMessages stringConstants) {
|
||||
this.sailingService = sailingService;
|
||||
this.setRaceBoardName(raceBoardName);
|
||||
this.errorReporter = errorReporter;
|
||||
this.stringConstants = stringConstants;
|
||||
|
||||
VerticalPanel mainPanel = new VerticalPanel();
|
||||
mainPanel.setSize("100%", "100%");
|
||||
setWidget(mainPanel);
|
||||
|
||||
RaceMap raceMap = new RaceMap(sailingService, errorReporter, new Timer(/* delayBetweenAutoAdvancesInMilliseconds */500));
|
||||
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
|
||||
if(i == 0)
|
||||
{
|
||||
AbsolutePanel contentPanel = new AbsolutePanel();
|
||||
DisclosurePanel panel = createDisclosePanel(contentPanel, "Panel " + i, 300);
|
||||
|
||||
raceMap.loadMapsAPI(contentPanel);
|
||||
mainPanel.add(panel);
|
||||
}
|
||||
else
|
||||
{
|
||||
VerticalPanel contentPanel = new VerticalPanel();
|
||||
DisclosurePanel panel = createDisclosePanel(contentPanel, "Panel " + i, 100);
|
||||
|
||||
contentPanel.add(new Label("Content of panel " + i));
|
||||
mainPanel.add(panel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private DisclosurePanel createDisclosePanel(Panel contentPanel, String panelTitle, int heightInPx)
|
||||
{
|
||||
DisclosurePanel disclosurePanel = new DisclosurePanel (resources.openIcon(), resources.closeIcon(), panelTitle);
|
||||
disclosurePanel.setSize("100%", "100%");
|
||||
disclosurePanel.setOpen(true);
|
||||
|
||||
contentPanel.setSize("100%", heightInPx + "px");
|
||||
disclosurePanel.setContent(contentPanel);
|
||||
|
||||
disclosurePanel.addOpenHandler(new OpenHandler<DisclosurePanel>() {
|
||||
@Override
|
||||
public void onOpen(OpenEvent<DisclosurePanel> event) {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
disclosurePanel.addCloseHandler(new CloseHandler<DisclosurePanel>() {
|
||||
@Override
|
||||
public void onClose(CloseEvent<DisclosurePanel> event) {
|
||||
}
|
||||
});
|
||||
|
||||
return disclosurePanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Widget getEntryWidget() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public void updateSettings(RaceBoardSettings result) {
|
||||
|
||||
}
|
||||
|
||||
protected SailingServiceAsync getSailingService() {
|
||||
return sailingService;
|
||||
}
|
||||
|
||||
protected String getRaceBoardName() {
|
||||
return raceBoardName;
|
||||
}
|
||||
|
||||
protected void setRaceBoardName(String raceBoardName) {
|
||||
this.raceBoardName = raceBoardName;
|
||||
}
|
||||
|
||||
protected ErrorReporter getErrorReporter() {
|
||||
return errorReporter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocalizedShortName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SettingsDialogComponent<RaceBoardSettings> getSettingsDialogComponent() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
import com.google.gwt.resources.client.ClientBundle;
|
||||
import com.google.gwt.resources.client.ImageResource;
|
||||
|
||||
interface RaceBoardResources extends ClientBundle {
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/open.png")
|
||||
ImageResource openIcon();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/close.png")
|
||||
ImageResource closeIcon();
|
||||
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
public class RaceBoardSettings {
|
||||
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Could not determine the version of your GWT SDK; using the module DTD from GWT 1.6.4. You may want to change this. -->
|
||||
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6.4//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.6.4/distro-source/core/src/gwt-module.dtd">
|
||||
<module>
|
||||
|
||||
<stylesheet src="../reset.css" />
|
||||
<!-- Inherit the core Web Toolkit stuff. -->
|
||||
<inherits name='com.google.gwt.user.User'/>
|
||||
|
||||
<!-- Inherit the default GWT style sheet. You can change -->
|
||||
<!-- the theme of your GWT application by uncommenting -->
|
||||
<!-- any one of the following lines. -->
|
||||
<inherits name='com.google.gwt.user.theme.clean.Clean'/>
|
||||
<!-- <inherits name='com.google.gwt.user.theme.standard.Standard'/> -->
|
||||
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
|
||||
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
|
||||
<stylesheet src="../RaceBoard.css" />
|
||||
<!-- Google Maps API -->
|
||||
<inherits name='com.google.gwt.maps.GoogleMaps' />
|
||||
|
||||
<!-- Flot-Gwt API -->
|
||||
<inherits name='ca.nanometrics.gflot.GFlot'/>
|
||||
|
||||
<!-- Phoenix Stuff -->
|
||||
<inherits name='com.sap.ui.commons.Module' />
|
||||
|
||||
<!-- Other module inherits -->
|
||||
<inherits name="com.sap.sailing.server.SailingServer" />
|
||||
<inherits name="com.sap.sailing.domain.SailingDomain" />
|
||||
|
||||
<!-- Specify the app entry point class. -->
|
||||
<entry-point class='com.sap.sailing.gwt.ui.raceboard.RaceBoardEntryPoint'/>
|
||||
<!-- Specify the paths for translatable code -->
|
||||
<extend-property name="locale" values="de"/>
|
||||
<source path='client'/>
|
||||
<source path='raceboard'/>
|
||||
<source path='adminconsole'/>
|
||||
<source path='shared'/>
|
||||
</module>
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
Reference in new issue
Block a user