NewsBlur/media/js/newsblur/models/folders.js

76 lines
3 KiB
JavaScript
Raw Normal View History

NEWSBLUR.Models.FeedOrFolder = Backbone.Model.extend({
initialize: function(model) {
if (_.isNumber(model)) {
this.feed = NEWSBLUR.assets.feeds.get(model);
2012-05-19 10:29:27 -07:00
this.feed.set('subscribed', true, {silent: true});
this.set('is_feed', true);
} else if (model) {
var title = _.keys(model)[0];
var children = model[title];
this.set('folder_title', title);
this.folders = new NEWSBLUR.Collections.Folders([], {title: title});
this.folders.parse(children);
}
},
is_feed: function() {
return this.get('is_feed', false);
}
});
NEWSBLUR.Collections.Folders = Backbone.Collection.extend({
options: {
title: ''
},
initialize: function() {
this.comparator = NEWSBLUR.Collections.Folders.comparator;
},
model: NEWSBLUR.Models.FeedOrFolder,
parse: function(models) {
this.reset(models);
}
}, {
comparator: function(modelA, modelB) {
var sort_order = NEWSBLUR.assets.preference('feed_order');
var feedA, feedB;
if (modelA && modelA.e instanceof jQuery) feedA = NEWSBLUR.assets.feeds.get(parseInt(a.e.data('id'), 10));
if (modelB && modelB.e instanceof jQuery) feedB = NEWSBLUR.assets.feeds.get(parseInt(b.e.data('id'), 10));
if (modelA && modelA.is_feed()) feedA = modelA.model;
if (modelB && modelB.is_feed()) feedB = modelB.model;
// console.log(["feeds", sort_order, modelA, modelB, feedA, feedB]);
if (sort_order == 'ALPHABETICAL' || !sort_order) {
if (feedA && feedB) {
return feedA.get('feed_title').toLowerCase() > feedB.get('feed_title').toLowerCase() ? 1 : -1;
} else if (feedA && !feedB) {
return -1;
} else if (!feedA && feedB) {
return 1;
} else if (!feedA && !feedB && modelA && modelB && !modelA.is_feed() && !modelB.is_feed() && !(modelA.e instanceof jQuery) && !(modelB.e instanceof jQuery)) {
return modelA.get('folder_title').toLowerCase() > modelB.get('folder_title').toLowerCase() ? 1 : -1;
}
} else if (sort_order == 'MOSTUSED') {
if (feedA && feedB) {
return feedA.get('feed_opens') < feedB.get('feed_opens') ? 1 :
(feedA.get('feed_opens') > feedB.get('feed_opens') ? -1 :
(feedA.get('feed_title').toLowerCase() > feedB.get('feed_title').toLowerCase() ? 1 : -1));
} else if (feedA && !feedB) {
return -1;
} else if (!feedA && feedB) {
return 1;
} else if (!feedA && !feedB && modelA && modelB && !modelA.is_feed() && !modelB.is_feed() && !(modelA.e instanceof jQuery) && !(modelB.e instanceof jQuery)) {
return modelA.get('folder_title').toLowerCase() > modelB.get('folder_title').toLowerCase() ? 1 : -1;
}
}
}
});