From 544eb2ee10bbdab88ebd5d082b245b01f5352d70 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 9 Jul 2013 12:44:13 +0200 Subject: [PATCH] fix keyboard navigation for the tree (fix #404) --- src/main/webapp/js/controllers.js | 22 ++-------------------- src/main/webapp/js/services.js | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/main/webapp/js/controllers.js b/src/main/webapp/js/controllers.js index 2f6ff15a..e7d016e5 100644 --- a/src/main/webapp/js/controllers.js +++ b/src/main/webapp/js/controllers.js @@ -194,24 +194,6 @@ function($scope, $timeout, $stateParams, $window, $location, $state, $route, Cat } }; - var flat = function() { - var a = []; - a.push([ 'all', 'category' ]); - a.push([ 'starred', 'category' ]); - for ( var i = 1; i < CategoryService.flatCategories.length; i++) { - var cat = CategoryService.flatCategories[i]; - a.push([ cat.id, 'category' ]); - - var feeds = cat.orig.feeds; - if (feeds) { - for ( var j = 0; j < feeds.length; j++) { - a.push([ feeds[j].id, 'feed' ]); - } - } - } - return a; - }; - var getCurrentIndex = function (id, type, flat) { var index = -1; for ( var i = 0; i < flat.length; i++) { @@ -225,7 +207,7 @@ function($scope, $timeout, $stateParams, $window, $location, $state, $route, Cat }; var openNextNode = function() { - var f = flat(); + var f = CategoryService.flatAll; var current = getCurrentIndex($scope.selectedId, $scope.selectedType, f); current++; if(current < f.length) { @@ -237,7 +219,7 @@ function($scope, $timeout, $stateParams, $window, $location, $state, $route, Cat }; var openPreviousNode = function() { - var f = flat(); + var f = CategoryService.flatAll; var current = getCurrentIndex($scope.selectedId, $scope.selectedType, f); current--; if(current >= 0) { diff --git a/src/main/webapp/js/services.js b/src/main/webapp/js/services.js index b08364c9..121e4d33 100644 --- a/src/main/webapp/js/services.js +++ b/src/main/webapp/js/services.js @@ -148,7 +148,7 @@ function($resource, $http) { }; // flatten feeds - var flatfeeds = function(category) { + var flatFeeds = function(category) { var subs = []; var callback = function(category) { subs.push.apply(subs, category.feeds); @@ -156,6 +156,18 @@ function($resource, $http) { traverse(callback, category); return subs; }; + + // flatten everything + var flatAll = function(category, a) { + a.push([ category.id, 'category' ]); + _.each(category.children, function(child) { + flatAll(child, a); + }); + _.each(category.feeds, function(feed) { + a.push([ feed.id, 'feed' ]); + }); + }; + var actions = { get : { method : 'GET', @@ -209,7 +221,12 @@ function($resource, $http) { res.get(function(data) { res.subscriptions = data; res.flatCategories = flatten(data); - res.feeds = flatfeeds(data); + res.feeds = flatFeeds(data); + + res.flatAll = []; + flatAll(data, res.flatAll); + res.flatAll.splice(1, 0, ['starred', 'category']); + if (callback) callback(data); });