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 org.apache.juneau.annotation.*; 020import org.apache.juneau.internal.*; 021 022/** 023 * DTO for an HTML <a class="doclink" href="https://www.w3.org/TR/html5/forms.html#the-option-element"><option></a> 024 * element. 025 * 026 * <p> 027 * The option element represents an option in a select element or a suggestion in a datalist element. 028 * It defines a choice that users can select from a dropdown menu or autocomplete list. The value 029 * attribute specifies the value to be submitted, while the text content provides the display text. 030 * 031 * <h5 class='section'>Examples:</h5> 032 * <p class='bcode w800'> 033 * <jk>import static</jk> org.apache.juneau.bean.html5.HtmlBuilder.*; 034 * 035 * <jc>// Simple option</jc> 036 * Option <jv>option1</jv> = <jsm>option</jsm>(<js>"red"</js>, <js>"Red"</js>); 037 * 038 * <jc>// Selected option</jc> 039 * Option <jv>option2</jv> = <jsm>option</jsm>(<js>"blue"</js>, <js>"Blue"</js>) 040 * .selected(<jk>true</jk>); 041 * 042 * <jc>// Disabled option</jc> 043 * Option <jv>option3</jv> = <jsm>option</jsm>(<js>"gray"</js>, <js>"Gray"</js>) 044 * .disabled(<jk>true</jk>); 045 * 046 * <jc>// Option with label</jc> 047 * Option <jv>option4</jv> = <jsm>option</jsm>(<js>"green"</js>, <js>"Green"</js>) 048 * .label(<js>"Green Color"</js>); 049 * 050 * <jc>// Options in a select</jc> 051 * Select <jv>select1</jv> = <jsm>select</jsm>(<js>"color"</js>, 052 * <jsm>option</jsm>(<js>"red"</js>, <js>"Red"</js>), 053 * <jsm>option</jsm>(<js>"green"</js>, <js>"Green"</js>), 054 * <jsm>option</jsm>(<js>"blue"</js>, <js>"Blue"</js>) 055 * ); 056 * </p> 057 * 058 * <p> 059 * The following convenience methods are provided for constructing instances of this bean: 060 * <ul class='javatree'> 061 * <li class='jc'>{@link HtmlBuilder} 062 * <ul class='javatree'> 063 * <li class='jm'>{@link HtmlBuilder#option() option()} 064 * <li class='jm'>{@link HtmlBuilder#option(Object, Object...) option(Object, Object...)} 065 * </ul> 066 * </ul> 067 * </p> 068 * 069 * <h5 class='section'>See Also:</h5><ul> 070 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanHtml5">juneau-bean-html5</a> 071 * </ul> 072 */ 073@Bean(typeName="option") 074public class Option extends HtmlElementText { 075 076 /** 077 * Creates an empty {@link Option} element. 078 */ 079 public Option() {} 080 081 /** 082 * Creates an {@link Option} element with the specified {@link Option#text(Object)} attribute. 083 * 084 * @param text The {@link Option#text(Object)} attribute. 085 */ 086 public Option(Object text) { 087 text(text); 088 } 089 090 /** 091 * Creates an {@link Option} element with the specified {@link Option#value(Object)} attribute and 092 * {@link Option#text(Object)} node. 093 * 094 * @param value The {@link Option#value(Object)} attribute. 095 * @param text The {@link Option#text(Object)} node. 096 */ 097 public Option(Object value, Object text) { 098 value(value).text(text); 099 } 100 101 /** 102 * <a class="doclink" href="https://www.w3.org/TR/html5/forms.html#attr-option-disabled">disabled</a> attribute. 103 * 104 * <p> 105 * Whether the form control is disabled. 106 * 107 * <p> 108 * This attribute uses deminimized values: 109 * <ul> 110 * <li><jk>false</jk> - Attribute is not added</li> 111 * <li><jk>true</jk> - Attribute is added as <js>"disabled"</js></li> 112 * <li>Other values - Passed through as-is</li> 113 * </ul> 114 * 115 * @param disabled 116 * The new value for this attribute. 117 * Typically a {@link Boolean} or {@link String}. 118 * @return This object. 119 */ 120 public Option disabled(Object value) { 121 attr("disabled", deminimize(value, "disabled")); 122 return this; 123 } 124 125 /** 126 * <a class="doclink" href="https://www.w3.org/TR/html5/forms.html#attr-option-label">label</a> attribute. 127 * 128 * <p> 129 * Specifies the user-visible label for the option. This label is displayed in the select element 130 * and can be different from the option's value. 131 * 132 * <p> 133 * The label should be user-friendly and descriptive of what the option represents. 134 * 135 * @param label The user-visible label for the option. 136 * @return This object. 137 */ 138 public Option label(String value) { 139 attr("label", value); 140 return this; 141 } 142 143 /** 144 * <a class="doclink" href="https://www.w3.org/TR/html5/forms.html#attr-option-selected">selected</a> attribute. 145 * 146 * <p> 147 * Whether the option is selected by default. 148 * 149 * <p> 150 * This attribute uses deminimized values: 151 * <ul> 152 * <li><jk>false</jk> - Attribute is not added</li> 153 * <li><jk>true</jk> - Attribute is added as <js>"selected"</js></li> 154 * <li>Other values - Passed through as-is</li> 155 * </ul> 156 * 157 * @param selected 158 * The new value for this attribute. 159 * Typically a {@link Boolean} or {@link String}. 160 * @return This object. 161 */ 162 public Option selected(Object value) { 163 attr("selected", deminimize(value, "selected")); 164 return this; 165 } 166 167 /** 168 * <a class="doclink" href="https://www.w3.org/TR/html5/forms.html#attr-option-value">value</a> attribute. 169 * 170 * <p> 171 * Value to be used for form submission. 172 * 173 * @param value 174 * The new value for this attribute. 175 * Typically a {@link Number} or {@link String}. 176 * @return This object. 177 */ 178 public Option value(Object value) { 179 attr("value", value); 180 return this; 181 } 182 183 //----------------------------------------------------------------------------------------------------------------- 184 // Overridden methods 185 //----------------------------------------------------------------------------------------------------------------- 186 @Override /* Overridden from HtmlElement */ 187 public Option _class(String value) { // NOSONAR - Intentional naming. 188 super._class(value); 189 return this; 190 } 191 192 @Override /* Overridden from HtmlElement */ 193 public Option accesskey(String value) { 194 super.accesskey(value); 195 return this; 196 } 197 198 @Override /* Overridden from HtmlElement */ 199 public Option contenteditable(Object value) { 200 super.contenteditable(value); 201 return this; 202 } 203 204 @Override /* Overridden from HtmlElement */ 205 public Option dir(String value) { 206 super.dir(value); 207 return this; 208 } 209 210 @Override /* Overridden from HtmlElement */ 211 public Option hidden(Object value) { 212 super.hidden(value); 213 return this; 214 } 215 216 @Override /* Overridden from HtmlElement */ 217 public Option id(String value) { 218 super.id(value); 219 return this; 220 } 221 222 @Override /* Overridden from HtmlElement */ 223 public Option lang(String value) { 224 super.lang(value); 225 return this; 226 } 227 228 @Override /* Overridden from HtmlElement */ 229 public Option onabort(String value) { 230 super.onabort(value); 231 return this; 232 } 233 234 @Override /* Overridden from HtmlElement */ 235 public Option onblur(String value) { 236 super.onblur(value); 237 return this; 238 } 239 240 @Override /* Overridden from HtmlElement */ 241 public Option oncancel(String value) { 242 super.oncancel(value); 243 return this; 244 } 245 246 @Override /* Overridden from HtmlElement */ 247 public Option oncanplay(String value) { 248 super.oncanplay(value); 249 return this; 250 } 251 252 @Override /* Overridden from HtmlElement */ 253 public Option oncanplaythrough(String value) { 254 super.oncanplaythrough(value); 255 return this; 256 } 257 258 @Override /* Overridden from HtmlElement */ 259 public Option onchange(String value) { 260 super.onchange(value); 261 return this; 262 } 263 264 @Override /* Overridden from HtmlElement */ 265 public Option onclick(String value) { 266 super.onclick(value); 267 return this; 268 } 269 270 @Override /* Overridden from HtmlElement */ 271 public Option oncuechange(String value) { 272 super.oncuechange(value); 273 return this; 274 } 275 276 @Override /* Overridden from HtmlElement */ 277 public Option ondblclick(String value) { 278 super.ondblclick(value); 279 return this; 280 } 281 282 @Override /* Overridden from HtmlElement */ 283 public Option ondurationchange(String value) { 284 super.ondurationchange(value); 285 return this; 286 } 287 288 @Override /* Overridden from HtmlElement */ 289 public Option onemptied(String value) { 290 super.onemptied(value); 291 return this; 292 } 293 294 @Override /* Overridden from HtmlElement */ 295 public Option onended(String value) { 296 super.onended(value); 297 return this; 298 } 299 300 @Override /* Overridden from HtmlElement */ 301 public Option onerror(String value) { 302 super.onerror(value); 303 return this; 304 } 305 306 @Override /* Overridden from HtmlElement */ 307 public Option onfocus(String value) { 308 super.onfocus(value); 309 return this; 310 } 311 312 @Override /* Overridden from HtmlElement */ 313 public Option oninput(String value) { 314 super.oninput(value); 315 return this; 316 } 317 318 @Override /* Overridden from HtmlElement */ 319 public Option oninvalid(String value) { 320 super.oninvalid(value); 321 return this; 322 } 323 324 @Override /* Overridden from HtmlElement */ 325 public Option onkeydown(String value) { 326 super.onkeydown(value); 327 return this; 328 } 329 330 @Override /* Overridden from HtmlElement */ 331 public Option onkeypress(String value) { 332 super.onkeypress(value); 333 return this; 334 } 335 336 @Override /* Overridden from HtmlElement */ 337 public Option onkeyup(String value) { 338 super.onkeyup(value); 339 return this; 340 } 341 342 @Override /* Overridden from HtmlElement */ 343 public Option onload(String value) { 344 super.onload(value); 345 return this; 346 } 347 348 @Override /* Overridden from HtmlElement */ 349 public Option onloadeddata(String value) { 350 super.onloadeddata(value); 351 return this; 352 } 353 354 @Override /* Overridden from HtmlElement */ 355 public Option onloadedmetadata(String value) { 356 super.onloadedmetadata(value); 357 return this; 358 } 359 360 @Override /* Overridden from HtmlElement */ 361 public Option onloadstart(String value) { 362 super.onloadstart(value); 363 return this; 364 } 365 366 @Override /* Overridden from HtmlElement */ 367 public Option onmousedown(String value) { 368 super.onmousedown(value); 369 return this; 370 } 371 372 @Override /* Overridden from HtmlElement */ 373 public Option onmouseenter(String value) { 374 super.onmouseenter(value); 375 return this; 376 } 377 378 @Override /* Overridden from HtmlElement */ 379 public Option onmouseleave(String value) { 380 super.onmouseleave(value); 381 return this; 382 } 383 384 @Override /* Overridden from HtmlElement */ 385 public Option onmousemove(String value) { 386 super.onmousemove(value); 387 return this; 388 } 389 390 @Override /* Overridden from HtmlElement */ 391 public Option onmouseout(String value) { 392 super.onmouseout(value); 393 return this; 394 } 395 396 @Override /* Overridden from HtmlElement */ 397 public Option onmouseover(String value) { 398 super.onmouseover(value); 399 return this; 400 } 401 402 @Override /* Overridden from HtmlElement */ 403 public Option onmouseup(String value) { 404 super.onmouseup(value); 405 return this; 406 } 407 408 @Override /* Overridden from HtmlElement */ 409 public Option onmousewheel(String value) { 410 super.onmousewheel(value); 411 return this; 412 } 413 414 @Override /* Overridden from HtmlElement */ 415 public Option onpause(String value) { 416 super.onpause(value); 417 return this; 418 } 419 420 @Override /* Overridden from HtmlElement */ 421 public Option onplay(String value) { 422 super.onplay(value); 423 return this; 424 } 425 426 @Override /* Overridden from HtmlElement */ 427 public Option onplaying(String value) { 428 super.onplaying(value); 429 return this; 430 } 431 432 @Override /* Overridden from HtmlElement */ 433 public Option onprogress(String value) { 434 super.onprogress(value); 435 return this; 436 } 437 438 @Override /* Overridden from HtmlElement */ 439 public Option onratechange(String value) { 440 super.onratechange(value); 441 return this; 442 } 443 444 @Override /* Overridden from HtmlElement */ 445 public Option onreset(String value) { 446 super.onreset(value); 447 return this; 448 } 449 450 @Override /* Overridden from HtmlElement */ 451 public Option onresize(String value) { 452 super.onresize(value); 453 return this; 454 } 455 456 @Override /* Overridden from HtmlElement */ 457 public Option onscroll(String value) { 458 super.onscroll(value); 459 return this; 460 } 461 462 @Override /* Overridden from HtmlElement */ 463 public Option onseeked(String value) { 464 super.onseeked(value); 465 return this; 466 } 467 468 @Override /* Overridden from HtmlElement */ 469 public Option onseeking(String value) { 470 super.onseeking(value); 471 return this; 472 } 473 474 @Override /* Overridden from HtmlElement */ 475 public Option onselect(String value) { 476 super.onselect(value); 477 return this; 478 } 479 480 @Override /* Overridden from HtmlElement */ 481 public Option onshow(String value) { 482 super.onshow(value); 483 return this; 484 } 485 486 @Override /* Overridden from HtmlElement */ 487 public Option onstalled(String value) { 488 super.onstalled(value); 489 return this; 490 } 491 492 @Override /* Overridden from HtmlElement */ 493 public Option onsubmit(String value) { 494 super.onsubmit(value); 495 return this; 496 } 497 498 @Override /* Overridden from HtmlElement */ 499 public Option onsuspend(String value) { 500 super.onsuspend(value); 501 return this; 502 } 503 504 @Override /* Overridden from HtmlElement */ 505 public Option ontimeupdate(String value) { 506 super.ontimeupdate(value); 507 return this; 508 } 509 510 @Override /* Overridden from HtmlElement */ 511 public Option ontoggle(String value) { 512 super.ontoggle(value); 513 return this; 514 } 515 516 @Override /* Overridden from HtmlElement */ 517 public Option onvolumechange(String value) { 518 super.onvolumechange(value); 519 return this; 520 } 521 522 @Override /* Overridden from HtmlElement */ 523 public Option onwaiting(String value) { 524 super.onwaiting(value); 525 return this; 526 } 527 528 @Override /* Overridden from HtmlElement */ 529 public Option spellcheck(Object value) { 530 super.spellcheck(value); 531 return this; 532 } 533 534 @Override /* Overridden from HtmlElement */ 535 public Option style(String value) { 536 super.style(value); 537 return this; 538 } 539 540 @Override /* Overridden from HtmlElement */ 541 public Option tabindex(Object value) { 542 super.tabindex(value); 543 return this; 544 } 545 546 @Override /* Overridden from HtmlElement */ 547 public Option title(String value) { 548 super.title(value); 549 return this; 550 } 551 552 @Override /* Overridden from HtmlElement */ 553 public Option translate(Object value) { 554 super.translate(value); 555 return this; 556 } 557 558 @Override /* Overridden from HtmlElementText */ 559 public Option text(Object value) { 560 super.text(value); 561 return this; 562 } 563}