001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.juneau.html.annotation;
018
019import static java.lang.annotation.ElementType.*;
020import static java.lang.annotation.RetentionPolicy.*;
021
022import java.lang.annotation.*;
023
024import org.apache.juneau.*;
025import org.apache.juneau.annotation.*;
026import org.apache.juneau.html.*;
027import org.apache.juneau.svl.*;
028
029/**
030 * Annotation for specifying config properties defined in {@link HtmlSerializer}, {@link HtmlParser}, and {@link HtmlDocSerializer}.
031 *
032 * <p>
033 * Used primarily for specifying bean configuration properties on REST classes and methods.
034 *
035 * <h5 class='section'>See Also:</h5><ul>
036 *    <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
037 * </ul>
038 */
039@Target({TYPE,METHOD})
040@Retention(RUNTIME)
041@Inherited
042@ContextApply(HtmlDocConfigAnnotation.SerializerApply.class)
043public @interface HtmlDocConfig {
044
045   /**
046    * Optional rank for this config.
047    *
048    * <p>
049    * Can be used to override default ordering and application of config annotations.
050    *
051    * @return The annotation value.
052    */
053   int rank() default 0;
054
055   //-------------------------------------------------------------------------------------------------------------------
056   // HtmlDocSerializer
057   //-------------------------------------------------------------------------------------------------------------------
058
059   /**
060    * Aside section contents.
061    *
062    * <p>
063    * Allows you to specify the contents of the aside section on the HTML page.
064    * The aside section floats on the right of the page for providing content supporting the serialized content of
065    * the page.
066    *
067    * <h5 class='section'>Example:</h5>
068    * <p class='bjava'>
069    *    <ja>@HtmlDocConfig</ja>(
070    *       aside={
071    *          <js>"&lt;ul&gt;"</js>,
072    *          <js>" &lt;li&gt;Item 1"</js>,
073    *          <js>" &lt;li&gt;Item 2"</js>,
074    *          <js>" &lt;li&gt;Item 3"</js>,
075    *          <js>"&lt;/ul&gt;"</js>
076    *       }
077    *    )
078    * </p>
079    *
080    * <h5 class='section'>Notes:</h5><ul>
081    *    <li class='note'>
082    *       Format: HTML
083    *    <li class='note'>
084    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
085    *    <li class='note'>
086    *       A value of <js>"NONE"</js> can be used to force no value.
087    *    <li class='note'>
088    *       The parent value can be included by adding the literal <js>"INHERIT"</js> as a value.
089    *    <li class='note'>
090    *       Multiple values are combined with newlines into a single string.
091    *    <li class='note'>
092    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
093    *    <li class='note'>
094    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
095    *       parent class.
096    * </ul>
097    *
098    * <h5 class='section'>See Also:</h5><ul>
099    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#aside(String...)}
100    * </ul>
101    *
102    * @return The annotation value.
103    */
104   String[] aside() default {};
105
106   /**
107    * Float aside section contents.
108    *
109    * <p>
110    * Allows you to position the aside contents of the page around the main contents.
111    *
112    * <p>
113    * By default, the aside section is floated to the right.
114    *
115    * <h5 class='section'>Example:</h5>
116    * <p class='bjava'>
117    *  <ja>@HtmlDocConfig</ja>(
118    *       aside={
119    *          <js>"&lt;ul&gt;"</js>,
120    *          <js>" &lt;li&gt;Item 1"</js>,
121    *          <js>" &lt;li&gt;Item 2"</js>,
122    *          <js>" &lt;li&gt;Item 3"</js>,
123    *          <js>"&lt;/ul&gt;"</js>
124    *       },
125    *       asideFloat=<js>"TOP"</js>
126    *    )
127    * </p>
128    *
129    * <ul class='values'>
130    *    <li><js>"RIGHT"</js>
131    *    <li><js>"LEFT"</js>
132    *    <li><js>"TOP"</js>
133    *    <li><js>"BOTTOM"</js>
134    *    <li><js>"DEFAULT"</js> (defaults to <js>"RIGHT"</js>)
135    * </ul>
136    *
137    * <h5 class='section'>Notes:</h5><ul>
138    *    <li class='note'>
139    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
140    *    <li class='note'>
141    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
142    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
143    *       parent class.
144    * </ul>
145    *
146    * <h5 class='section'>See Also:</h5><ul>
147    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#asideFloat(AsideFloat)}
148    * </ul>
149    *
150    * @return The annotation value.
151    */
152   String asideFloat() default "DEFAULT";
153
154   /**
155    * Footer section contents.
156    *
157    * <p>
158    * Allows you to specify the contents of the footer section on the HTML page.
159    *
160    * <h5 class='section'>Example:</h5>
161    * <p class='bjava'>
162    *    <ja>@HtmlDocConfig</ja>(
163    *       footer={
164    *          <js>"&lt;b&gt;This interface is great!&lt;/b&gt;"</js>
165    *       }
166    *    )
167    * </p>
168    *
169    * <h5 class='section'>Notes:</h5><ul>
170    *    <li class='note'>
171    *       Format: HTML
172    *    <li class='note'>
173    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
174    *    <li class='note'>
175    *       A value of <js>"NONE"</js> can be used to force no value.
176    *    <li class='note'>
177    *       The parent value can be included by adding the literal <js>"INHERIT"</js> as a value.
178    *    <li class='note'>
179    *       Multiple values are combined with newlines into a single string.
180    *    <li class='note'>
181    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
182    *    <li class='note'>
183    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
184    *       parent class.
185    * </ul>
186    *
187    * <h5 class='section'>See Also:</h5><ul>
188    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#footer(String...)}
189    * </ul>
190    *
191    * @return The annotation value.
192    */
193   String[] footer() default {};
194
195   /**
196    * Additional head section content.
197    *
198    * <p>
199    * Adds the specified HTML content to the head section of the page.
200    *
201    * <h5 class='section'>Example:</h5>
202    * <p class='bjava'>
203    *    <ja>@HtmlDocConfig</ja>(
204    *       head={
205    *          <js>"&lt;link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'&gt;"</js>
206    *       }
207    *    )
208    * </p>
209    *
210    * <h5 class='section'>Notes:</h5><ul>
211    *    <li class='note'>
212    *       Format: HTML
213    *    <li class='note'>
214    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
215    *    <li class='note'>
216    *       A value of <js>"NONE"</js> can be used to force no value.
217    *    <li class='note'>
218    *       The head content from the parent can be included by adding the literal <js>"INHERIT"</js> as a value.
219    *    <li class='note'>
220    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
221    *    <li class='note'>
222    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
223    *       parent class.
224    * </ul>
225    *
226    * <h5 class='section'>See Also:</h5><ul>
227    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#head(String...)}
228    * </ul>
229    *
230    * @return The annotation value.
231    */
232   String[] head() default {};
233
234   /**
235    * Header section contents.
236    *
237    * <p>
238    * Allows you to override the contents of the header section on the HTML page.
239    * The header section normally contains the title and description at the top of the page.
240    *
241    * <h5 class='section'>Example:</h5>
242    * <p class='bjava'>
243    *    <ja>@HtmlDocConfig</ja>(
244    *       header={
245    *          <js>"&lt;h1&gt;My own header&lt;/h1&gt;"</js>
246    *       }
247    *    )
248    * </p>
249    *
250    * <h5 class='section'>Notes:</h5><ul>
251    *    <li class='note'>
252    *       Format: HTML
253    *    <li class='note'>
254    *       A value of <js>"NONE"</js> can be used to force no header.
255    *    <li class='note'>
256    *       The parent value can be included by adding the literal <js>"INHERIT"</js> as a value.
257    *    <li class='note'>
258    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
259    *    <li class='note'>
260    *       Multiple values are combined with newlines into a single string.
261    *    <li class='note'>
262    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
263    *    <li class='note'>
264    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
265    *       parent class if not overridden.
266    * </ul>
267    *
268    * <h5 class='section'>See Also:</h5><ul>
269    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#header(String...)}
270    * </ul>
271    *
272    * @return The annotation value.
273    */
274   String[] header() default {};
275
276   /**
277    * Nav section contents.
278    *
279    * <p>
280    * Allows you to override the contents of the nav section on the HTML page.
281    * The nav section normally contains the page links at the top of the page.
282    *
283    * <h5 class='section'>Example:</h5>
284    * <p class='bjava'>
285    *    <ja>@HtmlDocConfig</ja>(
286    *       nav={
287    *          <js>"&lt;p class='special-navigation'&gt;This is my special navigation content&lt;/p&gt;"</js>
288    *       }
289    *    )
290    * </p>
291    *
292    * <h5 class='section'>Notes:</h5><ul>
293    *    <li class='note'>
294    *       Format: HTML
295    *    <li class='note'>
296    *       When {@link #navlinks()} is also specified, this content is placed AFTER the navigation links.
297    *    <li class='note'>
298    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
299    *    <li class='note'>
300    *       A value of <js>"NONE"</js> can be used to force no value.
301    *    <li class='note'>
302    *       The parent value can be included by adding the literal <js>"INHERIT"</js> as a value.
303    *    <li class='note'>
304    *       Multiple values are combined with newlines into a single string.
305    *    <li class='note'>
306    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
307    *    <li class='note'>
308    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
309    *       parent class.
310    * </ul>
311    *
312    * <h5 class='section'>See Also:</h5><ul>
313    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#nav(String...)}
314    * </ul>
315    *
316    * @return The annotation value.
317    */
318   String[] nav() default {};
319
320   /**
321    * Page navigation links.
322    *
323    * <p>
324    * Adds a list of hyperlinks immediately under the title and description but above the content of the page.
325    *
326    * <p>
327    * This can be used to provide convenient hyperlinks when viewing the REST interface from a browser.
328    *
329    * <p>
330    * The value is an array of strings with two possible values:
331    * <ul>
332    *    <li>A key-value pair representing a hyperlink label and href:
333    *       <br><js>"google: http://google.com"</js>
334    *    <li>Arbitrary HTML.
335    * </ul>
336    *
337    * <p>
338    * Relative URLs are considered relative to the servlet path.
339    * For example, if the servlet path is <js>"http://localhost/myContext/myServlet"</js>, and the
340    * URL is <js>"foo"</js>, the link becomes <js>"http://localhost/myContext/myServlet/foo"</js>.
341    * Absolute (<js>"/myOtherContext/foo"</js>) and fully-qualified (<js>"http://localhost2/foo"</js>) URLs
342    * can also be used in addition to various other protocols specified by {@link UriResolver} such as
343    * <js>"servlet:/..."</js>.
344    *
345    * <h5 class='section'>Example:</h5>
346    * <p class='bjava'>
347    *    <ja>@HtmlDocConfig</ja>(
348    *       navlinks={
349    *          <js>"api: servlet:/api"</js>,
350    *          <js>"stats: servlet:/stats"</js>,
351    *          <js>"doc: doc"</js>
352    *       }
353    *    )
354    *    <jk>public class</jk> AddressBookResource <jk>extends</jk> BasicRestServlet {
355    * </p>
356    *
357    * <h5 class='section'>Notes:</h5><ul>
358    *    <li class='note'>
359    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
360    *    <li class='note'>
361    *       A value of <js>"NONE"</js> can be used to force no value.
362    *    <li class='note'>
363    *       The parent links can be included by adding the literal <js>"INHERIT"</js> as a value.
364    *       <br>Use the syntax <js>"key[index]: value"</js> or <js>"[index]: value"</js> to specify an index location
365    *       to place a link inside the list of parent links.
366    *    <li class='note'>
367    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/MarshallingUris">URIs</a> (e.g. <js>"servlet:/..."</js>, <js>"request:/..."</js>).
368    *    <li class='note'>
369    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
370    *    <li class='note'>
371    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
372    *       parent class.
373    * </ul>
374    *
375    * <h5 class='section'>See Also:</h5><ul>
376    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#navlinks(String...)}
377    * </ul>
378    *
379    * @return The annotation value.
380    */
381   String[] navlinks() default {};
382
383   /**
384    * No-results message.
385    *
386    * <p>
387    * Allows you to specify the string message used when trying to serialize an empty array or empty list.
388    *
389    * <h5 class='section'>Example:</h5>
390    * <p class='bjava'>
391    *    <ja>@HtmlDocConfig</ja>(
392    *       noResultsMessage=<js>"&lt;b&gt;This interface is great!&lt;/b&gt;"</js>
393    *    )
394    * </p>
395    *
396    * <h5 class='section'>Notes:</h5><ul>
397    *    <li class='note'>
398    *       Format: HTML
399    *    <li class='note'>
400    *       A value of <js>"NONE"</js> can be used to represent no value to differentiate it from an empty string.
401    *    <li class='note'>
402    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
403    * </ul>
404    *
405    * <h5 class='section'>See Also:</h5><ul>
406    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#noResultsMessage(String)}
407    * </ul>
408    *
409    * @return The annotation value.
410    */
411   String noResultsMessage() default "";
412
413   /**
414    * Prevent word wrap on page.
415    *
416    * <p>
417    * Adds <js>"* {white-space:nowrap}"</js> to the CSS instructions on the page to prevent word wrapping.
418    *
419    * <ul class='values'>
420    *    <li><js>"true"</js>
421    *    <li><js>"false"</js> (default)
422    * </ul>
423    *
424    * <h5 class='section'>Notes:</h5><ul>
425    *    <li class='note'>
426    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
427    * </ul>
428    *
429    * <h5 class='section'>See Also:</h5><ul>
430    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#nowrap()}
431    * </ul>
432    *
433    * @return The annotation value.
434    */
435   String nowrap() default "";
436
437   /**
438    * Resolve $ variables in serialized pojo.
439    *
440    * <ul class='values'>
441    *    <li><js>"true"</js>
442    *    <li><js>"false"</js> (default)
443    * </ul>
444    *
445    * <h5 class='section'>Notes:</h5><ul>
446    *    <li class='note'>
447    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
448    * </ul>
449    *
450    * <h5 class='section'>See Also:</h5><ul>
451    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#resolveBodyVars()}
452    * </ul>
453    *
454    * @return The annotation value.
455    */
456   String resolveBodyVars() default "";
457
458   /**
459    * Javascript code.
460    *
461    * <p>
462    * Adds the specified Javascript code to the HTML page.
463    *
464    * <h5 class='section'>Example:</h5>
465    * <p class='bjava'>
466    *    <ja>@HtmlDocConfig</ja>(
467    *       script={
468    *          <js>"alert('hello!');"</js>
469    *       }
470    *    )
471    * </p>
472    *
473    * <h5 class='section'>Notes:</h5><ul>
474    *    <li class='note'>
475    *       Format: Javascript
476    *    <li class='note'>
477    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
478    *    <li class='note'>
479    *       A value of <js>"NONE"</js> can be used to force no value.
480    *    <li class='note'>
481    *       The parent value can be included by adding the literal <js>"INHERIT"</js> as a value.
482    *    <li class='note'>
483    *       Multiple values are combined with newlines into a single string.
484    *    <li class='note'>
485    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
486    *    <li class='note'>
487    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
488    *       parent class.
489    * </ul>
490    *
491    * <h5 class='section'>See Also:</h5><ul>
492    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#script(String...)}
493    * </ul>
494    *
495    * @return The annotation value.
496    */
497   String[] script() default {};
498
499   /**
500    * CSS style code.
501    *
502    * <p>
503    * Adds the specified CSS instructions to the HTML page.
504    *
505    * <h5 class='section'>Example:</h5>
506    * <p class='bjava'>
507    *    <ja>@HtmlDocConfig</ja>(
508    *       style={
509    *          <js>"h3 { color: red; }"</js>,
510    *          <js>"h5 { font-weight: bold; }"</js>
511    *       }
512    *    )
513    * </p>
514    *
515    * <h5 class='section'>Notes:</h5><ul>
516    *    <li class='note'>
517    *       Format: CSS
518    *    <li class='note'>
519    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
520    *    <li class='note'>
521    *       A value of <js>"NONE"</js> can be used to force no value.
522    *    <li class='note'>
523    *       The parent value can be included by adding the literal <js>"INHERIT"</js> as a value.
524    *    <li class='note'>
525    *       Multiple values are combined with newlines into a single string.
526    *    <li class='note'>
527    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
528    *    <li class='note'>
529    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
530    *       parent class.
531    * </ul>
532    *
533    * <h5 class='section'>See Also:</h5><ul>
534    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#style(String...)}
535    * </ul>
536    *
537    * @return The annotation value.
538    */
539   String[] style() default {};
540
541   /**
542    * Stylesheet import URLs.
543    *
544    * <p>
545    * Adds a link to the specified stylesheet URL.
546    *
547    * <p>
548    * Note that this stylesheet is controlled by the <code><ja>@Rest</ja>.stylesheet()</code> annotation.
549    *
550    * <h5 class='section'>Notes:</h5><ul>
551    *    <li class='note'>
552    *       Format: URL
553    *    <li class='note'>
554    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>).
555    *    <li class='note'>
556    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
557    *    <li class='note'>
558    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
559    *       parent class.
560    * </ul>
561    *
562    * <h5 class='section'>See Also:</h5><ul>
563    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#stylesheet(String...)}
564    * </ul>
565    *
566    * @return The annotation value.
567    */
568   String[] stylesheet() default {};
569
570   /**
571    * HTML document template.
572    *
573    * <p>
574    * Specifies the template to use for serializing the page.
575    *
576    * <p>
577    * By default, the {@link BasicHtmlDocTemplate} class is used to construct the contents of the HTML page, but
578    * can be overridden with your own custom implementation class.
579    *
580    * <h5 class='section'>Example:</h5>
581    * <p class='bjava'>
582    *    <ja>@HtmlDocConfig</ja>(
583    *       template=MySpecialDocTemplate.<jk>class</jk>
584    *    )
585    * </p>
586    *
587    * <h5 class='section'>Notes:</h5><ul>
588    *    <li class='note'>
589    *       On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
590    *    <li class='note'>
591    *       On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
592    *       parent class.
593    * </ul>
594    *
595    * <h5 class='section'>See Also:</h5><ul>
596    *    <li class='jm'>{@link org.apache.juneau.html.HtmlDocSerializer.Builder#template(Class)}
597    * </ul>
598    *
599    * @return The annotation value.
600    */
601   Class<? extends HtmlDocTemplate> template() default HtmlDocTemplate.Void.class;
602
603   /**
604    * HTML Widgets.
605    *
606    * <p>
607    * Defines widgets that can be used in conjunction with string variables of the form <js>"$W{name}"</js>to quickly
608    * generate arbitrary replacement text.
609    *
610    * <p>
611    * Widgets resolve the following variables:
612    *
613    * <ul class='spaced-list'>
614    *    <li>
615    *       <js>"$W{name}"</js> - Contents returned by {@link HtmlWidget#getHtml(VarResolverSession)}.
616    * </ul>
617    *
618    * <p>
619    * The following examples shows how to associate a widget with a REST method and then have it rendered in the links
620    * and aside section of the page:
621    *
622    * <p class='bjava'>
623    *    <ja>@HtmlDocConfig</ja>(
624    *       widgets={
625    *          MyWidget.<jk>class</jk>
626    *       }
627    *       navlinks={
628    *          <js>"$W{MyWidget}"</js>
629    *       },
630    *       aside={
631    *          <js>"Check out this widget:  $W{MyWidget}"</js>
632    *       }
633    *    )
634    * </p>
635    *
636    * <h5 class='section'>Notes:</h5><ul>
637    *    <li class='note'>
638    *       Widgets are inherited from parent to child, but can be overridden by reusing the widget name.
639    *    <li class='note'>
640    *       Values are appended to the existing list.
641    * </ul>
642    *
643    * <h5 class='section'>See Also:</h5><ul>
644    *    <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlWidgets">Widgets</a>
645    * </ul>
646    *
647    * @return The annotation value.
648    */
649   Class<? extends HtmlWidget>[] widgets() default {};
650}