function showReplyForm(uid, cid, level, user_id) {
const replyBox = `reply-box-${uid}`;
let replyBoxElem = document.getElementById( replyBox );
replyBoxElem.style.display = "none";
let divElem = document.getElementById( `reply-row-${uid}` );
divElem.innerHTML = replyFormHtmlString(uid, cid, level, user_id);
var textareaElem = document.getElementById( `reply-text-${uid}` );
textareaElem.focus();
var cancelElem = document.getElementById( `cancel-btn-${uid}` );
document.addEventListener('click', function(event) {
var isClickInside = divElem.contains(event.target)
|| replyBoxElem.contains(event.target);
if( !isClickInside ) {
cancelElem.click();
}
});
autoHeightOnTextarea(); }
function autoHeightOnTextarea() {
var tx = document.getElementsByTagName('textarea');
for (var i = 0; i < tx.length; i++) {
tx[i].setAttribute('style', 'height:' + (tx[i].scrollHeight) + 'px;overflow-y:hidden;');
tx[i].addEventListener("input", OnInput, false);
}
}
function replyFormHtmlString(uid, cid, level, user_id) {
return `
<form method="POST" action="/replies" id="reply-form-${uid}" name="reply-form" >
<div class="add-reply">
<textarea
name="message"
rows="1"
placeholder="Write a Reply"
id="reply-text-${uid}"
required
></textarea>
<input
name="parent_id"
type="text"
value="${uid}"
hidden
/>
<input
name="comment_id"
type="text"
value="${cid}"
hidden
/>
<input
name="level"
type="text"
value="${level}"
hidden
/>
<input
name="user_id"
type="text"
value="${user_id}"
hidden
/>
</div>
<div class="add-reply-control">
<input
type="button"
onclick="cancelReply('${uid}')"
value="Cancel"
id="cancel-btn-${uid}"
style="border: none; background: none; padding: 0; color: red; margin-left: 5px;"
/>
<input
type="submit"
value="Reply"
style="margin-left: 10px; margin-top: 2px"
/>
<span
style="font-size: 0.7em; margin-left: 2px"
>Mark as Anonymous</span>
<input
name="is-anonymous"
type="checkbox"
style="margin-left: 5px"
/>
</div>
</form>
`
}
function OnInput() {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
}
function cancelReply(uid) {
let divElem = document.getElementById( `reply-row-${uid}` );
divElem.innerHTML = "";
let replyBoxElem = document.getElementById( `reply-box-${uid}` );
replyBoxElem.style.display = "block";
}
function toggleCommentsTo(status, cid) {
hideDropdown(cid);
let cb_elem = document.getElementById(`cb-enable-${cid}`);
cb_elem.checked = status == 'enable';
document.getElementById(`update-status-form-${cid}`).submit();
}
function showCommentEditForm(elem, unique_id, user_id) {
let msgPara = document.getElementById( `msg-${unique_id}` );
let currentMsg = msgPara.innerText;
msgPara.innerHTML = editCommentFormHtmlString(unique_id, user_id, currentMsg);
elem.disabled = true;
autoHeightOnTextarea(); hideDropdown(unique_id);
hideThreeDots(unique_id);
}
function editCommentFormHtmlString(unique_id, user_id, message) {
return `
<form method="POST" action="/comment_message" id="edit-form-${unique_id}" name="edit-form" >
<div class="edit-comment">
<input
name="unique_id"
type="text"
value="${unique_id}"
hidden
/>
<input
name="user_id"
type="text"
value="${user_id}"
hidden
/>
<textarea
name="message"
rows="1"
title="edit message"
placeholder="Edit the comment"
required
>${message}</textarea>
</div>
<div class="edit-comment-control">
<input
type="button"
onclick="cancelUpdate('${unique_id}','${message}'); showThreeDots('${unique_id}');"
value="Cancel"
id="cancel-comment-edit"
style="border: none; background: none; padding: 0; color: red; margin-left: 5px;"
/>
<input
id="submit-comment-edit"
onclick="showThreeDots('${unique_id}');"
type="submit"
value="Submit"
style="margin-top: 2px"
/>
</div>
</form>
`
}
function showReplyEditForm(elem, unique_id, user_id) {
let msgPara = document.getElementById( `msg-${unique_id}` );
let currentMsg = msgPara.innerText;
msgPara.innerHTML = editReplyFormHtmlString(unique_id, user_id, currentMsg);
elem.disabled = true;
autoHeightOnTextarea(); hideDropdown(unique_id);
hideThreeDots(unique_id);
}
function editReplyFormHtmlString(unique_id, user_id, message) {
return `
<form method="POST" action="/reply_message" id="edit-form-${unique_id}" name="edit-form" >
<div class="edit-reply">
<input
name="unique_id"
type="text"
value="${unique_id}"
hidden
/>
<input
type="text"
name="user_id"
id="user_id"
value="${user_id}}"
hidden
/>
<textarea
id="edit-text-${unique_id}"
name="message"
title="enter reply message here"
placeholder="Add a reply"
rows="1"
required
>${message}</textarea>
</div>
<div class="edit-reply-control">
<input
type="button"
onclick="cancelUpdate('${unique_id}', '${message}'); showThreeDots('${unique_id}');"
value="Cancel"
id="cancel-reply-edit"
style="border: none; background: none; padding: 0; color: red; margin-left: 5px;"
/>
<input
id="submit-reply-edit"
onclick="showThreeDots('${unique_id}');"
type="submit"
value="Submit"
style="margin-top: 2px"
/>
</div>
</form>
`
}
function cancelUpdate(uid, msg) {
let msgPara = document.getElementById( `msg-${uid}` );
msgPara.innerHTML = msg;
}
function trashComment(uid, user_id) {
hideDropdown(uid);
return fetch(`/comments/${uid}/${user_id}`, {
method: 'delete'
})
.then(response => {
location.reload();
response.json();
});
}
function trashReply(uid) {
hideDropdown(uid);
return fetch(`/replies/${uid}`, {
method: 'delete'
})
.then(response => {
location.reload();
response.json();
});
}
function toggle_more_message(uid) {
var dots = document.getElementById("dots-"+uid);
var moreText = document.getElementById("more-"+uid);
var btnText = document.getElementById("btn-more-"+uid);
if (dots.style.display === "none") {
dots.style.display = "inline";
btnText.innerHTML = "(more)";
moreText.style.display = "none";
} else {
dots.style.display = "none";
btnText.innerHTML = "(less)";
moreText.style.display = "inline";
}
}
function toggle_show_replies(uid) {
var replies = document.getElementById("replies-"+uid);
if (replies.style.display === "none") {
replies.style.display = "block";
show_limited_reply_items(uid);
add_to_shown_replies(uid);
} else {
replies.style.display = "none";
remove_from_shown_replies(uid);
}
}
function toggle_show_replies_on_restoring(uid) {
var replies = document.getElementById("replies-"+uid);
if (replies.style.display === "none") {
replies.style.display = "block";
show_limited_reply_items(uid);
}
}
function add_to_shown_replies(uid) {
let currentList = sessionStorage.getItem("shown_replies");
currentList = (currentList == null) ? '' : currentList;
let indx = currentList.indexOf(uid);
if (indx > -1) return; let newList = currentList.concat(','+uid);
sessionStorage.setItem('shown_replies', newList);
}
function remove_from_shown_replies(uid) {
let currentList = sessionStorage.getItem("shown_replies");
let newList = (currentList != null) ? currentList.replace(','+uid, '') : '' ;
sessionStorage.setItem('shown_replies', newList);
}
function restore_shown_replies() {
let currentList = sessionStorage.getItem("shown_replies");
ids = currentList.split(',');
for(i=0; i<ids.length; i++) {
if (ids[i] !== null && ids[i] !== '') {
toggle_show_replies_on_restoring(ids[i]);
}
}
}
function show_limited_reply_items(uid) {
var val = document.getElementById("reply-display-total-count-"+uid).value;
var total = parseInt( val );
val = document.getElementById("reply-display-count-"+uid).value;
var count = parseInt( val );
var iter_count = count < total ? count : total;
for(i = 0; i < iter_count; i++) {
document.getElementById(`reply-item-${uid}-${i}`).style.display = "block";
}
var more_replies_btn = document.getElementById("show-more-replies-"+uid);
if (count < total) {
more_replies_btn.hidden = false;
} else {
more_replies_btn.hidden = true;
}
}
function show_more_replies(uid) {
var val = document.getElementById("reply-display-count-additional-"+uid).value;
var more_count = parseInt( val );
val = document.getElementById("reply-display-total-count-"+uid).value;
var total = parseInt( val );
var elem = document.getElementById("reply-display-count-"+uid);
var existing_count = parseInt( elem.value );
var new_count = (existing_count + more_count) < total ? (existing_count+more_count) : total;
elem.setAttribute("value", new_count);
show_limited_reply_items(uid); }
window.addEventListener('scroll',function() {
sessionStorage.setItem('scrollPosition', window.scrollY);
},false);
window.addEventListener('load',function() {
if(sessionStorage.getItem('scrollPosition') !== null)
window.scrollTo(0, sessionStorage.getItem('scrollPosition'));
},false);
window.addEventListener('DOMContentLoaded',function() {
if(sessionStorage.getItem("shown_replies") !== null)
restore_shown_replies(); },false);
function showDropdown(uid){
var content = document.getElementById("dropdown-content-"+uid);
content.style.display = "block";
}
function hideThreeDots(uid) {
var img = document.getElementById("menu-img-"+uid);
img.classList.remove("shown"); img.classList.add("hidden"); }
function hideDropdown(uid){
var content = document.getElementById("dropdown-content-"+uid);
content.style.display = "none";
}
function showThreeDots(uid) {
var img = document.getElementById("menu-img-"+uid);
img.classList.remove("hidden"); img.classList.add("shown"); }
function changeAvatar(elem) {
var imgElem = document.getElementById("add-comment-avatar");
if (elem.checked) {
imgElem.src = imgElem.alt;
} else {
imgElem.src = imgElem.title;
}
}