Upgrade to ExtJS 3.3.1 - Released 11/30/2010
[extjs.git] / examples / docs / source / XmlTreeLoader.html
1 <html>
2 <head>
3   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
4   <title>The source code</title>
5     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
6     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
7 </head>
8 <body  onload="prettyPrint();">
9     <pre class="prettyprint lang-js">/*!
10  * Ext JS Library 3.3.1
11  * Copyright(c) 2006-2010 Sencha Inc.
12  * licensing@sencha.com
13  * http://www.sencha.com/license
14  */
15 Ext.ns('Ext.ux.tree');
16
17 /**
18  * @class Ext.ux.tree.XmlTreeLoader
19  * @extends Ext.tree.TreeLoader
20  * <p>A TreeLoader that can convert an XML document into a hierarchy of {@link Ext.tree.TreeNode}s.
21  * Any text value included as a text node in the XML will be added to the parent node as an attribute
22  * called <tt>innerText</tt>.  Also, the tag name of each XML node will be added to the tree node as
23  * an attribute called <tt>tagName</tt>.</p>
24  * <p>By default, this class expects that your source XML will provide the necessary attributes on each
25  * node as expected by the {@link Ext.tree.TreePanel} to display and load properly.  However, you can
26  * provide your own custom processing of node attributes by overriding the {@link #processNode} method
27  * and modifying the attributes as needed before they are used to create the associated TreeNode.</p>
28  * @constructor
29  * Creates a new XmlTreeloader.
30  * @param {Object} config A config object containing config properties.
31  */
32 Ext.ux.tree.XmlTreeLoader = Ext.extend(Ext.tree.TreeLoader, {
33     <div id="prop-Ext.ux.tree.XmlTreeLoader-XML_NODE_ELEMENT"></div>/**
34      * @property  XML_NODE_ELEMENT
35      * XML element node (value 1, read-only)
36      * @type Number
37      */
38     XML_NODE_ELEMENT : 1,
39     <div id="prop-Ext.ux.tree.XmlTreeLoader-XML_NODE_TEXT"></div>/**
40      * @property  XML_NODE_TEXT
41      * XML text node (value 3, read-only)
42      * @type Number
43      */
44     XML_NODE_TEXT : 3,
45
46     // private override
47     processResponse : function(response, node, callback){
48         var xmlData = response.responseXML,
49             root = xmlData.documentElement || xmlData;
50
51         try{
52             node.beginUpdate();
53             node.appendChild(this.parseXml(root));
54             node.endUpdate();
55
56             this.runCallback(callback, scope || node, [node]);
57         }catch(e){
58             this.handleFailure(response);
59         }
60     },
61
62     // private
63     parseXml : function(node) {
64         var nodes = [];
65         Ext.each(node.childNodes, function(n){
66             if(n.nodeType == this.XML_NODE_ELEMENT){
67                 var treeNode = this.createNode(n);
68                 if(n.childNodes.length > 0){
69                     var child = this.parseXml(n);
70                     if(typeof child == 'string'){
71                         treeNode.attributes.innerText = child;
72                     }else{
73                         treeNode.appendChild(child);
74                     }
75                 }
76                 nodes.push(treeNode);
77             }
78             else if(n.nodeType == this.XML_NODE_TEXT){
79                 var text = n.nodeValue.trim();
80                 if(text.length > 0){
81                     return nodes = text;
82                 }
83             }
84         }, this);
85
86         return nodes;
87     },
88
89     // private override
90     createNode : function(node){
91         var attr = {
92             tagName: node.tagName
93         };
94
95         Ext.each(node.attributes, function(a){
96             attr[a.nodeName] = a.nodeValue;
97         });
98
99         this.processAttributes(attr);
100
101         return Ext.ux.tree.XmlTreeLoader.superclass.createNode.call(this, attr);
102     },
103
104     /*
105      * Template method intended to be overridden by subclasses that need to provide
106      * custom attribute processing prior to the creation of each TreeNode.  This method
107      * will be passed a config object containing existing TreeNode attribute name/value
108      * pairs which can be modified as needed directly (no need to return the object).
109      */
110     processAttributes: Ext.emptyFn
111 });
112
113 //backwards compat
114 Ext.ux.XmlTreeLoader = Ext.ux.tree.XmlTreeLoader;
115 </pre>    
116 </body>
117 </html>