aboutsummaryrefslogtreecommitdiff
path: root/client/js/controls/comment_control.js
diff options
context:
space:
mode:
authorHunternif2021-08-04 01:56:00 +0100
committerHunternif2021-08-04 01:56:00 +0100
commitca861cdc44ca476cec2949f237bbc7503862ad58 (patch)
tree520f918a9a77432bf283b46b4296812eb4332ffe /client/js/controls/comment_control.js
parentdd03540398fcab11bfc2c3cebed2fb7a78592c16 (diff)
parent59452711668b9f7a7aeea3c57301b22882987c2b (diff)
Merge remote-tracking branch 'origin/master' into hunternif
# Conflicts: # client/css/post-content-control.styl # client/css/post-list-view.styl # client/html/post_edit_sidebar.tpl # client/js/controllers/post_list_controller.js # client/js/controllers/post_main_controller.js # client/js/controllers/post_upload_controller.js # client/js/controllers/tag_controller.js # client/js/controllers/user_list_controller.js # client/js/controls/expander_control.js # client/js/controls/post_content_control.js # client/js/controls/post_edit_sidebar_control.js # client/js/controls/post_readonly_sidebar_control.js # client/js/controls/tag_input_control.js # client/js/main.js # client/js/models/abstract_list.js # client/js/models/post.js # client/js/models/post_list.js # client/js/models/settings.js # client/js/models/tag.js # client/js/models/tag_list.js # client/js/tags.js # client/js/util/search.js # client/js/util/touch.js # client/js/util/uri.js # client/js/util/views.js # client/js/views/post_main_view.js # client/js/views/post_upload_view.js # client/js/views/posts_header_view.js # client/js/views/posts_page_view.js # client/js/views/settings_view.js # client/js/views/tag_view.js # client/package-lock.json # client/package.json # server/config.yaml.dist # server/szurubooru/api/__init__.py # server/szurubooru/api/post_api.py # server/szurubooru/api/tag_api.py # server/szurubooru/func/posts.py # server/szurubooru/func/tags.py # server/szurubooru/model/__init__.py # server/szurubooru/model/post.py # server/szurubooru/model/tag.py # server/szurubooru/search/configs/__init__.py # server/szurubooru/search/configs/post_search_config.py # server/szurubooru/search/executor.py # server/szurubooru/tests/api/test_post_retrieving.py # server/szurubooru/tests/api/test_post_updating.py # server/szurubooru/tests/api/test_tag_updating.py # server/szurubooru/tests/conftest.py # server/szurubooru/tests/func/test_posts.py # server/szurubooru/tests/func/test_tags.py # server/szurubooru/tests/search/configs/test_post_search_config.py
Diffstat (limited to 'client/js/controls/comment_control.js')
-rw-r--r--client/js/controls/comment_control.js198
1 files changed, 105 insertions, 93 deletions
diff --git a/client/js/controls/comment_control.js b/client/js/controls/comment_control.js
index 849dd4d..cdcfd53 100644
--- a/client/js/controls/comment_control.js
+++ b/client/js/controls/comment_control.js
@@ -1,12 +1,12 @@
-'use strict';
+"use strict";
-const api = require('../api.js');
-const misc = require('../util/misc.js');
-const events = require('../events.js');
-const views = require('../util/views.js');
+const api = require("../api.js");
+const misc = require("../util/misc.js");
+const events = require("../events.js");
+const views = require("../util/views.js");
-const template = views.getTemplate('comment');
-const scoreTemplate = views.getTemplate('score');
+const template = views.getTemplate("comment");
+const scoreTemplate = views.getTemplate("score");
class CommentControl extends events.EventTarget {
constructor(hostNode, comment, onlyEditing) {
@@ -16,104 +16,111 @@ class CommentControl extends events.EventTarget {
this._onlyEditing = onlyEditing;
if (comment) {
- comment.addEventListener(
- 'change', e => this._evtChange(e));
- comment.addEventListener(
- 'changeScore', e => this._evtChangeScore(e));
+ comment.addEventListener("change", (e) => this._evtChange(e));
+ comment.addEventListener("changeScore", (e) =>
+ this._evtChangeScore(e)
+ );
}
const isLoggedIn = comment && api.isLoggedIn(comment.user);
- const infix = isLoggedIn ? 'own' : 'any';
- views.replaceContent(this._hostNode, template({
- comment: comment,
- user: comment ? comment.user : api.user,
- canViewUsers: api.hasPrivilege('users:view'),
- canEditComment: api.hasPrivilege(`comments:edit:${infix}`),
- canDeleteComment: api.hasPrivilege(`comments:delete:${infix}`),
- onlyEditing: onlyEditing,
- }));
+ const infix = isLoggedIn ? "own" : "any";
+ views.replaceContent(
+ this._hostNode,
+ template({
+ comment: comment,
+ user: comment ? comment.user : api.user,
+ canViewUsers: api.hasPrivilege("users:view"),
+ canEditComment: api.hasPrivilege(`comments:edit:${infix}`),
+ canDeleteComment: api.hasPrivilege(`comments:delete:${infix}`),
+ onlyEditing: onlyEditing,
+ })
+ );
if (this._editButtonNodes) {
for (let node of this._editButtonNodes) {
- node.addEventListener('click', e => this._evtEditClick(e));
+ node.addEventListener("click", (e) => this._evtEditClick(e));
}
}
if (this._deleteButtonNode) {
- this._deleteButtonNode.addEventListener(
- 'click', e => this._evtDeleteClick(e));
+ this._deleteButtonNode.addEventListener("click", (e) =>
+ this._evtDeleteClick(e)
+ );
}
if (this._previewEditingButtonNode) {
- this._previewEditingButtonNode.addEventListener(
- 'click', e => this._evtPreviewEditingClick(e));
+ this._previewEditingButtonNode.addEventListener("click", (e) =>
+ this._evtPreviewEditingClick(e)
+ );
}
if (this._saveChangesButtonNode) {
- this._saveChangesButtonNode.addEventListener(
- 'click', e => this._evtSaveChangesClick(e));
+ this._saveChangesButtonNode.addEventListener("click", (e) =>
+ this._evtSaveChangesClick(e)
+ );
}
if (this._cancelEditingButtonNode) {
- this._cancelEditingButtonNode.addEventListener(
- 'click', e => this._evtCancelEditingClick(e));
+ this._cancelEditingButtonNode.addEventListener("click", (e) =>
+ this._evtCancelEditingClick(e)
+ );
}
this._installScore();
if (onlyEditing) {
- this._selectNav('edit');
- this._selectTab('edit');
+ this._selectNav("edit");
+ this._selectTab("edit");
} else {
- this._selectNav('readonly');
- this._selectTab('preview');
+ this._selectNav("readonly");
+ this._selectTab("preview");
}
}
get _formNode() {
- return this._hostNode.querySelector('form');
+ return this._hostNode.querySelector("form");
}
get _scoreContainerNode() {
- return this._hostNode.querySelector('.score-container');
+ return this._hostNode.querySelector(".score-container");
}
get _editButtonNodes() {
- return this._hostNode.querySelectorAll('li.edit>a, a.edit');
+ return this._hostNode.querySelectorAll("li.edit>a, a.edit");
}
get _previewEditingButtonNode() {
- return this._hostNode.querySelector('li.preview>a');
+ return this._hostNode.querySelector("li.preview>a");
}
get _deleteButtonNode() {
- return this._hostNode.querySelector('.delete');
+ return this._hostNode.querySelector(".delete");
}
get _upvoteButtonNode() {
- return this._hostNode.querySelector('.upvote');
+ return this._hostNode.querySelector(".upvote");
}
get _downvoteButtonNode() {
- return this._hostNode.querySelector('.downvote');
+ return this._hostNode.querySelector(".downvote");
}
get _saveChangesButtonNode() {
- return this._hostNode.querySelector('.save-changes');
+ return this._hostNode.querySelector(".save-changes");
}
get _cancelEditingButtonNode() {
- return this._hostNode.querySelector('.cancel-editing');
+ return this._hostNode.querySelector(".cancel-editing");
}
get _textareaNode() {
- return this._hostNode.querySelector('.tab.edit textarea');
+ return this._hostNode.querySelector(".tab.edit textarea");
}
get _contentNode() {
- return this._hostNode.querySelector('.tab.preview .comment-content');
+ return this._hostNode.querySelector(".tab.preview .comment-content");
}
get _heightKeeperNode() {
- return this._hostNode.querySelector('.keep-height');
+ return this._hostNode.querySelector(".keep-height");
}
_installScore() {
@@ -122,32 +129,35 @@ class CommentControl extends events.EventTarget {
scoreTemplate({
score: this._comment ? this._comment.score : 0,
ownScore: this._comment ? this._comment.ownScore : 0,
- canScore: api.hasPrivilege('comments:score'),
- }));
+ canScore: api.hasPrivilege("comments:score"),
+ })
+ );
if (this._upvoteButtonNode) {
- this._upvoteButtonNode.addEventListener(
- 'click', e => this._evtScoreClick(e, 1));
+ this._upvoteButtonNode.addEventListener("click", (e) =>
+ this._evtScoreClick(e, 1)
+ );
}
if (this._downvoteButtonNode) {
- this._downvoteButtonNode.addEventListener(
- 'click', e => this._evtScoreClick(e, -1));
+ this._downvoteButtonNode.addEventListener("click", (e) =>
+ this._evtScoreClick(e, -1)
+ );
}
}
enterEditMode() {
- this._selectNav('edit');
- this._selectTab('edit');
+ this._selectNav("edit");
+ this._selectTab("edit");
}
exitEditMode() {
if (this._onlyEditing) {
- this._selectNav('edit');
- this._selectTab('edit');
- this._setText('');
+ this._selectNav("edit");
+ this._selectTab("edit");
+ this._setText("");
} else {
- this._selectNav('readonly');
- this._selectTab('preview');
+ this._selectNav("readonly");
+ this._selectTab("preview");
this._setText(this._comment.text);
}
this._forgetHeight();
@@ -173,27 +183,31 @@ class CommentControl extends events.EventTarget {
_evtScoreClick(e, score) {
e.preventDefault();
- if (!api.hasPrivilege('comments:score')) {
+ if (!api.hasPrivilege("comments:score")) {
return;
}
- this.dispatchEvent(new CustomEvent('score', {
- detail: {
- comment: this._comment,
- score: this._comment.ownScore === score ? 0 : score,
- },
- }));
+ this.dispatchEvent(
+ new CustomEvent("score", {
+ detail: {
+ comment: this._comment,
+ score: this._comment.ownScore === score ? 0 : score,
+ },
+ })
+ );
}
_evtDeleteClick(e) {
e.preventDefault();
- if (!window.confirm('Are you sure you want to delete this comment?')) {
+ if (!window.confirm("Are you sure you want to delete this comment?")) {
return;
}
- this.dispatchEvent(new CustomEvent('delete', {
- detail: {
- comment: this._comment,
- },
- }));
+ this.dispatchEvent(
+ new CustomEvent("delete", {
+ detail: {
+ comment: this._comment,
+ },
+ })
+ );
}
_evtChange(e) {
@@ -206,26 +220,24 @@ class CommentControl extends events.EventTarget {
_evtPreviewEditingClick(e) {
e.preventDefault();
- this._contentNode.innerHTML =
- misc.formatMarkdown(this._textareaNode.value);
- this._selectTab('edit');
- this._selectTab('preview');
- }
-
- _evtEditClick(e) {
- e.preventDefault();
- this.enterEditMode();
+ this._contentNode.innerHTML = misc.formatMarkdown(
+ this._textareaNode.value
+ );
+ this._selectTab("edit");
+ this._selectTab("preview");
}
_evtSaveChangesClick(e) {
e.preventDefault();
- this.dispatchEvent(new CustomEvent('submit', {
- detail: {
- target: this,
- comment: this._comment,
- text: this._textareaNode.value,
- },
- }));
+ this.dispatchEvent(
+ new CustomEvent("submit", {
+ detail: {
+ target: this,
+ comment: this._comment,
+ text: this._textareaNode.value,
+ },
+ })
+ );
}
_evtCancelEditingClick(e) {
@@ -239,27 +251,27 @@ class CommentControl extends events.EventTarget {
}
_selectNav(modeName) {
- for (let node of this._hostNode.querySelectorAll('nav')) {
- node.classList.toggle('active', node.classList.contains(modeName));
+ for (let node of this._hostNode.querySelectorAll("nav")) {
+ node.classList.toggle("active", node.classList.contains(modeName));
}
}
_selectTab(tabName) {
this._ensureHeight();
- for (let node of this._hostNode.querySelectorAll('.tab, .tabs li')) {
- node.classList.toggle('active', node.classList.contains(tabName));
+ for (let node of this._hostNode.querySelectorAll(".tab, .tabs li")) {
+ node.classList.toggle("active", node.classList.contains(tabName));
}
}
_ensureHeight() {
this._heightKeeperNode.style.minHeight =
- this._heightKeeperNode.getBoundingClientRect().height + 'px';
+ this._heightKeeperNode.getBoundingClientRect().height + "px";
}
_forgetHeight() {
this._heightKeeperNode.style.minHeight = null;
}
-};
+}
module.exports = CommentControl;

© 2015 - 2026 Jakob L. Kreuze