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 = "\
"; if(options.title){ html = html + "

" + options.title + "

"; } if($d.session && $d.session.isLoggedIn()){ html += "
\
\
\
"; if(options.anonymous){ html += ""; } html += "\ \ \
\
\
"; }else{ html += ""; } 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("1"); 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("\
    \
    "+commentUserImage+"
    \
    \
    "+commentUsername+", "+comment.datetime+"
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    "+comment.score+" points
    \
    \
    \
    \ "); 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("[deleted]"); $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("

    "+comment.comment+"

    "); } 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("
    Login to comment
    "); } $("#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":29615,"user":85684,"comment":"hope is good thing and good things never die","image":"https:\/\/chatplayshare.com\/themes\/default\/images\/profiles\/rhino.jpg","link":"\/profile\/ahmed92","date":"2018-03-26","delete":false,"datetime":"Mar 26th 2018 21:20","timestamp":1522099207,"loggedIn":false,"username":"ahmed92","upclass":"","downclass":"","upvoted":false,"downvoted":false,"score":1,"level":1,"children":[],"deleted":0,"parent":0,"previews":[],"entity":4470,"guilds":0,"type":"1","type_string":"topic"},{"id":29354,"user":42451,"comment":"But on this most auspicious of nights, permit me then, in lieu of the more commonplace sobriquet, to suggest the character of this dramatis persona:Voilà! In view, a humble vaudevillian veteran, cast vicariously as both victim and villain by the vicissitudes of Fate. This visage, no mere veneer of vanity, is a vestige of the vox populi, now vacant, vanished.However, this valorous visitation of a by-gone vexation stands vivified and has vowed to vanquish these venal and virulent vermin van-guarding vice and vouchsafing the violently vicious and voracious violation of volition.The only verdict is vengeance—a vendetta, held as a votive, not in vain, for the value and veracity of such shall one day vindicate the vigilant and the virtuous.Verily, this vichyssoise of verbiage veers most verbose, so let me simply add that it's my very good honour to meet you and you may call me V.","image":"https:\/\/chatplayshare.com\/themes\/default\/images\/profiles\/giraffe.jpg","link":"\/profile\/MoosecuntSupreme","date":"2018-03-05","delete":false,"datetime":"Mar 05th 2018 17:09","timestamp":1520269781,"loggedIn":false,"username":"MoosecuntSupreme","upclass":"","downclass":"","upvoted":false,"downvoted":false,"score":1,"level":1,"children":[],"deleted":0,"parent":0,"previews":[],"entity":4470,"guilds":1,"type":"1","type_string":"topic"},{"id":29353,"user":17476,"comment":"They're not that different from you, are they? Same haircuts. Full of hormones, just like you. Invincible, just like you feel. The world is their oyster. They believe they're destined for great things, just like many of you, their eyes are full of hope, just like you. Did they wait until it was too late to make from their lives even one iota of what they were capable? Because, you see gentlemen, these boys are now fertilizing daffodils. But if you listen real close, you can hear them whisper their legacy to you. Go on, lean in. Listen, you hear it? - - Carpe - - hear it? - - Carpe, carpe diem, seize the day boys, make your lives extraordinary.","image":"https:\/\/chatplayshare.com\/themes\/default\/images\/profiles\/giraffe.jpg","link":"\/profile\/CowsGoMooALot","date":"2018-03-05","delete":false,"datetime":"Mar 05th 2018 17:08","timestamp":1520269731,"loggedIn":false,"username":"CowsGoMooALot","upclass":"","downclass":"","upvoted":false,"downvoted":false,"score":1,"level":1,"children":[],"deleted":0,"parent":0,"previews":[],"entity":4470,"guilds":1,"type":"1","type_string":"topic"},{"id":29344,"user":85695,"comment":" [link<\/a>]","image":"https:\/\/chatplayshare.com\/themes\/default\/images\/profiles\/giraffe.jpg","link":"\/profile\/dogsarethebest","date":"2018-03-05","delete":false,"datetime":"Mar 05th 2018 05:47","timestamp":1520228864,"loggedIn":false,"username":"dogsarethebest","upclass":"","downclass":"","upvoted":false,"downvoted":false,"score":1,"level":1,"children":[],"deleted":0,"parent":0,"previews":[],"entity":4470,"guilds":1,"type":"1","type_string":"topic"},{"id":29341,"user":76868,"comment":""Adventure is out there!" -Up","image":"https:\/\/chatplayshare.com\/themes\/default\/images\/profiles\/giraffe.jpg","link":"\/profile\/toinanbe","date":"2018-03-05","delete":false,"datetime":"Mar 05th 2018 05:45","timestamp":1520228713,"loggedIn":false,"username":"toinanbe","upclass":"","downclass":"","upvoted":false,"downvoted":false,"score":3,"level":1,"children":[],"deleted":0,"parent":0,"previews":[],"entity":4470,"guilds":1,"type":"1","type_string":"topic"}], entityID : "4470", 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("
    "+content+"
    "); 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("[deleted]"); $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); } } } }); }