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.bean.html5; 018 019import java.net.*; 020 021import org.apache.juneau.*; 022import org.apache.juneau.annotation.*; 023import org.apache.juneau.internal.*; 024 025/** 026 * DTO for an HTML <a class="doclink" href="https://www.w3.org/TR/html5/text-level-semantics.html#the-a-element"><a></a> 027 * element. 028 * 029 * <p> 030 * The anchor element creates a hyperlink to other web pages, files, locations within the same page, 031 * email addresses, or any other URL. It is one of the most fundamental elements for web navigation. 032 * 033 * <h5 class='section'>Examples:</h5> 034 * <p class='bcode w800'> 035 * <jc>// Simple link to another page</jc> 036 * A <jv>a1</jv> = <jsm>a</jsm>().href(<js>"https://example.com"</js>).text(<js>"Visit Example"</js>); 037 * 038 * <jc>// Link with target to open in new window</jc> 039 * A <jv>a2</jv> = <jsm>a</jsm>().href(<js>"https://example.com"</js>).target(<js>"_blank"</js>).text(<js>"Open in New Window"</js>); 040 * 041 * <jc>// Email link</jc> 042 * A <jv>a3</jv> = <jsm>a</jsm>().href(<js>"mailto:user@example.com"</js>).text(<js>"Send Email"</js>); 043 * 044 * <jc>// Link with relationship and language</jc> 045 * A <jv>a4</jv> = <jsm>a</jsm>().href(<js>"https://example.com"</js>).rel(<js>"nofollow"</js>).hreflang(<js>"en"</js>).text(<js>"English Version"</js>); 046 * </p> 047 * 048 * <p> 049 * The following convenience methods are provided for constructing instances of this bean: 050 * <ul class='javatree'> 051 * <li class='jc'>{@link HtmlBuilder} 052 * <ul class='javatree'> 053 * <li class='jm'>{@link HtmlBuilder#a() a()} 054 * <li class='jm'>{@link HtmlBuilder#a(Object, Object...) a(Object, Object...)} 055 * </ul> 056 * </ul> 057 * </p> 058 * 059 * <h5 class='section'>See Also:</h5><ul> 060 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanHtml5">juneau-bean-html5</a> 061 * </ul> 062 */ 063@Bean(typeName="a") 064public class A extends HtmlElementMixed { 065 066 /** 067 * Creates an empty {@link A} element. 068 */ 069 public A() {} 070 071 /** 072 * Creates an {@link A} element with the specified {@link A#href(Object)} attribute and {@link A#children(Object[])} 073 * nodes. 074 * 075 * @param href The {@link A#href(Object)} attribute. 076 * @param children The {@link A#children(Object[])} nodes. 077 */ 078 public A(Object href, Object[] children) { 079 href(href).children(children); 080 } 081 082 /** 083 * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-download">download</a> attribute. 084 * 085 * <p> 086 * Whether to download the resource instead of navigating to it, and its file name if so. 087 * 088 * @param download 089 * The new value for this attribute. 090 * Typically a {@link Boolean} or {@link String}. 091 * @return This object. 092 */ 093 public A download(Object value) { 094 attr("download", value); 095 return this; 096 } 097 098 /** 099 * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-href">href</a> attribute. 100 * 101 * <p> 102 * Address of the hyperlink. 103 * 104 * <p> 105 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}. 106 * Strings must be valid URIs. 107 * 108 * <p> 109 * URIs defined by {@link UriResolver} can be used for values. 110 * 111 * @param href 112 * The new value for this attribute. 113 * Typically a {@link URL} or {@link String}. 114 * @return This object. 115 */ 116 public A href(Object value) { 117 attrUri("href", value); 118 return this; 119 } 120 121 /** 122 * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-hreflang">hreflang</a> attribute. 123 * 124 * <p> 125 * Specifies the language of the linked resource. Used for SEO and accessibility purposes. 126 * 127 * <p> 128 * Examples: 129 * <ul> 130 * <li><js>"en"</js> - English</li> 131 * <li><js>"es"</js> - Spanish</li> 132 * <li><js>"fr"</js> - French</li> 133 * <li><js>"de"</js> - German</li> 134 * <li><js>"zh"</js> - Chinese</li> 135 * <li><js>"ja"</js> - Japanese</li> 136 * </ul> 137 * 138 * @param hreflang The language code of the linked resource. 139 * @return This object. 140 */ 141 public A hreflang(String value) { 142 attr("hreflang", value); 143 return this; 144 } 145 146 /** 147 * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-rel">rel</a> attribute. 148 * 149 * <p> 150 * Specifies the relationship between the current document and the linked resource. 151 * 152 * <p> 153 * Common values: 154 * <ul> 155 * <li><js>"alternate"</js> - Alternative version of the page</li> 156 * <li><js>"author"</js> - Link to the author of the page</li> 157 * <li><js>"bookmark"</js> - Permalink for bookmarking</li> 158 * <li><js>"external"</js> - External link</li> 159 * <li><js>"help"</js> - Link to help documentation</li> 160 * <li><js>"license"</js> - Link to license information</li> 161 * <li><js>"next"</js> - Next page in a sequence</li> 162 * <li><js>"nofollow"</js> - Don't follow this link for SEO</li> 163 * <li><js>"noreferrer"</js> - Don't send referrer information</li> 164 * <li><js>"prev"</js> - Previous page in a sequence</li> 165 * <li><js>"search"</js> - Link to search functionality</li> 166 * <li><js>"tag"</js> - Tag for the current page</li> 167 * </ul> 168 * 169 * @param rel The relationship between the document and linked resource. 170 * @return This object. 171 */ 172 public A rel(String value) { 173 attr("rel", value); 174 return this; 175 } 176 177 /** 178 * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-target">target</a> attribute. 179 * 180 * <p> 181 * Specifies where to open the linked resource when the link is clicked. 182 * 183 * <p> 184 * Common values: 185 * <ul> 186 * <li><js>"_blank"</js> - Open in a new window/tab</li> 187 * <li><js>"_self"</js> - Open in the same frame (default)</li> 188 * <li><js>"_parent"</js> - Open in the parent frame</li> 189 * <li><js>"_top"</js> - Open in the full body of the window</li> 190 * <li><js>"framename"</js> - Open in a named frame</li> 191 * </ul> 192 * 193 * @param target Where to open the linked resource. 194 * @return This object. 195 */ 196 public A target(String value) { 197 attr("target", value); 198 return this; 199 } 200 201 /** 202 * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-type">type</a> attribute. 203 * 204 * <p> 205 * Specifies the MIME type of the linked resource. Helps browsers determine how to handle the resource. 206 * 207 * <p> 208 * Common values: 209 * <ul> 210 * <li><js>"text/html"</js> - HTML document</li> 211 * <li><js>"text/css"</js> - CSS stylesheet</li> 212 * <li><js>"application/pdf"</js> - PDF document</li> 213 * <li><js>"image/png"</js> - PNG image</li> 214 * <li><js>"application/zip"</js> - ZIP archive</li> 215 * </ul> 216 * 217 * @param type The MIME type of the linked resource. 218 * @return This object. 219 */ 220 public A type(String value) { 221 attr("type", value); 222 return this; 223 } 224 225 //----------------------------------------------------------------------------------------------------------------- 226 // Overridden methods 227 //----------------------------------------------------------------------------------------------------------------- 228 @Override /* Overridden from HtmlElement */ 229 public A _class(String value) { // NOSONAR - Intentional naming. 230 super._class(value); 231 return this; 232 } 233 234 @Override /* Overridden from HtmlElement */ 235 public A accesskey(String value) { 236 super.accesskey(value); 237 return this; 238 } 239 240 @Override /* Overridden from HtmlElement */ 241 public A contenteditable(Object value) { 242 super.contenteditable(value); 243 return this; 244 } 245 246 @Override /* Overridden from HtmlElement */ 247 public A dir(String value) { 248 super.dir(value); 249 return this; 250 } 251 252 @Override /* Overridden from HtmlElement */ 253 public A hidden(Object value) { 254 super.hidden(value); 255 return this; 256 } 257 258 @Override /* Overridden from HtmlElement */ 259 public A id(String value) { 260 super.id(value); 261 return this; 262 } 263 264 @Override /* Overridden from HtmlElement */ 265 public A lang(String value) { 266 super.lang(value); 267 return this; 268 } 269 270 @Override /* Overridden from HtmlElement */ 271 public A onabort(String value) { 272 super.onabort(value); 273 return this; 274 } 275 276 @Override /* Overridden from HtmlElement */ 277 public A onblur(String value) { 278 super.onblur(value); 279 return this; 280 } 281 282 @Override /* Overridden from HtmlElement */ 283 public A oncancel(String value) { 284 super.oncancel(value); 285 return this; 286 } 287 288 @Override /* Overridden from HtmlElement */ 289 public A oncanplay(String value) { 290 super.oncanplay(value); 291 return this; 292 } 293 294 @Override /* Overridden from HtmlElement */ 295 public A oncanplaythrough(String value) { 296 super.oncanplaythrough(value); 297 return this; 298 } 299 300 @Override /* Overridden from HtmlElement */ 301 public A onchange(String value) { 302 super.onchange(value); 303 return this; 304 } 305 306 @Override /* Overridden from HtmlElement */ 307 public A onclick(String value) { 308 super.onclick(value); 309 return this; 310 } 311 312 @Override /* Overridden from HtmlElement */ 313 public A oncuechange(String value) { 314 super.oncuechange(value); 315 return this; 316 } 317 318 @Override /* Overridden from HtmlElement */ 319 public A ondblclick(String value) { 320 super.ondblclick(value); 321 return this; 322 } 323 324 @Override /* Overridden from HtmlElement */ 325 public A ondurationchange(String value) { 326 super.ondurationchange(value); 327 return this; 328 } 329 330 @Override /* Overridden from HtmlElement */ 331 public A onemptied(String value) { 332 super.onemptied(value); 333 return this; 334 } 335 336 @Override /* Overridden from HtmlElement */ 337 public A onended(String value) { 338 super.onended(value); 339 return this; 340 } 341 342 @Override /* Overridden from HtmlElement */ 343 public A onerror(String value) { 344 super.onerror(value); 345 return this; 346 } 347 348 @Override /* Overridden from HtmlElement */ 349 public A onfocus(String value) { 350 super.onfocus(value); 351 return this; 352 } 353 354 @Override /* Overridden from HtmlElement */ 355 public A oninput(String value) { 356 super.oninput(value); 357 return this; 358 } 359 360 @Override /* Overridden from HtmlElement */ 361 public A oninvalid(String value) { 362 super.oninvalid(value); 363 return this; 364 } 365 366 @Override /* Overridden from HtmlElement */ 367 public A onkeydown(String value) { 368 super.onkeydown(value); 369 return this; 370 } 371 372 @Override /* Overridden from HtmlElement */ 373 public A onkeypress(String value) { 374 super.onkeypress(value); 375 return this; 376 } 377 378 @Override /* Overridden from HtmlElement */ 379 public A onkeyup(String value) { 380 super.onkeyup(value); 381 return this; 382 } 383 384 @Override /* Overridden from HtmlElement */ 385 public A onload(String value) { 386 super.onload(value); 387 return this; 388 } 389 390 @Override /* Overridden from HtmlElement */ 391 public A onloadeddata(String value) { 392 super.onloadeddata(value); 393 return this; 394 } 395 396 @Override /* Overridden from HtmlElement */ 397 public A onloadedmetadata(String value) { 398 super.onloadedmetadata(value); 399 return this; 400 } 401 402 @Override /* Overridden from HtmlElement */ 403 public A onloadstart(String value) { 404 super.onloadstart(value); 405 return this; 406 } 407 408 @Override /* Overridden from HtmlElement */ 409 public A onmousedown(String value) { 410 super.onmousedown(value); 411 return this; 412 } 413 414 @Override /* Overridden from HtmlElement */ 415 public A onmouseenter(String value) { 416 super.onmouseenter(value); 417 return this; 418 } 419 420 @Override /* Overridden from HtmlElement */ 421 public A onmouseleave(String value) { 422 super.onmouseleave(value); 423 return this; 424 } 425 426 @Override /* Overridden from HtmlElement */ 427 public A onmousemove(String value) { 428 super.onmousemove(value); 429 return this; 430 } 431 432 @Override /* Overridden from HtmlElement */ 433 public A onmouseout(String value) { 434 super.onmouseout(value); 435 return this; 436 } 437 438 @Override /* Overridden from HtmlElement */ 439 public A onmouseover(String value) { 440 super.onmouseover(value); 441 return this; 442 } 443 444 @Override /* Overridden from HtmlElement */ 445 public A onmouseup(String value) { 446 super.onmouseup(value); 447 return this; 448 } 449 450 @Override /* Overridden from HtmlElement */ 451 public A onmousewheel(String value) { 452 super.onmousewheel(value); 453 return this; 454 } 455 456 @Override /* Overridden from HtmlElement */ 457 public A onpause(String value) { 458 super.onpause(value); 459 return this; 460 } 461 462 @Override /* Overridden from HtmlElement */ 463 public A onplay(String value) { 464 super.onplay(value); 465 return this; 466 } 467 468 @Override /* Overridden from HtmlElement */ 469 public A onplaying(String value) { 470 super.onplaying(value); 471 return this; 472 } 473 474 @Override /* Overridden from HtmlElement */ 475 public A onprogress(String value) { 476 super.onprogress(value); 477 return this; 478 } 479 480 @Override /* Overridden from HtmlElement */ 481 public A onratechange(String value) { 482 super.onratechange(value); 483 return this; 484 } 485 486 @Override /* Overridden from HtmlElement */ 487 public A onreset(String value) { 488 super.onreset(value); 489 return this; 490 } 491 492 @Override /* Overridden from HtmlElement */ 493 public A onresize(String value) { 494 super.onresize(value); 495 return this; 496 } 497 498 @Override /* Overridden from HtmlElement */ 499 public A onscroll(String value) { 500 super.onscroll(value); 501 return this; 502 } 503 504 @Override /* Overridden from HtmlElement */ 505 public A onseeked(String value) { 506 super.onseeked(value); 507 return this; 508 } 509 510 @Override /* Overridden from HtmlElement */ 511 public A onseeking(String value) { 512 super.onseeking(value); 513 return this; 514 } 515 516 @Override /* Overridden from HtmlElement */ 517 public A onselect(String value) { 518 super.onselect(value); 519 return this; 520 } 521 522 @Override /* Overridden from HtmlElement */ 523 public A onshow(String value) { 524 super.onshow(value); 525 return this; 526 } 527 528 @Override /* Overridden from HtmlElement */ 529 public A onstalled(String value) { 530 super.onstalled(value); 531 return this; 532 } 533 534 @Override /* Overridden from HtmlElement */ 535 public A onsubmit(String value) { 536 super.onsubmit(value); 537 return this; 538 } 539 540 @Override /* Overridden from HtmlElement */ 541 public A onsuspend(String value) { 542 super.onsuspend(value); 543 return this; 544 } 545 546 @Override /* Overridden from HtmlElement */ 547 public A ontimeupdate(String value) { 548 super.ontimeupdate(value); 549 return this; 550 } 551 552 @Override /* Overridden from HtmlElement */ 553 public A ontoggle(String value) { 554 super.ontoggle(value); 555 return this; 556 } 557 558 @Override /* Overridden from HtmlElement */ 559 public A onvolumechange(String value) { 560 super.onvolumechange(value); 561 return this; 562 } 563 564 @Override /* Overridden from HtmlElement */ 565 public A onwaiting(String value) { 566 super.onwaiting(value); 567 return this; 568 } 569 570 @Override /* Overridden from HtmlElement */ 571 public A spellcheck(Object value) { 572 super.spellcheck(value); 573 return this; 574 } 575 576 @Override /* Overridden from HtmlElement */ 577 public A style(String value) { 578 super.style(value); 579 return this; 580 } 581 582 @Override /* Overridden from HtmlElement */ 583 public A tabindex(Object value) { 584 super.tabindex(value); 585 return this; 586 } 587 588 @Override /* Overridden from HtmlElement */ 589 public A title(String value) { 590 super.title(value); 591 return this; 592 } 593 594 @Override /* Overridden from HtmlElement */ 595 public A translate(Object value) { 596 super.translate(value); 597 return this; 598 } 599 600 @Override /* Overridden from HtmlElementMixed */ 601 public A child(Object value) { 602 super.child(value); 603 return this; 604 } 605 606 @Override /* Overridden from HtmlElementMixed */ 607 public A children(Object...value) { 608 super.children(value); 609 return this; 610 } 611}