Setup
Load required file(s)
The only required file is jquery.conditionalbuttons.min.js
.
Additionally, you can optionally add contextual-eval.min.js to simply the expressions.
//-- with contextual-eval --//
$('#btn-zoom').conditionalbuttons('checkedBoxes[0] == true');
//-- without contextual-eval --//
$('#btn-zoom').conditionalbuttons('c.checkedBoxes[0] == true');
Usages
You have ways to register buttons.
Generally you will do this:
$('#btn-zoom').conditionalbuttons('checkedBoxes[0] == true');
Optional you may pass an object to enable additional features:
//-- these settings are optional --//
$('#btn-zoom').conditionalbuttons({
// expression
condition: 'checkedBoxes[0] == true',
// custom callback when button stage become enabled
activeCallback: function(button) {
button.css('color', 'red');
},
// custom callback when button stage become disabled
disableCallback: function(button) {
button.css('color', 'silver');
}
});
Internally button registration is done in the statically way:
$.conditionalbuttons(
// button jQuery selector
'#btn-zoom',
// expression
'checkedBoxes[0] == true',
// optional custom callback when button stage become enabled
activeCallback: function(button) {
button.css('color', 'red');
},
// optional custom callback when button stage become disabled
disableCallback: function(button) {
button.css('color', 'silver');
}
);
Demo
Register Expressions
The following expressions have registered (contextual-eval used):
Note: multiple expressions added to the same button will joined by OR operator.
//-- additional feature is registered using object --//
$('#btn-zoom').conditionalbuttons({
condition: 'checkedBoxes[0] == true',
activeCallback: function(button) {
button.css('color', '#ef4836');
},
disableCallback: function(button) {
button.css('color', '#95a5a6');
}
});
//-- mulitple expressions added onto a button will joined using OR operator --//
$('#btn-zoom').conditionalbuttons('checkedBoxes[4] == true');
$('#btn-remove, #btn-star').conditionalbuttons('checkedBoxes[0] == true && checkedBoxes[1] == true');
$('#btn-map, #btn-cloud, #btn-plus').conditionalbuttons('checkedBoxes[0] == false && checkedBoxes[2] == true && checkedBoxes[3] == true');
$('.btn-group button').conditionalbuttons('checkedBoxes[5] == true');
Change button stages by calling trigger:
//-- normalize your conditions is more preferable --//
var controls = $('.control input');
controls.click(function() {
var ctx = [];
for(var i = 0; i < controls.length; i++) {
ctx[i] = controls[i].checked ? true : false;
}
$.conditionalbuttons.trigger({checkedBoxes: ctx});
});
Console
or =
+ = + +
+ - = + +
See Also
Contextual Evaluation - https://github.com/bcfelix/contextual-eval