summaryrefslogtreecommitdiffstats
path: root/js/controller/ContentController.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/controller/ContentController.js')
-rw-r--r--js/controller/ContentController.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/js/controller/ContentController.js b/js/controller/ContentController.js
new file mode 100644
index 000000000..ea19792c7
--- /dev/null
+++ b/js/controller/ContentController.js
@@ -0,0 +1,146 @@
+/**
+ * ownCloud - News
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @copyright Bernhard Posselt 2014
+ */
+app.controller('ContentController',
+function (Publisher, FeedResource, ItemResource, SettingsResource, data,
+ $route, $routeParams, FEED_TYPE) {
+ 'use strict';
+
+ // dont cache items across multiple route changes
+ ItemResource.clear();
+
+ // distribute data to models based on key
+ Publisher.publishAll(data);
+
+
+ this.isAutoPagingEnabled = true;
+
+ this.getItems = function () {
+ return ItemResource.getAll();
+ };
+
+ this.toggleStar = function (itemId) {
+ ItemResource.toggleStar(itemId);
+ };
+
+ this.toggleItem = function (item) {
+ // TODO: unittest
+ if (this.isCompactView()) {
+ item.show = !item.show;
+ }
+ };
+
+ this.markRead = function (itemId) {
+ var item = ItemResource.get(itemId);
+
+ if (!item.keepUnread && item.unread === true) {
+ ItemResource.markItemRead(itemId);
+ FeedResource.markItemOfFeedRead(item.feedId);
+ }
+ };
+
+ this.getFeed = function (feedId) {
+ return FeedResource.getById(feedId);
+ };
+
+ this.toggleKeepUnread = function (itemId) {
+ var item = ItemResource.get(itemId);
+ if (!item.unread) {
+ FeedResource.markItemOfFeedUnread(item.feedId);
+ ItemResource.markItemRead(itemId, false);
+ }
+
+ item.keepUnread = !item.keepUnread;
+ };
+
+ this.orderBy = function () {
+ if (SettingsResource.get('oldestFirst')) {
+ return 'id';
+ } else {
+ return '-id';
+ }
+ };
+
+ this.isCompactView = function () {
+ return SettingsResource.get('compact');
+ };
+
+ 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.isFeed = function () {
+ return $route.current.$$route.type === FEED_TYPE.FEED;
+ };
+
+ this.autoPage = function () {
+ // 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.isAutoPagingEnabled = false;
+ this.autoPageAgain = false;
+
+ var type = $route.current.$$route.type;
+ var id = $routeParams.id;
+ var oldestFirst = SettingsResource.get('oldestFirst');
+ var self = this;
+
+ ItemResource.autoPage(type, id, oldestFirst).success(function (data) {
+ Publisher.publishAll(data);
+
+ if (data.items.length > 0) {
+ self.isAutoPagingEnabled = true;
+ }
+
+ if (self.isAutoPagingEnabled && self.autoPageAgain) {
+ self.autoPage();
+ }
+ }).error(function () {
+ self.isAutoPagingEnabled = true;
+ });
+ };
+
+ 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 '';
+ }
+ };
+
+}); \ No newline at end of file