mirror of
https://github.com/chylex/Nextcloud-News.git
synced 2025-08-20 07:49:51 +02:00
admin
appinfo
bin
command
config
controller
cron
css
db
dependencyinjection
explore
fetcher
hooks
http
img
js
admin
app
build
controller
AppController.js
ContentController.js
ExploreController.js
NavigationController.js
SettingsController.js
directive
filter
gui
plugin
service
tests
vendor
.bowerrc
.jshintrc
Gruntfile.js
README.md
bower.json
karma.conf.js
package.json
protractor.conf.js
l10n
plugin
service
templates
tests
utility
vendor
.gitignore
.mailmap
.scrutinizer.yml
.travis.yml
AUTHORS.md
CHANGELOG.md
CONTRIBUTING.md
COPYING
Makefile
README.md
composer.json
composer.lock
phpunit.integration.xml
phpunit.xml
367 lines
9.9 KiB
JavaScript
367 lines
9.9 KiB
JavaScript
/**
|
|
* 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('NavigationController',
|
|
function ($route, FEED_TYPE, FeedResource, FolderResource, ItemResource,
|
|
SettingsResource, Publisher, $rootScope, $location, $q) {
|
|
'use strict';
|
|
|
|
this.feedError = '';
|
|
this.showNewFolder = false;
|
|
this.renamingFolder = false;
|
|
this.addingFeed = false;
|
|
this.addingFolder = false;
|
|
this.folderError = '';
|
|
this.renameError = '';
|
|
this.feed = {};
|
|
|
|
var getRouteId = function () {
|
|
return parseInt($route.current.params.id, 10);
|
|
};
|
|
|
|
this.getFeeds = function () {
|
|
return FeedResource.getAll();
|
|
};
|
|
|
|
this.getFolders = function () {
|
|
return FolderResource.getAll();
|
|
};
|
|
|
|
this.markFolderRead = function (folderId) {
|
|
FeedResource.markFolderRead(folderId);
|
|
|
|
FeedResource.getByFolderId(folderId).forEach(function (feed) {
|
|
ItemResource.markFeedRead(feed.id);
|
|
});
|
|
};
|
|
|
|
this.markFeedRead = function (feedId) {
|
|
ItemResource.markFeedRead(feedId);
|
|
FeedResource.markFeedRead(feedId);
|
|
};
|
|
|
|
this.markRead = function () {
|
|
ItemResource.markRead();
|
|
FeedResource.markRead();
|
|
};
|
|
|
|
this.isShowAll = function () {
|
|
return SettingsResource.get('showAll');
|
|
};
|
|
|
|
this.getFeedsOfFolder = function (folderId) {
|
|
return FeedResource.getByFolderId(folderId);
|
|
};
|
|
|
|
this.getUnreadCount = function () {
|
|
return FeedResource.getUnreadCount();
|
|
};
|
|
|
|
this.isUnread = function () {
|
|
return this.getUnreadCount() > 0;
|
|
};
|
|
|
|
this.getFeedUnreadCount = function (feedId) {
|
|
var feed = FeedResource.getById(feedId);
|
|
if (feed !== undefined) {
|
|
return feed.unreadCount;
|
|
} else {
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
this.isFeedUnread = function (feedId) {
|
|
return this.getFeedUnreadCount(feedId) > 0;
|
|
};
|
|
|
|
this.getFolderUnreadCount= function (folderId) {
|
|
return FeedResource.getFolderUnreadCount(folderId);
|
|
};
|
|
|
|
this.isFolderUnread = function (folderId) {
|
|
return this.getFolderUnreadCount(folderId) > 0;
|
|
};
|
|
|
|
this.getStarredCount = function () {
|
|
return ItemResource.getStarredCount();
|
|
};
|
|
|
|
this.isStarredUnread = function () {
|
|
return this.getStarredCount() > 0;
|
|
};
|
|
|
|
this.toggleFolder = function (folderName) {
|
|
FolderResource.toggleOpen(folderName);
|
|
};
|
|
|
|
this.hasFeeds = function (folderId) {
|
|
return FeedResource.getFolderUnreadCount(folderId) !== undefined;
|
|
};
|
|
|
|
this.subFeedActive = function (folderId) {
|
|
var type = $route.current.$$route.type;
|
|
|
|
if (type === FEED_TYPE.FEED) {
|
|
var feed = FeedResource.getById(getRouteId());
|
|
|
|
if (feed !== undefined && feed.folderId === folderId) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
this.isSubscriptionsActive = function () {
|
|
return $route.current &&
|
|
$route.current.$$route.type === FEED_TYPE.SUBSCRIPTIONS;
|
|
};
|
|
|
|
this.isStarredActive = function () {
|
|
return $route.current &&
|
|
$route.current.$$route.type === FEED_TYPE.STARRED;
|
|
};
|
|
|
|
this.isExploreActive = function () {
|
|
return $route.current &&
|
|
$route.current.$$route.type === FEED_TYPE.EXPLORE;
|
|
};
|
|
|
|
this.isFolderActive = function (folderId) {
|
|
return $route.current &&
|
|
$route.current.$$route.type === FEED_TYPE.FOLDER &&
|
|
getRouteId() === folderId;
|
|
};
|
|
|
|
this.isFeedActive = function (feedId) {
|
|
return $route.current &&
|
|
$route.current.$$route.type === FEED_TYPE.FEED &&
|
|
getRouteId() === feedId;
|
|
};
|
|
|
|
this.folderNameExists = function (folderName) {
|
|
folderName = folderName || '';
|
|
return FolderResource.get(folderName.trim()) !== undefined;
|
|
};
|
|
|
|
this.feedUrlExists = function (url) {
|
|
url = url || '';
|
|
url = url.trim();
|
|
return FeedResource.get(url) !== undefined ||
|
|
FeedResource.get('http://' + url) !== undefined;
|
|
};
|
|
|
|
this.createFeed = function (feed) {
|
|
var self = this;
|
|
this.showNewFolder = false;
|
|
this.addingFeed = true;
|
|
|
|
var newFolder = feed.newFolder;
|
|
var existingFolder = feed.existingFolder || {id: 0};
|
|
|
|
// we dont need to create a new folder
|
|
if (newFolder === undefined || newFolder === '') {
|
|
// this is set to display the feed in any folder, even if the folder
|
|
// is closed or has no unread articles
|
|
existingFolder.getsFeed = true;
|
|
|
|
FeedResource.create(feed.url, existingFolder.id, undefined)
|
|
.then(function (data) {
|
|
|
|
Publisher.publishAll(data);
|
|
|
|
// set folder as default
|
|
$location.path('/items/feeds/' + data.feeds[0].id + '/');
|
|
|
|
}).finally(function () {
|
|
existingFolder.getsFeed = undefined;
|
|
feed.url = '';
|
|
self.addingFeed = false;
|
|
});
|
|
|
|
} else {
|
|
// create folder first and then the feed
|
|
FolderResource.create(newFolder).then(function (data) {
|
|
|
|
Publisher.publishAll(data);
|
|
|
|
// set the created folder on scope so its preselected for the
|
|
// next addition
|
|
feed.existingFolder = FolderResource.get(data.folders[0].name);
|
|
feed.newFolder = undefined;
|
|
self.createFeed(feed);
|
|
});
|
|
}
|
|
};
|
|
|
|
this.createFolder = function (folder) {
|
|
var self = this;
|
|
this.addingFolder = true;
|
|
FolderResource.create(folder.name).then(function (data) {
|
|
Publisher.publishAll(data);
|
|
}).finally(function () {
|
|
self.addingFolder = false;
|
|
folder.name = '';
|
|
});
|
|
};
|
|
|
|
this.moveFeed = function (feedId, folderId) {
|
|
var reload = false;
|
|
var feed = FeedResource.getById(feedId);
|
|
|
|
if (feed.folderId === folderId) {
|
|
return;
|
|
}
|
|
|
|
if (this.isFolderActive(feed.folderId) ||
|
|
this.isFolderActive(folderId)) {
|
|
reload = true;
|
|
}
|
|
|
|
FeedResource.move(feedId, folderId);
|
|
|
|
if (reload) {
|
|
$route.reload();
|
|
}
|
|
};
|
|
|
|
this.renameFeed = function (feed) {
|
|
FeedResource.rename(feed.id, feed.title);
|
|
feed.editing = false;
|
|
};
|
|
|
|
this.renameFolder = function (folder, name) {
|
|
folder.renameError = '';
|
|
this.renamingFolder = true;
|
|
var self = this;
|
|
|
|
if (folder.name === name) {
|
|
folder.renameError = '';
|
|
folder.editing = false;
|
|
this.renamingFolder = false;
|
|
} else {
|
|
FolderResource.rename(folder.name, name).then(function () {
|
|
folder.renameError = '';
|
|
folder.editing = false;
|
|
}, function (message) {
|
|
folder.renameError = message;
|
|
}).finally(function () {
|
|
self.renamingFolder = false;
|
|
});
|
|
}
|
|
};
|
|
|
|
this.reversiblyDeleteFeed = function (feed) {
|
|
FeedResource.reversiblyDelete(feed.id).finally(function () {
|
|
$route.reload();
|
|
});
|
|
};
|
|
|
|
this.undoDeleteFeed = function (feed) {
|
|
FeedResource.undoDelete(feed.id).finally(function () {
|
|
$route.reload();
|
|
});
|
|
};
|
|
|
|
this.deleteFeed = function (feed) {
|
|
FeedResource.delete(feed.url);
|
|
};
|
|
|
|
|
|
this.reversiblyDeleteFolder = function (folder) {
|
|
$q.all(
|
|
FeedResource.reversiblyDeleteFolder(folder.id),
|
|
FolderResource.reversiblyDelete(folder.name)
|
|
).finally(function () {
|
|
$route.reload();
|
|
});
|
|
};
|
|
|
|
this.undoDeleteFolder = function (folder) {
|
|
$q.all(
|
|
FeedResource.undoDeleteFolder(folder.id),
|
|
FolderResource.undoDelete(folder.name)
|
|
).finally(function () {
|
|
$route.reload();
|
|
});
|
|
};
|
|
|
|
this.deleteFolder = function (folder) {
|
|
FeedResource.deleteFolder(folder.id);
|
|
FolderResource.delete(folder.name);
|
|
};
|
|
|
|
this.setOrdering = function (feed, ordering) {
|
|
FeedResource.setOrdering(feed.id, ordering);
|
|
$route.reload();
|
|
};
|
|
|
|
this.togglePinned = function (feedId) {
|
|
var feed = FeedResource.getById(feedId);
|
|
if (feed) {
|
|
return FeedResource.setPinned(feedId, !feed.pinned);
|
|
}
|
|
};
|
|
|
|
this.toggleFullText = function (feed) {
|
|
$rootScope.$broadcast('$routeChangeStart');
|
|
FeedResource.toggleFullText(feed.id).finally(function () {
|
|
$rootScope.$broadcast('$routeChangeSuccess');
|
|
$route.reload();
|
|
});
|
|
};
|
|
|
|
this.search = function (value) {
|
|
if (value === '') {
|
|
$location.search('search', null);
|
|
} else {
|
|
$location.search('search', value);
|
|
}
|
|
};
|
|
|
|
var self = this;
|
|
|
|
$rootScope.$on('moveFeedToFolder', function (scope, data) {
|
|
self.moveFeed(data.feedId, data.folderId);
|
|
});
|
|
|
|
// based on the route we want to preselect a folder in the add new feed
|
|
// drop down
|
|
var setSelectedFolderForRoute = function () {
|
|
var type;
|
|
if ($route.current) {
|
|
type = $route.current.$$route.type;
|
|
}
|
|
|
|
var folderId = 0;
|
|
|
|
if (type === FEED_TYPE.FOLDER) {
|
|
folderId = getRouteId();
|
|
} else if (type === FEED_TYPE.FEED) {
|
|
var feed = FeedResource.getById(getRouteId());
|
|
|
|
if (feed) {
|
|
folderId = feed.folderId;
|
|
}
|
|
}
|
|
|
|
var folder;
|
|
if (folderId !== 0) {
|
|
folder = FolderResource.getById(folderId);
|
|
}
|
|
|
|
self.feed.existingFolder = folder;
|
|
};
|
|
|
|
$rootScope.$on('$routeChangeSuccess', function () {
|
|
setSelectedFolderForRoute();
|
|
});
|
|
|
|
});
|