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-source-element"><source></a> 026 * element. 027 * 028 * <p> 029 * The source element specifies multiple media resources for media elements like audio and video. 030 * It allows browsers to choose the most appropriate source based on format support, bandwidth, 031 * and other factors. The source element is used inside audio and video elements to provide 032 * fallback options for different media formats. 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>// Video with multiple sources</jc> 039 * Video <jv>video</jv> = <jsm>video</jsm>() 040 * .controls(<jk>true</jk>) 041 * .children( 042 * <jsm>source</jsm>().src(<js>"movie.mp4"</js>).type(<js>"video/mp4"</js>), 043 * <jsm>source</jsm>().src(<js>"movie.webm"</js>).type(<js>"video/webm"</js>), 044 * <jsm>source</jsm>().src(<js>"movie.ogg"</js>).type(<js>"video/ogg"</js>) 045 * ); 046 * 047 * <jc>// Audio with multiple sources</jc> 048 * Audio <jv>audio</jv> = <jsm>audio</jsm>() 049 * .controls(<jk>true</jk>) 050 * .children( 051 * <jsm>source</jsm>().src(<js>"sound.mp3"</js>).type(<js>"audio/mpeg"</js>), 052 * <jsm>source</jsm>().src(<js>"sound.ogg"</js>).type(<js>"audio/ogg"</js>), 053 * <jsm>source</jsm>().src(<js>"sound.wav"</js>).type(<js>"audio/wav"</js>) 054 * ); 055 * 056 * <jc>// Picture with multiple sources</jc> 057 * Picture <jv>picture</jv> = <jsm>picture</jsm>( 058 * <jsm>source</jsm>().src(<js>"image.webp"</js>).type(<js>"image/webp"</js>), 059 * <jsm>source</jsm>().src(<js>"image.jpg"</js>).type(<js>"image/jpeg"</js>) 060 * ); 061 * 062 * <jc>// Source with media query</jc> 063 * Source <jv>responsive</jv> = <jsm>source</jsm>() 064 * .src(<js>"large-image.jpg"</js>) 065 * .media(<js>"(min-width: 800px)"</js>) 066 * .type(<js>"image/jpeg"</js>); 067 * </p> 068 * 069 * <p> 070 * The following convenience methods are provided for constructing instances of this bean: 071 * <ul class='javatree'> 072 * <li class='jc'>{@link HtmlBuilder} 073 * <ul class='javatree'> 074 * <li class='jm'>{@link HtmlBuilder#source() source()} 075 * </ul> 076 * </ul> 077 * </p> 078 * 079 * <h5 class='section'>See Also:</h5><ul> 080 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanHtml5">juneau-bean-html5</a> 081 * </ul> 082 */ 083@Bean(typeName = "source") 084public class Source extends HtmlElementVoid { 085 086 /** 087 * Creates an empty {@link Source} element. 088 */ 089 public Source() {} 090 091 /** 092 * Creates a {@link Source} element with the specified {@link Source#src(Object)} and {@link Source#type(String)} 093 * attributes. 094 * 095 * @param src The {@link Source#src(Object)} attribute. 096 * @param type The {@link Source#type(String)} attribute. 097 */ 098 public Source(Object src, String type) { 099 src(src).type(type); 100 } 101 102 @Override /* Overridden from HtmlElement */ 103 public Source _class(String value) { // NOSONAR - Intentional naming. 104 super._class(value); 105 return this; 106 } 107 108 @Override /* Overridden from HtmlElement */ 109 public Source accesskey(String value) { 110 super.accesskey(value); 111 return this; 112 } 113 114 @Override /* Overridden from HtmlElement */ 115 public Source attr(String key, Object val) { 116 super.attr(key, val); 117 return this; 118 } 119 120 @Override /* Overridden from HtmlElement */ 121 public Source attrUri(String key, Object val) { 122 super.attrUri(key, val); 123 return this; 124 } 125 126 @Override /* Overridden from HtmlElement */ 127 public Source contenteditable(Object value) { 128 super.contenteditable(value); 129 return this; 130 } 131 132 @Override /* Overridden from HtmlElement */ 133 public Source dir(String value) { 134 super.dir(value); 135 return this; 136 } 137 138 @Override /* Overridden from HtmlElement */ 139 public Source hidden(Object value) { 140 super.hidden(value); 141 return this; 142 } 143 144 @Override /* Overridden from HtmlElement */ 145 public Source id(String value) { 146 super.id(value); 147 return this; 148 } 149 150 @Override /* Overridden from HtmlElement */ 151 public Source lang(String value) { 152 super.lang(value); 153 return this; 154 } 155 156 @Override /* Overridden from HtmlElement */ 157 public Source onabort(String value) { 158 super.onabort(value); 159 return this; 160 } 161 162 @Override /* Overridden from HtmlElement */ 163 public Source onblur(String value) { 164 super.onblur(value); 165 return this; 166 } 167 168 @Override /* Overridden from HtmlElement */ 169 public Source oncancel(String value) { 170 super.oncancel(value); 171 return this; 172 } 173 174 @Override /* Overridden from HtmlElement */ 175 public Source oncanplay(String value) { 176 super.oncanplay(value); 177 return this; 178 } 179 180 @Override /* Overridden from HtmlElement */ 181 public Source oncanplaythrough(String value) { 182 super.oncanplaythrough(value); 183 return this; 184 } 185 186 @Override /* Overridden from HtmlElement */ 187 public Source onchange(String value) { 188 super.onchange(value); 189 return this; 190 } 191 192 @Override /* Overridden from HtmlElement */ 193 public Source onclick(String value) { 194 super.onclick(value); 195 return this; 196 } 197 198 @Override /* Overridden from HtmlElement */ 199 public Source oncuechange(String value) { 200 super.oncuechange(value); 201 return this; 202 } 203 204 @Override /* Overridden from HtmlElement */ 205 public Source ondblclick(String value) { 206 super.ondblclick(value); 207 return this; 208 } 209 210 @Override /* Overridden from HtmlElement */ 211 public Source ondurationchange(String value) { 212 super.ondurationchange(value); 213 return this; 214 } 215 216 @Override /* Overridden from HtmlElement */ 217 public Source onemptied(String value) { 218 super.onemptied(value); 219 return this; 220 } 221 222 @Override /* Overridden from HtmlElement */ 223 public Source onended(String value) { 224 super.onended(value); 225 return this; 226 } 227 228 @Override /* Overridden from HtmlElement */ 229 public Source onerror(String value) { 230 super.onerror(value); 231 return this; 232 } 233 234 @Override /* Overridden from HtmlElement */ 235 public Source onfocus(String value) { 236 super.onfocus(value); 237 return this; 238 } 239 240 @Override /* Overridden from HtmlElement */ 241 public Source oninput(String value) { 242 super.oninput(value); 243 return this; 244 } 245 246 @Override /* Overridden from HtmlElement */ 247 public Source oninvalid(String value) { 248 super.oninvalid(value); 249 return this; 250 } 251 252 @Override /* Overridden from HtmlElement */ 253 public Source onkeydown(String value) { 254 super.onkeydown(value); 255 return this; 256 } 257 258 @Override /* Overridden from HtmlElement */ 259 public Source onkeypress(String value) { 260 super.onkeypress(value); 261 return this; 262 } 263 264 @Override /* Overridden from HtmlElement */ 265 public Source onkeyup(String value) { 266 super.onkeyup(value); 267 return this; 268 } 269 270 @Override /* Overridden from HtmlElement */ 271 public Source onload(String value) { 272 super.onload(value); 273 return this; 274 } 275 276 @Override /* Overridden from HtmlElement */ 277 public Source onloadeddata(String value) { 278 super.onloadeddata(value); 279 return this; 280 } 281 282 @Override /* Overridden from HtmlElement */ 283 public Source onloadedmetadata(String value) { 284 super.onloadedmetadata(value); 285 return this; 286 } 287 288 @Override /* Overridden from HtmlElement */ 289 public Source onloadstart(String value) { 290 super.onloadstart(value); 291 return this; 292 } 293 294 @Override /* Overridden from HtmlElement */ 295 public Source onmousedown(String value) { 296 super.onmousedown(value); 297 return this; 298 } 299 300 @Override /* Overridden from HtmlElement */ 301 public Source onmouseenter(String value) { 302 super.onmouseenter(value); 303 return this; 304 } 305 306 @Override /* Overridden from HtmlElement */ 307 public Source onmouseleave(String value) { 308 super.onmouseleave(value); 309 return this; 310 } 311 312 @Override /* Overridden from HtmlElement */ 313 public Source onmousemove(String value) { 314 super.onmousemove(value); 315 return this; 316 } 317 318 @Override /* Overridden from HtmlElement */ 319 public Source onmouseout(String value) { 320 super.onmouseout(value); 321 return this; 322 } 323 324 @Override /* Overridden from HtmlElement */ 325 public Source onmouseover(String value) { 326 super.onmouseover(value); 327 return this; 328 } 329 330 @Override /* Overridden from HtmlElement */ 331 public Source onmouseup(String value) { 332 super.onmouseup(value); 333 return this; 334 } 335 336 @Override /* Overridden from HtmlElement */ 337 public Source onmousewheel(String value) { 338 super.onmousewheel(value); 339 return this; 340 } 341 342 @Override /* Overridden from HtmlElement */ 343 public Source onpause(String value) { 344 super.onpause(value); 345 return this; 346 } 347 348 @Override /* Overridden from HtmlElement */ 349 public Source onplay(String value) { 350 super.onplay(value); 351 return this; 352 } 353 354 @Override /* Overridden from HtmlElement */ 355 public Source onplaying(String value) { 356 super.onplaying(value); 357 return this; 358 } 359 360 @Override /* Overridden from HtmlElement */ 361 public Source onprogress(String value) { 362 super.onprogress(value); 363 return this; 364 } 365 366 @Override /* Overridden from HtmlElement */ 367 public Source onratechange(String value) { 368 super.onratechange(value); 369 return this; 370 } 371 372 @Override /* Overridden from HtmlElement */ 373 public Source onreset(String value) { 374 super.onreset(value); 375 return this; 376 } 377 378 @Override /* Overridden from HtmlElement */ 379 public Source onresize(String value) { 380 super.onresize(value); 381 return this; 382 } 383 384 @Override /* Overridden from HtmlElement */ 385 public Source onscroll(String value) { 386 super.onscroll(value); 387 return this; 388 } 389 390 @Override /* Overridden from HtmlElement */ 391 public Source onseeked(String value) { 392 super.onseeked(value); 393 return this; 394 } 395 396 @Override /* Overridden from HtmlElement */ 397 public Source onseeking(String value) { 398 super.onseeking(value); 399 return this; 400 } 401 402 @Override /* Overridden from HtmlElement */ 403 public Source onselect(String value) { 404 super.onselect(value); 405 return this; 406 } 407 408 @Override /* Overridden from HtmlElement */ 409 public Source onshow(String value) { 410 super.onshow(value); 411 return this; 412 } 413 414 @Override /* Overridden from HtmlElement */ 415 public Source onstalled(String value) { 416 super.onstalled(value); 417 return this; 418 } 419 420 @Override /* Overridden from HtmlElement */ 421 public Source onsubmit(String value) { 422 super.onsubmit(value); 423 return this; 424 } 425 426 @Override /* Overridden from HtmlElement */ 427 public Source onsuspend(String value) { 428 super.onsuspend(value); 429 return this; 430 } 431 432 @Override /* Overridden from HtmlElement */ 433 public Source ontimeupdate(String value) { 434 super.ontimeupdate(value); 435 return this; 436 } 437 438 @Override /* Overridden from HtmlElement */ 439 public Source ontoggle(String value) { 440 super.ontoggle(value); 441 return this; 442 } 443 444 @Override /* Overridden from HtmlElement */ 445 public Source onvolumechange(String value) { 446 super.onvolumechange(value); 447 return this; 448 } 449 450 @Override /* Overridden from HtmlElement */ 451 public Source onwaiting(String value) { 452 super.onwaiting(value); 453 return this; 454 } 455 456 @Override /* Overridden from HtmlElement */ 457 public Source spellcheck(Object value) { 458 super.spellcheck(value); 459 return this; 460 } 461 462 /** 463 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-source-src">src</a> attribute. 464 * 465 * <p> 466 * Address of the resource. 467 * 468 * <p> 469 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}. 470 * Strings must be valid URIs. 471 * 472 * <p> 473 * URIs defined by {@link UriResolver} can be used for values. 474 * 475 * @param value 476 * The new value for this attribute. 477 * Typically a {@link URL} or {@link String}. 478 * @return This object. 479 */ 480 public Source src(Object value) { 481 attrUri("src", value); 482 return this; 483 } 484 485 @Override /* Overridden from HtmlElement */ 486 public Source style(String value) { 487 super.style(value); 488 return this; 489 } 490 491 @Override /* Overridden from HtmlElement */ 492 public Source tabindex(Object value) { 493 super.tabindex(value); 494 return this; 495 } 496 497 @Override /* Overridden from HtmlElement */ 498 public Source title(String value) { 499 super.title(value); 500 return this; 501 } 502 503 @Override /* Overridden from HtmlElement */ 504 public Source translate(Object value) { 505 super.translate(value); 506 return this; 507 } 508 509 /** 510 * <a class="doclink" href="https://www.w3.org/TR/html5/embedded-content-0.html#attr-source-type">type</a> attribute. 511 * 512 * <p> 513 * Specifies the MIME type of the media resource. Helps browsers determine if they can play the media 514 * and which source to use when multiple sources are provided. 515 * 516 * <p> 517 * Common values: 518 * <ul> 519 * <li><js>"video/mp4"</js> - MP4 video</li> 520 * <li><js>"video/webm"</js> - WebM video</li> 521 * <li><js>"audio/mp3"</js> - MP3 audio</li> 522 * <li><js>"audio/ogg"</js> - OGG audio</li> 523 * <li><js>"audio/wav"</js> - WAV audio</li> 524 * </ul> 525 * 526 * @param value The MIME type of the media resource. 527 * @return This object. 528 */ 529 public Source type(String value) { 530 attr("type", value); 531 return this; 532 } 533}