summaryrefslogtreecommitdiffstats
path: root/deluge/ui/web/js/extjs/ext-extensions/tree/TreeGridNodeUI.js
blob: 09b1718cda3ff879725209da0819ec6759c42877 (plain)
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/**
 * Ext JS Library 3.4.0
 * Copyright(c) 2006-2011 Sencha Inc.
 * licensing@sencha.com
 * http://www.sencha.com/license
 */
/**
 * @class Ext.ux.tree.TreeGridNodeUI
 * @extends Ext.tree.TreeNodeUI
 */
Ext.ux.tree.TreeGridNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
    isTreeGridNodeUI: true,

    renderElements: function (n, a, targetNode, bulkRender) {
        var t = n.getOwnerTree(),
            cols = t.columns,
            c = cols[0],
            i,
            buf,
            len;

        this.indentMarkup = n.parentNode
            ? n.parentNode.ui.getChildIndent()
            : '';

        buf = [
            '<tbody class="x-tree-node">',
            '<tr ext:tree-node-id="',
            n.id,
            '" class="x-tree-node-el x-tree-node-leaf ',
            a.cls,
            '">',
            '<td class="x-treegrid-col">',
            '<span class="x-tree-node-indent">',
            this.indentMarkup,
            '</span>',
            '<img src="',
            this.emptyIcon,
            '" class="x-tree-ec-icon x-tree-elbow" />',
            '<img src="',
            a.icon || this.emptyIcon,
            '" class="x-tree-node-icon',
            a.icon ? ' x-tree-node-inline-icon' : '',
            a.iconCls ? ' ' + a.iconCls : '',
            '" unselectable="on" />',
            '<a hidefocus="on" class="x-tree-node-anchor" href="',
            a.href ? a.href : '#',
            '" tabIndex="1" ',
            a.hrefTarget ? ' target="' + a.hrefTarget + '"' : '',
            '>',
            '<span unselectable="on">',
            c.tpl ? c.tpl.apply(a) : a[c.dataIndex] || c.text,
            '</span></a>',
            '</td>',
        ];

        for (i = 1, len = cols.length; i < len; i++) {
            c = cols[i];
            buf.push(
                '<td class="x-treegrid-col ',
                c.cls ? c.cls : '',
                '">',
                '<div unselectable="on" class="x-treegrid-text"',
                c.align ? ' style="text-align: ' + c.align + ';"' : '',
                '>',
                c.tpl ? c.tpl.apply(a) : a[c.dataIndex],
                '</div>',
                '</td>'
            );
        }

        buf.push(
            '</tr><tr class="x-tree-node-ct"><td colspan="',
            cols.length,
            '">',
            '<table class="x-treegrid-node-ct-table" cellpadding="0" cellspacing="0" style="table-layout: fixed; display: none; width: ',
            t.innerCt.getWidth(),
            'px;"><colgroup>'
        );
        for (i = 0, len = cols.length; i < len; i++) {
            buf.push(
                '<col style="width: ',
                cols[i].hidden ? 0 : cols[i].width,
                'px;" />'
            );
        }
        buf.push('</colgroup></table></td></tr></tbody>');

        if (bulkRender !== true && n.nextSibling && n.nextSibling.ui.getEl()) {
            this.wrap = Ext.DomHelper.insertHtml(
                'beforeBegin',
                n.nextSibling.ui.getEl(),
                buf.join('')
            );
        } else {
            this.wrap = Ext.DomHelper.insertHtml(
                'beforeEnd',
                targetNode,
                buf.join('')
            );
        }

        this.elNode = this.wrap.childNodes[0];
        this.ctNode = this.wrap.childNodes[1].firstChild.firstChild;
        var cs = this.elNode.firstChild.childNodes;
        this.indentNode = cs[0];
        this.ecNode = cs[1];
        this.iconNode = cs[2];
        this.anchor = cs[3];
        this.textNode = cs[3].firstChild;
    },

    // private
    animExpand: function (cb) {
        this.ctNode.style.display = '';
        Ext.ux.tree.TreeGridNodeUI.superclass.animExpand.call(this, cb);
    },
});

Ext.ux.tree.TreeGridRootNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
    isTreeGridNodeUI: true,

    // private
    render: function () {
        if (!this.rendered) {
            this.wrap = this.ctNode = this.node.ownerTree.innerCt.dom;
            this.node.expanded = true;
        }

        if (Ext.isWebKit) {
            // weird table-layout: fixed issue in webkit
            var ct = this.ctNode;
            ct.style.tableLayout = null;
            (function () {
                ct.style.tableLayout = 'fixed';
            }.defer(1));
        }
    },

    destroy: function () {
        if (this.elNode) {
            Ext.dd.Registry.unregister(this.elNode.id);
        }
        delete this.node;
    },

    collapse: Ext.emptyFn,
    expand: Ext.emptyFn,
});