Adding manage feed modal.

This commit is contained in:
Samuel Clay 2010-03-15 00:52:06 -04:00
parent c072b01355
commit e966cd1ff8
7 changed files with 200 additions and 8 deletions

View file

@ -628,6 +628,7 @@ background: transparent;
#story_pane .NB-feed-stories .NB-feed-story {
padding: 3px 0 0 0;
margin: 0;
clear: both;
}
#story_pane .NB-feed-stories.NB-feed-view-story .NB-feed-story {
@ -747,10 +748,16 @@ background: transparent;
color: #405090;
}
.NB-taskbar .task_button {
cursor: pointer;
}
.NB-taskbar .task_button.task_add {
.NB-taskbar .task_button.NB-task-add {
background: transparent url('../img/icons/silk/add.png') no-repeat center 8px;
}
.NB-taskbar .task_button.NB-task-manage {
background: transparent url('../img/icons/silk/wrench.png') no-repeat center 8px;
}
.NB-taskbar .task_button.task_profile {
background: transparent url('../img/icons/silk/user.png') no-repeat center 8px;
}
@ -817,8 +824,8 @@ background: transparent;
.NB-taskbar .task_button_view.NB-active {
background-color: #A0A7B1;
}
.NB-taskbar .task_button_view.NB-inactive {
opacity: .15;
.NB-taskbar .NB-inactive {
opacity: .3;
}
.NB-taskbar .task_button.task_return {
@ -847,6 +854,8 @@ background: transparent;
width: 500px;
background-color: white;
padding: 8px;
-moz-box-shadow: 3px 3px 5px #505050;
-webkit-box-shadow: 3px 3px 5px #505050;
}
/* ==================== */
@ -1007,6 +1016,8 @@ form.opml_import_form input {
.NB-modal .NB-modal-title {
font-weight: bold;
color: #303030;
text-shadow: 1px 1px 0px #e0e0e0;
}
.NB-disabled {
@ -1138,4 +1149,25 @@ form.opml_import_form input {
}
.NB-intelligence-slider {
}
/* ================ */
/* = Manage Feeds = */
/* ================ */
.NB-manage .NB-manage-feed-chooser-container {
float: right;
width: 300px;
}
.NB-manage .NB-manage-feed-chooser-container .NB-manage-feed-chooser-previous {
float: left;
}
.NB-manage .NB-manage-feed-chooser-container .NB-manage-feed-chooser-next {
float: right;
}
.NB-manage .NB-manage-feed-chooser-container .NB-manage-feed-chooser {
width: 250px;
}

View file

@ -207,12 +207,24 @@ NEWSBLUR.AssetModel.Reader.prototype = {
);
},
get_feed: function(feed_id, callback) {
get_feed: function(feed_id) {
var self = this;
return this.feeds[feed_id];
},
get_feeds: function() {
var self = this;
return this.feeds;
},
get_folders: function() {
var self = this;
return this.folders;
},
get_feed_tags: function() {
return this.feed_tags;
},

View file

@ -457,6 +457,7 @@
this.hide_splash_page();
this.$story_titles.data('page', 0);
this.$story_titles.data('feed_id', feed_id);
$('.NB-task-manage').removeClass('NB-inactive');
this.show_feed_title_in_stories($story_titles, feed_id);
this.mark_feed_as_selected(feed_id, $feed_link);
@ -1328,7 +1329,13 @@
$.targetIs(e, { tagSelector: '.NB-task-add' }, function($t, $p){
e.preventDefault();
self.open_add_modal();
self.open_add_feed_modal();
});
$.targetIs(e, { tagSelector: '.NB-task-manage' }, function($t, $p){
e.preventDefault();
if (!$t.hasClass('NB-inactive')) {
self.open_manage_feed_modal();
}
});
$.targetIs(e, { tagSelector: '.task_button_view' }, function($t, $p){
e.preventDefault();
@ -1438,12 +1445,18 @@
// = Bottom Task Bar =
// ===================
open_add_modal: function() {
open_add_feed_modal: function() {
var feed_id = this.active_feed;
NEWSBLUR.add_feed = new NEWSBLUR.ReaderAddFeed();
},
open_manage_feed_modal: function() {
var feed_id = this.active_feed;
NEWSBLUR.manage_feed = new NEWSBLUR.ReaderManageFeed(feed_id);
},
// ================
// = Intelligence =
// ================

View file

@ -157,6 +157,6 @@ NEWSBLUR.ReaderAddFeed.prototype = {
self.model.process_opml_import($form.serialize(), callback);
return false;
});
},
}
};

View file

@ -0,0 +1,133 @@
NEWSBLUR.ReaderManageFeed = function(feed_id, options) {
var defaults = {};
this.options = $.extend({}, defaults, options);
this.model = NEWSBLUR.AssetModel.reader();
this.feed_id = feed_id;
this.feed = this.model.get_feed(feed_id);
this.feeds = this.model.get_feeds();
this.google_favicon_url = 'http://www.google.com/s2/favicons?domain_url=';
this.runner();
};
NEWSBLUR.ReaderManageFeed.prototype = {
runner: function() {
this.make_modal();
this.handle_cancel();
this.open_modal();
},
make_modal: function() {
var self = this;
this.$manage = $.make('div', { className: 'NB-manage NB-modal' }, [
$.make('div', { className: 'NB-manage-feed-chooser-container'}, [
$.make('a', { href: '#', className: 'NB-manage-feed-chooser-next' }, '»'),
$.make('a', { href: '#', className: 'NB-manage-feed-chooser-previous' }, '«'),
this.make_feed_chooser()
]),
$.make('h2', { className: 'NB-modal-title' }, this.feed['feed_title']),
$.make('form', { method: 'post', className: 'NB-manage-form' }, [
$.make('div', { className: 'NB-manage-field' }, [
$.make('h5', [
'What you ',
$.make('span', { className: 'NB-classifier-like' }, 'like')
]),
$.make('h5', [
'What you ',
$.make('span', { className: 'NB-classifier-like' }, 'dislike')
]),
$.make('h5', 'Management')
]),
$.make('div', { className: 'NB-modal-submit' }, [
$.make('input', { name: 'feed_id', value: this.feed_id, type: 'hidden' }),
$.make('input', { type: 'submit', disabled: 'true', className: 'NB-disabled', value: 'Check what you like above...' }),
' or ',
$.make('a', { href: '#', className: 'NB-modal-cancel' }, 'cancel')
])
]).bind('submit', function(e) {
e.preventDefault();
self.save();
return false;
})
]);
},
make_feed_chooser: function() {
var $chooser = $.make('select', { name: 'feed', className: 'NB-manage-feed-chooser' });
for (var f in this.feeds) {
var feed = this.feeds[f];
var $option = $.make('option', { value: feed.id }, feed.feed_title);
$option.appendTo($chooser);
if (feed.id == this.feed_id) {
$option.attr('selected', true);
}
}
$('option', $chooser).tsort();
return $chooser;
},
open_modal: function() {
var self = this;
var $holder = $.make('div', { className: 'NB-modal-holder' }).append(this.$manage).appendTo('body').css({'visibility': 'hidden', 'display': 'block', 'width': 600});
var height = $('.NB-manage', $holder).outerHeight(true);
$holder.css({'visibility': 'visible', 'display': 'none'});
this.$manage.modal({
'minWidth': 600,
'minHeight': height,
'overlayClose': true,
'onOpen': function (dialog) {
dialog.overlay.fadeIn(200, function () {
dialog.container.fadeIn(200);
dialog.data.fadeIn(200);
});
},
'onShow': function(dialog) {
$('#simplemodal-container').corners('6px').css({'width': 600, 'height': height});
// $('.NB-classifier-tag', self.$manage).corners('4px');
},
'onClose': function(dialog) {
dialog.data.hide().empty().remove();
dialog.container.hide().empty().remove();
dialog.overlay.fadeOut(200, function() {
dialog.overlay.empty().remove();
$.modal.close();
});
$('.NB-modal-holder').empty().remove();
}
});
},
handle_cancel: function() {
var $cancel = $('.NB-modal-cancel', this.$manage);
$cancel.click(function(e) {
e.preventDefault();
$.modal.close();
});
},
serialize_classifier: function() {
var data = $('.NB-manage form input').serialize();
return data;
},
save: function() {
var $save = $('.NB-modal input[type=submit]');
var data = this.serialize_classifier();
$save.text('Saving...').addClass('NB-disabled').attr('disabled', true);
this.model.save_classifier_publisher(data, function() {
$.modal.close();
});
}
};

View file

@ -180,6 +180,7 @@ COMPRESS_JS = {
'js/newsblur/reader.js',
'js/newsblur/reader_classifier.js',
'js/newsblur/reader_add_feed.js',
'js/newsblur/reader_manage_feed.js',
),
'output_filename': 'release/all-compressed-?.js'
}

View file

@ -7,7 +7,8 @@
<div class="NB-taskbar left-south">
<ul class="taskbar_nav taskbar_nav_feeds">
<li class="task_button task_button_menu task_add NB-task-add">
<li class="task_button task_button_menu NB-task-add">
<li class="task_button task_button_menu NB-task-manage NB-inactive">
</li>
</ul>
<div class="NB-taskbar-intelligence">