modxcms/revolution

View on GitHub
manager/assets/modext/workspace/package.browser.tree.js

Summary

Maintainability
B
4 hrs
Test Coverage
/**
 * The tree panel holding the repository categories
 *
 * @class MODx.tree.PackageBrowserTree
 * @extends MODx.tree.Tree
 * @param {Object} config An object of options.
 * @xtype modx-package-browser-tree
 */
MODx.tree.PackageBrowserTree = function(config) {
    config = config || {};
    Ext.applyIf(config,{
        url: MODx.config.connector_url
        ,action: 'workspace/packages/rest/getNodes'
        ,baseParams: {
            provider: MODx.provider
        }
        ,loaderConfig: {
            preloadChildren: false
        }
        ,stateful: false
        ,rootVisible: false
        ,enableDD: false
        ,autoHeight: true
        ,singleExpand: true
        ,root:{
            text: _('provider')
            ,nodeType: 'async'
            ,id: 'modx-package-browser-tree-root'
        }
        ,tbar: [{
            xtype: 'textfield'
            ,emptyText: _('search')
            ,name: 'search'
            ,id: 'package-browser-search-fld'
            ,cls: 'icon-search'
            ,hideMode: 'offsets'
            ,width: 249
            ,listeners: {
                change: this.search
                ,specialkey: function( form, e ) {
                    if(e.getKey() == Ext.EventObject.ENTER){
                        form.blur();
                    }
                }
                ,scope:this
            }
        }]
    });
    MODx.tree.PackageBrowserTree.superclass.constructor.call(this,config);
    this.on('click',this.onNodeClick,this);
    this.on('beforeload',this.onBeforeLoad, this);
};
Ext.extend(MODx.tree.PackageBrowserTree,MODx.tree.Tree,{
    initEvents: function(){
        MODx.tree.PackageBrowserTree.superclass.initEvents.call(this);
        this.getRootNode().expand();
        this.getProviderInfos(MODx.provider);
    }

    ,onLoad: function(ldr,node,resp) {
        var r = Ext.decode(resp.responseText);
        if (r.message) {
            MODx.msg.alert(_('error'), r.message, function() {
                location.href = location.href;
            });
            return false;
        }
    }

    ,changeGProvider: false
    ,changePProvider: false

    ,getProviderInfos: function(pv){
        MODx.Ajax.request({
            url: this.config.url
            ,params: {
                action: 'workspace/packages/rest/getInfo'
                ,provider: pv
            }
            ,listeners: {
                'success': {fn:function(r) {
                    this.providerInfos = r.object;
                    Ext.getCmp('modx-package-browser-home').updateDetail(this.providerInfos);
                },scope:this}
            }
        });
    }


    ,setProvider: function(pv){
        if (Ext.isEmpty(pv) || pv == undefined) { pv = MODx.defaultProvider; }
        this.getLoader().baseParams.provider = pv;
        this.getProviderInfos(pv);
        this.changeGProvider = true;
        this.changePProvider = true;
    }

    ,onNodeClick: function(n,e) {
        switch (n.attributes.type) {
            case 'repository':
                var r = Ext.getCmp('modx-package-browser-repositories');
                r.activate();
                r.updateDetail(n.attributes.data);
                break;
            case 'tag':
                var tp = n.parentNode;
                if (tp && tp.attributes.data.templated == 1) {
                    var p = Ext.getCmp('modx-package-browser-thumbs-view');
                    p.store.baseParams.tag = n.attributes.data.id;
                    if(this.changePProvider){
                        p.store.baseParams.provider = MODx.provider;
                        this.changePProvider = false;
                    }
                    p.run();
                    Ext.getCmp('modx-package-browser-view').activate(n.attributes.data.name);
                } else {
                    var grid = Ext.getCmp('modx-package-browser-grid');
                    grid.getStore().setBaseParam('tag', n.attributes.data.id);
                    grid.getStore().setBaseParam('query', '');
                    if(this.changeGProvider){
                        grid.getStore().setBaseParam('provider', MODx.provider);
                        grid.getStore().removeAll();
                        this.changeGProvider = false;
                    }
                    grid.getStore().load();
                    grid.activate(n.attributes.data.name);
                }
                break;
            default:
                var home = Ext.getCmp('modx-package-browser-home');
                home.activate();
                home.updateDetail(this.providerInfos);
                break;
        }
    }

    ,onBeforeLoad: function(node) {
        if(node.attributes.type == 'repository'){
            this.loader.baseParams.type = 'repository';
            this.loader.baseParams.id = node.attributes.id;
        } else if( node.attributes.type == 'undefined' ){
            this.getSelectionModel().select(this.root.childNodes[0]);
        }
    }

    ,searchFor: function(name){
        var f = Ext.getCmp('package-browser-search-fld');
        f.setValue(name);
        this.search(f, name);
    }

    ,search: function(tf, newValue) {
        var nv = newValue || tf.originalValue;

        var grid = Ext.getCmp('modx-package-browser-grid');
        grid.getStore().setBaseParam('tag', '');
        grid.getStore().setBaseParam('query', nv);
        grid.getStore().setBaseParam('provider', MODx.provider);
        grid.getStore().load();
        grid.activate(_('search'), nv);
        return true;
    }
});
Ext.reg('modx-package-browser-tree',MODx.tree.PackageBrowserTree);