(function($K) { $K.add('module', 'selector', { init: function(app, context) { this.app = app; // context this.context = context; this.$element = context.getElement(); }, // public start: function() { this.$selector = this._buildSelector(); this.$selector.on('change.kube.selector', this._toggle.bind(this)); }, stop: function() { this.$selector.off('.kube.selector'); }, // private _isSelect: function() { return (this.$element.get().tagName === 'SELECT'); }, _isHashValue: function(value) { return (value.search(/^#/) === 0); }, _buildSelector: function() { return (this._isSelect()) ? this.$element : this.$element.find('input[type="radio"]'); }, _getValue: function() { return (this._isSelect()) ? this.$selector.val() : this.$selector.filter(':checked').val(); }, _getBoxes: function() { var $boxes = $K.dom([]); var $targets = (this._isSelect()) ? this.$selector.find('option') : this.$selector; $targets.each(function(node) { if (this._isHashValue(node.value)) { $boxes.add($K.dom(node.value)); } }.bind(this)); return $boxes; }, _toggle: function() { var value = this._getValue(); var $boxes = this._getBoxes(); var $box = $K.dom(value); $boxes.addClass('is-hidden'); $box.removeClass('is-hidden'); this.app.broadcast('selector.opened', this, $box); } }); })(Kube);