diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java index 833e197a04aa6eac07d431db3476794bafc8b414..d5d702e8ff01cbbf9313212e7910292ac63f7e11 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java @@ -18,12 +18,6 @@ public class NewsHelper extends ContentHelper { return super.getContent(); } - /** @since 0.9.1 */ - public String getNewsHeadings() { - SummaryBarRenderer renderer = new SummaryBarRenderer(_context, this); - return renderer.renderNewsHeadingsHTML(); - } - /** @since 0.8.12 */ public boolean shouldShowNews() { return NewsFetcher.getInstance(_context).shouldShowNews(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java index 756126895f3ce63f6e2c999756cff8030fa63a4b..84f1401021604812b267846b3504d527b84f4ff0 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java @@ -15,6 +15,7 @@ import net.i2p.router.RouterContext; * */ public class SummaryBarRenderer { + // Commented out because broken. Replaced by if-elseif blob below. /*static final Map<String, java.lang.reflect.Method> ALL_SECTIONS; static { Map<String, java.lang.reflect.Method> aMap = new HashMap<String, java.lang.reflect.Method>();; @@ -42,20 +43,10 @@ public class SummaryBarRenderer { private final RouterContext _context; private final SummaryHelper _helper; - private final NewsHelper _newshelper; public SummaryBarRenderer(RouterContext context, SummaryHelper helper) { - this(context, helper, null); - } - - public SummaryBarRenderer(RouterContext context, NewsHelper newshelper) { - this(context, null, newshelper); - } - - public SummaryBarRenderer(RouterContext context, SummaryHelper helper, NewsHelper newshelper) { _context = context; _helper = helper; - _newshelper = newshelper; } /** @@ -64,25 +55,9 @@ public class SummaryBarRenderer { */ public void renderSummaryHTML(Writer out) throws IOException { StringBuilder buf = new StringBuilder(8*1024); - String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME); - - // TODO - the bar would render more cleanly if we specified the img height and width here, - // but unfortunately the images in the different themes are different sizes. - // They range in height from 37 to 43 px. But there's a -2 bottom margin... - // So put it in a div. - buf.append("<div style=\"height: 36px;\"><a href=\"/\" target=\"_top\"><img src=\"") - .append(CSSHelper.BASE_THEME_PATH) - .append(theme) - .append("/images/i2plogo.png\" alt=\"") - .append(_("I2P Router Console")) - .append("\" title=\"") - .append(_("I2P Router Console")) - .append("\"></a></div>\n"); - - out.write(buf.toString()); - String[] sections = _helper.getSummaryBarSections(); for (int i = 0; i < sections.length; i++) { + // Commented out because broken. Replaced by if-elseif blob below. /*try { String section = (String)ALL_SECTIONS.get(sections[i]).invoke(this); if (section != null && section != "") { @@ -546,7 +521,9 @@ public class SummaryBarRenderer { /** @since 0.9.1 */ public String renderNewsHeadingsHTML() { - if (_newshelper == null || _newshelper.shouldShowNews()) return ""; + if (_helper == null) return ""; + NewsHelper newshelper = _helper.getNewsHelper(); + if (newshelper == null || newshelper.shouldShowNews()) return ""; StringBuilder buf = new StringBuilder(512); String consoleNonce = System.getProperty("router.consoleNonce"); if (consoleNonce != null) { @@ -555,7 +532,7 @@ public class SummaryBarRenderer { .append(_("News & Updates")) .append("</a></h3><hr class=\"b\"><div class=\"newsheadings\">\n"); // Get news content. - String newsContent = _newshelper.getContent(); + String newsContent = newshelper.getContent(); if (newsContent != "") { buf.append("<ul>\n"); // Parse news content for headings. diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index 46c6d58af65f98ac896ffa2ab53cc901c5350bbe..32d3b2bbc67c689b441304e05971a67833a786f4 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -739,6 +739,10 @@ public class SummaryHelper extends HelperBase { return buf.toString(); } + private NewsHelper _newshelper; + public void storeNewsHelper(NewsHelper n) { _newshelper = n; } + public NewsHelper getNewsHelper() { return _newshelper; } + public String[] getSummaryBarSections() { String config = _context.getProperty(PROP_SUMMARYBAR, PRESET_FULL); return config.split("" + S); diff --git a/apps/routerconsole/jsp/console.jsp b/apps/routerconsole/jsp/console.jsp index c02b64b9a84983f2d847d5a0851c60e37c8c0109..7a080d2b989d8fcc47d0933c015afb363fa04db7 100644 --- a/apps/routerconsole/jsp/console.jsp +++ b/apps/routerconsole/jsp/console.jsp @@ -6,7 +6,13 @@ <html><head> <%@include file="css.jsi" %> <%=intl.title("home")%> -</head><body> +<script src="/js/ajax.js" type="text/javascript"></script> +<script type="text/javascript"> + var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>"; + function requestAjax1() { ajax("/xhr1.jsp", "xhr", 15000); } + function initAjax() { setTimeout(requestAjax1, 15000); } +</script> +</head><body onload="initAjax()"> <% String consoleNonce = System.getProperty("router.consoleNonce"); if (consoleNonce == null) { @@ -15,16 +21,13 @@ } %> -<%@include file="summary.jsi" %><h1><%=intl._("I2P Router Console")%></h1> +<%@include file="summary.jsi" %> + +<h1><%=intl._("I2P Router Console")%></h1> <div class="news" id="news"> - <jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" /> - <jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <% if (newshelper.shouldShowNews()) { - java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml"); %> - <jsp:setProperty name="newshelper" property="page" value="<%=fpath.getAbsolutePath()%>" /> - <jsp:setProperty name="newshelper" property="maxLines" value="300" /> <jsp:getProperty name="newshelper" property="content" /> <hr> <% diff --git a/apps/routerconsole/jsp/home.jsp b/apps/routerconsole/jsp/home.jsp index f4088cc0315522fbe4c768bf4dee2538029089a6..5183f64a80d83eb2a4922fab40943fdbb97519c8 100644 --- a/apps/routerconsole/jsp/home.jsp +++ b/apps/routerconsole/jsp/home.jsp @@ -6,7 +6,7 @@ <%=intl.title("home")%> <script src="/js/ajax.js" type="text/javascript"></script> <script type="text/javascript"> - var failMessage = "<b><%=intl._("Router is down")%><\/b>"; + var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>"; function requestAjax1() { ajax("/xhr1.jsp", "xhr", 15000); } function initAjax() { setTimeout(requestAjax1, 15000); } </script> @@ -33,7 +33,6 @@ <div style="height: 36px;"> <a href="/console"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/i2plogo.png" alt="<%=intl._("I2P Router Console")%>" title="<%=intl._("I2P Router Console")%>"></a> </div> - <hr> <div id="xhr"> <!-- for non-script --> <%@include file="xhr1.jsi" %> diff --git a/apps/routerconsole/jsp/summary.jsi b/apps/routerconsole/jsp/summary.jsi index 847e42d523137cfb5b9d9cb3b7276c104787cc59..0eb9d77b0b857f5f42137db0ed41681afaf63c72 100644 --- a/apps/routerconsole/jsp/summary.jsi +++ b/apps/routerconsole/jsp/summary.jsi @@ -1,3 +1,10 @@ +<jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" /> +<jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> +<% + java.io.File newspath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml"); +%> +<jsp:setProperty name="newshelper" property="page" value="<%=newspath.getAbsolutePath()%>" /> +<jsp:setProperty name="newshelper" property="maxLines" value="300" /> <div class="routersummaryouter"> <% // The refresh delay, 0 to disable @@ -15,7 +22,7 @@ newDelay = "?refresh=" + d; } if (!"0".equals(d)) - out.print("<iframe src=\"/summaryframe.jsp" + newDelay + "\" height=\"1500\" width=\"200\" scrolling=\"auto\" frameborder=\"0\" title=\"sidepanel\">\n"); + out.print("<noscript><iframe src=\"/summaryframe.jsp" + newDelay + "\" height=\"1500\" width=\"200\" scrolling=\"auto\" frameborder=\"0\" title=\"sidepanel\"></noscript>\n"); } %> <div class="routersummary"> @@ -34,11 +41,11 @@ // d and allowIFrame defined above if (!"0".equals(d)) { - out.print("</div></iframe>\n"); + out.print("</div><noscript></iframe></noscript>\n"); } else if (allowIFrame) { // since we don't have an iframe this will reload the base page, and // the new delay will be passed to the iframe above - out.print("<div class=\"refresh\"><form action=\"" + request.getRequestURI() + "\" method=\"POST\">\n" + + out.print("<noscript><div class=\"refresh\"><form action=\"" + request.getRequestURI() + "\" method=\"POST\">\n" + "<b>"); // We have intl defined when this is included, but not when compiled standalone. out.print(intl._("Refresh (s)")); @@ -47,7 +54,7 @@ // ditto out.print(intl._("Enable")); out.print("</button>\n" + - "</form></div></div>\n"); + "</form></div></noscript></div>\n"); } else { out.print("</div>\n"); } diff --git a/apps/routerconsole/jsp/summaryframe.jsp b/apps/routerconsole/jsp/summaryframe.jsp index 5822c9f64df0dbb53773c9d008aa630ce1dd12fa..218e78ba6ab9cf5a7c24ade9357b8a7d88336ce6 100644 --- a/apps/routerconsole/jsp/summaryframe.jsp +++ b/apps/routerconsole/jsp/summaryframe.jsp @@ -52,6 +52,13 @@ } %> </head><body style="margin: 0;"><div class="routersummary"> +<jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" /> +<jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> +<% + java.io.File newspath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml"); +%> +<jsp:setProperty name="newshelper" property="page" value="<%=newspath.getAbsolutePath()%>" /> +<jsp:setProperty name="newshelper" property="maxLines" value="300" /> <%@include file="summarynoframe.jsi" %> <% // d and shutdownSoon defined above diff --git a/apps/routerconsole/jsp/summarynoframe.jsi b/apps/routerconsole/jsp/summarynoframe.jsi index 63c39e6e5449f5a81e4c4efac3b7af31e7466c14..6fae7c9016beb24e4050cdb37c6997296ee052fc 100644 --- a/apps/routerconsole/jsp/summarynoframe.jsi +++ b/apps/routerconsole/jsp/summarynoframe.jsi @@ -1,35 +1,17 @@ -<%@page import="net.i2p.router.web.SummaryHelper" %> <% /* - * Note: - * This is included almost 30 times, so keep whitespace etc. to a minimum. + * TODO - the bar would render more cleanly if we specified the img height and width here, + * but unfortunately the images in the different themes are different sizes. + * They range in height from 37 to 43 px. But there's a -2 bottom margin... + * So put it in a div. */ %> -<jsp:useBean class="net.i2p.router.web.SummaryHelper" id="helper" scope="request" /> -<jsp:setProperty name="helper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> -<jsp:setProperty name="helper" property="action" value="<%=request.getParameter(\"action\")%>" /> -<jsp:setProperty name="helper" property="updateNonce" value="<%=request.getParameter(\"updateNonce\")%>" /> -<jsp:setProperty name="helper" property="consoleNonce" value="<%=request.getParameter(\"consoleNonce\")%>" /> -<jsp:setProperty name="helper" property="requestURI" value="<%=request.getRequestURI()%>" /> -<% helper.storeWriter(out); %> -<% -/* - * The following is required for the reseed button to work, although we probably - * only need the reseedNonce property. - */ -%> -<jsp:useBean class="net.i2p.router.web.ReseedHandler" id="reseed" scope="request" /> -<jsp:setProperty name="reseed" property="*" /> -<% -/* - * The following is required for the update buttons to work, although we probably - * only need the updateNonce property. - */ -%> -<jsp:useBean class="net.i2p.router.web.UpdateHandler" id="update" scope="request" /> -<jsp:setProperty name="update" property="*" /> -<jsp:setProperty name="update" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> -<% - // moved to java for ease of translation and to avoid 30 copies - helper.renderSummaryBar(); -%> + <div style="height: 36px;"> + <a href="/" target="_top"> + <img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/i2plogo.png" alt="<%=intl._("I2P Router Console")%>" title="<%=intl._("I2P Router Console")%>"> + </a> + </div> + <div id="xhr"> +<!-- for non-script --> +<%@include file="xhr1.jsi" %> + </div> diff --git a/apps/routerconsole/jsp/xhr1.jsi b/apps/routerconsole/jsp/xhr1.jsi index 4a646c75905c2414f941a035b34d2a93b2fdc6ff..1362cca1f766e759cdc87d2284628042bcd2d159 100644 --- a/apps/routerconsole/jsp/xhr1.jsi +++ b/apps/routerconsole/jsp/xhr1.jsi @@ -1,31 +1,41 @@ +<%@page import="net.i2p.router.web.SummaryHelper" %> +<% +/* + * Note: + * This is included on every refresh, so keep whitespace etc. to a minimum. + */ +%> <jsp:useBean class="net.i2p.router.web.SummaryHelper" id="helper" scope="request" /> <jsp:setProperty name="helper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="helper" property="action" value="<%=request.getParameter(\"action\")%>" /> -<table><tr><td align="left"><b><%=intl._("Version")%>:</b></td><td align="right"> -<jsp:getProperty name="helper" property="version" /> -</td></tr><tr><td align="left"><b><%=intl._("Uptime")%>:</b></td><td align="right"> -<jsp:getProperty name="helper" property="uptime" /> -</td></tr></table><hr> <jsp:setProperty name="helper" property="updateNonce" value="<%=request.getParameter(\"updateNonce\")%>" /> <jsp:setProperty name="helper" property="consoleNonce" value="<%=request.getParameter(\"consoleNonce\")%>" /> <% String reqURI = request.getRequestURI(); if (reqURI != null) - reqURI = reqURI.replace("/xhr1.jsp", "/home"); + reqURI = reqURI.replace("/xhr1.jsp", "/"); helper.setRequestURI(reqURI); %> +<% helper.storeWriter(out); %> +<% helper.storeNewsHelper(newshelper); %> +<% +/* + * The following is required for the reseed button to work, although we probably + * only need the reseedNonce property. + */ +%> +<jsp:useBean class="net.i2p.router.web.ReseedHandler" id="reseed" scope="request" /> +<jsp:setProperty name="reseed" property="*" /> <% - if (!newshelper.shouldShowNews()) { +/* + * The following is required for the update buttons to work, although we probably + * only need the updateNonce property. + */ %> -<jsp:getProperty name="newshelper" property="newsHeadings" /><hr> +<jsp:useBean class="net.i2p.router.web.UpdateHandler" id="update" scope="request" /> +<jsp:setProperty name="update" property="*" /> +<jsp:setProperty name="update" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <% - } // !shouldShowNews() + // moved to java for ease of translation + helper.renderSummaryBar(); %> -<jsp:getProperty name="helper" property="updateStatus" /> -<h4><a href="/confignet#help" title="<%=intl._("Help with configuring your firewall and router for optimal I2P performance")%>"><%=intl._("Network")%>: -<jsp:getProperty name="helper" property="reachability" /></a></h4> -<hr> -<jsp:getProperty name="helper" property="firewallAndReseedStatus" /> -<jsp:getProperty name="helper" property="destinations" /> -<hr> -<jsp:getProperty name="helper" property="restartStatus" />