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