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