aboutsummaryrefslogtreecommitdiff
path: root/client/js/controllers/post_controller.js
diff options
context:
space:
mode:
authorrr-2016-06-17 20:25:44 +0200
committerrr-2016-06-18 10:35:20 +0200
commita697aba1b071bf8a4b2d4c26fd92f2655b77bd03 (patch)
tree4270eff4809a15ed1c9965730e53da3db5b7a897 /client/js/controllers/post_controller.js
parent54e3099c5696e0b4fc7b05fb5ecc41ab4726628b (diff)
client/general: remove api calls from controls
Introduce some missing models along the way
Diffstat (limited to 'client/js/controllers/post_controller.js')
-rw-r--r--client/js/controllers/post_controller.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/client/js/controllers/post_controller.js b/client/js/controllers/post_controller.js
index 0a63e5e..a6b2430 100644
--- a/client/js/controllers/post_controller.js
+++ b/client/js/controllers/post_controller.js
@@ -1,7 +1,9 @@
'use strict';
const api = require('../api.js');
+const misc = require('../util/misc.js');
const settings = require('../models/settings.js');
+const Comment = require('../models/comment.js');
const Post = require('../models/post.js');
const topNavigation = require('../models/top_navigation.js');
const PostView = require('../views/post_view.js');
@@ -17,6 +19,7 @@ class PostController {
this._decorateSearchQuery('')),
]).then(responses => {
const [post, aroundResponse] = responses;
+ this._post = post;
this._view = new PostView({
post: post,
editMode: editMode,
@@ -26,6 +29,28 @@ class PostController {
canListComments: api.hasPrivilege('comments:list'),
canCreateComments: api.hasPrivilege('comments:create'),
});
+ if (this._view.sidebarControl) {
+ this._view.sidebarControl.addEventListener(
+ 'favorite', e => this._evtFavoritePost(e));
+ this._view.sidebarControl.addEventListener(
+ 'unfavorite', e => this._evtUnfavoritePost(e));
+ this._view.sidebarControl.addEventListener(
+ 'score', e => this._evtScorePost(e));
+ }
+ if (this._view.commentFormControl) {
+ this._view.commentFormControl.addEventListener(
+ 'change', e => this._evtCommentChange(e));
+ this._view.commentFormControl.addEventListener(
+ 'submit', e => this._evtCreateComment(e));
+ }
+ if (this._view.commentListControl) {
+ this._view.commentListControl.addEventListener(
+ 'change', e => this._evtUpdateComment(e));
+ this._view.commentListControl.addEventListener(
+ 'score', e => this._evtScoreComment(e));
+ this._view.commentListControl.addEventListener(
+ 'delete', e => this._evtDeleteComment(e));
+ }
}, response => {
this._view = new EmptyView();
this._view.showError(response.description);
@@ -45,6 +70,71 @@ class PostController {
}
return text.trim();
}
+
+ _evtCommentChange(e) {
+ misc.enableExitConfirmation();
+ }
+
+ _evtCreateComment(e) {
+ // TODO: disable form
+ const comment = Comment.create(this._post.id);
+ comment.text = e.detail.text;
+ comment.save()
+ .then(() => {
+ this._post.comments.add(comment);
+ this._view.commentFormControl.setText('');
+ // TODO: enable form
+ misc.disableExitConfirmation();
+ }, errorMessage => {
+ this._view.commentFormControl.showError(errorMessage);
+ // TODO: enable form
+ });
+ }
+
+ _evtUpdateComment(e) {
+ // TODO: disable form
+ e.detail.comment.text = e.detail.text;
+ e.detail.comment.save()
+ .catch(errorMessage => {
+ e.detail.target.showError(errorMessage);
+ // TODO: enable form
+ });
+ }
+
+ _evtScoreComment(e) {
+ e.detail.comment.setScore(e.detail.score)
+ .catch(errorMessage => {
+ window.alert(errorMessage);
+ });
+ }
+
+ _evtDeleteComment(e) {
+ e.detail.comment.delete()
+ .catch(errorMessage => {
+ window.alert(errorMessage);
+ });
+ }
+
+ _evtScorePost(e) {
+ e.detail.post.setScore(e.detail.score)
+ .catch(errorMessage => {
+ window.alert(errorMessage);
+ });
+ }
+
+ _evtFavoritePost(e) {
+ e.detail.post.addToFavorites()
+ .catch(errorMessage => {
+ window.alert(errorMessage);
+ });
+ }
+
+ _evtUnfavoritePost(e) {
+ e.detail.post.removeFromFavorites()
+ .catch(errorMessage => {
+ window.alert(errorMessage);
+ });
+ }
}
module.exports = router => {

© 2015 - 2026 Jakob L. Kreuze