NewsBlur/media/js/newsblur/reader/reader_organizer.js

197 lines
7.9 KiB
JavaScript
Raw Normal View History

2014-07-07 13:22:56 -04:00
NEWSBLUR.ReaderOrganizer = function(user_id, options) {
var defaults = {
width: 800,
2014-08-04 20:03:50 -07:00
sorting: 'alphabetical',
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() {
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' }),
'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-modal-submit-button NB-modal-submit-green NB-disabled NB-action-move' }, 'Move'),
$.make('div', { className: 'NB-loading' }),
$.make('div', { className: "NB-add-folder NB-hidden" }, [
$.make('div', { className: 'NB-modal-submit-button NB-modal-submit-green NB-add-folder-submit' }, 'Add folder'),
$.make('div', { className: 'NB-loading' }),
$.make('input', { type: 'text', id: 'NB-add-folder', className: 'NB-input NB-add-folder-input', name: 'new_folder_name', placeholder: "New folder name..." })
])
])
]),
$.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'),
$.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'),
$.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()
]);
},
resize_modal: function(previous_height) {
2014-08-04 20:03:50 -07:00
var resize_height = 0;
var $feedlist = $('.NB-feedchooser', this.$modal);
2014-08-04 20:03:50 -07:00
var content_height = $feedlist.height() + 90;
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});
_.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-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-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();
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 =
// =============
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);
var count = this.feedlist.folder_view.highlighted_count();
if (!count) {
$title.text("Select");
} else {
$title.text(count + " selected");
}
},
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-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
$.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-07-07 13:22:56 -04:00
}
});