New toggle implementation

I made a new implementation of the XML/Java toggle (and added a third choice for having both available).

Changes to make a dynamic ToC work with content selection toggles

Various asciidoc and JavaScript changes to make the dynamic ToC (tocbot) work with the content toggle (XML or Java in this case but also more options in other projects).
This commit is contained in:
Jay Bryant
2017-12-28 11:54:18 -06:00
committed by Michael Minella
parent 54f3a5c837
commit 0d9f4ce6f1
23 changed files with 440 additions and 79 deletions

View File

@@ -629,6 +629,7 @@ asciidoctor {
from(sourceDir) {
include 'images/**'
include 'jsfiles/**'
include 'tocbot-3.0.2/**'
}
}
logDocuments = true
@@ -637,7 +638,7 @@ asciidoctor {
attributes 'icons': 'font',
'idprefix': '',
'idseparator': '-',
docinfo: '',
docinfo: 'shared',
revnumber: project.version,
sectanchors: '',
sectnums: '',

View File

@@ -6,7 +6,10 @@
== Common Batch Patterns
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
Some batch jobs can be assembled purely from off-the-shelf components in Spring Batch.
For instance, the `ItemReader` and `ItemWriter` implementations can be configured to

View File

@@ -0,0 +1,39 @@
<script type="text/javascript" src="tocbot-3.0.2/tocbot.js"></script>
<script type="text/javascript" >
// Tocbot dynamic TOC, works with tocbot 3.0.2
// Source: https://github.com/asciidoctor/asciidoctor/issues/699#issuecomment-321066006
var oldtoc = document.getElementById('toctitle').nextElementSibling;
var newtoc = document.createElement('div');
newtoc.setAttribute('id', 'tocbot');
newtoc.setAttribute('class', 'js-toc');
oldtoc.parentNode.replaceChild(newtoc, oldtoc);
tocbot.init({ contentSelector: '#content',
headingSelector: 'h1, h2, h3, h4, h5',
smoothScroll: false });
var handleTocRefresh = function() {
tocbot.refresh();
}
var handleTocOnResize = function() {
var width = window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
if (width < 768) {
tocbot.refresh({ contentSelector: '#content',
headingSelector: 'h1, h2, h3, h4, h5',
collapseDepth: 6,
activeLinkClass: 'ignoreactive',
throttleTimeout: 1000,
smoothScroll: false });
}
else {
tocbot.refresh({ contentSelector: '#content',
headingSelector: 'h1, h2, h3, h4, h5',
smoothScroll: false });
}
};
window.addEventListener('resize', handleTocOnResize);
window.addEventListener('tocRefresh', handleTocRefresh);
handleTocOnResize();
</script>

View File

@@ -0,0 +1,15 @@
<style>
#tocbot a.toc-link.node-name--H1{ font-style: italic }
@media screen{
#tocbot > ul.toc-list{ margin-bottom: 0.5em; margin-left: 0.125em }
#tocbot ul.sectlevel0, #tocbot a.toc-link.node-name--H1 + ul{
padding-left: 0 }
#tocbot a.toc-link{ height:100% }
.is-collapsible{ max-height:3000px; overflow:hidden; }
.is-collapsed{ max-height:0 }
.is-active-link{ font-weight:700 }
}
@media print{
#tocbot a.toc-link.node-name--H4{ display:none }
}
</style>

View File

@@ -6,7 +6,9 @@
== The Domain Language of Batch
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
To any experienced batch architect, the overall concepts of batch processing used in
Spring Batch should be familiar and comfortable. There are "Jobs" and "Steps" and

View File

@@ -1,6 +1,7 @@
:doctype: book
:toc: left
:toclevels: 4
:onlyonetoggle: true
include::header/index-header.adoc[]
@@ -36,4 +37,4 @@ include::schema-appendix.adoc[]
include::transaction-appendix.adoc[]
include::glossary.adoc[]
include::glossary.adoc[]

View File

@@ -6,7 +6,9 @@
== Configuring and Running a Job
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
In the <<domain.adoc#domainLanguageOfBatch,domain section>> , the overall
architecture design was discussed, using the following diagram as a
@@ -425,7 +427,7 @@ The `@EnableBatchProcessing` works similarly to the other
building batch jobs. Within this base configuration, an instance of
`StepScope` is created in addition to a number of beans made
available to be autowired:
* `JobRepository` - bean name "jobRepository"
@@ -449,7 +451,7 @@ The core interface for this configuration is the `BatchConfigurer`.
The default implementation provides the beans mentioned above and requires a
`DataSource` as a bean within the context to be provided. This data
source will be used by the JobRepository.
[NOTE]
@@ -1761,4 +1763,3 @@ If the process died (`"kill -9"` or server
status to `FAILED` if it is not restartable, or if
you know the restart data is valid. There is a utility in Spring Batch
Admin `JobService` to abort a job execution.

View File

@@ -0,0 +1,61 @@
$(document).ready(function(){
setJava();
// Initial cookie handler. This part remembers the reader's choice and sets the toggle
// accordingly.
var docToggleCookieString = Cookies.get("docToggle");
if (docToggleCookieString != null) {
if (docToggleCookieString === "xml") {
$("#xmlButton").prop("checked", true);
setXml();
} else if (docToggleCookieString === "java") {
$("#javaButton").prop("checked", true);
setJava();
} else if (docToggleCookieString === "both") {
$("#bothButton").prop("checked", true);
setBoth();
}
}
// Click handlers
$("#xmlButton").on("click", function() {
setXml();
});
$("#javaButton").on("click", function() {
setJava();
});
$("#bothButton").on("click", function() {
setBoth();
});
// Functions to do the work of handling the reader's choice, whether through a click
// or through a cookie. 3652 days is 10 years, give or take a leap day.
function setXml() {
$("*.xmlContent").show();
$("*.javaContent").hide();
$("*.javaContent > *").addClass("js-toc-ignore");
$("*.xmlContent > *").removeClass("js-toc-ignore");
window.dispatchEvent(new Event("tocRefresh"));
Cookies.set('docToggle', 'xml', { expires: 3652 });
};
function setJava() {
$("*.javaContent").show();
$("*.xmlContent").hide();
$("*.xmlContent > *").addClass("js-toc-ignore");
$("*.javaContent > *").removeClass("js-toc-ignore");
window.dispatchEvent(new Event("tocRefresh"));
Cookies.set('docToggle', 'java', { expires: 3652 });
};
function setBoth() {
$("*.javaContent").show();
$("*.xmlContent").show();
$("*.javaContent > *").removeClass("js-toc-ignore");
$("*.xmlContent > *").removeClass("js-toc-ignore");
window.dispatchEvent(new Event("tocRefresh"));
Cookies.set('docToggle', 'both', { expires: 3652 });
};
});

File diff suppressed because one or more lines are too long

View File

@@ -6,7 +6,9 @@
== JSR-352 Support
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
As of Spring Batch 3.0 support for JSR-352 has been fully implemented. This section is not a replacement for
the spec itself and instead, intends to explain how the JSR-352 specific concepts apply to Spring Batch.
@@ -66,7 +68,7 @@ The base context is not processed by the JSR-352 processors for things like prop
JSR-352 requires a very simple path to executing a batch job. The following code is all that is needed to
execute your first batch job:
[source, java]
@@ -78,7 +80,7 @@ jobOperator.start("myJob", new Properties());
While that is convenient for developers, the devil is in the details. Spring Batch bootstraps a bit of
infrastructure behind the scenes that a developer may want to override. The following is bootstrapped the
first time `BatchRuntime.getJobOperator()` is called:
|===============
|__Bean Name__|__Default Configuration__|__Notes__
|
@@ -87,10 +89,10 @@ While that is convenient for developers, the devil is in the details. Spring Ba
Apache DBCP BasicDataSource with configured values.
|
By default, HSQLDB is bootstrapped.
|`transactionManager`|`org.springframework.jdbc.datasource.DataSourceTransactionManager`|
References the dataSource bean defined above.
|
A Datasource initializer
||
@@ -98,7 +100,7 @@ While that is convenient for developers, the devil is in the details. Spring Ba
`batch.drop.script` and `batch.schema.script` properties. By
default, the schema scripts for HSQLDB are executed. This behavior can be disabled via
`batch.data.source.init` property.
|
jobRepository
|
@@ -107,32 +109,32 @@ While that is convenient for developers, the devil is in the details. Spring Ba
This `JobRepository` uses the previously mentioned data source and transaction
manager. The schema's table prefix is configurable (defaults to BATCH_) via the
`batch.table.prefix` property.
|
jobLauncher
|`org.springframework.batch.core.launch.support.SimpleJobLauncher`|
Used to launch jobs.
|
batchJobOperator
|`org.springframework.batch.core.launch.support.SimpleJobOperator`|
The `JsrJobOperator` wraps this to provide most of it's functionality.
|
jobExplorer
|`org.springframework.batch.core.explore.support.JobExplorerFactoryBean`|
Used to address lookup functionality provided by the `JsrJobOperator`.
|
jobParametersConverter
|`org.springframework.batch.core.jsr.JsrJobParametersConverter`|
JSR-352 specific implementation of the `JobParametersConverter`.
|
jobRegistry
|`org.springframework.batch.core.configuration.support.MapJobRegistry`|
Used by the `SimpleJobOperator`.
|
placeholderProperties
|`org.springframework.beans.factory.config.PropertyPlaceholderConfigure`|
@@ -140,13 +142,13 @@ While that is convenient for developers, the devil is in the details. Spring Ba
the properties mentioned above. ENVIRONMENT is a System property (defaults to hsql)
that can be used to specify any of the supported databases Spring Batch currently
supports.
|===============
[NOTE]
@@ -249,7 +251,7 @@ To use the thread context class loader approach, all you need to do is provide t
<batchlet ref="io.spring.FooBatchlet" />
</step>
</job>
----
[[jsrJobProperties]]
@@ -335,7 +337,7 @@ this example, the result will resolve to a value of the system property file.sep
#{jobParameters['unresolving.prop']} is assumed to not be resolvable. If neither expressions can be
resolved, an empty String will be returned. Multiple conditions can be used, which are separated by a
';'.
[[jsrProcessingModels]]
@@ -345,7 +347,7 @@ resolved, an empty String will be returned. Multiple conditions can be used, whi
JSR-352 provides the same two basic processing models that Spring Batch does:
* Item based processing - Using an `javax.batch.api.chunk.ItemReader`, an
optional `javax.batch.api.chunk.ItemProcessor`, and an
`javax.batch.api.chunk.ItemWriter`.
@@ -357,7 +359,7 @@ JSR-352 provides the same two basic processing models that Spring Batch does:
currently available.
@@ -367,7 +369,7 @@ Item based processing in this context is a chunk size being set by the number of
`ItemReader`. To configure a step this way, specify the
`item-count` (which defaults to 10) and optionally configure the
`checkpoint-policy` as item (this is the default).
[source, xml]
@@ -388,7 +390,7 @@ If item based checkpointing is chosen, an additional attribute `time-limit` is
supported. This sets a time limit for how long the number of items specified has to be processed. If
the timeout is reached, the chunk will complete with however many items have been read by then
regardless of what the `item-count` is configured to be.
@@ -402,7 +404,7 @@ JSR-352 calls the process around the commit interval within a step "checkpointin
implementation of `CheckpointAlgorithm`, configure your step with the custom
`checkpoint-policy` as shown below where fooCheckpointer refers to an
implementation of `CheckpointAlgorithm`.
[source, xml]
@@ -436,18 +438,18 @@ The entrance to executing a JSR-352 based job is through the
JobOperator jobOperator = BatchRuntime.getJobOperator();
long jobExecutionId = jobOperator.start("fooJob", new Properties());
----
The above code does the following:
* Bootstraps a base `ApplicationContext` - In order to provide batch functionality, the framework
needs some infrastructure bootstrapped. This occurs once per JVM. The components that are
bootstrapped are similar to those provided by `@EnableBatchProcessing`.
Specific details can be found in the javadoc for the `JsrJobOperator`.
* Loads an `ApplicationContext` for the job requested - In the example
@@ -459,7 +461,7 @@ The above code does the following:
`JobExecution's` id will be returned.
[NOTE]
@@ -474,7 +476,7 @@ When `JobOperator#start` is called using `SimpleJobOperator`,
framework will always create a new JobInstance (JSR-352 job parameters are
non-identifying). In order to restart a job, a call to
`JobOperator#restart(long executionId, Properties restartParameters)` is required.
[[jsrContexts]]
@@ -496,7 +498,7 @@ To obtain a reference to the `JobContext` or `StepContext`
----
@Inject
JobContext jobContext;
----
@@ -522,7 +524,7 @@ Within a JSR-352 based job, the flow of steps works similarly as it does within
However, there are a few subtle differences:
* Decision's are steps - In a regular Spring Batch job, a decision is a state that does not
have an independent `StepExecution` or any of the rights and
responsibilities that go along with being a full step.. However, with JSR-352, a decision
@@ -541,7 +543,7 @@ Within a JSR-352 based job, the flow of steps works similarly as it does within
evaluate transition elements in the order they are specified in the XML.
[[jsrScaling]]
@@ -550,7 +552,7 @@ Within a JSR-352 based job, the flow of steps works similarly as it does within
Traditional Spring Batch jobs have four ways of scaling (the last two capable of being executed across
multiple JVMs):
* Split - Running multiple steps in parallel.
@@ -563,18 +565,18 @@ Traditional Spring Batch jobs have four ways of scaling (the last two capable of
* Remote Chunking - Executing the processor piece of logic remotely.
JSR-352 provides two options for scaling batch jobs. Both options support only a single JVM:
* Split - Same as Spring Batch
* Partitioning - Conceptually the same as Spring Batch however implemented slightly different.
[[jsrPartitioning]]
@@ -584,7 +586,7 @@ JSR-352 provides two options for scaling batch jobs. Both options support only
Conceptually, partitioning in JSR-352 is the same as it is in Spring Batch. Meta-data is provided
to each slave to identify the input to be processed with the slaves reporting back to the master the
results upon completion. However, there are some important differences:
* Partitioned `Batchlet` - This will run multiple instances of the
configured `Batchlet` on multiple threads. Each instance will have
it's own set of properties as provided by the JSL or the
@@ -595,7 +597,7 @@ Conceptually, partitioning in JSR-352 is the same as it is in Spring Batch. Met
`ExecutionContext` is provided for each partition. With JSR-352, a
single `javax.batch.api.partition.PartitionPlan` is provided with an
array of `Properties` providing the meta-data for each partition.
* `PartitionMapper` - JSR-352 provides two ways to generate partition
@@ -625,7 +627,7 @@ via the `JobExplorer` and Spring Batch Admin.
handle compensating logic if something goes wrong. However, since the slaves JSR-352
provides a collection of other components for the ability to provide compensating logic when
errors occur and to dynamically set the exit status. These components include the following:
|===============
|__Artifact Interface__|__Description__
|`javax.batch.api.partition.PartitionCollector`|Provides a way for slave steps to send information back to the
@@ -648,4 +650,3 @@ Since all JSR-352 based jobs are executed asynchronously, it can be difficult to
`org.springframework.batch.core.jsr.JsrTestUtils`. This utility class provides the
ability to start a job and restart a job and wait for it to complete. Once the job completes, the
associated `JobExecution` is returned.

View File

@@ -5,7 +5,9 @@
[[readersAndWriters]]
== ItemReaders and ItemWriters
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
All batch processing can be described in its most simple form as reading in large amounts
of data, performing some type of calculation or transformation, and writing the result

View File

@@ -6,7 +6,9 @@
== Repeat
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
[[repeatTemplate]]

View File

@@ -6,7 +6,9 @@
== Retry
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
To make processing more robust and less prone to failure, it sometimes
helps to automatically retry a failed operation in case it might

View File

@@ -6,7 +6,9 @@
== Scaling and Parallel Processing
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
Many batch processing problems can be solved with single threaded, single process jobs,
so it is always a good idea to properly check if that meets your needs before thinking

View File

@@ -6,7 +6,9 @@
== Spring Batch Integration
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
[[spring-batch-integration-introduction]]

View File

@@ -5,7 +5,9 @@
[[configureStep]]
== Configuring a `Step`
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
As discussed in <<domain.adoc#domainLanguageOfBatch,the domain chapter>>, a `Step` is a
domain object that encapsulates an independent, sequential phase of a batch job and

View File

@@ -691,3 +691,111 @@ b.conum * { color: inherit !important; }
.admonitionblock > table td.content { border-left: none; }
.js-download-widget-selector{display:inline;}.navbar{margin-bottom:0;}.item-slider-widget{display:inline-block;margin-left:15px;}.item-slider-widget .item--slider{height:32px;position:absolute;width:40px;border-radius:2px;margin-top:-4px;z-index:800;background:#68605a;background:-moz-linear-gradient(top,#68605a 0%,#34302d 100%,#020202 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#68605a),color-stop(100%,#34302d),color-stop(100%,#020202));background:-webkit-linear-gradient(top,#68605a 0%,#34302d 100%,#020202 100%);background:-o-linear-gradient(top,#68605a 0%,#34302d 100%,#020202 100%);background:-ms-linear-gradient(top,#68605a 0%,#34302d 100%,#020202 100%);background:linear-gradient(to bottom,#68605a 0%,#34302d 100%,#020202 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#68605a',endColorstr='#020202',GradientType=0);cursor:pointer;transition:all 0.25s;-webkit-transition:all 0.25s;-moz-webkit-transition:all 0.25s;-ms--webkit-transition:all 0.25s;-o-webkit-transition:all 0.25s;}.item-slider-widget .item-slider--container{background-color:white;border:1px solid #999;padding:0 3px;}.item-slider-widget .item-slider--container .item{display:inline-block;color:#c3c3c3;font-family:"Montserrat",sans-serif;font-size:12px;line-height:12px;text-transform:uppercase;padding:7px 6px 5px;cursor:pointer;transition:color 0.25s;-webkit-transition:color 0.25s;-moz-webkit-transition:color 0.25s;-ms--webkit-transition:color 0.25s;-o-webkit-transition:color 0.25s;}.item-slider-widget .item-slider--container .item:hover{color:black;}.item-slider-widget .item-slider--container .item.js-active{z-index:801;position:relative;color:#f1f1f1;}
/* Styling for the toggle buttons */
/* Borrowed from http://jeremyworboys.com/writing/toggle-buttons-without-javascript */
/* Micro clearfix (http://nicolasgallagher.com/micro-clearfix-hack/) */
.cf:before,.cf:after{content:"";display:table}.cf:after{clear:both}.cf{zoom:1}
/* = Function = */
.docToggle-button input {
display: none;
}
.docToggle-button label {
background: #ccc;
border: 1px solid #888;
color: #666;
padding: 5px 10px;
}
.docToggle-button label:hover {
background-color: #ddd;
}
.docToggle-button label:active,
.docToggle-button input:focus + label {
background-color: #aaa;
}
.docToggle-button input:checked + label {
background-color: #b4b4b4;
}
.docToggle-button label {
background-color: #f5f5f5;
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
background-image: linear-gradient(top, #ffffff, #e6e6e6);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
border: 1px solid #cccccc;
border-bottom-color: #b3b3b3;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
color: #333333;
cursor: pointer;
display: inline-block;
margin-bottom: 0;
margin-left: -1px;
padding: 4px 10px;
font-size: 13px;
line-height: 18px;
text-align: center;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
vertical-align: middle;
}
.docToggle-button label:hover {
background-color: #e6e6e6;
background-position: 0 -15px;
color: #333333;
text-decoration: none;
-webkit-transition: background-position 0.1s linear;
-moz-transition: background-position 0.1s linear;
-ms-transition: background-position 0.1s linear;
-o-transition: background-position 0.1s linear;
transition: background-position 0.1s linear;
}
.docToggle-button label:active,
.docToggle-button input:focus + label {
background-color: #d9d9d9;
background-image: none;
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
outline: 0;
}
.docToggle-button input:checked + label {
background: #404040;
color: #ffffff;
-webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
}
.docToggle-button:first-child label {
-webkit-border-top-left-radius: 4px;
-moz-border-radius-topleft: 4px;
border-top-left-radius: 4px;
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomleft: 4px;
border-bottom-left-radius: 4px;
margin-left: 0;
}
.docToggle-button:last-child label {
-webkit-border-top-right-radius: 4px;
-moz-border-radius-topright: 4px;
border-top-right-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
-moz-border-radius-bottomright: 4px;
border-bottom-right-radius: 4px;
-webkit-border-top-left-radius: 4px;
-moz-border-radius-topleft: 4px;
border-top-left-radius: 4px;
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomleft: 4px;
border-bottom-left-radius: 4px;
}

View File

@@ -6,7 +6,9 @@
== Unit Testing
ifndef::onlyonetoggle[]
include::toggle.adoc[]
endif::onlyonetoggle[]
As with other application styles, it is extremely important to
unit test any code written as part of a batch job. The Spring core

View File

@@ -0,0 +1 @@
.transition--300{transition:all 300ms ease-in-out}.toc{height:100%;width:280px;transform:translateX(0)}.content h1:first-child,.content h2:first-child{padding-top:0;margin-top:0}.title{font-size:3em}.content{margin-bottom:95vh}.content ul,.content ol{list-style:inherit}.content a{color:#0977c3;text-decoration:none;border-bottom:1px solid #EEE;transition:all 300ms ease}.content a.no-decoration{border-bottom:0}.content a:hover{border-bottom:1px solid #0977c3}.content a:hover.no-decoration{border-bottom:0}a.toc-link{text-decoration:none}.try-it-container{transform:translateY(84%)}.try-it-container.is-open{transform:translateY(0%)}.page-content{display:block !important}.hljs{display:block;background:white;padding:0.5em;color:#333333;overflow-x:auto}.hljs-comment,.hljs-meta{color:#969896}.hljs-string,.hljs-variable,.hljs-template-variable,.hljs-strong,.hljs-emphasis,.hljs-quote{color:#df5000}.hljs-keyword,.hljs-selector-tag,.hljs-type{color:#a71d5d}.hljs-literal,.hljs-symbol,.hljs-bullet,.hljs-attribute{color:#0086b3}.hljs-section,.hljs-name{color:#63a35c}.hljs-tag{color:#333333}.hljs-title,.hljs-attr,.hljs-selector-id,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo{color:#795da3}.hljs-addition{color:#55a532;background-color:#eaffea}.hljs-deletion{color:#bd2c00;background-color:#ffecec}.hljs-link{text-decoration:underline}.toc-icon{position:fixed;top:0;right:0}#toc:checked ~ .toc{box-shadow:0 0 5px #c8c8c8;transform:translateX(0)}.toc{background-color:rgba(255,255,255,0.9);transform:translateX(-100%)}.toc.toc-right{transform:translateX(100%);right:0}@media (min-width: 52em){.toc{transform:translateX(0)}.toc.toc-right{transform:translateX(0);right:calc((100% - 48rem - 4rem) / 2)}.toc-icon{display:none}.try-it-container{display:block}.content{margin-left:280px}.toc-right ~ .content{margin-left:0;margin-right:280px}}*{box-sizing:border-box}body{font-size:1.2rem;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif}h1,h2,h3,h4,h5,h6{padding-top:0.5em}p{margin-top:0.25rem}pre{display:block;background:#f7f7f7;border-radius:2px;border:1px solid #e0e0e0;padding:2px;line-height:1.2;margin-bottom:10px;overflow:auto;white-space:pre-wrap}code{display:inline;font-size:.8em;max-width:100%}

View File

@@ -0,0 +1 @@
.toc{overflow-y:auto}.toc>ul{overflow:hidden;position:relative}.toc>ul li{list-style:none}.toc-list{margin:0;padding-left:10px}a.toc-link{color:currentColor;height:100%}.is-collapsible{max-height:1000px;overflow:hidden;transition:all 300ms ease-in-out}.is-collapsed{max-height:0}.is-position-fixed{position:fixed !important;top:0}.is-active-link{font-weight:700}.toc-link::before{background-color:#EEE;content:' ';display:inline-block;height:inherit;left:0;margin-top:-1px;position:absolute;width:2px}.is-active-link::before{background-color:#54BC4B}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,42 +1,14 @@
ifdef::backend-html5[]
+++
<div class="toggleWidget">
<script src="./jsfiles/jquery.js"></script>
<script src="./jsfiles/underscore.js"></script>
<script src="./jsfiles/backbone.js"></script>
<script src="./jsfiles/js.cookie.js"></script>
<script src="./jsfiles/projectDocumentationWidget.js"></script>
<script src="./jsfiles/application.js"></script>
<div code-widget-controls="" style="display: inline-block">
<div class="item-slider-widget js-item-slider--wrapper">
<div class="item-slider--container">
<div class="item--slider js-item--slider"
style="width: 57px; margin-left: 0.01555px;"></div>
<div class="item js-item" data-snippet-type="java">
Java
</div>
<div class="item js-item" data-snippet-type="xml">
XML
</div>
</div>
</div>
</div>
<div class="code-widget--body">
<div class="js-code-maven-widget"></div>
</div>
<script type="text/html" id="code-widget-controls-template">
<div class="item-slider-widget js-item-slider--wrapper">
<div class="item-slider--container">
<div class="item--slider js-item--slider"></div>
<div class="item js-item java_snip_item" data-snippet-type='java'>
Java
</div>
<div class="item js-item xml_snip_item" data-snippet-type='xml'>
XML
</div>
</div>
</div>
</script>
<div>
<script type="text/javascript" src="jsfiles/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="jsfiles/js.cookie.js"></script>
<script type="text/javascript" src="jsfiles/DocumentToggle.js"></script>
<div class="docToggle-button">
<input id="xmlButton" type="radio" name="docToggle" value="XML"><label for="xmlButton">XML</label>
<input id="javaButton" type="radio" name="docToggle" value="Java" checked><label for="javaButton">Java</label>
<!-- <input id="bothButton" type="radio" name="docToggle" value="Both" checked><label for="bothButton">Both</label> -->
</div>
</div>
+++
endif::backend-html5[]