You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/08/03 20:23:51 UTC
incubator-juneau git commit: New dark theme.
Repository: incubator-juneau
Updated Branches:
refs/heads/master 3f929b0a1 -> 4b4da6d83
New dark theme.
Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/4b4da6d8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/4b4da6d8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/4b4da6d8
Branch: refs/heads/master
Commit: 4b4da6d83913dfaa975c2acc8bf913266c03bd37
Parents: 3f929b0
Author: JamesBognar <ja...@apache.org>
Authored: Thu Aug 3 16:23:46 2017 -0400
Committer: JamesBognar <ja...@apache.org>
Committed: Thu Aug 3 16:23:46 2017 -0400
----------------------------------------------------------------------
.../juneau/html/HtmlBeanPropertyMeta.java | 19 +-
.../juneau/html/HtmlSerializerSession.java | 31 ++-
.../org/apache/juneau/html/annotation/Html.java | 20 ++
.../org/apache/juneau/internal/StringUtils.java | 3 +
juneau-core/src/main/javadoc/overview.html | 7 +-
.../juneau/microservice/RestMicroservice.java | 7 +-
.../apache/juneau/rest/RestServletDefault.java | 2 +-
.../rest/jena/RestServletJenaDefault.java | 2 +-
.../juneau/rest/widget/StyleMenuItem.java | 2 +-
.../org/apache/juneau/rest/styles/dark.css | 265 +++++++++++++++++++
10 files changed, 346 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
index 15e6ae4..2bceb2a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
@@ -25,7 +25,7 @@ public final class HtmlBeanPropertyMeta extends BeanPropertyMetaExtended {
private final boolean asXml, noTables, noTableHeaders, asPlainText;
private final HtmlRender render;
- private final String link;
+ private final String link, anchorText;
/**
* Constructor.
@@ -49,12 +49,13 @@ public final class HtmlBeanPropertyMeta extends BeanPropertyMetaExtended {
this.asPlainText = b.asPlainText;
this.render = ClassUtils.newInstance(HtmlRender.class, b.render);
this.link = b.link;
+ this.anchorText = b.anchorText;
}
private static class Builder {
boolean asXml, noTables, noTableHeaders, asPlainText;
Class<? extends HtmlRender> render = HtmlRender.class;
- String link;
+ String link, anchorText;
void findHtmlInfo(Html html) {
if (html == null)
@@ -71,6 +72,8 @@ public final class HtmlBeanPropertyMeta extends BeanPropertyMetaExtended {
render = html.render();
if (! html.link().isEmpty())
link = html.link();
+ if (! html.anchorText().isEmpty())
+ anchorText = html.anchorText();
}
}
@@ -139,4 +142,16 @@ public final class HtmlBeanPropertyMeta extends BeanPropertyMetaExtended {
public String getLink() {
return link;
}
+
+ /**
+ * Specifies the anchor text for this property.
+ *
+ * <p>
+ * This value is specified via the {@link Html#anchorText()} annotation.
+ *
+ * @return The link string, or <jk>null</jk> if not specified.
+ */
+ public String getAnchorText() {
+ return anchorText;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 7ec11d6..8d38885 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -438,6 +438,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
out.ie(i).eTag("table").nl(i);
}
+ @SuppressWarnings("hiding")
private void serializeBeanMap(HtmlWriter out, BeanMap<?> m, ClassMeta<?> eType,
BeanPropertyMeta ppMeta) throws Exception {
int i = indent;
@@ -470,7 +471,14 @@ public class HtmlSerializerSession extends XmlSerializerSession {
if (canIgnoreValue(cMeta, key, value))
continue;
- String link = cMeta.isCollectionOrArray() ? null : getLink(pMeta);
+ String link = null, anchorText = null;
+ if (! cMeta.isCollectionOrArray()) {
+ link = m.resolveVars(getLink(pMeta));
+ anchorText = m.resolveVars(getAnchorText(pMeta));
+ }
+
+ if (anchorText != null)
+ value = anchorText;
out.sTag(i+1, "tr").nl(i+1);
out.sTag(i+2, "td").text(key).eTag("td").nl(i+2);
@@ -482,7 +490,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
try {
if (link != null)
- out.oTag(i+3, "a").attrUri("href", m.resolveVars(link)).cTag();
+ out.oTag(i+3, "a").attrUri("href", link).cTag();
ContentResult cr = serializeAnything(out, value, cMeta, key, 2, pMeta, false);
if (cr == CR_NORMAL)
out.i(i+2);
@@ -502,7 +510,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
out.ie(i).eTag("table").nl(i);
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
+ @SuppressWarnings({ "rawtypes", "unchecked", "hiding" })
private void serializeCollection(HtmlWriter out, Object in, ClassMeta<?> sType,
ClassMeta<?> eType, String name, BeanPropertyMeta ppMeta) throws Exception {
@@ -586,15 +594,24 @@ public class HtmlSerializerSession extends XmlSerializerSession {
for (Object k : th) {
BeanMapEntry p = m2.getProperty(toString(k));
BeanPropertyMeta pMeta = p.getMeta();
- String link = pMeta.getClassMeta().isCollectionOrArray() ? null : getLink(pMeta);
Object value = p.getValue();
+
+ String link = null, anchorText = null;
+ if (! pMeta.getClassMeta().isCollectionOrArray()) {
+ link = m2.resolveVars(getLink(pMeta));
+ anchorText = m2.resolveVars(getAnchorText(pMeta));
+ }
+
+ if (anchorText != null)
+ value = anchorText;
+
String style = getStyle(this, pMeta, value);
out.oTag(i+2, "td");
if (style != null)
out.attr("style", style);
out.cTag();
if (link != null)
- out.oTag("a").attrUri("href", m2.resolveVars(link)).cTag();
+ out.oTag("a").attrUri("href", link).cTag();
ContentResult cr = serializeAnything(out, value, pMeta.getClassMeta(), p.getKey().toString(), 2, pMeta, false);
if (cr == CR_NORMAL)
out.i(i+2);
@@ -654,6 +671,10 @@ public class HtmlSerializerSession extends XmlSerializerSession {
return pMeta == null ? null : pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).getLink();
}
+ private static String getAnchorText(BeanPropertyMeta pMeta) {
+ return pMeta == null ? null : pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).getAnchorText();
+ }
+
/*
* Returns the table column headers for the specified collection of objects.
* Returns null if collection should not be serialized as a 2-dimensional table.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-core/src/main/java/org/apache/juneau/html/annotation/Html.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/annotation/Html.java b/juneau-core/src/main/java/org/apache/juneau/html/annotation/Html.java
index b385ac7..f87dfef 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/annotation/Html.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/annotation/Html.java
@@ -98,4 +98,24 @@ public @interface Html {
* </p>
*/
String link() default "";
+
+ /**
+ * Use the specified anchor text when serializing a URI.
+ *
+ * <p>
+ * The text can contain any bean property values resolved through variables of the form <js>"{property-name}"</js>.
+ *
+ * <h6 class='figure'>Example:</h6>
+ * <p class='bcode'>
+ * <jk>public class</jk> FileSpace {
+ *
+ * <ja>@Html</ja>(anchorText=<js>"drive/{drive}"</js>)
+ * <jk>public</jk> String getDrive() {
+ * ...;
+ * }
+ * }
+ * </p>
+ */
+ String anchorText() default "";
+
}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java
index 72ffcc8..00cbd6f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java
+++ b/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java
@@ -1010,6 +1010,9 @@ public final class StringUtils {
*/
public static String replaceVars(String s, Map<String,Object> m) {
+ if (s == null)
+ return null;
+
if (s.indexOf('{') == -1)
return s;
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-core/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/javadoc/overview.html b/juneau-core/src/main/javadoc/overview.html
index cbe82f4..0d9af96 100644
--- a/juneau-core/src/main/javadoc/overview.html
+++ b/juneau-core/src/main/javadoc/overview.html
@@ -6920,6 +6920,8 @@
<li>
New {@link org.apache.juneau.utils.CalendarUtils} class that encapsulates serialization/parsing logic from {@link org.apache.juneau.transforms.CalendarSwap} and
{@link org.apache.juneau.transforms.DateSwap}.
+ <li>
+ New annotation {@link org.apache.juneau.html.Html#anchorText}.
</ul>
<h6 class='topic'>org.apache.juneau.rest</h6>
@@ -6952,6 +6954,9 @@
</ul>
<li>
New tooltip template: {@link org.apache.juneau.rest.widget.Tooltip}
+ <li>
+ New dark theme:
+ <br><img src='doc-files/ReleaseNotes_632_DarkStyle.png'>
</ul>
<h6 class='topic'>org.apache.juneau.rest.microservice</h6>
@@ -6977,7 +6982,7 @@
<!-- ======================================================================================================== -->
<a id="6.3.1"></a>
- <h3 class='topic' onclick='toggle(this)'>6.3.1 (TBD)</h3>
+ <h3 class='topic' onclick='toggle(this)'>6.3.1 (Aug 1, 2017)</h3>
<div class='topic'>
<p>
Juneau 6.3.1 is a minor release.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
index cea6e5a..cc566f6 100755
--- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
+++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
@@ -115,7 +115,12 @@ public class RestMicroservice extends Microservice {
@Override /* Microservice */
public RestMicroservice start() throws Exception {
super.start();
- initLogging();
+ try {
+ initLogging();
+ } catch (Exception e) {
+ // If logging fails, just log a stack trace.
+ e.printStackTrace();
+ }
createServer();
startServer();
return this;
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
index 926b277..a189aff 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
@@ -195,7 +195,7 @@ import org.apache.juneau.xml.*;
"<h2>$R{methodSummary,$R{servletDescription}}</h2>",
"<a href='http://juneau.apache.org'><img src='$U{servlet:/htdocs/juneau.png}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/></a>"
},
- stylesheet="servlet:/styles/devops.css"
+ stylesheet="servlet:/styles/light.css"
),
// The location on the classpath or file system of the fav-icon.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java b/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
index 8780662..1affec4 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
@@ -250,7 +250,7 @@ import org.apache.juneau.xml.*;
"<h2>$R{methodSummary,$R{servletDescription}}</h2>",
"<a href='http://juneau.apache.org'><img src='$U{servlet:/htdocs/juneau.png}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/></a>"
},
- stylesheet="servlet:/styles/devops.css"
+ stylesheet="servlet:/styles/light.css"
),
favicon="htdocs/juneau.png",
staticFiles="{htdocs:'htdocs',styles:'styles'}"
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
index 7ba89d0..de6e7f6 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
@@ -50,7 +50,7 @@ import org.apache.juneau.utils.*;
*/
public class StyleMenuItem extends MenuItemWidget {
- private static final String[] BUILT_IN_STYLES = {"devops", "light", "original"};
+ private static final String[] BUILT_IN_STYLES = {"devops", "light", "original", "dark"};
@Override /* MenuItemWidget */
public String getLabel(RestRequest req) {
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4b4da6d8/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/dark.css
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/dark.css b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/dark.css
new file mode 100644
index 0000000..5237dc2
--- /dev/null
+++ b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/dark.css
@@ -0,0 +1,265 @@
+/***************************************************************************************************************************
+ * 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. *
+ ***************************************************************************************************************************/
+
+/**********************************************************************************************************************/
+/** Body **/
+/**********************************************************************************************************************/
+
+body {
+ background-color: #212121 ;
+ margin: 0px;
+ font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
+ color: #EEE;
+ height: 100%;
+}
+
+body {
+ font-size: 14px;
+}
+
+body textarea, body pre {
+ -moz-tab-size: 3;
+ -o-tab-size: 3;
+ -webkit-tab-size: 3;
+ tab-size: 3;
+}
+
+/**********************************************************************************************************************/
+/** Header **/
+/**********************************************************************************************************************/
+
+header {
+ background-color: #373a3c;
+}
+
+header * {
+ font-size: 14px;
+ color: #B3B3B3;
+ margin: 0px;
+ text-decoration: none;
+ font-weight: normal;
+}
+
+header h1 {
+ padding: 10px 20px;
+ font-size: 16px;
+ border-bottom: 2px solid #000000;
+ color: white;
+}
+
+header h2 {
+ padding: 10px 20px;
+ font-size: 14px;
+ border-bottom: 2px solid #000000;
+}
+
+/**********************************************************************************************************************/
+/** Nav **/
+/**********************************************************************************************************************/
+
+nav {
+ margin: 10px 20px 10px 20px;
+ color: #94A3AB;
+}
+
+nav>ol {
+ list-style-type: none;
+ margin: 0px 10px;
+ padding: 0px;
+}
+
+nav>ol>li {
+ display: inline;
+}
+
+nav li:not(:first-child):before {
+ content: " - ";
+}
+
+nav a {
+ font-size: 10pt;
+ color: #94A3AB;
+ text-decoration: none;
+ margin: 0px 15px;
+ text-transform: uppercase;
+ cursor: pointer;
+}
+
+nav a:active, nav a:hover {
+ color: white;
+ text-decoration: underline;
+}
+
+/**********************************************************************************************************************/
+/** Content **/
+/**********************************************************************************************************************/
+
+section {
+ display: table;
+ width: 100%;
+ margin-bottom: 50px;
+}
+
+article {
+ display: table-cell;
+}
+
+article * {
+ font-size: 9pt;
+ color: #EEE;
+}
+
+article div.data {
+ padding: 10px;
+ background-color: #373a3c;
+ border-radius: 4px;
+ margin: 20px;
+ display: inline-block;
+ box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
+ font-family: sans-serif;
+ color: #26343F;
+}
+
+article table {
+ border: none;
+}
+
+article th {
+ padding: 4px 8px;
+ font-weight: normal;
+ text-align: center;
+ background-color: #0275d8;
+}
+
+article td {
+ vertical-align: top;
+ border-bottom: 1px solid #000000;
+ border-right: 1px solid #000000;
+ padding: 2px 5px;
+}
+
+article ul {
+ margin: 0px;
+ padding-left: 20px;
+}
+
+article a {
+ color: #3d8bb5;
+ text-decoration: none;
+}
+
+article a:hover {
+ text-decoration: underline;
+}
+
+article iframe {
+ background-color: #F6F7F9;
+ border: 1px solid gray;
+ padding: 0px;
+ overflow: hidden;
+ width: 100%;
+ min-height: 400px;
+}
+
+aside {
+ display: table-cell;
+ vertical-align: top;
+ padding: 20px 20px;
+}
+
+/**********************************************************************************************************************/
+/** Footer **/
+/**********************************************************************************************************************/
+
+footer {
+ padding: 10px;
+ width: 100%;
+ bottom: 0;
+ position: fixed;
+ background-color: #373a3c;
+}
+
+/**********************************************************************************************************************/
+/** Popup windows **/
+/**********************************************************************************************************************/
+
+.popup-content {
+ display: none;
+ position: absolute;
+ background-color: #f4f6f9;
+ white-space: nowrap;
+ padding: 5px;
+ box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
+ z-index: 1;
+ margin-top: 10px;
+ border-radius: 4px;
+}
+
+.popup-content * {
+ color: black;
+ font-size: 11px;
+}
+
+.popup-content a:hover {
+ color: #94A3AB;
+}
+
+.popup-show {
+ display:block;
+}
+
+/**********************************************************************************************************************/
+/** Tooltips **/
+/**********************************************************************************************************************/
+
+.tooltip {
+ position: relative;
+ display: inline-block;
+}
+
+.tooltip .tooltiptext {
+ visibility: hidden;
+ background-color: #FEF9E7;
+ color: black;
+ padding: 5px;
+ border-radius: 6px;
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ margin-left: 30px;
+ box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
+ opacity: 0;
+ transition: opacity 0.5s;
+ font-weight: normal;
+}
+
+.tooltip:hover .tooltiptext {
+ visibility: visible;
+ opacity: 1;
+}
+
+.tooltiptext {
+ white-space: nowrap;
+ float: left;
+ border: 1px solid black;
+}
+
+/**********************************************************************************************************************/
+/** Other classes **/
+/**********************************************************************************************************************/
+
+.table {display:table;}
+.row {display:table-row;}
+.cell {display:table-cell;}
+.monospace {font-family:monospace;}
\ No newline at end of file