aboutsummaryrefslogtreecommitdiff
path: root/client/js
diff options
context:
space:
mode:
authorrr-2016-06-12 14:04:42 +0200
committerrr-2016-06-12 14:04:52 +0200
commit1e48140b00da7c574717da750e41b5c95dc36cf1 (patch)
treee7c396abfdfefdab3f2a2043cea3315ecd3ee22f /client/js
parenta67db59d99c00e3066818fdfffb3a965ea7f2843 (diff)
client/comments: add global comment list
Diffstat (limited to 'client/js')
-rw-r--r--client/js/controllers/comments_controller.js27
-rw-r--r--client/js/views/comments_page_view.js27
-rw-r--r--client/js/views/endless_page_view.js4
-rw-r--r--client/js/views/manual_page_view.js4
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);

© 2015 - 2026 Jakob L. Kreuze