diff options
Diffstat (limited to 'js/controller/ContentController.js')
-rw-r--r-- | js/controller/ContentController.js | 358 |
1 files changed, 175 insertions, 183 deletions
diff --git a/js/controller/ContentController.js b/js/controller/ContentController.js index 51f8eca69..74c475f4c 100644 --- a/js/controller/ContentController.js +++ b/js/controller/ContentController.js @@ -7,221 +7,213 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -app.controller('ContentController', - function (Publisher, FeedResource, ItemResource, SettingsResource, data, - $route, $routeParams, $location, FEED_TYPE, ITEM_AUTO_PAGE_SIZE, - Loading, $filter) { - 'use strict'; +app.controller('ContentController', function (Publisher, FeedResource, ItemResource, SettingsResource, data, $route, + $routeParams, $location, FEED_TYPE, ITEM_AUTO_PAGE_SIZE, Loading, + $filter) { + 'use strict'; + + var self = this; + ItemResource.clear(); + + // distribute data to models based on key + Publisher.publishAll(data); + + this.getFirstItem = function () { + var orderFilter = $filter('orderBy'); + var orderedItems = orderFilter(this.getItems(), this.orderBy()); + var firstItem = orderedItems[0]; + if (firstItem === undefined) { + return undefined; + } else { + return firstItem.id; + } + }; - var self = this; - ItemResource.clear(); - // distribute data to models based on key - Publisher.publishAll(data); + this.isAutoPagingEnabled = true; + // the interface should show a hint if there are not enough items sent + // it's assumed that theres nothing to autpage - this.getFirstItem = function () { - var orderFilter = $filter('orderBy'); - var orderedItems = orderFilter(this.getItems(), this.orderBy()); - var firstItem = orderedItems[0]; - if (firstItem === undefined) { - return undefined; - } else { - return firstItem.id; - } - }; + this.isNothingMoreToAutoPage = ItemResource.size() < ITEM_AUTO_PAGE_SIZE; + this.getItems = function () { + return ItemResource.getAll(); + }; - this.isAutoPagingEnabled = true; - // the interface should show a hint if there are not enough items sent - // it's assumed that theres nothing to autpage + this.isItemActive = function (id) { + return this.activeItem === id; + }; - if (ItemResource.size() >= ITEM_AUTO_PAGE_SIZE) { - this.isNothingMoreToAutoPage = false; - } else { - this.isNothingMoreToAutoPage = true; + this.setItemActive = function (id) { + this.activeItem = id; + }; + + this.toggleStar = function (itemId) { + ItemResource.toggleStar(itemId); + }; + + this.toggleItem = function (item) { + // TODO: unittest + if (this.isCompactView()) { + item.show = !item.show; } + }; - this.getItems = function () { - return ItemResource.getAll(); - }; + this.isShowAll = function () { + return SettingsResource.get('showAll'); + }; - this.isItemActive = function (id) { - return this.activeItem === id; - }; + this.markRead = function (itemId) { + var item = ItemResource.get(itemId); - this.setItemActive = function (id) { - this.activeItem = id; - }; + if (!item.keepUnread && item.unread === true) { + ItemResource.markItemRead(itemId); + FeedResource.markItemOfFeedRead(item.feedId); + } + }; - this.toggleStar = function (itemId) { - ItemResource.toggleStar(itemId); - }; + this.getFeed = function (feedId) { + return FeedResource.getById(feedId); + }; - this.toggleItem = function (item) { - // TODO: unittest - if (this.isCompactView()) { - item.show = !item.show; - } - }; + this.toggleKeepUnread = function (itemId) { + var item = ItemResource.get(itemId); + if (!item.unread) { + FeedResource.markItemOfFeedUnread(item.feedId); + ItemResource.markItemRead(itemId, false); + } - this.isShowAll = function () { - return SettingsResource.get('showAll'); - }; + item.keepUnread = !item.keepUnread; + }; - this.markRead = function (itemId) { - var item = ItemResource.get(itemId); + var getOrdering = function () { + var ordering = SettingsResource.get('oldestFirst'); - if (!item.keepUnread && item.unread === true) { - ItemResource.markItemRead(itemId); - FeedResource.markItemOfFeedRead(item.feedId); + if (self.isFeed()) { + var feed = FeedResource.getById($routeParams.id); + if (feed && feed.ordering === 1) { + ordering = true; + } else if (feed && feed.ordering === 2) { + ordering = false; } - }; + } + + return ordering; + }; + + this.orderBy = function () { + if (getOrdering()) { + return 'id'; + } else { + return '-id'; + } + }; + + this.isCompactView = function () { + return SettingsResource.get('compact'); + }; + + this.isCompactExpand = function () { + return SettingsResource.get('compactExpand'); + }; + + this.autoPagingEnabled = function () { + return this.isAutoPagingEnabled; + }; - this.getFeed = function (feedId) { - return FeedResource.getById(feedId); - }; + this.markReadEnabled = function () { + return !SettingsResource.get('preventReadOnScroll'); + }; - this.toggleKeepUnread = function (itemId) { + this.scrollRead = function (itemIds) { + var ids = []; + var feedIds = []; + + itemIds.forEach(function (itemId) { var item = ItemResource.get(itemId); - if (!item.unread) { - FeedResource.markItemOfFeedUnread(item.feedId); - ItemResource.markItemRead(itemId, false); + if (!item.keepUnread) { + ids.push(itemId); + feedIds.push(item.feedId); } + }); - item.keepUnread = !item.keepUnread; - }; + if (ids.length > 0) { + FeedResource.markItemsOfFeedsRead(feedIds); + ItemResource.markItemsRead(ids); + } + }; - var getOrdering = function () { - var ordering = SettingsResource.get('oldestFirst'); + this.isFeed = function () { + return $route.current.$$route.type === FEED_TYPE.FEED; + }; - if (self.isFeed()) { - var feed = FeedResource.getById($routeParams.id); - if (feed && feed.ordering === 1) { - ordering = true; - } else if (feed && feed.ordering === 2) { - ordering = false; - } - } + this.autoPage = function () { + if (this.isNothingMoreToAutoPage) { + return; + } - return ordering; - }; + // in case a subsequent autopage request comes in wait until + // the current one finished and execute a request immediately + // afterwards + if (!this.isAutoPagingEnabled) { + this.autoPageAgain = true; + return; + } - this.orderBy = function () { - if (getOrdering()) { - return 'id'; - } else { - return '-id'; - } - }; - - this.isCompactView = function () { - return SettingsResource.get('compact'); - }; - - this.isCompactExpand = function () { - return SettingsResource.get('compactExpand'); - }; - - this.autoPagingEnabled = function () { - return this.isAutoPagingEnabled; - }; - - this.markReadEnabled = function () { - return !SettingsResource.get('preventReadOnScroll'); - }; - - this.scrollRead = function (itemIds) { - var ids = []; - var feedIds = []; - - itemIds.forEach(function (itemId) { - var item = ItemResource.get(itemId); - if (!item.keepUnread) { - ids.push(itemId); - feedIds.push(item.feedId); - } - }); - - if (ids.length > 0) { - FeedResource.markItemsOfFeedsRead(feedIds); - ItemResource.markItemsRead(ids); - } - }; + this.isAutoPagingEnabled = false; + this.autoPageAgain = false; - this.isFeed = function () { - return $route.current.$$route.type === FEED_TYPE.FEED; - }; + var type = $route.current.$$route.type; + var id = $routeParams.id; + var oldestFirst = getOrdering(); + var showAll = SettingsResource.get('showAll'); + var self = this; + var search = $location.search().search; - this.autoPage = function () { - if (this.isNothingMoreToAutoPage) { - return; - } + Loading.setLoading('autopaging', true); - // in case a subsequent autopage request comes in wait until - // the current one finished and execute a request immediately - // afterwards - if (!this.isAutoPagingEnabled) { - this.autoPageAgain = true; - return; - } + ItemResource.autoPage(type, id, oldestFirst, showAll, search).then(function (response) { + Publisher.publishAll(response.data); - this.isAutoPagingEnabled = false; - this.autoPageAgain = false; - - var type = $route.current.$$route.type; - var id = $routeParams.id; - var oldestFirst = getOrdering(); - var showAll = SettingsResource.get('showAll'); - var self = this; - var search = $location.search().search; - - Loading.setLoading('autopaging', true); - - ItemResource.autoPage(type, id, oldestFirst, showAll, search) - .then(function (response) { - Publisher.publishAll(response.data); - - if (response.data.items.length >= ITEM_AUTO_PAGE_SIZE) { - self.isAutoPagingEnabled = true; - } else { - self.isNothingMoreToAutoPage = true; - } - - if (self.isAutoPagingEnabled && self.autoPageAgain) { - self.autoPage(); - } - return response.data; - }, function () { + if (response.data.items.length >= ITEM_AUTO_PAGE_SIZE) { self.isAutoPagingEnabled = true; - }).finally(function () { - Loading.setLoading('autopaging', false); - }); - }; - - this.getRelativeDate = function (timestamp) { - if (timestamp !== undefined && timestamp !== '') { - var languageCode = SettingsResource.get('language'); - var date = - moment.unix(timestamp).locale(languageCode).fromNow() + ''; - return date; } else { - return ''; + self.isNothingMoreToAutoPage = true; } - }; - - this.refresh = function () { - $route.reload(); - }; - this.getMediaType = function (type) { - if (type && type.indexOf('audio') === 0) { - return 'audio'; - } else if (type && type.indexOf('video') === 0) { - return 'video'; - } else { - return undefined; + if (self.isAutoPagingEnabled && self.autoPageAgain) { + self.autoPage(); } - }; + return response.data; + }, function () { + self.isAutoPagingEnabled = true; + }).finally(function () { + Loading.setLoading('autopaging', false); + }); + }; + + this.getRelativeDate = function (timestamp) { + if (timestamp !== undefined && timestamp !== '') { + var languageCode = SettingsResource.get('language'); + return moment.unix(timestamp).locale(languageCode).fromNow() + ''; + } else { + return ''; + } + }; + + this.refresh = function () { + $route.reload(); + }; + + this.getMediaType = function (type) { + if (type && type.indexOf('audio') === 0) { + return 'audio'; + } else if (type && type.indexOf('video') === 0) { + return 'video'; + } else { + return undefined; + } + }; - this.activeItem = this.getFirstItem(); - });
\ No newline at end of file + this.activeItem = this.getFirstItem(); +});
\ No newline at end of file |