mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-31 21:41:33 +00:00
683 lines
30 KiB
JavaScript
683 lines
30 KiB
JavaScript
NEWSBLUR.Views.StoryTitleView = Backbone.View.extend({
|
|
|
|
className: 'NB-story-title-container',
|
|
|
|
events: {
|
|
"dblclick .NB-story-title" : "open_story_in_story_view",
|
|
"click .NB-story-title" : "select_story",
|
|
"contextmenu .NB-story-title" : "show_manage_menu_rightclick",
|
|
"click .NB-story-manage-icon" : "show_manage_menu",
|
|
"click .NB-storytitles-sentiment": "show_manage_menu",
|
|
"click .NB-storytitles-shares" : "select_story_shared",
|
|
"mouseenter .NB-story-title" : "mouseenter_manage_icon",
|
|
"mouseleave .NB-story-title" : "mouseleave_manage_icon"
|
|
},
|
|
|
|
initialize: function() {
|
|
this.model.bind('change', this.toggle_classes, this);
|
|
this.model.bind('change:read_status', this.toggle_read_status, this);
|
|
this.model.bind('change:selected', this.switch_story_view, this);
|
|
this.model.bind('change:selected', this.toggle_selected, this);
|
|
this.model.bind('change:starred', this.toggle_starred, this);
|
|
this.model.bind('change:intelligence', this.toggle_intelligence, this);
|
|
this.collection.bind('render:intelligence', this.render_intelligence, this);
|
|
this.model.story_title_view = this;
|
|
},
|
|
|
|
render: function() {
|
|
var template_name = 'template';
|
|
var story_layout = this.options.override_layout || NEWSBLUR.assets.view_setting(NEWSBLUR.reader.active_feed, 'layout');
|
|
var pane_anchor = this.options.override_layout ? "west" : NEWSBLUR.assets.preference('story_pane_anchor');
|
|
|
|
if (this.options.is_list) template_name = "list_template";
|
|
if (story_layout == 'split' && _.contains(['north', 'south'], pane_anchor)) template_name = "list_template";;
|
|
if (this.options.is_grid) template_name = "grid_template";
|
|
if (this.options.is_magazine) template_name = "magazine_template";
|
|
if (this.options.is_list || this.options.is_grid || this.options.is_magazine) {
|
|
if (this.model.get('selected')) template_name = "list_template";
|
|
}
|
|
|
|
// console.log(['render story title', template_name, this.$el[0], this.options.is_grid, this.show_image_preview(), this.options.override_layout, NEWSBLUR.assets.get_feed(this.model.get('story_feed_id'))]);
|
|
this.$el.html(this[template_name]({
|
|
story : this.model,
|
|
feed : (this.options.override_layout == 'split' ||
|
|
NEWSBLUR.reader.flags.river_view ||
|
|
NEWSBLUR.reader.flags.social_view) &&
|
|
NEWSBLUR.assets.get_feed(this.model.get('story_feed_id')),
|
|
options : this.options,
|
|
show_content_preview : this.show_content_preview(template_name),
|
|
show_image_preview: this.show_image_preview(),
|
|
show_inline_author: story_layout == "list",
|
|
pane_anchor: this.options.override_layout ? "west" : NEWSBLUR.assets.preference('story_pane_anchor')
|
|
}));
|
|
this.$st = this.$(".NB-story-title");
|
|
this.toggle_classes();
|
|
this.toggle_read_status();
|
|
this.color_feedbar();
|
|
this.load_youtube_embeds();
|
|
if (this.options.is_grid) this.watch_grid_image();
|
|
if (_.contains(['list', 'magazine'], story_layout) && this.show_image_preview()) this.watch_grid_image();
|
|
if (_.contains(['split'], story_layout) && this.show_image_preview() && NEWSBLUR.assets.preference('feed_view_single_story')) this.watch_grid_image();
|
|
|
|
return this;
|
|
},
|
|
|
|
template: _.template('\
|
|
<div class="NB-story-title NB-story-title-split <% if (!show_content_preview) { %>NB-story-title-hide-preview<% } %> <% if (show_image_preview) { %>NB-has-image<% } %> ">\
|
|
<div class="NB-storytitles-feed-border-inner"></div>\
|
|
<div class="NB-storytitles-feed-border-outer"></div>\
|
|
<a href="<%= story.get("story_permalink") %>" class="story_title NB-hidden-fade">\
|
|
<div class="NB-storytitles-sentiment" role="button"></div>\
|
|
<div class="NB-story-manage-icon" role="button"></div>\
|
|
<% if (show_image_preview) { %>\
|
|
<div class="NB-storytitles-story-image-container">\
|
|
<div class="NB-storytitles-story-image" <% if (story.image_url()) { %>style="background-image: none, url(\'<%= story.image_url() %>\');"<% } %>></div>\
|
|
</div>\
|
|
<% } %>\
|
|
<% if (feed) { %>\
|
|
<div class="NB-story-feed">\
|
|
<img class="feed_favicon" src="<%= $.favicon(feed) %>">\
|
|
<span class="feed_title"><%= feed.get("feed_title") %></span>\
|
|
</div>\
|
|
<% } %>\
|
|
<div class="NB-storytitles-star"></div>\
|
|
<div class="NB-storytitles-share"></div>\
|
|
<span class="NB-storytitles-title"><%= story.get("story_title") %></span>\
|
|
<% if (pane_anchor != "west") { %>\
|
|
<% if (story.story_authors()) { %><span class="NB-middot">·</span><% } %>\
|
|
<span class="NB-storytitles-author"><%= story.story_authors() %></span>\
|
|
<% } %>\
|
|
<% if (show_content_preview) { %>\
|
|
<div class="NB-storytitles-content-preview"><%= show_content_preview %></div>\
|
|
<% } %>\
|
|
<div class="NB-story-title-split-bottom">\
|
|
<span class="story_date NB-hidden-fade"><%= story.formatted_short_date() %></span>\
|
|
<% if (pane_anchor == "west") { %>\
|
|
<% if (story.story_authors()) { %><span class="NB-middot">·</span><% } %>\
|
|
<span class="NB-storytitles-author"><%= story.story_authors() %></span>\
|
|
<% } %>\
|
|
</div>\
|
|
</a>\
|
|
<% if (story.get("comment_count_friends")) { %>\
|
|
<div class="NB-storytitles-shares">\
|
|
<% _.each(story.get("commented_by_friends"), function(user_id) { %>\
|
|
<% if (NEWSBLUR.assets.user_profiles.find(user_id)) { %>\
|
|
<img class="NB-user-avatar" src="<%= NEWSBLUR.assets.user_profiles.find(user_id).get("photo_url") %>">\
|
|
<% } %>\
|
|
<% }) %>\
|
|
</div>\
|
|
<% } %>\
|
|
</div>\
|
|
<div class="NB-story-detail"></div>\
|
|
'),
|
|
|
|
list_template: _.template('\
|
|
<div class="NB-story-title NB-story-title-list <% if (!show_content_preview) { %>NB-story-title-hide-preview<% } %> <% if (show_image_preview) { %>NB-has-image<% } %> ">\
|
|
<div class="NB-storytitles-feed-border-inner"></div>\
|
|
<div class="NB-storytitles-feed-border-outer"></div>\
|
|
<a href="<%= story.get("story_permalink") %>" class="story_title NB-hidden-fade">\
|
|
<div class="NB-storytitles-sentiment" role="button"></div>\
|
|
<div class="NB-story-manage-icon" role="button"></div>\
|
|
<% if (show_image_preview) { %>\
|
|
<div class="NB-storytitles-story-image-container">\
|
|
<div class="NB-storytitles-story-image" <% if (story.image_url()) { %>style="background-image: none, url(\'<%= story.image_url() %>\');"<% } %>></div>\
|
|
</div>\
|
|
<% } %>\
|
|
<% if (feed) { %>\
|
|
<div class="NB-story-feed">\
|
|
<img class="feed_favicon" src="<%= $.favicon(feed) %>">\
|
|
<span class="feed_title"><%= feed.get("feed_title") %></span>\
|
|
</div>\
|
|
<% } %>\
|
|
<div class="NB-storytitles-star"></div>\
|
|
<div class="NB-storytitles-share"></div>\
|
|
<span class="NB-storytitles-title"><%= story.get("story_title") %></span>\
|
|
<% if (story.story_authors()) { %><span class="NB-middot">·</span><% } %>\
|
|
<span class="NB-storytitles-author"><%= story.story_authors() %></span>\
|
|
<% if (show_content_preview) { %>\
|
|
<div class="NB-storytitles-content-preview"><%= show_content_preview %></div>\
|
|
<% } %>\
|
|
</a>\
|
|
<div class="NB-story-title-list-bottom">\
|
|
<span class="story_date NB-hidden-fade"><%= story.formatted_short_date() %></span>\
|
|
</div>\
|
|
<% if (story.get("comment_count_friends")) { %>\
|
|
<div class="NB-storytitles-shares">\
|
|
<% _.each(story.get("commented_by_friends"), function(user_id) { %>\
|
|
<% if (NEWSBLUR.assets.user_profiles.find(user_id)) { %>\
|
|
<img class="NB-user-avatar" src="<%= NEWSBLUR.assets.user_profiles.find(user_id).get("photo_url") %>">\
|
|
<% } %>\
|
|
<% }) %>\
|
|
</div>\
|
|
<% } %>\
|
|
</div>\
|
|
<div class="NB-story-detail"></div>\
|
|
'),
|
|
|
|
grid_template: _.template('\
|
|
<div class="NB-story-title NB-story-title-grid <% if (!show_content_preview) { %>NB-story-title-hide-preview<% } %>">\
|
|
<div class="NB-storytitles-feed-border-inner"></div>\
|
|
<div class="NB-storytitles-feed-border-outer"></div>\
|
|
<% if (story.image_url()) { %>\
|
|
<div class="NB-storytitles-story-image-container">\
|
|
<div class="NB-storytitles-story-image" <% if (story.image_url()) { %>style="background-image: none, url(\'<%= story.image_url() %>\'); display: block;"<% } %>></div>\
|
|
</div>\
|
|
<% } %>\
|
|
<div class="NB-storytitles-content">\
|
|
<% if (feed) { %>\
|
|
<div class="NB-story-feed">\
|
|
<img class="feed_favicon" src="<%= $.favicon(feed) %>">\
|
|
<span class="feed_title"><%= feed.get("feed_title") %></span>\
|
|
</div>\
|
|
<% } %>\
|
|
<a href="<%= story.get("story_permalink") %>" class="story_title NB-hidden-fade">\
|
|
<div class="NB-storytitles-star"></div>\
|
|
<div class="NB-storytitles-share"></div>\
|
|
<div class="NB-storytitles-sentiment"></div>\
|
|
<div class="NB-story-manage-icon" role="button"></div>\
|
|
<span class="NB-storytitles-title"><%= story.get("story_title") %></span>\
|
|
<% if (show_content_preview) { %>\
|
|
<div class="NB-storytitles-content-preview"><%= show_content_preview %></div>\
|
|
<% } %>\
|
|
</a>\
|
|
</div>\
|
|
<div class="NB-storytitles-grid-bottom">\
|
|
<span class="story_date NB-hidden-fade"><%= story.formatted_short_date() %></span>\
|
|
<% if (story.story_authors()) { %><span class="NB-middot">·</span><% } %>\
|
|
<span class="NB-storytitles-author"><%= story.story_authors() %></span>\
|
|
</div>\
|
|
<% if (story.get("comment_count_friends")) { %>\
|
|
<div class="NB-storytitles-shares">\
|
|
<% _.each(story.get("commented_by_friends"), function(user_id) { %>\
|
|
<img class="NB-user-avatar" src="<%= NEWSBLUR.assets.user_profiles.find(user_id).get("photo_url") %>">\
|
|
<% }) %>\
|
|
</div>\
|
|
<% } %>\
|
|
</div>\
|
|
<div class="NB-story-detail"></div>\
|
|
'),
|
|
|
|
magazine_template: _.template('\
|
|
<div class="NB-story-title NB-story-title-magazine <% if (!show_content_preview) { %>NB-story-title-hide-preview<% } %>">\
|
|
<div class="NB-storytitles-feed-border-inner"></div>\
|
|
<div class="NB-storytitles-feed-border-outer"></div>\
|
|
<% if (story.image_url()) { %>\
|
|
<div class="NB-storytitles-story-image-container">\
|
|
<div class="NB-storytitles-story-image" <% if (story.image_url()) { %>style="background-image: none, url(\'<%= story.image_url() %>\');"<% } %>></div>\
|
|
</div>\
|
|
<% } %>\
|
|
<div class="NB-storytitles-content">\
|
|
<% if (feed) { %>\
|
|
<div class="NB-story-feed">\
|
|
<img class="feed_favicon" src="<%= $.favicon(feed) %>">\
|
|
<span class="feed_title"><%= feed.get("feed_title") %></span>\
|
|
</div>\
|
|
<% } %>\
|
|
<a href="<%= story.get("story_permalink") %>" class="story_title NB-hidden-fade">\
|
|
<div class="NB-storytitles-star"></div>\
|
|
<div class="NB-storytitles-share"></div>\
|
|
<div class="NB-storytitles-sentiment"></div>\
|
|
<div class="NB-story-manage-icon" role="button"></div>\
|
|
<span class="NB-storytitles-title"><%= story.get("story_title") %></span>\
|
|
<% if (show_content_preview) { %>\
|
|
<div class="NB-storytitles-content-preview"><%= show_content_preview %></div>\
|
|
<% } %>\
|
|
</a>\
|
|
</div>\
|
|
<div class="NB-storytitles-magazine-bottom">\
|
|
<span class="story_date NB-hidden-fade"><%= story.formatted_short_date() %></span>\
|
|
<% if (story.story_authors()) { %><span class="NB-middot">·</span><% } %>\
|
|
<span class="NB-storytitles-author"><%= story.story_authors() %></span>\
|
|
</div>\
|
|
<% if (story.get("comment_count_friends")) { %>\
|
|
<div class="NB-storytitles-shares">\
|
|
<% _.each(story.get("commented_by_friends"), function(user_id) { %>\
|
|
<img class="NB-user-avatar" src="<%= NEWSBLUR.assets.user_profiles.find(user_id).get("photo_url") %>">\
|
|
<% }) %>\
|
|
</div>\
|
|
<% } %>\
|
|
</div>\
|
|
<div class="NB-story-detail"></div>\
|
|
'),
|
|
|
|
render_inline_story_detail: function(temporary_text) {
|
|
// console.log(['render_inline_story_detail', this.model.get('story_title')]);
|
|
if (NEWSBLUR.reader.story_view == 'text' || temporary_text) {
|
|
this.text_view = new NEWSBLUR.Views.TextTabView({
|
|
el: null,
|
|
inline_story_title: true,
|
|
temporary: !!temporary_text
|
|
});
|
|
this.text_view.fetch_and_render(this.model, temporary_text);
|
|
this.$(".NB-story-detail").html(this.text_view.$el);
|
|
this.text_view.story_detail.attach_handlers();
|
|
this.text_view.setElement(this.text_view.$el);
|
|
this.text_view.story_detail.setElement(this.text_view.story_detail.$el);
|
|
} else {
|
|
this.story_detail = new NEWSBLUR.Views.StoryDetailView({
|
|
model: this.model,
|
|
collection: this.model.collection,
|
|
tagName: 'div',
|
|
inline_story_title: true
|
|
}).render();
|
|
this.$(".NB-story-detail").html(this.story_detail.$el);
|
|
this.story_detail.attach_handlers();
|
|
this.story_detail.setElement(this.story_detail.$el);
|
|
}
|
|
},
|
|
|
|
render_magazine_story_detail: function () {
|
|
this.render_inline_story_detail();
|
|
},
|
|
|
|
destroy: function() {
|
|
// console.log(["destroy story title", this.model.get('story_title')]);
|
|
if (this.text_view) {
|
|
this.text_view.destroy();
|
|
}
|
|
if (this.story_detail) {
|
|
this.story_detail.destroy();
|
|
}
|
|
this.model.unbind(null, null, this);
|
|
this.collection.unbind(null, null, this);
|
|
this.remove();
|
|
},
|
|
|
|
destroy_inline_story_detail: function() {
|
|
if (this.story_detail) {
|
|
this.story_detail.destroy();
|
|
}
|
|
if (this.text_view) {
|
|
this.text_view.destroy();
|
|
}
|
|
// this.$(".NB-story-detail").empty();
|
|
},
|
|
|
|
collapse_story: function() {
|
|
this.model.set('selected', false);
|
|
NEWSBLUR.app.story_titles.fill_out();
|
|
},
|
|
|
|
render_intelligence: function(options) {
|
|
options = options || {};
|
|
var score = this.model.score();
|
|
var unread_view = NEWSBLUR.reader.get_unread_view_score();
|
|
// console.log(['render_intelligence', score, unread_view, this.model.get('visible'), this.model.get('story_title')]);
|
|
|
|
if (score >= unread_view) {
|
|
this.$el.removeClass('NB-hidden');
|
|
this.$st.removeClass('NB-hidden');
|
|
this.model.set('visible', true);
|
|
} else {
|
|
this.$el.addClass('NB-hidden');
|
|
this.$st.addClass('NB-hidden');
|
|
this.model.set('visible', false);
|
|
}
|
|
},
|
|
|
|
show_content_preview: function(template_name) {
|
|
var preference = NEWSBLUR.assets.preference('show_content_preview');
|
|
if (!preference) return preference;
|
|
var max_length = preference == 'small' ? 300 : preference == 'medium' ? 600 : 1000;
|
|
|
|
if (_.contains(['grid_template', 'magazine_template'], template_name)) {
|
|
max_length = preference == 'small' ? 500 : preference == 'medium' ? 1000 : 1500;
|
|
var preserve_paragraphs = true;
|
|
return this.model.content_preview('story_content', max_length, preserve_paragraphs) || " ";
|
|
}
|
|
var pruned_description = this.model.content_preview('story_content', max_length) || " ";
|
|
var pruned_title = this.model.content_preview('story_title');
|
|
|
|
if (pruned_title.substr(0, 30) == pruned_description.substr(0, 30)) return false;
|
|
if (pruned_description.length < 30) return false;
|
|
|
|
return pruned_description;
|
|
},
|
|
|
|
show_image_preview: function () {
|
|
var show_image_preview = NEWSBLUR.assets.preference('image_preview');
|
|
if (!show_image_preview || show_image_preview == "none") {
|
|
return false;
|
|
}
|
|
|
|
var story_layout = this.options.override_layout ||
|
|
NEWSBLUR.assets.view_setting(NEWSBLUR.reader.active_feed, 'layout');
|
|
var pane_anchor = this.options.override_layout ? "west" : NEWSBLUR.assets.preference('story_pane_anchor');
|
|
if (_.contains(['list', 'grid', 'magazine'], story_layout)) return true;
|
|
if (story_layout == 'split' && _.contains(['north', 'south'], pane_anchor)) return true;
|
|
|
|
return !!this.model.image_url();
|
|
},
|
|
|
|
// ============
|
|
// = Bindings =
|
|
// ============
|
|
|
|
color_feedbar: function() {
|
|
var $inner = this.$st.find(".NB-storytitles-feed-border-inner");
|
|
var $outer = this.$st.find(".NB-storytitles-feed-border-outer");
|
|
var feed = NEWSBLUR.assets.get_feed(this.model.get('story_feed_id'));
|
|
if (!feed) return;
|
|
|
|
$inner.css('background-color', '#' + feed.get('favicon_fade'));
|
|
$outer.css('background-color', '#' + feed.get('favicon_color'));
|
|
},
|
|
|
|
found_largest_image: function(image_url) {
|
|
if (this.load_youtube_embeds()) {
|
|
return;
|
|
}
|
|
|
|
this.$(".NB-storytitles-story-image").css({
|
|
'background-image': "none, url(\'" + image_url + "\')",
|
|
'display': 'block'
|
|
});
|
|
},
|
|
|
|
watch_grid_image: function(index) {
|
|
if (!index) index = 0;
|
|
var self = this;
|
|
if (!index && this.load_youtube_embeds()) {
|
|
return;
|
|
}
|
|
if (!this.model.image_url(index)) {
|
|
// console.log(["no more image urls", index, this.model.get('story_title').substr(0, 30)]);
|
|
return;
|
|
}
|
|
// console.log(["watch_grid_image", index, this.model.image_url(index), this.model.get('story_title').substr(0, 30)]);
|
|
// this.model == NEWSBLUR.assets.stories.at(5) && console.log(["Watching images", index, this.model.image_url(index), this.model.get('story_title').substr(0, 30)]);
|
|
var $img = $("<img>");
|
|
$img.imagesLoaded(function() {
|
|
// console.log(["Loaded", index, $img[0].width, $img.attr('src'), self.model.get('story_title').substr(0, 30)]);
|
|
if ($img[0].width > 60 && $img[0].height > 60) {
|
|
self.$(".NB-storytitles-story-image").css({
|
|
'background-image': "none, url(\'" + $img.attr('src') + "\')",
|
|
'display': 'block'
|
|
});
|
|
} else {
|
|
self.watch_grid_image(index+1);
|
|
}
|
|
}).attr('src', this.model.image_url(index)).each(function() {
|
|
// fail-safe for cached images which sometimes don't trigger "load" events
|
|
if (this.complete) $(this).trigger('load');
|
|
});
|
|
},
|
|
|
|
select_regex: function(query, url) {
|
|
if (url == null) {
|
|
return;
|
|
}
|
|
var results = query.exec(url);
|
|
if (results && results.length) {
|
|
return results[1];
|
|
} else {
|
|
return;
|
|
}
|
|
},
|
|
|
|
load_youtube_embeds: function() {
|
|
var text = this.model.get('story_content');
|
|
var g = /youtube\.com\/embed\/([A-Za-z0-9\-_]+)/gi;
|
|
var f = /youtube\.com\/v\/([A-Za-z0-9\-_]+)/gi;
|
|
var e = /ytimg\.com\/vi\/([A-Za-z0-9\-_]+)/gi;
|
|
var d = /youtube\.com\/watch\?v=([A-Za-z0-9\-_]+)/gi;
|
|
var i = this.select_regex(g, text) ||
|
|
this.select_regex(f, text) ||
|
|
this.select_regex(e, text) ||
|
|
this.select_regex(d, text);
|
|
if (i) {
|
|
// this.$(".NB-storytitles-story-image").css({
|
|
// 'display': 'block',
|
|
// 'background-image': "url("+NEWSBLUR.Globals.MEDIA_URL+"img/reader/youtube_play.png), url(" + "https://img.youtube.com/vi/" + i + "/0.jpg" + ")"
|
|
// });
|
|
return true;
|
|
}
|
|
},
|
|
|
|
toggle_classes: function() {
|
|
var changes = this.model.changedAttributes();
|
|
|
|
if (changes && _.all(_.keys(changes), function(change) {
|
|
return _.contains(['intelligence', 'read_status', 'selected'], change);
|
|
})) return;
|
|
|
|
var story = this.model;
|
|
var unread_view = NEWSBLUR.reader.get_unread_view_score();
|
|
|
|
this.$st.toggleClass('NB-story-starred', !!story.get('starred'));
|
|
this.$st.toggleClass('NB-story-shared', !!story.get('shared'));
|
|
this.toggle_intelligence();
|
|
this.render_intelligence();
|
|
|
|
if (NEWSBLUR.assets.preference('show_tooltips')) {
|
|
this.$('.NB-story-sentiment').tipsy({
|
|
delayIn: 375,
|
|
gravity: 's'
|
|
});
|
|
}
|
|
},
|
|
|
|
toggle_intelligence: function() {
|
|
var score = this.model.score();
|
|
this.$st.removeClass('NB-story-negative NB-story-neutral NB-story-postiive')
|
|
.addClass('NB-story-'+this.model.score_name(score));
|
|
},
|
|
|
|
toggle_read_status: function(model, read_status, options) {
|
|
options = options || {};
|
|
this.$st.toggleClass('read', !!this.model.get('read_status'));
|
|
|
|
if (options.error_marking_unread) {
|
|
var pane_alignment = NEWSBLUR.assets.preference('story_pane_anchor');
|
|
var $star = this.$('.NB-storytitles-sentiment');
|
|
$star.stop().css('opacity', null);
|
|
$star.attr({'title': options.message || 'Failed to mark as unread'});
|
|
$star.tipsy({
|
|
gravity: pane_alignment == 'north' ? 'nw' : 'sw',
|
|
fade: true,
|
|
trigger: 'manual',
|
|
offsetOpposite: -1
|
|
});
|
|
var tipsy = $star.data('tipsy');
|
|
_.defer(function() {
|
|
tipsy.enable();
|
|
tipsy.show();
|
|
_.delay(function() {
|
|
if (tipsy.enabled) {
|
|
tipsy.hide();
|
|
tipsy.disable();
|
|
}
|
|
}, 1800);
|
|
});
|
|
}
|
|
},
|
|
|
|
toggle_selected: function (model, selected, options) {
|
|
var story_layout = this.options.override_layout ||
|
|
NEWSBLUR.assets.view_setting(NEWSBLUR.reader.active_feed, 'layout');
|
|
if (this.options.is_grid) this.render();
|
|
|
|
this.$st.toggleClass('NB-selected', !!this.model.get('selected'));
|
|
this.$el.toggleClass('NB-selected', !!this.model.get('selected'));
|
|
|
|
if (!!this.model.get('selected')) {
|
|
if (_.contains(['list', 'grid'], story_layout)) {
|
|
this.render_inline_story_detail();
|
|
} else if (_.contains(['magazine'], story_layout)) {
|
|
this.render_magazine_story_detail();
|
|
} else {
|
|
this.destroy_inline_story_detail();
|
|
}
|
|
// NEWSBLUR.app.story_titles.scroll_to_selected_story(this.model, options);
|
|
} else {
|
|
this.destroy_inline_story_detail();
|
|
}
|
|
},
|
|
|
|
toggle_starred: function() {
|
|
var story_titles_visible = _.contains(['split', 'full'], this.options.override_layout ||
|
|
NEWSBLUR.assets.view_setting(NEWSBLUR.reader.active_feed, 'layout'));
|
|
var pane_alignment = NEWSBLUR.assets.preference('story_pane_anchor');
|
|
var $star = this.$('.NB-storytitles-star');
|
|
|
|
if (story_titles_visible) {
|
|
NEWSBLUR.app.story_titles.scroll_to_selected_story(this.model);
|
|
}
|
|
|
|
if (this.model.get('starred')) {
|
|
$star.attr({'title': 'Saved!'});
|
|
$star.tipsy({
|
|
gravity: pane_alignment == 'north' ? 'nw' : 'sw',
|
|
fade: true,
|
|
trigger: 'manual',
|
|
offsetOpposite: -1
|
|
});
|
|
var tipsy = $star.data('tipsy');
|
|
_.defer(function() {
|
|
tipsy.enable();
|
|
tipsy.show();
|
|
});
|
|
|
|
$star.animate({
|
|
'opacity': 1
|
|
}, {
|
|
'duration': 850,
|
|
'queue': false,
|
|
'complete': function() {
|
|
if (tipsy.enabled) {
|
|
tipsy.hide();
|
|
tipsy.disable();
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
this.$st.one('mouseout', _.bind(function() {
|
|
this.$st.removeClass('NB-unstarred');
|
|
}, this));
|
|
$star.attr({'title': 'Removed'});
|
|
|
|
$star.tipsy({
|
|
gravity: pane_alignment == 'north' ? 'nw' : 'sw',
|
|
fade: true,
|
|
trigger: 'manual',
|
|
offsetOpposite: -1
|
|
});
|
|
var tipsy = $star.data('tipsy');
|
|
tipsy.enable();
|
|
tipsy.show();
|
|
|
|
_.delay(function() {
|
|
if (tipsy.enabled) {
|
|
tipsy.hide();
|
|
tipsy.disable();
|
|
}
|
|
}, 850);
|
|
|
|
}
|
|
},
|
|
|
|
// ==========
|
|
// = Events =
|
|
// ==========
|
|
|
|
select_story: function(e) {
|
|
if (NEWSBLUR.hotkeys.shift) return;
|
|
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
if (e.which == 1 && $('.NB-menu-manage-container:visible').length) return;
|
|
|
|
if (this.options.on_dashboard) {
|
|
// console.log(['clicked story', this.model]);
|
|
this.options.on_dashboard.open_story(this.model);
|
|
return;
|
|
}
|
|
|
|
if (_.contains(['list', 'grid', 'magazine'], this.options.override_layout ||
|
|
NEWSBLUR.assets.view_setting(NEWSBLUR.reader.active_feed, 'layout')) &&
|
|
this.model.get('selected')) {
|
|
this.collapse_story();
|
|
} else {
|
|
this.model.set('selected', true, {'click_on_story_title': true});
|
|
}
|
|
|
|
if (NEWSBLUR.hotkeys.command) {
|
|
this.model.open_story_in_new_tab(true);
|
|
}
|
|
},
|
|
|
|
select_story_shared: function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
this.model.set('selected', true, {'click_on_story_title': true});
|
|
if (NEWSBLUR.reader.story_view == 'page') {
|
|
NEWSBLUR.reader.switch_taskbar_view('feed', {skip_save_type: 'page'});
|
|
}
|
|
|
|
NEWSBLUR.app.story_list.scroll_to_selected_story(this.model, {
|
|
scroll_to_comments: true,
|
|
scroll_offset: -50
|
|
});
|
|
},
|
|
|
|
show_manage_menu_rightclick: function(e) {
|
|
if (!NEWSBLUR.assets.preference('show_contextmenus')) return;
|
|
|
|
return this.show_manage_menu(e);
|
|
},
|
|
|
|
show_manage_menu: function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
if (this.options.on_dashboard) {
|
|
return this.select_story(e);
|
|
}
|
|
|
|
// NEWSBLUR.log(["showing manage menu", this.model.is_social() ? 'socialfeed' : 'feed', $(this.el), this]);
|
|
NEWSBLUR.reader.show_manage_menu('story', this.$st, {
|
|
story_id: this.model.id,
|
|
feed_id: this.model.get('story_feed_id'),
|
|
rightclick: e.which >= 2
|
|
});
|
|
return false;
|
|
},
|
|
|
|
mouseenter_manage_icon: function() {
|
|
var menu_height = 270;
|
|
// console.log(["mouseenter_manage_icon", this.$el.offset().top, $(window).height(), menu_height]);
|
|
if (this.$el.offset().top > $(window).height() - menu_height) {
|
|
this.$st.addClass('NB-hover-inverse');
|
|
}
|
|
},
|
|
|
|
mouseleave_manage_icon: function() {
|
|
this.$st.removeClass('NB-hover-inverse');
|
|
},
|
|
|
|
open_story_in_story_view: function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
if (this.options.on_dashboard) {
|
|
return this.select_story(e);
|
|
}
|
|
|
|
NEWSBLUR.app.story_tab_view.prepare_story(this.model, true);
|
|
NEWSBLUR.app.story_tab_view.open_story(this.model);
|
|
return false;
|
|
},
|
|
|
|
switch_story_view: function(story, selected, options) {
|
|
// console.log(['switch_story_view title', story, selected, options]);
|
|
if (selected && !options.selected_by_scrolling) {
|
|
var story_view = NEWSBLUR.assets.view_setting(story.get('story_feed_id'), 'view');
|
|
if (story_view != NEWSBLUR.reader.story_view) {
|
|
console.log(['story title, switch story view', NEWSBLUR.reader.story_view]);
|
|
NEWSBLUR.reader.set_correct_story_view_for_feed();
|
|
NEWSBLUR.reader.switch_to_correct_view();
|
|
NEWSBLUR.reader.switch_taskbar_view();
|
|
}
|
|
}
|
|
}
|
|
|
|
});
|