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:"profile",
anonymous : "",
comments : [],
entityID : "45075",
title : "Comments",
element : "comments",
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 += "