diff options
| author | rr- | 2016-06-12 14:04:42 +0200 |
|---|---|---|
| committer | rr- | 2016-06-12 14:04:52 +0200 |
| commit | 1e48140b00da7c574717da750e41b5c95dc36cf1 (patch) | |
| tree | e7c396abfdfefdab3f2a2043cea3315ecd3ee22f /client/js | |
| parent | a67db59d99c00e3066818fdfffb3a965ea7f2843 (diff) | |
client/comments: add global comment list
Diffstat (limited to 'client/js')
| -rw-r--r-- | client/js/controllers/comments_controller.js | 27 | ||||
| -rw-r--r-- | client/js/views/comments_page_view.js | 27 | ||||
| -rw-r--r-- | client/js/views/endless_page_view.js | 4 | ||||
| -rw-r--r-- | client/js/views/manual_page_view.js | 4 |
4 files changed, 57 insertions, 5 deletions
diff --git a/client/js/controllers/comments_controller.js b/client/js/controllers/comments_controller.js index 4f0e80e..fbc4896 100644 --- a/client/js/controllers/comments_controller.js +++ b/client/js/controllers/comments_controller.js @@ -1,18 +1,39 @@ 'use strict'; +const api = require('../api.js'); const page = require('page'); +const misc = require('../util/misc.js'); const topNavController = require('../controllers/top_nav_controller.js'); +const pageController = require('../controllers/page_controller.js'); +const CommentsPageView = require('../views/comments_page_view.js'); const EmptyView = require('../views/empty_view.js'); class CommentsController { registerRoutes() { - page('/comments', (ctx, next) => { this._listCommentsRoute(); }); + page('/comments/:query?', + (ctx, next) => { misc.parseSearchQueryRoute(ctx, next); }, + (ctx, next) => { this._listCommentsRoute(ctx); }); + this._commentsPageView = new CommentsPageView(); this._emptyView = new EmptyView(); } - _listCommentsRoute() { + _listCommentsRoute(ctx) { topNavController.activate('comments'); - this._emptyView.render(); + + pageController.run({ + searchQuery: ctx.searchQuery, + clientUrl: '/comments/' + misc.formatSearchQuery({page: '{page}'}), + requestPage: page => { + return api.get( + '/posts/?query=sort:comment-date+comment-count-min:1' + + `&page=${page}&pageSize=10&fields=` + + 'id,comments,commentCount,thumbnailUrl'); + }, + pageRenderer: this._commentsPageView, + pageContext: { + canViewPosts: api.hasPrivilege('posts:view'), + } + }); } } diff --git a/client/js/views/comments_page_view.js b/client/js/views/comments_page_view.js new file mode 100644 index 0000000..ed741ef --- /dev/null +++ b/client/js/views/comments_page_view.js @@ -0,0 +1,27 @@ +'use strict'; + +const views = require('../util/views.js'); +const CommentListControl = require('../controls/comment_list_control.js'); + +class CommentsPageView { + constructor() { + this._template = views.getTemplate('comments-page'); + } + + render(ctx) { + const target = ctx.target; + const source = this._template(ctx); + + for (let post of ctx.results) { + post.comments.reverse(); + new CommentListControl( + source.querySelector( + `.comments-container[data-for="${post.id}"]`), + post.comments); + } + + views.showView(target, source); + } +} + +module.exports = CommentsPageView; diff --git a/client/js/views/endless_page_view.js b/client/js/views/endless_page_view.js index 482de23..579db94 100644 --- a/client/js/views/endless_page_view.js +++ b/client/js/views/endless_page_view.js @@ -25,7 +25,9 @@ class EndlessPageView { this._working = 0; ctx.headerContext.target = pageHeaderHolder; - ctx.headerRenderer.render(ctx.headerContext); + if (ctx.headerRenderer) { + ctx.headerRenderer.render(ctx.headerContext); + } const threshold = window.innerHeight / 3; diff --git a/client/js/views/manual_page_view.js b/client/js/views/manual_page_view.js index fe93bb8..e67c9cf 100644 --- a/client/js/views/manual_page_view.js +++ b/client/js/views/manual_page_view.js @@ -70,7 +70,9 @@ class ManualPageView { const currentPage = ctx.searchQuery.page; ctx.headerContext.target = pageHeaderHolder; - ctx.headerRenderer.render(ctx.headerContext); + if (ctx.headerRenderer) { + ctx.headerRenderer.render(ctx.headerContext); + } ctx.requestPage(currentPage).then(response => { Object.assign(ctx.pageContext, response); |