mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-07 19:42:17 +00:00
Merge branch 'master' into bug3529
This commit is contained in:
commit
d4a936f39c
163 files changed
+5523
-1627
No files matched your search
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file datatype="javapropertyresourcebundle" date="2016-08-12T10:46:17Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ja">
|
||||
<file datatype="javapropertyresourcebundle" date="2016-09-29T12:18:20Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ja">
|
||||
<header>
|
||||
<skl>
|
||||
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file datatype="javapropertyresourcebundle" date="2016-08-12T11:08:06Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ru">
|
||||
<file datatype="javapropertyresourcebundle" date="2016-09-29T12:18:20Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ru">
|
||||
<header>
|
||||
<skl>
|
||||
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file datatype="javapropertyresourcebundle" date="2016-08-12T11:08:06Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="zh-CN">
|
||||
<file datatype="javapropertyresourcebundle" date="2016-09-29T12:18:20Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="zh-CN">
|
||||
<header>
|
||||
<skl>
|
||||
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
|
||||
|
||||
+14
@@ -158,10 +158,24 @@ public class TimeTicksCalculator {
|
||||
|
||||
// get tick positions
|
||||
i = 1;
|
||||
/*
|
||||
* There are the Competitor and the Wind highcharts which
|
||||
* set time ticks depending on a locale. So we have to
|
||||
* move the ticks in this time slider on the time zone offset
|
||||
* to match the time ticks in time slider with ticks in highcharts
|
||||
*/
|
||||
minDate = new Date(minDate.getTime() - minDate.getTimezoneOffset() * TimeUnits.MINUTE.unitInMs);
|
||||
minYear = minDate.getYear() + 1900;
|
||||
int minMonth = minDate.getMonth() + 1;
|
||||
int minDateDate = minDate.getDate();
|
||||
long time = minDate.getTime();
|
||||
/*
|
||||
* After the moving time on time zone offset,
|
||||
* we should make some steps back to find the race start time
|
||||
*/
|
||||
while (time > min) {
|
||||
time -= interval * count;
|
||||
}
|
||||
|
||||
// iterate and add tick positions at appropriate values
|
||||
while (time < max) {
|
||||
|
||||
@@ -1,73 +1,81 @@
|
||||
.siteheader {
|
||||
font-size: 1rem;
|
||||
line-height: 1.333;
|
||||
background: #333;
|
||||
border-bottom: 4px solid #f0ab00;
|
||||
height: 75px;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
vertical-align: top;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.siteHeaderTitle {
|
||||
color: #fff;
|
||||
vertical-align: top;
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.siteHeaderSubTitle {
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.siteheaderLeft {
|
||||
position: relative; top:10px;left:10px;
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
height: 50px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.siteheader2ndCol {
|
||||
position: absolute; top:10px;left:235px;
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
height:50px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.siteheaderRight {
|
||||
position: absolute; top:10px;right:10px;
|
||||
text-align: right;
|
||||
display: inline-block;
|
||||
height:50px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.logo {
|
||||
margin: 0px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.logotitle {
|
||||
font-size: 1rem;
|
||||
display: inline-block;
|
||||
color: #f6f9fc;
|
||||
width: 150px;
|
||||
height: 100%;
|
||||
padding: 17px 15px 0 0;
|
||||
vertical-align: top;
|
||||
text-align: right;
|
||||
border-right: 1px solid rgb(180,180,180);
|
||||
margin: 0px;
|
||||
margin-left: -25px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.pagetitle {
|
||||
color: #ffffff;
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
.siteheader {
|
||||
font-size: 1rem;
|
||||
line-height: 1.333;
|
||||
background: #333;
|
||||
border-bottom: 4px solid #f0ab00;
|
||||
height: 75px;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
vertical-align: top;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.siteHeaderTitle {
|
||||
color: #fff;
|
||||
vertical-align: top;
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.siteHeaderSubTitle {
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.siteheaderLeft {
|
||||
position: relative; top:10px;left:10px;
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
height: 50px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.siteheader2ndCol {
|
||||
position: absolute; top:10px;left:235px;
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
height:50px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.siteheaderRight {
|
||||
position: absolute; top:10px;right:10px;
|
||||
text-align: right;
|
||||
display: inline-block;
|
||||
height:50px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.logo, .logo:hover, .logo:visited {
|
||||
margin: 0px;
|
||||
display: inline-block;
|
||||
gwt-sprite: "logo";
|
||||
background-size: cover;
|
||||
width: 80px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.logotitle, .logotitle:hover, .logotitle:visited {
|
||||
font-size: 1rem;
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
width: 150px;
|
||||
height: 100%;
|
||||
padding: 17px 15px 0 0;
|
||||
vertical-align: top;
|
||||
text-align: right;
|
||||
border: none;
|
||||
border-right: 1px solid rgb(180,180,180);
|
||||
margin: 0px;
|
||||
margin-left: -25px;
|
||||
box-sizing: border-box;
|
||||
text-decoration: none;
|
||||
}
|
||||
.pagetitle {
|
||||
color: #ffffff;
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
@@ -1,65 +1,75 @@
|
||||
package com.sap.sse.gwt.client.sapheader;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.DivElement;
|
||||
import com.google.gwt.dom.client.Style.Display;
|
||||
import com.google.gwt.dom.client.Style.Unit;
|
||||
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.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
|
||||
/**
|
||||
* Generic header widget that is designed with a SAP logo and SAP color scheme.
|
||||
*
|
||||
* The header has the following elements:
|
||||
* <ul>
|
||||
* <li>SAP Logo with an application title (like "Sailing Analytics")</li>
|
||||
* <li>Page title</li>
|
||||
* <li>Optional Subtitle</li>
|
||||
* <li>Optional widget to show on the right side of the header</li>
|
||||
* </ul>
|
||||
*/
|
||||
public class SAPHeader extends Composite {
|
||||
private static SAPHeaderUiBinder uiBinder = GWT.create(SAPHeaderUiBinder.class);
|
||||
|
||||
interface SAPHeaderUiBinder extends UiBinder<Widget, SAPHeader> {
|
||||
}
|
||||
|
||||
@UiField
|
||||
DivElement applicationNameUi;
|
||||
@UiField
|
||||
DivElement pageTitleUi;
|
||||
@UiField
|
||||
DivElement titleUi;
|
||||
@UiField
|
||||
DivElement subTitleUi;
|
||||
@UiField
|
||||
SimplePanel rightSideUi;
|
||||
|
||||
public SAPHeader(String applicationName) {
|
||||
SAPHeaderResources.INSTANCE.css().ensureInjected();
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
applicationNameUi.setInnerText(applicationName != null ? applicationName : " ");
|
||||
}
|
||||
|
||||
public void setHeaderTitle(String title) {
|
||||
titleUi.setInnerText(title);
|
||||
}
|
||||
|
||||
public void setHeaderSubTitle(String subtitle) {
|
||||
if (subtitle == null || subtitle.isEmpty()) {
|
||||
subTitleUi.getStyle().setDisplay(Display.NONE);
|
||||
titleUi.getStyle().setMarginTop(14, Unit.PX);
|
||||
} else {
|
||||
subTitleUi.setInnerText(subtitle);
|
||||
subTitleUi.getStyle().clearDisplay();
|
||||
titleUi.getStyle().clearMarginTop();
|
||||
}
|
||||
}
|
||||
|
||||
public void addWidgetToRightSide(Widget widget) {
|
||||
rightSideUi.add(widget);
|
||||
}
|
||||
}
|
||||
package com.sap.sse.gwt.client.sapheader;
|
||||
|
||||
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.Style.Display;
|
||||
import com.google.gwt.dom.client.Style.Unit;
|
||||
import com.google.gwt.i18n.client.LocaleInfo;
|
||||
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.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
|
||||
/**
|
||||
* Generic header widget that is designed with a SAP logo and SAP color scheme.
|
||||
*
|
||||
* The header has the following elements:
|
||||
* <ul>
|
||||
* <li>SAP Logo with an application title (like "Sailing Analytics")</li>
|
||||
* <li>Page title</li>
|
||||
* <li>Optional Subtitle</li>
|
||||
* <li>Optional widget to show on the right side of the header</li>
|
||||
* </ul>
|
||||
*/
|
||||
public class SAPHeader extends Composite {
|
||||
|
||||
private static final String LOGO_URL = "https://sapsponsorships.com/";
|
||||
|
||||
private static SAPHeaderUiBinder uiBinder = GWT.create(SAPHeaderUiBinder.class);
|
||||
|
||||
interface SAPHeaderUiBinder extends UiBinder<Widget, SAPHeader> {
|
||||
}
|
||||
|
||||
@UiField
|
||||
AnchorElement applicationNameAnchor;
|
||||
@UiField
|
||||
DivElement pageTitleUi;
|
||||
@UiField
|
||||
DivElement titleUi;
|
||||
@UiField
|
||||
DivElement subTitleUi;
|
||||
@UiField
|
||||
SimplePanel rightSideUi;
|
||||
@UiField
|
||||
AnchorElement logoAnchor;
|
||||
|
||||
public SAPHeader(String applicationName, String applicationBaseUrl) {
|
||||
SAPHeaderResources.INSTANCE.css().ensureInjected();
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
applicationNameAnchor.setInnerText(applicationName != null ? applicationName : " ");
|
||||
logoAnchor.setHref(LOGO_URL);
|
||||
String sapSailingUrl = applicationBaseUrl + "?locale=" + LocaleInfo.getCurrentLocale().getLocaleName();
|
||||
applicationNameAnchor.setHref(sapSailingUrl);
|
||||
}
|
||||
|
||||
public void setHeaderTitle(String title) {
|
||||
titleUi.setInnerText(title);
|
||||
}
|
||||
|
||||
public void setHeaderSubTitle(String subtitle) {
|
||||
if (subtitle == null || subtitle.isEmpty()) {
|
||||
subTitleUi.getStyle().setDisplay(Display.NONE);
|
||||
titleUi.getStyle().setMarginTop(14, Unit.PX);
|
||||
} else {
|
||||
subTitleUi.setInnerText(subtitle);
|
||||
subTitleUi.getStyle().clearDisplay();
|
||||
titleUi.getStyle().clearMarginTop();
|
||||
}
|
||||
}
|
||||
|
||||
public void addWidgetToRightSide(Widget widget) {
|
||||
rightSideUi.add(widget);
|
||||
}
|
||||
}
|
||||
@@ -1,24 +1,20 @@
|
||||
<!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">
|
||||
<ui:with field="local_res"
|
||||
type="com.sap.sse.gwt.client.sapheader.SAPHeaderResources" />
|
||||
|
||||
<g:HTMLPanel>
|
||||
<header class="{local_res.css.siteheader}">
|
||||
<div class="{local_res.css.siteheaderLeft}">
|
||||
<g:Image resource="{local_res.logo}" pixelSize="80, 40" altText="SAP Sailing Analytics" styleName="{local_res.css.logo}"/>
|
||||
<div ui:field="applicationNameUi" class="{local_res.css.logotitle}"></div>
|
||||
</div>
|
||||
<div
|
||||
ui:field="pageTitleUi"
|
||||
class="{local_res.css.siteheader2ndCol}"
|
||||
>
|
||||
<div ui:field="titleUi" style="margin-top:14px;" class="{local_res.css.siteHeaderTitle}"></div>
|
||||
<div ui:field="subTitleUi" style="display:none;" class="{local_res.css.siteHeaderSubTitle}"></div>
|
||||
</div>
|
||||
<g:SimplePanel ui:field="rightSideUi" styleName="{local_res.css.siteheaderRight}">
|
||||
</g:SimplePanel>
|
||||
</header>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
<!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">
|
||||
<ui:with field="local_res"
|
||||
type="com.sap.sse.gwt.client.sapheader.SAPHeaderResources" />
|
||||
|
||||
<g:HTMLPanel>
|
||||
<header class="{local_res.css.siteheader}">
|
||||
<div class="{local_res.css.siteheaderLeft}">
|
||||
<a class="{local_res.css.logo}" ui:field="logoAnchor" target="_blank"></a>
|
||||
<a class="{local_res.css.logotitle}" target="_blank" ui:field="applicationNameAnchor"></a>
|
||||
</div>
|
||||
<div ui:field="pageTitleUi" class="{local_res.css.siteheader2ndCol}">
|
||||
<div ui:field="titleUi" style="margin-top:14px;" class="{local_res.css.siteHeaderTitle}"></div>
|
||||
<div ui:field="subTitleUi" style="display:none;" class="{local_res.css.siteHeaderSubTitle}"></div>
|
||||
</div>
|
||||
<g:SimplePanel ui:field="rightSideUi" styleName="{local_res.css.siteheaderRight}" />
|
||||
</header>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
@@ -1,28 +1,28 @@
|
||||
package com.sap.sse.gwt.client.sapheader;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.resources.client.ClientBundle;
|
||||
import com.google.gwt.resources.client.CssResource;
|
||||
import com.google.gwt.resources.client.ImageResource;
|
||||
|
||||
public interface SAPHeaderResources extends ClientBundle {
|
||||
public static final SAPHeaderResources INSTANCE = GWT.create(SAPHeaderResources.class);
|
||||
|
||||
@Source("SAPHeader.gss")
|
||||
LocalCss css();
|
||||
|
||||
public interface LocalCss extends CssResource {
|
||||
String siteheader();
|
||||
String siteheaderLeft();
|
||||
String siteHeaderTitle();
|
||||
String siteHeaderSubTitle();
|
||||
String siteheader2ndCol();
|
||||
String siteheaderRight();
|
||||
String logo();
|
||||
String logotitle();
|
||||
String pagetitle();
|
||||
}
|
||||
|
||||
@Source("logo-small@2x.png")
|
||||
ImageResource logo();
|
||||
}
|
||||
package com.sap.sse.gwt.client.sapheader;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.resources.client.ClientBundle;
|
||||
import com.google.gwt.resources.client.CssResource;
|
||||
import com.google.gwt.resources.client.ImageResource;
|
||||
|
||||
public interface SAPHeaderResources extends ClientBundle {
|
||||
public static final SAPHeaderResources INSTANCE = GWT.create(SAPHeaderResources.class);
|
||||
|
||||
@Source("SAPHeader.gss")
|
||||
LocalCss css();
|
||||
|
||||
public interface LocalCss extends CssResource {
|
||||
String siteheader();
|
||||
String siteheaderLeft();
|
||||
String siteHeaderTitle();
|
||||
String siteHeaderSubTitle();
|
||||
String siteheader2ndCol();
|
||||
String siteheaderRight();
|
||||
String logo();
|
||||
String logotitle();
|
||||
String pagetitle();
|
||||
}
|
||||
|
||||
@Source("logo-small@2x.png")
|
||||
ImageResource logo();
|
||||
}
|
||||
Reference in new issue
Block a user