mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-31 21:41:33 +00:00
Adding intelligence button for feeds.
This commit is contained in:
parent
138f93cf43
commit
0c33bc84cb
6 changed files with 46 additions and 17 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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']
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue