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