source: trunk/web/addons/job_monarch/lib/extjs/examples/tree/XmlTreeLoader.js @ 619

Last change on this file since 619 was 619, checked in by ramonb, 15 years ago

lib/:

  • added new AJAX dependancies: ExtJS, pChart, Lightbox2
File size: 3.6 KB
Line 
1/*
2 * Ext JS Library 2.2.1
3 * Copyright(c) 2006-2009, Ext JS, LLC.
4 * licensing@extjs.com
5 *
6 * http://extjs.com/license
7 */
8
9/**
10 * @class Ext.ux.XmlTreeLoader
11 * @extends Ext.tree.TreeLoader
12 * <p>A TreeLoader that can convert an XML document into a hierarchy of {@link Ext.tree.TreeNode}s.
13 * Any text value included as a text node in the XML will be added to the parent node as an attribute
14 * called <tt>innerText</tt>.  Also, the tag name of each XML node will be added to the tree node as
15 * an attribute called <tt>tagName</tt>.</p>
16 * <p>By default, this class expects that your source XML will provide the necessary attributes on each
17 * node as expected by the {@link Ext.tree.TreePanel} to display and load properly.  However, you can
18 * provide your own custom processing of node attributes by overriding the {@link #processNode} method
19 * and modifying the attributes as needed before they are used to create the associated TreeNode.</p>
20 * @constructor
21 * Creates a new XmlTreeloader.
22 * @param {Object} config A config object containing config properties.
23 */
24Ext.ux.XmlTreeLoader = Ext.extend(Ext.tree.TreeLoader, {
25    /**
26     * @property  XML_NODE_ELEMENT
27     * XML element node (value 1, read-only)
28     * @type Number
29     */
30    XML_NODE_ELEMENT : 1,
31    /**
32     * @property  XML_NODE_TEXT
33     * XML text node (value 3, read-only)
34     * @type Number
35     */
36    XML_NODE_TEXT : 3,
37   
38    // private override
39    processResponse : function(response, node, callback){
40        var xmlData = response.responseXML;
41        var root = xmlData.documentElement || xmlData;
42       
43        try{
44            node.beginUpdate();
45            node.appendChild(this.parseXml(root));
46            node.endUpdate();
47           
48            if(typeof callback == "function"){
49                callback(this, node);
50            }
51        }catch(e){
52            this.handleFailure(response);
53        }
54    },
55   
56    // private
57    parseXml : function(node) {
58        var nodes = [];
59        Ext.each(node.childNodes, function(n){
60            if(n.nodeType == this.XML_NODE_ELEMENT){
61                var treeNode = this.createNode(n);
62                if(n.childNodes.length > 0){
63                    var child = this.parseXml(n);
64                    if(typeof child == 'string'){
65                        treeNode.attributes.innerText = child;
66                    }else{
67                        treeNode.appendChild(child);
68                    }
69                }
70                nodes.push(treeNode);
71            }
72            else if(n.nodeType == this.XML_NODE_TEXT){
73                var text = n.nodeValue.trim();
74                if(text.length > 0){
75                    return nodes = text;
76                }
77            }
78        }, this);
79       
80        return nodes;
81    },
82   
83    // private override
84    createNode : function(node){
85        var attr = {
86            tagName: node.tagName
87        };
88       
89        Ext.each(node.attributes, function(a){
90            attr[a.nodeName] = a.nodeValue;
91        });
92       
93        this.processAttributes(attr);
94       
95        return Ext.ux.XmlTreeLoader.superclass.createNode.call(this, attr);
96    },
97   
98    /*
99     * Template method intended to be overridden by subclasses that need to provide
100     * custom attribute processing prior to the creation of each TreeNode.  This method
101     * will be passed a config object containing existing TreeNode attribute name/value
102     * pairs which can be modified as needed directly (no need to return the object).
103     */
104    processAttributes: Ext.emptyFn
105});
Note: See TracBrowser for help on using the repository browser.