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>"<ul>"</js>, 055 * <js>" <li>Item 1"</js>, 056 * <js>" <li>Item 2"</js>, 057 * <js>" <li>Item 3"</js>, 058 * <js>"</ul>"</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>"<ul>"</js>, 103 * <js>" <li>Item 1"</js>, 104 * <js>" <li>Item 2"</js>, 105 * <js>" <li>Item 3"</js>, 106 * <js>"</ul>"</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>"<b>This interface is great!</b>"</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>"<link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'>"</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>"<h1>My own header</h1>"</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>"<p class='special-navigation'>This is my special navigation content</p>"</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>"<b>This interface is great!</b>"</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}