Symbian.org/FeedUpdateBroker.js
author ivanl
Tue, 21 Jul 2009 12:16:25 +0100
changeset 10 07ac2f6a36a9
parent 6 5e0dece09f96
child 13 3a1db8573f1e
permissions -rw-r--r--
1.0rc10 Fixes annoyances and buglets in reading forums and blog.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
     1
///////////////////////////////////////////////////////////////////////////////
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
     2
// The FeedUpdateBroker class implements a simple RSS fetcher and parser.
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
     3
// Adapted from WRTKit RssReader example
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
     4
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
     5
// Constructor.
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
     6
function FeedUpdateBroker() {
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
     7
	this.escapeLtGt=true;
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
     8
    this.httpReq = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
     9
    this.feedAddress = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    10
    this.callback = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    11
	this.ignoreContent = false;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    12
	this.cancelled = false;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    13
	this.responseParser = this.handleRssResponse;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    14
	this.startFromItem = 0;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    15
	this.maxItems = 0;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    16
}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    17
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    18
// Fetches a feed from the specified URL and calls the callback when the feed
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    19
// has been fetched and parsed, or if the process results in an error.
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    20
FeedUpdateBroker.prototype.doFetchFeed = function(){    
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    21
    // create new XML HTTP request
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    22
    this.httpReq = new Ajax();
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    23
    
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    24
    // set callback
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    25
    var self = this;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    26
    this.httpReq.onreadystatechange = function() { self.readyStateChanged(); };
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    27
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    28
    // initiate the request
3
9cbe91927e89 Fix for auto-update caching problem
ivanl
parents: 0
diff changeset
    29
    this.httpReq.open("GET", nocache(this.feedAddress), true);
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    30
    this.httpReq.send(null);
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    31
}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    32
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    33
// has been fetched and parsed, or if the process results in an error.
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    34
FeedUpdateBroker.prototype.fetchFeed = function(feedURL, callback) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    35
    // remember callback
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    36
    this.callback = callback;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    37
    this.feedAddress = feedURL;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    38
	this.doFetchFeed();
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    39
}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    40
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    41
// Callback for ready-state change events in the XML HTTP request.
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    42
FeedUpdateBroker.prototype.readyStateChanged = function() {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    43
    // complete request?
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    44
    if (this.httpReq.readyState == 4) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    45
        // attempt to get response status
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    46
        var responseStatus = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    47
        try {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    48
            responseStatus = this.httpReq.status;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    49
        } catch (noStatusException) {}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    50
        
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    51
		// are we being prompted for login?
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    52
		var text = this.httpReq.responseText;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    53
		if ( isLoginPrompt (text) ) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    54
			var self = this;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    55
			login(function(){self.doFetchFeed();});
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    56
			return;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    57
		}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    58
		
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    59
        // handle the response and call the registered callback object
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    60
		var response = this.httpReq.responseXML;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    61
		if (response == null) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    62
			// if the content type is not set correctly, we get the response as text
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    63
			var xmlparser = new DOMParser();
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    64
		    response = xmlparser.parseFromString(this.httpReq.responseText, "text/xml");
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    65
		}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    66
        this.callback.feedUpdateCompleted(this.handleResponse(responseStatus, response));
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    67
    }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    68
}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    69
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    70
// Handles a completed response.
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    71
FeedUpdateBroker.prototype.handleResponse = function(responseStatus, xmlDoc){
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    72
	if (this.responseParser == null) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    73
		return this.handleRssResponse(responseStatus, xmlDoc);
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    74
	}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    75
	else {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    76
		return this.responseParser.call(this, this, responseStatus, xmlDoc);
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    77
	}	
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    78
}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    79
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    80
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    81
FeedUpdateBroker.prototype.handleRssResponse = function(broker, responseStatus, xmlDoc){
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    82
	if ( this.cancelled ) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    83
        return { status: "cancelled" };
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    84
	}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    85
    if (responseStatus == 200 && xmlDoc != null) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    86
        // node ref for iterating
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    87
        var node;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    88
        
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    89
        // get last modified time - default to current time
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    90
        var lastModified = new Date().getTime();
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    91
        var channelElements = xmlDoc.getElementsByTagName("channel");
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    92
        if (channelElements.length > 0) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    93
            node = channelElements[0].firstChild;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    94
            while (node != null) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    95
                if (node.nodeType == Node.ELEMENT_NODE) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    96
                    if (node.nodeName == "pubDate" ||
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    97
                            node.nodeName == "lastBuildDate" ||
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
    98
                            node.nodeName == "dc:date") {
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
    99
                        lastModified = getTextOfNode(node, this.escapeLtGt);
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   100
                        break;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   101
                    }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   102
                }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   103
                node = node.nextSibling;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   104
            }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   105
        }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   106
        
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   107
        // init feed items array
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   108
        var items = [];
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   109
        
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   110
        // we got the feed XML so now we'll parse it
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   111
        var itemElements = xmlDoc.getElementsByTagName("item");
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   112
		
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   113
        for (var i = this.startFromItem; i < itemElements.length; i++) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   114
			if ( this.maxItems > 0 && this.maxItems < i ) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   115
				break;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   116
			}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   117
            // iterate through child nodes of this item and gather
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   118
            // all the data we need for a feed item
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   119
            var title = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   120
            var date = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   121
            var description = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   122
            var url = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   123
            var author = null;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   124
            node = itemElements[i].firstChild;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   125
            while (node != null) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   126
                if (node.nodeType == Node.ELEMENT_NODE) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   127
                    if (node.nodeName == "title") {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   128
                        // item title
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   129
                        title = getTextOfNode(node, this.escapeLtGt);
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   130
                    } else if (node.nodeName == "pubDate" || node.nodeName == "dc:date") {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   131
                        // item publishing date
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   132
                        date = getTextOfNode(node, this.escapeLtGt);
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   133
                    } else if (node.nodeName == "description" && !this.ignoreContent ) {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   134
                        // item description
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   135
                        description = getTextOfNode(node, this.escapeLtGt);
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   136
                    } else if (node.nodeName == "link") {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   137
                        // link URL
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   138
                        url = getTextOfNode(node, this.escapeLtGt);
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   139
                    } else if (node.nodeName == "dc:creator" ) {
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   140
						author = getTextOfNode(node, this.escapeLtGt);
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   141
					}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   142
                }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   143
                node = node.nextSibling;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   144
            }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   145
            
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   146
            // create the item and add to the items array
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   147
            items.push({ title: title, date: date, description: description, url: url, author: author });
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   148
        }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   149
        
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   150
        // update was completed successfully
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   151
        return { status: "ok", lastModified: lastModified, items: items };
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   152
    } else {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   153
        // update failed
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   154
        return { status: "error" };
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   155
    }
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   156
}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   157
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   158
// Returns the text of a node.
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   159
function getTextOfNode(node, escapeLtGt) {
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   160
    var buf = "";
6
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   161
	// iterate through all child elements and collect all text to the buffer
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   162
	var child = node.firstChild;
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   163
	while (child != null) {
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   164
		if (child.nodeType == Node.TEXT_NODE || child.nodeType == Node.CDATA_SECTION_NODE) {
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   165
			// append text to buffer
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   166
			if (buf != "") {
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   167
				buf += " ";
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   168
			}
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   169
			buf += child.textContent;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   170
//			if (escapeLtGt) {
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   171
//				buf += doEscapeLtGt(child.nodeValue);
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   172
//			} else {
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   173
//				buf += child.nodeValue;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   174
//			}
6
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   175
		}
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   176
		child = child.nextSibling;
5e0dece09f96 1.0rc10
ivanl
parents: 4
diff changeset
   177
	}
4
ivanl
parents: 3
diff changeset
   178
	
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   179
	return buf;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   180
//    // strip all tags from the buffer
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   181
//    var strippedBuf = "";
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   182
//    var textStartPos = -1;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   183
//    var tagBalance = 0;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   184
//	
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   185
//    var pos;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   186
//    // iterate through the text and append all text to the stripped buffer
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   187
//    // that is at a tag balance of 0
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   188
//    for (pos = 0; pos < buf.length; pos++) {
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   189
//        var c = buf.charAt(pos);
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   190
//        if (c == '<') {
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   191
//            // entering a tag
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   192
//            if (tagBalance == 0 && textStartPos != -1) {
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   193
//                // everything up to here was valid text
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   194
//                strippedBuf += buf.substring(textStartPos, pos);
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   195
//                textStartPos = -1;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   196
//            }
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   197
//            tagBalance++;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   198
//        } else if (c == '>') {
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   199
//            // leaving a tag
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   200
//            tagBalance--;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   201
//            textStartPos = -1;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   202
//        } else if (tagBalance == 0 && textStartPos == -1) {
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   203
//            // first char of text
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   204
//            textStartPos = pos;
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   205
//        }
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   206
//    }
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   207
//    
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   208
//    // add remaining text - if any
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   209
//    if (tagBalance == 0 && textStartPos != -1) {
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   210
//        strippedBuf += buf.substring(textStartPos, pos);
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   211
//    }
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   212
    
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   213
//    return strippedBuf;
0
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   214
}
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   215
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   216
FeedUpdateBroker.prototype.cancel = function() {
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   217
	this.cancelled = true;
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   218
	this.httpReq.abort();
54498df70f5d Adding Symbian.org Widget 1.0rc3 source
ivanl
parents:
diff changeset
   219
}
4
ivanl
parents: 3
diff changeset
   220
10
07ac2f6a36a9 1.0rc10 Fixes annoyances and buglets in reading forums and blog.
ivanl
parents: 6
diff changeset
   221
function doEscapeLtGt(text){
4
ivanl
parents: 3
diff changeset
   222
	var lt = "&lt;";
ivanl
parents: 3
diff changeset
   223
	var gt = "&gt;";
ivanl
parents: 3
diff changeset
   224
	return text.replace(/</g, lt).replace(/>/g, gt);
ivanl
parents: 3
diff changeset
   225
}