From 829874b38be8c2d7d190833ea3d4601f5be681cd Mon Sep 17 00:00:00 2001
From: Eike Cochu <eike@cochu.com>
Date: Sat, 6 Feb 2016 15:18:18 +0100
Subject: [PATCH] updated pagination, will reload based on watcher instead of
 search

---
 vipra-ui/app/html/directives/pagination.html |  6 ++---
 vipra-ui/app/js/app.js                       |  9 +++++---
 vipra-ui/app/js/controllers.js               | 23 ++++++++++++++------
 3 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/vipra-ui/app/html/directives/pagination.html b/vipra-ui/app/html/directives/pagination.html
index 3947b26b..7bd65a8d 100644
--- a/vipra-ui/app/html/directives/pagination.html
+++ b/vipra-ui/app/html/directives/pagination.html
@@ -1,14 +1,14 @@
 <nav ng-show="total > limit">
   <ul class="pagination">
     <li ng-class="{disabled:page==1}">
-      <a ui-sref="{page:page==2?null:page-1}" ng-show="page>1">&laquo;</a>
+      <a ui-sref="{page:page==2?null:page-1}" ng-show="page>1" ng-click="changePage(page-1)">&laquo;</a>
       <span ng-hide="page>1">&laquo;</span>
     </li>
     <li ng-class="{active:p==page}" ng-repeat="p in pages">
-      <a ui-sref="{page:p===1?null:p}" ng-bind="p"></a>
+      <a ui-sref="{page:p===1?null:p}" ng-bind="p" ng-click="changePage(p)"></a>
     </li>
     <li ng-class="{disabled:page>=maxPage}">
-      <a ui-sref="{page:page+1}" ng-show="page<maxPage">&raquo;</a>
+      <a ui-sref="{page:page+1}" ng-show="page<maxPage" ng-click="changePage(page+1)">&raquo;</a>
       <span ng-hide="page<maxPage">&raquo;</span>
     </li>
   </ul>
diff --git a/vipra-ui/app/js/app.js b/vipra-ui/app/js/app.js
index 9b679b93..6b6456a2 100644
--- a/vipra-ui/app/js/app.js
+++ b/vipra-ui/app/js/app.js
@@ -48,7 +48,8 @@
     $stateProvider.state('articles.index', {
       url: '?page',
       templateUrl: tplBase + '/articles/index.html',
-      controller: 'ArticlesIndexController'
+      controller: 'ArticlesIndexController',
+      reloadOnSearch: false
     });
 
     $stateProvider.state('articles.show', {
@@ -68,7 +69,8 @@
     $stateProvider.state('topics.index', {
       url: '?page',
       templateUrl: tplBase + '/topics/index.html',
-      controller: 'TopicsIndexController'
+      controller: 'TopicsIndexController',
+      reloadOnSearch: false
     });
 
     $stateProvider.state('topics.show', {
@@ -88,7 +90,8 @@
     $stateProvider.state('words.index', {
       url: '?page',
       templateUrl: tplBase + '/words/index.html',
-      controller: 'WordsIndexController'
+      controller: 'WordsIndexController',
+      reloadOnSearch: false
     });
 
     $stateProvider.state('words.show', {
diff --git a/vipra-ui/app/js/controllers.js b/vipra-ui/app/js/controllers.js
index 120db447..ddfd22e2 100644
--- a/vipra-ui/app/js/controllers.js
+++ b/vipra-ui/app/js/controllers.js
@@ -79,13 +79,19 @@
     $scope.page = Math.max($stateParams.page || 1, 1);
     $scope.limit = pageSize;
 
-    ArticleFactory.query({
-      skip: ($scope.page-1)*pageSize,
-      limit: pageSize
-    }, function(response) {
-      $scope.articles = response.data;
-      $scope.articlesMeta = response.meta;
-      $scope.queryTime = response.$queryTime;
+    var loadedOnce = false;
+    $scope.$watch('page', function(newVal, oldVal) {
+      if(newVal != oldVal || !loadedOnce) {
+        loadedOnce = true;
+        ArticleFactory.query({
+          skip: ($scope.page-1)*pageSize,
+          limit: pageSize
+        }, function(response) {
+          $scope.articles = response.data;
+          $scope.articlesMeta = response.meta;
+          $scope.queryTime = response.$queryTime;
+        });
+      }
     });
 
   }]);
@@ -214,6 +220,9 @@
 
       $scope.calculatePages();
 
+      $scope.changePage = function(page) {
+        $scope.page = page;
+      };
    }]);
 
 })();
\ No newline at end of file
-- 
GitLab