mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
Showing feeds, icons, and unread counts. Needs separated unread counts and an intelligence slider.
This commit is contained in:
parent
6d0c0c3cdc
commit
3d933723d9
6 changed files with 155 additions and 28 deletions
|
@ -184,6 +184,7 @@ def load_feed_favicons(request):
|
|||
|
||||
def load_feeds_flat(request):
|
||||
user = get_user(request)
|
||||
include_favicons = request.REQUEST.get('include_favicons', False)
|
||||
feeds = {}
|
||||
|
||||
try:
|
||||
|
@ -197,14 +198,7 @@ def load_feeds_flat(request):
|
|||
for sub in user_subs:
|
||||
if sub.needs_unread_recalc:
|
||||
sub.calculate_feed_scores(silent=True)
|
||||
feeds[sub.feed.pk] = {
|
||||
'id': sub.feed.pk,
|
||||
'feed_title': sub.user_title or sub.feed.feed_title,
|
||||
'feed_link': sub.feed.feed_link,
|
||||
'ps': sub.unread_count_positive,
|
||||
'nt': sub.unread_count_neutral,
|
||||
'ng': sub.unread_count_negative,
|
||||
}
|
||||
feeds[sub.feed.pk] = sub.canonical(include_favicon=include_favicons)
|
||||
|
||||
folders = json.decode(folders.folders)
|
||||
flat_folders = {}
|
||||
|
@ -212,25 +206,24 @@ def load_feeds_flat(request):
|
|||
def make_feeds_folder(items, parent_folder="", depth=0):
|
||||
for item in items:
|
||||
if isinstance(item, int) and item in feeds:
|
||||
feed = feeds[item]
|
||||
if not parent_folder:
|
||||
parent_folder = ' '
|
||||
if parent_folder in flat_folders:
|
||||
flat_folders[parent_folder].append(feed)
|
||||
flat_folders[parent_folder].append(item)
|
||||
else:
|
||||
flat_folders[parent_folder] = [feed]
|
||||
flat_folders[parent_folder] = [item]
|
||||
elif isinstance(item, dict):
|
||||
for folder_name in item:
|
||||
folder = item[folder_name]
|
||||
flat_folder_name = "%s%s%s" % (
|
||||
parent_folder,
|
||||
" - " if parent_folder else "",
|
||||
" - " if parent_folder and parent_folder != ' ' else "",
|
||||
folder_name
|
||||
)
|
||||
make_feeds_folder(folder, flat_folder_name, depth+1)
|
||||
|
||||
make_feeds_folder(folders)
|
||||
data = dict(flat_folders=flat_folders, user=user.username)
|
||||
data = dict(flat_folders=flat_folders, feeds=feeds, user=user.username)
|
||||
return data
|
||||
|
||||
@json.json_view
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#NB-feed-list .ui-li-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-top: -2px;
|
||||
}
|
|
@ -2,10 +2,92 @@
|
|||
|
||||
NEWSBLUR.MobileReader = function() {
|
||||
|
||||
// ===========
|
||||
// = Globals =
|
||||
// ===========
|
||||
|
||||
this.model = NEWSBLUR.AssetModel.reader();
|
||||
this.story_view = 'page';
|
||||
this.$s = {
|
||||
$body: $('body'),
|
||||
$feed_list: $('#NB-feed-list')
|
||||
};
|
||||
this.flags = {
|
||||
'feeds_loaded' : false
|
||||
};
|
||||
this.locks = {};
|
||||
this.counts = {};
|
||||
this.cache = {};
|
||||
this.constants = {};
|
||||
|
||||
this.runner();
|
||||
};
|
||||
|
||||
NEWSBLUR.MobileReader.prototype = {
|
||||
|
||||
runner: function() {
|
||||
this.load_feeds();
|
||||
},
|
||||
|
||||
// =============
|
||||
// = Feed List =
|
||||
// =============
|
||||
|
||||
load_feeds: function() {
|
||||
$.mobile.pageLoading();
|
||||
|
||||
this.model.load_feeds_flat($.rescope(this.build_feed_list, this));
|
||||
},
|
||||
|
||||
build_feed_list: function() {
|
||||
var self = this;
|
||||
var folders = this.model.folders;
|
||||
var feeds = this.model.feeds;
|
||||
var $feed_list = this.$s.$feed_list;
|
||||
var $feeds = '';
|
||||
_.each(folders, function(items, folder_name) {
|
||||
$feeds += '<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">';
|
||||
if (folder_name && folder_name != ' ') {
|
||||
$feeds += _.template('\
|
||||
<li data-role="list-divider"><%= folder_name %></li>', {
|
||||
folder_name : folder_name
|
||||
});
|
||||
}
|
||||
_.each(items, function(item) {
|
||||
$feeds += self.make_feed_title(item);
|
||||
});
|
||||
$feeds += '</ul>';
|
||||
});
|
||||
|
||||
this.flags.feeds_loaded = true;
|
||||
$feed_list.html($feeds);
|
||||
$('ul', $feed_list).listview();
|
||||
$.mobile.pageLoading(true);
|
||||
},
|
||||
|
||||
make_feed_title: function(feed_id) {
|
||||
var feed = this.model.get_feed(feed_id);
|
||||
var $feed = _.template('\
|
||||
<li>\
|
||||
<a href="#" data-feed-id="<%= feed.id %>">\
|
||||
<img src="<%= $.favicon(feed.favicon) %>" class="ui-li-icon">\
|
||||
<%= feed.feed_title %>\
|
||||
<% if (feed.ps) { %>\
|
||||
<span class="ui-li-count ui-li-count-positive"><%= feed.ps %></span>\
|
||||
<% } %>\
|
||||
<% if (feed.nt) { %>\
|
||||
<span class="ui-li-count ui-li-count-positive"><%= feed.nt %></span>\
|
||||
<% } %>\
|
||||
<% if (feed.ng) { %>\
|
||||
<span class="ui-li-count ui-li-count-positive"><%= feed.ng %></span>\
|
||||
<% } %>\
|
||||
</a>\
|
||||
</li>', {
|
||||
feed : feed
|
||||
});
|
||||
return $feed;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
})(jQuery);
|
|
@ -230,6 +230,46 @@ NEWSBLUR.AssetModel.Reader.prototype = {
|
|||
this.make_request('/reader/feeds', data, pre_callback, error_callback, {request_type: 'GET'});
|
||||
},
|
||||
|
||||
load_feeds_flat: function(callback, error_callback) {
|
||||
var self = this;
|
||||
var data = {
|
||||
flat: true,
|
||||
include_favicons: true
|
||||
};
|
||||
|
||||
var pre_callback = function(subscriptions) {
|
||||
NEWSBLUR.log(['subscriptions', subscriptions.flat_folders]);
|
||||
var flat_feeds = function(feeds) {
|
||||
var flattened = _.flatten(_.map(feeds, _.values));
|
||||
return _.flatten(_.map(flattened, function(feed) {
|
||||
if (!_.isNumber(feed) && feed) return flat_feeds(feed);
|
||||
else return feed;
|
||||
}));
|
||||
};
|
||||
var valid_feeds = flat_feeds({'root': subscriptions.flat_folders});
|
||||
|
||||
_.each(subscriptions.feeds, function(feed, feed_id) {
|
||||
if (_.contains(valid_feeds, parseInt(feed_id, 10))) {
|
||||
self.feeds[feed_id] = feed;
|
||||
if (feed.favicon_fetching) self.flags['favicons_fetching'] = true;
|
||||
}
|
||||
});
|
||||
self.folders = subscriptions.flat_folders;
|
||||
self.starred_count = subscriptions.starred_count;
|
||||
|
||||
if (!_.isEqual(self.favicons, {})) {
|
||||
_.each(self.feeds, function(feed) {
|
||||
if (self.favicons[feed.id]) {
|
||||
feed.favicon = self.favicons[feed.id];
|
||||
}
|
||||
});
|
||||
}
|
||||
callback();
|
||||
};
|
||||
|
||||
this.make_request('/reader/feeds', data, pre_callback, error_callback, {request_type: 'GET'});
|
||||
},
|
||||
|
||||
load_feed_favicons: function(callback, loaded_once, load_all) {
|
||||
var pre_callback = _.bind(function(favicons) {
|
||||
this.favicons = favicons;
|
||||
|
|
|
@ -208,6 +208,8 @@ COMPRESS_JS = {
|
|||
'source_filenames': (
|
||||
'js/jquery-1.6.1.js',
|
||||
'js/mobile/jquery.mobile-1.0a4.js',
|
||||
'js/jquery.ajaxmanager.3.js',
|
||||
'js/underscore.js',
|
||||
'js/inflector.js',
|
||||
'js/jquery.json.js',
|
||||
'js/jquery.easing.js',
|
||||
|
|
|
@ -8,6 +8,22 @@
|
|||
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
var NEWSBLUR = {};
|
||||
NEWSBLUR.Globals = {
|
||||
'is_authenticated' : {{ user.is_authenticated|yesno:"true,false" }},
|
||||
'is_anonymous' : {{ user.is_anonymous|yesno:"true,false" }},
|
||||
'is_premium' : {{ user.profile.is_premium|yesno:"true,false" }},
|
||||
'secret_token' : "{{ user.profile.secret_token }}",
|
||||
'username' : "{{ user.username|safe }}",
|
||||
'email' : "{{ user.email|safe }}",
|
||||
'google_favicon_url' : 'http://www.google.com/s2/favicons?domain_url=',
|
||||
'MEDIA_URL' : "{{ MEDIA_URL }}"
|
||||
};
|
||||
NEWSBLUR.Flags = {
|
||||
'start_import_from_google_reader': {{ start_import_from_google_reader|yesno:"true,false" }}
|
||||
};
|
||||
NEWSBLUR.URLs = {
|
||||
'domain' : "{% current_domain %}"
|
||||
};
|
||||
</script>
|
||||
|
||||
{% compressed_css 'mobile' %}
|
||||
|
@ -37,23 +53,12 @@
|
|||
<body>
|
||||
|
||||
|
||||
<div data-role="page" id="NB-feeds">
|
||||
<div data-role="page" id="NB-page-feeds">
|
||||
<div data-role="header">
|
||||
<h1>{{ request.user.username }}</h1>
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<ul data-role="listview">
|
||||
<li><a href="index.html"><img src="images/gf.png" alt="France" class="ui-li-icon">France <span class="ui-li-count">4</span></a></li>
|
||||
<li><a href="index.html"><img src="images/de.png" alt="Germany" class="ui-li-icon">Germany <span class="ui-li-count">4</span></a></li>
|
||||
<li><a href="index.html"><img src="images/gb.png" alt="Great Britain" class="ui-li-icon">Great Britain <span class="ui-li-count">0</span></a></li>
|
||||
<li><a href="index.html"><img src="images/fi.png" alt="Finland" class="ui-li-icon">Finland <span class="ui-li-count">12</span><span class="ui-li-count">12</span></a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="index.html"><img src="images/sj.png" alt="Norway" class="ui-li-icon">Norway <span class="ui-li-count">328</span></a></li>
|
||||
<li><a href="index.html"><img src="images/us.png" alt="United States" class="ui-li-icon">United States <span class="ui-li-count">62</span></a></li>
|
||||
</ul>
|
||||
|
||||
<div data-role="content">
|
||||
<div id="NB-feed-list"></div>
|
||||
</div>
|
||||
<div data-role="footer"> 1
|
||||
<div class="NB-footer-site-count ui-li-count">12 sites</div>
|
||||
|
@ -62,7 +67,7 @@
|
|||
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$(document).bind('ready', function() {
|
||||
NEWSBLUR.mobile_reader = new NEWSBLUR.MobileReader();
|
||||
});
|
||||
</script>
|
||||
|
|
Loading…
Add table
Reference in a new issue