forked from I2P_Developers/i2p.i2p
Console: Prep for removing themes (ticket #2272)
This commit is contained in:
@@ -132,6 +132,9 @@ public class SnarkManager implements CompleteListener, ClientApp {
|
||||
public static final String RC_PROP_UNIVERSAL_THEMING = "routerconsole.universal.theme";
|
||||
public static final String PROP_THEME = "i2psnark.theme";
|
||||
public static final String DEFAULT_THEME = "ubergine";
|
||||
/** From CSSHelper */
|
||||
private static final String PROP_DISABLE_OLD = "routerconsole.disableOldThemes";
|
||||
private static final boolean DEFAULT_DISABLE_OLD = false;
|
||||
/** @since 0.9.32 */
|
||||
public static final String PROP_COLLAPSE_PANELS = "i2psnark.collapsePanels";
|
||||
private static final String PROP_USE_OPENTRACKERS = "i2psnark.useOpentrackers";
|
||||
@@ -832,7 +835,7 @@ public class SnarkManager implements CompleteListener, ClientApp {
|
||||
* @return String -- the current theme
|
||||
*/
|
||||
public String getTheme() {
|
||||
String theme = _config.getProperty(PROP_THEME);
|
||||
String theme;
|
||||
if (getUniversalTheming()) {
|
||||
// Fetch routerconsole theme (or use our default if it doesn't exist)
|
||||
theme = _context.getProperty(RC_PROP_THEME, DEFAULT_THEME);
|
||||
@@ -840,8 +843,10 @@ public class SnarkManager implements CompleteListener, ClientApp {
|
||||
String[] themes = getThemes();
|
||||
boolean themeExists = false;
|
||||
for (int i = 0; i < themes.length; i++) {
|
||||
if (themes[i].equals(theme))
|
||||
if (themes[i].equals(theme)) {
|
||||
themeExists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!themeExists) {
|
||||
// Since the default is not "light", explicitly check if universal theme is "classic"
|
||||
@@ -851,6 +856,16 @@ public class SnarkManager implements CompleteListener, ClientApp {
|
||||
theme = DEFAULT_THEME;
|
||||
_config.setProperty(PROP_THEME, DEFAULT_THEME);
|
||||
}
|
||||
} else {
|
||||
theme = _config.getProperty(PROP_THEME, DEFAULT_THEME);
|
||||
}
|
||||
// remap deprecated themes
|
||||
if (theme.equals("midnight")) {
|
||||
if (_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "dark";
|
||||
} else if (theme.equals("classic")) {
|
||||
if (_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "light";
|
||||
}
|
||||
return theme;
|
||||
}
|
||||
@@ -862,21 +877,24 @@ public class SnarkManager implements CompleteListener, ClientApp {
|
||||
public String[] getThemes() {
|
||||
String[] themes;
|
||||
if (_context.isRouterContext()) {
|
||||
// "docs/themes/snark/"
|
||||
File dir = new File(_context.getBaseDir(), "docs/themes/snark");
|
||||
FileFilter fileFilter = new FileFilter() { public boolean accept(File file) { return file.isDirectory(); } };
|
||||
// Walk the themes dir, collecting the theme names, and append them to the map
|
||||
File[] dirnames = dir.listFiles(fileFilter);
|
||||
if (dirnames != null) {
|
||||
themes = new String[dirnames.length];
|
||||
for(int i = 0; i < dirnames.length; i++) {
|
||||
themes[i] = dirnames[i].getName();
|
||||
List<String> th = new ArrayList<String>(dirnames.length);
|
||||
boolean skipOld = _context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD);
|
||||
for (int i = 0; i < dirnames.length; i++) {
|
||||
String name = dirnames[i].getName();
|
||||
if (skipOld && (name.equals("midnight") || name.equals("classic")))
|
||||
continue;
|
||||
th.add(name);
|
||||
}
|
||||
themes = th.toArray(new String[th.size()]);
|
||||
} else {
|
||||
themes = new String[0];
|
||||
}
|
||||
} else {
|
||||
themes = new String[] { "classic", "dark", "light", "midnight", "ubergine", "vanilla" };
|
||||
themes = new String[] { "dark", "light", "ubergine", "vanilla" };
|
||||
}
|
||||
return themes;
|
||||
}
|
||||
|
@@ -77,8 +77,11 @@ public class IndexBean {
|
||||
private static final List<String> _nonces = new ArrayList<String>(MAX_NONCES + 1);
|
||||
private static final UIMessages _messages = new UIMessages(100);
|
||||
|
||||
public static final String PROP_THEME_NAME = "routerconsole.theme";
|
||||
public static final String DEFAULT_THEME = "light";
|
||||
private static final String PROP_THEME_NAME = "routerconsole.theme";
|
||||
private static final String DEFAULT_THEME = "light";
|
||||
/** From CSSHelper */
|
||||
private static final String PROP_DISABLE_OLD = "routerconsole.disableOldThemes";
|
||||
private static final boolean DEFAULT_DISABLE_OLD = false;
|
||||
public static final String PROP_CSS_DISABLED = "routerconsole.css.disabled";
|
||||
public static final String PROP_JS_DISABLED = "routerconsole.javascript.disabled";
|
||||
private static final String PROP_PW_ENABLE = "routerconsole.auth.enable";
|
||||
@@ -336,6 +339,14 @@ public class IndexBean {
|
||||
|
||||
public String getTheme() {
|
||||
String theme = _context.getProperty(PROP_THEME_NAME, DEFAULT_THEME);
|
||||
// remap deprecated themes
|
||||
if (theme.equals("midnight")) {
|
||||
if (_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "dark";
|
||||
} else if (theme.equals("classic")) {
|
||||
if (_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "light";
|
||||
}
|
||||
return "/themes/console/" + theme + "/";
|
||||
}
|
||||
|
||||
|
@@ -31,6 +31,9 @@ public class CSSHelper extends HelperBase {
|
||||
public static final String PROP_FORCE_MOBILE_CONSOLE = "routerconsole.forceMobileConsole";
|
||||
/** @since 0.9.32 */
|
||||
public static final String PROP_EMBED_APPS = "routerconsole.embedApps";
|
||||
/** @since 0.9.36 */
|
||||
public static final String PROP_DISABLE_OLD = "routerconsole.disableOldThemes";
|
||||
public static final boolean DEFAULT_DISABLE_OLD = false;
|
||||
|
||||
private static final String _consoleNonce = Long.toString(RandomSource.getInstance().nextLong());
|
||||
|
||||
@@ -44,13 +47,22 @@ public class CSSHelper extends HelperBase {
|
||||
|
||||
public String getTheme(String userAgent) {
|
||||
String url = BASE_THEME_PATH;
|
||||
if (userAgent != null && (userAgent.contains("MSIE") && !userAgent.contains("Trident/6"))) {
|
||||
if (userAgent != null && userAgent.contains("MSIE") && !userAgent.contains("Trident/6") &&
|
||||
!_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD)) {
|
||||
url += FORCE + "/";
|
||||
} else {
|
||||
// This is the first thing to use _context on most pages
|
||||
if (_context == null)
|
||||
throw new IllegalStateException("No contexts. This is usually because the router is either starting up or shutting down.");
|
||||
String theme = _context.getProperty(PROP_THEME_NAME, DEFAULT_THEME);
|
||||
// remap deprecated themes
|
||||
if (theme.equals("midnight")) {
|
||||
if (_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "dark";
|
||||
} else if (theme.equals("classic")) {
|
||||
if (_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "light";
|
||||
}
|
||||
url += theme + "/";
|
||||
}
|
||||
return url;
|
||||
|
@@ -11,12 +11,23 @@ import net.i2p.router.web.HelperBase;
|
||||
import net.i2p.router.web.Messages;
|
||||
import net.i2p.router.web.RouterConsoleRunner;
|
||||
|
||||
/**
|
||||
* Helper for /configui
|
||||
*/
|
||||
public class ConfigUIHelper extends HelperBase {
|
||||
|
||||
public String getSettings() {
|
||||
StringBuilder buf = new StringBuilder(512);
|
||||
buf.append("<div id=\"availablethemes\">");
|
||||
String current = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
|
||||
// remap deprecated themes
|
||||
if (current.equals("midnight")) {
|
||||
if (_context.getProperty(CSSHelper.PROP_DISABLE_OLD, CSSHelper.DEFAULT_DISABLE_OLD))
|
||||
current = "dark";
|
||||
} else if (current.equals("classic")) {
|
||||
if (_context.getProperty(CSSHelper.PROP_DISABLE_OLD, CSSHelper.DEFAULT_DISABLE_OLD))
|
||||
current = "light";
|
||||
}
|
||||
Set<String> themes = themeSet();
|
||||
for (String theme : themes) {
|
||||
buf.append("<label for=\"").append(theme).append("\"><div class=\"themechoice\">" +
|
||||
@@ -71,10 +82,16 @@ public class ConfigUIHelper extends HelperBase {
|
||||
File[] files = dir.listFiles();
|
||||
if (files == null)
|
||||
return rv;
|
||||
boolean skipOld = _context.getProperty(CSSHelper.PROP_DISABLE_OLD, CSSHelper.DEFAULT_DISABLE_OLD);
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
if (!files[i].isDirectory())
|
||||
continue;
|
||||
String name = files[i].getName();
|
||||
if (files[i].isDirectory() && ! name.equals("images"))
|
||||
rv.add(name);
|
||||
if (name.equals("images"))
|
||||
continue;
|
||||
if (skipOld && (name.equals("midnight") || name.equals("classic")))
|
||||
continue;
|
||||
rv.add(name);
|
||||
}
|
||||
// user themes
|
||||
Set<String> props = _context.getPropertyNames();
|
||||
|
@@ -3,6 +3,8 @@ package i2p.susi.dns;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
@@ -24,10 +26,13 @@ public class BaseBean
|
||||
private static final String PRIVATE_BOOK = "private_addressbook";
|
||||
private static final String DEFAULT_PRIVATE_BOOK = "../privatehosts.txt";
|
||||
|
||||
public static final String RC_PROP_THEME_NAME = "routerconsole.theme";
|
||||
public static final String PROP_THEME_NAME = "theme";
|
||||
public static final String DEFAULT_THEME = "light";
|
||||
public static final String BASE_THEME_PATH = "/themes/susidns/";
|
||||
private static final String RC_PROP_THEME_NAME = "routerconsole.theme";
|
||||
private static final String PROP_THEME_NAME = "theme";
|
||||
private static final String DEFAULT_THEME = "light";
|
||||
private static final String BASE_THEME_PATH = "/themes/susidns/";
|
||||
/** From CSSHelper */
|
||||
private static final String PROP_DISABLE_OLD = "routerconsole.disableOldThemes";
|
||||
private static final boolean DEFAULT_DISABLE_OLD = false;
|
||||
public static final String PROP_PW_ENABLE = "routerconsole.auth.enable";
|
||||
private static final String ADDRESSBOOK_DIR = "addressbook";
|
||||
private static final String CONFIG_FILE = "config.txt";
|
||||
@@ -93,12 +98,22 @@ public class BaseBean
|
||||
String theme = _context.getProperty(RC_PROP_THEME_NAME, DEFAULT_THEME);
|
||||
// Apply any override
|
||||
theme = properties.getProperty(PROP_THEME_NAME, theme);
|
||||
// remap deprecated themes
|
||||
if (theme.equals("midnight")) {
|
||||
if (_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "dark";
|
||||
} else if (theme.equals("classic")) {
|
||||
if (_context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "light";
|
||||
}
|
||||
// Ensure that theme exists
|
||||
String[] themes = getThemes();
|
||||
boolean themeExists = false;
|
||||
for (int i = 0; i < themes.length; i++) {
|
||||
if (themes[i].equals(theme))
|
||||
if (themes[i].equals(theme)) {
|
||||
themeExists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!themeExists)
|
||||
theme = DEFAULT_THEME;
|
||||
@@ -112,19 +127,23 @@ public class BaseBean
|
||||
* @since 0.9.2
|
||||
*/
|
||||
public String[] getThemes() {
|
||||
String[] themes = null;
|
||||
// "docs/themes/susidns/"
|
||||
String[] themes;
|
||||
File dir = new File(_context.getBaseDir(), "docs/themes/susidns");
|
||||
FileFilter fileFilter = new FileFilter() { public boolean accept(File file) { return file.isDirectory(); } };
|
||||
// Walk the themes dir, collecting the theme names, and append them to the map
|
||||
File[] dirnames = dir.listFiles(fileFilter);
|
||||
if (dirnames != null) {
|
||||
themes = new String[dirnames.length];
|
||||
for(int i = 0; i < dirnames.length; i++) {
|
||||
themes[i] = dirnames[i].getName();
|
||||
List<String> th = new ArrayList<String>(dirnames.length);
|
||||
boolean skipOld = _context.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD);
|
||||
for (int i = 0; i < dirnames.length; i++) {
|
||||
String name = dirnames[i].getName();
|
||||
if (skipOld && (name.equals("midnight") || name.equals("classic")))
|
||||
continue;
|
||||
th.add(name);
|
||||
}
|
||||
themes = th.toArray(new String[th.size()]);
|
||||
} else {
|
||||
themes = new String[0];
|
||||
}
|
||||
// return the map.
|
||||
return themes;
|
||||
}
|
||||
|
||||
|
@@ -100,11 +100,6 @@ public class WebMail extends HttpServlet
|
||||
{
|
||||
private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(WebMail.class);
|
||||
|
||||
/*
|
||||
* increase version number for every release
|
||||
*/
|
||||
private static final int version = 13;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final String LOGIN_NONCE = Long.toString(I2PAppContext.getGlobalContext().random().nextLong());
|
||||
|
||||
@@ -258,6 +253,9 @@ public class WebMail extends HttpServlet
|
||||
private static final String RC_PROP_FORCE_MOBILE_CONSOLE = "routerconsole.forceMobileConsole";
|
||||
private static final String CONFIG_THEME = "theme";
|
||||
private static final String DEFAULT_THEME = "light";
|
||||
/** From CSSHelper */
|
||||
private static final String PROP_DISABLE_OLD = "routerconsole.disableOldThemes";
|
||||
private static final boolean DEFAULT_DISABLE_OLD = false;
|
||||
|
||||
private static final String spacer = ""; /* this is best done with css */
|
||||
private static final String thSpacer = "<th> </th>\n";
|
||||
@@ -1948,22 +1946,31 @@ public class WebMail extends HttpServlet
|
||||
I2PAppContext ctx = I2PAppContext.getGlobalContext();
|
||||
// Fetch routerconsole theme (or use our default if it doesn't exist)
|
||||
String theme = ctx.getProperty(RC_PROP_THEME, DEFAULT_THEME);
|
||||
// Apply any override
|
||||
theme = Config.getProperty(CONFIG_THEME, theme);
|
||||
boolean universalTheming = ctx.getBooleanProperty(RC_PROP_UNIVERSAL_THEMING);
|
||||
if (universalTheming) {
|
||||
// Fetch routerconsole theme (or use our default if it doesn't exist)
|
||||
theme = ctx.getProperty(RC_PROP_THEME, DEFAULT_THEME);
|
||||
// Ensure that theme exists
|
||||
String[] themes = getThemes();
|
||||
String[] themes = getThemes(ctx);
|
||||
boolean themeExists = false;
|
||||
for (int i = 0; i < themes.length; i++) {
|
||||
if (themes[i].equals(theme))
|
||||
if (themes[i].equals(theme)) {
|
||||
themeExists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!themeExists) {
|
||||
theme = DEFAULT_THEME;
|
||||
}
|
||||
} else {
|
||||
// Apply any override
|
||||
theme = Config.getProperty(CONFIG_THEME, theme);
|
||||
}
|
||||
// remap deprecated themes
|
||||
if (theme.equals("midnight")) {
|
||||
if (ctx.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "dark";
|
||||
} else if (theme.equals("classic")) {
|
||||
if (ctx.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD))
|
||||
theme = "light";
|
||||
}
|
||||
boolean forceMobileConsole = ctx.getBooleanProperty(RC_PROP_FORCE_MOBILE_CONSOLE);
|
||||
boolean isMobile = (forceMobileConsole || isMobile(httpRequest.getHeader("User-Agent")));
|
||||
@@ -3520,20 +3527,24 @@ public class WebMail extends HttpServlet
|
||||
* Get all themes
|
||||
* @return String[] -- Array of all the themes found.
|
||||
*/
|
||||
private static String[] getThemes() {
|
||||
String[] themes = null;
|
||||
// "docs/themes/susimail/"
|
||||
File dir = new File(I2PAppContext.getGlobalContext().getBaseDir(), "docs/themes/susimail");
|
||||
private static String[] getThemes(I2PAppContext ctx) {
|
||||
String[] themes;
|
||||
File dir = new File(ctx.getBaseDir(), "docs/themes/susimail");
|
||||
FileFilter fileFilter = new FileFilter() { public boolean accept(File file) { return file.isDirectory(); } };
|
||||
// Walk the themes dir, collecting the theme names, and append them to the map
|
||||
File[] dirnames = dir.listFiles(fileFilter);
|
||||
if (dirnames != null) {
|
||||
themes = new String[dirnames.length];
|
||||
for(int i = 0; i < dirnames.length; i++) {
|
||||
themes[i] = dirnames[i].getName();
|
||||
}
|
||||
List<String> th = new ArrayList<String>(dirnames.length);
|
||||
boolean skipOld = ctx.getProperty(PROP_DISABLE_OLD, DEFAULT_DISABLE_OLD);
|
||||
for (int i = 0; i < dirnames.length; i++) {
|
||||
String name = dirnames[i].getName();
|
||||
if (skipOld && (name.equals("midnight") || name.equals("classic")))
|
||||
continue;
|
||||
th.add(name);
|
||||
}
|
||||
themes = th.toArray(new String[th.size()]);
|
||||
} else {
|
||||
themes = new String[0];
|
||||
}
|
||||
// return the map.
|
||||
return themes;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user