From 47cd9beefae87102c08280e4a384d5c75a459c26 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 24 Jun 2009 18:47:17 +0000 Subject: [PATCH 1/4] Change table headings to th tags to prep for css changes --- .../i2p/router/web/ConfigClientsHelper.java | 4 +- .../i2p/router/web/ConfigTunnelsHelper.java | 14 +++--- router/java/src/net/i2p/router/JobQueue.java | 6 +-- .../peermanager/ProfileOrganizerRenderer.java | 46 +++++++++---------- .../router/transport/udp/UDPTransport.java | 44 +++++++++--------- .../router/tunnel/pool/TunnelPoolManager.java | 8 ++-- 6 files changed, 61 insertions(+), 61 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java index 984569b96..7acccdc49 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java @@ -15,7 +15,7 @@ public class ConfigClientsHelper extends HelperBase { public String getForm1() { StringBuffer buf = new StringBuffer(1024); buf.append("\n"); - buf.append("\n"); + buf.append("\n"); List clients = ClientAppConfig.getClientApps(_context); for (int cur = 0; cur < clients.size(); cur++) { @@ -31,7 +31,7 @@ public class ConfigClientsHelper extends HelperBase { public String getForm2() { StringBuffer buf = new StringBuffer(1024); buf.append("
ClientRun at Startup?Start NowClass and arguments
ClientRun at Startup?Start NowClass and arguments
\n"); - buf.append("\n"); + buf.append("\n"); Properties props = RouterConsoleRunner.webAppProperties(); Set keys = new TreeSet(props.keySet()); for (Iterator iter = keys.iterator(); iter.hasNext(); ) { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java index 2e53be6b5..f1a63e421 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java @@ -56,27 +56,27 @@ public class ConfigTunnelsHelper extends HelperBase { private static final int MIN_NEG_VARIANCE = -1; private void renderForm(StringBuffer buf, int index, String prefix, String name, TunnelPoolSettings in, TunnelPoolSettings out) { - buf.append("\n"); + buf.append("\n"); if (in.getLength() <= 0 || in.getLength() + in.getLengthVariance() <= 0 || out.getLength() <= 0 || out.getLength() + out.getLengthVariance() <= 0) - buf.append(""); + buf.append(""); else if (in.getLength() <= 1 || in.getLength() + in.getLengthVariance() <= 1 || out.getLength() <= 1 || out.getLength() + out.getLengthVariance() <= 1) - buf.append(""); + buf.append(""); if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH || out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH) - buf.append(""); + buf.append(""); if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY || out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY) - buf.append(""); + buf.append(""); - buf.append("\n"); + buf.append("\n"); // tunnel depth buf.append("\n"); diff --git a/router/java/src/net/i2p/router/JobQueue.java b/router/java/src/net/i2p/router/JobQueue.java index 8ec40f56e..890b303c0 100644 --- a/router/java/src/net/i2p/router/JobQueue.java +++ b/router/java/src/net/i2p/router/JobQueue.java @@ -669,9 +669,9 @@ public class JobQueue { /** render the HTML for the job stats */ private void getJobStats(StringBuffer buf) { buf.append("
WebAppRun at Startup?Start NowDescription
WebAppRun at Startup?Start NowDescription
"); - buf.append(name).append("
"); + buf.append(name).append("
ANONYMITY WARNING - Settings include 0-hop tunnels
ANONYMITY WARNING - Settings include 0-hop tunnels
ANONYMITY WARNING - Settings include 1-hop tunnels
ANONYMITY WARNING - Settings include 1-hop tunnels
PERFORMANCE WARNING - Settings include very long tunnels
PERFORMANCE WARNING - Settings include very long tunnels
PERFORMANCE WARNING - Settings include high tunnel quantities
PERFORMANCE WARNING - Settings include high tunnel quantities
InboundOutbound
InboundOutbound
Depth
\n"); - buf.append(""); - buf.append(""); - buf.append("\n"); + buf.append(""); + buf.append(""); + buf.append("\n"); long totRuns = 0; long totExecTime = 0; long avgExecTime = 0; diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java index 0aff93485..20806cca7 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java @@ -61,13 +61,13 @@ class ProfileOrganizerRenderer { buf.append("

Showing ").append(order.size()).append(" recent profiles, hiding ").append(peers.size()-order.size()).append(" older profiles

"); buf.append("
JobRunsTimeAvgMaxMinPendingAvgMaxMin
JobRunsTimeAvgMaxMinPendingAvgMaxMin
"); buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); buf.append(""); int prevTier = 1; for (Iterator iter = order.iterator(); iter.hasNext();) { @@ -159,22 +159,22 @@ class ProfileOrganizerRenderer { buf.append("

Floodfill and Integrated Peers

\n"); buf.append("
PeerGroups (Caps)SpeedCapacityIntegrationFailing? PeerGroups (Caps)SpeedCapacityIntegrationFailing? 
"); buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); - buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); + buf.append(""); buf.append(""); for (Iterator iter = integratedPeers.iterator(); iter.hasNext();) { PeerProfile prof = (PeerProfile)iter.next(); diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index b42efbfae..e010e5213 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -1769,48 +1769,48 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout)); buf.append("
\n"); buf.append("
PeerCapsInteg. ValueLast Heard AboutLast Heard FromLast Successful SendLast Failed Send10m Resp. Time1h Resp. Time1d Resp. TimeSuccessful LookupsFailed LookupsNew StoresOld Stores1h Fail Rate1d Fail RatePeerCapsInteg. ValueLast Heard AboutLast Heard FromLast Successful SendLast Failed Send10m Resp. Time1h Resp. Time1d Resp. TimeSuccessful LookupsFailed LookupsNew StoresOld Stores1h Fail Rate1d Fail Rate
\n"); - buf.append("\n"); buf.append("\n"); out.write(buf.toString()); buf.setLength(0); diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java index 7293b6a1e..49f82acae 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java @@ -439,9 +439,9 @@ public class TunnelPoolManager implements TunnelManagerFacade { List participating = _context.tunnelDispatcher().listParticipatingTunnels(); Collections.sort(participating, new TunnelComparator()); out.write("

Participating tunnels:

Peer"); + buf.append("
Peer"); if (sortFlags != FLAG_ALPHA) buf.append(" V "); - buf.append("Dir/IntroIdle"); + buf.append("Dir/IntroIdle"); appendSortLinks(buf, urlBase, sortFlags, "Sort by idle inbound", FLAG_IDLE_IN); buf.append("/"); appendSortLinks(buf, urlBase, sortFlags, "Sort by idle outbound", FLAG_IDLE_OUT); - buf.append(""); - buf.append("In/Out"); + buf.append(""); + buf.append("In/Out"); appendSortLinks(buf, urlBase, sortFlags, "Sort by inbound rate", FLAG_RATE_IN); buf.append("/"); appendSortLinks(buf, urlBase, sortFlags, "Sort by outbound rate", FLAG_RATE_OUT); - buf.append("\n"); - buf.append("Up"); + buf.append("\n"); + buf.append("Up"); appendSortLinks(buf, urlBase, sortFlags, "Sort by connection uptime", FLAG_UPTIME); - buf.append("skew"); + buf.append("skew"); appendSortLinks(buf, urlBase, sortFlags, "Sort by clock skew", FLAG_SKEW); - buf.append("\n"); - buf.append("Cwnd"); + buf.append("\n"); + buf.append("Cwnd"); appendSortLinks(buf, urlBase, sortFlags, "Sort by congestion window", FLAG_CWND); - buf.append("Ssthresh"); + buf.append("Ssthresh"); appendSortLinks(buf, urlBase, sortFlags, "Sort by slow start threshold", FLAG_SSTHRESH); - buf.append("\n"); - buf.append("Rtt"); + buf.append("\n"); + buf.append("Rtt"); appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time", FLAG_RTT); - buf.append("Dev"); + buf.append("Dev"); appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time deviation", FLAG_DEV); - buf.append("Rto"); + buf.append("Rto"); appendSortLinks(buf, urlBase, sortFlags, "Sort by retransmission timeout", FLAG_RTO); - buf.append("\n"); - buf.append("Mtu"); + buf.append("\n"); + buf.append("Mtu"); appendSortLinks(buf, urlBase, sortFlags, "Sort by maximum transmit unit", FLAG_MTU); - buf.append("Send"); + buf.append("Send"); appendSortLinks(buf, urlBase, sortFlags, "Sort by packets sent", FLAG_SEND); - buf.append("Recv"); + buf.append("Recv"); appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received", FLAG_RECV); - buf.append("\n"); - buf.append("Resent"); + buf.append("\n"); + buf.append("Resent"); appendSortLinks(buf, urlBase, sortFlags, "Sort by packets retransmitted", FLAG_RESEND); - buf.append("DupRecv"); + buf.append("DupRecv"); appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received more than once", FLAG_DUP); - buf.append("\n"); + buf.append("
\n"); - out.write("" - + "\n"); + out.write("" + + "\n"); long processed = 0; RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount"); if (rs != null) @@ -602,7 +602,7 @@ public class TunnelPoolManager implements TunnelManagerFacade { Collections.sort(peerList, new HashComparator()); out.write("

Tunnel Counts By Peer:

\n"); - out.write("
Receive onFrom" - + "Send onToExpirationUsageRateRole
Receive onFrom" + + "Send onToExpirationUsageRateRole
\n"); + out.write("
PeerExpl. + Client% of totalPart. from + to% of total
\n"); for (Hash h : peerList) { out.write("
PeerExpl. + Client% of totalPart. from + to% of total
"); out.write(netDbLink(h)); From 0606050231f4e5edc698b5b6a9540eefd5a9bc6e Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 27 Jun 2009 01:08:40 +0000 Subject: [PATCH 2/4] * NetDb stats: Normalize tunnel build stats for increased anonymity, effective in 0.7.6 --- .../src/net/i2p/router/StatisticsManager.java | 61 +++++++++++++++++-- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/router/java/src/net/i2p/router/StatisticsManager.java b/router/java/src/net/i2p/router/StatisticsManager.java index 9293a6234..df51e36b4 100644 --- a/router/java/src/net/i2p/router/StatisticsManager.java +++ b/router/java/src/net/i2p/router/StatisticsManager.java @@ -139,12 +139,18 @@ public class StatisticsManager implements Service { //includeRate("tunnel.buildRequestTime", stats, new long[] { 10*60*1000 }); long rate = 60*60*1000; - includeRate("tunnel.buildClientExpire", stats, new long[] { rate }); - includeRate("tunnel.buildClientReject", stats, new long[] { rate }); - includeRate("tunnel.buildClientSuccess", stats, new long[] { rate }); - includeRate("tunnel.buildExploratoryExpire", stats, new long[] { rate }); - includeRate("tunnel.buildExploratoryReject", stats, new long[] { rate }); - includeRate("tunnel.buildExploratorySuccess", stats, new long[] { rate }); + boolean commentOutIn076 = RouterVersion.VERSION.equals("0.7.5"); + if (commentOutIn076) { + includeRate("tunnel.buildClientExpire", stats, new long[] { rate }); + includeRate("tunnel.buildClientReject", stats, new long[] { rate }); + includeRate("tunnel.buildClientSuccess", stats, new long[] { rate }); + includeRate("tunnel.buildExploratoryExpire", stats, new long[] { rate }); + includeRate("tunnel.buildExploratoryReject", stats, new long[] { rate }); + includeRate("tunnel.buildExploratorySuccess", stats, new long[] { rate }); + } else { + includeTunnelRates("Client", stats, rate); + includeTunnelRates("Exploratory", stats, rate); + } //includeRate("tunnel.rejectTimeout", stats, new long[] { 10*60*1000 }); //includeRate("tunnel.rejectOverloaded", stats, new long[] { 10*60*1000 }); //includeRate("tunnel.acceptLoad", stats, new long[] { 10*60*1000 }); @@ -223,6 +229,49 @@ public class StatisticsManager implements Service { return buf.toString(); } + private static final String[] tunnelStats = { "Expire", "Reject", "Success" }; + + /** + * Add tunnel build rates with some mods to hide absolute quantities + * In particular, report counts normalized to 100 (i.e. a percentage) + */ + private void includeTunnelRates(String tunnelType, Properties stats, long selectedPeriod) { + long totalEvents = 0; + for (String tunnelStat : tunnelStats) { + String rateName = "tunnel.build" + tunnelType + tunnelStat; + RateStat stat = _context.statManager().getRate(rateName); + if (stat == null) continue; + Rate curRate = stat.getRate(selectedPeriod); + if (curRate == null) continue; + totalEvents += curRate.getLastEventCount(); + } + if (totalEvents <= 0) + return; + for (String tunnelStat : tunnelStats) { + String rateName = "tunnel.build" + tunnelType + tunnelStat; + RateStat stat = _context.statManager().getRate(rateName); + if (stat == null) continue; + Rate curRate = stat.getRate(selectedPeriod); + if (curRate == null) continue; + double fudgeQuantity = 100.0d * curRate.getLastEventCount() / totalEvents; + stats.setProperty("stat_" + rateName + '.' + getPeriod(curRate), renderRate(curRate, fudgeQuantity)); + } + } + + private String renderRate(Rate rate, double fudgeQuantity) { + StringBuffer buf = new StringBuffer(128); + buf.append(num(rate.getAverageValue())).append(';'); + buf.append(num(rate.getExtremeAverageValue())).append(';'); + buf.append(pct(rate.getPercentageOfLifetimeValue())).append(';'); + if (rate.getLifetimeTotalEventTime() > 0) { + // bah saturation + buf.append("0;0;0;0;"); + } + long numPeriods = rate.getLifetimePeriods(); + buf.append(num(fudgeQuantity)).append(';'); + return buf.toString(); + } + /* report the same data for tx and rx, for enhanced anonymity */ private void includeAverageThroughput(Properties stats) { RateStat sendRate = _context.statManager().getRate("bw.sendRate"); From 5906fb71395adffd116804705b482005fe424e0a Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 27 Jun 2009 01:11:53 +0000 Subject: [PATCH 3/4] * Console CSS: Move css file, make a classic theme to prep for CSS changes --- build.xml | 18 +- .../themes/console/classic/console.css | 0 .../themes/console/classic/default.css | 182 ++++++++++++++++++ .../themes/console/classic/i2ptunnel.css | 178 +++++++++++++++++ .../resources/themes/console/console.css | 112 +++++++++++ .../themes/console/defCon1/console.css | 112 +++++++++++ 6 files changed, 595 insertions(+), 7 deletions(-) rename apps/routerconsole/jsp/default.css => installer/resources/themes/console/classic/console.css (100%) create mode 100644 installer/resources/themes/console/classic/default.css create mode 100644 installer/resources/themes/console/classic/i2ptunnel.css create mode 100644 installer/resources/themes/console/console.css create mode 100644 installer/resources/themes/console/defCon1/console.css diff --git a/build.xml b/build.xml index b80f6fd12..da8cfc4c2 100644 --- a/build.xml +++ b/build.xml @@ -297,9 +297,6 @@ - - - @@ -319,6 +316,16 @@ + + + + + + + + + + @@ -364,7 +371,7 @@ - + @@ -374,9 +381,6 @@ - - - diff --git a/apps/routerconsole/jsp/default.css b/installer/resources/themes/console/classic/console.css similarity index 100% rename from apps/routerconsole/jsp/default.css rename to installer/resources/themes/console/classic/console.css diff --git a/installer/resources/themes/console/classic/default.css b/installer/resources/themes/console/classic/default.css new file mode 100644 index 000000000..88aa40d7f --- /dev/null +++ b/installer/resources/themes/console/classic/default.css @@ -0,0 +1,182 @@ +body { + margin : 0px; + padding : 0px; + text-align : center; + font-family : Arial, Helvetica, sans-serif; + background-color : #ffffff; + color : #000000; + font-size : 100%; + + /* we've avoided Tantek Hacks so far, + ** but we can't avoid using the non-w3c method of + ** box rendering. (and therefore one of mozilla's + ** proprietry -moz properties (which hopefully they'll + ** drop soon). + */ + -moz-box-sizing : border-box; + box-sizing : border-box; +} + +div { + -moz-box-sizing : border-box; + box-sizing : border-box; +} + +h4, label { + margin : 0px; + padding : 2px; + float : left; + width : 150px; + height : 24px; + font-weight : bold; + text-align : right; + font-size : 1.0em; + -moz-box-sizing: border-box; + box-sizing : border-box; +} + +h4 { + font-size : 1.2em; + text-align : center; + width : 750px; +} + +a { + text-decoration : none; +} + +form { + margin : 0px; +} + +textarea, input, select, button, a { + font-family : Arial, Helvetica, sans-serif; + -moz-box-sizing : border-box; + box-sizing : border-box; + font-size : 1.0em; + float : left; +} + +button { + float : none; +} + +textarea { + border : 1px solid #ddddc0; +} + +br { + clear : left; +} + +div.statusNotRunning { + float : left; + width : 82px; + height : 24px; + color : #dd0000; +} +div.statusRunning { + float : left; + width : 82px; + height : 24px; + color : #00dd00; +} +div.statusStarting { + float : left; + width : 82px; + height : 24px; + color : #339933; +} + +hr { + display : none; +} + +.separator, .subdivider { + clear : both; + height : 1px; + margin : 3px 0px 3px 0px; + border-bottom : 1px solid #ddddc0; +} + +.subdivider { + border-bottom : 1px dashed #ddddc0; +} + +.freetext { + width : 150px; + height : 22px; + border : 1px solid #aaaac0; +} + +.control { + margin : 0 4px 0 0; + padding : 0 0 4px 0; + overflow : hidden; + height : 20px; + width : 60px; + font-weight : normal; + background-color : #dddddd; + color : black; + border : 1px outset #ddddc0; + text-align : center; + white-space : nowrap; +} + +.control:hover { + background-color : #ffffed; +} + +.control:active { + border : 2px inset; +} + +.panel { + width : 760px; + margin : 16px auto 16px auto; + overflow : hidden; + text-align : left; + font-size : 0.8em; + background-color : #ffffef; + border : 4px solid #ffffd0; +} + +.panel .footer { + float : right; + padding : 4px; +} + +.toolbox { + float : right; +} + +.rowItem { + width : 750px; + float : left; + margin : 0px; +} + +.comment { + font-style : italic; +} + +.text { + height : 24px; + width : 150px; + padding : 2px 0 0 2px; + float : left; + margin : 0; +} + +.accessKey { + text-decoration : underline; +} + +#globalOperationsPanel { + background-color : #ffefef; + border : 4px solid #ffd0d0; +} + +#globalOperationsPanel .control { + width : 100px; +} diff --git a/installer/resources/themes/console/classic/i2ptunnel.css b/installer/resources/themes/console/classic/i2ptunnel.css new file mode 100644 index 000000000..814cab892 --- /dev/null +++ b/installer/resources/themes/console/classic/i2ptunnel.css @@ -0,0 +1,178 @@ +/* I2P Tunnel Edit Page +*/ + +#tunnelEditPage input { + width : 458px; +} + +#tunnelEditPage select { + width : 308px; +} + +#tunnelEditPage option[selected] { + color: green; +} + +#tunnelEditPage #targetField, +#tunnelEditPage #accessField, +#tunnelEditPage #optionsField { + height : 48px; + width : 150px; +} +#tunnelEditPage #tunnelOptionsField { + height : 96px; + width : 150px; +} + +#tunnelEditPage #targetField label, +#tunnelEditPage #accessField label, +#tunnelEditPage #tunnelOptionsField label, +#tunnelEditPage #optionsField label{ + height : 48px; + width : 150px; +} + +#tunnelEditPage #reachField, +#tunnelEditPage #hostField, +#tunnelEditPage #depthField, +#tunnelEditPage #countField, +#tunnelEditPage #optionsHostField { + width : 304px; + margin-right: 4px; +} + +#tunnelEditPage #portField, +#tunnelEditPage #optionsPortField, +#tunnelEditPage #backupField, +#tunnelEditPage #varianceField { + width : 150px; + +} + +#tunnelEditPage #reachField label, +#tunnelEditPage #hostField label, +#tunnelEditPage #portField label, +#tunnelEditPage #optionsHostField label, +#tunnelEditPage #optionsPortField label, +#tunnelEditPage #depthField label, +#tunnelEditPage #countField label, +#tunnelEditPage #backupField label, +#tunnelEditPage #varianceField label { + text-align : left; + +} + +#tunnelEditPage #otherField label { + width : 300px; +} + +#tunnelEditPage #reachableByOther, +#tunnelEditPage #tunnelDepth, +#tunnelEditPage #tunnelQuantity, +#tunnelEditPage #targetHost, +#tunnelEditPage #clientHost { + width : 306px; +} + +#tunnelEditPage #port { + width : 80px; +} + +#tunnelEditPage #targetPort, +#tunnelEditPage #clientPort, +#tunnelEditPage #tunnelBackupQuantity, +#tunnelEditPage #tunnelVariance { + width : 150px; +} + +#tunnelEditPage #shared, +#tunnelEditPage #connectDelay, +#tunnelEditPage #startOnLoad { + width : 16px; +} + +#tunnelEditPage label { + width : 150px; + font-weight : bold; + text-align : right; + float : left; +} + +/* I2P Tunnel List Page +*/ + +#tunnelListPage .rowItem { + width : 150px; +} + +#tunnelListPage select { + width : 150px; +} + +#tunnelListPage textarea { + width : 750px; + height : 100px; + padding : 0 0 0 4px; +} + +#tunnelListPage .footer .control { + margin-left: 2px; +} + +#tunnelListPage .footer label { + text-align : right; + height : 24px; + width : 360px; + float : left; + +} + +/* Use Leary and Langridge content replacement methods (LIR) +** to embed accessibility information into the document. +** Should allow the lists to be rendered nicely by +** screen readers. (and lynx!) +*/ + +#tunnelListPage label { + height : 0; + width : 0; + overflow : hidden; +} + +#tunnelListPage .nameHeaderField label, +#tunnelListPage .portHeaderField label, +#tunnelListPage .typeHeaderField label, +#tunnelListPage .interfaceHeaderField label, +#tunnelListPage .targetHeaderField label, +#tunnelListPage .previewHeaderField label, +#tunnelListPage .statusHeaderField label { + text-align : left; + width : 150px; + height : 24px; + float : left; +} + +#tunnelListPage .targetField, +#tunnelListPage .targetField .text, +#tunnelListPage .targetHeaderField, +#tunnelListPage .targetHeaderField label { + width : 300px; +} + +#tunnelListPage .descriptionField, +#tunnelListPage .destinationField { + width : 750px; +} + +#tunnelListPage .descriptionField .text, +#tunnelListPage .destinationField input { + width : 450px; +} + +#tunnelListPage .descriptionField label, +#tunnelListPage .destinationField label { + text-align : right; + width : 150px; + height : 24px; + float : left; +} diff --git a/installer/resources/themes/console/console.css b/installer/resources/themes/console/console.css new file mode 100644 index 000000000..99077d1e0 --- /dev/null +++ b/installer/resources/themes/console/console.css @@ -0,0 +1,112 @@ +body { + font-family: Verdana, Tahoma, Helvetica, sans-serif; + margin: 1em 0em; + padding: 0em; + text-align: center; + background-color: white; + color: black; + font-size: 100%; +} + +.hide { + display: none; +} + +img { + border: none; +} + +pre { + width: 100%; + overflow-x: scroll; +} + +div.logo { + float: left; + width: 200px; + left: 1em; + top: 1em; + margin: 0em; + padding: .5em; + text-align: center; +} + +div.toolbar { + margin: 0em 0em 2em 0em; + font-weight: bold; +} + +div.routersummaryouter { + float: left; + width: 215px; + margin: 0; + padding: 0; + border: 0; + clear: left; /* fixes a bug in Opera */ + overflow: auto; +} + +div.routersummary { + background-color: #fafaff; + width: 195px; + color: inherit; + margin: 0em; + padding: 5px; + text-align: left; + border: medium solid #efefff; + font-size: 0.82em; +} + +div.warning { + margin: 0em 1em 1em 224px; + padding: .5em 1em; + background-color: #ffefef; + border: medium solid #ffafaf; + text-align: left; + color: inherit; +} + +div.main { + margin: 0em 1em 1em 224px; + padding: .5em 1em; + background-color: #ffffef; + border: medium solid #ffffd0; + text-align: left; + color: inherit; +} + +div.main textarea { + width: 100% !important; +} + +div.news { + margin: 0em 1em 1em 224px; + padding: .5em 1em; + background-color: #ffffc0; + border: medium solid #ffffa0; + text-align: left; + color: inherit; +} + +div.confignav { + padding: 1em; + background-color: #efefff; +} + +div.configure { + padding: 1em; + background-color: #ffffc0; +} + +div.messages { + padding: 1em; + background-color: #fafaff; +} + +div.messages span.error { + color: #d00000; +} + +div.messages span.notice { + font-style: italic; +} diff --git a/installer/resources/themes/console/defCon1/console.css b/installer/resources/themes/console/defCon1/console.css new file mode 100644 index 000000000..99077d1e0 --- /dev/null +++ b/installer/resources/themes/console/defCon1/console.css @@ -0,0 +1,112 @@ +body { + font-family: Verdana, Tahoma, Helvetica, sans-serif; + margin: 1em 0em; + padding: 0em; + text-align: center; + background-color: white; + color: black; + font-size: 100%; +} + +.hide { + display: none; +} + +img { + border: none; +} + +pre { + width: 100%; + overflow-x: scroll; +} + +div.logo { + float: left; + width: 200px; + left: 1em; + top: 1em; + margin: 0em; + padding: .5em; + text-align: center; +} + +div.toolbar { + margin: 0em 0em 2em 0em; + font-weight: bold; +} + +div.routersummaryouter { + float: left; + width: 215px; + margin: 0; + padding: 0; + border: 0; + clear: left; /* fixes a bug in Opera */ + overflow: auto; +} + +div.routersummary { + background-color: #fafaff; + width: 195px; + color: inherit; + margin: 0em; + padding: 5px; + text-align: left; + border: medium solid #efefff; + font-size: 0.82em; +} + +div.warning { + margin: 0em 1em 1em 224px; + padding: .5em 1em; + background-color: #ffefef; + border: medium solid #ffafaf; + text-align: left; + color: inherit; +} + +div.main { + margin: 0em 1em 1em 224px; + padding: .5em 1em; + background-color: #ffffef; + border: medium solid #ffffd0; + text-align: left; + color: inherit; +} + +div.main textarea { + width: 100% !important; +} + +div.news { + margin: 0em 1em 1em 224px; + padding: .5em 1em; + background-color: #ffffc0; + border: medium solid #ffffa0; + text-align: left; + color: inherit; +} + +div.confignav { + padding: 1em; + background-color: #efefff; +} + +div.configure { + padding: 1em; + background-color: #ffffc0; +} + +div.messages { + padding: 1em; + background-color: #fafaff; +} + +div.messages span.error { + color: #d00000; +} + +div.messages span.notice { + font-style: italic; +} From 77ce768cb496e92b83ff7b4d3d105dfac3ee70aa Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 28 Jun 2009 12:50:33 +0000 Subject: [PATCH 4/4] * Console: Move favicon.ico and i2plogo.png out of the .war so that the HTTP proxy can use them directly; proxy error pages must be updated next --- apps/routerconsole/jsp/index.jsp | 2 +- apps/routerconsole/jsp/nav.jsp | 2 +- apps/routerconsole/jsp/viewtheme.jsp | 4 +++- build.xml | 7 +++++++ installer/resources/favicon.ico | Bin 1406 -> 0 bytes .../resources/themes/console/images}/favicon.ico | Bin .../resources/themes/console/images}/i2plogo.png | Bin 7 files changed, 12 insertions(+), 3 deletions(-) delete mode 100644 installer/resources/favicon.ico rename {apps/routerconsole/jsp => installer/resources/themes/console/images}/favicon.ico (100%) rename {apps/routerconsole/jsp => installer/resources/themes/console/images}/i2plogo.png (100%) diff --git a/apps/routerconsole/jsp/index.jsp b/apps/routerconsole/jsp/index.jsp index 87287b412..73ad4e15b 100644 --- a/apps/routerconsole/jsp/index.jsp +++ b/apps/routerconsole/jsp/index.jsp @@ -6,7 +6,7 @@ I2P Router Console - home <%@include file="css.jsp" %> - + <% if (System.getProperty("router.consoleNonce") == null) { diff --git a/apps/routerconsole/jsp/nav.jsp b/apps/routerconsole/jsp/nav.jsp index ad0021487..43d8d336e 100644 --- a/apps/routerconsole/jsp/nav.jsp +++ b/apps/routerconsole/jsp/nav.jsp @@ -1,6 +1,6 @@ <%@page import="java.io.File" %>
<% if (new File("docs/toolbar.html").exists()) { %> diff --git a/apps/routerconsole/jsp/viewtheme.jsp b/apps/routerconsole/jsp/viewtheme.jsp index 05ccfecbf..95b1e91c0 100644 --- a/apps/routerconsole/jsp/viewtheme.jsp +++ b/apps/routerconsole/jsp/viewtheme.jsp @@ -14,7 +14,9 @@ if (uri.endsWith(".css")) { response.setContentType("image/gif"); } else if (uri.endsWith(".jpg")) { response.setContentType("image/jpeg"); +} else if (uri.endsWith(".ico")) { + response.setContentType("image/x-icon"); } - +response.setHeader("Cache-Control", "max-age=86400"); // cache for a day net.i2p.util.FileUtil.readFile(uri, "./docs", response.getOutputStream()); %> \ No newline at end of file diff --git a/build.xml b/build.xml index da8cfc4c2..525364929 100644 --- a/build.xml +++ b/build.xml @@ -320,6 +320,13 @@ + + + + + + + diff --git a/installer/resources/favicon.ico b/installer/resources/favicon.ico deleted file mode 100644 index fd09b1b4cc69cb3eaa0853bda10698e3105d261f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmbtUO=weD6#ibD)U+uYpS4Eks?o+;$8>C=62%Uo(uIr4%%aOKsuXeIvJhb&Xwr@d z(?zRU)F04AabqbcVunFPM06O`MM+$gqOk^%<{=tml=^JuJNKm!8ph%dqvYVs5nQs*4>misZfG=|4d9eAGSVJ|uuShNu? zc42zP!HM!P@(T{~%Ql*d5u}PGsD(W4+;vb|E@5hE8kuJfhToRZ$e8`*A*7ZrqpR49 z;j)Fuf{h0c9XQJl`pN?sTS_4_>!6XjhL|T(?8dE|lE*^+wF8@Z6my5g@4n=4FhA$O z((%JEd)@kjPk3G@|3jV!ayX7Cn;XG;ZIB%91`0O;vqfXzBrwb7dtE)I_EBF;y{k5^ z@$4gKsgDC^(GC0E8<<~da0*CIZ9uwk5ff$x77el`3+X-^6Il}$?I#C=*jspuW^-fT=KjRDmD~CpB9?X9q1E^h@!^8qff2J=rpqtU!`T#&poic};3@f6 zRAMo1LmXblHyA&`_@ci-kN-HY9{p7V!Q>ab#8J*e1{TMjnI0_r58!lXO!t>m6x*{% z@Bno(bqo$B|+s~9Xw6}+OM7*R`N`=LvL8&!@LrUp& z+^JMs74H;1@oK?MN^KNe%K)o4wM8V!mhIaGeoy|bei3fiyxEkq#W0MYXfFN~>?Smf yI@K;XsMIcvw@RBj-#U$VDEZTq`cypy0i{}lT>7;VaGgiTSFNprz9I4Y5&9p!OB