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.*; 023 024/** 025 * DTO for an HTML <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#the-img-element"><img></a> 026 * element. 027 * 028 * <p> 029 * The img element represents an image in the document. It is a void element that embeds an image 030 * into the page. The alt attribute is required for accessibility, providing alternative text 031 * for screen readers and when images cannot be displayed. 032 * 033 * <h5 class='section'>Examples:</h5> 034 * <p class='bcode w800'> 035 * <jk>import static</jk> org.apache.juneau.bean.html5.HtmlBuilder.*; 036 * 037 * <jc>// Simple image with alt text</jc> 038 * Img <jv>img1</jv> = <jsm>img</jsm>() 039 * .src(<js>"photo.jpg"</js>) 040 * .alt(<js>"A beautiful sunset over the mountains"</js>); 041 * 042 * <jc>// Image with dimensions and styling</jc> 043 * Img <jv>img2</jv> = <jsm>img</jsm>() 044 * .src(<js>"logo.png"</js>) 045 * .alt(<js>"Company Logo"</js>) 046 * .width(<js>"200"</js>) 047 * .height(<js>"100"</js>) 048 * ._class(<js>"logo"</js>); 049 * 050 * <jc>// Image with CORS and image map</jc> 051 * Img <jv>img3</jv> = <jsm>img</jsm>() 052 * .src(<js>"https://example.com/image.jpg"</js>) 053 * .alt(<js>"Interactive image"</js>) 054 * .crossorigin(<js>"anonymous"</js>) 055 * .usemap(<js>"#imagemap"</js>); 056 * 057 * <jc>// Responsive image with multiple sources</jc> 058 * Img <jv>img4</jv> = <jsm>img</jsm>() 059 * .src(<js>"image-800w.jpg"</js>) 060 * .alt(<js>"Responsive image"</js>) 061 * .sizes(<js>"(max-width: 600px) 100vw, 50vw"</js>) 062 * .srcset(<js>"image-400w.jpg 400w, image-800w.jpg 800w"</js>); 063 * </p> 064 * 065 * <p> 066 * The following convenience methods are provided for constructing instances of this bean: 067 * <ul class='javatree'> 068 * <li class='jc'>{@link HtmlBuilder} 069 * <ul class='javatree'> 070 * <li class='jm'>{@link HtmlBuilder#img() img()} 071 * </ul> 072 * </ul> 073 * </p> 074 * 075 * <h5 class='section'>See Also:</h5><ul> 076 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanHtml5">juneau-bean-html5</a> 077 * </ul> 078 */ 079@Bean(typeName = "img") 080public class Img extends HtmlElementVoid { 081 082 /** 083 * Creates an empty {@link Img} element. 084 */ 085 public Img() {} 086 087 /** 088 * Creates an {@link Img} element with the specified {@link Img#src(Object)} attribute. 089 * 090 * @param src The {@link Img#src(Object)} attribute. 091 */ 092 public Img(Object src) { 093 src(src); 094 } 095 096 @Override /* Overridden from HtmlElement */ 097 public Img _class(String value) { // NOSONAR - Intentional naming. 098 super._class(value); 099 return this; 100 } 101 102 @Override /* Overridden from HtmlElement */ 103 public Img accesskey(String value) { 104 super.accesskey(value); 105 return this; 106 } 107 108 /** 109 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-img-alt">alt</a> attribute. 110 * 111 * <p> 112 * Specifies alternative text for the image. This text is displayed when the image cannot be loaded 113 * and is used by screen readers for accessibility. 114 * 115 * <p> 116 * The alt text should be descriptive and convey the same information as the image. 117 * 118 * @param value Alternative text for the image. 119 * @return This object. 120 */ 121 public Img alt(String value) { 122 attr("alt", value); 123 return this; 124 } 125 126 @Override /* Overridden from HtmlElement */ 127 public Img attr(String key, Object val) { 128 super.attr(key, val); 129 return this; 130 } 131 132 @Override /* Overridden from HtmlElement */ 133 public Img attrUri(String key, Object val) { 134 super.attrUri(key, val); 135 return this; 136 } 137 138 @Override /* Overridden from HtmlElement */ 139 public Img contenteditable(Object value) { 140 super.contenteditable(value); 141 return this; 142 } 143 144 /** 145 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-img-crossorigin">crossorigin</a> 146 * attribute. 147 * 148 * <p> 149 * Specifies how the element handles cross-origin requests for CORS (Cross-Origin Resource Sharing). 150 * 151 * <p> 152 * Possible values: 153 * <ul> 154 * <li><js>"anonymous"</js> - Cross-origin requests are made without credentials</li> 155 * <li><js>"use-credentials"</js> - Cross-origin requests include credentials</li> 156 * </ul> 157 * 158 * @param value How to handle cross-origin requests. 159 * @return This object. 160 */ 161 public Img crossorigin(String value) { 162 attr("crossorigin", value); 163 return this; 164 } 165 166 @Override /* Overridden from HtmlElement */ 167 public Img dir(String value) { 168 super.dir(value); 169 return this; 170 } 171 172 /** 173 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-dim-height">height</a> 174 * attribute. 175 * 176 * <p> 177 * Vertical dimension. 178 * 179 * @param value 180 * The new value for this attribute. 181 * Typically a {@link Number} or {@link String}. 182 * @return This object. 183 */ 184 public Img height(Object value) { 185 attr("height", value); 186 return this; 187 } 188 189 @Override /* Overridden from HtmlElement */ 190 public Img hidden(Object value) { 191 super.hidden(value); 192 return this; 193 } 194 195 @Override /* Overridden from HtmlElement */ 196 public Img id(String value) { 197 super.id(value); 198 return this; 199 } 200 201 /** 202 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-img-ismap">ismap</a> attribute. 203 * 204 * <p> 205 * Whether the image is a server-side image map. 206 * 207 * <p> 208 * This attribute uses deminimized values: 209 * <ul> 210 * <li><jk>false</jk> - Attribute is not added</li> 211 * <li><jk>true</jk> - Attribute is added as <js>"ismap"</js></li> 212 * <li>Other values - Passed through as-is</li> 213 * </ul> 214 * 215 * @param value 216 * The new value for this attribute. 217 * Typically a {@link Boolean} or {@link String}. 218 * @return This object. 219 */ 220 public Img ismap(Object value) { 221 attr("ismap", deminimize(value, "ismap")); 222 return this; 223 } 224 225 @Override /* Overridden from HtmlElement */ 226 public Img lang(String value) { 227 super.lang(value); 228 return this; 229 } 230 231 @Override /* Overridden from HtmlElement */ 232 public Img onabort(String value) { 233 super.onabort(value); 234 return this; 235 } 236 237 @Override /* Overridden from HtmlElement */ 238 public Img onblur(String value) { 239 super.onblur(value); 240 return this; 241 } 242 243 @Override /* Overridden from HtmlElement */ 244 public Img oncancel(String value) { 245 super.oncancel(value); 246 return this; 247 } 248 249 @Override /* Overridden from HtmlElement */ 250 public Img oncanplay(String value) { 251 super.oncanplay(value); 252 return this; 253 } 254 255 @Override /* Overridden from HtmlElement */ 256 public Img oncanplaythrough(String value) { 257 super.oncanplaythrough(value); 258 return this; 259 } 260 261 @Override /* Overridden from HtmlElement */ 262 public Img onchange(String value) { 263 super.onchange(value); 264 return this; 265 } 266 267 @Override /* Overridden from HtmlElement */ 268 public Img onclick(String value) { 269 super.onclick(value); 270 return this; 271 } 272 273 @Override /* Overridden from HtmlElement */ 274 public Img oncuechange(String value) { 275 super.oncuechange(value); 276 return this; 277 } 278 279 @Override /* Overridden from HtmlElement */ 280 public Img ondblclick(String value) { 281 super.ondblclick(value); 282 return this; 283 } 284 285 @Override /* Overridden from HtmlElement */ 286 public Img ondurationchange(String value) { 287 super.ondurationchange(value); 288 return this; 289 } 290 291 @Override /* Overridden from HtmlElement */ 292 public Img onemptied(String value) { 293 super.onemptied(value); 294 return this; 295 } 296 297 @Override /* Overridden from HtmlElement */ 298 public Img onended(String value) { 299 super.onended(value); 300 return this; 301 } 302 303 @Override /* Overridden from HtmlElement */ 304 public Img onerror(String value) { 305 super.onerror(value); 306 return this; 307 } 308 309 @Override /* Overridden from HtmlElement */ 310 public Img onfocus(String value) { 311 super.onfocus(value); 312 return this; 313 } 314 315 @Override /* Overridden from HtmlElement */ 316 public Img oninput(String value) { 317 super.oninput(value); 318 return this; 319 } 320 321 @Override /* Overridden from HtmlElement */ 322 public Img oninvalid(String value) { 323 super.oninvalid(value); 324 return this; 325 } 326 327 @Override /* Overridden from HtmlElement */ 328 public Img onkeydown(String value) { 329 super.onkeydown(value); 330 return this; 331 } 332 333 @Override /* Overridden from HtmlElement */ 334 public Img onkeypress(String value) { 335 super.onkeypress(value); 336 return this; 337 } 338 339 @Override /* Overridden from HtmlElement */ 340 public Img onkeyup(String value) { 341 super.onkeyup(value); 342 return this; 343 } 344 345 @Override /* Overridden from HtmlElement */ 346 public Img onload(String value) { 347 super.onload(value); 348 return this; 349 } 350 351 @Override /* Overridden from HtmlElement */ 352 public Img onloadeddata(String value) { 353 super.onloadeddata(value); 354 return this; 355 } 356 357 @Override /* Overridden from HtmlElement */ 358 public Img onloadedmetadata(String value) { 359 super.onloadedmetadata(value); 360 return this; 361 } 362 363 @Override /* Overridden from HtmlElement */ 364 public Img onloadstart(String value) { 365 super.onloadstart(value); 366 return this; 367 } 368 369 @Override /* Overridden from HtmlElement */ 370 public Img onmousedown(String value) { 371 super.onmousedown(value); 372 return this; 373 } 374 375 @Override /* Overridden from HtmlElement */ 376 public Img onmouseenter(String value) { 377 super.onmouseenter(value); 378 return this; 379 } 380 381 @Override /* Overridden from HtmlElement */ 382 public Img onmouseleave(String value) { 383 super.onmouseleave(value); 384 return this; 385 } 386 387 @Override /* Overridden from HtmlElement */ 388 public Img onmousemove(String value) { 389 super.onmousemove(value); 390 return this; 391 } 392 393 @Override /* Overridden from HtmlElement */ 394 public Img onmouseout(String value) { 395 super.onmouseout(value); 396 return this; 397 } 398 399 @Override /* Overridden from HtmlElement */ 400 public Img onmouseover(String value) { 401 super.onmouseover(value); 402 return this; 403 } 404 405 @Override /* Overridden from HtmlElement */ 406 public Img onmouseup(String value) { 407 super.onmouseup(value); 408 return this; 409 } 410 411 @Override /* Overridden from HtmlElement */ 412 public Img onmousewheel(String value) { 413 super.onmousewheel(value); 414 return this; 415 } 416 417 @Override /* Overridden from HtmlElement */ 418 public Img onpause(String value) { 419 super.onpause(value); 420 return this; 421 } 422 423 @Override /* Overridden from HtmlElement */ 424 public Img onplay(String value) { 425 super.onplay(value); 426 return this; 427 } 428 429 @Override /* Overridden from HtmlElement */ 430 public Img onplaying(String value) { 431 super.onplaying(value); 432 return this; 433 } 434 435 @Override /* Overridden from HtmlElement */ 436 public Img onprogress(String value) { 437 super.onprogress(value); 438 return this; 439 } 440 441 @Override /* Overridden from HtmlElement */ 442 public Img onratechange(String value) { 443 super.onratechange(value); 444 return this; 445 } 446 447 @Override /* Overridden from HtmlElement */ 448 public Img onreset(String value) { 449 super.onreset(value); 450 return this; 451 } 452 453 @Override /* Overridden from HtmlElement */ 454 public Img onresize(String value) { 455 super.onresize(value); 456 return this; 457 } 458 459 @Override /* Overridden from HtmlElement */ 460 public Img onscroll(String value) { 461 super.onscroll(value); 462 return this; 463 } 464 465 @Override /* Overridden from HtmlElement */ 466 public Img onseeked(String value) { 467 super.onseeked(value); 468 return this; 469 } 470 471 @Override /* Overridden from HtmlElement */ 472 public Img onseeking(String value) { 473 super.onseeking(value); 474 return this; 475 } 476 477 @Override /* Overridden from HtmlElement */ 478 public Img onselect(String value) { 479 super.onselect(value); 480 return this; 481 } 482 483 @Override /* Overridden from HtmlElement */ 484 public Img onshow(String value) { 485 super.onshow(value); 486 return this; 487 } 488 489 @Override /* Overridden from HtmlElement */ 490 public Img onstalled(String value) { 491 super.onstalled(value); 492 return this; 493 } 494 495 @Override /* Overridden from HtmlElement */ 496 public Img onsubmit(String value) { 497 super.onsubmit(value); 498 return this; 499 } 500 501 @Override /* Overridden from HtmlElement */ 502 public Img onsuspend(String value) { 503 super.onsuspend(value); 504 return this; 505 } 506 507 @Override /* Overridden from HtmlElement */ 508 public Img ontimeupdate(String value) { 509 super.ontimeupdate(value); 510 return this; 511 } 512 513 @Override /* Overridden from HtmlElement */ 514 public Img ontoggle(String value) { 515 super.ontoggle(value); 516 return this; 517 } 518 519 @Override /* Overridden from HtmlElement */ 520 public Img onvolumechange(String value) { 521 super.onvolumechange(value); 522 return this; 523 } 524 525 @Override /* Overridden from HtmlElement */ 526 public Img onwaiting(String value) { 527 super.onwaiting(value); 528 return this; 529 } 530 531 @Override /* Overridden from HtmlElement */ 532 public Img spellcheck(Object value) { 533 super.spellcheck(value); 534 return this; 535 } 536 537 /** 538 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-img-src">src</a> attribute. 539 * 540 * <p> 541 * Address of the resource. 542 * 543 * <p> 544 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}. 545 * Strings must be valid URIs. 546 * 547 * <p> 548 * URIs defined by {@link UriResolver} can be used for values. 549 * 550 * @param value 551 * The new value for this attribute. 552 * Typically a {@link URL} or {@link String}. 553 * @return This object. 554 */ 555 public Img src(Object value) { 556 attrUri("src", value); 557 return this; 558 } 559 560 @Override /* Overridden from HtmlElement */ 561 public Img style(String value) { 562 super.style(value); 563 return this; 564 } 565 566 @Override /* Overridden from HtmlElement */ 567 public Img tabindex(Object value) { 568 super.tabindex(value); 569 return this; 570 } 571 572 @Override /* Overridden from HtmlElement */ 573 public Img title(String value) { 574 super.title(value); 575 return this; 576 } 577 578 @Override /* Overridden from HtmlElement */ 579 public Img translate(Object value) { 580 super.translate(value); 581 return this; 582 } 583 584 /** 585 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-hyperlink-usemap">usemap</a> 586 * attribute. 587 * 588 * <p> 589 * Specifies the name of an image map to use with this image. The value should correspond to 590 * the name attribute of a map element that defines clickable areas on the image. 591 * 592 * <p> 593 * The value should start with "#" followed by the name of the map element. 594 * 595 * @param value The name of the image map to use (e.g., "#mymap"). 596 * @return This object. 597 */ 598 public Img usemap(String value) { 599 attr("usemap", value); 600 return this; 601 } 602 603 /** 604 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-dim-width">width</a> attribute. 605 * 606 * <p> 607 * Horizontal dimension. 608 * 609 * @param value 610 * The new value for this attribute. 611 * Typically a {@link Number} or {@link String}. 612 * @return This object. 613 */ 614 public Img width(Object value) { 615 attr("width", value); 616 return this; 617 } 618}