Daniel@0: "use strict"; Daniel@0: Daniel@0: (function($) { Daniel@0: $.widget("cgpma.tickbox", { Daniel@0: Daniel@0: options: { Daniel@0: value: null, Daniel@0: baseValue: null, Daniel@0: }, Daniel@0: Daniel@0: _create : function() { Daniel@0: var widget = this; Daniel@0: widget.$element = this.element; Daniel@0: widget.$element.disableSelection(); Daniel@0: widget.$tick = $.bem.generateElement("cgpma", "tickbox-tick"); Daniel@0: widget.$tick.appendTo(widget.$element); Daniel@0: Daniel@0: widget.$element.data("widget", widget); Daniel@0: widget.$element.bind("click", widget.__handleTickClick); Daniel@0: }, Daniel@0: Daniel@0: _destroy : function() { Daniel@0: this.$element.removeData(); Daniel@0: }, Daniel@0: Daniel@0: _setOption: function (key, value) { Daniel@0: var widget = this; Daniel@0: Daniel@0: // Check if such option exists, throw an error if not Daniel@0: if (!widget.options.hasOwnProperty(key)) { Daniel@0: throw "Option " + key + " does not exist"; Daniel@0: } Daniel@0: Daniel@0: // Check if value matches what it was, do nothing if yes Daniel@0: if (value === widget.options[key] || (_.isArray(value) && _.isEqual(value, widget.options[key]))) { Daniel@0: return; Daniel@0: } Daniel@0: Daniel@0: // Save old option value Daniel@0: var prev = widget.options[key]; Daniel@0: Daniel@0: // Apply the option Daniel@0: widget._super(key, value); Daniel@0: Daniel@0: // Call corresponding update method depending on the option key Daniel@0: switch (key) { Daniel@0: Daniel@0: case "value": Daniel@0: widget._applyValue(); Daniel@0: break; Daniel@0: Daniel@0: case "baseValue": Daniel@0: widget._updateStatus(); Daniel@0: break; Daniel@0: } Daniel@0: Daniel@0: widget._trigger("change" + key.toLowerCase(), null, {newValue: value, prevValue: prev}); Daniel@0: }, Daniel@0: Daniel@0: _applyValue: function() { Daniel@0: var widget = this; Daniel@0: widget.$element.toggleClass("cgpma__tickbox_ticked", !!widget.options.value); Daniel@0: widget._updateStatus(); Daniel@0: }, Daniel@0: Daniel@0: _updateStatus: function() { Daniel@0: var widget = this; Daniel@0: widget.$element.toggleClass("cgpma__tickbox_status_modified", !!widget.options.baseValue != !!widget.options.value); Daniel@0: }, Daniel@0: Daniel@0: __handleTickClick: function() { Daniel@0: var $this = $(this); Daniel@0: var widget = $this.data("widget"); Daniel@0: var newValue = widget.options.value ? "" : "1"; Daniel@0: if (newValue == "" && $this.hasClass("cgpma__tickbox_type_radio")) { Daniel@0: return; Daniel@0: } Daniel@0: widget._setOption("value", newValue); Daniel@0: }, Daniel@0: }); Daniel@0: })(jQuery);