Rudimentary makring as unread. Also repositioning starring.

This commit is contained in:
Samuel Clay 2010-12-31 10:34:31 -05:00
parent ff401bb896
commit 7d3a173422
5 changed files with 132 additions and 62 deletions

View file

@ -35,7 +35,7 @@ class UserSubscription(models.Model):
def __unicode__(self):
return '[' + self.feed.feed_title + '] '
def save(self, *args, **kwargs):
try:
super(UserSubscription, self).save(*args, **kwargs)

View file

@ -513,7 +513,33 @@ def mark_story_as_read(request):
@ajax_login_required
@json.json_view
def mark_story_as_unread(request):
return {}
story_id = request.POST['story_id']
feed_id = int(request.POST['feed_id'])
try:
usersub = UserSubscription.objects.select_related('feed').get(user=request.user, feed=feed_id)
except Feed.DoesNotExist:
duplicate_feed = DuplicateFeed.objects.filter(duplicate_feed_id=feed_id)
if duplicate_feed:
try:
usersub = UserSubscription.objects.get(user=request.user,
feed=duplicate_feed[0].feed)
except Feed.DoesNotExist:
return dict(code=-1)
if not usersub.needs_unread_recalc:
usersub.needs_unread_recalc = True
usersub.save()
data = dict(code=0, payload=dict(story_id=story_id))
logging.info(" ---> [%s] ~FY~SBUnread~SN story in feed: %s" % (request.user, usersub.feed))
story = MStory.objects(story_feed_id=feed_id, story_guid=story_id)[0]
now = datetime.datetime.utcnow()
m = MUserStory.objects(story=story, user_id=request.user.pk, feed_id=feed_id)
m.delete()
return data
@ajax_login_required
@json.json_view

View file

@ -1067,12 +1067,21 @@ background: transparent;
background: transparent url('../img/icons/silk/bullet_red.png') no-repeat 6px 2px;
}
#story_titles .story.NB-story-starred .NB-storytitles-sentiment,
#story_titles .story.read.NB-story-starred .NB-storytitles-sentiment {
background: transparent url('../img/reader/star_blue.png') no-repeat 6px 1px;
#story_titles .story.NB-story-starred .NB-storytitles-star,
#story_titles .story.read.NB-story-starred .NB-storytitles-star {
width: 16px;
height: 16px;
margin: 1px 6px 0 0;
background: transparent url('../img/reader/star_blue.png') no-repeat 0 0;
float: left;
display: none;
}
#story_titles .story.NB-hover.NB-story-starred .NB-storytitles-sentiment {
background: none;
#story_titles .story.NB-story-starred .NB-storytitles-star,
#story_titles .story.read.NB-story-starred .NB-storytitles-star {
display: block;
}
#story_titles .story.NB-hover.NB-story-starred a.story_title {
}
#story_titles .story.read {
font-weight: normal;
@ -3441,9 +3450,9 @@ background: transparent;
.NB-menu-manage .NB-menu-manage-image {
padding: 0;
position: absolute;
width: 16px;
height: 16px;
top: 7px;
width: 18px;
height: 18px;
top: 5px;
left: 10px;
}
@ -3477,24 +3486,24 @@ background: transparent;
}
.NB-menu-manage .NB-menu-manage-feed-manage .NB-menu-manage-image {
background: transparent url('../img/icons/silk/book_open.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/book_open.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-feed-train .NB-menu-manage-image {
background: transparent url('../img/icons/silk/bricks.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/bricks.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-story-train .NB-menu-manage-image {
background: transparent url('../img/icons/silk/bricks.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/bricks.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-story-train .NB-menu-manage-image {
background: transparent url('../img/icons/silk/bricks.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/bricks.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-feed-reload .NB-menu-manage-image {
background: transparent url('../img/icons/silk/car.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/car.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-feed-stats .NB-menu-manage-image {
background: transparent url('../img/icons/silk/chart_curve.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/chart_curve.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-feed-unreadtabs .NB-menu-manage-image {
@ -3504,37 +3513,37 @@ background: transparent;
}
.NB-menu-manage .NB-menu-manage-mark-read .NB-menu-manage-image {
background: transparent url('../img/icons/silk/cut.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/cut.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-keyboard .NB-menu-manage-image {
background: transparent url('../img/icons/silk/keyboard.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/keyboard.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-feed-exception .NB-menu-manage-image {
background: transparent url('../img/icons/silk/exclamation.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/exclamation.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-delete .NB-menu-manage-image {
background: transparent url('../img/icons/silk/bin_closed.png') no-repeat -2px -1px;
background: transparent url('../img/icons/silk/bin_closed.png') no-repeat -2px 1px;
}
.NB-menu-manage .NB-menu-manage-delete.NB-menu-manage-feed-delete-cancel .NB-menu-manage-image {
background: transparent url('../img/icons/silk/arrow_rotate_clockwise.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/arrow_rotate_clockwise.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-delete-confirm .NB-menu-manage-image {
background: transparent url('../img/icons/silk/exclamation.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/exclamation.png') no-repeat 0 1px;
font-weight: bold;
}
.NB-menu-manage .NB-menu-manage-rename .NB-menu-manage-image {
background: transparent url('../img/icons/silk/font.png') no-repeat 0px 0px;
background: transparent url('../img/icons/silk/font.png') no-repeat 0px 2px;
}
.NB-menu-manage .NB-menu-manage-rename.NB-active .NB-menu-manage-image {
background: transparent url('../img/icons/silk/accept.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/accept.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-rename.NB-menu-manage-feed-rename-cancel .NB-menu-manage-image {
background: transparent url('../img/icons/silk/arrow_rotate_clockwise.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/arrow_rotate_clockwise.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-rename-confirm .NB-menu-manage-image {
background: transparent url('../img/icons/silk/bullet_arrow_right.png') no-repeat 2px -3px;
background: transparent url('../img/icons/silk/bullet_arrow_right.png') no-repeat 2px -1px;
}
.NB-menu-manage .NB-menu-manage-rename-confirm {
overflow: hidden;
@ -3576,29 +3585,29 @@ background: transparent;
}
.NB-menu-manage .NB-menu-manage-site-mark-read .NB-menu-manage-image {
background: transparent url('../img/icons/silk/control_fastforward_blue.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/control_fastforward_blue.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-trainer .NB-menu-manage-image {
background: transparent url('../img/icons/silk/bricks.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/bricks.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-preferences .NB-menu-manage-image {
background: transparent url('../img/icons/silk/color_wheel.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/color_wheel.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-feedchooser .NB-menu-manage-image {
background: transparent url('../img/icons/silk/color_swatch.png') no-repeat 0 0;
background: transparent url('../img/icons/silk/color_swatch.png') no-repeat 0 2px;
}
.NB-menu-manage .NB-menu-manage-story-instapaper .NB-menu-manage-image {
background: transparent url('../img/icons/silk/car.png') no-repeat 0 -1px;
background: transparent url('../img/reader/instapaper.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-story-unread .NB-menu-manage-image {
background: transparent url('../img/icons/silk/bullet_orange.png') no-repeat 0 -1px;
background: transparent url('../img/icons/silk/bullet_orange.png') no-repeat 0 1px;
}
.NB-menu-manage .NB-menu-manage-story-star .NB-menu-manage-image {
background: transparent url('../img/reader/star_blue.png') no-repeat 0 -1px;
background: transparent url('../img/reader/star_blue.png') no-repeat 0 0px;
}
.NB-menu-manage .NB-menu-manage-story-star.NB-story-starred .NB-menu-manage-image {
background: transparent url('../img/reader/star_blue.png') no-repeat 0 -1px;
opacity: .25;
.NB-menu-manage.NB-story-starred .NB-menu-manage-story-star .NB-menu-manage-image {
background: transparent url('../img/reader/star_blue.png') no-repeat 0 0px;
opacity: .55;
}
.NB-menu-manage .NB-menu-manage-rename-confirm {
display: none;
@ -3869,8 +3878,26 @@ background: transparent;
border: 1px solid #909090;
}
.NB-modal-feedchooser .NB-modal-submit.NB-modal-submit-paypal {
background-color: #F5FFB3;
border-radius: 20px;
padding: 12px;
border: 1px solid #E1E6AA;
}
.NB-modal-feedchooser .NB-feedchooser-paypal {
min-height: 48px;
width: 150px;
float: left;
}
.NB-modal-feedchooser .NB-feedchooser-dollar {
float: left;
color: #1C55C0;
font-size: 16px;
margin: 0px 0px 0px 20px;
padding: 12px 0;
font-weight: bold;
}
.NB-modal-feedchooser .NB-feedchooser .feed_counts {

View file

@ -1022,7 +1022,7 @@
$('.NB-hover', $folder).removeClass('NB-hover');
$this.addClass("NB-hover");
// NEWSBLUR.log(['scroll', $this.scrollTop(), $this.offset(), $this.position()]);
if ($this.offset().top > $(window).height() - 204) {
if ($this.offset().top > $(window).height() - 270) {
$this.addClass('NB-hover-inverse');
}
}
@ -1922,14 +1922,14 @@
mark_story_as_starred: function(story_id, $story) {
var story = this.model.get_story(story_id);
var $star = $('.NB-storytitles-sentiment', $story);
var $star = $('.NB-storytitles-star', $story);
$story.addClass('NB-story-starred');
$star.attr({'title': 'Saved!'});
$star.tipsy({
gravity: 'sw',
fade: true,
trigger: 'manual',
offsetOpposite: -3
offsetOpposite: -1
});
$star.tipsy('enable');
$star.tipsy('show');
@ -1942,17 +1942,16 @@
},
mark_story_as_unstarred: function(story_id, $story) {
var $star = $('.NB-storytitles-sentiment', $story);
var $star = $('.NB-storytitles-star', $story);
$story.one('mouseout', function() {
$story.removeClass('NB-unstarred');
});
$story.removeClass('NB-story-starred');
$star.attr({'title': 'Removed'});
$star.tipsy({
gravity: 'sw',
fade: true,
trigger: 'manual',
offsetOpposite: -3
offsetOpposite: -1
});
$star.tipsy('enable');
$star.tipsy('show');
@ -1960,10 +1959,17 @@
$star.tipsy('hide');
$star.tipsy('disable');
}, 850);
$story.removeClass('NB-story-starred');
this.model.mark_story_as_unstarred(story_id, function() {});
this.update_starred_count();
},
send_story_to_instapaper: function(story_id) {
var story = this.model.get_story(story_id);
var url = 'https://www.instapaper.com/api/add';
window.open(url + '?url=' + story.story_permalink + '&title=' + story.story_title, '_blank');
},
// =====================
// = Story Titles Pane =
// =====================
@ -2033,6 +2039,7 @@
}
var $story_title = $.make('div', { className: 'story ' + read + starred + 'NB-story-' + score_color }, [
$.make('div', { className: 'NB-storytitles-sentiment'}),
$.make('div', { className: 'NB-storytitles-star'}),
$.make('a', { href: story.story_permalink, className: 'story_title' }, [
$.make('span', { className: 'NB-storytitles-title' }, story.story_title),
$.make('span', { className: 'NB-storytitles-author' }, story.story_authors),
@ -2877,10 +2884,6 @@
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Mark as read')
])),
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-unreadtabs' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Open unreads in '+tab_unread_count+Inflector.pluralize(' tab', tab_unread_count))
]),
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-reload' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Insta-fetch stories')
@ -2896,6 +2899,11 @@
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'What you like and dislike.')
]),
$.make('li', { className: 'NB-menu-separator' }),
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-unreadtabs' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Open unreads in '+tab_unread_count+Inflector.pluralize(' tab', tab_unread_count))
]),
$.make('li', { className: 'NB-menu-separator' }),
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-rename NB-menu-manage-feed-rename' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Rename this site')
@ -2956,26 +2964,26 @@
inverse = true;
$manage_menu = $.make('ul', { className: 'NB-menu-manage NB-menu-manage-story ' + starred_class }, [
$.make('li', { className: 'NB-menu-separator-inverse' }),
$.make('li', { className: 'NB-menu-separator' }),
$.make('li', { className: 'NB-menu-manage-story-star' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, starred_title)
]),
$.make('li', { className: 'NB-menu-manage-story-instapaper' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Send to Instapaper')
]),
(story.read_status && $.make('li', { className: 'NB-menu-separator' })),
(story.read_status && $.make('li', { className: 'NB-menu-manage-story-unread' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Mark as unread')
])),
// $.make('li', { className: 'NB-menu-manage-story-instapaper' }, [
// $.make('div', { className: 'NB-menu-manage-image' }),
// $.make('div', { className: 'NB-menu-manage-title' }, 'Send to Instapaper')
// ]),
$.make('li', { className: 'NB-menu-separator' }),
$.make('li', { className: 'NB-menu-manage-story-train' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Intelligence trainer'),
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'What you like and dislike.')
])
]),
(story.read_status && $.make('li', { className: 'NB-menu-separator' })),
(story.read_status && $.make('li', { className: 'NB-menu-manage-story-unread' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Mark as unread')
]))
]);
$manage_menu.data('feed_id', feed_id);
$manage_menu.data('story_id', story_id);
@ -3035,10 +3043,10 @@
if (inverse) {
if (type == 'feed') {
left = toplevel ? 0 : -20;
top = toplevel ? 21 : 22;
top = toplevel ? 21 : 21;
} else if (type == 'folder') {
left = toplevel ? 0 : -20;
top = toplevel ? 23 : 24;
top = toplevel ? 24 : 24;
} else if (type == 'story') {
left = 4;
top = 21;
@ -4344,6 +4352,12 @@
self.mark_story_as_unread(story_id, feed_id);
});
$.targetIs(e, { tagSelector: '.NB-menu-manage-story-instapaper' }, function($t, $p){
e.preventDefault();
var story_id = $t.closest('.NB-menu-manage').data('story_id');
self.send_story_to_instapaper(story_id);
});
$.targetIs(e, { tagSelector: '.task_button_view' }, function($t, $p){
e.preventDefault();
var view;

View file

@ -93,12 +93,15 @@ NEWSBLUR.ReaderFeedchooser.prototype = {
$.make('span', { className: 'NB-feedchooser-premium-cost-dollars' }, '$12'),
'/',
$.make('span', { className: 'NB-feedchooser-premium-cost-time' }, 'year'),
'. That\'s a single dollar a month.'
'. That\'s three lattes in 12 months.'
])
]),
$.make('div', { className: 'NB-modal-submit' }, [
$.make('div', { className: 'NB-modal-submit NB-modal-submit-paypal' }, [
// this.make_google_checkout()
$.make('div', { className: 'NB-feedchooser-paypal' })
$.make('div', { className: 'NB-feedchooser-paypal' }),
$.make('div', { className: 'NB-feedchooser-dollar' }, [
$.make('span', { className: 'NB-feedchooser-dollar-month' }, 'Just $1/month!')
])
])
])
]);