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>"<ul>"</js>, 072 * <js>" <li>Item 1"</js>, 073 * <js>" <li>Item 2"</js>, 074 * <js>" <li>Item 3"</js>, 075 * <js>"</ul>"</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>"<ul>"</js>, 120 * <js>" <li>Item 1"</js>, 121 * <js>" <li>Item 2"</js>, 122 * <js>" <li>Item 3"</js>, 123 * <js>"</ul>"</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>"<b>This interface is great!</b>"</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>"<link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'>"</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>"<h1>My own header</h1>"</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>"<p class='special-navigation'>This is my special navigation content</p>"</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>"<b>This interface is great!</b>"</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}