mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-05 16:58:59 +00:00
Exception modal now has delete and retry options that work. Change feed link/address are still in the works, but they show up. (Buttons don't do anything yet.)
This commit is contained in:
parent
389157e2f0
commit
e01bb9eb74
7 changed files with 169 additions and 28 deletions
|
@ -117,6 +117,7 @@ def load_feeds(request):
|
|||
feeds[sub.feed.pk]['not_yet_fetched'] = True
|
||||
if sub.feed.has_exception:
|
||||
feeds[sub.feed.pk]['has_exception'] = True
|
||||
feeds[sub.feed.pk]['feed_address'] = sub.feed.feed_address
|
||||
|
||||
if not_yet_fetched:
|
||||
for f in feeds:
|
||||
|
@ -195,6 +196,7 @@ def refresh_feeds(request):
|
|||
}
|
||||
if sub.feed.has_exception:
|
||||
feeds[sub.feed.pk]['has_exception'] = True
|
||||
feeds[sub.feed.pk]['feed_address'] = sub.feed.feed_address
|
||||
if request.POST.get('check_fetch_status', False):
|
||||
feeds[sub.feed.pk]['not_yet_fetched'] = not sub.feed.fetched_once
|
||||
|
||||
|
|
|
@ -3,4 +3,5 @@ from apps.rss_feeds import views
|
|||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^statistics', views.load_feed_statistics, name='statistics'),
|
||||
url(r'^exception_retry', views.exception_retry, name='exception-retry'),
|
||||
)
|
||||
|
|
|
@ -28,4 +28,15 @@ def load_feed_statistics(request):
|
|||
|
||||
logging.info(" ---> [%s] Statistics: %s" % (request.user, feed))
|
||||
|
||||
return stats
|
||||
return stats
|
||||
|
||||
@json.json_view
|
||||
def exception_retry(request):
|
||||
feed_id = request.POST['feed_id']
|
||||
feed = get_object_or_404(Feed, pk=feed_id)
|
||||
|
||||
feed.has_exception = False
|
||||
feed.fetched_once = False
|
||||
feed.save()
|
||||
|
||||
return {'code': 1}
|
|
@ -406,6 +406,9 @@ a img {
|
|||
top: 2px;
|
||||
}
|
||||
|
||||
#feed_list .feed.NB-feed-unfetched .feed_counts {
|
||||
display: none;
|
||||
}
|
||||
#feed_list .feed.NB-feed-unfetched .feed_favicon {
|
||||
opacity: .5;
|
||||
}
|
||||
|
@ -2622,11 +2625,11 @@ background: transparent;
|
|||
}
|
||||
|
||||
.NB-menu-manage .NB-menu-manage-feed .NB-menu-manage-image {
|
||||
margin-left: 18px;
|
||||
/* margin-left: 18px; */
|
||||
}
|
||||
|
||||
.NB-menu-manage .NB-menu-manage-feed {
|
||||
padding-left: 54px;
|
||||
/* padding-left: 54px;*/
|
||||
}
|
||||
|
||||
/* ==================== */
|
||||
|
@ -2708,4 +2711,28 @@ background: transparent;
|
|||
color: #606060;
|
||||
font-size: 12px;
|
||||
margin: 24px 0;
|
||||
}
|
||||
|
||||
.NB-modal-exception .NB-exception-option-option {
|
||||
color: #A0A0A0;
|
||||
padding: 0 8px 0 0;
|
||||
}
|
||||
|
||||
.NB-modal-exception .NB-exception-option-meta {
|
||||
float: right;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
padding: 2px 0 0 0;
|
||||
}
|
||||
|
||||
.NB-modal-exception .NB-exception-option-meta-recommended {
|
||||
color: #4A9937;
|
||||
}
|
||||
|
||||
.NB-modal-exception .NB-exception-option-address {
|
||||
opacity: .2;
|
||||
}
|
||||
|
||||
.NB-modal-exception .NB-modal-submit input.NB-modal-submit-save {
|
||||
margin-bottom: 6px;
|
||||
}
|
|
@ -229,6 +229,11 @@ NEWSBLUR.AssetModel.Reader.prototype = {
|
|||
updated = true;
|
||||
}
|
||||
}
|
||||
if ((feed['has_exception'] && !self.feeds[f]['has_exception']) ||
|
||||
(self.feeds[f]['has_exception'] && !feed['has_exception'])) {
|
||||
updated = true;
|
||||
self.feeds[f]['has_exception'] = !!feed['has_exception'];
|
||||
}
|
||||
if (updated && !(f in updated_feeds)) {
|
||||
updated_feeds.push(f);
|
||||
}
|
||||
|
@ -442,8 +447,19 @@ NEWSBLUR.AssetModel.Reader.prototype = {
|
|||
|
||||
start_import_from_google_reader: function(callback) {
|
||||
this.make_request('/import/import_from_google_reader/', {}, callback);
|
||||
},
|
||||
|
||||
save_exception_retry: function(feed_id, callback) {
|
||||
var self = this;
|
||||
if (NEWSBLUR.Globals.is_authenticated) {
|
||||
this.make_request('/rss_feeds/exception_retry', {'feed_id': feed_id}, function() {
|
||||
if ($.isFunction(callback)) callback();
|
||||
});
|
||||
} else {
|
||||
if ($.isFunction(callback)) callback();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -562,7 +562,7 @@
|
|||
var item = items[i];
|
||||
|
||||
if (typeof item == "number") {
|
||||
var feed = this.model.feeds[item];
|
||||
var feed = this.model.get_feed(item);
|
||||
if (!feed) continue;
|
||||
var $feed = this.make_feed_title_line(feed, true, 'feed');
|
||||
$feeds.append($feed);
|
||||
|
@ -641,7 +641,7 @@
|
|||
]),
|
||||
$.make('img', { className: 'feed_favicon', src: this.google_favicon_url + feed.feed_link }),
|
||||
$.make('span', { className: 'feed_title' }, feed.feed_title),
|
||||
$.make('div', { className: 'NB-feedbar-manage-feed', title: 'Manage Opinions' }),
|
||||
$.make('div', { className: 'NB-feedbar-manage-feed', title: 'Manage Intelligence' }),
|
||||
(type == 'story' && $.make('div', { className: 'NB-feedbar-statistics', title: 'Statistics' })),
|
||||
(type == 'story' && $.make('div', { className: 'NB-feedbar-last-updated' }, [
|
||||
$.make('span', { className: 'NB-feedbar-last-updated-label' }, 'Updated: '),
|
||||
|
@ -1993,7 +1993,7 @@
|
|||
]),
|
||||
$.make('li', { className: 'NB-menu-manage-trainer' }, [
|
||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Train intelligence'),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Intelligence Trainer'),
|
||||
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'Accurate filters are happy filters.')
|
||||
]),
|
||||
$.make('li', { className: 'NB-menu-manage-preferences' }, [
|
||||
|
@ -2016,16 +2016,16 @@
|
|||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Really delete?')
|
||||
]),
|
||||
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-manage' }, [
|
||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Manage opinions'),
|
||||
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'What you like and don\'t like.')
|
||||
]),
|
||||
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-train' }, [
|
||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Train intelligence'),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Site intelligence trainer'),
|
||||
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'Choose classifiers for this site.')
|
||||
]),
|
||||
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-manage' }, [
|
||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Site intelligence manager'),
|
||||
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'What you like and don\'t like.')
|
||||
]),
|
||||
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-stats' }, [
|
||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Site statistics'),
|
||||
|
@ -2337,7 +2337,7 @@
|
|||
delete this.cache.refresh_callback;
|
||||
}
|
||||
|
||||
this.model.refresh_feeds($.rescope(this.post_feed_refresh, this));
|
||||
this.model.refresh_feeds($.rescope(this.post_feed_refresh, this), this.flags['has_unfetched_feeds']);
|
||||
},
|
||||
|
||||
post_feed_refresh: function(e, updated_feeds) {
|
||||
|
|
|
@ -13,6 +13,7 @@ NEWSBLUR.ReaderFeedException.prototype = {
|
|||
|
||||
runner: function() {
|
||||
this.make_modal();
|
||||
this.change_retry_option_meta();
|
||||
this.handle_cancel();
|
||||
this.open_modal();
|
||||
|
||||
|
@ -28,21 +29,79 @@ NEWSBLUR.ReaderFeedException.prototype = {
|
|||
$.make('img', { className: 'NB-modal-feed-image feed_favicon', src: this.google_favicon_url + this.feed.feed_link }),
|
||||
$.make('span', { className: 'NB-modal-feed-title' }, this.feed.feed_title)
|
||||
]),
|
||||
$.make('div', { className: 'NB-exception-explanation' }, 'Not much to do yet. Soon you will be able to fix the URL, delete the feed, or force a retry.'),
|
||||
$.make('form', { className: 'NB-exception-form' }, [
|
||||
$.make('div', { className: 'NB-modal-submit' }, [
|
||||
$.make('input', { type: 'submit', disabled: 'true', className: 'NB-disabled', value: 'Fill out proposed changes...' }),
|
||||
' or ',
|
||||
$.make('a', { href: '#', className: 'NB-modal-cancel' }, 'cancel')
|
||||
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-retry NB-modal-submit' }, [
|
||||
$.make('h5', [
|
||||
$.make('div', { className: 'NB-exception-option-meta' }),
|
||||
$.make('span', { className: 'NB-exception-option-option' }, 'Option 1:'),
|
||||
'Retry'
|
||||
]),
|
||||
$.make('div', { className: 'NB-fieldset-fields' }, [
|
||||
$.make('div', [
|
||||
$.make('div', { className: 'NB-loading' }),
|
||||
$.make('input', { type: 'submit', value: 'Retry fetching and parsing', className: 'NB-modal-submit-save NB-modal-submit-retry' }),
|
||||
$.make('div', { className: 'NB-error' })
|
||||
])
|
||||
])
|
||||
]).bind('submit', function(e) {
|
||||
e.preventDefault();
|
||||
self.save_preferences();
|
||||
return false;
|
||||
})
|
||||
]),
|
||||
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-address NB-modal-submit' }, [
|
||||
$.make('h5', [
|
||||
$.make('span', { className: 'NB-exception-option-option' }, 'Option 2:'),
|
||||
'Change Website Address'
|
||||
]),
|
||||
$.make('div', { className: 'NB-fieldset-fields' }, [
|
||||
$.make('div', [
|
||||
$.make('div', { className: 'NB-loading' }),
|
||||
$.make('label', { 'for': 'NB-exception-input-link' }, [
|
||||
$.make('div', { className: 'NB-folder-icon' }),
|
||||
'Website URL: '
|
||||
]),
|
||||
$.make('input', { type: 'text', id: 'NB-exception-input-link', className: 'NB-exception-input-link', name: 'feed_link', value: this.feed['feed_link'] }),
|
||||
$.make('input', { type: 'submit', value: 'Fetch Feed From Website', className: 'NB-modal-submit-save NB-modal-submit-fetch' }),
|
||||
$.make('div', { className: 'NB-error' })
|
||||
])
|
||||
])
|
||||
]),
|
||||
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-address NB-modal-submit' }, [
|
||||
$.make('h5', [
|
||||
$.make('span', { className: 'NB-exception-option-option' }, 'Option 2:'),
|
||||
'Change RSS Feed Address'
|
||||
]),
|
||||
$.make('div', { className: 'NB-fieldset-fields' }, [
|
||||
$.make('div', [
|
||||
$.make('div', { className: 'NB-loading' }),
|
||||
$.make('label', { 'for': 'NB-exception-input-address' }, [
|
||||
$.make('div', { className: 'NB-folder-icon' }),
|
||||
'RSS/XML URL: '
|
||||
]),
|
||||
$.make('input', { type: 'text', id: 'NB-exception-input-address', className: 'NB-exception-input-address', name: 'feed_address', value: this.feed['feed_address'] }),
|
||||
$.make('input', { type: 'submit', value: 'Parse this RSS/XML Feed', className: 'NB-modal-submit-save NB-modal-submit-parse' }),
|
||||
$.make('div', { className: 'NB-error' })
|
||||
])
|
||||
])
|
||||
]),
|
||||
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-delete NB-modal-submit' }, [
|
||||
$.make('h5', [
|
||||
$.make('span', { className: 'NB-exception-option-option' }, 'Option 3:'),
|
||||
'Just Delete This Feed'
|
||||
]),
|
||||
$.make('div', { className: 'NB-fieldset-fields' }, [
|
||||
$.make('div', [
|
||||
$.make('div', { className: 'NB-loading' }),
|
||||
$.make('input', { type: 'submit', value: 'Delete It. It Just Won\'t Work!', className: 'NB-modal-submit-save NB-modal-submit-delete' }),
|
||||
$.make('div', { className: 'NB-error' })
|
||||
])
|
||||
])
|
||||
])
|
||||
]);
|
||||
},
|
||||
|
||||
change_retry_option_meta: function() {
|
||||
var $meta = $('.NB-exception-option-retry .NB-exception-option-meta', this.$modal);
|
||||
|
||||
$meta.addClass('NB-exception-option-meta-recommended');
|
||||
$meta.text('Recommended');
|
||||
},
|
||||
|
||||
open_modal: function() {
|
||||
var self = this;
|
||||
|
||||
|
@ -79,6 +138,26 @@ NEWSBLUR.ReaderFeedException.prototype = {
|
|||
$.modal.close();
|
||||
});
|
||||
},
|
||||
|
||||
save_retry_feed: function() {
|
||||
var self = this;
|
||||
this.model.save_exception_retry(this.feed_id, function() {
|
||||
NEWSBLUR.reader.flags['has_unfetched_feeds'] = true;
|
||||
NEWSBLUR.reader.force_feed_refresh();
|
||||
$.modal.close();
|
||||
});
|
||||
},
|
||||
|
||||
delete_feed: function() {
|
||||
var $loading = $('.NB-modal-loading', this.$model);
|
||||
$loading.addClass('NB-active');
|
||||
var feed_id = this.feed_id;
|
||||
|
||||
this.model.delete_publisher(feed_id, function() {
|
||||
NEWSBLUR.reader.delete_feed(feed_id);
|
||||
$.modal.close();
|
||||
});
|
||||
},
|
||||
|
||||
// ===========
|
||||
// = Actions =
|
||||
|
@ -86,11 +165,16 @@ NEWSBLUR.ReaderFeedException.prototype = {
|
|||
|
||||
handle_click: function(elem, e) {
|
||||
var self = this;
|
||||
|
||||
$.targetIs(e, { tagSelector: '.NB-add-url-submit' }, function($t, $p) {
|
||||
|
||||
$.targetIs(e, { tagSelector: '.NB-modal-submit-retry' }, function($t, $p) {
|
||||
e.preventDefault();
|
||||
|
||||
self.save_add_url();
|
||||
self.save_retry_feed();
|
||||
});
|
||||
$.targetIs(e, { tagSelector: '.NB-modal-submit-delete' }, function($t, $p) {
|
||||
e.preventDefault();
|
||||
|
||||
self.delete_feed();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue