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

View file

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

View file

@ -3,10 +3,11 @@ from django.contrib.auth.decorators import login_required
from django.template import RequestContext
from django.db import IntegrityError
try:
from apps.rss_feeds.models import Feed, Story
from apps.rss_feeds.models import Feed, Story, Tag
except:
pass
from django.core.cache import cache
from django.db.models.aggregates import Count
from apps.reader.models import UserSubscription, UserSubscriptionFolders, UserStory
from utils import json
from utils.user_functions import get_user
@ -115,9 +116,14 @@ def load_single_feed(request):
story['read_status'] = 0
# 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)
return HttpResponse(data, mimetype='text/html')
return HttpResponse(data, mimetype='application/json')
def refresh_feed(request):
feed_id = request.REQUEST['feed_id']

View file

@ -123,7 +123,7 @@ a img {
#story_titles .feed_bar {
font-weight: bold;
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;
border-bottom: 2px solid #404040;
position: relative;
@ -131,18 +131,26 @@ a img {
#story_titles .feed_bar .feed_heading {
display: block;
text-align: center;
}
#story_titles .feed_bar .feed_heading .feed_favicon {
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 {
position: absolute;
right: 4px;
top: 4px;
float: right;
padding: 0 8px;
}
#story_titles .feed_bar .NB-button-intelligence {
float: right;
}
#story_titles .feed_bar .feed_id {
@ -775,4 +783,4 @@ form.opml_import_form input {
.simplemodal-wrap {
overflow: auto;
}
}

View file

@ -156,14 +156,14 @@ NEWSBLUR.AssetModel.Reader.prototype = {
load_feed: function(feed_id, page, first_load, callback) {
var self = this;
var pre_callback = function(stories) {
var pre_callback = function(data) {
if (feed_id != self.feed_id) {
self.stories = stories;
self.stories = data.stories;
self.feed_id = feed_id;
} 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',

View file

@ -340,12 +340,14 @@
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 stories = data.stories;
var tags = data.tags;
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) {
var story = stories[s];
var $story_title = this.make_story_title(story);
@ -509,7 +511,10 @@
var feed = this.model.get_feed(feed_id);
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('img', { className: 'feed_favicon', src: this.google_favicon_url + feed.feed_link }),
$.make('span', { className: 'feed_title' }, feed.feed_title)