Sotaro KARASAWA 10 лет назад
Родитель
Сommit
296c20d3c0
2 измененных файлов с 30 добавлено и 14 удалено
  1. 28 11
      lib/routes/page.js
  2. 2 3
      lib/views/page_list.html

+ 28 - 11
lib/routes/page.js

@@ -24,9 +24,12 @@ module.exports = function(crowi, app) {
 
   // TODO: total とかでちゃんと計算する
   function generatePager(options) {
-    var next = null, prev = null,
-        offset = parseInt(options.offset, 10),
-        limit  = parseInt(options.limit, 10);
+    var next = null,
+      prev = null,
+      offset = parseInt(options.offset, 10),
+      limit  = parseInt(options.limit, 10),
+      length = options.length || 0;
+
 
     if (offset > 0) {
       prev = offset - limit;
@@ -35,7 +38,11 @@ module.exports = function(crowi, app) {
       }
     }
 
-    next = offset + limit;
+    if (length < limit) {
+      next = null;
+    } else {
+      next = offset + limit;
+    }
 
     return {
       prev: prev,
@@ -48,31 +55,41 @@ module.exports = function(crowi, app) {
   // routing
   actions.pageListShow = function(req, res) {
     var path = getPathFromRequest(req);
+    var limit = parseInt(req.query.limit)  || 50;
+    var offset = parseInt(req.query.offset)  || 0;
     path = path + (path == '/' ? '' : '/');
 
     // index page
-    var options = {
-      offset: req.query.offset || 0,
-      limit : req.query.limit  || 50
+    var pagerOptions = {
+      offset: offset,
+      limit : limit
+    };
+    var queryOptions = {
+      offset: offset,
+      limit : limit + 1
     };
 
     var renderVars = {
       page: null,
       path: path,
       pages: [],
-      pager: generatePager(options)
     };
 
     Page.hasPortalPage(path, req.user)
     .then(function(portalPage) {
       renderVars.page = portalPage;
 
-      return Page.findListByStartWith(path.substr(0, path.length -1), req.user, options);
+      return Page.findListByStartWith(path.substr(0, path.length -1), req.user, queryOptions);
     }).then(function(pageList) {
 
-      renderVars.pages = pageList;
-      renderVars.pager = generatePager(pageList);
+      if (pageList.length > limit) {
+        pageList.pop();
+      }
 
+      pagerOptions.length = pageList.length;
+
+      renderVars.pager = generatePager(pagerOptions);
+      renderVars.pages = pageList;
       res.render('page_list', renderVars);
     });
   };

+ 2 - 3
lib/views/page_list.html

@@ -138,11 +138,10 @@
       </ul>
 
         <ul class="pagination">
-          {% if pager.prev != null %}
+          {% if pager.prev !== null %}
             <li class="prev"><a href="{{ path }}?offset={{ pager.prev }}&limit={{ pager.limit }}"><i class="fa fa-arrow-left"></i> Prev</a></li>
           {% endif %}
-          {# この条件は無いな.. #}
-          {% if pages.length > 0 %}
+          {% if pager.next %}
             <li class="next"><a href="{{ path }}?offset={{ pager.next }}&limit={{ pager.limit }}">Next <i class="fa fa-arrow-right"></i></a></li>
           {% endif %}
         </ul>