Skip to content

Commit

Permalink
#2440 Finish indeterminate, consolidate API to avoid confusion
Browse files Browse the repository at this point in the history
  • Loading branch information
jlukic committed Jun 26, 2015
1 parent e05d049 commit 8db305a
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 135 deletions.
291 changes: 157 additions & 134 deletions src/definitions/modules/checkbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ $.fn.checkbox = function(parameters) {

module.create.label();
module.bind.events();
module.set.tabbable();

module.set.input.tabbable();
module.observeChanges();

module.instantiate();
Expand Down Expand Up @@ -95,16 +95,24 @@ $.fn.checkbox = function(parameters) {
},

setup: function() {
if( module.is.checked() ) {
module.debug('Setting initial value to checked');
if( module.is.indeterminate() ) {
module.debug('Initial value is indeterminate');
module.set.indeterminate();
if(settings.fireOnInit) {
settings.onIndeterminate.call($input[0]);
settings.onChange.call($input[0]);
}
}
else if( module.is.checked() ) {
module.debug('Initial value is checked');
module.set.checked();
if(settings.fireOnInit) {
settings.onChecked.call($input[0]);
settings.onChange.call($input[0]);
}
}
else {
module.debug('Setting initial value to unchecked');
module.debug('Initial value is unchecked');
module.set.unchecked();
if(settings.fireOnInit) {
settings.onUnchecked.call($input[0]);
Expand Down Expand Up @@ -181,6 +189,70 @@ $.fn.checkbox = function(parameters) {
}
},

check: function() {
if( !module.is.indeterminate() && module.is.checked() ) {
module.debug('Checkbox is already checked');
return;
}
module.debug('Checking checkbox', $input);
module.set.checked();
settings.onChecked.call($input[0]);
settings.onChange.call($input[0]);
},

uncheck: function() {
if( !module.is.indeterminate() && module.is.unchecked() ) {
module.debug('Checkbox is already unchecked');
return;
}
module.debug('Unchecking checkbox');
module.set.unchecked();
settings.onUnchecked.call($input[0]);
settings.onChange.call($input[0]);
},

indeterminate: function() {
if( module.is.indeterminate() ) {
module.debug('Checkbox is already indeterminate');
return;
}
module.debug('Making checkbox indeterminate');
module.set.indeterminate();
settings.onIndeterminate.call($input[0]);
settings.onChange.call($input[0]);
},

determinate: function() {
if( module.is.determinate() ) {
module.debug('Checkbox is already determinate');
return;
}
module.debug('Making checkbox determinate');
module.set.determinate();
settings.onDeterminate.call($input[0]);
settings.onChange.call($input[0]);
},

enable: function() {
if( module.is.enabled() ) {
module.debug('Checkbox is already enabled');
return;
}
module.debug('Enabling checkbox');
module.set.enabled();
settings.onEnable.call($input[0]);
},

disable: function() {
if( module.is.disabled() ) {
module.debug('Checkbox is already disabled');
return;
}
module.debug('Disabling checkbox');
module.set.disabled();
settings.onDisable.call($input[0]);
},

get: {
radios: function() {
var
Expand Down Expand Up @@ -231,107 +303,110 @@ $.fn.checkbox = function(parameters) {

set: {
checked: function() {
module.debug('Setting state to checked');
if(!module.is.indeterminate() && module.is.checked()) {
module.debug('Input is already checked');
return;
}
module.verbose('Setting state to checked', $input[0]);
if( module.is.radio() ) {
module.uncheckOthers();
}
$module.addClass(className.checked);
$input
.prop('indeterminate', false)
.prop('checked', true)
;
$module
.removeClass(className.indeterminate)
.addClass(className.checked)
;
module.trigger.change();
},
unchecked: function() {
if(!module.is.indeterminate() && module.is.unchecked() ) {
module.debug('Input is already unchecked');
return;
}
module.debug('Setting state to unchecked');
$module.removeClass(className.checked);
$input
.prop('indeterminate', false)
.prop('checked', false)
;
$module
.removeClass(className.indeterminate)
.removeClass(className.checked)
;
module.trigger.change();
},
indeterminate: function() {
if( module.is.indeterminate() ) {
module.debug('Input is already indeterminate');
return;
}
module.debug('Setting state to indeterminate');
$module.addClass(className.indeterminate);
$input
.prop('indeterminate', true)
;
$module
.addClass(className.indeterminate)
;
module.trigger.change();
},
determinate: function() {
if( module.is.determinate() ) {
module.debug('Input is already determinate');
return;
}
module.debug('Setting state to determinate');
$module.removeClass(className.indeterminate);
$input
.prop('indeterminate', false)
;
$module
.removeClass(className.indeterminate)
;
},
disabled: function() {
if( module.is.disabled() ) {
module.debug('Input is already disabled');
return;
}
module.debug('Setting state to disabled');
$module.addClass(className.disabled);
$input
.prop('disabled', 'disabled')
;
$module
.addClass(className.disabled)
;
module.trigger.change();
},
enabled: function() {
if( module.is.enabled() ) {
module.debug('Input is already enabled');
return;
}
module.debug('Setting state to enabled');
$input
.prop('disabled', false)
;
$module.removeClass(className.disabled);
module.trigger.change();
},
input: {
checked: function() {
if( !module.is.checked() ) {
module.verbose('Setting input state to checked', $input[0]);
$input
.prop('indeterminate', false)
.prop('checked', true)
.trigger('change')
;
settings.onChecked.call($input[0]);
settings.onChange.call($input[0]);
}
},
unchecked: function() {
if( !module.is.unchecked() ) {
module.verbose('Setting input state to unchecked', $input[0]);
$input
.prop('indeterminate', false)
.prop('checked', false)
.trigger('change')
;
settings.onUnchecked.call($input[0]);
settings.onChange.call($input[0]);
}
},
indeterminate: function() {
if( !module.is.indeterminate() ) {
module.verbose('Setting input state to indeterminate', $input[0]);
$input
.prop('indeterminate', true)
.trigger('change')
;
settings.onIndeterminate.call($input[0]);
settings.onChange.call($input[0]);
}
},
determinate: function() {
if( !module.is.determinate() ) {
module.verbose('Setting input state to determinate', $input[0]);
$input
.prop('indeterminate', false)
.trigger('change')
;
settings.onDeterminate.call($input[0]);
settings.onChange.call($input[0]);
}
},
disabled: function() {
if( module.is.disabled() ) {
module.verbose('Setting input state to disabled', $input[0]);
$input
.prop('disabled', 'disabled')
;
settings.onDisabled.call($input[0]);
settings.onChange.call($input[0]);
}
},
enabled: function() {
if( !module.is.enabled() ) {
module.verbose('Setting input state to enabled', $input[0]);
$input
.prop('disabled', false)
;
settings.onEnabled.call($input[0]);
settings.onChange.call($input[0]);
}
},
tabbable: function() {
if( $input.attr('tabindex') === undefined) {
$input.attr('tabindex', 0);
}
tabbable: function() {
module.verbose('Adding tabindex to checkbox');
if( $input.attr('tabindex') === undefined) {
$input.attr('tabindex', 0);
}
}
},

trigger: {
change: function() {
module.verbose('Triggering change event from programmatic change');
$input
.trigger('change')
;
}
},


create: {
label: function() {
Expand Down Expand Up @@ -371,58 +446,6 @@ $.fn.checkbox = function(parameters) {
}
},

check: function() {
module.debug('Checking checkbox', $input);
if(module.is.indeterminate()) {
module.set.input.determinate();
module.set.determinate();
}
if(module.is.checked()) {
module.debug('Module is already checked');
return;
}
module.set.input.checked();
module.set.checked();
},

uncheck: function() {
module.debug('Unchecking checkbox');
if(module.is.indeterminate()) {
module.set.input.determinate();
module.set.determinate();
}
if(module.is.unchecked()) {
module.debug('Module is already unchecked');
return;
}
module.set.input.unchecked();
module.set.unchecked();
},

indeterminate: function() {
module.debug('Making checkbox indeterminate');
module.set.input.indeterminate();
module.set.indeterminate();
},

determinate: function() {
module.debug('Making checkbox determinate');
module.set.input.determinate();
module.set.determinate();
},

enable: function() {
module.debug('Enabling checkbox');
module.set.input.enabled();
module.set.enabled();
},

disable: function() {
module.debug('Disabling checkbox');
module.set.input.disabled();
module.set.disabled();
},

uncheckOthers: function() {
var
$radios = module.get.radios()
Expand All @@ -438,7 +461,7 @@ $.fn.checkbox = function(parameters) {
}
return;
}
if( module.is.unchecked() ) {
if( module.is.indeterminate() || module.is.unchecked() ) {
module.debug('Currently unchecked');
module.check();
}
Expand Down
2 changes: 1 addition & 1 deletion src/themes/default/modules/checkbox.variables
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
/* Indeterminate */
@checkboxIndeterminateBackground: @checkboxActiveBackground;
@checkboxIndeterminateBorderColor: @checkboxActiveBorderColor;
@checkboxIndeterminateCheckOpacity: 0.8;
@checkboxIndeterminateCheckOpacity: 1;
@checkboxIndeterminateCheckColor: @checkboxActiveCheckColor;

/* Disabled */
Expand Down

0 comments on commit 8db305a

Please sign in to comment.