Mercurial > hg > dml-open-vis
diff src/DML/MainVisBundle/Resources/assets/marionette/modules/MainRegionModule/MainRegionModule.50-cgpma.tickbox.js @ 0:493bcb69166c
added public content
author | Daniel Wolff |
---|---|
date | Tue, 09 Feb 2016 20:54:02 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/DML/MainVisBundle/Resources/assets/marionette/modules/MainRegionModule/MainRegionModule.50-cgpma.tickbox.js Tue Feb 09 20:54:02 2016 +0100 @@ -0,0 +1,81 @@ +"use strict"; + +(function($) { +$.widget("cgpma.tickbox", { + + options: { + value: null, + baseValue: null, + }, + + _create : function() { + var widget = this; + widget.$element = this.element; + widget.$element.disableSelection(); + widget.$tick = $.bem.generateElement("cgpma", "tickbox-tick"); + widget.$tick.appendTo(widget.$element); + + widget.$element.data("widget", widget); + widget.$element.bind("click", widget.__handleTickClick); + }, + + _destroy : function() { + this.$element.removeData(); + }, + + _setOption: function (key, value) { + var widget = this; + + // Check if such option exists, throw an error if not + if (!widget.options.hasOwnProperty(key)) { + throw "Option " + key + " does not exist"; + } + + // Check if value matches what it was, do nothing if yes + if (value === widget.options[key] || (_.isArray(value) && _.isEqual(value, widget.options[key]))) { + return; + } + + // Save old option value + var prev = widget.options[key]; + + // Apply the option + widget._super(key, value); + + // Call corresponding update method depending on the option key + switch (key) { + + case "value": + widget._applyValue(); + break; + + case "baseValue": + widget._updateStatus(); + break; + } + + widget._trigger("change" + key.toLowerCase(), null, {newValue: value, prevValue: prev}); + }, + + _applyValue: function() { + var widget = this; + widget.$element.toggleClass("cgpma__tickbox_ticked", !!widget.options.value); + widget._updateStatus(); + }, + + _updateStatus: function() { + var widget = this; + widget.$element.toggleClass("cgpma__tickbox_status_modified", !!widget.options.baseValue != !!widget.options.value); + }, + + __handleTickClick: function() { + var $this = $(this); + var widget = $this.data("widget"); + var newValue = widget.options.value ? "" : "1"; + if (newValue == "" && $this.hasClass("cgpma__tickbox_type_radio")) { + return; + } + widget._setOption("value", newValue); + }, +}); +})(jQuery); \ No newline at end of file