summaryrefslogtreecommitdiff
path: root/client/js/controls/post_readonly_sidebar_control.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/js/controls/post_readonly_sidebar_control.js')
-rw-r--r--client/js/controls/post_readonly_sidebar_control.js76
1 files changed, 72 insertions, 4 deletions
diff --git a/client/js/controls/post_readonly_sidebar_control.js b/client/js/controls/post_readonly_sidebar_control.js
index d11fa92..fc26281 100644
--- a/client/js/controls/post_readonly_sidebar_control.js
+++ b/client/js/controls/post_readonly_sidebar_control.js
@@ -2,23 +2,28 @@
const api = require("../api.js");
const events = require("../events.js");
+const settings = require("../models/settings.js");
const views = require("../util/views.js");
const uri = require("../util/uri.js");
const misc = require("../util/misc.js");
+const PostMetricListControl = require("./post_metric_list_control.js");
+const PostList = require("../models/post_list.js");
const template = views.getTemplate("post-readonly-sidebar");
const scoreTemplate = views.getTemplate("score");
const favTemplate = views.getTemplate("fav");
+const similarItemTemplate = views.getTemplate("similar-post-item")
class PostReadonlySidebarControl extends events.EventTarget {
- constructor(hostNode, post, postContentControl) {
+ constructor(hostNode, ctx, postContentControl) {
super();
this._hostNode = hostNode;
- this._post = post;
+ this._ctx = ctx;
+ this._post = ctx.post;
this._postContentControl = postContentControl;
- post.addEventListener("changeFavorite", (e) => this._evtChangeFav(e));
- post.addEventListener("changeScore", (e) => this._evtChangeScore(e));
+ this._post.addEventListener("changeFavorite", (e) => this._evtChangeFav(e));
+ this._post.addEventListener("changeScore", (e) => this._evtChangeScore(e));
views.replaceContent(
this._hostNode,
@@ -28,6 +33,7 @@ class PostReadonlySidebarControl extends events.EventTarget {
canListPosts: api.hasPrivilege("posts:list"),
canEditPosts: api.hasPrivilege("posts:edit"),
canViewTags: api.hasPrivilege("tags:view"),
+ canViewSimilar: api.hasPrivilege("posts:view:similar"),
escapeTagName: uri.escapeTagName,
extractRootDomain: uri.extractRootDomain,
getPrettyName: misc.getPrettyName,
@@ -38,6 +44,13 @@ class PostReadonlySidebarControl extends events.EventTarget {
this._installScore();
this._installFitButtons();
this._syncFitButton();
+ if (this._metricsListNode) {
+ this._metricsControl = new PostMetricListControl(
+ this._metricsListNode, this._post
+ );
+ }
+ this._loadSimilarPosts();
+ this._loadLookalikePosts();
}
get _scoreContainerNode() {
@@ -80,6 +93,22 @@ class PostReadonlySidebarControl extends events.EventTarget {
return this._hostNode.querySelector(".fit-height");
}
+ get _metricsListNode() {
+ return this._hostNode.querySelector("ul.compact-post-metrics");
+ }
+
+ get _similarListNode() {
+ return this._hostNode.querySelector("nav.similar ul");
+ }
+
+ get _lookalikesNode() {
+ return this._hostNode.querySelector("nav.lookalikes");
+ }
+
+ get _lookalikesListNode() {
+ return this._hostNode.querySelector("nav.lookalikes ul");
+ }
+
_installFitButtons() {
this._fitBothButtonNode.addEventListener(
"click",
@@ -218,6 +247,45 @@ class PostReadonlySidebarControl extends events.EventTarget {
_evtChangeScore(e) {
this._installScore();
}
+
+ _loadSimilarPosts() {
+ return PostList.search(
+ "similar:" + this._post.id + " -id:" + this._post.id,
+ 0,
+ parseInt(settings.get().similarPosts),
+ ["id", "thumbnailUrl"],
+ )
+ .then((response) => {
+ const listNode = this._similarListNode;
+ for (let post of response.results) {
+ let poseNode = similarItemTemplate({
+ id: post.id,
+ thumbnailUrl: post.thumbnailUrl,
+ });
+ listNode.appendChild(poseNode);
+ }
+ });
+ }
+
+ _loadLookalikePosts() {
+ const limit = parseInt(settings.get().similarPosts);
+ const fields = ["id", "thumbnailUrl"];
+ const threshold = 1;
+ return PostList.reverseSearch(this._post.id, limit, threshold, fields)
+ .then((response) => {
+ if (response.results.length === 0) {
+ this._lookalikesNode.style.display = "none";
+ }
+ const listNode = this._lookalikesListNode;
+ for (let post of response.results) {
+ let poseNode = similarItemTemplate({
+ id: post.id,
+ thumbnailUrl: post.thumbnailUrl,
+ });
+ listNode.appendChild(poseNode);
+ }
+ });
+ }
}
module.exports = PostReadonlySidebarControl;