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