You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2015/10/16 14:16:04 UTC

[7/7] karaf-decanter git commit: [KARAF-3904] Add elasticsearch-head feature

[KARAF-3904] Add elasticsearch-head feature


Project: http://git-wip-us.apache.org/repos/asf/karaf-decanter/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-decanter/commit/c4719b9d
Tree: http://git-wip-us.apache.org/repos/asf/karaf-decanter/tree/c4719b9d
Diff: http://git-wip-us.apache.org/repos/asf/karaf-decanter/diff/c4719b9d

Branch: refs/heads/master
Commit: c4719b9d081d87ffdbdceb3aa8358e09bf962c17
Parents: ac12502
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Fri Oct 16 14:15:24 2015 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Fri Oct 16 14:15:24 2015 +0200

----------------------------------------------------------------------
 assembly/src/main/feature/feature.xml           |     5 +
 elasticsearch-head/pom.xml                      |    57 +
 elasticsearch-head/src/main/resources/app.css   |   704 +
 elasticsearch-head/src/main/resources/app.js    |  4373 +++++
 .../src/main/resources/base/favicon.png         |   Bin 0 -> 952 bytes
 .../src/main/resources/base/loading.gif         |   Bin 0 -> 1849 bytes
 .../src/main/resources/base/reset.css           |    44 +
 .../src/main/resources/fonts/FontAwesome.otf    |   Bin 0 -> 62856 bytes
 .../resources/fonts/fontawesome-webfont.eot     |   Bin 0 -> 38205 bytes
 .../resources/fonts/fontawesome-webfont.svg     |   414 +
 .../resources/fonts/fontawesome-webfont.ttf     |   Bin 0 -> 80652 bytes
 .../resources/fonts/fontawesome-webfont.woff    |   Bin 0 -> 44432 bytes
 elasticsearch-head/src/main/resources/i18n.js   |    93 +
 .../src/main/resources/index.html               |    33 +
 .../src/main/resources/lang/en_strings.js       |   174 +
 .../src/main/resources/lang/fr_strings.js       |   164 +
 .../src/main/resources/lang/pt_strings.js       |   174 +
 .../src/main/resources/lang/zh_strings.js       |   172 +
 .../src/main/resources/vendor.css               |  1338 ++
 elasticsearch-head/src/main/resources/vendor.js | 14500 +++++++++++++++++
 .../src/main/asciidoc/user-guide/appenders.adoc |    13 +
 pom.xml                                         |     1 +
 22 files changed, 22259 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/c4719b9d/assembly/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/assembly/src/main/feature/feature.xml b/assembly/src/main/feature/feature.xml
index d60ab00..77994df 100644
--- a/assembly/src/main/feature/feature.xml
+++ b/assembly/src/main/feature/feature.xml
@@ -132,6 +132,11 @@
         <bundle>mvn:org.apache.karaf.decanter/org.apache.karaf.decanter.elasticsearch/${project.version}</bundle>
     </feature>
 
+    <feature name="elasticsearch-head" version="${elasticsearch.version}" description="Elasticsearch Head web frontend">
+        <feature>war</feature>
+        <bundle>mvn:org.apache.karaf.decanter/org.apache.karaf.decanter.elasticsearch-head/${project.version}</bundle>
+    </feature>
+
     <feature name="kibana" version="${kibana.version}" description="Embedded Kibana dashboard">
         <feature>war</feature>
         <feature>elasticsearch</feature>

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/c4719b9d/elasticsearch-head/pom.xml
----------------------------------------------------------------------
diff --git a/elasticsearch-head/pom.xml b/elasticsearch-head/pom.xml
new file mode 100644
index 0000000..3ff8bc5
--- /dev/null
+++ b/elasticsearch-head/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <!--
+
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements.  See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You 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.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.karaf</groupId>
+        <artifactId>decanter</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <groupId>org.apache.karaf.decanter</groupId>
+    <artifactId>org.apache.karaf.decanter.elasticsearch-head</artifactId>
+    <packaging>bundle</packaging>
+    <name>Apache Karaf :: Decanter :: ElasticSearch Head</name>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <inherited>true</inherited>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                        <Bundle-Version>${project.version}</Bundle-Version>
+                        <Web-ContextPath>/elasticsearch-head</Web-ContextPath>
+                        <Import-Package>
+                            *
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/c4719b9d/elasticsearch-head/src/main/resources/app.css
----------------------------------------------------------------------
diff --git a/elasticsearch-head/src/main/resources/app.css b/elasticsearch-head/src/main/resources/app.css
new file mode 100644
index 0000000..2fa2152
--- /dev/null
+++ b/elasticsearch-head/src/main/resources/app.css
@@ -0,0 +1,704 @@
+TABLE.table {
+	border-collapse: collapse;
+}
+
+
+TABLE.table TH {
+	font-weight: normal;
+	text-align: left;
+	vertical-align: middle;
+}
+
+TABLE.table TBODY.striped TR:nth-child(odd) {
+	background: #eee;
+}
+
+TABLE.table H3 {
+	margin: 0;
+	font-weight: bold;
+	font-size: 140%;
+}
+
+.require { color: #a00; }
+
+.uiButton {
+	padding: 0;
+	border: 0;
+	margin: 3px;
+	width: auto;
+	overflow: visible;
+	cursor: pointer;
+	background: transparent;
+}
+
+.uiButton-content {
+	height: 20px;
+	border: 1px solid #668dc6;
+	border-radius: 2px;
+	background: #96c6eb;
+	background: -moz-linear-gradient(top, #96c6eb, #5296c7);
+	background: -webkit-linear-gradient(top, #96c6eb, #5296c7);
+	color: white;
+	font-weight: bold;
+}
+
+.moz .uiButton-content { margin: 0 -2px; }
+
+.uiButton-label {
+		padding: 2px 6px;
+		white-space: nowrap;
+}
+.uiButton:hover .uiButton-content {
+	background: #2777ba;
+	background: -moz-linear-gradient(top, #6aaadf, #2777ba);
+	background: -webkit-linear-gradient(top, #6aaadf, #2777ba);
+}
+.uiButton.active .uiButton-content,
+.uiButton:active .uiButton-content {
+	background: #2575b7;
+	background: -moz-linear-gradient(top, #2576b8, #2575b7);
+	background: -webkit-linear-gradient(top, #2576b8, #2575b7);
+}
+.uiButton.disabled .uiButton-content,
+.uiButton.disabled:active .uiButton-content {
+		border-color: #c6c6c6;
+		color: #999999;
+		background: #ddd;
+		background: -moz-linear-gradient(top, #ddd, #ddd);
+		background: -webkit-linear-gradient(top, #ddd, #ddd);
+}
+
+.uiButton.disabled {
+		cursor: default;
+}
+
+.uiMenuButton {
+	display: inline-block;
+}
+
+.uiMenuButton .uiButton-label {
+	background-image: url('data:image/gif;base64,R0lGODlhDwAPAIABAP///////yH5BAEAAAEALAAAAAAPAA8AAAITjI+py+0P4wG0gmavq1HLD4ZiAQA7');
+	background-position: right 50%;
+	background-repeat: no-repeat;
+	padding-right: 17px;
+	text-align: left;
+}
+
+.uiSplitButton {
+	white-space: nowrap;
+}
+
+.uiSplitButton .uiButton:first-child {
+	margin-right: 0;
+	display: inline-block;
+}
+
+.uiSplitButton .uiButton:first-child .uiButton-content {
+	border-right-width: 1;
+	border-right-color: #5296c7;
+	border-top-right-radius: 0;
+	border-bottom-right-radius: 0;
+}
+
+.uiSplitButton .uiMenuButton {
+	margin-left: 0;
+}
+
+.uiSplitButton .uiButton:last-child .uiButton-content {
+	border-radius: 2px;
+	border-left-width: 1;
+	border-left-color: #96c6eb;
+	border-top-left-radius: 0;
+	border-bottom-left-radius: 0;
+	height: 20px;
+}
+
+.uiSplitButton .uiButton:last-child .uiButton-label {
+	padding: 2px 17px 2px 6px;
+	margin-left: -8px;
+}
+
+.uiToolbar {
+	height: 28px;
+	background: #fdfefe;
+	background: -moz-linear-gradient(top, #fdfefe, #eaedef);
+	background: -webkit-linear-gradient(top, #fdfefe, #eaedef);
+	border-bottom: 1px solid #d2d5d7;
+	padding: 3px 10px;
+}
+
+.uiToolbar H2 {
+	display: inline-block;
+	font-size: 120%;
+	margin: 0;
+	padding: 5px 20px 5px 0;
+}
+
+.uiToolbar .uiTextField {
+	display: inline-block;
+}
+
+.uiToolbar .uiTextField INPUT {
+	padding-top: 2px;
+	padding-bottom: 5px;
+}
+#uiModal {
+	background: black;
+}
+
+.uiPanel {
+	box-shadow: -1px 2.5px 4px -3px black, -1px -2.5px 4px -3px black, 3px 2.5px 4px -3px black, 3px -2.5px 4px -3px black;
+	position: absolute;
+	background: #eee;
+	border: 1px solid #666;
+}
+
+.uiPanel-titleBar {
+	text-align: center;
+	font-weight: bold;
+	padding: 2px 0;
+	background: rgba(223, 223, 223, 0.75);
+	background: -moz-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
+	background: -webkit-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
+	border-bottom: 1px solid #bbb;
+}
+
+.uiPanel-close {
+	cursor: pointer;
+	border: 1px solid #aaa;
+	background: #fff;
+	color: #fff;
+	float: left;
+	height: 10px;
+	left: 3px;
+	line-height: 9px;
+	padding: 1px 0;
+	position: relative;
+	text-shadow: 0 0 1px #000;
+	top: 0px;
+	width: 12px;
+}
+.uiPanel-close:hover {
+	background: #eee;
+}
+
+.uiPanel-body {
+	overflow: auto;
+}
+
+
+.uiInfoPanel {
+	background: rgba(0, 0, 0, 0.75);
+	color: white;
+	border-radius: 8px;
+	padding: 1px;
+}
+.uiInfoPanel .uiPanel-titleBar {
+	background: rgba(74, 74, 74, 0.75);
+	background: -moz-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
+	background: -webkit-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
+	border-radius: 8px 8px 0 0;
+	padding: 1px 0 2px 0;
+	border-bottom: 0;
+}
+.uiInfoPanel .uiPanel-close {
+	border-radius: 6px;
+	height: 13px;
+	width: 13px;
+	background: #ccc;
+	left: 3px;
+	top: 1px;
+	color: #333;
+	text-shadow: #222 0 0 1px;
+	line-height: 11px;
+	border: 0;
+	padding: 0;
+}
+.uiInfoPanel .uiPanel-close:hover {
+	background: #eee;
+}
+
+.uiInfoPanel .uiPanel-body {
+	background: transparent;
+	padding: 20px;
+	border-radius: 0 0 8px 8px;
+	border: 1px solid #222;
+}
+
+.uiMenuPanel {
+	border: 1px solid #668dc6;
+	position: absolute;
+	background: #96c6eb;
+	color: white;
+}
+
+.uiMenuPanel LI {
+	list-style: none;
+	border-bottom: 1px solid #668dc6;
+}
+
+.uiMenuPanel LI:hover {
+	background: #2575b7;
+}
+
+.uiMenuPanel LI:last-child {
+	border-bottom: 0;
+} 
+
+.uiMenuPanel-label {
+	white-space: nowrap;
+	padding: 2px 10px 2px 10px;
+	cursor: pointer;
+}
+
+.disabled .uiMenuPanel-label {
+	cursor: auto;
+	color: #888;
+}
+
+.uiSelectMenuPanel .uiMenuPanel-label {
+	margin-left: 1em;
+	padding-left: 4px;
+}
+
+.uiSelectMenuPanel .uiMenuPanel-item.selected .uiMenuPanel-label:before {
+	content: "\2713";
+	width: 12px;
+	margin-left: -12px;
+	display: inline-block;
+}
+
+.uiTable TABLE {
+	border-collapse: collapse;
+}
+
+.uiTable-body {
+	overflow-y: scroll;
+	overflow-x: auto;
+}
+
+.uiTable-headers {
+	overflow-x: hidden;
+}
+
+.uiTable-body TD {
+	white-space: nowrap;
+}
+
+.uiTable-body .uiTable-header-row TH,
+.uiTable-body .uiTable-header-row TH DIV {
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.uiTable-body .uiTable-header-cell > DIV {
+	height: 0;
+	overflow: hidden;
+}
+
+.uiTable-headercell-menu {
+	float: right;
+}
+
+.uiTable-tools {
+	padding: 3px 4px;
+	height: 14px;
+}
+
+.uiTable-header-row {
+	background: #ddd;
+	background: -moz-linear-gradient(top, #eee, #ccc);
+	background: -webkit-linear-gradient(top, #eee, #ccc);
+}
+
+.uiTable-headercell-text {
+	margin-right: 20px;
+}
+
+.uiTable-headercell-menu {
+	display: none;
+}
+
+.uiTable-header-row TH {
+	border-right: 1px solid #bbb;
+	padding: 0;
+	text-align: left;
+}
+
+.uiTable-header-row TH > DIV {
+	padding: 3px 4px;
+	border-right: 1px solid #eee;
+}
+
+.uiTable-headerEndCap > DIV {
+	width: 19px;
+}
+
+.uiTable-header-row .uiTable-sort {
+	background: #ccc;
+	background: -moz-linear-gradient(top, #bebebe, #ccc);
+	background: -webkit-linear-gradient(top, #bebebe, #ccc);
+}
+.uiTable-header-row TH.uiTable-sort > DIV {
+	border-right: 1px solid #ccc;
+}
+
+.uiTable-sort .uiTable-headercell-menu {
+	display: block;
+}
+
+.uiTable TABLE TD {
+	border-right: 1px solid transparent;
+	padding: 3px 4px;
+}
+
+.uiTable-body TABLE TR:nth-child(even) {
+	background: #f3f3f3;
+}
+
+.uiTable-body TABLE TR.selected {
+	color: white;
+	background: #6060f1;
+}
+
+DIV.uiJsonPretty-object { font-size: 1.26em; font-family: monospace; }
+UL.uiJsonPretty-object,
+UL.uiJsonPretty-array { margin: 0; padding: 0 0 0 2em; list-style: none; }
+UL.uiJsonPretty-object LI,
+UL.uiJsonPretty-array LI { padding: 0; margin: 0; }
+.expando > SPAN.uiJsonPretty-name:before { content: "\25bc\a0"; color: #555; position: relative; top: 2px; }
+.expando.uiJsonPretty-minimised > SPAN.uiJsonPretty-name:before { content: "\25ba\a0"; top: 0; }
+.uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before,
+.expando .uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before { content: ""; }
+SPAN.uiJsonPretty-string,
+SPAN.uiJsonPretty-string A { color: green; }
+SPAN.uiJsonPretty-string A { text-decoration: underline;}
+SPAN.uiJsonPretty-number { color: blue; }
+SPAN.uiJsonPretty-null { color: red; }
+SPAN.uiJsonPretty-boolean { color: purple; }
+.expando > .uiJsonPretty-name { cursor: pointer; }
+.expando > .uiJsonPretty-name:hover { text-decoration: underline; }
+.uiJsonPretty-minimised { white-space: nowrap; overflow: hidden; }
+.uiJsonPretty-minimised > UL { opacity: 0.6; }
+.uiJsonPretty-minimised .uiJsonPretty-minimised > UL { opacity: 1; }
+.uiJsonPretty-minimised UL, .uiJsonPretty-minimised LI { display: inline; padding: 0; }
+
+
+.uiJsonPanel SPAN.uiJsonPretty-string { color: #6F6; }
+.uiJsonPanel SPAN.uiJsonPretty-number { color: #66F; }
+.uiJsonPanel SPAN.uiJsonPretty-null { color: #F66; }
+.uiJsonPanel SPAN.uiJsonPretty-boolean { color: #F6F; }
+
+.uiPanelForm-field {
+	display: block;
+	padding: 2px 0;
+	clear: both;
+}
+
+.uiPanelForm-label {
+	float: left;
+	width: 200px;
+	padding: 3px 7px;
+	text-align: right;
+}
+
+.uiSidebarSection-head {
+	background-color: #b9cfff;
+	background-image: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAcCAMAAABifa5OAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURQUCFf///wICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycr
 KysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///2Oyy/cAAAACdFJOU/8A5bcwSgAAADxJREFUeNq8zzkOACAMA8Hd/3+agiuRcIsrRopIjArOoLK1QAMNNBCRPkhLyzkn35Bjfd7JR1Nr09NoDACnvgDl1zlzoQAAAABJRU5ErkJggg==');
+	background-repeat: no-repeat;
+	background-position: 2px 5px;
+	margin-bottom: 1px;
+	padding: 3px 3px 3px 17px;
+	cursor: pointer;
+}
+
+.shown > .uiSidebarSection-head {
+	background-position: 2px -13px;
+}
+
+.uiSidebarSection-body {
+	margin-bottom: 3px;
+	display: none;
+}
+
+.uiSidebarSection-help {
+	text-shadow: #228 1px 1px 2px;
+	color: blue;
+	cursor: pointer;
+}
+
+.uiSidebarSection-help:hover {
+	text-decoration: underline;
+}
+
+.uiQueryFilter {
+	width: 350px;
+	padding: 5px;
+	background: #d8e7ff;
+	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
+	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
+}
+
+.uiQueryFilter DIV.uiQueryFilter-section {
+	margin-bottom: 5px;
+}
+
+.uiQueryFilter HEADER {
+	display: block;
+	font-variant: small-caps;
+	font-weight: bold;
+	margin: 5px 0;
+}
+
+.uiQueryFilter-aliases SELECT {
+	width: 100%;
+}
+
+.uiQueryFilter-booble {
+	cursor: pointer;
+	background: #e8f1ff;
+	border: 1px solid #e8f1ff;
+	border-radius: 5px;
+	padding: 1px 4px;
+	margin-bottom: 1px;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.uiQueryFilter-booble.selected {
+	background: #dae3f0;
+	border-top: 1px solid #c8d4e6;
+	border-left: 1px solid #c8d4e6;
+	border-bottom: 1px solid #ffffff;
+	border-right: 1px solid #ffffff;
+}
+
+.uiQueryFilter-filterName {
+	background-color: #cbdfff;
+	margin-bottom: 4px;
+	padding: 3px;
+	cursor: pointer;
+}
+
+.uiQueryFilter-filters INPUT  {
+	width: 300px;
+}
+
+.uiQueryFilter-subMultiFields {
+	padding-left: 10px;
+}
+
+.uiQueryFilter-rangeHintFrom,
+.uiQueryFilter-rangeHintTo {
+	margin: 0;
+	opacity: 0.75;
+}
+.uiBrowser-filter {
+	float: left;
+}
+
+.uiBrowser-table {
+	margin-left: 365px;
+}
+
+.uiAnyRequest-request {
+	float: left;
+	width: 350px;
+	padding: 5px;
+	background: #d8e7ff;
+	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
+	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
+}
+
+.uiAnyRequest-request INPUT[type=text],
+.uiAnyRequest-request TEXTAREA {
+	width: 340px;
+}
+
+.anyRequest INPUT[name=path] {
+	width: 259px;
+}
+
+.uiAnyRequest-out {
+	margin-left: 365px;
+}
+
+.uiAnyRequest-out P {
+	margin-top: 0;
+}
+
+.uiAnyRequest-jsonErr {
+	color: red;
+}
+
+.uiAnyRequest-history {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+	max-height: 100px;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+
+.uiNodesView TH,
+.uiNodesView TD {
+	vertical-align: top;
+	padding: 2px 20px;
+}
+
+.uiNodesView TH.close,
+.uiNodesView TD.close {
+	color: #888;
+	background: #f2f2f2;
+}
+
+.uiNodesView .uiMenuButton .uiButton-content {
+	padding-right: 3px;
+	border-radius: 8px;
+	height: 14px;
+}
+
+.uiNodesView .uiMenuButton.active .uiButton-content,
+.uiNodesView .uiMenuButton:active .uiButton-content {
+	border-bottom-right-radius: 0px;
+	border-bottom-left-radius: 0px;
+}
+
+.uiNodesView .uiMenuButton .uiButton-label {
+	padding: 0px 17px 0px 7px;
+}
+
+.uiNodesView-hasAlias {
+	text-align: center;
+}
+.uiNodesView-hasAlias.max {
+	border-top-right-radius: 8px;
+	border-bottom-right-radius: 8px;
+}
+.uiNodesView-hasAlias.min {
+	border-top-left-radius: 8px;
+	border-bottom-left-radius: 8px;
+}
+.uiNodesView-hasAlias-remove {
+	float: right;
+	font-weight: bold;
+	cursor: pointer;
+}
+
+.uiNodesView TD.uiNodesView-icon {
+	padding: 20px 0px 15px 20px;
+}
+
+.uiNodesView-node:nth-child(odd) {
+	background: #eee;
+}
+
+.uiNodesView-routing {
+	position: relative;
+	min-width: 90px;
+}
+
+.uiNodesView-nullReplica,
+.uiNodesView-replica {
+	box-sizing: border-box;
+	cursor: pointer;
+	float: left;
+	height: 40px;
+	width: 35px;
+	margin: 4px;
+	border: 2px solid #444;
+	padding: 2px;
+	font-size: 32px;
+	line-height: 32px;
+	text-align: center;
+	letter-spacing: -5px;
+	text-indent: -7px;
+}
+
+.uiNodesView-replica.primary {
+	border-width: 4px;
+	line-height: 29px;
+}
+
+.uiNodesView-nullReplica {
+	border-color: transparent;
+}
+
+.uiNodesView-replica.state-UNASSIGNED { background: #eeeeee; color: #999; border-color: #666; float: none; display: inline-block; }
+.uiNodesView-replica.state-INITIALIZING { background: #dddc88; }
+.uiNodesView-replica.state-STARTED { background: #99dd88; }
+.uiNodesView-replica.state-RELOCATING { background: #dc88dd; }
+
+
+.uiClusterConnect-uri {
+	width: 280px;
+}
+
+.uiStructuredQuery {
+	padding: 10px;
+}
+
+.uiStructuredQuery-out {
+	min-height: 30px;
+}
+
+.uiFilterBrowser-row * {
+	margin-right: 0.4em;
+}
+
+.uiFilterBrowser-row BUTTON {
+	height: 22px;
+	position: relative;
+	top: 1px;
+}
+
+.uiHeader {
+	padding: 3px 10px;
+}
+
+.uiHeader-name, .uiHeader-status {
+	font-size: 1.2em;
+	font-weight: bold;
+	padding: 0 10px;
+}
+
+
+.uiApp-header {
+	background: #eee;
+	position: fixed;
+	width: 100%;
+	z-index: 9;
+}
+
+.uiApp-header H1 {
+	margin: -2px 0 -4px 0;
+	float: left;
+	padding-right: 25px;
+}
+
+.uiApp-headerMenu {
+	border-bottom: 1px solid #bbb;
+	padding: 0px 3px;
+	height: 22px;
+}
+
+.uiApp-headerMenu .active {
+	background: white;
+	border-bottom-color: white;
+}
+
+.uiApp-headerMenuItem {
+	border: 1px solid #bbb;
+	padding: 4px 8px 1px ;
+	margin: 2px 1px 0;
+	height: 14px;
+	cursor: pointer;
+}
+
+.uiApp-body {
+	padding: 51px 0px 0px 0px;
+}
+
+.uiApp-headerNewMenuItem {
+	color: blue;
+}