summaryrefslogtreecommitdiff
path: root/client/js/controllers/post_upload_controller.js
diff options
context:
space:
mode:
authorrr- <rr-@sakuya.pl>2016-08-20 22:40:25 +0200
committerrr- <rr-@sakuya.pl>2016-08-21 23:43:36 +0200
commit5bcf44aa2de4a0f4e87fee7c36eaed40874165b6 (patch)
tree256b5c8fda6f6b46acef9d16f5e8c13a238231fe /client/js/controllers/post_upload_controller.js
parentb7e9cbd541f413ca425f69a138b9bad0cff5e728 (diff)
client/posts: implement upload form
Diffstat (limited to 'client/js/controllers/post_upload_controller.js')
-rw-r--r--client/js/controllers/post_upload_controller.js50
1 files changed, 48 insertions, 2 deletions
diff --git a/client/js/controllers/post_upload_controller.js b/client/js/controllers/post_upload_controller.js
index 82f3b49..aec34d5 100644
--- a/client/js/controllers/post_upload_controller.js
+++ b/client/js/controllers/post_upload_controller.js
@@ -1,13 +1,59 @@
'use strict';
+const router = require('../router.js');
+const misc = require('../util/misc.js');
const topNavigation = require('../models/top_navigation.js');
-const EmptyView = require('../views/empty_view.js');
+const Post = require('../models/post.js');
+const PostUploadView = require('../views/post_upload_view.js');
class PostUploadController {
constructor() {
topNavigation.activate('upload');
topNavigation.setTitle('Upload');
- this._emptyView = new EmptyView();
+ this._view = new PostUploadView();
+ this._view.addEventListener('change', e => this._evtChange(e));
+ this._view.addEventListener('submit', e => this._evtSubmit(e));
+ }
+
+ _evtChange(e) {
+ if (e.detail.uploadables.length) {
+ misc.enableExitConfirmation();
+ } else {
+ misc.disableExitConfirmation();
+ }
+ this._view.clearMessages();
+ }
+
+ _evtSubmit(e) {
+ this._view.disableForm();
+ this._view.clearMessages();
+
+ e.detail.uploadables.reduce((promise, uploadable) => {
+ return promise.then(
+ () => {
+ let post = new Post();
+ post.safety = uploadable.safety;
+ if (uploadable.url) {
+ post.newContentUrl = uploadable.url;
+ } else {
+ post.newContent = uploadable.file;
+ }
+ return post.save(uploadable.anonymous)
+ .then(() => {
+ this._view.removeUploadable(uploadable);
+ return Promise.resolve();
+ });
+ });
+ }, Promise.resolve()).then(
+ () => {
+ misc.disableExitConfirmation();
+ const ctx = router.show('/posts');
+ ctx.controller.showSuccess('Posts uploaded.');
+ }, errorMessage => {
+ this._view.showError(errorMessage);
+ this._view.enableForm();
+ return Promise.reject();
+ });
}
}