diff options
| author | rr- | 2016-06-17 20:25:44 +0200 |
|---|---|---|
| committer | rr- | 2016-06-18 10:35:20 +0200 |
| commit | a697aba1b071bf8a4b2d4c26fd92f2655b77bd03 (patch) | |
| tree | 4270eff4809a15ed1c9965730e53da3db5b7a897 /client/js/controllers/post_controller.js | |
| parent | 54e3099c5696e0b4fc7b05fb5ecc41ab4726628b (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.js | 90 |
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 => { |