diff options
Diffstat (limited to 'client/js/controllers/post_upload_controller.js')
| -rw-r--r-- | client/js/controllers/post_upload_controller.js | 50 |
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(); + }); } } |