"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"); }); };