eliace/ergo-js

View on GitHub
js/widgets/panels/tab-panel.js

Summary

Maintainability
A
1 hr
Test Coverage



Ergo.defineClass('Ergo.widgets.TabPanel', {

    extends: 'Ergo.widgets.Panel',

    defaults: {

        cls: 'tab-panel',

        include: 'selectable',

        components: {
            header: {
                autoRender: false
            },
            tabbar: {
                weight: -5,
                etype: 'tab-bar',
                defaultItem: {
                    onClick: function() {
                        this.events.rise('select', {key: this.opt('name') /*this._name || this._key || this._index*/});
                    }
                }
            },
            content: {
                include: 'pageable',
                // defaultItem: {
                    // states: {
                        // 'selected': function(on) {
                            // if(on) {
                                // this.parent.opt('visible', this);
                            // }
                        // }
                    // }
                // }
            }
        },

        // onSelectTab: function(e) {
            // this.opt('selected', e.key);
            // e.stop();
        // },

        selection: {
            lookup: function(key) {
    //            console.log(key);
                return this.tabbar.item(key);//, this.content.item(key)];
            }
        },

        onSelectionChanged: function(e) {
            this.content.opt('active', e.selection.opt('name'));
            this.events.fire('selectTab', {key: e.selection.opt('name')});
            e.stop();
        }

    },


    _construct: function(o) {
        this._super(o);

        this.tabs = new Ergo.core.Tabs(this);

        if('tabs' in o) {
            for(var i = 0; i < o.tabs.length; i++)
                this.tabs.add(o.tabs[i]);
        }


    }



}, 'widgets:tab-panel');







Ergo.defineClass('Ergo.core.Tabs', {

    extends: 'Ergo.core.Object',

    defaults: {
        mixins: [Ergo.Observable]
    },


    _initialize: function(w, o) {
        this._super(o);

        this._widget = w;
    },



    add: function(o) {

        var page = {};
        var tab = {};

        if($.isString(o)) {
            tab = o;
        }
        else {
            page = Ergo.deepCopy(o);
            tab = o.tab;
            delete page.tab;
        }

        this._widget.tabbar.items.add(tab);
        this._widget.content.items.add(page);

    }

});