Adding intelligence button for feeds.

This commit is contained in:
Samuel Clay 2010-01-07 00:04:12 +00:00
parent 138f93cf43
commit 0c33bc84cb
6 changed files with 46 additions and 17 deletions

View file

@ -25,8 +25,10 @@ class Category(models.Model):
def __unicode__(self): def __unicode__(self):
return '%s (%s)' % (self.category, self.count) return '%s (%s)' % (self.category, self.count)
class ClassifierTitle(models.Model): class ClassifierTitle(models.Model):
user = models.ForeignKey(User) user = models.ForeignKey(User)
score = models.SmallIntegerField()
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
feed = models.ForeignKey(Feed) feed = models.ForeignKey(Feed)
original_story = models.ForeignKey(Story) original_story = models.ForeignKey(Story)
@ -37,6 +39,7 @@ class ClassifierTitle(models.Model):
class ClassifierAuthor(models.Model): class ClassifierAuthor(models.Model):
user = models.ForeignKey(User) user = models.ForeignKey(User)
score = models.SmallIntegerField()
author = models.ForeignKey(StoryAuthor) author = models.ForeignKey(StoryAuthor)
feed = models.ForeignKey(Feed) feed = models.ForeignKey(Feed)
original_story = models.ForeignKey(Story) original_story = models.ForeignKey(Story)
@ -47,6 +50,7 @@ class ClassifierAuthor(models.Model):
class ClassifierFeed(models.Model): class ClassifierFeed(models.Model):
user = models.ForeignKey(User) user = models.ForeignKey(User)
score = models.SmallIntegerField()
feed = models.ForeignKey(Feed) feed = models.ForeignKey(Feed)
original_story = models.ForeignKey(Story) original_story = models.ForeignKey(Story)
creation_date = models.DateTimeField(auto_now=True) creation_date = models.DateTimeField(auto_now=True)
@ -56,6 +60,7 @@ class ClassifierFeed(models.Model):
class ClassifierTag(models.Model): class ClassifierTag(models.Model):
user = models.ForeignKey(User) user = models.ForeignKey(User)
score = models.SmallIntegerField()
tag = models.ForeignKey(Tag) tag = models.ForeignKey(Tag)
feed = models.ForeignKey(Feed) feed = models.ForeignKey(Feed)
original_story = models.ForeignKey(Story) original_story = models.ForeignKey(Story)

View file

@ -31,9 +31,11 @@ def save_classifier(request):
payload = {} payload = {}
feed = Feed.objects.get(pk=post['feed_id']) feed = Feed.objects.get(pk=post['feed_id'])
story = Story.objects.get(pk=post['story_id']) story = Story.objects.get(pk=post['story_id'])
score = int(post['score'])
if 'title' in post and 'title' in facets: if 'title' in post and 'title' in facets:
ClassifierTitle.objects.create(user=request.user, ClassifierTitle.objects.create(user=request.user,
score=score,
title=post['title'], title=post['title'],
feed=feed, feed=feed,
original_story=story) original_story=story)
@ -41,12 +43,14 @@ def save_classifier(request):
if 'author' in facets: if 'author' in facets:
author = story.story_author author = story.story_author
ClassifierAuthor.objects.create(user=request.user, ClassifierAuthor.objects.create(user=request.user,
score=score,
author=author, author=author,
feed=feed, feed=feed,
original_story=story) original_story=story)
if 'publisher' in facets: if 'publisher' in facets:
ClassifierFeed.objects.create(user=request.user, ClassifierFeed.objects.create(user=request.user,
score=score,
feed=feed, feed=feed,
original_story=story) original_story=story)
@ -55,6 +59,7 @@ def save_classifier(request):
for tag_name in tags: for tag_name in tags:
tag = Tag.objects.get(name=tag_name, feed=feed) tag = Tag.objects.get(name=tag_name, feed=feed)
ClassifierTag.objects.create(user=request.user, ClassifierTag.objects.create(user=request.user,
score=score,
tag=tag, tag=tag,
feed=feed, feed=feed,
original_story=story) original_story=story)

View file

@ -3,10 +3,11 @@ from django.contrib.auth.decorators import login_required
from django.template import RequestContext from django.template import RequestContext
from django.db import IntegrityError from django.db import IntegrityError
try: try:
from apps.rss_feeds.models import Feed, Story from apps.rss_feeds.models import Feed, Story, Tag
except: except:
pass pass
from django.core.cache import cache from django.core.cache import cache
from django.db.models.aggregates import Count
from apps.reader.models import UserSubscription, UserSubscriptionFolders, UserStory from apps.reader.models import UserSubscription, UserSubscriptionFolders, UserStory
from utils import json from utils import json
from utils.user_functions import get_user from utils.user_functions import get_user
@ -115,9 +116,14 @@ def load_single_feed(request):
story['read_status'] = 0 story['read_status'] = 0
# logging.debug("Story: %s" % story) # logging.debug("Story: %s" % story)
context = stories all_tags = Tag.objects.filter(feed=feed)\
.annotate(stories_count=Count('story'))\
.order_by('-stories_count')[:20]
tags = [(tag.name, tag.stories_count) for tag in all_tags if tag.stories_count > 1]
context = dict(stories=stories, tags=tags, intelligence={})
data = json.encode(context) data = json.encode(context)
return HttpResponse(data, mimetype='text/html') return HttpResponse(data, mimetype='application/json')
def refresh_feed(request): def refresh_feed(request):
feed_id = request.REQUEST['feed_id'] feed_id = request.REQUEST['feed_id']

View file

@ -123,7 +123,7 @@ a img {
#story_titles .feed_bar { #story_titles .feed_bar {
font-weight: bold; font-weight: bold;
font-size: 13px; font-size: 13px;
padding: 2px 140px 2px 28px; padding: 2px 28px 2px 4px;
background: #dadada url('../theme/images/dadada_40x100_textures_03_highlight_soft_75.png') 0 50% repeat-x; background: #dadada url('../theme/images/dadada_40x100_textures_03_highlight_soft_75.png') 0 50% repeat-x;
border-bottom: 2px solid #404040; border-bottom: 2px solid #404040;
position: relative; position: relative;
@ -131,18 +131,26 @@ a img {
#story_titles .feed_bar .feed_heading { #story_titles .feed_bar .feed_heading {
display: block; display: block;
text-align: center;
} }
#story_titles .feed_bar .feed_heading .feed_favicon { #story_titles .feed_bar .feed_heading .feed_favicon {
margin-right: 8px; margin-right: 8px;
vertical-align: middle; vertical-align: top;
}
#story_titles .feed_bar .NB-feedbar-intelligence {
position: absolute;
right: 4px;
top: 2px;
} }
#story_titles .feed_bar .unread_count { #story_titles .feed_bar .unread_count {
position: absolute; float: right;
right: 4px; padding: 0 8px;
top: 4px; }
#story_titles .feed_bar .NB-button-intelligence {
float: right;
} }
#story_titles .feed_bar .feed_id { #story_titles .feed_bar .feed_id {
@ -775,4 +783,4 @@ form.opml_import_form input {
.simplemodal-wrap { .simplemodal-wrap {
overflow: auto; overflow: auto;
} }

View file

@ -156,14 +156,14 @@ NEWSBLUR.AssetModel.Reader.prototype = {
load_feed: function(feed_id, page, first_load, callback) { load_feed: function(feed_id, page, first_load, callback) {
var self = this; var self = this;
var pre_callback = function(stories) { var pre_callback = function(data) {
if (feed_id != self.feed_id) { if (feed_id != self.feed_id) {
self.stories = stories; self.stories = data.stories;
self.feed_id = feed_id; self.feed_id = feed_id;
} else { } else {
$.merge(self.stories, stories); $.merge(self.stories, data.stories);
} }
callback(stories, first_load); callback(data, first_load);
}; };
this.make_request('/reader/load_single_feed', this.make_request('/reader/load_single_feed',

View file

@ -340,12 +340,14 @@
this.switch_taskbar_view($taskbar_view_button); this.switch_taskbar_view($taskbar_view_button);
}, },
create_story_titles: function(e, stories, first_load) { create_story_titles: function(e, data, first_load) {
var $story_titles = this.$story_titles; var $story_titles = this.$story_titles;
var stories = data.stories;
var tags = data.tags;
this.story_titles_clear_loading_endbar(); this.story_titles_clear_loading_endbar();
NEWSBLUR.log(['Sample story: ', stories[0], stories.length]); NEWSBLUR.log(['Sample story: ', stories[0], stories.length, tags]);
for (s in stories) { for (s in stories) {
var story = stories[s]; var story = stories[s];
var $story_title = this.make_story_title(story); var $story_title = this.make_story_title(story);
@ -509,7 +511,10 @@
var feed = this.model.get_feed(feed_id); var feed = this.model.get_feed(feed_id);
var $feed_bar = $.make('div', { className: 'feed_bar' }, [ var $feed_bar = $.make('div', { className: 'feed_bar' }, [
$.make('span', { className: 'unread_count' }, ''+feed.unread_count), $.make('div', { className: 'NB-feedbar-intelligence' }, [
$.make('a', { href: '#', className: 'NB-button-intelligence' }, 'Intelligence'),
$.make('span', { className: 'unread_count' }, ''+feed.unread_count)
]),
$.make('span', { className: 'feed_heading' }, [ $.make('span', { className: 'feed_heading' }, [
$.make('img', { className: 'feed_favicon', src: this.google_favicon_url + feed.feed_link }), $.make('img', { className: 'feed_favicon', src: this.google_favicon_url + feed.feed_link }),
$.make('span', { className: 'feed_title' }, feed.feed_title) $.make('span', { className: 'feed_title' }, feed.feed_title)