var SITE_URL = "https://chatplayshare.com";
if(!URL_ROOT){
var URL_ROOT = "/";
}
var plugin = {
name : "comments",
comments : {},
commentTimeout : null,
commentsParsing : false,
addingComment : false,
replyingComment : false,
newChild : false,
newChildParent : false,
options :{},
createOverlay: function(container, button){
button.html("");
container.append("
");
},
hideOverlay: function(container, button){
button.html("
");
container.find(".details_overlay").remove();
},
integrate : function(plugins,options){
var framework = this;
var headID = document.getElementsByTagName("head")[0];
if(document.getElementById("comments_plugin_css") == null){
var cssNode = document.createElement('link');
cssNode.id = "comments_plugin_css";
cssNode.type = 'text/css';
cssNode.rel = 'stylesheet';
cssNode.href = URLROOT + 'plugins/comments/css/comments.css';
cssNode.media = 'screen';
headID.appendChild(cssNode);
}
if(document.getElementById("comments_plugin_mobile_css") == null){
var cssNode = document.createElement('link');
cssNode.id = "comments_plugin_mobile_css";
cssNode.type = 'text/css';
cssNode.rel = 'stylesheet';
cssNode.href = URLROOT + 'plugins/comments/css/mobile/comments.css';
cssNode.media = 'screen';
headID.appendChild(cssNode);
}
var plugin = this;
this.options = options;
$(document).ready(function(){
var html = "\
\
";
var ele = $('#' + options.element)
ele.append(html);
if(typeof(uploader) != "undefined"){
new uploader({
field:ele.find(".comment_box_container"),
button:ele.find(".upload_button").get(0),
insertBefore:false,
containField:false,
stacked: false,
fitted: true,
floatRight:false
});
ele.find(".comment_box_buttons").css({position:"absolute"});
}
var textarea = ele.find("#comment");
var addComment = ele.find(".send_button");
if(addComment.length > 0){
addComment.click(function(){
framework.createOverlay(ele.find(".comment_box_container"),addComment);
plugin.addComment(textarea,null,function(comment){
framework.hideOverlay(ele.find(".comment_box_container"),addComment);
if(typeof(comment.error) == "undefined"){
textarea.html("");
}
});
});
}
var checkScroll = function(field){
console.log(field.clientHeight);
if(field.clientHeight < field.scrollHeight || field.clientHeight >= 67){
ele.addClass("comment_scroll");
}else{
ele.removeClass("comment_scroll");
}
};
textarea.keyup(function(e){
var Ucode = e.keyCode? e.keyCode : e.charCode;
checkScroll(this);
});
//setupCheckboxes();
plugin.comments = options.comments;
if(typeof(plugin.comments) != "object"){
plugin.comments = {};
}
plugin.processComments(plugin.comments, options.entityID);
if($("#comment_sort").length > 0){
$("#comment_sort").change(function(){
$d.helpers.showOverlay($("#comments_list_container"));
$d.network.post(URLROOT+"comments/sort/" + options.type,{entity:options.entityID,sort:$("#comment_sort").val(),session_id:""},function(result){
options.comments = result;
plugin.processComments(result)
});
});
}
if("" != ""){
if(typeof(typeof window[""]) === "function"){
;
}
}
$d.initCheckboxes(ele);
$d.initSelects(ele);
});
},
processComment : function(comment,append,element,fadeIn){
var plugin = this;
var framework = this;
if(comment != null){
var image = "";
if(comment.image.startsWith("http")){
image = comment.image;
}else{
image = SITE_URL + comment.image;
}
var commentUserImage = "
";
var commentUsername = comment.username;
if(comment.link && comment.link != "" && comment.deleted == false) {
commentUserImage = "
";
commentUsername = "
"+comment.username+"";
}
var li = $(document.createElement("li"));
li.addClass("comment_item clearfix");
li.attr("data-id",comment.id);
li.attr("point-count",comment.score);
li.attr("data-parent",comment.parent);
li.attr("data-level",comment.level);
li.attr("data-type",comment.type);
li.attr("data-children",0);
li.attr("data-guildings",comment.guilds);
li.addClass("level-"+comment.level);
if(comment.parent > 0){
var p = $("li[data-id="+comment.parent+"] > ul");
if(p.length > 0){
element = p;
}
}
if(comment.level > 1){
li.addClass("sub-comment");
var parent = $(".comment_item[data-id='"+comment.parent+"']");
parent.addClass("has-children");
parent.data("children",parent.data("children") + 1);
if(parent.length){
var setText = function(parent,e){
var text = "Show";
if(e.hasClass("collapsed")){
text = "Hide";
}
var coText = "comment";
if(parent.data("children") > 1){
coText += "s";
}
e.attr("title",text + " " + parent.data("children") + " " + coText);
e.find(".comment_count").html(parent.data("children"));
};
var e = parent.find("> .comment_container .collapse_comments");
if(e.length == 0){
parent.find(".comment_left").prepend("");
e = parent.find("> .comment_container .collapse_comments");
console.log(e);
e.click(function(){
var ele = $(this);
if(parent.hasClass("collapsed")){
parent.removeClass("collapsed");
}else{
parent.addClass("collapsed");
}
setText(parent,e);
});
}
if(e.length > 0){
setText(parent,e);
}
}
}
var container = $(document.createElement("div"));
container.addClass("comment_container");
container.html("\
\
\
\
\
\
\
\
\
\
");
li.append(container);
li.append("
");
if(comment.loggedIn){
if(comment.deleted == false){
container.find(".comment_left").append("");
container.find(".comment_voting_buttons").append("
\
");
var upvote = container.find(".upVote");
if(upvote.length > 0){
upvote.click(function(){
plugin.upvote(comment.id);
});
}
var downvote = container.find(".downVote");
if(downvote.length > 0){
downvote.click(function(){
plugin.downvote(comment.id);
});
}
var guildButton = container.find(".comment_guild");
var updateGuildCount = function(){
var con = guildButton.find(".comment_guilds");
if(li.data("guildings") > 0){
con.html(li.data("guildings"));
li.addClass("guilded");
}else{
con.html("");
li.removeClass("guilded");
}
};
updateGuildCount();
guildButton.click(function(){
var doGuild = function(){};
doGuild = function(c){
$d.network.post(URLROOT+"credits/guild",{entity:comment.id,type:"comment",uid:comment.user,confirm:c},function(data){
if(data == "confirm"){
if(confirm("You've already guilded this comment are you sure you'd like to give it another one?")){
doGuild(1);
}
}else{
if(data != false){
li.data("guildings",data);
}else{
alert("You don't have enough credits");
}
updateGuildCount();
}
});
};
doGuild(0);
});
var replyButton = $("
");
container.find(".comment_buttons").append(replyButton);
replyButton.click(function(){
var existing = $(".comment_reply_box[data-parent="+comment.id+"]");
$(".comment_reply_box").remove();
$(".replying").removeClass("replying");
if(!existing.length){
container.addClass("replying");
var replyBox = $("");
if(typeof(uploader) != "undefined"){
new uploader({
field:$(replyBox).find(".comment_reply_content"),
button:$(replyBox).find(".upload_button").get(0),
insertBefore:false,
containField:false,
stacked: false,
fitted: true,
floatRight:false
});
}else{
replyBox.find(".upload_button").hide();
}
var textarea = replyBox.find(".textarea");
if(comment.level == 21){
textarea.html("@"+comment.username + " ");
}
var checkScroll = function(field){
if(field.clientHeight < field.scrollHeight || field.clientHeight >= 65){
$(replyBox).addClass("comment_scroll");
}else{
$(replyBox).removeClass("comment_scroll");
}
};
textarea.keyup(function(e){
var Ucode = e.keyCode? e.keyCode : e.charCode;
if(Ucode == 13) {
if(e.shiftKey == false){
e.preventDefault();
$(this).parent().parent().parent().find(".send_button").click();
return false;
}else{
checkScroll(this);
}
}else{
checkScroll(this);
}
});
replyBox.find(".send_button").click(function(){
var text = $(this).parent().parent().parent().find(".textarea");
var par = $(this).parent().parent().parent();
var button = $(this);
framework.createOverlay(text.parent(),$(this));
var p = par.data("parent");
if(comment.level == 21){
p = par.data("cparent");
}
plugin.addComment(text,p,function(comment){
if(typeof(comment.error) == "undefined"){
par.remove();
container.removeClass("replying");
}else{
framework.hideOverlay(text.parent(),button);
}
});
});
container.after(replyBox);
textarea.focus();
}
});
if(comment.delete == true){
li.addClass("deleteable");
var deleteButton = $("
");
container.find(".comment_buttons").append(deleteButton);
deleteButton.click(function(){
$(".comment_reply_box").remove();
container.removeClass("replying");
if(confirm("Are you sure you want to delete this comment?")){
var comment = $(this).attr("data-id");
var p = $(this).parent().parent().parent().parent();
var type = p.parent().data("type");
$d.helpers.showOverlay(p,"",false,false);
$d.network.post(URLROOT+"comments/delete/" + type,{id:comment,session_id:""},function(){
plugin.comments[comment] = null;
var children = $(".comment_item[data-parent="+comment+"]");
if(children.length > 0){
p.find(".comment_username").html("deleted");
p.find(".comment_reply").remove();
container.removeClass("replying");
p.find(".comment_delete").remove();
p.find(".comment_voting_buttons").remove();
p.addClass("comment_deleted");
p.find(".comment_content").html("");
$d.helpers.hideOverlay();
}else{
p.remove();
}
});
}
});
}
}else{
container.addClass("comment_deleted");
}
}
if(comment.previews && comment.previews.length > 0){
}
var content = container.find(".comment_content");
if(content.length > 0) {
content.html("");
}
if(fadeIn == true){
li.hide();
}
if(typeof(append) != "undefined" && append == true && typeof(element) != "undefined" && element != null){
element.append(li);
}else{
element.prepend(li);
}
if(fadeIn == true){
li.fadeIn(500);
}
if(typeof(comment.children) != "undefined" && comment.children != null){
for(var x in comment.children){
plugin.processComment(comment.children[x],true,element);
}
}
return li;
}
},
processComments : function(comments, id) {
var plugin = this;
var process = function(comments) {
if(comments && typeof(comments) != "undefined" && comments != null) {
var element = $("#comments_list");
element.html("");
var count = 0;
for(var commentIndex in comments) {
var comment = comments[commentIndex];
if(comment != null){
plugin.processComment(comment,true,element);
}
}
}
};
if(comments && typeof(comments) != "undefined" && comments != null) {
process(comments);
plugin.updateList();
$d.helpers.hideOverlay();
}
},
updateList : function(){
$("#comments_list li.comment_no_comment").remove();
var commentList = $("#comments_list li");
if(commentList.length > 1){
$("#comment_sort").css({display:"block"});
}else{
$("#comment_sort").css({display:"none"});
}
if(commentList.length == 0){
var li = $(document.createElement("li"));
li.addClass("comment_item clearfix comment_no_comment");
if($d.session && $d.session.isLoggedIn()){
li.html("
Be the first to comment!
");
}else{
//li.html("
");
}
$("#comments_list").append(li);
}
},
addComment : function(element,parent,callback) {
var plugin = this;
if(typeof(parent) == "undefined" || parent == null){
parent = 0;
}
if(plugin.addingComment == false){
plugin.addingComment = true;
if(typeof(element) != "undefined" && element != null){
var text = $(element);
}
else{
var text = $("#comment");
}
if(text.length > 0) {
var isDiv = false;
if(text.is("div")){
isDiv = true;
var content = $d.helpers.stripHTML(text.html());
}else{var content = text.val();}
var domField = null;
if(element){
domField = element.parent().get(0);
if(domField.uploader){
var used = {};
for(var x in domField.uploader.uploads){
var upload = domField.uploader.uploads[x];
if(upload != null){
if(upload.url){
if(!used[upload.url]){
content += " " + upload.url.replace("%2F","/");
used[upload.url] = true;
}
}
}
}
}
}
if(content == "") {
alert("Please enter a comment");
plugin.addingComment = false;
}
else {
var anonymous = false;
if(plugin.options.anonymous){
var anonymous = document.getElementById("comment_anonymous").checked;
}
if(anonymous == true) {anonymous = 1;}
else {anonymous = 0;}
if(!isDiv){
text.attr("disabled",true);
text.css({width:"69%"});
var loading = $("#comment_loading").css({display:"block"});
}
$d.network.request({
type:"POST",
url:URLROOT+"comments/save/" + plugin.options.type,
data:{id:plugin.options.entityID, content:content, anonymous:anonymous, parent:parent, session_id:""}
}).done(function(result){
if(result != "") {
var newComment = JSON.parse(result);
if(callback){
try{callback(newComment);}
catch(e){}
}
if(typeof(newComment.error) == "undefined"){
if(domField != null && domField.uploader){
domField.uploader.clear();
}
text.val("");
plugin.comments[newComment.id] = newComment;
$("li[data-id="+newComment.parent+"]").addClass("collapsed");
var pComment = plugin.processComment(newComment,false,$("#comments_list"),true);
plugin.updateList();
}else{
if(newComment.error == "spam"){
var element = $("#comments_list");
if($("#comments_list #spam_error_wait").length > 0){
$("#comments_list #spam_error_wait").html(newComment.wait);
} else {
element.prepend("
You're doing the thing too quickly please wait " + newComment.wait + " seconds
");
}
}
}
} else {
alert("Could not post your comment, please try again");
}
}).always(function(result){
if(!isDiv){
text.attr("disabled",false);
text.attr("style",'');
loading.css({display:"none"});
}
plugin.addingComment = false;
});
}
}
}
},
downvote : function(id) {
var plugin = this;
var uoption = $(".comment_upvote_"+id);
var doption = $(".comment_downvote_"+id);
var comment = $(".comment_item[data-id="+id+"]");
var points = parseInt(comment.attr("point-count"));
if(doption.hasClass("selected")) {
doption.removeClass("selected");
points++;
} else if(uoption.hasClass("selected")) {
uoption.removeClass("selected");
doption.addClass("selected");
points--;
points--;
} else {
doption.addClass("selected");
points--;
}
if(plugin.comments[id]){
plugin.comments[id].upclass = "";
plugin.comments[id].downclass = "";
if(doption.hasClass("selected")){
plugin.comments[id].upclass = "";
plugin.comments[id].downclass = "selected";
}else if(uoption.hasClass("selected")){
plugin.comments[id].upclass = "selected";
plugin.comments[id].downclass = "";
}
plugin.comments[id].score = points;
}
comment.attr("point-count",points);
comment.find(".comment_score").first().html(points + " points");
$d.network.post(URLROOT+"comments/downVote/" + plugin.options.type, {cid:id,session_id:""}, function(result) {});
},
upvote : function(id) {
var plugin = this;
var uoption = $(".comment_upvote_"+id);
var doption = $(".comment_downvote_"+id);
var comment = $(".comment_item[data-id="+id+"]");
var index = id;
var points = parseInt(comment.attr("point-count"));
if(uoption.hasClass("selected")) {
uoption.removeClass("selected");
points--;
} else if(doption.hasClass("selected")) {
doption.removeClass("selected");
uoption.addClass("selected");
points++;
points++;
} else {
uoption.addClass("selected");
points++;
}
if(plugin.comments[id]){
plugin.comments[id].upclass = "";
plugin.comments[id].downclass = "";
if(doption.hasClass("selected")){
plugin.comments[id].upclass = "";
plugin.comments[id].downclass = "selected";
}else if(uoption.hasClass("selected")){
plugin.comments[id].upclass = "selected";
plugin.comments[id].downclass = "";
}
plugin.comments[id].score = points;
}
comment.attr("point-count",points);
comment.find(".comment_score").first().html(points + " points");
$d.network.post(URLROOT+"comments/upVote/" + plugin.options.type, {cid:id,session_id:""}, function(result) {});
}
};
var options = {
type:"topic",
anonymous : "1",
comments : [{"id":29546,"user":1,"comment":"The date I don't remember. This was about 10 years ago, I remember the restaurant, I remember what we both ate, I even remember what the night was like and that we moved tables. I don't remember how we ended up on a date, where I met her, what she looked like or what happened to her after that night. It's almost as if someone implanted the memory into my head but forgot to add all the details.","image":"https:\/\/chatplayshare.com\/themes\/default\/images\/profiles\/cat.jpg","link":"\/profile\/TheBritishAreComing","date":"2018-03-18","delete":false,"datetime":"Mar 18th 2018 13:19","timestamp":1521379157,"loggedIn":false,"username":"TheBritishAreComing","upclass":"","downclass":"","upvoted":false,"downvoted":false,"score":1,"level":1,"children":[],"deleted":0,"parent":0,"previews":[],"entity":4535,"guilds":0,"type":"1","type_string":"topic"}],
entityID : "4535",
title : "Comments",
element : "discussion_container",
buttonText : "Add Comment",
buttonClasses : "small_button small_button_green",
answerClasses : ""
};
if(typeof($d) == "undefined"){
$d = {
initCheckboxes:function(element){
element.find("input[type=checkbox]").each(function(){
var c = $(this);
if(!c.attr("checkbox_setup")){
c.attr("checkbox_setup",true);
var id = c.attr("id");
var container = $(document.createElement("div"));
container.addClass(c.get(0).className);
c.get(0).className = "";
container.addClass("checkbox");
container.attr("id",id);
container.prop("name",id);
c.attr("id",id + "-checkbox");
container.prop("checked",c.get(0).checked);
container.prop("value",c.val());
container.prop("type","checkbox");
container.attr("type","checkbox");
if(c.prop("title")){container.append("
"+c.prop("title")+"");}
c.before(container);
c.remove();
container.append(c);
if(c.get(0).checked){
container.addClass("checked");
}
var checkUncheck = function(){
c.addClass("toSave");
if(c.get(0).checked){container.addClass("checked");}
else{container.removeClass("checked");}
};
container.click(function(){
var container = $(this);
c.click();
container.prop("checked",c.get(0).checked);
checkUncheck();
});
}
});
},
initSelects: function(element){
try{
if(!this.helpers.isMobile()){
element.find("select").select2();
}
}catch(e){}
},
session: {
isLoggedIn:function(){return false;}
},
helpers: {
stripHTML : function(string){
var div = $(document.createElement("div"));
div.html(string.replace(/(
|
|
)/gm,'\n').replace(/<\/p>/gm,'\n\n'));
return div.text().trim();
},
showOverlay : function(containers, content, realignLeft, realignTop) {
if(!content) {content = "";}
// Adds a default loading icon
if($.trim(content) == "") {content = "
";}
if(containers) {
containers.each(function() {
var container = $(this);
container.append("
");
var contentDiv = $(".details_overlay_content");
if(typeof(realignLeft) == "undefined" || realignLeft == true || realignLeft == null){
var contentLeft = (container.outerWidth()/2)-(contentDiv.outerWidth()/2);
contentDiv.css({left:contentLeft+"px"});
}
if(typeof(realignTop) == "undefined" || realignTop == true || realignTop == null){
var contentTop = (container.outerHeight()/2)-(contentDiv.outerHeight()/2);
contentDiv.css({top:contentTop+"px"});
}
});
}
},
hideOverlay : function(container) {
if(container) {container.find("details_overlay").remove();}
else {
$(".details_overlay").each(function() {
$(this).remove();
});
}
},
},
network:{
request:$.ajax,
post:$.post,
get:$.get
}
}
plugin.integrate(null,options);
}else{
$d.plugins.add(plugin,options);
$d.plugins.get("comments").integrate($d.plugins,options);
$d.network.addHandler("comments", "update-score",function(data){
if(typeof(data) != "undefined" && data != null){
var comment = $(".comment_item[data-id="+data.comment+"]");
if(comment.length > 0){
if(typeof(plugin.comments[data.comment]) == "undefined"){
plugin.comments[data.comment] = {};
}
if(typeof(plugin.comments[data.comment].score) == "undefined"){
plugin.comments[data.comment].score = 0;
}
plugin.comments[data.comment].score = data.score;
comment.attr("point-count",data.score);
comment.find(".comment_score").html(data.score + " points");
}
}
});
$d.network.addHandler("comments","deleted",function(data){
if(typeof(data) != "undefined" && data != null){
var p = $(".comment_item[data-id="+data+"]");
var children = $(".comment_item[data-parent="+data+"]");
if(children.length > 0){
p.find(".comment_username").html("deleted");
p.find(".comment_reply").remove();
p.find(".comment_delete").remove();
p.find(".comment_voting_buttons").remove();
p.addClass("comment_deleted");
p.find(".comment_content").html("");
$d.helpers.hideOverlay();
}else{
p.remove();
}
}
});
$d.network.addHandler("comments","added",function(data){
if(typeof(data.comment) != "undefined"){
var newComment = data;
if(typeof(newComment.error) == "undefined"){
if(!plugin.comments[newComment.id]){
setTimeout(function(){
plugin.comments[newComment.id] = newComment;
var pComment = plugin.processComment(newComment,false,$("#comments_list"),true);
$d.plugins.get("comments").updateList();
},1000);
}
}
}
});
}
" + options.title + "
"; } if($d.session && $d.session.isLoggedIn()){ html += "