mypackage_wrt/Forums.js
author nithyar
Tue, 13 Jul 2010 12:02:22 +0100
changeset 57 c6348ed5ec7f
parent 42 20be4dd42b12
permissions -rwxr-xr-x
wk 27 updates
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     1
// ////////////////////////////////////////////////////////////////////////////
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     2
// Symbian Foundation Example Code
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     3
//
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     4
// This software is in the public domain. No copyright is claimed, and you 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     5
// may use it for any purpose without license from the Symbian Foundation.
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     6
// No warranty for any purpose is expressed or implied by the authors or
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     7
// the Symbian Foundation. 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     8
// ////////////////////////////////////////////////////////////////////////////
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
     9
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    10
// Forums
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    11
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    12
// Forums have the following structure:
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    13
//
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    14
// Forum group list
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    15
//   Forum list
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    16
//     Thread list
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    17
//       Message list
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    18
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    19
// All four views are based on customised RssReader. We customise two aspects:
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    20
// - Parsing XML - data is not RSS
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    21
// - Handling item selection (e.g. creating a new view for a newly selected forum)
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    22
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    23
// /////////////////////////////////////////////////////////////////////////////
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    24
// Forum groups
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    25
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    26
// response parser for forum groups
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    27
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    28
var feedItemControl;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    29
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    30
function forumGroupsResponseParser(broker, responseStatus, xmlDoc) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    31
    if (responseStatus == 200 && xmlDoc != null) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    32
        // node ref for iterating
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    33
        var node;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    34
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    35
		// for compatibility with rss
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    36
		var lastModified = new Date();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    37
		
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    38
        // init result items array
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    39
        var items = [];
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    40
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    41
		var elements = xmlDoc.getElementsByTagName("group");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    42
		for (var i = 0; i < elements.length; i++) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    43
			var groupid = elements[i].getAttribute("id");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    44
			var grouptitle = elements[i].getAttribute("title");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    45
            items.push({ id: groupid, title: grouptitle});
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    46
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    47
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    48
        // update was completed successfully
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    49
        return { status: "ok", lastModified: lastModified, items: items };
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    50
    } else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    51
        // update failed
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    52
        return { status: "error" };
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    53
    }
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    54
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    55
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    56
// FeedPresenter implementation for forum groups
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    57
function ForumGroupsFeedPresenter(rssreader){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    58
	if (rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    59
		this.init(rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    60
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    61
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    62
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    63
// ForumGroupsFeedPresenter is a subclass of ButtonFeedPresenter
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    64
ForumGroupsFeedPresenter.prototype = new ButtonFeedPresenter(null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    65
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    66
// ForumGroupsFeedPresenter "Constructor"
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    67
ForumGroupsFeedPresenter.prototype.init = function(rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    68
	ButtonFeedPresenter.prototype.init.call(this, rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    69
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    70
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    71
// Handle the click on a specific item
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    72
ForumGroupsFeedPresenter.prototype.feedClicked = function(event){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    73
	var buttonid = event.source.id;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    74
	
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    75
	if (buttonid == "latestPosts") {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    76
		// show latest posts
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    77
		var url = forumFeedURL;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    78
		var latestPostsView = new RssReader("Latest posts", url, new LatestPostsFeedPresenter(null), this.rssreader, null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    79
		latestPostsView.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    80
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    81
	else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    82
		// show forum group
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    83
		var groupid = this.items[buttonid].id;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    84
		var grouptitle = this.items[buttonid].title;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    85
		
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    86
		var url = forumsListUrl + groupid;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    87
		var forumListView = new RssReader(grouptitle, url, new ForumsListFeedPresenter(null), this.rssreader, forumListResponseParser);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    88
		forumListView.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    89
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    90
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    91
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    92
// Create and add controls to be shown before items list.
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    93
ForumGroupsFeedPresenter.prototype.addPreambleItems = function(){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    94
	var feedItemControl = new NavigationButton("latestPosts", "blueright.gif", "Latest posts");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    95
    var self = this;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    96
	feedItemControl.addEventListener("ActionPerformed", function(event) { self.feedClicked(event); });
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    97
	this.rssreader.addControl(feedItemControl);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    98
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
    99
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   100
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   101
// ///////////////////////////////////////////////////////////////////////////
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   102
// List of forums in a group
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   103
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   104
// response parser for forum list - in a group
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   105
function forumListResponseParser(broker, responseStatus, xmlDoc) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   106
    if (responseStatus == 200 && xmlDoc != null) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   107
        // node ref for iterating
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   108
        var node;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   109
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   110
		// for compatibility with rss
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   111
		var lastModified = new Date();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   112
		
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   113
        // init result items array
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   114
        var items = [];
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   115
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   116
		// extract items for all group elements
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   117
		var elements = xmlDoc.getElementsByTagName("group");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   118
		for (var i = 0; i < elements.length; i++) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   119
			var forumid = elements[i].getAttribute("id");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   120
			var forumtitle = elements[i].getAttribute("title");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   121
            items.push({ id: forumid, title: forumtitle});
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   122
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   123
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   124
        // update was completed successfully
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   125
        return { status: "ok", lastModified: lastModified, items: items };
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   126
    } else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   127
        // update failed
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   128
        return { status: "error" };
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   129
    }
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   130
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   131
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   132
// FeedPresenter implementation for forum groups
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   133
function ForumsListFeedPresenter(rssreader){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   134
	if (rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   135
		this.init(rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   136
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   137
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   138
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   139
// ForumsListFeedPresenter is a subclass of ButtonFeedPresenter
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   140
ForumsListFeedPresenter.prototype = new ButtonFeedPresenter(null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   141
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   142
// ForumsListFeedPresenter constructor
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   143
ForumsListFeedPresenter.prototype.init = function(rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   144
	ButtonFeedPresenter.prototype.init.call(this, rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   145
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   146
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   147
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   148
// forum has been selected, create a reader showing threads in the forum
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   149
ForumsListFeedPresenter.prototype.feedClicked = function(event){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   150
	var buttonid = event.source.id;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   151
	if (buttonid == "latestPosts") {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   152
		// show latest posts
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   153
		var url = forumFeedURL + "&forumids=";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   154
		// append requested forum ids
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   155
		for( var i = 0; i < this.items.length; i++) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   156
			url += this.items[i].id + ",";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   157
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   158
		
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   159
		var latestPostsView = new RssReader(
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   160
			"Latest posts in " + this.rssreader.feedName, 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   161
			url, 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   162
			new LatestPostsFeedPresenter(null), 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   163
			this.rssreader, 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   164
			null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   165
		latestPostsView.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   166
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   167
	else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   168
		var forumid = this.items[buttonid].id;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   169
		var forumtitle = this.items[buttonid].title;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   170
		
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   171
		var url = forumFeedURL + forumsForumSpecQuery + forumid;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   172
		var forumListView = new RssReader(forumtitle, url, new ThreadListFeedPresenter(null), this.rssreader, null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   173
		forumListView.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   174
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   175
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   176
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   177
// Create and add controls to be shown before items list.
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   178
ForumsListFeedPresenter.prototype.addPreambleItems = function(){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   179
	var feedItemControl = new NavigationButton("latestPosts", "blueright.gif", "Latest posts in " + this.rssreader.feedName);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   180
    var self = this;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   181
	feedItemControl.addEventListener("ActionPerformed", function(event) { self.feedClicked(event); });
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   182
	this.rssreader.addControl(feedItemControl);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   183
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   184
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   185
//// // FeedPresenter implementation for forum groups
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   186
function ForumsSettingsFeedPresenter(rssreader){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   187
	if (rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   188
		this.init(rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   189
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   190
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   191
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   192
// ForumsListFeedPresenter is a subclass of ButtonFeedPresenter
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   193
ForumsSettingsFeedPresenter.prototype = new ButtonFeedPresenter(null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   194
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   195
// ForumsListFeedPresenter constructor
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   196
ForumsSettingsFeedPresenter.prototype.init = function(rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   197
	ButtonFeedPresenter.prototype.init.call(this, rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   198
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   199
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   200
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   201
// forum has been selected, create a reader showing threads in the forum
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   202
ForumsSettingsFeedPresenter.prototype.feedClicked = function(event){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   203
	var buttonid = event.source.id;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   204
	    var firstboot =true;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   205
		var forumid = this.items[buttonid].id;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   206
		var forumtitle = this.items[buttonid].title;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   207
		if(myforumid){firstboot=false;}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   208
		
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   209
		feedItemControl.setText(forumtitle + ": " + forumid);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   210
		ForumControl.setText("Forum: " + forumtitle);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   211
		myforumid=forumid;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   212
		myforumtitle=forumtitle;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   213
		if (firstboot){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   214
			forum_reader = new RssReader(myforumtitle, forumFeedURL + forumsForumSpecQuery + myforumid, new ThreadListFeedPresenter(null), bugzilla, null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   215
			forum_reader.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   216
			savePreferences();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   217
		} else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   218
			settings.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   219
			
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   220
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   221
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   222
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   223
// Create and add controls to be shown before items list.
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   224
ForumsSettingsFeedPresenter.prototype.addPreambleItems = function(){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   225
	feedItemControl = new Label(null, "Choosen forum:");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   226
    var self = this;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   227
	this.rssreader.addControl(feedItemControl);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   228
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   229
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   230
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   231
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   232
// ///////////////////////////////////////////////////////////////////////////
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   233
// List of threads in a forum
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   234
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   235
// response parser for thread list is the usual rss parser
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   236
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   237
// FeedPresenter implementation for forum groups
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   238
function ThreadListFeedPresenter(rssreader){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   239
	if (rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   240
		this.init(rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   241
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   242
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   243
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   244
// ThreadListFeedPresenter is a subclass of ButtonFeedPresenter
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   245
ThreadListFeedPresenter.prototype = new ButtonFeedPresenter(null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   246
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   247
// ThreadListFeedPresenter constructor
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   248
ThreadListFeedPresenter.prototype.init = function(rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   249
	ButtonFeedPresenter.prototype.init.call(this, rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   250
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   251
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   252
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   253
// Handle the click on a specific item
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   254
ThreadListFeedPresenter.prototype.feedClicked = function(event){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   255
	var buttonid = event.source.id;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   256
	
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   257
	if (buttonid == "newThread") {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   258
		// extract forum id from rssreader.feedURL
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   259
		var ind = this.rssreader.feedURL.indexOf(forumsForumSpecQuery);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   260
		var forumid = this.rssreader.feedURL.substring( ind + forumsForumSpecQuery.length);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   261
		var postForm = new ForumPostForm(this.rssreader, forumid);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   262
		postForm.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   263
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   264
	else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   265
		var weburl = this.items[buttonid].url;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   266
		
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   267
		// extract thread id from url. looking for t=xxx
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   268
		var ind1 = weburl.indexOf("?t=");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   269
		if (ind1 == -1) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   270
			ind1 = weburl.indexOf("&t=");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   271
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   272
		if (ind1 != -1) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   273
			var threadid = "";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   274
			var ind2 = weburl.indexOf("&", ind1);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   275
			if (ind2 == -1) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   276
				threadid = weburl.substring(ind1 + 3); // ?t=
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   277
			}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   278
			else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   279
				threadid = weburl.substring(ind1 + 3, ind2); // ?t=
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   280
			}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   281
			var url = forumThreadUrl + threadid;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   282
			var title = this.items[buttonid].title;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   283
			if (title.length > 30) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   284
				title = title.substring(0, 30) + "...";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   285
			}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   286
			var threadView = new RssReader(title, url, new ThreadFeedPresenter(null), this.rssreader, threadResponseParser);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   287
			threadView.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   288
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   289
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   290
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   291
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   292
// Create and add controls to be shown before items list.
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   293
ThreadListFeedPresenter.prototype.addPreambleItems = function(){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   294
	var feedItemControl = new NavigationButton("newThread", "blueright.gif", "Post a new thread");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   295
    var self = this;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   296
	feedItemControl.addEventListener("ActionPerformed", function(event) { self.feedClicked(event); });
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   297
	this.rssreader.addControl(feedItemControl);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   298
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   299
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   300
// ///////////////////////////////////////////////////////////////////////////
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   301
// List of messages in a thread
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   302
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   303
// response parser for thread list
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   304
function threadResponseParser(broker, responseStatus, xmlDoc) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   305
    if (responseStatus == 200 && xmlDoc != null) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   306
        // node ref for iterating
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   307
        var node;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   308
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   309
		// for compatibility with rss
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   310
		var lastModified = new Date();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   311
		
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   312
        // init result items array
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   313
        var items = [];
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   314
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   315
		// iterate over message elements
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   316
		var elements = xmlDoc.getElementsByTagName("message");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   317
		for (var i = 0; i < elements.length; i++) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   318
			var postid;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   319
			var threadid;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   320
			var username;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   321
			var title;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   322
			var dateline;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   323
			var pagetext;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   324
			var isdeleted;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   325
			
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   326
			// extract info about the post
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   327
			node = elements[i].firstChild;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   328
			while (node != null) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   329
				if ( node.nodeName == "postid" ) postid=getTextOfNode(node);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   330
				else if ( node.nodeName == "threadid" ) threadid=getTextOfNode(node);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   331
				else if ( node.nodeName == "username" ) username=getTextOfNode(node);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   332
				else if ( node.nodeName == "title" ) title=getTextOfNode(node);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   333
				else if ( node.nodeName == "dateline" ) dateline=getTextOfNode(node);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   334
				else if ( node.nodeName == "pagetext" ) pagetext=getTextOfNode(node);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   335
				else if ( node.nodeName == "isdeleted" ) isdeleted=getTextOfNode(node);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   336
				node = node.nextSibling;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   337
			}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   338
			if ( isdeleted == 1 ) continue;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   339
			
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   340
			items.push({
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   341
				postid: postid,
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   342
				threadid: threadid,
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   343
				username: username,
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   344
				title: title,
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   345
				dateline: dateline,
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   346
				pagetext: pagetext
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   347
			});
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   348
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   349
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   350
        // update was completed successfully
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   351
        return { status: "ok", lastModified: lastModified, items: items };
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   352
    } else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   353
        // update failed
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   354
        return { status: "error" };
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   355
    }
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   356
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   357
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   358
// FeedPresenter implementation for forum groups
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   359
function ThreadFeedPresenter(rssreader){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   360
	if (rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   361
		this.init(rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   362
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   363
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   364
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   365
// ThreadFeedPresenter is a subclass of HtmlFeedPresenter
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   366
ThreadFeedPresenter.prototype = new HtmlFeedPresenter(null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   367
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   368
// ThreadFeedPresenter constructor
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   369
ThreadFeedPresenter.prototype.init = function(rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   370
	HtmlFeedPresenter.prototype.init.call(this, rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   371
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   372
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   373
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   374
// Handle the click on a specific item
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   375
ThreadFeedPresenter.prototype.feedClicked = function(event){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   376
	// do nothing
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   377
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   378
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   379
// Create a control that represents this item and add it to
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   380
// parent rss reader
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   381
ThreadFeedPresenter.prototype.show = function(item) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   382
	// get a feed item control from the pool or create one and
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   383
	// place it in the pool if there aren't enough feed item controls
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   384
	var feedItemControl = new ContentPanel(null, null, null, true);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   385
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   386
	// initialize feed item control
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   387
	var title = item.title;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   388
	if ( !title || title.length == 0 ) { 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   389
		title = "Re:";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   390
		item.title = title;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   391
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   392
	feedItemControl.setCaption(bbcode2html(title));
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   393
	feedItemControl.setContent(this.getContentHTMLForFeedItem(item));
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   394
	feedItemControl.setExpanded(true);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   395
	
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   396
	// add the feed item control to the main view
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   397
	this.rssreader.feedItemControls.push(feedItemControl);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   398
	this.rssreader.addControl(feedItemControl);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   399
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   400
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   401
// Generate HTML content from the feed item
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   402
ThreadFeedPresenter.prototype.getContentHTMLForFeedItem = function (item){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   403
	var buf = "";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   404
	
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   405
	// item date
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   406
	if (item.dateline != null) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   407
		var date = new Date();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   408
		date.setTime(item.dateline*1000);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   409
		buf += "<div class=\"FeedItemDate\">" ;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   410
		if ( item.username != null ) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   411
			buf += item.username + ", ";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   412
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   413
		buf += date + "</div>";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   414
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   415
	
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   416
	// item description
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   417
	if (item.pagetext != null) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   418
		var text = bbcode2html(item.pagetext);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   419
		text = text.replace(/\r\n/g, "<br>");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   420
		buf += "<div class=\"FeedItemDescription\">" + text + "</div>";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   421
        buf += "<div class=\"FeedItemLink\">";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   422
		buf += "<a href=\"JavaScript:void(0)\" onclick=\"showReplyForm(" 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   423
				+ item.threadid+ "," + item.postid + ", '" + item.title
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   424
				+ "'); return false;\">";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   425
		buf += "<strong>Reply to this post<strong></a>"
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   426
		buf += "</div>";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   427
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   428
	
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   429
	return buf;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   430
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   431
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   432
// Show the reply-to-post form
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   433
function showReplyForm(threadid, postid, title) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   434
	var replyForm = new ForumReplyForm(uiManager.currentView, threadid, postid, title);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   435
	replyForm.show();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   436
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   437
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   438
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   439
// ///////////////////////////////////////////////////////////////////////////
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   440
// Latest posts - same as ThreadListFeedPresenter, only has no preamble items
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   441
// because it doesn't show one thread (so we can't post to latest items)...
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   442
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   443
// FeedPresenter implementation for latest posts
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   444
function LatestPostsFeedPresenter(rssreader){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   445
	if (rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   446
		this.init(rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   447
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   448
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   449
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   450
LatestPostsFeedPresenter.prototype = new ThreadListFeedPresenter(null);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   451
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   452
// ForumGroupsFeedPresenter "Constructor"
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   453
LatestPostsFeedPresenter.prototype.init = function(rssreader) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   454
	ButtonFeedPresenter.prototype.init.call(this, rssreader);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   455
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   456
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   457
// LatestPostsFeedPresenter has no preamble items
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   458
LatestPostsFeedPresenter.prototype.addPreambleItems = function(){
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   459
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   460
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   461
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   462
// ///////////////////////////////////////////////////////////////////////////
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   463
// Utilities
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   464
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   465
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   466
// Forum posts can be be quite messy and include bbcodes, smilies etc.
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   467
// This function does the minimum by stripping bbcodes and such
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   468
function sanitize(text) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   469
	var prevind = 0;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   470
	var ind = text.indexOf("[");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   471
	if ( ind == -1 ) return text;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   472
	var buf = "";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   473
	while ( ind != -1 ) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   474
		buf += text.substring(prevind, ind);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   475
		var ind2 = text.indexOf("]", ind);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   476
		if ( ind2 != -1 ) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   477
			prevind = ind2+1;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   478
		} else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   479
			break;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   480
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   481
		ind = text.indexOf("[", prevind);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   482
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   483
	if ( prevind > 0 && prevind < text.length) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   484
		buf += text.substring(prevind);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   485
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   486
	return buf;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   487
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   488
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   489
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   490
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   491
// feeds contain bbcodes - this function should turn the bbcode markup
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   492
// to HTML
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   493
function bbcode2html(s) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   494
	var prevind = 0;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   495
	var buf = "";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   496
	var ind = s.indexOf("[");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   497
	if ( ind == -1 ) return s;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   498
	while ( ind != -1 ) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   499
		buf += s.substring(prevind, ind);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   500
		var ind2 = s.indexOf("]", ind); // end of tag
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   501
		var fulltag = s.substring(ind+1,ind2);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   502
		var tag = fulltag;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   503
		var ind3 = s.indexOf("=", ind); // end of tag name, eg. [URL=http...]
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   504
		if ( ind3 != -1 && ind3 < ind2) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   505
			tag = s.substring(ind+1,ind3);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   506
		} 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   507
		var ind4 = s.indexOf("[/"+tag+"]", ind2);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   508
		var tagContent = s.substring(ind2+1, ind4);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   509
		buf += convertTag(tag, fulltag, tagContent);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   510
		if ( ind4 != -1 ) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   511
			prevind = s.indexOf(']',ind4) + 1;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   512
		} else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   513
			break;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   514
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   515
		ind = s.indexOf("[", prevind);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   516
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   517
	buf += s.substring(prevind);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   518
	return buf;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   519
}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   520
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   521
function convertTag(tag, fulltag, tagContent) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   522
	tag = tag.toLowerCase();
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   523
	var param = null;
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   524
	var eqsign = fulltag.indexOf("=");  // onclick=\"openURL('" + item.url + "');
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   525
	if (eqsign > -1) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   526
		param = fulltag.substring(eqsign+1);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   527
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   528
	switch(tag) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   529
		case '*': return bbcode2html(tagContent);
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   530
		case 'b':case 'i':case 'u':case 's':case 'sup':case 'sub':case 'h1':case 'h2':case 'h3':case 'h4':case 'h5':case 'h6':case 'table':case 'tr':case 'th':case 'td':
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   531
		{
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   532
			return '<' + tag + '>' + bbcode2html(tagContent) + "</" + tag + ">";
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   533
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   534
		case 'font': return '<font face="'+param+'">' + bbcode2html(tagContent) + '</font>';
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   535
		case 'size': return '<font size="'+param+'">' + bbcode2html(tagContent) + '</font>';
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   536
		case 'color': return '<font color="'+param+'">' + bbcode2html(tagContent) + '</font>';
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   537
		case 'left': return '<div align="left">' + bbcode2html(tagContent) + '</div>';
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   538
		case 'right': return '<div align="right">' + bbcode2html(tagContent) + '</div>';
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   539
		case 'center': return '<div align="center">' + bbcode2html(tagContent) + '</div>';
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   540
		case 'list':{
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   541
			tagContent = tagContent.replace(/\[\*\]/g, "<br>&bull; ");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   542
			return bbcode2html(tagContent); // todo
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   543
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   544
		case 'php': 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   545
		case 'code': 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   546
		case 'html':{
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   547
			var escaped = tagContent.replace(/</g, "&lt;").replace(/>/g, "&gt;");
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   548
			return '<div class=codebox><pre>' + escaped + '</pre></div>';
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   549
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   550
		case 'quote': return '<div class=codebox><b>Quote:</b><br><i>' + tagContent + '</i></div>';
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   551
		case 'url': {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   552
			if ( eqsign > -1 ) {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   553
				return "<div class=\"FeedItemLink\"><a href=\"JavaScript:void(0)\" onclick=\"openURL( '"
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   554
				+ param
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   555
				+ "')\" ><i>"
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   556
				+ tagContent
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   557
				+ '</i></a></div>'; 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   558
			} else {
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   559
				return "<div class=\"FeedItemLink\"><a href=\"JavaScript:void(0)\" onclick=\"openURL( '"
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   560
				+ tagContent
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   561
				+ "')\" ><i>"
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   562
				+ tagContent
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   563
				+ '</i></a></div>'; 
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   564
			}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   565
		}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   566
	}
20be4dd42b12 My package widget code
victorp@symbian.org
parents:
diff changeset
   567
}