diff --git a/js/app/Config.js b/js/app/Config.js index 3b808063d..f7c62e7ae 100644 --- a/js/app/Config.js +++ b/js/app/Config.js @@ -16,7 +16,8 @@ app.config(function ($routeProvider, $provide, $httpProvider, $locationProvider) STARRED: 2, SUBSCRIPTIONS: 3, SHARED: 4, - EXPLORE: 5 + EXPLORE: 5, + UNREAD: 6 }; // default hashPrefix changed in angular 1.6 to '!' @@ -190,6 +191,12 @@ app.config(function ($routeProvider, $provide, $httpProvider, $locationProvider) resolve: getItemResolve(feedType.STARRED), type: feedType.STARRED }) + .when('/items/unread', { + controller: 'ContentController as Content', + templateUrl: 'content.html', + resolve: getItemResolve(feedType.UNREAD), + type: feedType.UNREAD + }) .when('/items/feeds/:id', { controller: 'ContentController as Content', templateUrl: 'content.html', diff --git a/js/app/Run.js b/js/app/Run.js index 0500faa35..1a1572864 100644 --- a/js/app/Run.js +++ b/js/app/Run.js @@ -17,7 +17,7 @@ app.run(function ($rootScope, $location, $http, $q, $interval, $route, Loading, // listen to keys in returned queries to automatically distribute the // incoming values to models Publisher.subscribe(ItemResource).toChannels(['items', 'newestItemId', - 'starred']); + 'starred', 'unread']); Publisher.subscribe(FolderResource).toChannels(['folders']); Publisher.subscribe(FeedResource).toChannels(['feeds']); Publisher.subscribe(SettingsResource).toChannels(['settings']); @@ -49,12 +49,16 @@ app.run(function ($rootScope, $location, $http, $q, $interval, $route, Loading, url = '/explore'; break; + case FEED_TYPE.UNREAD: + url = '/items/unread'; + break; + default: url = '/items'; } // only redirect if url is empty or faulty - if (!/^\/items(\/(starred|explore|feeds\/\d+|folders\/\d+))?\/?$/ + if (!/^\/items(\/(starred|unread|explore|feeds\/\d+|folders\/\d+))?\/?$/ .test(path)) { $location.path(url); } @@ -126,4 +130,4 @@ app.run(function ($rootScope, $location, $http, $q, $interval, $route, Loading, $location.path('/items'); }); -}); \ No newline at end of file +}); diff --git a/lib/Db/FeedType.php b/lib/Db/FeedType.php index 23adbefb3..bf487992c 100644 --- a/lib/Db/FeedType.php +++ b/lib/Db/FeedType.php @@ -21,4 +21,5 @@ class FeedType const SUBSCRIPTIONS = 3; const SHARED = 4; const EXPLORE = 5; + const UNREAD = 6; } diff --git a/lib/Db/ItemMapper.php b/lib/Db/ItemMapper.php index 82a38d67d..f0442aee9 100644 --- a/lib/Db/ItemMapper.php +++ b/lib/Db/ItemMapper.php @@ -64,7 +64,7 @@ class ItemMapper extends NewsMapper if (isset($type) && $type === FeedType::STARRED) { $sql = 'AND `items`.`starred` = '; $sql .= $this->db->quote(true, IQueryBuilder::PARAM_BOOL) . ' '; - } elseif (!$showAll) { + } elseif (!$showAll || $type === FeedType::UNREAD) { $sql .= 'AND `items`.`unread` = '; $sql .= $this->db->quote(true, IQueryBuilder::PARAM_BOOL) . ' '; } diff --git a/templates/part.navigation.unreadfeed.php b/templates/part.navigation.unreadfeed.php index a5de750d2..902365c68 100644 --- a/templates/part.navigation.unreadfeed.php +++ b/templates/part.navigation.unreadfeed.php @@ -4,14 +4,10 @@ }" class="subscriptions-feed with-counter with-menu"> - <a class="icon-rss" ng-href="#/items/" ng-if="!Navigation.isShowAll()"> + <a class="icon-rss" ng-href="#/items/unread" > <?php p($l->t('Unread articles'))?> </a> - <a class="icon-rss" ng-href="#/items/" ng-if="Navigation.isShowAll()"> - <?php p($l->t('All articles'))?> - </a> - <div class="app-navigation-entry-utils" ng-show="Navigation.isUnread()"> <ul> <li class="app-navigation-entry-utils-counter" @@ -38,4 +34,37 @@ </ul> </div> -</li> \ No newline at end of file +</li> + +<li ng-class="{ + active: Navigation.isSubscriptionsActive(), + unread: Navigation.isUnread() + }" + class="all-subscriptions-feed with-counter with-menu"> + + <a class="icon-rss" ng-href="#/items/" ng-if="Navigation.isShowAll()"> + <?php p($l->t('All articles'))?> + </a> + + <div class="app-navigation-entry-utils" ng-if="Navigation.isShowAll()"> + <ul> + <li class="app-navigation-entry-utils-menu-button"> + <button + ng-click="optionsId = (optionsId == 'all' ? -1 : 'all')"> + </button> + </li> + </ul> + </div> + + <div class="app-navigation-entry-menu" ng-if="navigation.isShowAll()"> + <ul> + <li class="mark-read"> + <button ng-click="Navigation.markRead()"> + <span class="icon-checkmark"></span> + <span><?php p($l->t('Mark read')); ?></span> + </button> + </li> + </ul> + </div> + +</li>