2014-07-07 13:22:56 -04:00
|
|
|
NEWSBLUR.ReaderOrganizer = function(user_id, options) {
|
|
|
|
var defaults = {
|
2014-07-18 15:59:51 -07:00
|
|
|
width: 800,
|
2014-08-04 20:03:50 -07:00
|
|
|
sorting: 'alphabetical',
|
2014-07-18 15:59:51 -07:00
|
|
|
onOpen: _.bind(function() {
|
|
|
|
this.resize_modal();
|
|
|
|
}, this)
|
2014-07-07 13:22:56 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
this.options = $.extend({}, defaults, options);
|
|
|
|
this.model = NEWSBLUR.assets;
|
|
|
|
this.init();
|
|
|
|
};
|
|
|
|
|
|
|
|
NEWSBLUR.ReaderOrganizer.prototype = new NEWSBLUR.Modal;
|
|
|
|
|
|
|
|
_.extend(NEWSBLUR.ReaderOrganizer.prototype, {
|
|
|
|
|
|
|
|
init: function() {
|
2014-10-09 20:58:03 -07:00
|
|
|
NEWSBLUR.assets.feeds.each(function(feed) {
|
|
|
|
feed.highlight_in_all_folders(false, true, {silent: true});
|
|
|
|
});
|
|
|
|
|
2014-07-07 13:22:56 -04:00
|
|
|
this.make_modal();
|
|
|
|
this.open_modal();
|
|
|
|
|
|
|
|
this.$modal.bind('click', $.rescope(this.handle_click, this));
|
|
|
|
},
|
|
|
|
|
|
|
|
make_modal: function() {
|
|
|
|
var self = this;
|
|
|
|
|
|
|
|
this.$modal = $.make('div', { className: 'NB-modal NB-modal-organizer' }, [
|
|
|
|
$.make('h2', { className: 'NB-modal-title' }, [
|
|
|
|
$.make('div', { className: 'NB-modal-loading' }),
|
|
|
|
$.make('div', { className: 'NB-icon' }),
|
2014-08-12 18:09:58 -07:00
|
|
|
'Organize sites',
|
|
|
|
$.make('div', { className: 'NB-icon-dropdown' })
|
|
|
|
]),
|
|
|
|
$.make('div', { className: 'NB-organizer-sidebar'}, [
|
|
|
|
$.make('div', { className: 'NB-organizer-sidebar-move' }, [
|
|
|
|
$.make('div', { className: 'NB-organizer-sidebar-title' }, 'Move to folder'),
|
|
|
|
$.make('div', { className: 'NB-organizer-sidebar-container' }, [
|
|
|
|
NEWSBLUR.utils.make_folders(),
|
|
|
|
$.make('div', { className: 'NB-icon-add', title: "Add folder" }),
|
|
|
|
$.make('div', { className: "NB-add-folder NB-hidden" }, [
|
2014-08-12 18:27:38 -07:00
|
|
|
$.make('div', { className: 'NB-icon-subfolder' }),
|
2014-08-12 18:09:58 -07:00
|
|
|
$.make('input', { type: 'text', id: 'NB-add-folder', className: 'NB-input NB-add-folder-input', name: 'new_folder_name', placeholder: "New folder name..." })
|
2014-08-12 18:27:38 -07:00
|
|
|
]),
|
|
|
|
$.make('div', { className: 'NB-modal-submit-button NB-modal-submit-green NB-disabled NB-action-move' }, 'Move'),
|
|
|
|
$.make('div', { className: 'NB-loading' })
|
2014-08-12 18:09:58 -07:00
|
|
|
])
|
|
|
|
]),
|
|
|
|
$.make('div', { className: 'NB-organizer-sidebar-delete' }, [
|
|
|
|
$.make('div', { className: 'NB-organizer-sidebar-title' }, 'Delete sites'),
|
|
|
|
$.make('div', { className: 'NB-organizer-sidebar-container' }, [
|
|
|
|
$.make('div', { className: 'NB-modal-submit-button NB-modal-submit-red NB-disabled NB-action-delete' }, 'Delete'),
|
|
|
|
$.make('div', { className: 'NB-loading' })
|
|
|
|
])
|
|
|
|
])
|
2014-07-07 13:22:56 -04:00
|
|
|
]),
|
2014-08-04 20:03:50 -07:00
|
|
|
$.make('div', { className: 'NB-organizer-actionbar' }, [
|
|
|
|
$.make('div', { className: 'NB-organizer-sorts' }, [
|
|
|
|
$.make('div', { className: 'NB-organizer-action-title' }, 'Sort '),
|
|
|
|
$.make('div', { className: 'NB-organizer-action NB-action-alphabetical NB-active' }, 'Name'),
|
2014-08-12 18:09:58 -07:00
|
|
|
$.make('div', { className: 'NB-organizer-action NB-action-subscribers' }, 'Subscribers'),
|
2014-08-04 20:03:50 -07:00
|
|
|
$.make('div', { className: 'NB-organizer-action NB-action-frequency' }, 'Frequency'),
|
|
|
|
$.make('div', { className: 'NB-organizer-action NB-action-recency' }, 'Recency'),
|
|
|
|
$.make('div', { className: 'NB-organizer-action NB-action-mostused' }, 'Use')
|
|
|
|
]),
|
|
|
|
$.make('div', { className: 'NB-organizer-selects' }, [
|
|
|
|
$.make('div', { className: 'NB-organizer-action-title' }, 'Select'),
|
2014-08-11 15:40:33 -07:00
|
|
|
$.make('div', { className: 'NB-organizer-action NB-action-select-all' }, 'All'),
|
|
|
|
$.make('div', { className: 'NB-organizer-action NB-action-select-none' }, 'None')
|
2014-08-04 20:03:50 -07:00
|
|
|
])
|
|
|
|
]),
|
2014-07-07 13:22:56 -04:00
|
|
|
this.make_feeds()
|
|
|
|
]);
|
|
|
|
},
|
|
|
|
|
2014-07-18 15:59:51 -07:00
|
|
|
resize_modal: function(previous_height) {
|
2014-08-04 20:03:50 -07:00
|
|
|
var resize_height = 0;
|
2014-07-18 15:59:51 -07:00
|
|
|
var $feedlist = $('.NB-feedchooser', this.$modal);
|
2014-08-04 20:03:50 -07:00
|
|
|
var content_height = $feedlist.height() + 90;
|
2014-07-18 15:59:51 -07:00
|
|
|
var container_height = this.$modal.parent().height();
|
|
|
|
if (content_height > container_height && previous_height != content_height) {
|
|
|
|
var chooser_height = $feedlist.height();
|
|
|
|
var diff = Math.max(4, content_height - container_height);
|
2014-08-04 20:03:50 -07:00
|
|
|
resize_height = chooser_height - diff;
|
|
|
|
$feedlist.css({'max-height': resize_height});
|
2014-07-18 15:59:51 -07:00
|
|
|
_.defer(_.bind(function() { this.resize_modal(content_height); }, this), 1);
|
|
|
|
}
|
2014-08-04 20:03:50 -07:00
|
|
|
if (resize_height) {
|
|
|
|
this.options.resize = resize_height;
|
|
|
|
}
|
2014-07-18 15:59:51 -07:00
|
|
|
},
|
|
|
|
|
2014-07-07 13:22:56 -04:00
|
|
|
// =============
|
|
|
|
// = Feed list =
|
|
|
|
// =============
|
|
|
|
|
2014-08-04 20:03:50 -07:00
|
|
|
make_feeds: function(options) {
|
2014-07-07 13:22:56 -04:00
|
|
|
var feeds = this.model.feeds;
|
|
|
|
this.feed_count = _.unique(NEWSBLUR.assets.folders.feed_ids_in_folder()).length;
|
2014-08-04 20:03:50 -07:00
|
|
|
NEWSBLUR.Collections.Folders.organizer_sortorder = this.options.sorting;
|
|
|
|
NEWSBLUR.assets.folders.sort();
|
2014-08-11 17:41:23 -07:00
|
|
|
|
2014-08-04 20:03:50 -07:00
|
|
|
this.feedlist = new NEWSBLUR.Views.FeedList({
|
2014-07-23 17:49:23 -07:00
|
|
|
feed_chooser: true,
|
2014-08-04 20:03:50 -07:00
|
|
|
organizer: true,
|
|
|
|
sorting: this.options.sorting
|
|
|
|
}).make_feeds();
|
|
|
|
var $feeds = this.feedlist.$el;
|
|
|
|
if (this.options.resize) {
|
|
|
|
$feeds.css({'max-height': this.options.resize});
|
|
|
|
}
|
2014-07-07 13:22:56 -04:00
|
|
|
if ($feeds.data('sortable')) $feeds.data('sortable').disable();
|
|
|
|
|
|
|
|
// Expand collapsed folders
|
|
|
|
$('.NB-folder-collapsed', $feeds).css({
|
|
|
|
'display': 'block',
|
|
|
|
'opacity': 1
|
|
|
|
}).removeClass('NB-folder-collapsed');
|
|
|
|
|
|
|
|
// Pretend unfetched feeds are fine
|
|
|
|
$('.NB-feed-unfetched', $feeds).removeClass('NB-feed-unfetched');
|
|
|
|
|
|
|
|
// Make sure all folders are visible
|
|
|
|
$('.NB-folder.NB-hidden', $feeds).removeClass('NB-hidden');
|
2014-08-04 20:03:50 -07:00
|
|
|
|
|
|
|
NEWSBLUR.Collections.Folders.organizer_sortorder = null;
|
|
|
|
NEWSBLUR.assets.folders.sort();
|
2014-10-09 20:58:03 -07:00
|
|
|
|
2014-08-11 15:40:33 -07:00
|
|
|
NEWSBLUR.assets.feeds.off('change:highlighted')
|
|
|
|
.on('change:highlighted', _.bind(this.change_selection, this));
|
|
|
|
|
2014-07-07 13:22:56 -04:00
|
|
|
return $feeds;
|
|
|
|
},
|
2014-07-23 17:49:23 -07:00
|
|
|
|
|
|
|
// =============
|
|
|
|
// = Selecting =
|
|
|
|
// =============
|
|
|
|
|
2014-08-11 15:40:33 -07:00
|
|
|
change_select: function(select) {
|
|
|
|
if (select == "all") {
|
|
|
|
this.feedlist.folder_view.highlight_feeds({force_highlight: true});
|
|
|
|
} else if (select == "none") {
|
|
|
|
this.feedlist.folder_view.highlight_feeds({force_deselect: true});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
change_selection: function() {
|
|
|
|
var $title = $(".NB-organizer-selects .NB-organizer-action-title", this.$modal);
|
2014-08-12 18:27:38 -07:00
|
|
|
var $move = $(".NB-action-move", this.$modal);
|
|
|
|
var $delete = $(".NB-action-delete", this.$modal);
|
2014-10-09 20:58:03 -07:00
|
|
|
var count = this.feedlist.folder_view.highlighted_count_unique_folders();
|
2014-08-12 18:27:38 -07:00
|
|
|
|
|
|
|
$title.text(count ? count + " selected" : "Select");
|
|
|
|
|
2014-08-11 15:40:33 -07:00
|
|
|
if (!count) {
|
2014-08-12 18:27:38 -07:00
|
|
|
$delete.text('Delete').addClass('NB-disabled');
|
|
|
|
$move.text('Move').addClass('NB-disabled');
|
2014-08-11 15:40:33 -07:00
|
|
|
} else {
|
2014-08-12 18:27:38 -07:00
|
|
|
$delete.text('Delete ' + Inflector.pluralize('site', count, true)).removeClass('NB-disabled');
|
|
|
|
$move.text('Move ' + Inflector.pluralize('site', count, true)).removeClass('NB-disabled');
|
2014-08-11 15:40:33 -07:00
|
|
|
}
|
|
|
|
},
|
2014-08-04 20:03:50 -07:00
|
|
|
|
|
|
|
// ===========
|
|
|
|
// = Sorting =
|
|
|
|
// ===========
|
|
|
|
|
|
|
|
change_sort: function(sorting) {
|
|
|
|
this.options.sorting = sorting;
|
|
|
|
|
|
|
|
$(".NB-action-"+sorting, this.$modal).addClass('NB-active').siblings().removeClass('NB-active');
|
2014-07-07 13:22:56 -04:00
|
|
|
|
2014-08-04 20:03:50 -07:00
|
|
|
$(".NB-feedlist", this.$modal).replaceWith(this.make_feeds());
|
|
|
|
},
|
|
|
|
|
2014-10-10 15:51:27 -07:00
|
|
|
// ==========
|
|
|
|
// = Server =
|
|
|
|
// ==========
|
|
|
|
|
|
|
|
serialize: function() {
|
|
|
|
var highlighted_feeds = this.feedlist.folder_view.highlighted_feeds();
|
|
|
|
console.log(["highlighted feeds", highlighted_feeds]);
|
|
|
|
},
|
|
|
|
|
|
|
|
move_feeds: function() {
|
|
|
|
var highlighted_feeds = this.serialize();
|
|
|
|
},
|
|
|
|
|
|
|
|
delete_feeds: function() {
|
|
|
|
var highlighted_feeds = this.serialize();
|
|
|
|
},
|
|
|
|
|
2014-07-07 13:22:56 -04:00
|
|
|
// ===========
|
|
|
|
// = Actions =
|
|
|
|
// ===========
|
|
|
|
|
|
|
|
handle_click: function(elem, e) {
|
|
|
|
var self = this;
|
|
|
|
|
2014-08-04 20:03:50 -07:00
|
|
|
$.targetIs(e, { tagSelector: '.NB-organizer-action', childOf: '.NB-organizer-sorts' },
|
|
|
|
_.bind(function($t, $p) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
var sort = $t.attr('class').match(/\bNB-action-(\w+)\b/)[1];
|
|
|
|
this.change_sort(sort);
|
|
|
|
}, this));
|
2014-07-07 13:22:56 -04:00
|
|
|
|
2014-08-11 15:40:33 -07:00
|
|
|
$.targetIs(e, { tagSelector: '.NB-organizer-action', childOf: '.NB-organizer-selects' },
|
|
|
|
_.bind(function($t, $p) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
var select = $t.attr('class').match(/\bNB-action-select-(\w+)\b/)[1];
|
|
|
|
this.change_select(select);
|
|
|
|
}, this));
|
|
|
|
|
2014-08-12 18:27:38 -07:00
|
|
|
$.targetIs(e, { tagSelector: '.NB-icon-add' },
|
|
|
|
_.bind(function($t, $p) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
this.toggle_folder_add();
|
|
|
|
}, this));
|
2014-10-10 15:51:27 -07:00
|
|
|
|
|
|
|
$.targetIs(e, { tagSelector: '.NB-action-move' },
|
|
|
|
_.bind(function($t, $p) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
this.move_feeds();
|
|
|
|
}, this));
|
|
|
|
|
|
|
|
$.targetIs(e, { tagSelector: '.NB-action-delete' },
|
|
|
|
_.bind(function($t, $p) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
this.delete_feeds();
|
|
|
|
}, this));
|
2014-08-12 18:27:38 -07:00
|
|
|
},
|
|
|
|
|
|
|
|
toggle_folder_add: function() {
|
|
|
|
var $folder = $(".NB-add-folder", this.$modal);
|
|
|
|
var $icon = $(".NB-icon-add", this.$modal);
|
|
|
|
|
|
|
|
if (this._open_folder) {
|
|
|
|
$folder.slideUp(300);
|
|
|
|
$icon.removeClass('NB-active');
|
|
|
|
this._open_folder = false;
|
|
|
|
} else {
|
|
|
|
this._open_folder = true;
|
|
|
|
$icon.addClass('NB-active');
|
|
|
|
$folder.slideDown(300);
|
|
|
|
}
|
2014-07-07 13:22:56 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
});
|