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