diff --git a/apps/api/views.py b/apps/api/views.py index c5fb40c24..69b50f591 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -406,6 +406,7 @@ def save_story(request, token=None): title = request.POST['title'] content = request.POST.get('content', None) rss_url = request.POST.get('rss_url', None) + user_notes = request.POST.get('user_notes', None) feed_id = request.POST.get('feed_id', None) or 0 feed = None message = None @@ -470,6 +471,7 @@ def save_story(request, token=None): "starred_date": datetime.datetime.now(), "user_id": profile.user.pk, "user_tags": user_tags, + "user_notes": user_notes, } starred_story = MStarredStory.objects.create(**story_db) logging.user(profile.user, "~BM~FCStarring story from site: ~SB%s: %s" % (story_url, user_tags)) @@ -481,6 +483,7 @@ def save_story(request, token=None): starred_story.story_permalink = story_url starred_story.story_guid = story_url starred_story.story_feed_id = feed_id + starred_story.user_notes = user_notes starred_story.save() logging.user(profile.user, "~BM~FC~SBUpdating~SN starred story from site: ~SB%s: %s" % (story_url, user_tags)) message = "Updating saved story from site: %s: %s" % (story_url, user_tags) diff --git a/apps/feed_import/models.py b/apps/feed_import/models.py index eb7a8c70f..30b67762f 100644 --- a/apps/feed_import/models.py +++ b/apps/feed_import/models.py @@ -10,7 +10,7 @@ from django.db import models from django.contrib.auth.models import User from mongoengine.queryset import OperationError import vendor.opml as opml -from apps.rss_feeds.models import Feed, DuplicateFeed, MStarredStory +from apps.rss_feeds.models import Feed, DuplicateFeed from apps.reader.models import UserSubscription, UserSubscriptionFolders from utils import json_functions as json, urlnorm from utils import log as logging diff --git a/apps/feed_import/tasks.py b/apps/feed_import/tasks.py index 6b831ebf4..d0f6c1c7c 100644 --- a/apps/feed_import/tasks.py +++ b/apps/feed_import/tasks.py @@ -2,7 +2,6 @@ from celery.task import Task from django.contrib.auth.models import User from apps.feed_import.models import UploadedOPML, OPMLImporter from apps.reader.models import UserSubscription -from apps.rss_feeds.models import MStarredStory from utils import log as logging diff --git a/apps/rss_feeds/models.py b/apps/rss_feeds/models.py index 92c71b91b..2a75bf3ab 100644 --- a/apps/rss_feeds/models.py +++ b/apps/rss_feeds/models.py @@ -1912,6 +1912,8 @@ class Feed(models.Model): story['starred_date'] = story_db.starred_date if hasattr(story_db, 'user_tags'): story['user_tags'] = story_db.user_tags + if hasattr(story_db, 'user_notes'): + story['user_notes'] = story_db.user_notes if hasattr(story_db, 'highlights'): story['highlights'] = story_db.highlights if hasattr(story_db, 'shared_date'): @@ -2851,6 +2853,7 @@ class MStarredStory(mongo.DynamicDocument): story_guid = mongo.StringField() story_hash = mongo.StringField() story_tags = mongo.ListField(mongo.StringField(max_length=250)) + user_notes = mongo.StringField() user_tags = mongo.ListField(mongo.StringField(max_length=128)) highlights = mongo.ListField(mongo.StringField(max_length=1024)) image_urls = mongo.ListField(mongo.StringField(max_length=1024)) diff --git a/media/css/reader.css b/media/css/reader.css index 47cc9bd8a..56cacbff8 100644 --- a/media/css/reader.css +++ b/media/css/reader.css @@ -4103,6 +4103,15 @@ body { text-shadow: 0 1px 0 #FBFBFB; line-height: 16px; } +.NB-sideoption-save .NB-sideoption-save-message { + float: right; + opacity: 0; + transition: opacity 1s ease-out; +} +.NB-sideoption-save .NB-sideoption-save-message.NB-active { + opacity: 1; +} +.NB-sideoption-save .NB-sideoption-save-comments, .NB-sideoption-share .NB-sideoption-share-comments { width: 100%; -webkit-box-sizing: border-box; diff --git a/media/js/newsblur/common/assetmodel.js b/media/js/newsblur/common/assetmodel.js index 31a620af2..997f4d3f3 100644 --- a/media/js/newsblur/common/assetmodel.js +++ b/media/js/newsblur/common/assetmodel.js @@ -246,7 +246,8 @@ NEWSBLUR.AssetModel = Backbone.Router.extend({ this.make_request('/reader/mark_story_hash_as_starred', { story_hash: story.get('story_hash'), user_tags: story.get('user_tags'), - highlights: story.get('highlights') + highlights: story.get('highlights'), + user_notes: story.get('user_notes') }, pre_callback); }, diff --git a/media/js/newsblur/models/stories.js b/media/js/newsblur/models/stories.js index c132ecfff..a69657ea1 100644 --- a/media/js/newsblur/models/stories.js +++ b/media/js/newsblur/models/stories.js @@ -8,6 +8,7 @@ NEWSBLUR.Models.Story = Backbone.Model.extend({ this.bind('change:user_tags', this.change_user_tags); this.bind('change:selected', this.select_story); this.bind('change:highlights', this.update_highlights); + this.bind('change:user_notes', this.update_notes); this.populate_comments(); this.story_permalink = this.get('story_permalink'); this.story_title = this.get('story_title'); @@ -270,7 +271,6 @@ NEWSBLUR.Models.Story = Backbone.Model.extend({ }, update_highlights: function() { - this.set('user_tags', this.existing_tags(), {silent: true}); console.log(['update_highlights', this.get('highlights')]); if (!this.get('starred')) { NEWSBLUR.assets.starred_count += 1; @@ -281,6 +281,10 @@ NEWSBLUR.Models.Story = Backbone.Model.extend({ NEWSBLUR.reader.update_starred_count(); }, + update_notes: function() { + NEWSBLUR.assets.mark_story_as_starred(this.id); + }, + change_starred: function() { if (this.get('starred')) { NEWSBLUR.assets.mark_story_as_starred(this.id); diff --git a/media/js/newsblur/views/story_save_view.js b/media/js/newsblur/views/story_save_view.js index 57c683771..eb5140f26 100644 --- a/media/js/newsblur/views/story_save_view.js +++ b/media/js/newsblur/views/story_save_view.js @@ -1,11 +1,13 @@ NEWSBLUR.Views.StorySaveView = Backbone.View.extend({ events: { - "click .NB-sideoption-save-populate" : "populate_story_tags" + "click .NB-sideoption-save-populate" : "populate_story_tags", + "keypress .NB-sideoption-save-notes" : "autosize", + "keypress .NB-sideoption-save-notes" : "save_user_notes", }, initialize: function() { - _.bindAll(this, 'toggle_feed_story_save_dialog'); + _.bindAll(this, 'toggle_feed_story_save_dialog', 'save_user_notes', 'autosize'); this.sideoptions_view = this.options.sideoptions_view; this.model.story_save_view = this; this.model.bind('change:starred', this.toggle_feed_story_save_dialog); @@ -38,6 +40,9 @@ NEWSBLUR.Views.StorySaveView = Backbone.View.extend({
user_tags[]=blog&user_tags[]=cooking
"
+
- url: /reader/mark_story_as_unstarred
method: POST
short_desc: "Mark a story as unstarred (unsaved)."