trying to make theme customizable
This commit is contained in:
parent
39dde1d9a7
commit
8cb4c22cc8
4 changed files with 898 additions and 25 deletions
|
@ -9,6 +9,8 @@
|
|||
package ch.ethz.seb.sebserver.gui;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.RequestDispatcher;
|
||||
import javax.servlet.ServletException;
|
||||
|
@ -16,6 +18,9 @@ import javax.servlet.http.HttpServletRequest;
|
|||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.rap.rwt.RWT;
|
||||
import org.eclipse.rap.rwt.client.WebClient;
|
||||
import org.eclipse.rap.rwt.internal.application.ApplicationContextImpl;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
|
@ -31,6 +36,7 @@ import org.springframework.stereotype.Component;
|
|||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import ch.ethz.seb.sebserver.gbl.api.API;
|
||||
import ch.ethz.seb.sebserver.gui.RAPConfiguration.RAPSpringEntryPointFactory;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.WebserviceURIService;
|
||||
|
||||
@Lazy
|
||||
|
@ -59,24 +65,38 @@ final class InstitutionalAuthenticationEntryPoint implements AuthenticationEntry
|
|||
final HttpServletResponse response,
|
||||
final AuthenticationException authException) throws IOException, ServletException {
|
||||
|
||||
final String requestURI = request.getRequestURI();
|
||||
final String institutionalEndpoint = extractInstitutionalEndpoint(request);
|
||||
|
||||
log.info("No default gui entrypoint requested: {}", requestURI);
|
||||
log.info("No default gui entrypoint requested: {}", institutionalEndpoint);
|
||||
|
||||
final String logoImageBase64 = requestLogoImage(requestURI);
|
||||
final String logoImageBase64 = requestLogoImage(institutionalEndpoint);
|
||||
if (StringUtils.isNotBlank(logoImageBase64)) {
|
||||
request.getSession().setAttribute(API.PARAM_LOGO_IMAGE, logoImageBase64);
|
||||
request.getSession().setAttribute("themeId", "sms");
|
||||
forwardToEntryPoint(request, response, this.guiEntryPoint);
|
||||
} else {
|
||||
request.getSession().removeAttribute(API.PARAM_LOGO_IMAGE);
|
||||
response.setStatus(HttpStatus.UNAUTHORIZED.value());
|
||||
forwardToEntryPoint(request, response, this.guiEntryPoint);
|
||||
}
|
||||
|
||||
final RequestDispatcher dispatcher = request.getServletContext()
|
||||
.getRequestDispatcher(this.guiEntryPoint);
|
||||
}
|
||||
|
||||
private void forwardToEntryPoint(
|
||||
final HttpServletRequest request,
|
||||
final HttpServletResponse response,
|
||||
final String entryPoint) throws ServletException, IOException {
|
||||
|
||||
final RequestDispatcher dispatcher = request
|
||||
.getServletContext()
|
||||
.getRequestDispatcher(entryPoint);
|
||||
|
||||
dispatcher.forward(request, response);
|
||||
}
|
||||
|
||||
private String requestLogoImage(final String requestURI) {
|
||||
private String extractInstitutionalEndpoint(final HttpServletRequest request) {
|
||||
final String requestURI = request.getRequestURI();
|
||||
|
||||
log.debug("Trying to verify insitution from requested entrypoint url: {}", requestURI);
|
||||
|
||||
final String instPrefix = requestURI.replaceAll("/", "");
|
||||
|
@ -84,6 +104,14 @@ final class InstitutionalAuthenticationEntryPoint implements AuthenticationEntry
|
|||
return null;
|
||||
}
|
||||
|
||||
return instPrefix;
|
||||
}
|
||||
|
||||
private String requestLogoImage(final String institutionalEndpoint) {
|
||||
if (StringUtils.isBlank(institutionalEndpoint)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
final RestTemplate restTemplate = new RestTemplate();
|
||||
|
@ -97,18 +125,39 @@ final class InstitutionalAuthenticationEntryPoint implements AuthenticationEntry
|
|||
HttpMethod.GET,
|
||||
HttpEntity.EMPTY,
|
||||
String.class,
|
||||
instPrefix);
|
||||
institutionalEndpoint);
|
||||
|
||||
if (exchange.getStatusCodeValue() == HttpStatus.OK.value()) {
|
||||
return exchange.getBody();
|
||||
} else {
|
||||
log.error("Failed to verify insitution from requested entrypoint url: {}, response: {}", requestURI,
|
||||
log.error("Failed to verify insitution from requested entrypoint url: {}, response: {}",
|
||||
institutionalEndpoint,
|
||||
exchange);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
log.error("Failed to verify insitution from requested entrypoint url: {}", requestURI, e);
|
||||
log.error("Failed to verify insitution from requested entrypoint url: {}",
|
||||
institutionalEndpoint,
|
||||
e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean initInstitutionalBasedThemeEntryPoint(final String institutionalEndpoint) {
|
||||
try {
|
||||
final ApplicationContextImpl appContext = (ApplicationContextImpl) RWT.getApplicationContext();
|
||||
final Map<String, String> properties = new HashMap<>();
|
||||
properties.put(WebClient.THEME_ID, "sms");
|
||||
appContext.getEntryPointManager().register(
|
||||
institutionalEndpoint,
|
||||
new RAPSpringEntryPointFactory(),
|
||||
properties);
|
||||
|
||||
return true;
|
||||
} catch (final Exception e) {
|
||||
log.warn("Failed to dynamically set entry point for institution: {}", institutionalEndpoint, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -21,6 +21,7 @@ import org.eclipse.rap.rwt.application.ApplicationConfiguration;
|
|||
import org.eclipse.rap.rwt.application.EntryPoint;
|
||||
import org.eclipse.rap.rwt.application.EntryPointFactory;
|
||||
import org.eclipse.rap.rwt.client.WebClient;
|
||||
import org.eclipse.rap.rwt.internal.theme.ThemeUtil;
|
||||
import org.eclipse.rap.rwt.service.ServiceManager;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -34,20 +35,26 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.SEBServerAuthori
|
|||
|
||||
public class RAPConfiguration implements ApplicationConfiguration {
|
||||
|
||||
private static final String DEFAULT_THEME_NAME = "sebserver";
|
||||
private static final Logger log = LoggerFactory.getLogger(RAPConfiguration.class);
|
||||
|
||||
@Override
|
||||
public void configure(final Application application) {
|
||||
try {
|
||||
|
||||
// TODO get file path from properties
|
||||
//application.addStyleSheet(RWT.DEFAULT_THEME_ID, "static/css/sebserver.css");
|
||||
application.addStyleSheet(DEFAULT_THEME_NAME, "resource/theme/default.css");
|
||||
application.addStyleSheet(DEFAULT_THEME_NAME, "static/css/sebserver.css");
|
||||
application.addStyleSheet("sms", "resource/theme/default.css");
|
||||
application.addStyleSheet("sms", "static/css/sms.css");
|
||||
|
||||
final Map<String, String> properties = new HashMap<>();
|
||||
properties.put(WebClient.PAGE_TITLE, "SEB Server");
|
||||
properties.put(WebClient.BODY_HTML, "<big>Loading Application<big>");
|
||||
properties.put(WebClient.THEME_ID, DEFAULT_THEME_NAME);
|
||||
// properties.put(WebClient.FAVICON, "icons/favicon.png");
|
||||
|
||||
application.addEntryPoint("/gui", RAPSpringEntryPointFactory, properties);
|
||||
|
||||
// TODO get file path from properties
|
||||
application.addStyleSheet(RWT.DEFAULT_THEME_ID, "static/css/sebserver.css");
|
||||
application.addEntryPoint("/gui", new RAPSpringEntryPointFactory(), properties);
|
||||
|
||||
} catch (final RuntimeException re) {
|
||||
throw re;
|
||||
|
@ -63,12 +70,13 @@ public class RAPConfiguration implements ApplicationConfiguration {
|
|||
void loadMainPage(final Composite parent);
|
||||
}
|
||||
|
||||
private static final EntryPointFactory RAPSpringEntryPointFactory = new EntryPointFactory() {
|
||||
public static final class RAPSpringEntryPointFactory implements EntryPointFactory {
|
||||
|
||||
private boolean serviceInistialized = false;
|
||||
private boolean initialized = false;
|
||||
|
||||
@Override
|
||||
public EntryPoint create() {
|
||||
|
||||
return new AbstractEntryPoint() {
|
||||
|
||||
private static final long serialVersionUID = -1299125117752916270L;
|
||||
|
@ -86,6 +94,15 @@ public class RAPConfiguration implements ApplicationConfiguration {
|
|||
"HttpSession not available from RWT.getUISession().getHttpSession()");
|
||||
}
|
||||
|
||||
final Object themeId = httpSession.getAttribute("themeId");
|
||||
if (themeId != null) {
|
||||
ThemeUtil.setCurrentThemeId(RWT.getUISession(parent.getDisplay()), String.valueOf(themeId));
|
||||
parent.redraw();
|
||||
parent.layout(true);
|
||||
parent.redraw();
|
||||
|
||||
}
|
||||
|
||||
final WebApplicationContext webApplicationContext = getWebApplicationContext(httpSession);
|
||||
initSpringBasedRAPServices(webApplicationContext);
|
||||
|
||||
|
@ -98,16 +115,19 @@ public class RAPConfiguration implements ApplicationConfiguration {
|
|||
entryPointService.loadLoginPage(parent);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
private void initSpringBasedRAPServices(final WebApplicationContext webApplicationContext) {
|
||||
if (!this.serviceInistialized) {
|
||||
final ServiceManager manager = RWT.getServiceManager();
|
||||
final DownloadService downloadService = webApplicationContext.getBean(DownloadService.class);
|
||||
manager.registerServiceHandler(DownloadService.DOWNLOAD_SERVICE_NAME, downloadService);
|
||||
this.serviceInistialized = true;
|
||||
if (!this.initialized) {
|
||||
try {
|
||||
final ServiceManager manager = RWT.getServiceManager();
|
||||
final DownloadService downloadService = webApplicationContext.getBean(DownloadService.class);
|
||||
manager.registerServiceHandler(DownloadService.DOWNLOAD_SERVICE_NAME, downloadService);
|
||||
this.initialized = true;
|
||||
} catch (final IllegalArgumentException iae) {
|
||||
log.warn("Failed to register DownloadService on ServiceManager. Already registered: ", iae);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -128,8 +148,8 @@ public class RAPConfiguration implements ApplicationConfiguration {
|
|||
|
||||
log.debug("Initialize Spring-Context on Servlet-Context: " + servletContext);
|
||||
|
||||
return WebApplicationContextUtils.getRequiredWebApplicationContext(
|
||||
servletContext);
|
||||
return WebApplicationContextUtils
|
||||
.getRequiredWebApplicationContext(servletContext);
|
||||
|
||||
} catch (final Exception e) {
|
||||
log.error("Failed to initialize Spring-Context on HttpSession: " + httpSession);
|
||||
|
|
|
@ -107,7 +107,6 @@ public class WidgetFactory {
|
|||
|
||||
return new Image(device, this.image);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum CustomVariant {
|
||||
|
|
805
src/main/resources/static/css/sms.css
Normal file
805
src/main/resources/static/css/sms.css
Normal file
|
@ -0,0 +1,805 @@
|
|||
* {
|
||||
color: #000000;
|
||||
font: normal 12px Arial, Helvetica, sans-serif;
|
||||
background-image: none;
|
||||
background-color: #FFFFFF;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
*:disabled {
|
||||
color: #CFCFCF;
|
||||
}
|
||||
|
||||
/* Label default theme */
|
||||
Label {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
background-repeat: repeat;
|
||||
background-position: left top;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
text-decoration: none;
|
||||
cursor: default;
|
||||
opacity: 1;
|
||||
text-shadow: none;
|
||||
padding: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
Label.head {
|
||||
font: bold 12px Arial, Helvetica, sans-serif;
|
||||
padding: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
Label.form-center {
|
||||
padding: 5px 0px 0px 0px;
|
||||
}
|
||||
|
||||
Label.action {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #C50509;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
background-repeat: repeat;
|
||||
background-position: left top;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
text-decoration: none;
|
||||
cursor: default;
|
||||
opacity: 1;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
Label.h1 {
|
||||
font: 25px Arial, Helvetica, sans-serif;
|
||||
height: 28px;
|
||||
padding: 0px 12px 6px 12px;
|
||||
color: #1f407a;
|
||||
}
|
||||
|
||||
Label.h2 {
|
||||
font: 19px Arial, Helvetica, sans-serif;
|
||||
height: 22px;
|
||||
padding: 0 0 6px 0;
|
||||
color: #1f407a;
|
||||
}
|
||||
|
||||
Label.h3 {
|
||||
font: bold 14px Arial, Helvetica, sans-serif;
|
||||
height: 20px;
|
||||
padding: 0;
|
||||
color: #1f407a;
|
||||
}
|
||||
|
||||
Label.error {
|
||||
font: 10px Arial, Helvetica, sans-serif;
|
||||
color: #aa0000;
|
||||
}
|
||||
|
||||
Label:hover.imageButton {
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
Label.selection {
|
||||
padding: 4px 6px 3px 6px;
|
||||
}
|
||||
|
||||
Label:hover.selection {
|
||||
color: #4a4a4a;
|
||||
background-color: #b5b5b5;
|
||||
background-image: gradient(linear, left top, left bottom, from(#b5b5b5),to(#b5b5b5));
|
||||
padding: 4px 6px 3px 6px;
|
||||
}
|
||||
|
||||
Label.selected {
|
||||
color: #4a4a4a;
|
||||
background-color: #c5c5c5;
|
||||
background-image: gradient(linear, left top, left bottom, from(#c5c5c5),to(#c5c5c5));
|
||||
padding: 4px 6px 3px 6px;
|
||||
}
|
||||
|
||||
Label-SeparatorLine {
|
||||
background-image: none;
|
||||
background-color: transparent;
|
||||
border: 1px solid #bdbdbd;
|
||||
border-radius: 0px;
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
Composite.bordered {
|
||||
border: 2px;
|
||||
}
|
||||
|
||||
Composite.header {
|
||||
background-color: #000000;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
Composite.logo {
|
||||
background-color: #1F407A;
|
||||
}
|
||||
|
||||
Composite.bgLogo {
|
||||
background-color: #1F407A;
|
||||
background-image: url(static/images/ethz_logo_white.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: left center;
|
||||
}
|
||||
|
||||
Composite.bgLogoNoImage {
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-position: left center;
|
||||
}
|
||||
|
||||
Composite.bgContent {
|
||||
background-color: #EAECEE;
|
||||
background-image: url(static/images/blueBackground.png);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
|
||||
Composite.content {
|
||||
background-color: #FFFFFF;
|
||||
margin: 0 0 0 0;
|
||||
}
|
||||
|
||||
Composite.actionPane {
|
||||
background-color: #D3D9DB;
|
||||
}
|
||||
|
||||
Composite.bgFooter {
|
||||
background-color: #EAECEE;
|
||||
}
|
||||
|
||||
Composite.footer {
|
||||
background-color: #1F407A;
|
||||
}
|
||||
|
||||
Composite.login {
|
||||
background-color: #EAECEE;
|
||||
margin: 20px 0 0 0;
|
||||
padding: 15px 8px 8px 8px;
|
||||
border: 1px solid #bdbdbd;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
Composite.error {
|
||||
border: 1px solid #aa0000;
|
||||
border-radius: 1px;
|
||||
}
|
||||
|
||||
*.header {
|
||||
font: bold 12px Arial, Helvetica, sans-serif;
|
||||
color: #FFFFFF;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
*.footer {
|
||||
font: bold 12px Arial, Helvetica, sans-serif;
|
||||
color: #FFFFFF;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* Group default theme */
|
||||
Group {
|
||||
font: 10px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: #ffffff;
|
||||
border: none;
|
||||
}
|
||||
|
||||
Group-Frame {
|
||||
margin: 10px 0 0 0;
|
||||
padding: 10px 0px 0px 0px;
|
||||
border: 1px solid #bdbdbd;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
Group-Label {
|
||||
padding: 2px 10px 2px 10px;
|
||||
background-color: #ffffff;
|
||||
background-image: none;
|
||||
background-repeat: repeat;
|
||||
background-position: left top;
|
||||
border: 0px solid #bdbdbd;
|
||||
border-radius: 0px;
|
||||
color: inherit;
|
||||
margin: 0px 0px 0px 10px;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
|
||||
/* Text default */
|
||||
Text {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
padding: 3px 10px 3px 10px;
|
||||
color: #4a4a4a;
|
||||
background-repeat: repeat;
|
||||
background-position: left top;
|
||||
background-color: #ffffff;
|
||||
background-image: none;
|
||||
text-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
Text.error {
|
||||
border: 1px solid #aa0000;
|
||||
}
|
||||
|
||||
Text[BORDER], Text[MULTI][BORDER] {
|
||||
border: 1px solid #aaaaaa;
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
Text[BORDER].error, Text[MULTI][BORDER].error {
|
||||
border: 1px solid #aa0000;
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
Text[BORDER]:focused, Text[MULTI][BORDER]:focused {
|
||||
border: 1px solid #4f7cb1;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
Text:disabled,
|
||||
Text:read-only,
|
||||
Text[BORDER]:disabled,
|
||||
Text[BORDER]:read-only,
|
||||
Text[MULTI]:disabled,
|
||||
Text[MULTI]:read-only,
|
||||
Text[MULTI][BORDER]:disabled,
|
||||
Text[MULTI][BORDER]:read-only {
|
||||
box-shadow: none;
|
||||
background-color: #ffffff;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
color: #4a4a4a;
|
||||
padding: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
|
||||
/* Combo default theme */
|
||||
Combo, Combo[BORDER] {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #aaaaaa;
|
||||
border-radius: 0 2px 2px 0;
|
||||
background-image: none;
|
||||
text-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
Combo:focused, Combo[BORDER]:focused {
|
||||
text-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
Combo:disabled, Combo[BORDER]:disabled {
|
||||
text-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
Combo-Button {
|
||||
cursor: default;
|
||||
background-color: #ffffff;
|
||||
background-image: gradient(linear, left top, left bottom, from(#ffffff), to(#ffffff));
|
||||
border: none;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
Combo-Field {
|
||||
padding: 3px 0px 1px 10px;
|
||||
}
|
||||
|
||||
Combo.error, , Combo[BORDER].error {
|
||||
border: 1px solid #aa0000;
|
||||
border-radius: 0 2px 2px 0;
|
||||
}
|
||||
|
||||
/* DateTime default theme */
|
||||
DateTime, DateTime[BORDER] {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #aaaaaa;
|
||||
border-radius: 0 2px 2px 0;
|
||||
background-image: none;
|
||||
text-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
DateTime, DateTime[BORDER]:focused {
|
||||
text-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
DateTime-Field, DateTime-Field[BORDER] {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: #ffffff;
|
||||
padding: 3px 10px 2px 10px;
|
||||
text-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
DateTime-UpButton {
|
||||
cursor: default;
|
||||
background-color: #ffffff;
|
||||
background-image: gradient(linear, left top, left bottom, from(#ffffff), to(#ffffff));
|
||||
border: none;
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
DateTime-DownButton {
|
||||
cursor: default;
|
||||
background-color: #ffffff;
|
||||
background-image: gradient(linear, left top, left bottom, from(#ffffff), to(#ffffff));
|
||||
border: none;
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
DateTime-DropDownButton {
|
||||
cursor: default;
|
||||
background-color: #ffffff;
|
||||
background-image: gradient(linear, left top, left bottom, from(#ffffff), to(#ffffff));
|
||||
border: none;
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
/* Message titlebar */
|
||||
Shell.message {
|
||||
animation: none;
|
||||
border: 1px solid #bdbdbd;
|
||||
background-color: #ffffff;
|
||||
background-image: none;
|
||||
padding: 0px;
|
||||
opacity: 1;
|
||||
box-shadow: none;
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
Shell-Titlebar.message {
|
||||
background-color: #1f407a;
|
||||
background-gradient-color: #1f407a;
|
||||
color: white;
|
||||
background-image: gradient( linear, left top, left bottom, from( #1f407a ), to( #1f407a ) );
|
||||
padding: 2px 5px 2px;
|
||||
margin: 0px;
|
||||
height: 22px;
|
||||
font: 14px Arial, Helvetica, sans-serif;
|
||||
border: none;
|
||||
border-radius: 1px 1px 0px 0px;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
Shell-CloseButton:hover.message {
|
||||
background-color: #C50509;
|
||||
background-gradient-color: #C50509;
|
||||
background-image: gradient( linear, left top, left bottom, from( #C50509 ), to( #C50509 ) );
|
||||
}
|
||||
|
||||
Button {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
padding: 5px 6px 5px 6px;
|
||||
}
|
||||
|
||||
/* Push Buttons */
|
||||
Button[PUSH],
|
||||
Button[PUSH]:default {
|
||||
font: bold 12px Arial, Helvetica, sans-serif;
|
||||
background-color: #0069B4;
|
||||
background-gradient-color: #0069B4;
|
||||
background-image: gradient( linear, left top, left bottom, from( #0069B4 ), to( #0069B4 ) );
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
padding: 6px 15px;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
Button[PUSH]:pressed {
|
||||
background-color: #444;
|
||||
color: #fff;
|
||||
background-gradient-color: #444;
|
||||
background-image: gradient( linear, left top, left bottom, from( #444 ), to( #444 ) );
|
||||
}
|
||||
|
||||
Button[PUSH]:hover {
|
||||
background-color: #C50509;
|
||||
background-gradient-color: #C50509;
|
||||
background-image: gradient( linear, left top, left bottom, from( #C50509 ), to( #C50509 ) );
|
||||
color: #444;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
Button[PUSH]:disabled {
|
||||
background-color: transparent;
|
||||
border: 1px solid #EAECEE;
|
||||
color: #c0c0c0;
|
||||
background-repeat: no-repeat;
|
||||
background-position: right;
|
||||
}
|
||||
|
||||
Button-FocusIndicator[PUSH][BORDER] {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* Push Buttons header */
|
||||
Button[PUSH].header,
|
||||
Button[PUSH]:default.header {
|
||||
font: bold 12px Arial, Helvetica, sans-serif;
|
||||
background-color: #595959;
|
||||
background-gradient-color: #595959;
|
||||
background-image: gradient( linear, left top, left bottom, from( #595959 ), to( #595959 ) );
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
padding: 6px 15px;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
Button[PUSH]:pressed.header {
|
||||
background-color: #444;
|
||||
color: #fff;
|
||||
background-gradient-color: #444;
|
||||
background-image: gradient( linear, left top, left bottom, from( #444 ), to( #444 ) );
|
||||
}
|
||||
|
||||
Button[PUSH]:hover.header {
|
||||
background-color: #C50509;
|
||||
background-gradient-color: #C50509;
|
||||
background-image: gradient( linear, left top, left bottom, from( #C50509 ), to( #C50509 ) );
|
||||
color: #444;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
FileUpload,
|
||||
FileUpload:default,
|
||||
FileUpload:hover,
|
||||
FileUpload:pressed {
|
||||
background-color: transparent;
|
||||
background-gradient-color: transparent;
|
||||
background-image: gradient( linear, left top, left bottom, from( transparent ), to( transparent ) );
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
|
||||
/* Sash default */
|
||||
Sash {
|
||||
background-image: none;
|
||||
background-color: transparent;
|
||||
background-color: #EAECEE;
|
||||
}
|
||||
|
||||
Sash:hover {
|
||||
background-color: #444444;
|
||||
}
|
||||
|
||||
|
||||
/*Standard Einstellungen fuer Trees*/
|
||||
Tree {
|
||||
font: bold 14px Arial, Helvetica, sans-serif;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #1f407a;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px 0px 0px 40px;
|
||||
}
|
||||
|
||||
Tree[BORDER] {
|
||||
border: 1px solid #eceeef;
|
||||
}
|
||||
|
||||
TreeItem, TreeItem.treesection, Tree-RowOverlay:hover.treesection, Tree-RowOverlay:selected.treesection, Tree-RowOverlay:selected:hover.treesection {
|
||||
font: bold 14px Arial, Helvetica, sans-serif;
|
||||
color: #1f407a;
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
background-image: none;
|
||||
margin: 20px 20px 20px 20px;
|
||||
padding: 20px 20px 20px 40px;
|
||||
}
|
||||
|
||||
TreeItem:linesvisible:even {
|
||||
background-color: #f3f3f4;
|
||||
}
|
||||
|
||||
|
||||
Tree-RowOverlay {
|
||||
background-color: transparent;
|
||||
color: inherit;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
Tree-RowOverlay:hover {
|
||||
background-color: #C50509;
|
||||
color: #1F407A;
|
||||
}
|
||||
|
||||
|
||||
Tree-RowOverlay:selected {
|
||||
background-color: #C50509;
|
||||
color: #1F407A;
|
||||
}
|
||||
|
||||
Tree-RowOverlay:selected:unfocused {
|
||||
background-color: #C50509;
|
||||
color: #1f407a;
|
||||
}
|
||||
|
||||
Tree-RowOverlay:selected:hover {
|
||||
background-color: #C50509;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
Tree.actions {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
margin: 0 0 0 0;
|
||||
}
|
||||
|
||||
Tree[BORDER].actions {
|
||||
border: 1px solid #eceeef;
|
||||
}
|
||||
|
||||
TreeItem.actions {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
background-image: none;
|
||||
margin: 0 0 0 0;
|
||||
}
|
||||
|
||||
|
||||
Tree-RowOverlay:hover.actions {
|
||||
background-color: #C50509;
|
||||
color: #4a4a4a;
|
||||
}
|
||||
|
||||
Tree-RowOverlay:selected.actions {
|
||||
background-color: #595959;
|
||||
color: #4a4a4a;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* TabFolder default theme */
|
||||
|
||||
TabFolder {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
border: none;
|
||||
}
|
||||
|
||||
TabFolder-ContentContainer {
|
||||
border: none;
|
||||
border-top: 1px solid #bdbdbd;
|
||||
}
|
||||
|
||||
TabItem {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: #FFFFFF;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
background-image: none;
|
||||
margin: 1px 0px 0px 0px;
|
||||
border: 1px solid #bdbdbd;
|
||||
border-bottom: none;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
TabItem:selected {
|
||||
background-color: #D3D9DB;
|
||||
background-gradient-color: #D3D9DB;
|
||||
background-image: gradient( linear, left top, left bottom, from( #D3D9DB ), to( #D3D9DB ) );
|
||||
color: #4a4a4a;
|
||||
margin: 0px 0px 0px 0px;
|
||||
border: 1px solid #bdbdbd;
|
||||
border-bottom: none;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
TabItem:hover {
|
||||
background-color: #C50509;
|
||||
background-gradient-color: #C50509;
|
||||
background-image: gradient( linear, left top, left bottom, from( #C50509 ), to( #C50509 ) );
|
||||
color: #4a4a4a;
|
||||
margin: 1px 0px 0px -1px;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
TabItem:selected:hover {
|
||||
background-color: #C50509;
|
||||
background-gradient-color: #C50509;
|
||||
background-image: gradient( linear, left top, left bottom, from( #C50509 ), to( #C50509 ) );
|
||||
color: #4a4a4a;
|
||||
margin: 0px 0px 0px 0px;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
TabItem:first {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #4a4a4a;
|
||||
background-color: #FFFFFF;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
background-image: none;
|
||||
margin: 1px 0px 0px -1px;
|
||||
border: 1px solid #bdbdbd;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
TabItem:first:hover {
|
||||
background-color: #C50509;
|
||||
background-gradient-color: #C50509;
|
||||
background-image: gradient( linear, left top, left bottom, from( #C50509 ), to( #C50509 ) );
|
||||
color: #4a4a4a;
|
||||
margin: 1px 0px 0px -1px;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
TabItem:selected:first {
|
||||
background-color: #D3D9DB;
|
||||
color: #4a4a4a;
|
||||
margin: 0px 0px 0px 0px;
|
||||
border-left: 1px solid #bdbdbd;
|
||||
}
|
||||
|
||||
TabItem:selected:hover:first {
|
||||
background-color: #C50509;
|
||||
background-gradient-color: #C50509;
|
||||
background-image: gradient( linear, left top, left bottom, from( #C50509 ), to( #C50509 ) );
|
||||
color: #4a4a4a;
|
||||
margin: 0px 0px 0px 0px;
|
||||
border-left: 1px solid #bdbdbd;
|
||||
}
|
||||
|
||||
|
||||
Widget-ToolTip {
|
||||
padding: 1px 3px 2px 3px;
|
||||
background-color: #C50509;
|
||||
border: 1px solid #3C5A0F;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
color: #4a4a4a;
|
||||
opacity: 1;
|
||||
animation: fadeIn 200ms linear, fadeOut 600ms ease-out;
|
||||
box-shadow: 3px 4px 2px rgba(0, 0, 0, 0.3);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
Widget-ToolTip-Pointer {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
/* Table default theme */
|
||||
Table {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
background-color: #ffffff;
|
||||
background-image: none;
|
||||
color: #4a4a4a;
|
||||
border: none;
|
||||
}
|
||||
|
||||
Table[BORDER] {
|
||||
border: 1px solid #bdbdbd;
|
||||
}
|
||||
|
||||
TableColumn {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
background-color: #595959;
|
||||
background-gradient-color: #595959;
|
||||
background-image: gradient( linear, left top, left bottom, from( #595959 ), to( #595959 ) );
|
||||
padding: 4px 3px 4px 3px;
|
||||
|
||||
color: #FFFFFF;
|
||||
border-bottom: 1px solid #bdbdbd;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
TableColumn:hover {
|
||||
background-color: #595959;
|
||||
background-gradient-color: #595959;
|
||||
background-image: gradient( linear, left top, left bottom, from( #595959 ), to( #595959 ) );
|
||||
}
|
||||
|
||||
TableItem, TableItem:linesvisible:even:rowtemplate {
|
||||
background-color: transparent;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
TableItem:linesvisible:even {
|
||||
background-color: #ffffff;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
Table-RowOverlay {
|
||||
background-color: transparent;
|
||||
color: inherit;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
Table-RowOverlay:hover {
|
||||
color: #4a4a4a;
|
||||
background-color: #b5b5b5;
|
||||
background-image: gradient(linear, left top, left bottom, from(#b5b5b5), to(#b5b5b5));
|
||||
}
|
||||
|
||||
Table-RowOverlay:selected {
|
||||
color: #4a4a4a;
|
||||
background-color: #c5c5c5;
|
||||
background-image: gradient(linear, left top, left bottom, from(#c5c5c5),to(#c5c5c5));
|
||||
}
|
||||
|
||||
Table-RowOverlay:selected:unfocused {
|
||||
color: #4a4a4a;
|
||||
background-color: #c5c5c5;
|
||||
background-image: gradient(linear, left top, left bottom, from(#c5c5c5),to(#c5c5c5));
|
||||
}
|
||||
|
||||
Table-RowOverlay:linesvisible:even:hover {
|
||||
color: #4a4a4a;
|
||||
background-color: #b5b5b5;
|
||||
background-image: gradient(linear, left top, left bottom, from(#b5b5b5),to(#b5b5b5));
|
||||
}
|
||||
|
||||
Table-RowOverlay:linesvisible:even:selected {
|
||||
color: #4a4a4a;
|
||||
background-color: #c5c5c5;
|
||||
background-image: gradient(linear, left top, left bottom, from(#c5c5c5),to(#c5c5c5));
|
||||
}
|
||||
|
||||
Table-RowOverlay:linesvisible:even:selected:unfocused {
|
||||
background-color: #c5c5c5;
|
||||
background-image: gradient(linear, left top, left bottom, from(#c5c5c5),to(#c5c5c5));
|
||||
color: #4a4a4a;
|
||||
}
|
||||
|
||||
TableColumn-SortIndicator {
|
||||
background-image: none;
|
||||
}
|
||||
/*
|
||||
TableColumn-SortIndicator:up {
|
||||
background-image: url( themes/images/column/sort-indicator-up.png );
|
||||
}
|
||||
|
||||
TableColumn-SortIndicator:down {
|
||||
background-image: url( themes/images/column/sort-indicator-down.png );
|
||||
}
|
||||
*/
|
||||
|
||||
Table-Cell {
|
||||
spacing: 3px;
|
||||
padding: 5px 3px 5px 3px;
|
||||
}
|
||||
|
||||
Table-GridLine, Table-GridLine:vertical:rowtemplate {
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
Table-GridLine:vertical, Table-GridLine:header, Table-GridLine:horizontal:rowtemplate {
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in a new issue