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
|
feeds[sub.feed.pk]['not_yet_fetched'] = True
|
||||||
if sub.feed.has_exception:
|
if sub.feed.has_exception:
|
||||||
feeds[sub.feed.pk]['has_exception'] = True
|
feeds[sub.feed.pk]['has_exception'] = True
|
||||||
|
feeds[sub.feed.pk]['feed_address'] = sub.feed.feed_address
|
||||||
|
|
||||||
if not_yet_fetched:
|
if not_yet_fetched:
|
||||||
for f in feeds:
|
for f in feeds:
|
||||||
|
@ -195,6 +196,7 @@ def refresh_feeds(request):
|
||||||
}
|
}
|
||||||
if sub.feed.has_exception:
|
if sub.feed.has_exception:
|
||||||
feeds[sub.feed.pk]['has_exception'] = True
|
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):
|
if request.POST.get('check_fetch_status', False):
|
||||||
feeds[sub.feed.pk]['not_yet_fetched'] = not sub.feed.fetched_once
|
feeds[sub.feed.pk]['not_yet_fetched'] = not sub.feed.fetched_once
|
||||||
|
|
||||||
|
|
|
@ -3,4 +3,5 @@ from apps.rss_feeds import views
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
url(r'^statistics', views.load_feed_statistics, name='statistics'),
|
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))
|
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;
|
top: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#feed_list .feed.NB-feed-unfetched .feed_counts {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
#feed_list .feed.NB-feed-unfetched .feed_favicon {
|
#feed_list .feed.NB-feed-unfetched .feed_favicon {
|
||||||
opacity: .5;
|
opacity: .5;
|
||||||
}
|
}
|
||||||
|
@ -2622,11 +2625,11 @@ background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.NB-menu-manage .NB-menu-manage-feed .NB-menu-manage-image {
|
.NB-menu-manage .NB-menu-manage-feed .NB-menu-manage-image {
|
||||||
margin-left: 18px;
|
/* margin-left: 18px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.NB-menu-manage .NB-menu-manage-feed {
|
.NB-menu-manage .NB-menu-manage-feed {
|
||||||
padding-left: 54px;
|
/* padding-left: 54px;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ==================== */
|
/* ==================== */
|
||||||
|
@ -2708,4 +2711,28 @@ background: transparent;
|
||||||
color: #606060;
|
color: #606060;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
margin: 24px 0;
|
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;
|
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)) {
|
if (updated && !(f in updated_feeds)) {
|
||||||
updated_feeds.push(f);
|
updated_feeds.push(f);
|
||||||
}
|
}
|
||||||
|
@ -442,8 +447,19 @@ NEWSBLUR.AssetModel.Reader.prototype = {
|
||||||
|
|
||||||
start_import_from_google_reader: function(callback) {
|
start_import_from_google_reader: function(callback) {
|
||||||
this.make_request('/import/import_from_google_reader/', {}, 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];
|
var item = items[i];
|
||||||
|
|
||||||
if (typeof item == "number") {
|
if (typeof item == "number") {
|
||||||
var feed = this.model.feeds[item];
|
var feed = this.model.get_feed(item);
|
||||||
if (!feed) continue;
|
if (!feed) continue;
|
||||||
var $feed = this.make_feed_title_line(feed, true, 'feed');
|
var $feed = this.make_feed_title_line(feed, true, 'feed');
|
||||||
$feeds.append($feed);
|
$feeds.append($feed);
|
||||||
|
@ -641,7 +641,7 @@
|
||||||
]),
|
]),
|
||||||
$.make('img', { className: 'feed_favicon', src: this.google_favicon_url + feed.feed_link }),
|
$.make('img', { className: 'feed_favicon', src: this.google_favicon_url + feed.feed_link }),
|
||||||
$.make('span', { className: 'feed_title' }, feed.feed_title),
|
$.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-statistics', title: 'Statistics' })),
|
||||||
(type == 'story' && $.make('div', { className: 'NB-feedbar-last-updated' }, [
|
(type == 'story' && $.make('div', { className: 'NB-feedbar-last-updated' }, [
|
||||||
$.make('span', { className: 'NB-feedbar-last-updated-label' }, 'Updated: '),
|
$.make('span', { className: 'NB-feedbar-last-updated-label' }, 'Updated: '),
|
||||||
|
@ -1993,7 +1993,7 @@
|
||||||
]),
|
]),
|
||||||
$.make('li', { className: 'NB-menu-manage-trainer' }, [
|
$.make('li', { className: 'NB-menu-manage-trainer' }, [
|
||||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
$.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('div', { className: 'NB-menu-manage-subtitle' }, 'Accurate filters are happy filters.')
|
||||||
]),
|
]),
|
||||||
$.make('li', { className: 'NB-menu-manage-preferences' }, [
|
$.make('li', { className: 'NB-menu-manage-preferences' }, [
|
||||||
|
@ -2016,16 +2016,16 @@
|
||||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Really delete?')
|
$.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('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-train' }, [
|
||||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
$.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('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('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-stats' }, [
|
||||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Site statistics'),
|
$.make('div', { className: 'NB-menu-manage-title' }, 'Site statistics'),
|
||||||
|
@ -2337,7 +2337,7 @@
|
||||||
delete this.cache.refresh_callback;
|
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) {
|
post_feed_refresh: function(e, updated_feeds) {
|
||||||
|
|
|
@ -13,6 +13,7 @@ NEWSBLUR.ReaderFeedException.prototype = {
|
||||||
|
|
||||||
runner: function() {
|
runner: function() {
|
||||||
this.make_modal();
|
this.make_modal();
|
||||||
|
this.change_retry_option_meta();
|
||||||
this.handle_cancel();
|
this.handle_cancel();
|
||||||
this.open_modal();
|
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('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('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('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-retry NB-modal-submit' }, [
|
||||||
$.make('form', { className: 'NB-exception-form' }, [
|
$.make('h5', [
|
||||||
$.make('div', { className: 'NB-modal-submit' }, [
|
$.make('div', { className: 'NB-exception-option-meta' }),
|
||||||
$.make('input', { type: 'submit', disabled: 'true', className: 'NB-disabled', value: 'Fill out proposed changes...' }),
|
$.make('span', { className: 'NB-exception-option-option' }, 'Option 1:'),
|
||||||
' or ',
|
'Retry'
|
||||||
$.make('a', { href: '#', className: 'NB-modal-cancel' }, 'cancel')
|
]),
|
||||||
|
$.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();
|
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-address NB-modal-submit' }, [
|
||||||
self.save_preferences();
|
$.make('h5', [
|
||||||
return false;
|
$.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() {
|
open_modal: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
@ -79,6 +138,26 @@ NEWSBLUR.ReaderFeedException.prototype = {
|
||||||
$.modal.close();
|
$.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 =
|
// = Actions =
|
||||||
|
@ -86,11 +165,16 @@ NEWSBLUR.ReaderFeedException.prototype = {
|
||||||
|
|
||||||
handle_click: function(elem, e) {
|
handle_click: function(elem, e) {
|
||||||
var self = this;
|
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();
|
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