105 lines
3.1 KiB
JavaScript
105 lines
3.1 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");
|
|
});
|
|
};
|