Devices: NodesLearnt table integration with FuelUx Datagrid.
[controller.git] / opendaylight / web / root / src / main / resources / js / fuelux / radio.js
diff --git a/opendaylight/web/root/src/main/resources/js/fuelux/radio.js b/opendaylight/web/root/src/main/resources/js/fuelux/radio.js
new file mode 100755 (executable)
index 0000000..a09c07f
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Fuel UX Radio
+ * https://github.com/ExactTarget/fuelux
+ *
+ * Copyright (c) 2012 ExactTarget
+ * Licensed under the MIT license.
+ */
+
+define(['require','jquery'],function (require) {
+
+       var $ = require('jquery');
+
+
+       // RADIO CONSTRUCTOR AND PROTOTYPE
+
+       var Radio = function (element, options) {
+               this.$element = $(element);
+               this.options = $.extend({}, $.fn.radio.defaults, options);
+
+               // cache elements
+               this.$label = this.$element.parent();
+               this.$icon = this.$label.find('i');
+               this.$radio = this.$label.find('input[type=radio]');
+               this.groupName = this.$radio.attr('name');
+
+               // set default state
+               this.setState(this.$radio);
+
+               // handle events
+               this.$radio.on('change', $.proxy(this.itemchecked, this));
+       };
+
+       Radio.prototype = {
+
+               constructor: Radio,
+
+               setState: function ($radio, resetGroupState) {
+                       var checked = $radio.is(':checked');
+                       var disabled = $radio.is(':disabled');
+
+                       // set state of radio
+                       if (checked === true) {
+                               this.$icon.addClass('checked');
+                       }
+                       if (disabled === true) {
+                               this.$icon.addClass('disabled');
+                       }
+               },
+
+               resetGroup: function () {
+                       // reset all radio buttons in group
+                       $('input[name=' + this.groupName + ']').next().removeClass('checked');
+               },
+
+               enable: function () {
+                       this.$radio.attr('disabled', false);
+                       this.$icon.removeClass('disabled');
+               },
+
+               disable: function () {
+                       this.$radio.attr('disabled', true);
+                       this.$icon.addClass('disabled');
+               },
+
+               itemchecked: function (e) {
+                       var radio = $(e.target);
+
+                       this.resetGroup();
+                       this.setState(radio);
+               }
+       };
+
+
+       // RADIO PLUGIN DEFINITION
+
+       $.fn.radio = function (option, value) {
+               var methodReturn;
+
+               var $set = this.each(function () {
+                       var $this = $(this);
+                       var data = $this.data('radio');
+                       var options = typeof option === 'object' && option;
+
+                       if (!data) $this.data('radio', (data = new Radio(this, options)));
+                       if (typeof option === 'string') methodReturn = data[option](value);
+               });
+
+               return (methodReturn === undefined) ? $set : methodReturn;
+       };
+
+       $.fn.radio.defaults = {};
+
+       $.fn.radio.Constructor = Radio;
+
+
+       // RADIO DATA-API
+
+       $(function () {
+               $(window).on('load', function () {
+                       //$('i.radio').each(function () {
+                       $('.radio-custom > input[type=radio]').each(function () {
+                               var $this = $(this);
+                               if ($this.data('radio')) return;
+                               $this.radio($this.data());
+                       });
+               });
+       });
+
+});