Support different color pallete when not signed in

If the user is not signed in a different theme of colors can be
applied to the UI, making it more obvious that login is necessary.

Bug: issue 913
Change-Id: Id8c780042740b3b93dcee7ed84b3f9f6be06d9de
Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
Shawn O. Pearce 2011-05-20 08:46:48 -07:00
parent ebe5db58f9
commit a83bb1c344
9 changed files with 125 additions and 79 deletions

View File

@ -1795,7 +1795,8 @@ Background color for the page, and major data tables like the all
open changes table or the account dashboard. The value must be a
valid HTML hex color code, or standard color name.
+
By default white, `FFFFFF`.
By default white, `FFFFFF` for signed-out theme and `FCFEEF` (creme)
for signed-in theme.
[[theme.topMenuColor]]theme.topMenuColor::
+
@ -1830,6 +1831,19 @@ code, or standard color name.
+
By default a shade of yellow, `FFFFCC`.
A different theme may be used for signed-in vs. signed-out user status
by using the "signed-in" and "signed-out" theme sections. Variables
not specified in a section are inherited from the default theme.
----
[theme]
backgroundColor = FFFFFF
[theme "signed-in"]
backgroundColor = C0C0C0
[theme "signed-out"]
backgroundColor = 00FFFF
----
[[trackingid]] Section trackingid
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -42,12 +42,6 @@ public class GerritConfig implements Cloneable {
protected List<RegexFindReplace> commentLinks;
protected boolean documentationAvailable;
protected String backgroundColor;
protected String topMenuColor;
protected String textColor;
protected String trimColor;
protected String selectionColor;
public String getRegisterUrl() {
return registerUrl;
}
@ -166,44 +160,4 @@ public class GerritConfig implements Cloneable {
public void setDocumentationAvailable(final boolean available) {
documentationAvailable = available;
}
public String getBackgroundColor() {
return backgroundColor;
}
public void setBackgroundColor(String color) {
backgroundColor = color;
}
public String getTopMenuColor() {
return topMenuColor;
}
public void setTopMenuColor(String color) {
topMenuColor = color;
}
public String getTextColor() {
return textColor;
}
public void setTextColor(String color) {
textColor = color;
}
public String getTrimColor() {
return trimColor;
}
public void setTrimColor(String color) {
trimColor = color;
}
public String getSelectionColor() {
return selectionColor;
}
public void setSelectionColor(String color) {
selectionColor = color;
}
}

View File

@ -22,4 +22,13 @@ public class HostPageData {
public Account account;
public AccountDiffPreference accountDiffPref;
public GerritConfig config;
public Theme theme;
public static class Theme {
public String backgroundColor;
public String topMenuColor;
public String textColor;
public String trimColor;
public String selectionColor;
}
}

View File

@ -72,6 +72,7 @@ public class Gerrit implements EntryPoint {
private static String myHost;
private static GerritConfig myConfig;
private static HostPageData.Theme myTheme;
private static Account myAccount;
private static AccountDiffPreference myAccountDiffPref;
@ -183,6 +184,11 @@ public class Gerrit implements EntryPoint {
return myConfig;
}
/** Site theme information (site specific colors)/ */
public static HostPageData.Theme getTheme() {
return myTheme;
}
/** @return the currently signed in user's account data; null if no account */
public static Account getUserAccount() {
return myAccount;
@ -264,6 +270,7 @@ public class Gerrit implements EntryPoint {
hpd.load(new GerritCallback<HostPageData>() {
public void onSuccess(final HostPageData result) {
myConfig = result.config;
myTheme = result.theme;
if (result.account != null) {
myAccount = result.account;
}

View File

@ -38,11 +38,11 @@
@def norm-font Arial Unicode MS, Arial, sans-serif;
@def mono-font 'Lucida Console', 'Lucida Sans Typewriter', Monaco, monospace;
@eval backgroundColor com.google.gerrit.client.Gerrit.getConfig().getBackgroundColor();
@eval topMenuColor com.google.gerrit.client.Gerrit.getConfig().getTopMenuColor();
@eval textColor com.google.gerrit.client.Gerrit.getConfig().getTextColor();;
@eval trimColor com.google.gerrit.client.Gerrit.getConfig().getTrimColor();
@eval selectionColor com.google.gerrit.client.Gerrit.getConfig().getSelectionColor();
@eval backgroundColor com.google.gerrit.client.Gerrit.getTheme().backgroundColor;
@eval topMenuColor com.google.gerrit.client.Gerrit.getTheme().topMenuColor;
@eval textColor com.google.gerrit.client.Gerrit.getTheme().textColor;
@eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;
@eval selectionColor com.google.gerrit.client.Gerrit.getTheme().selectionColor;
@sprite .greenCheckClass {

View File

@ -23,10 +23,10 @@
@external .gwt-TabPanel;
@external .gwt-TabPanelBottom;
@eval backgroundColor com.google.gerrit.client.Gerrit.getConfig().getBackgroundColor();
@eval textColor com.google.gerrit.client.Gerrit.getConfig().getTextColor();;
@eval trimColor com.google.gerrit.client.Gerrit.getConfig().getTrimColor();
@eval selectionColor com.google.gerrit.client.Gerrit.getConfig().getSelectionColor();
@eval backgroundColor com.google.gerrit.client.Gerrit.getTheme().backgroundColor;
@eval textColor com.google.gerrit.client.Gerrit.getTheme().textColor;
@eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;
@eval selectionColor com.google.gerrit.client.Gerrit.getTheme().selectionColor;
body {
background: backgroundColor;

View File

@ -149,28 +149,9 @@ class GerritConfigProvider implements Provider<GerritConfig> {
}
config.setCommentLinks(links);
config.setBackgroundColor(getThemeColor("backgroundColor", "#FFFFFF"));
config.setTextColor(getThemeColor("textColor", "#000000"));
config.setTrimColor(getThemeColor("trimColor", "#D4E9A9"));
config.setSelectionColor(getThemeColor("selectionColor", "#FFFFCC"));
config
.setTopMenuColor(getThemeColor("topMenuColor", config.getTrimColor()));
return config;
}
private String getThemeColor(String name, String defaultValue) {
String v = cfg.getString("theme", null, name);
if (v == null || v.isEmpty()) {
v = defaultValue;
}
if (!v.startsWith("#") && v.matches("^[0-9a-fA-F]{2,6}$")) {
v = "#" + v;
}
return v;
}
@Override
public GerritConfig get() {
try {

View File

@ -62,6 +62,8 @@ public class HostPageServlet extends HttpServlet {
private final Provider<CurrentUser> currentUser;
private final GerritConfig config;
private final HostPageData.Theme signedOutTheme;
private final HostPageData.Theme signedInTheme;
private final SitePaths site;
private final Document template;
private final String noCacheName;
@ -70,10 +72,12 @@ public class HostPageServlet extends HttpServlet {
@Inject
HostPageServlet(final Provider<CurrentUser> cu, final SitePaths sp,
final GerritConfig gc, final ServletContext servletContext)
throws IOException, ServletException {
final ThemeFactory themeFactory, final GerritConfig gc,
final ServletContext servletContext) throws IOException, ServletException {
currentUser = cu;
config = gc;
signedOutTheme = themeFactory.getSignedOutTheme();
signedInTheme = themeFactory.getSignedInTheme();
site = sp;
final String pageName = "HostPage.html";
@ -158,12 +162,16 @@ public class HostPageServlet extends HttpServlet {
w.write(HPD_ID + ".account=");
json(((IdentifiedUser) user).getAccount(), w);
w.write(";");
w.write(HPD_ID + ".accountDiffPref=");
json(((IdentifiedUser) user).getAccountDiffPreference(), w);
w.write(";");
final byte[] userData = w.toString().getBytes("UTF-8");
w.write(HPD_ID + ".theme=");
json(signedInTheme, w);
w.write(";");
final byte[] userData = w.toString().getBytes("UTF-8");
raw = concat(page.part1, userData, page.part2);
} else {
raw = page.full;
@ -303,7 +311,14 @@ public class HostPageServlet extends HttpServlet {
}
part1 = raw.substring(0, p).getBytes("UTF-8");
part2 = raw.substring(raw.indexOf('>', p) + 1).getBytes("UTF-8");
full = concat(part1, part2, new byte[0]);
final StringWriter w = new StringWriter();
w.write(HPD_ID + ".theme=");
json(signedOutTheme, w);
w.write(";");
final byte[] themeData = w.toString().getBytes("UTF-8");
full = concat(part1, themeData, part2);
full_gz = HtmlDomUtil.compress(full);
}
}

View File

@ -0,0 +1,66 @@
// Copyright (C) 2011 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.httpd.raw;
import com.google.gerrit.common.data.HostPageData;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.inject.Inject;
import org.eclipse.jgit.lib.Config;
class ThemeFactory {
private final Config cfg;
@Inject
ThemeFactory(@GerritServerConfig Config cfg) {
this.cfg = cfg;
}
HostPageData.Theme getSignedOutTheme() {
return getTheme("signed-out");
}
HostPageData.Theme getSignedInTheme() {
return getTheme("signed-in");
}
private HostPageData.Theme getTheme(String name) {
HostPageData.Theme theme = new HostPageData.Theme();
theme.backgroundColor = color(name, "backgroundColor", "#FFFFFF");
theme.textColor = color(name, "textColor", "#000000");
theme.trimColor = color(name, "trimColor", "#D4E9A9");
theme.selectionColor = color(name, "selectionColor", "#FFFFCC");
theme.topMenuColor = color(name, "topMenuColor", theme.trimColor);
return theme;
}
private String color(String section, String name, String defaultValue) {
String v = cfg.getString("theme", section, name);
if (v == null || v.isEmpty()) {
v = cfg.getString("theme", null, name);
if (v == null || v.isEmpty()) {
if ("signed-in".equals(section) && "backgroundColor".equals(name)) {
v = "#FCFEEF";
} else {
v = defaultValue;
}
}
}
if (!v.startsWith("#") && v.matches("^[0-9a-fA-F]{2,6}$")) {
v = "#" + v;
}
return v;
}
}