/*! * jQuery UI Checkboxradio 1.13.3 * https://jqueryui.com * * Copyright OpenJS Foundation and other contributors * Released under the MIT license. * https://jquery.org/license */ //>>label: Checkboxradio //>>group: Widgets //>>description: Enhances a form with multiple themeable checkboxes or radio buttons. //>>docs: https://api.jqueryui.com/checkboxradio/ //>>demos: https://jqueryui.com/checkboxradio/ //>>css.structure: ../../themes/base/core.css //>>css.structure: ../../themes/base/button.css //>>css.structure: ../../themes/base/checkboxradio.css //>>css.theme: ../../themes/base/theme.css ( function( factory ) { "use strict"; if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "jquery", "../form-reset-mixin", "../labels", "../widget" ], factory ); } else { // Browser globals factory( jQuery ); } } )( function( $ ) { "use strict"; $.widget( "ui.checkboxradio", [ $.ui.formResetMixin, { version: "1.13.3", options: { disabled: null, label: null, icon: true, classes: { "ui-checkboxradio-label": "ui-corner-all", "ui-checkboxradio-icon": "ui-corner-all" } }, _getCreateOptions: function() { var disabled, labels, labelContents; var options = this._super() || {}; // We read the type here, because it makes more sense to throw a element type error first, // rather then the error for lack of a label. Often if its the wrong type, it // won't have a label (e.g. calling on a div, btn, etc) this._readType(); labels = this.element.labels(); // If there are multiple labels, use the last one this.label = $( labels[ labels.length - 1 ] ); if ( !this.label.length ) { $.error( "No label found for checkboxradio widget" ); } this.originalLabel = ""; // We need to get the label text but this may also need to make sure it does not contain the // input itself. // The label contents could be text, html, or a mix. We wrap all elements // and read the wrapper's `innerHTML` to get a string representation of // the label, without the input as part of it. labelContents = this.label.contents().not( this.element[ 0 ] ); if ( labelContents.length ) { this.originalLabel += labelContents .clone() .wrapAll( "<div></div>" ) .parent() .html(); } // Set the label option if we found label text if ( this.originalLabel ) { options.label = this.originalLabel; } disabled = this.element[ 0 ].disabled; if ( disabled != null ) { options.disabled = disabled; } return options; }, _create: function() { var checked = this.element[ 0 ].checked; this._bindFormResetHandler(); if ( this.options.disabled == null ) { this.options.disabled = this.element[ 0 ].disabled; } this._setOption( "disabled", this.options.disabled ); this._addClass( "ui-checkboxradio", "ui-helper-hidden-accessible" ); this._addClass( this.label, "ui-checkboxradio-label", "ui-button ui-widget" ); if ( this.type === "radio" ) { this._addClass( this.label, "ui-checkboxradio-radio-label" ); } if ( this.options.label && this.options.label !== this.originalLabel ) { this._updateLabel(); } else if ( this.originalLabel ) { this.options.label = this.originalLabel; } this._enhance(); if ( checked ) { this._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" ); } this._on( { change: "_toggleClasses", focus: function() { this._addClass( this.label, null, "ui-state-focus ui-visual-focus" ); }, blur: function() { this._removeClass( this.label, null, "ui-state-focus ui-visual-focus" ); } } ); }, _readType: function() { var nodeName = this.element[ 0 ].nodeName.toLowerCase(); this.type = this.element[ 0 ].type; if ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) { $.error( "Can't create checkboxradio on element.nodeName=" + nodeName + " and element.type=" + this.type ); } }, // Support jQuery Mobile enhanced option _enhance: function() { this._updateIcon( this.element[ 0 ].checked ); }, widget: function() { return this.label; }, _getRadioGroup: function() { var group; var name = this.element[ 0 ].name; var nameSelector = "input[name='" + $.escapeSelector( name ) + "']"; if ( !name ) { return $( [] ); } if ( this.form.length ) { group = $( this.form[ 0 ].elements ).filter( nameSelector ); } else { // Not inside a form, check all inputs that also are not inside a form group = $( nameSelector ).filter( function() { return $( this )._form().length === 0; } ); } return group.not( this.element ); }, _toggleClasses: function() { var checked = this.element[ 0 ].checked; this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked ); if ( this.options.icon && this.type === "checkbox" ) { this._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked ) ._toggleClass( this.icon, null, "ui-icon-blank", !checked ); } if ( this.type === "radio" ) { this._getRadioGroup() .each( function() { var instance = $( this ).checkboxradio( "instance" ); if ( instance ) { instance._removeClass( instance.label, "ui-checkboxradio-checked", "ui-state-active" ); } } ); } }, _destroy: function() { this._unbindFormResetHandler(); if ( this.icon ) { this.icon.remove(); this.iconSpace.remove(); } }, _setOption: function( key, value ) { // We don't allow the value to be set to nothing if ( key === "label" && !value ) { return; } this._super( key, value ); if ( key === "disabled" ) { this._toggleClass( this.label, null, "ui-state-disabled", value ); this.element[ 0 ].disabled = value; // Don't refresh when setting disabled return; } this.refresh(); }, _updateIcon: function( checked ) { var toAdd = "ui-icon ui-icon-background "; if ( this.options.icon ) { if ( !this.icon ) { this.icon = $( "<span>" ); this.iconSpace = $( "<span> </span>" ); this._addClass( this.iconSpace, "ui-checkboxradio-icon-space" ); } if ( this.type === "checkbox" ) { toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank"; this._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" ); } else { toAdd += "ui-icon-blank"; } this._addClass( this.icon, "ui-checkboxradio-icon", toAdd ); if ( !checked ) { this._removeClass( this.icon, null, "ui-icon-check ui-state-checked" ); } this.icon.prependTo( this.label ).after( this.iconSpace ); } else if ( this.icon !== undefined ) { this.icon.remove(); this.iconSpace.remove(); delete this.icon; } }, _updateLabel: function() { // Remove the contents of the label ( minus the icon, icon space, and input ) var contents = this.label.contents().not( this.element[ 0 ] ); if ( this.icon ) { contents = contents.not( this.icon[ 0 ] ); } if ( this.iconSpace ) { contents = contents.not( this.iconSpace[ 0 ] ); } contents.remove(); this.label.append( this.options.label ); }, refresh: function() { var checked = this.element[ 0 ].checked, isDisabled = this.element[ 0 ].disabled; this._updateIcon( checked ); this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked ); if ( this.options.label !== null ) { this._updateLabel(); } if ( isDisabled !== this.options.disabled ) { this._setOptions( { "disabled": isDisabled } ); } } } ] ); return $.ui.checkboxradio; } );
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
accordion.js | File | 15.76 KB | 0644 |
|
accordion.min.js | File | 8.65 KB | 0644 |
|
autocomplete.js | File | 17.12 KB | 0644 |
|
autocomplete.min.js | File | 8.34 KB | 0644 |
|
button.js | File | 11.43 KB | 0644 |
|
button.min.js | File | 6.01 KB | 0644 |
|
checkboxradio.js | File | 7.41 KB | 0644 |
|
checkboxradio.min.js | File | 4.25 KB | 0644 |
|
controlgroup.js | File | 8.42 KB | 0644 |
|
controlgroup.min.js | File | 4.3 KB | 0644 |
|
core.js | File | 48.72 KB | 0644 |
|
core.min.js | File | 20.96 KB | 0644 |
|
datepicker.js | File | 80.59 KB | 0644 |
|
datepicker.min.js | File | 35.89 KB | 0644 |
|
dialog.js | File | 23.34 KB | 0644 |
|
dialog.min.js | File | 12.79 KB | 0644 |
|
draggable.js | File | 34.71 KB | 0644 |
|
draggable.min.js | File | 17.99 KB | 0644 |
|
droppable.js | File | 12.6 KB | 0644 |
|
droppable.min.js | File | 6.51 KB | 0644 |
|
effect-blind.js | File | 1.61 KB | 0644 |
|
effect-blind.min.js | File | 880 B | 0644 |
|
effect-bounce.js | File | 2.6 KB | 0644 |
|
effect-bounce.min.js | File | 991 B | 0644 |
|
effect-clip.js | File | 1.54 KB | 0644 |
|
effect-clip.min.js | File | 796 B | 0644 |
|
effect-drop.js | File | 1.56 KB | 0644 |
|
effect-drop.min.js | File | 753 B | 0644 |
|
effect-explode.js | File | 2.86 KB | 0644 |
|
effect-explode.min.js | File | 1.1 KB | 0644 |
|
effect-fade.js | File | 968 B | 0644 |
|
effect-fade.min.js | File | 525 B | 0644 |
|
effect-fold.js | File | 2.13 KB | 0644 |
|
effect-fold.min.js | File | 1020 B | 0644 |
|
effect-highlight.js | File | 1.21 KB | 0644 |
|
effect-highlight.min.js | File | 648 B | 0644 |
|
effect-puff.js | File | 995 B | 0644 |
|
effect-puff.min.js | File | 510 B | 0644 |
|
effect-pulsate.js | File | 1.53 KB | 0644 |
|
effect-pulsate.min.js | File | 688 B | 0644 |
|
effect-scale.js | File | 1.34 KB | 0644 |
|
effect-scale.min.js | File | 723 B | 0644 |
|
effect-shake.js | File | 1.84 KB | 0644 |
|
effect-shake.min.js | File | 846 B | 0644 |
|
effect-size.js | File | 5.29 KB | 0644 |
|
effect-size.min.js | File | 2.43 KB | 0644 |
|
effect-slide.js | File | 1.92 KB | 0644 |
|
effect-slide.min.js | File | 917 B | 0644 |
|
effect-transfer.js | File | 888 B | 0644 |
|
effect-transfer.min.js | File | 442 B | 0644 |
|
effect.js | File | 24.04 KB | 0644 |
|
effect.min.js | File | 10.09 KB | 0644 |
|
menu.js | File | 18.52 KB | 0644 |
|
menu.min.js | File | 9.96 KB | 0644 |
|
mouse.js | File | 6.08 KB | 0644 |
|
mouse.min.js | File | 3.35 KB | 0644 |
|
progressbar.js | File | 4.14 KB | 0644 |
|
progressbar.min.js | File | 2.5 KB | 0644 |
|
resizable.js | File | 29.78 KB | 0644 |
|
resizable.min.js | File | 18.38 KB | 0644 |
|
selectable.js | File | 7.94 KB | 0644 |
|
selectable.min.js | File | 4.4 KB | 0644 |
|
selectmenu.js | File | 15.96 KB | 0644 |
|
selectmenu.min.js | File | 9.28 KB | 0644 |
|
slider.js | File | 19.14 KB | 0644 |
|
slider.min.js | File | 10.51 KB | 0644 |
|
sortable.js | File | 46.52 KB | 0644 |
|
sortable.min.js | File | 24.91 KB | 0644 |
|
spinner.js | File | 14.1 KB | 0644 |
|
spinner.min.js | File | 7.5 KB | 0644 |
|
tabs.js | File | 23.11 KB | 0644 |
|
tabs.min.js | File | 11.73 KB | 0644 |
|
tooltip.js | File | 14.14 KB | 0644 |
|
tooltip.min.js | File | 6.1 KB | 0644 |
|