NewsBlur/media/js/newsblur/assetmodel.js
2010-01-07 00:04:12 +00:00

251 lines
6.4 KiB
JavaScript

NEWSBLUR.AssetModel = function() {
var _Reader = null;
return {
reader: function(){
if(!_Reader){
_Reader = new NEWSBLUR.AssetModel.Reader();
_Reader.init();
} else {
_Reader.init();
}
return _Reader;
},
preferences: function(){
if(!_Prefs){
_Prefs = new NEWSBLUR.AssetModel.Preferences();
_Prefs.init();
} else {
_Prefs.init();
}
return _Prefs;
}
};
}();
NEWSBLUR.AssetModel.Reader = function() {
this.feeds = {};
this.stories = {};
};
NEWSBLUR.AssetModel.Reader.prototype = {
init: function() {
return;
},
make_request: function(url, data, callback) {
// $('body').ajaxStop();
$.ajax({
url: url,
data: data,
type: 'POST',
success: function(o) {
var log_index = o.indexOf('<div id="django_debug"');
var data;
if (log_index != -1) { // Debug is True
var log = o.substring(log_index);
var raw_data = o.substring(0, log_index);
data = eval('(' + raw_data + ')');
if (log) {
$('#django_debug').remove();
$('body').append(log);
}
} else {
try {
data = eval('(' + o + ')');
} catch(e) {
data = o;
}
}
if (callback && typeof callback == 'function'){
callback(data);
}
}
});
},
mark_story_as_read: function(story_id, feed_id, callback) {
var self = this;
var read = false;
for (s in this.stories) {
if (this.stories[s].id == story_id) {
read = this.stories[s].read_status;
this.stories[s].read_status = 1;
break;
}
}
if (!read) {
this.make_request('/reader/mark_story_as_read',
{
story_id: story_id,
feed_id: feed_id
}, callback
);
}
},
mark_story_as_like: function(story_id, callback) {
var self = this;
var opinion;
for (s in this.stories) {
if (this.stories[s].id == story_id) {
opinion = this.stories[s].opinion;
this.stories[s].opinion = 1;
break;
}
}
NEWSBLUR.log(['Like', opinion, this.stories[s].opinion]);
if (opinion != 1) {
this.make_request('/reader/mark_story_as_like',
{
story_id: story_id
}, callback
);
}
},
mark_story_as_dislike: function(story_id, callback) {
var self = this;
var opinion;
for (s in this.stories) {
if (this.stories[s].id == story_id) {
opinion = this.stories[s].opinion;
this.stories[s].opinion = -1;
break;
}
}
NEWSBLUR.log(['Dislike', opinion, this.stories[s].opinion]);
if (opinion != -1) {
this.make_request('/reader/mark_story_as_dislike',
{
story_id: story_id
}, callback
);
}
},
mark_feed_as_read: function(feed_id, callback) {
var self = this;
this.make_request('/reader/mark_feed_as_read',
{
feed_id: feed_id
}, callback
);
},
load_feeds: function(callback) {
var self = this;
var pre_callback = function(folders) {
self.folders = folders;
callback(folders);
};
this.make_request('/reader/load_feeds', {}, pre_callback);
},
load_feed: function(feed_id, page, first_load, callback) {
var self = this;
var pre_callback = function(data) {
if (feed_id != self.feed_id) {
self.stories = data.stories;
self.feed_id = feed_id;
} else {
$.merge(self.stories, data.stories);
}
callback(data, first_load);
};
this.make_request('/reader/load_single_feed',
{
feed_id: feed_id,
page: page
}, pre_callback
);
},
load_feed_page: function(feed_id, page, callback) {
var self = this;
this.make_request('/reader/load_feed_page',
{
feed_id: feed_id,
page: page
}, callback
);
},
get_feed: function(feed_id, callback) {
var self = this;
for (fld in this.folders) {
var feeds = this.folders[fld].feeds;
for (f in feeds) {
if (feeds[f].id == feed_id) {
return feeds[f];
}
}
}
return null;
},
get_story: function(story_id, callback) {
var self = this;
for (s in this.stories) {
if (this.stories[s].id == story_id) {
return this.stories[s];
}
}
return null;
},
process_opml_import: function(data, callback) {
var self = this;
this.make_request('/opml_import/process', data, callback);
},
save_classifier: function(story_id, data, callback) {
this.make_request('/classifier/save', data, callback);
}
};
NEWSBLUR.AssetModel.Preferences = function() {
this.feeds = {};
this.stories = {};
};
NEWSBLUR.AssetModel.Preferences.prototype = {
init: function() {
return;
},
make_request: function(url, data, callback) {
$.ajax({
url: url,
data: data,
type: 'POST',
success: function(o) {
var data = eval('(' + o + ')');
if(callback && typeof callback == 'function'){
callback(data);
}
}
});
}
};