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