Sha256: 76d39549715e3b35465e66aa0ba67bf46444f39f48b856baf1cdcc593c0b143a

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

include('checkbox.js');

(function() {
    var manager = uki.view.declare('uki.view.Radio', uki.view.Checkbox, function(base) {
        
        this._backgroundPrefix = 'radio-';
        
        this.group = uki.newProp('_group', function(g) {
            manager.unregisterGroup(this);
            this._group = g;
            manager.registerGroup(this);
            manager.clearGroup(this);
        });

        this.value = this.checked = uki.newProp('_checked', function(state) {
            this._checked = !!state;
            if (state) manager.clearGroup(this);
            this._updateBg();
        });

        this._mouseup = function() {
            if (!this._down) return;
            this._down = false;
            if (!this._checked && !this._disabled) {
                this.checked(!this._checked);
                this.trigger('change', {checked: this._checked, source: this});
            }
        }
    });
    
    
    manager.groups = {};

    manager.registerGroup = function(radio) {
        var group = radio.group();
        if (!manager.groups[group]) {
            manager.groups[group] = [radio];
        } else {
            manager.groups[group].push(radio);
        }
    };

    manager.unregisterGroup = function(radio) {
        var group = radio.group();
        if (manager.groups[group]) manager.groups[group] = uki.grep(manager.groups[group], function(registered) {
            return registered != radio;
        });
    };

    manager.clearGroup = function(radio) {
        uki.each(manager.groups[radio.group()] || [], function(i, registered) {
            if (registered == radio) return;
            if (registered.checked()) registered.checked(false);
        });
    };    
    
})();

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
uki-1.0.1 frameworks/uki/src/uki-view/view/radio.js
uki-1.0.0 frameworks/uki/src/uki-view/view/radio.js