1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
Ext.namespace('Zarafa.plugins.files.ui');
/**
* @class Zarafa.plugins.files.ui.Tree
* @extends Ext.tree.TreePanel
* @xtype filesplugin.tree
*
* The hierarchy tree panel implementation for files.
*/
Zarafa.plugins.files.ui.Tree = Ext.extend(Ext.tree.TreePanel, {
/**
* @cfg {array|String} array of account ids or a single account id that should be loaded.
*/
accountFilter: null,
/**
* @cfg {Object} treeSorter a {@link Ext.Ext.tree.TreeSorter} config or {@link Boolean}
* to sort the {@linkZarafa.plugins.files.ui.Tree Tree}
* Defaults to <code>true</code>.
*/
treeSorter : true,
/**
* @constructor
* @param config
*/
constructor: function (config) {
config = config || {};
if (Ext.isDefined(config.accountFilter)) {
this.accountFilter = config.accountFilter;
}
Ext.applyIf(config, {
xtype : 'filesplugin.tree',
enableDD : true,
ddGroup : 'dd.filesrecord',
ddAppendOnly : true,
pathSeparator: '&',
root : {
nodeType: 'async',
text : 'Files',
id : '#R#',
expanded: true,
cc : false
},
rootVisible : false,
autoScroll : true,
maskDisabled : true,
loader : new Zarafa.plugins.files.data.NavigatorTreeLoader({
loadfiles : false,
accountFilter: this.accountFilter
})
});
Zarafa.plugins.files.ui.Tree.superclass.constructor.call(this, config);
if(this.treeSorter && !(this.treeSorter instanceof Ext.tree.TreeSorter)) {
this.treeSorter = new Ext.tree.TreeSorter(this);
}
},
/**
* Function which is create the {@link Zarafa.plugins.files.data.FilesRecord record} from
* give tree node.
*
* @param {Ext.tree.AsyncTreeNode} node asynchronous tree node.
* @return {Zarafa.plugins.files.data.FilesRecord} returns folder record.
*/
convertNodeToRecord : function (node)
{
var fileRecord = Zarafa.core.data.RecordFactory.createRecordObjectByObjectType(Zarafa.core.data.RecordCustomObjectType.ZARAFA_FILES, {
'id' : node.attributes.id,
'filename' : node.attributes.filename,
'path' : node.attributes.path,
'type' : node.attributes.isFolder ? Zarafa.plugins.files.data.FileTypes.FOLDER : Zarafa.plugins.files.data.FileTypes.FILE,
'entryid' : node.attributes.id,
'message_class' : 'IPM.Files'
},node.attributes.id);
fileRecord.store = this.filesStore;
return fileRecord;
},
/**
* Recursive function to select a node. The whole path to the node will be expanded.
*
* @param {Ext.tree.AsyncTreeNode} node asynchronous tree node.
* @param {Ext.tree.AsyncTreeNode} childnode asynchronous tree child node.
*/
selectNode: function (node, childnode) {
if (!Ext.isDefined(childnode)) {
this.nodeToSelect = node.id;
}
if (Ext.isDefined(childnode) && childnode.rendered) {
childnode.select();
childnode.expand();
} else if (Ext.isDefined(node) && node.rendered) {
node.select();
node.expand();
} else {
var parentNode = node.id.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '') + "/";
var nToSelectParent = this.getNodeById(parentNode);
if (Ext.isDefined(nToSelectParent)) {
nToSelectParent.on("expand", this.selectNode.createDelegate(this, [node], true), this, {single: true});
}
}
}
});
Ext.reg('filesplugin.tree', Zarafa.plugins.files.ui.Tree);
|