/*
* @class Switcher
*/
(function() {
var Switcher;
Switcher = function($el, options) {
var box_class;
if (options == null) {
options = {};
}
this.options = $.extend({}, Switcher.DEFAULTS, options);
this.$checkbox = null;
this.$box = null;
if ($el.is('input[type="checkbox"]')) {
box_class = $el.attr('data-class');
this.$checkbox = $el;
this.$box = $('
' + this.options.on_state_content + '
' + this.options.off_state_content + '
');
if (this.options.theme) {
this.$box.addClass('switcher-theme-' + this.options.theme);
}
if (box_class) {
this.$box.addClass(box_class);
}
this.$box.insertAfter(this.$checkbox).prepend(this.$checkbox);
} else {
this.$box = $el;
this.$checkbox = $('input[type="checkbox"]', this.$box);
}
if (this.$checkbox.prop('disabled')) {
this.$box.addClass('disabled');
}
if (this.$checkbox.is(':checked')) {
this.$box.addClass('checked');
}
this.$checkbox.on('click', function(e) {
return e.stopPropagation();
});
this.$box.on('touchend click', (function(_this) {
return function(e) {
e.stopPropagation();
e.preventDefault();
return _this.toggle();
};
})(this));
return this;
};
/*
* Enable switcher.
*
*/
Switcher.prototype.enable = function() {
this.$checkbox.prop('disabled', false);
return this.$box.removeClass('disabled');
};
/*
* Disable switcher.
*
*/
Switcher.prototype.disable = function() {
this.$checkbox.prop('disabled', true);
return this.$box.addClass('disabled');
};
/*
* Set switcher to true.
*
*/
Switcher.prototype.on = function() {
if (!this.$checkbox.is(':checked')) {
this.$checkbox.click();
return this.$box.addClass('checked');
}
};
/*
* Set switcher to false.
*
*/
Switcher.prototype.off = function() {
if (this.$checkbox.is(':checked')) {
this.$checkbox.click();
return this.$box.removeClass('checked');
}
};
/*
* Toggle switcher.
*
*/
Switcher.prototype.toggle = function() {
if (this.$checkbox.click().is(':checked')) {
return this.$box.addClass('checked');
} else {
return this.$box.removeClass('checked');
}
};
Switcher.DEFAULTS = {
theme: null,
on_state_content: 'ON',
off_state_content: 'OFF'
};
$.fn.switcher = function(options, attrs) {
return $(this).each(function() {
var $this, sw;
$this = $(this);
sw = $.data(this, 'Switcher');
if (!sw) {
return $.data(this, 'Switcher', new Switcher($this, options));
} else if (options === 'enable') {
return sw.enable();
} else if (options === 'disable') {
return sw.disable();
} else if (options === 'on') {
return sw.on();
} else if (options === 'off') {
return sw.off();
} else if (options === 'toggle') {
return sw.toggle();
}
});
};
$.fn.switcher.Constructor = Switcher;
}).call(this);