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 <[email protected]>
Authored: Thu Aug 3 16:23:46 2017 -0400
Committer: JamesBognar <[email protected]>
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

Reply via email to