/dev/trunk

To get this branch, use:
bzr branch http://darksoft.org/webbzr/dev/trunk

« back to all changes in this revision

Viewing changes to js/xml.js

  • Committer: Suren A. Chilingaryan
  • Date: 2008-04-02 10:23:22 UTC
  • Revision ID: csa@dside.dyndns.org-20080402102322-okib92sicg2dx3o3
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
function NSResolver(prefix) {
 
2
  if(prefix == 'xhtml') {
 
3
    return 'http://www.w3.org/1999/xhtml';
 
4
  } else {
 
5
    return null;
 
6
  }
 
7
}
 
8
 
 
9
function DSXMLParser(req, handler, attr) {
 
10
        this.req = req;
 
11
        this.data_handler = handler;
 
12
        this.data_attr = attr;
 
13
 
 
14
        this.ready = function() {
 
15
            try {
 
16
                if (this.req.readyState == 4) {
 
17
                    if (this.req.status == 200) {
 
18
                        this.data_handler(this.req.responseXML, this.data_attr);
 
19
                    } else {
 
20
                        adeiReportError(translate("XML: HTTP Error %u", this.req.status));
 
21
                    }
 
22
                } 
 
23
            } catch (e) { 
 
24
                adeiReportException(e, translate("XML: error catched while loading XML"));
 
25
            }
 
26
        }
 
27
 
 
28
        return this;    
 
29
}
 
30
 
 
31
function loadXML(url, handler, attr) {
 
32
    var req;
 
33
    
 
34
    if (window.XMLHttpRequest) {
 
35
        req = new XMLHttpRequest();
 
36
    } else if (window.ActiveXObject) { 
 
37
        try {
 
38
            req = new ActiveXObject("Msxml2.XMLHTTP");
 
39
        } catch (e) {
 
40
            req = new ActiveXObject("Microsoft.XMLHTTP");
 
41
        }
 
42
    }
 
43
 
 
44
    var parser = DSXMLParser(req, handler, attr);
 
45
    
 
46
    try {    
 
47
    if (window.XMLHttpRequest) {
 
48
        req.data_attr = attr;
 
49
        req.data_handler = handler;
 
50
        req.onreadystatechange = function() {
 
51
            try {
 
52
                if (req.readyState == 4) {
 
53
                        // Removing circullar dependencies
 
54
                    req.onreadystatechange = null;
 
55
 
 
56
                    if (req.status == 200) {
 
57
                        req.data_handler(req.responseXML, req.data_attr);
 
58
                    } else {
 
59
                        adeiReportError(translate("loadXML(%s) is failed: HTTP Error %u", url, req.status));
 
60
                    }
 
61
                }
 
62
            } catch (e) {
 
63
//              alert(typeof e);
 
64
//              for (i in e) alert(i + '=' + e[i]);
 
65
                adeiReportException(e, translate('loadXML(%s) handler is failed', url));
 
66
            }
 
67
        }
 
68
    } else if (window.ActiveXObject) { 
 
69
        req.onreadystatechange = parser.ready;
 
70
    }
 
71
 
 
72
        req.open("GET", url, true);
 
73
        req.send( null );
 
74
    } catch (e) {
 
75
        adeiReportException(e, translate('loadXML(%s) request is failed', url));
 
76
    }
 
77
}
 
78
 
 
79
 
 
80
function DSXMLQueue() {
 
81
    this.queue = new Array();
 
82
    this.busy = 0;
 
83
    this.inside = 0;
 
84
    this.completed = 0;
 
85
    
 
86
    this.ProcessNext = dsXMLQueueProcessNext;
 
87
}
 
88
 
 
89
function DSXMLQueueElement(url, handler, attr) {
 
90
    this.url = url;
 
91
    this.handler = handler;
 
92
    this.attr = attr;
 
93
}
 
94
 
 
95
function dsXMLQueueProcessNext() {
 
96
    if (this.queue.length > 0) {
 
97
        var nextelem = this.queue.shift();
 
98
        
 
99
        this.inside = 1;
 
100
        loadXML(nextelem.url, dsXMLQueueHandler, nextelem);
 
101
        this.inside = 0;
 
102
 
 
103
        if (this.completed) {
 
104
            this.completed = 0;
 
105
            return 1;
 
106
        }
 
107
    } else {
 
108
        this.busy = 0;
 
109
    }
 
110
    
 
111
    return 0;
 
112
}
 
113
 
 
114
 
 
115
var ds_xml_queue = new DSXMLQueue;
 
116
 
 
117
function dsXMLQueueHandler(xmldoc, element) {
 
118
    element.handler(xmldoc, element.attr);
 
119
    
 
120
    if (ds_xml_queue.inside) {
 
121
        ds_xml_queue.completed = 1;
 
122
    } else {
 
123
        while (ds_xml_queue.ProcessNext());
 
124
    }
 
125
}
 
126
 
 
127
 
 
128
function queueXML(url, handler, attr) {
 
129
    var element = new DSXMLQueueElement(url, handler, attr);
 
130
    
 
131
    if (ds_xml_queue.busy) {
 
132
        ds_xml_queue.queue.push(element);
 
133
    } else {
 
134
        ds_xml_queue.busy = 1;
 
135
        loadXML(url, dsXMLQueueHandler, element);
 
136
    }
 
137
}
 
138
 
 
139
 
 
140
function xsltHandler(xsltdoc, xattr) {
 
141
    xattr.xslt_processor.importStylesheet(xsltdoc);
 
142
    xattr.handler(xattr.xslt_processor, xattr.attr);
 
143
}
 
144
 
 
145
function loadXSLT(url, handler, attr) {
 
146
    var xattr = new Object();
 
147
 
 
148
    xattr.attr = attr;
 
149
    xattr.handler = handler;
 
150
    xattr.xslt_processor = new XSLTProcessor();
 
151
 
 
152
    loadXML(url, xsltHandler, xattr);
 
153
}