package net.i2p.router.web; import java.io.File; import java.util.Map; import java.util.Set; import java.util.TreeSet; public class ConfigUIHelper extends HelperBase { public String getSettings() { StringBuilder buf = new StringBuilder(512); String current = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME); Set<String> themes = themeSet(); for (String theme : themes) { buf.append("<input type=\"radio\" class=\"optbox\" name=\"theme\" "); if (theme.equals(current)) buf.append(CHECKED); buf.append("value=\"").append(theme).append("\">").append(_t(theme)).append("<br>\n"); } boolean universalTheming = _context.getBooleanProperty(CSSHelper.PROP_UNIVERSAL_THEMING); buf.append("<input type=\"checkbox\" name=\"universalTheming\" "); if (universalTheming) buf.append(CHECKED); buf.append("value=\"1\">") .append(_t("Set theme universally across all apps")) .append("<br>\n"); return buf.toString(); } public String getForceMobileConsole() { StringBuilder buf = new StringBuilder(256); boolean forceMobileConsole = _context.getBooleanProperty(CSSHelper.PROP_FORCE_MOBILE_CONSOLE); buf.append("<input type=\"checkbox\" name=\"forceMobileConsole\" "); if (forceMobileConsole) buf.append(CHECKED); buf.append("value=\"1\">") .append(_t("Force the mobile console to be used")) .append("<br>\n"); return buf.toString(); } static final String PROP_THEME_PFX = "routerconsole.theme."; /** @return standard and user-installed themes, sorted (untranslated) */ private Set<String> themeSet() { Set<String> rv = new TreeSet<String>(); // add a failsafe even if we can't find any themes rv.add(CSSHelper.DEFAULT_THEME); File dir = new File(_context.getBaseDir(), "docs/themes/console"); File[] files = dir.listFiles(); if (files == null) return rv; for (int i = 0; i < files.length; i++) { String name = files[i].getName(); if (files[i].isDirectory() && ! name.equals("images")) rv.add(name); } // user themes Set<String> props = _context.getPropertyNames(); for (String prop : props) { if (prop.startsWith(PROP_THEME_PFX) && prop.length() > PROP_THEME_PFX.length()) rv.add(prop.substring(PROP_THEME_PFX.length())); } return rv; } /** * Each language has the ISO code, the flag, the name, and the optional country name. * Alphabetical by the ISO code please. * See http://en.wikipedia.org/wiki/ISO_639-1 . * Any language-specific flag added to the icon set must be * added to the top-level build.xml for the updater. * As of 0.9.12, ISO 639-2 three-letter codes are supported also. */ private static final String langs[][] = { // // Note: any additions, also add to: // apps/i2psnark/java/src/org/klomp/snark/standalone/ConfigUIHelper.java // apps/routerconsole/jsp/console.jsp // apps/routerconsole/jsp/home.jsp // .tx/config // New lang_xx flags: Add to top-level build.xml // { "ar", "lang_ar", _x("Arabic"), null }, { "cs", "cz", _x("Czech"), null }, { "da", "dk", _x("Danish"), null }, { "de", "de", _x("German"), null }, { "et", "ee", _x("Estonian"), null }, { "el", "gr", _x("Greek"), null }, { "en", "us", _x("English"), null }, { "es", "es", _x("Spanish"), null }, { "fi", "fi", _x("Finnish"), null }, { "fr", "fr", _x("French"), null }, { "gl", "lang_gl", _x("Galician"), null }, { "hu", "hu", _x("Hungarian"), null }, { "it", "it", _x("Italian"), null }, { "ja", "jp", _x("Japanese"), null }, { "ko", "kr", _x("Korean"), null }, { "mg", "mg", _x("Malagasy"), null }, { "nl", "nl", _x("Dutch"), null }, { "nb", "no", _x("Norwegian Bokmaal"), null }, { "pl", "pl", _x("Polish"), null }, { "pt", "pt", _x("Portuguese"), null }, { "pt_BR", "br", _x("Portuguese"), "Brazil" }, { "ro", "ro", _x("Romanian"), null }, { "ru", "ru", _x("Russian"), null }, { "sk", "sk", _x("Slovak"), null }, { "sv", "se", _x("Swedish"), null }, { "tr", "tr", _x("Turkish"), null }, { "uk", "ua", _x("Ukrainian"), null }, { "vi", "vn", _x("Vietnamese"), null }, { "zh", "cn", _x("Chinese"), null }, { "zh_TW", "tw", _x("Chinese"), "Taiwan" }, { "xx", "a1", "Debug: Find untagged strings", null }, }; /** todo sort by translated string */ public String getLangSettings() { String clang = Messages.getLanguage(_context); String current = clang; String country = Messages.getCountry(_context); if (country != null && country.length() > 0) current += '_' + country; // find best match boolean found = false; for (int i = 0; i < langs.length; i++) { if (langs[i][0].equals(current)) { found = true; break; } } if (!found) { if (country != null && country.length() > 0) { current = clang; for (int i = 0; i < langs.length; i++) { if (langs[i][0].equals(current)) { found = true; break; } } } if (!found) current = "en"; } StringBuilder buf = new StringBuilder(512); for (int i = 0; i < langs.length; i++) { String lang = langs[i][0]; if (lang.equals("xx") && !isAdvanced()) continue; // we use "lang" so it is set automagically in CSSHelper buf.append("<input type=\"radio\" class=\"optbox\" name=\"lang\" "); if (lang.equals(current)) buf.append(CHECKED); buf.append("value=\"").append(lang).append("\">") .append("<img height=\"11\" width=\"16\" alt=\"\" src=\"/flags.jsp?c=").append(langs[i][1]).append("\"> "); int under = lang.indexOf('_'); String slang = (under > 0) ? lang.substring(0, under) : lang; buf.append(Messages.getDisplayLanguage(slang, langs[i][2], _context)); String name = langs[i][3]; if (name != null) { buf.append(" (") .append(Messages.getString(name, _context, Messages.COUNTRY_BUNDLE_NAME)) .append(')'); } buf.append("<br>\n"); } return buf.toString(); } /** @since 0.9.4 */ public String getPasswordForm() { StringBuilder buf = new StringBuilder(512); ConsolePasswordManager mgr = new ConsolePasswordManager(_context); Map<String, String> userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW); buf.append("<table>"); if (userpw.isEmpty()) { buf.append("<tr><td colspan=\"3\">"); buf.append(_t("Add a user and password to enable.")); buf.append("</td></tr>"); } else { buf.append("<tr><th>") .append(_t("Remove")) .append("</th><th>") .append(_t("User Name")) .append("</th><th> </th></tr>\n"); for (String name : userpw.keySet()) { buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_") .append(name) .append("\"></td><td colspan=\"2\">") .append(name) .append("</td></tr>\n"); } } buf.append("<tr><td align=\"center\"><b>") .append(_t("Add")).append(":</b>" + "</td><td align=\"left\"><input type=\"text\" name=\"name\">" + "</td><td align=\"left\"><b>"); buf.append(_t("Password")).append(":</b> " + "<input type=\"password\" size=\"40\" name=\"nofilter_pw\"></td></tr>" + "</table>\n"); return buf.toString(); } }