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 static org.apache.juneau.commons.utils.StringUtils.*; 020 021import java.net.*; 022 023import org.apache.juneau.*; 024import org.apache.juneau.annotation.*; 025 026/** 027 * DTO for an HTML <a class="doclink" href="https://www.w3.org/TR/html5/scripting-1.html#the-script-element"><script></a> 028 * element. 029 * 030 * <p> 031 * The script element is used to embed or reference executable code, typically JavaScript. It can 032 * contain inline script code or reference external script files. The script element is commonly 033 * used to add interactivity and dynamic behavior to web pages. 034 * 035 * <h5 class='section'>Examples:</h5> 036 * <p class='bcode w800'> 037 * <jk>import static</jk> org.apache.juneau.bean.html5.HtmlBuilder.*; 038 * 039 * <jc>// Inline JavaScript</jc> 040 * Script <jv>script1</jv> = <jsm>script</jsm>() 041 * .text(<js>"console.log('Hello, World!');"</js>); 042 * 043 * <jc>// External JavaScript file</jc> 044 * Script <jv>script2</jv> = <jsm>script</jsm>() 045 * .src(<js>"https://example.com/script.js"</js>) 046 * .type(<js>"text/javascript"</js>); 047 * 048 * <jc>// Async script loading</jc> 049 * Script <jv>script3</jv> = <jsm>script</jsm>() 050 * .src(<js>"https://example.com/analytics.js"</js>) 051 * .async(<jk>true</jk>) 052 * .defer(<jk>true</jk>); 053 * 054 * <jc>// Script with integrity check</jc> 055 * Script <jv>script4</jv> = <jsm>script</jsm>() 056 * .src(<js>"https://example.com/library.js"</js>) 057 * .integrity(<js>"sha384-..."</js>) 058 * .crossorigin(<js>"anonymous"</js>); 059 * 060 * <jc>// Module script</jc> 061 * Script <jv>script5</jv> = <jsm>script</jsm>() 062 * .src(<js>"https://example.com/module.js"</js>) 063 * .type(<js>"module"</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#script() script()} 072 * <li class='jm'>{@link HtmlBuilder#script(String, String...) script(String, String...)} 073 * </ul> 074 * </ul> 075 * </p> 076 * 077 * <h5 class='section'>See Also:</h5><ul> 078 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanHtml5">juneau-bean-html5</a> 079 * </ul> 080 */ 081@Bean(typeName = "script") 082public class Script extends HtmlElementRawText { 083 084 /** 085 * Creates an empty {@link Script} element. 086 */ 087 public Script() {} 088 089 /** 090 * Creates a {@link Script} element with the specified {@link Script#type(String)} attribute and 091 * {@link Script#text(Object)} node. 092 * 093 * @param type The {@link Script#type(String)} attribute. 094 * @param text The child text node. 095 */ 096 public Script(String type, String...text) { 097 type(type).text(joinnl(text)); 098 } 099 100 @Override /* Overridden from HtmlElement */ 101 public Script _class(String value) { // NOSONAR - Intentional naming. 102 super._class(value); 103 return this; 104 } 105 106 @Override /* Overridden from HtmlElement */ 107 public Script accesskey(String value) { 108 super.accesskey(value); 109 return this; 110 } 111 112 /** 113 * <a class="doclink" href="https://www.w3.org/TR/html5/scripting-1.html#attr-script-async">async</a> attribute. 114 * 115 * <p> 116 * Execute script asynchronously. 117 * 118 * <p> 119 * This attribute uses deminimized values: 120 * <ul> 121 * <li><jk>false</jk> - Attribute is not added</li> 122 * <li><jk>true</jk> - Attribute is added as <js>"async"</js></li> 123 * <li>Other values - Passed through as-is</li> 124 * </ul> 125 * 126 * @param value 127 * The new value for this attribute. 128 * Typically a {@link Boolean} or {@link String}. 129 * @return This object. 130 */ 131 public Script async(Object value) { 132 attr("async", deminimize(value, "async")); 133 return this; 134 } 135 136 @Override /* Overridden from HtmlElement */ 137 public Script attr(String key, Object val) { 138 super.attr(key, val); 139 return this; 140 } 141 142 @Override /* Overridden from HtmlElement */ 143 public Script attrUri(String key, Object val) { 144 super.attrUri(key, val); 145 return this; 146 } 147 148 /** 149 * <a class="doclink" href="https://www.w3.org/TR/html5/scripting-1.html#attr-script-charset">charset</a> attribute. 150 * 151 * <p> 152 * Specifies the character encoding of the external script resource. This is used when 153 * the script is loaded from an external source. 154 * 155 * <p> 156 * Common values: 157 * <ul> 158 * <li><js>"utf-8"</js> - UTF-8 encoding (default)</li> 159 * <li><js>"iso-8859-1"</js> - Latin-1 encoding</li> 160 * <li><js>"windows-1252"</js> - Windows-1252 encoding</li> 161 * </ul> 162 * 163 * @param value The character encoding of the external script resource. 164 * @return This object. 165 */ 166 public Script charset(String value) { 167 attr("charset", value); 168 return this; 169 } 170 171 @Override /* Overridden from HtmlElement */ 172 public Script contenteditable(Object value) { 173 super.contenteditable(value); 174 return this; 175 } 176 177 /** 178 * <a class="doclink" href="https://www.w3.org/TR/html5/scripting-1.html#attr-script-crossorigin">crossorigin</a> 179 * attribute. 180 * 181 * <p> 182 * How the element handles cross-origin requests. 183 * 184 * @param value The new value for this attribute. 185 * @return This object. 186 */ 187 public Script crossorigin(String value) { 188 attr("crossorigin", value); 189 return this; 190 } 191 192 /** 193 * <a class="doclink" href="https://www.w3.org/TR/html5/scripting-1.html#attr-script-defer">defer</a> attribute. 194 * 195 * <p> 196 * Defer script execution. 197 * 198 * <p> 199 * This attribute uses deminimized values: 200 * <ul> 201 * <li><jk>false</jk> - Attribute is not added</li> 202 * <li><jk>true</jk> - Attribute is added as <js>"defer"</js></li> 203 * <li>Other values - Passed through as-is</li> 204 * </ul> 205 * 206 * @param value 207 * The new value for this attribute. 208 * Typically a {@link Boolean} or {@link String}. 209 * @return This object. 210 */ 211 public Script defer(Object value) { 212 attr("defer", deminimize(value, "defer")); 213 return this; 214 } 215 216 @Override /* Overridden from HtmlElement */ 217 public Script dir(String value) { 218 super.dir(value); 219 return this; 220 } 221 222 @Override /* Overridden from HtmlElement */ 223 public Script hidden(Object value) { 224 super.hidden(value); 225 return this; 226 } 227 228 @Override /* Overridden from HtmlElement */ 229 public Script id(String value) { 230 super.id(value); 231 return this; 232 } 233 234 @Override /* Overridden from HtmlElement */ 235 public Script lang(String value) { 236 super.lang(value); 237 return this; 238 } 239 240 @Override /* Overridden from HtmlElement */ 241 public Script onabort(String value) { 242 super.onabort(value); 243 return this; 244 } 245 246 @Override /* Overridden from HtmlElement */ 247 public Script onblur(String value) { 248 super.onblur(value); 249 return this; 250 } 251 252 @Override /* Overridden from HtmlElement */ 253 public Script oncancel(String value) { 254 super.oncancel(value); 255 return this; 256 } 257 258 @Override /* Overridden from HtmlElement */ 259 public Script oncanplay(String value) { 260 super.oncanplay(value); 261 return this; 262 } 263 264 @Override /* Overridden from HtmlElement */ 265 public Script oncanplaythrough(String value) { 266 super.oncanplaythrough(value); 267 return this; 268 } 269 270 @Override /* Overridden from HtmlElement */ 271 public Script onchange(String value) { 272 super.onchange(value); 273 return this; 274 } 275 276 @Override /* Overridden from HtmlElement */ 277 public Script onclick(String value) { 278 super.onclick(value); 279 return this; 280 } 281 282 @Override /* Overridden from HtmlElement */ 283 public Script oncuechange(String value) { 284 super.oncuechange(value); 285 return this; 286 } 287 288 @Override /* Overridden from HtmlElement */ 289 public Script ondblclick(String value) { 290 super.ondblclick(value); 291 return this; 292 } 293 294 @Override /* Overridden from HtmlElement */ 295 public Script ondurationchange(String value) { 296 super.ondurationchange(value); 297 return this; 298 } 299 300 @Override /* Overridden from HtmlElement */ 301 public Script onemptied(String value) { 302 super.onemptied(value); 303 return this; 304 } 305 306 @Override /* Overridden from HtmlElement */ 307 public Script onended(String value) { 308 super.onended(value); 309 return this; 310 } 311 312 @Override /* Overridden from HtmlElement */ 313 public Script onerror(String value) { 314 super.onerror(value); 315 return this; 316 } 317 318 @Override /* Overridden from HtmlElement */ 319 public Script onfocus(String value) { 320 super.onfocus(value); 321 return this; 322 } 323 324 @Override /* Overridden from HtmlElement */ 325 public Script oninput(String value) { 326 super.oninput(value); 327 return this; 328 } 329 330 @Override /* Overridden from HtmlElement */ 331 public Script oninvalid(String value) { 332 super.oninvalid(value); 333 return this; 334 } 335 336 @Override /* Overridden from HtmlElement */ 337 public Script onkeydown(String value) { 338 super.onkeydown(value); 339 return this; 340 } 341 342 @Override /* Overridden from HtmlElement */ 343 public Script onkeypress(String value) { 344 super.onkeypress(value); 345 return this; 346 } 347 348 @Override /* Overridden from HtmlElement */ 349 public Script onkeyup(String value) { 350 super.onkeyup(value); 351 return this; 352 } 353 354 @Override /* Overridden from HtmlElement */ 355 public Script onload(String value) { 356 super.onload(value); 357 return this; 358 } 359 360 @Override /* Overridden from HtmlElement */ 361 public Script onloadeddata(String value) { 362 super.onloadeddata(value); 363 return this; 364 } 365 366 @Override /* Overridden from HtmlElement */ 367 public Script onloadedmetadata(String value) { 368 super.onloadedmetadata(value); 369 return this; 370 } 371 372 @Override /* Overridden from HtmlElement */ 373 public Script onloadstart(String value) { 374 super.onloadstart(value); 375 return this; 376 } 377 378 @Override /* Overridden from HtmlElement */ 379 public Script onmousedown(String value) { 380 super.onmousedown(value); 381 return this; 382 } 383 384 @Override /* Overridden from HtmlElement */ 385 public Script onmouseenter(String value) { 386 super.onmouseenter(value); 387 return this; 388 } 389 390 @Override /* Overridden from HtmlElement */ 391 public Script onmouseleave(String value) { 392 super.onmouseleave(value); 393 return this; 394 } 395 396 @Override /* Overridden from HtmlElement */ 397 public Script onmousemove(String value) { 398 super.onmousemove(value); 399 return this; 400 } 401 402 @Override /* Overridden from HtmlElement */ 403 public Script onmouseout(String value) { 404 super.onmouseout(value); 405 return this; 406 } 407 408 @Override /* Overridden from HtmlElement */ 409 public Script onmouseover(String value) { 410 super.onmouseover(value); 411 return this; 412 } 413 414 @Override /* Overridden from HtmlElement */ 415 public Script onmouseup(String value) { 416 super.onmouseup(value); 417 return this; 418 } 419 420 @Override /* Overridden from HtmlElement */ 421 public Script onmousewheel(String value) { 422 super.onmousewheel(value); 423 return this; 424 } 425 426 @Override /* Overridden from HtmlElement */ 427 public Script onpause(String value) { 428 super.onpause(value); 429 return this; 430 } 431 432 @Override /* Overridden from HtmlElement */ 433 public Script onplay(String value) { 434 super.onplay(value); 435 return this; 436 } 437 438 @Override /* Overridden from HtmlElement */ 439 public Script onplaying(String value) { 440 super.onplaying(value); 441 return this; 442 } 443 444 @Override /* Overridden from HtmlElement */ 445 public Script onprogress(String value) { 446 super.onprogress(value); 447 return this; 448 } 449 450 @Override /* Overridden from HtmlElement */ 451 public Script onratechange(String value) { 452 super.onratechange(value); 453 return this; 454 } 455 456 @Override /* Overridden from HtmlElement */ 457 public Script onreset(String value) { 458 super.onreset(value); 459 return this; 460 } 461 462 @Override /* Overridden from HtmlElement */ 463 public Script onresize(String value) { 464 super.onresize(value); 465 return this; 466 } 467 468 @Override /* Overridden from HtmlElement */ 469 public Script onscroll(String value) { 470 super.onscroll(value); 471 return this; 472 } 473 474 @Override /* Overridden from HtmlElement */ 475 public Script onseeked(String value) { 476 super.onseeked(value); 477 return this; 478 } 479 480 @Override /* Overridden from HtmlElement */ 481 public Script onseeking(String value) { 482 super.onseeking(value); 483 return this; 484 } 485 486 @Override /* Overridden from HtmlElement */ 487 public Script onselect(String value) { 488 super.onselect(value); 489 return this; 490 } 491 492 @Override /* Overridden from HtmlElement */ 493 public Script onshow(String value) { 494 super.onshow(value); 495 return this; 496 } 497 498 @Override /* Overridden from HtmlElement */ 499 public Script onstalled(String value) { 500 super.onstalled(value); 501 return this; 502 } 503 504 @Override /* Overridden from HtmlElement */ 505 public Script onsubmit(String value) { 506 super.onsubmit(value); 507 return this; 508 } 509 510 @Override /* Overridden from HtmlElement */ 511 public Script onsuspend(String value) { 512 super.onsuspend(value); 513 return this; 514 } 515 516 @Override /* Overridden from HtmlElement */ 517 public Script ontimeupdate(String value) { 518 super.ontimeupdate(value); 519 return this; 520 } 521 522 @Override /* Overridden from HtmlElement */ 523 public Script ontoggle(String value) { 524 super.ontoggle(value); 525 return this; 526 } 527 528 @Override /* Overridden from HtmlElement */ 529 public Script onvolumechange(String value) { 530 super.onvolumechange(value); 531 return this; 532 } 533 534 @Override /* Overridden from HtmlElement */ 535 public Script onwaiting(String value) { 536 super.onwaiting(value); 537 return this; 538 } 539 540 @Override /* Overridden from HtmlElement */ 541 public Script spellcheck(Object value) { 542 super.spellcheck(value); 543 return this; 544 } 545 546 /** 547 * <a class="doclink" href="https://www.w3.org/TR/html5/scripting-1.html#attr-script-src">src</a> attribute. 548 * 549 * <p> 550 * Address of the resource. 551 * 552 * <p> 553 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}. 554 * Strings must be valid URIs. 555 * 556 * <p> 557 * URIs defined by {@link UriResolver} can be used for values. 558 * 559 * @param value 560 * The new value for this attribute. 561 * Typically a {@link URL} or {@link String}. 562 * @return This object. 563 */ 564 public Script src(Object value) { 565 attrUri("src", value); 566 return this; 567 } 568 569 @Override /* Overridden from HtmlElement */ 570 public Script style(String value) { 571 super.style(value); 572 return this; 573 } 574 575 @Override /* Overridden from HtmlElement */ 576 public Script tabindex(Object value) { 577 super.tabindex(value); 578 return this; 579 } 580 581 @Override /* Overridden from HtmlElementRawText */ 582 public Script text(Object value) { 583 super.text(value); 584 return this; 585 } 586 587 @Override /* Overridden from HtmlElement */ 588 public Script title(String value) { 589 super.title(value); 590 return this; 591 } 592 593 @Override /* Overridden from HtmlElement */ 594 public Script translate(Object value) { 595 super.translate(value); 596 return this; 597 } 598 599 /** 600 * <a class="doclink" href="https://www.w3.org/TR/html5/scripting-1.html#attr-script-type">type</a> attribute. 601 * 602 * <p> 603 * Type of embedded resource. 604 * 605 * @param value The new value for this attribute. 606 * @return This object. 607 */ 608 public Script type(String value) { 609 attr("type", value); 610 return this; 611 } 612}