Repository: incubator-juneau Updated Branches: refs/heads/master f20625a7e -> b96f60147
Simplified MenuItemWidget. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/b96f6014 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/b96f6014 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/b96f6014 Branch: refs/heads/master Commit: b96f601477ae635ca7d03d4c70f9bd9a9e2f6be4 Parents: f20625a Author: JamesBognar <[email protected]> Authored: Thu Jul 13 16:34:46 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Thu Jul 13 16:34:46 2017 -0400 ---------------------------------------------------------------------- RELEASE-NOTES.txt | 10 + .../juneau/internal/StringBuilderWriter.java | 10 + .../apache/juneau/serializer/Serializer.java | 3 + .../juneau/serializer/SerializerSession.java | 6 + juneau-core/src/main/javadoc/overview.html | 31 ++- juneau-microservice-template/pom.xml | 4 +- .../juneau/rest/widget/ContentTypeMenuItem.java | 31 ++- .../juneau/rest/widget/MenuItemWidget.java | 88 ++++++-- .../juneau/rest/widget/QueryMenuItem.java | 12 +- .../juneau/rest/widget/StyleMenuItem.java | 24 +- .../juneau/rest/widget/QueryMenuItem.html | 217 +++++++++---------- 11 files changed, 264 insertions(+), 172 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/RELEASE-NOTES.txt ---------------------------------------------------------------------- diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 98cdd92..b8c5229 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -11,6 +11,16 @@ * specific language governing permissions and limitations under the License. * *************************************************************************************************************************** + +Release Notes - Juneau - Version 6.3.1 + +** Bug + * [JUNEAU-59] - Fix "Copyright (c) 2016, Apache Foundation" year in documentation. + +** Improvement + * [JUNEAU-58] - Embed HTML in @HtmlDoc.description + + Release Notes - Juneau - Version 6.3.0 ** Bug http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/juneau-core/src/main/java/org/apache/juneau/internal/StringBuilderWriter.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/StringBuilderWriter.java b/juneau-core/src/main/java/org/apache/juneau/internal/StringBuilderWriter.java index e83a85e..81bdda3 100644 --- a/juneau-core/src/main/java/org/apache/juneau/internal/StringBuilderWriter.java +++ b/juneau-core/src/main/java/org/apache/juneau/internal/StringBuilderWriter.java @@ -33,6 +33,16 @@ public final class StringBuilderWriter extends Writer { } /** + * Create a new string writer around an existing string builder. + * + * @param sb The string builder being wrapped. + */ + public StringBuilderWriter(StringBuilder sb) { + this.sb = sb; + lock = null; + } + + /** * Create a new string writer using the specified initial string-builder size. * * @param initialSize http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java b/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java index ac46f35..6e1d9d0 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java @@ -154,6 +154,7 @@ public abstract class Serializer extends CoreObject { * <li>{@link Writer} * <li>{@link OutputStream} - Output will be written as UTF-8 encoded stream. * <li>{@link File} - Output will be written as system-default encoded stream. + * <li>{@link StringBuilder} - Output will be written to the specified string builder. * </ul> * <br>Stream-based serializers can handle the following output class types: * <ul> @@ -181,6 +182,7 @@ public abstract class Serializer extends CoreObject { * <li>{@link Writer} * <li>{@link OutputStream} - Output will be written as UTF-8 encoded stream. * <li>{@link File} - Output will be written as system-default encoded stream. + * <li>{@link StringBuilder} - Output will be written to the specified string builder. * </ul> * <br>Stream-based serializers can handle the following output class types: * <ul> @@ -222,6 +224,7 @@ public abstract class Serializer extends CoreObject { * <li>{@link Writer} * <li>{@link OutputStream} - Output will be written as UTF-8 encoded stream. * <li>{@link File} - Output will be written as system-default encoded stream. + * <li>{@link StringBuilder} - Output will be written to the specified string builder. * </ul> * <br>Stream-based serializers can handle the following output class types: * <ul> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java index f3c03ff..66ff3e1 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java @@ -24,6 +24,7 @@ import java.util.*; import org.apache.juneau.*; import org.apache.juneau.http.*; +import org.apache.juneau.internal.*; import org.apache.juneau.transform.*; /** @@ -234,6 +235,11 @@ public class SerializerSession extends BeanSession { writer = new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream((File)output))); return writer; } + if (output instanceof StringBuilder) { + if (writer == null) + writer = new StringBuilderWriter((StringBuilder)output); + return writer; + } throw new SerializeException("Cannot convert object of type {0} to a Writer.", output.getClass().getName()); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/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 8a03c94..eb21b94 100644 --- a/juneau-core/src/main/javadoc/overview.html +++ b/juneau-core/src/main/javadoc/overview.html @@ -6813,6 +6813,7 @@ <h5 class='toc'>What's new in each release</h5> <ul class='toc'> + <li><p><a class='doclink' href='#6.3.2'>6.3.2 (TBD)</a></p> <li><p><a class='doclink' href='#6.3.1'>6.3.1 (TBD)</a></p> <li><p><a class='doclink' href='#6.3.0'>6.3.0 (Jun 30, 2017)</a></p> <li><p><a class='doclink' href='#6.2.0'>6.2.0 (Apr 28, 2017)</a></p> @@ -6882,10 +6883,34 @@ </ul> <!-- ======================================================================================================== --> + <a id="6.3.2"></a> + <h3 class='topic' onclick='toggle(this)'>6.3.2 (TBD)</h3> + <div class='topic'> + <p> + </p> + + <h6 class='topic'>org.apache.juneau</h6> + <ul class='spaced-list'> + <li> + Serializers can now serialize to {@link StringBuilder StringBuilders}. + </ul> + + <h6 class='topic'>org.apache.juneau.rest</h6> + <ul class='spaced-list'> + <li> + Simplified {@link org.apache.juneau.rest.widget.MenuItemWidget}. + <br>Exposes an abstract method {@link org.apache.juneau.rest.widget.MenuItemWidget#getContent()} that + can return raw HTML via readers or char-sequences, or any other object (such as HTML5 beans) that will + get converted to HTML using {@link org.apache.juneau.html.HtmlSerializer#DEFAULT}. + </ul> + </div> + + <!-- ======================================================================================================== --> <a id="6.3.1"></a> <h3 class='topic' onclick='toggle(this)'>6.3.1 (TBD)</h3> <div class='topic'> <p> + Juneau 6.3.1 is a minor release. </p> <h6 class='topic'>org.apache.juneau</h6> @@ -6928,10 +6953,8 @@ <br><img src='doc-files/ReleaseNotes_631_OriginalStyle.png'> <li> Simplified the stylesheets and HTML code. - <ul> - <li>Replaced <code><xt><a</xt> <xa>class</xa>=<xs>'link'</xs><xt>></xt></code> with just <code><xt><nav></xt>/<xt><a></xt></code>. - <li>The nav links are now an ordered list of elements. - </ul> + <br>For example, the nav links are now an ordered list of elements which makes rendering as as side-bar + (for example) easier to do in CSS. <li> Modifications to the following <ja>@HtmlDoc</ja> annotations: <ul> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/juneau-microservice-template/pom.xml ---------------------------------------------------------------------- diff --git a/juneau-microservice-template/pom.xml b/juneau-microservice-template/pom.xml index 7c49274..30fe508 100644 --- a/juneau-microservice-template/pom.xml +++ b/juneau-microservice-template/pom.xml @@ -26,11 +26,11 @@ <modelVersion>4.0.0</modelVersion> <groupId>juneau-microservice-template</groupId> <artifactId>juneau-microservice-template</artifactId> - <version>6.2.1</version> + <version>6.3.2</version> <name>Apache Juneau Microservice Template</name> <description>A template project developers use to start with to create a microservice.</description> <properties> - <juneau.version>6.2.1-incubating-SNAPSHOT</juneau.version> + <juneau.version>6.3.2-incubating-SNAPSHOT</juneau.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java index 195c7a6..43c896f 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java @@ -12,9 +12,12 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.widget; +import static org.apache.juneau.dto.html5.HtmlBuilder.*; + import java.net.*; import java.util.*; +import org.apache.juneau.dto.html5.*; import org.apache.juneau.http.*; import org.apache.juneau.rest.*; import org.apache.juneau.utils.*; @@ -55,28 +58,20 @@ import org.apache.juneau.utils.*; */ public class ContentTypeMenuItem extends MenuItemWidget { - /** - * Looks at the supported media types from the request and constructs a list of hyperlinks to render the data - * as plain-text. - */ - @Override /* Widget */ - public String getHtml(RestRequest req) throws Exception { - StringBuilder sb = new StringBuilder(); - sb.append("" - + "<div class='menu-item'>" - + "\n\t<a class='link' onclick='menuClick(this)'>content-types</a>" - + "\n\t<div class='popup-content'>" - ); + @Override /* MenuItemWidget */ + public String getLabel(RestRequest req) { + return "content-type"; + } + + @Override /* MenuItemWidget */ + public Div getContent(RestRequest req) { + Div div = div(); List<MediaType> l = new ArrayList<MediaType>(req.getSerializerGroup().getSupportedMediaTypes()); Collections.sort(l); for (MediaType mt : l) { URI uri = req.getUri(true, new AMap<String,String>().append("plainText","true").append("Accept",mt.toString())); - sb.append("\n\t\t<a class='link' href='").append(uri).append("'>").append(mt).append("</a><br>"); + div.children(a(uri, mt), br()); } - sb.append("" - + "\n\t</div>" - + "\n</div>" - ); - return sb.toString(); + return div; } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/juneau-rest/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java index 666da8c..e65ca3f 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java @@ -12,6 +12,10 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.widget; +import java.io.*; + +import org.apache.juneau.html.*; +import org.apache.juneau.internal.*; import org.apache.juneau.rest.*; /** @@ -19,32 +23,30 @@ import org.apache.juneau.rest.*; * * <p> * Defines some simple CSS and Javascript for enabling drop-down menus in the nav section of the page (although - * nothing keeps you from using it in an arbirary location in the page). + * nothing keeps you from using it in an arbitrary location in the page). * * <p> * The script specifies a <js>"menuClick(element)"</js> function that toggles the visibility of the next sibling of the * element. * * <p> - * Subclasses should implement a {@link #getHtml(RestRequest)} that returns the following content: - * <p class='bcode'> - * <xt><div</xt> <xa>class</xa>=<xs>'menu-item'</xs><xt>></xt> - * <xc><!-- Normally visible content with onclick='menuClick(this)' --></xc> - * <xt><div</xt> <xa>class</xa>=<xs>'popup-content'</xs><xt>></xt> - * <xc><!-- Normally hidden popup-content --></xc> - * <xt></div></xt> - * <xt></div></xt> - * </p> + * Subclasses should implement the following two methods: + * <ul> + * <li>{@link #getLabel(RestRequest)} - The menu item label. + * <li>{@link #getContent(RestRequest)} - The menu item content. * * <p> - * For example, to render a link that brings up a simple dialog: + * For example, to render a link that brings up a simple dialog in a div tag: * <p class='bcode'> - * <xt><div</xt> <xa>class</xa>=<xs>'menu-item'</xs><xt>></xt> - * <xt><a</xt> <xa>class</xa>=<xs>'link'</xs> <xa>onclick</xa>=<xs>'menuClick(this)'</xs><xt>></xt>my-menu-item<xt></a></xt> - * <xt><div</xt> <xa>class</xa>=<xs>'popup-content'</xs><xt>></xt> - * Surprise! - * <xt></div></xt> - * <xt></div></xt> + * <ja>@Override</ja> + * <jk>public</jk> String getLabel() { + * <jk>return</jk> <js>"my-menu-item"</js>; + * }; + * + * <ja>@Override</ja> + * <jk>public</jk> Div getLabel() { + * <jk>return</jk> Html5Builder.<jsm>div</jsm>(<js>"Surprise!"</js>).style(<js>"color:red"</js>); + * }; * </p> * * <p> @@ -56,7 +58,7 @@ public abstract class MenuItemWidget extends Widget { /** * Returns the Javascript needed for the show and hide actions of the menu item. */ - @Override + @Override /* Widget */ public String getScript(RestRequest req) throws Exception { return loadScript("MenuItemWidget.js"); } @@ -65,8 +67,56 @@ public abstract class MenuItemWidget extends Widget { * Defines a <js>"menu-item"</js> class that needs to be used on the outer element of the HTML returned by the * {@link #getHtml(RestRequest)} method. */ - @Override + @Override /* Widget */ public String getStyle(RestRequest req) throws Exception { return loadStyle("MenuItemWidget.css"); } + + @Override /* Widget */ + public String getHtml(RestRequest req) throws Exception { + StringBuilder sb = new StringBuilder(); + sb.append("" + + "<div class='menu-item'>" + + "\n\t<a class='link' onclick='menuClick(this)'>"+getLabel(req)+"</a>" + + "\n\t<div class='popup-content'>" + ); + Object o = getContent(req); + if (o instanceof Reader) + IOUtils.pipe((Reader)o, new StringBuilderWriter(sb)); + else if (o instanceof CharSequence) + sb.append((CharSequence)o); + else + HtmlSerializer.DEFAULT.serialize(getContent(req), sb); + sb.append("" + + "\n\t</div>" + + "\n</div>" + ); + return sb.toString(); + } + + /** + * The label for the menu item as it's rendered in the menu bar. + * + * @param req The HTTP request object. + * @return The menu item label. + * @throws Exception + */ + public abstract String getLabel(RestRequest req) throws Exception; + + /** + * The content of the popup. + * + * @param req The HTTP request object. + * @return + * The content of the popup. + * <br>Can be any of the following types: + * <ul> + * <li>{@link Reader} - Serialized directly to the output. + * <li>{@link CharSequence} - Serialized directly to the output. + * <li>Other - Serialized as HTML using {@link HtmlSerializer#DEFAULT}. + * </ul> + * Note that this includes any of the {@link org.apache.juneau.dto.html5} beans. + * @throws Exception + */ + public abstract Object getContent(RestRequest req) throws Exception; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryMenuItem.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryMenuItem.java b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryMenuItem.java index 4a71f8b..d4eab91 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryMenuItem.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryMenuItem.java @@ -76,11 +76,13 @@ public class QueryMenuItem extends MenuItemWidget { + loadStyle("QueryMenuItem.css"); } - /** - * Returns the HTML for rendering the query form and tooltips. - */ - @Override /* Widget */ - public String getHtml(RestRequest req) throws Exception { + @Override /* MenuItemWidget */ + public String getLabel(RestRequest req) throws Exception { + return "query"; + } + + @Override /* MenuItemWidget */ + public String getContent(RestRequest req) throws Exception { return loadHtml("QueryMenuItem.html"); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/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 c173829..7ba89d0 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 @@ -12,6 +12,9 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.widget; +import static org.apache.juneau.dto.html5.HtmlBuilder.*; + +import org.apache.juneau.dto.html5.*; import org.apache.juneau.rest.*; import org.apache.juneau.utils.*; @@ -49,26 +52,21 @@ public class StyleMenuItem extends MenuItemWidget { private static final String[] BUILT_IN_STYLES = {"devops", "light", "original"}; + @Override /* MenuItemWidget */ + public String getLabel(RestRequest req) { + return "styles"; + } /** * Looks at the supported media types from the request and constructs a list of hyperlinks to render the data * as plain-text. */ @Override /* Widget */ - public String getHtml(RestRequest req) throws Exception { - StringBuilder sb = new StringBuilder(); - sb.append("" - + "<div class='menu-item'>" - + "\n\t<a class='link' onclick='menuClick(this)'>styles</a>" - + "\n\t<div class='popup-content'>" - ); + public Div getContent(RestRequest req) throws Exception { + Div div = div(); for (String s : BUILT_IN_STYLES) { java.net.URI uri = req.getUri(true, new AMap<String,String>().append("stylesheet", "styles/"+s+".css")); - sb.append("\n\t\t<a class='link' href='").append(uri).append("'>").append(s).append("</a><br>"); + div.children(a(uri, s), br()); } - sb.append("" - + "\n\t</div>" - + "\n</div>" - ); - return sb.toString(); + return div; } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b96f6014/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryMenuItem.html ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryMenuItem.html b/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryMenuItem.html index a149ba9..f4be41c 100644 --- a/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryMenuItem.html +++ b/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryMenuItem.html @@ -13,114 +13,109 @@ * *************************************************************************************************************************** --> -<div class='menu-item'> - <a class='link' onclick='menuClick(this)'>query</a> - <div class='popup-content'> - <form style='margin:0px'> - <table> - <tr> - <th>Search:</th> - <td> - <input name="s" size="50" value='$R{query.s}'> - </td> - <td> - <div class="tooltip"> - <small>(?)</small> - <span class="tooltiptext"> - Comma-delimited list of key/value pair search terms. - <br> - <br>Keys are column names. Values are search terms. - <br> - <br><b>Example:</b> <code>[column1=foo*, column2<100, column3=2013-2016.06.30]</code> - <br> - <br><b>String fields:</b> - <br> - <code>'*'</code> represents any character - <br> - <code>'?'</code> represents one character - <br> - Use single or double quotes for phrases - <br> e.g. <code>[column='foo bar']</code> - The term 'foo bar' - <br> - Multiple search terms are ORed - <br> e.g. <code>[column=foo bar]</code> - 'foo' OR 'bar' - <br> - Prepend <code>'+'</code> on tokens that must match - <br> e.g. <code>[column=+foo* +*bar]</code> - Start with 'foo' AND end with 'bar'. - <br> - Prepend <code>'-'</code> on tokens that must not match - <br> e.g. <code>[column=+foo* -*bar]</code> - Start with 'foo' AND does not end with 'bar'. - <br> - <br><b>Numeric fields:</b> - <br><code>[column=123]</code> - A single number - <br><code>[column=1 2 3]</code> - Multiple numbers - <br><code>[column=1-100]</code> - Between two numbers - <br><code>[column=1-100 200-300]</code> - Two ranges of numbers - <br><code>[column>100]</code> - Greater than a number - <br><code>[column>=100]</code> - Greater than or equal to a number - <br><code>[column=!123]</code> - Not a specific number - <br> - <br><b>Date/Calendar fields:</b> - <br><code>[column=2001]</code> - A specific year - <br><code>[column=2001.01.01.10.50]</code> - A specific time - <br><code>[column>2001]</code> - After a specific year - <br><code>[column>=2001]</code> - During or after a specific year - <br><code>[column=2001-2003.06.30]</code> - A date range - <br><code>[column=2001 2003 2005]</code> - Multiple ORed dates - </span> - </div> - </td> - </tr> - <tr> - <th>View:</th> - <td> - <input name="v" size="50" value='$R{query.v}'> - </td> - <td> - <div class="tooltip"> - <small>(?)</small> - <span class="tooltiptext"> - Comma-delimited list of columns to display. - <br> - <br><b>Example:</b> <code>[column1, column2]</code> - </span> - </div> - </td> - </tr> - <tr> - <th>Sort:</th> - <td> - <input name="o" size="50" value='$R{query.o}'> - </td> - <td> - <div class="tooltip"> - <small>(?)</small> - <span class="tooltiptext"> - Comma-delimited list of columns to sort by. - <br>Columns can be suffixed with '-' to indicate descending order. - <br> - <br><b>Example:</b> <code>[column1, column2-]</code> - <br> - <br><b>Notes:</b> - <br> - Columns containing collections/arrays/lists are sorted by size. - </span> - </div> - </td> - </tr> - <tr> - <th>Page:</th> - <td> - Position: <input name='p' type='number' style='width:50px' step=20 min=0 value='$R{query.p}'> - Limit: <input name='l' type='number' style='width:50px' step=20 min=0 value='$R{query.l}'> - <span style='float:right'>Ignore-case: <input name='i' type='checkbox' value='true'></span> - </td> - <td> - </td> - </tr> - <tr> - <th> - - </th> - <td colspan='2' style='text-align:right'> - <input type='reset' value='Reset'> - <input type="submit" value='Submit'> - </td> - </tr> - </table> - </form> - </div> -</div> \ No newline at end of file +<form style='margin:0px'> + <table> + <tr> + <th>Search:</th> + <td> + <input name="s" size="50" value='$R{query.s}'> + </td> + <td> + <div class="tooltip"> + <small>(?)</small> + <span class="tooltiptext"> + Comma-delimited list of key/value pair search terms. + <br> + <br>Keys are column names. Values are search terms. + <br> + <br><b>Example:</b> <code>[column1=foo*, column2<100, column3=2013-2016.06.30]</code> + <br> + <br><b>String fields:</b> + <br> - <code>'*'</code> represents any character + <br> - <code>'?'</code> represents one character + <br> - Use single or double quotes for phrases + <br> e.g. <code>[column='foo bar']</code> - The term 'foo bar' + <br> - Multiple search terms are ORed + <br> e.g. <code>[column=foo bar]</code> - 'foo' OR 'bar' + <br> - Prepend <code>'+'</code> on tokens that must match + <br> e.g. <code>[column=+foo* +*bar]</code> - Start with 'foo' AND end with 'bar'. + <br> - Prepend <code>'-'</code> on tokens that must not match + <br> e.g. <code>[column=+foo* -*bar]</code> - Start with 'foo' AND does not end with 'bar'. + <br> + <br><b>Numeric fields:</b> + <br><code>[column=123]</code> - A single number + <br><code>[column=1 2 3]</code> - Multiple numbers + <br><code>[column=1-100]</code> - Between two numbers + <br><code>[column=1-100 200-300]</code> - Two ranges of numbers + <br><code>[column>100]</code> - Greater than a number + <br><code>[column>=100]</code> - Greater than or equal to a number + <br><code>[column=!123]</code> - Not a specific number + <br> + <br><b>Date/Calendar fields:</b> + <br><code>[column=2001]</code> - A specific year + <br><code>[column=2001.01.01.10.50]</code> - A specific time + <br><code>[column>2001]</code> - After a specific year + <br><code>[column>=2001]</code> - During or after a specific year + <br><code>[column=2001-2003.06.30]</code> - A date range + <br><code>[column=2001 2003 2005]</code> - Multiple ORed dates + </span> + </div> + </td> + </tr> + <tr> + <th>View:</th> + <td> + <input name="v" size="50" value='$R{query.v}'> + </td> + <td> + <div class="tooltip"> + <small>(?)</small> + <span class="tooltiptext"> + Comma-delimited list of columns to display. + <br> + <br><b>Example:</b> <code>[column1, column2]</code> + </span> + </div> + </td> + </tr> + <tr> + <th>Sort:</th> + <td> + <input name="o" size="50" value='$R{query.o}'> + </td> + <td> + <div class="tooltip"> + <small>(?)</small> + <span class="tooltiptext"> + Comma-delimited list of columns to sort by. + <br>Columns can be suffixed with '-' to indicate descending order. + <br> + <br><b>Example:</b> <code>[column1, column2-]</code> + <br> + <br><b>Notes:</b> + <br> - Columns containing collections/arrays/lists are sorted by size. + </span> + </div> + </td> + </tr> + <tr> + <th>Page:</th> + <td> + Position: <input name='p' type='number' style='width:50px' step=20 min=0 value='$R{query.p}'> + Limit: <input name='l' type='number' style='width:50px' step=20 min=0 value='$R{query.l}'> + <span style='float:right'>Ignore-case: <input name='i' type='checkbox' value='true'></span> + </td> + <td> + </td> + </tr> + <tr> + <th> + + </th> + <td colspan='2' style='text-align:right'> + <input type='reset' value='Reset'> + <input type="submit" value='Submit'> + </td> + </tr> + </table> +</form> \ No newline at end of file
