--- /dev/null
+<html>\r
+<head>\r
+ <title>The source code</title>\r
+ <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+ <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body onload="prettyPrint();">\r
+ <pre class="prettyprint lang-js">Ext.tree.TreeEventModel = function(tree){\r
+ this.tree = tree;\r
+ this.tree.on('render', this.initEvents, this);\r
+}\r
+\r
+Ext.tree.TreeEventModel.prototype = {\r
+ initEvents : function(){\r
+ var el = this.tree.getTreeEl();\r
+ el.on('click', this.delegateClick, this);\r
+ if(this.tree.trackMouseOver !== false){\r
+ this.tree.innerCt.on('mouseover', this.delegateOver, this);\r
+ this.tree.innerCt.on('mouseout', this.delegateOut, this);\r
+ }\r
+ el.on('dblclick', this.delegateDblClick, this);\r
+ el.on('contextmenu', this.delegateContextMenu, this);\r
+ },\r
+\r
+ getNode : function(e){\r
+ var t;\r
+ if(t = e.getTarget('.x-tree-node-el', 10)){\r
+ var id = Ext.fly(t, '_treeEvents').getAttribute('tree-node-id', 'ext');\r
+ if(id){\r
+ return this.tree.getNodeById(id);\r
+ }\r
+ }\r
+ return null;\r
+ },\r
+\r
+ getNodeTarget : function(e){\r
+ var t = e.getTarget('.x-tree-node-icon', 1);\r
+ if(!t){\r
+ t = e.getTarget('.x-tree-node-el', 6);\r
+ }\r
+ return t;\r
+ },\r
+\r
+ delegateOut : function(e, t){\r
+ if(!this.beforeEvent(e)){\r
+ return;\r
+ }\r
+ if(e.getTarget('.x-tree-ec-icon', 1)){\r
+ var n = this.getNode(e);\r
+ this.onIconOut(e, n);\r
+ if(n == this.lastEcOver){\r
+ delete this.lastEcOver;\r
+ }\r
+ }\r
+ if((t = this.getNodeTarget(e)) && !e.within(t, true)){\r
+ this.onNodeOut(e, this.getNode(e));\r
+ }\r
+ },\r
+\r
+ delegateOver : function(e, t){\r
+ if(!this.beforeEvent(e)){\r
+ return;\r
+ }\r
+ if(Ext.isGecko && !this.trackingDoc){ // prevent hanging in FF\r
+ Ext.getBody().on('mouseover', this.trackExit, this);\r
+ this.trackingDoc = true;\r
+ }\r
+ if(this.lastEcOver){ // prevent hung highlight\r
+ this.onIconOut(e, this.lastEcOver);\r
+ delete this.lastEcOver;\r
+ }\r
+ if(e.getTarget('.x-tree-ec-icon', 1)){\r
+ this.lastEcOver = this.getNode(e);\r
+ this.onIconOver(e, this.lastEcOver);\r
+ }\r
+ if(t = this.getNodeTarget(e)){\r
+ this.onNodeOver(e, this.getNode(e));\r
+ }\r
+ },\r
+\r
+ trackExit : function(e){\r
+ if(this.lastOverNode && !e.within(this.lastOverNode.ui.getEl())){\r
+ this.onNodeOut(e, this.lastOverNode);\r
+ delete this.lastOverNode;\r
+ Ext.getBody().un('mouseover', this.trackExit, this);\r
+ this.trackingDoc = false;\r
+ }\r
+ },\r
+\r
+ delegateClick : function(e, t){\r
+ if(!this.beforeEvent(e)){\r
+ return;\r
+ }\r
+\r
+ if(e.getTarget('input[type=checkbox]', 1)){\r
+ this.onCheckboxClick(e, this.getNode(e));\r
+ }\r
+ else if(e.getTarget('.x-tree-ec-icon', 1)){\r
+ this.onIconClick(e, this.getNode(e));\r
+ }\r
+ else if(this.getNodeTarget(e)){\r
+ this.onNodeClick(e, this.getNode(e));\r
+ }\r
+ },\r
+\r
+ delegateDblClick : function(e, t){\r
+ if(this.beforeEvent(e) && this.getNodeTarget(e)){\r
+ this.onNodeDblClick(e, this.getNode(e));\r
+ }\r
+ },\r
+\r
+ delegateContextMenu : function(e, t){\r
+ if(this.beforeEvent(e) && this.getNodeTarget(e)){\r
+ this.onNodeContextMenu(e, this.getNode(e));\r
+ }\r
+ },\r
+\r
+ onNodeClick : function(e, node){\r
+ node.ui.onClick(e);\r
+ },\r
+\r
+ onNodeOver : function(e, node){\r
+ this.lastOverNode = node;\r
+ node.ui.onOver(e);\r
+ },\r
+\r
+ onNodeOut : function(e, node){\r
+ node.ui.onOut(e);\r
+ },\r
+\r
+ onIconOver : function(e, node){\r
+ node.ui.addClass('x-tree-ec-over');\r
+ },\r
+\r
+ onIconOut : function(e, node){\r
+ node.ui.removeClass('x-tree-ec-over');\r
+ },\r
+\r
+ onIconClick : function(e, node){\r
+ node.ui.ecClick(e);\r
+ },\r
+\r
+ onCheckboxClick : function(e, node){\r
+ node.ui.onCheckChange(e);\r
+ },\r
+\r
+ onNodeDblClick : function(e, node){\r
+ node.ui.onDblClick(e);\r
+ },\r
+\r
+ onNodeContextMenu : function(e, node){\r
+ node.ui.onContextMenu(e);\r
+ },\r
+\r
+ beforeEvent : function(e){\r
+ if(this.disabled){\r
+ e.stopEvent();\r
+ return false;\r
+ }\r
+ return true;\r
+ },\r
+\r
+ disable: function(){\r
+ this.disabled = true;\r
+ },\r
+\r
+ enable: function(){\r
+ this.disabled = false;\r
+ }\r
+};</pre> \r
+</body>\r
+</html>
\ No newline at end of file