1acceb941d
Print all links through new uri.js component Refactor the router to use more predictable parsing Fix linking to entities with weird names (that contain slashes, + etc.)
88 lines
2.7 KiB
JavaScript
88 lines
2.7 KiB
JavaScript
'use strict';
|
|
|
|
const router = require('../router.js');
|
|
const api = require('../api.js');
|
|
const misc = require('../util/misc.js');
|
|
const uri = require('../util/uri.js');
|
|
const settings = require('../models/settings.js');
|
|
const Post = require('../models/post.js');
|
|
const PostList = require('../models/post_list.js');
|
|
const PostDetailView = require('../views/post_detail_view.js');
|
|
const BasePostController = require('./base_post_controller.js');
|
|
const EmptyView = require('../views/empty_view.js');
|
|
|
|
class PostDetailController extends BasePostController {
|
|
constructor(ctx, section) {
|
|
super(ctx);
|
|
|
|
Post.get(ctx.parameters.id).then(post => {
|
|
this._id = ctx.parameters.id;
|
|
post.addEventListener('change', e => this._evtSaved(e, section));
|
|
this._installView(post, section);
|
|
}, error => {
|
|
this._view = new EmptyView();
|
|
this._view.showError(error.message);
|
|
});
|
|
}
|
|
|
|
showSuccess(message) {
|
|
this._view.showSuccess(message);
|
|
}
|
|
|
|
_installView(post, section) {
|
|
this._view = new PostDetailView({
|
|
post: post,
|
|
section: section,
|
|
canMerge: api.hasPrivilege('posts:merge'),
|
|
});
|
|
|
|
this._view.addEventListener('select', e => this._evtSelect(e));
|
|
this._view.addEventListener('merge', e => this._evtMerge(e));
|
|
}
|
|
|
|
_evtSelect(e) {
|
|
this._view.clearMessages();
|
|
this._view.disableForm();
|
|
Post.get(e.detail.postId).then(post => {
|
|
this._view.selectPost(post);
|
|
this._view.enableForm();
|
|
}, error => {
|
|
this._view.showError(error.message);
|
|
this._view.enableForm();
|
|
});
|
|
}
|
|
|
|
_evtSaved(e, section) {
|
|
misc.disableExitConfirmation();
|
|
if (this._id !== e.detail.post.id) {
|
|
router.replace(
|
|
uri.formatClientLink('post', e.detail.post.id, section),
|
|
null, false);
|
|
}
|
|
}
|
|
|
|
_evtMerge(e) {
|
|
this._view.clearMessages();
|
|
this._view.disableForm();
|
|
e.detail.post.merge(e.detail.targetPost.id, e.detail.useOldContent)
|
|
.then(() => {
|
|
this._installView(e.detail.post, 'merge');
|
|
this._view.showSuccess('Post merged.');
|
|
router.replace(
|
|
uri.formatClientLink(
|
|
'post', e.detail.targetPost.id, 'merge'),
|
|
null, false);
|
|
}, error => {
|
|
this._view.showError(error.message);
|
|
this._view.enableForm();
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = router => {
|
|
router.enter(
|
|
['post', ':id', 'merge'],
|
|
(ctx, next) => {
|
|
ctx.controller = new PostDetailController(ctx, 'merge');
|
|
});
|
|
};
|