';
var tinp = ''
+ (s.serverOptions.mmode != 'onhold' ? '' : (
trth + $JCL("approveUser") + trtd + aumsg
+ tinp + $JCL("approveUser") + cb('approveuser')))
+ trth + $JCL("approveMessage")
+ mtrt + ammsg
+ tinp + $JCL("approveMessage") + cb('approve')
+ trth + $JCL("deleteUnwantedComment")
+ trtd + $JCL("getRidOfComment")
+ tinp + $JCL("deleteMessage") + cb('delete')
+ ((cmtreason == 'User' || cmtreason == 'IP') ?
'' :
trth + $JCL("flagAsSpam")
+ trtd + $JCL("trainAksimet")
+ tinp + $JCL("spamJunk") + cb('spam'))
+ ((cmtreason == 'User') ?
unbantext
: trth + $JCL("blockCommenter")
+ trtd + $JCL("hideCommentsFromUser")
+ tinp + $JCL("blockUser")+cb('user'))
+ ((cmtreason == 'IP') ?
unbantext
: trth + $JCL("blockCommenterIP")
+ trtd + $JCL("hideCommentsFromIP")
+ tinp + $JCL("blockIP")+cb('ip'))
+ "");
}
s.settingsWindow('ctBlock', cmt.domCtls || cmt.domINFO, s.blockDom[status][cmtreason]);
s.ctBlock.forId = cid;
}
JSCC.prototype.cmtApprove = function(cid) {
var cmt = this.jspg.getItemById(cid).div;
if(cmt.cobj.status == 'S') {
this.cmtSetSpamStatus(cmt, false);
cmt.cobj.status = 'S'; // cmtDelete's deal
}
if(cmt.cobj.status == 'O') {
this.cmtSetOffensiveStatus(cmt, false);
cmt.cobj.status = 'O';
}
this.cmtDelete(cid, 'message');
}
JSCC.prototype.cmtApproveUser = function(cid) {
var cmt = this.jspg.getItemById(cid).div;
if(cmt.cobj.status == 'S') {
this.cmtSetSpamStatus(cmt, false);
cmt.cobj.status = 'S'; // cmtDelete's deal
}
this.cmtDelete(cid, 'user');
}
JSCC.prototype.routeAction = function(fun) {
var a = [this];
for(var i = 0; i < $JCA.length; i++) {
if($JCA[i].jcaIndex != this.jcaIndex
&& $JCA[i].config.domain == this.config.domain
&& $JCA[i].config.path == this.config.path
&& $JCA[i].config['display-mode'] == 'inline'
&& !this.IM && !$JCA[i].IM && !$JCA[i].config.userProfileComments)
a.push($JCA[i]);
}
for(var i = 0; i < a.length; i++) {
var e = a[i];
if(i) e.serverFilter = function(n) {
return (n == 's-data.js'); }
fun.apply(e);
delete e.serverFilter;
}
}
JSCC.prototype.cmtDelete = function(cid, approvalMode) {
var args = arguments;
this.routeAction(function() {
this.cmtDeleteAct.apply(this, args);
});
}
JSCC.prototype.cmtDeleteAct = function(cid, approvalMode, action) {
var s = this;
var item = this.jspg.getItemById(cid);
if (!item) return;
var cmt = item.div;
if(!cmt) {
(this.objById[cid]||{}).status = 'D';
this.jspg.deleteItem(cid);
this.reCalcPages();
return;
}
if(arguments.length == 1) approvalMode = 'delete';
var oldStatus = cmt.cobj.status;
var path = (this.config.moderate || (this.config.nolc && !this.IM)) ?
cmt.cobj.path : this.config.path;
if(this.config.nolc && !this.IM)
this.config.domain = cmt.cobj.domain;
this.moderationCommentsListUpdate(cid);
var idlist = [{'id': cid, 'p': path}];
switch(approvalMode) {
case 'message':
if (!this.inlineModeration) {
this.preHandlerDelete(cmt);
}
if(oldStatus == 'S') {
this.groupModerationRequest(approvalMode,
{'spam': idlist, 'appr': [], 'del': []});
cmt.cobj.action = 'unban';
} else if(oldStatus == 'O') {
this.groupModerationRequest(approvalMode,
{'spam': [], 'appr': idlist, 'del': []});
} else {
this.groupModerationRequest(approvalMode,
{'spam': [], 'appr': [], 'del': idlist});
}
if (this.inlineModeration) this.postHandlerModerate(cid);
break;
case 'user':
if (!this.inlineModeration) {
this.preHandlerDelete(cmt);
}
this.groupModerationRequest(approvalMode, idlist,
(oldStatus == 'S' ? {'junk': 'no'} : {}));
if (this.inlineModeration) this.postHandlerModerate(cid);
break;
case 'delete':
this.preHandlerDelete(cmt);
this.groupModerationRequest(approvalMode, idlist);
break;
case 'block_by_action':
this.preHandlerDelete(cmt);
this.groupModerationRequest('block' + action, idlist);
cmt.cobj.action = 'ban';
break;
case 'unban':
if (!this.inlineModeration) {
this.preHandlerDelete(cmt);
}
this.groupModerationRequest(approvalMode, idlist);
cmt.cobj.action = 'ban';
if (this.inlineModeration) this.postHandlerModerate(cid);
break;
case 'spam':
this.groupModerationRequest(approvalMode, idlist);
setTimeout(function() { // screen del
s.removeComment(cmt, true);
}, 1000);
break;
case 'ignore':
/* Just delete from screen */
default:
this.removeComment(cmt, true);
}
}
JSCC.prototype.preHandlerDelete = function(cmt) {
this.publishEvent('comment-deleting', {'cmtId': cmt.cobj.ID});
}
JSCC.prototype.postHandlerDelete = function(cmt) {
this.publishEvent('comment-deleted', {'cmtId': cmt.cobj.ID});
}
JSCC.prototype.removeComment = function(cmt, useRecursion) {
var cobj = cmt.cobj;
var deletedPageIdx = this.jspg.getPageByItemId(cobj.ID);
if(cobj.ParentID && this.objById[cobj.ParentID]) {
var prn = this.objById[cobj.ParentID];
this.jspg.invalidateItemView(cobj.ParentID);
var parentPageIdx = this.jspg.getPageByItemId(cobj.ParentID);
this.jspg.invalidatePagesView(parentPageIdx, deletedPageIdx-parentPageIdx);
} else {
if(deletedPageIdx && cobj.ParentID) this.jspg.invalidatePagesView(deletedPageIdx-1, 1);
}
if(cobj.cedge) {
var curItemIdx = this.jspg.getItemIdxById(cobj.ID);
if((cobj.cedge==1 && !this.IM && typeof curItemIdx!='undefined') || (cobj.cedge==2 && typeof curItemIdx!='undefined')) {
var itemIdxD = cobj.cedge==1 ? 1 : -1;
var items = this.jspg.getItems(curItemIdx+itemIdxD, 1);
if(items.length && items[0]) items[0].obj.cedge += cobj.cedge;
}
}
var self = this;
var deletedComment = function(dobj) {
return (dobj.status=='D' || dobj.status=='DT');
}
var delCount = deletedComment(cobj) ? 0 : 1;
if(this.IM) {
var cnt = 0;
var deletedPageItems = this.jspg.getPageItems(deletedPageIdx);
JSKitLib.fmap(deletedPageItems, function(V){
if(!deletedComment(V.obj) && V.obj.conversation==cobj.conversation) cnt++;
});
if(cnt>1) {
if(cmt.cobj.hasCnvs) {
cmt.cobj.status = 'DT';
this.jspg.invalidateItemView(cobj.ID);
} else {
this.jspg.deleteItem(cmt.cobj.ID);
}
} else if(cnt<=1){
JSKitLib.fmap(deletedPageItems, function(V){
if(V.obj.conversation==cobj.conversation) self.jspg.deleteItem(V.obj.ID);
});
}
} else {
delCount = this.jspg.deleteItem(cobj.ID);
this.reCalcPages();
}
this.ctag = null;
var pageNo = this.curPage;
this.curPage = 0;
this.displayPage(pageNo, function(immed){
if(immed) {
if(useRecursion && this.jspg.getItemById(cmt.cobj.ID)) {
self.removeComment(cmt);
}
}
});
return delCount;
}
JSCC.prototype.postHandlerModerate = function(cid) {
var cmt = this.jspg.getItemById(cid).div;
cmt.cobj.status = 'A';
this.jspg.invalidateItemView(cid);
var pageNo = this.curPage;
this.curPage = 0;
this.displayPage(pageNo);
}
JSCC.prototype.createCommentAsHTML = function(obj) {
if(obj.status == 'D') return '';
if(this.objppc) this.objppc(obj);
return this.tmpl(this.dtComment, obj);
}
JSCC.prototype.getUserProperty = function(name, defaultValue) {
return JSKitEPB.getValue(name) || this.TC && this.TC["js-Cmt" + name] && !JHI2.isEmpty(this.TC["js-Cmt" + name]) && this.TC["js-Cmt" + name].value || defaultValue;
}
JSCC.prototype.markOffensive = function(cid) {
if(confirm($JCL("isJunkVote"))) {
if ((this.adminMode) && (!this.inlineModeration)) {
this.cmtDelete(cid);
} else {
var item = this.jspg.getItemById(cid);
if(!item) return;
var obj = item.obj;
var req = {
'id': cid,
'permalink': this.config.permalink,
'Text': obj.Text ||
(obj.content ? obj.content.title : ''),
'Name': this.getUserProperty("Name", $JCL("guest"))
};
this.server('-mark.off', req);
}
}
}
JSCC.prototype.getLikeInstanceByID = function(cid){
var comment = this.jspg.getItemById(cid);
return comment.obj.likeInstance;
}
JSCC.prototype.postLikeVote = function(cid, obj) {
var voter = {
"name" : this.getUserProperty("Name", "")
};
var avatar = this.avatarsManager.getActiveAvatar();
if (avatar) {
voter.avatar = avatar.name;
voter.avatar_width = avatar.width;
voter.avatar_height = avatar.height;
}
var likeInstance = this.getLikeInstanceByID(cid);
if (likeInstance.busy) return;
likeInstance.busy = true;
likeInstance.renderLikeControl("progress");
likeInstance.sendRequest(voter);
}
JSCC.prototype.handleLikeResponse = function(cid, action, data){
this.routeAction(function() {
this.serverOptions.profile = data.profile;
var likeInstance = this.getLikeInstanceByID(cid);
likeInstance.busy = false;
likeInstance.vote(action, data);
});
}
JSCC.prototype.showProfile = function(target, data, extraConfig) {
if (data.ProfileURL && !data.profile) {
window.open(data.ProfileURL);
return;
}
var s = this;
var so = s.serverOptions;
if (!data.profile || (data.profile != so.profile && !so.showProfile) || $JSKitGlobal.isProfileLoaded == "no") return;
var applyFollowPanelsCallback = function(func) {
JSKitLib.fmap([s.followPanel, s.followPanelPopup], function(panel) {
if (panel) func(panel);
});
};
var config = JSKitLib.foldl({
"parentTarget" : s.target,
"targetRef" : JSKitLib.getRef(s),
"whiteLabel" : so.whitelabel,
"callbacks" : {
"onsave" : function(profile) {
s.extraFormFields["Email"] = profile.getEmail() || "";
var email = s.extraFormFields["Email"] || $JCL("follow_emptyEmail");
applyFollowPanelsCallback(function(panel) {
var link = panel.get("emailAddress");
var action = s.extraFormFields["Email"] ? "remove" : "add";
JSKitLib.text(email, link, true);
JSKitLib[action + "Class"](link,
"js-kit-follow-activeNotifyMode-" + so.notifyMode);
});
},
"onload" : function(profile) {
if (profile.isYours()) so.profile = profile.getProfileID();
applyFollowPanelsCallback(function(panel) {
var link = panel.get("editProfileLink");
JSKitLib.text($JCL("follow_editProfile"), link, true);
JSKitLib.removeClass(link, "js-kit-follow-openingProfile");
JSKitLib.addClass(panel.get("rssThreadButton"), "js-kit-follow-rssButton");
});
}
}
}, extraConfig || {}, function(value, acc, key) { acc[key] = value; });
if (!$JSKitGlobal.profileObjectInitialized) {
$JSKitGlobal.isProfileLoaded = "no";
JSKitLib.addScript(s.uriDomain + "/widgets/profile.js", target, function() {
$JSKitGlobal.isProfileLoaded = "yes";
JSKW$openProfile(data.profile, target, config);
});
} else JSKW$openProfile(data.profile, target, config);
}
JSCC.prototype.appendProfileHandler = function(target, data) {
var self = this;
var isAvailable = this.serverOptions.showProfile && (data.profile || data.ProfileURL);
var avatarDims = {"width": "48", "height": "48"};
var openProfile = function(element) {
JSKitLib.addEventHandler(element, ["click"], function(e) {
JSKitLib.stopEventPropagation(e);
JSKitLib.preventDefaultEvent(e);
self.showProfile(target, data);
return false;
});
};
JSKitLib.addClass(target, "js-kit-clickable");
if (this.IM || this.getSkin() != "echo") return openProfile(target);
if (data.event_publisher) {
data.Name = data.content.user.name
}
var descr = {
"avatar": function(element) {
var container = {
"instance": element,
"width": avatarDims.width,
"height": avatarDims.height
};
self.appendAvatarImage(container, data);
if (isAvailable) openProfile(element);
}
};
if (isAvailable) descr.name = descr.viewDetails = function(element) { openProfile(element); };
var config = {
"labels": $JCL,
"uriDomain": self.uriDomain,
"uriAvatar": self.uriAvatar,
"avatarSize": avatarDims,
"cssPrefix": "js-kit-singleCmtMiniProfile js-kit-singleCmtProfile" + (isAvailable ? "Enabled" : "Disabled"),
"descriptors": descr,
"openFullProfile": function() { self.showProfile(target, data); },
"isNativeProfileDisabled": !isAvailable
};
eval("var wp = " + JSKitLib.htmlUnquote((data.Webpresence || "[]")));
var webpresence = JSKitLib.fmap(wp, function(item) {
if (!item[2] || item[2] == "checked") {
var type = item[0].replace(/login-/, "");
var group = item[0].match(/login-/) ? "login" : "web";
if (group == "web" && !self.serverOptions.extraFieldURL) return;
var identity = self.jskauth.assembleIdentity(item[1], type, group);
if (type == "gfc" && self.jskauth.getAuthIdentity("gfc")) {
identity.url = item[1];
identity.params.domain = self.config.domain;
}
return identity;
}
});
var url = data.Url ? [self.jskauth.assembleIdentity(data.Url, "home", "web")] : [];
data.identities = {"auth": {}, "web": JSKitLib.merge(webpresence, url)};
var clearTimer = function(timer) {
clearTimeout(timer);
timer = undefined;
};
var openMiniProfile = function(ttl) {
clearTimer(self.miniProfileCollapseTimer);
self.miniProfileExpandTimer = setTimeout(function() {
if (data.miniProfile) {
data.miniProfile.display(target);
} else {
data.miniProfile = new JSKitMiniProfile(target, data, config);
}
data.miniProfile.getContent().onmouseover = function() {
clearTimer(self.miniProfileCollapseTimer);
};
}, ttl);
};
target.onclick = function() { openMiniProfile(0); }
target.onmouseover = function() { openMiniProfile(JSCC.MINI_PROFILE_TTL); }
target.onmouseout = function() {
clearTimer(self.miniProfileExpandTimer);
self.miniProfileCollapseTimer = setTimeout(function() {
JSKW$Events.syncBroadcast("miniProfile_collapseAll");
}, JSCC.MINI_PROFILE_TTL);
};
}
JSCC.prototype.fixComment = function(cmt, obj, pageIdx, globalIdx, itemsOnPage) {
var self = this;
if (obj.profile == this.serverOptions.profile) obj.yours = true;
var so = this.serverOptions;
var cfg = this.config;
var typeCondition = obj.msgtype && obj.msgtype.match(/T|P/) && !so.trackbackreply;
var flagCondition = !so.commod || obj.yours || cfg.nolc || typeCondition;
var anonymous = so.anonymousCmt && !self.jskauth.isLogged();
self.objById[obj.ID] = obj;
if(obj.status == 'D') {
cmt.style.display = 'none';
return;
}
if(obj.depth) {
cmt.style.marginLeft = this.level4margin(obj.depth)
} else {
obj.depth = 0;
}
var ctls = JSKitLib.mapClass2Object({}, cmt);
cmt.ctls = ctls;
cmt.cobj = obj;
var imgArea = cmt.ctls["js-singleCommentPreviewImage"];
if (imgArea && cmt.cobj.imgs && cmt.cobj.imgs.length && self.config.uploadImages){
self.addChild(imgArea,self.createImages(cmt.cobj.imgs));
imgArea.style.display = "block";
}
var jsc = function(t){return ctls['js-singleComment'+t]}
var switchClasses = function(controls, class2add, class2remove) {
JSKitLib.fmap(controls, function(element) {
JSKitLib.addClass(element, class2add);
JSKitLib.removeClass(element, class2remove);
});
};
var appendHoverActions = function(controls){
var container = jsc("");
if (!container || self.getSkin() != "echo") return;
JSKitLib.addEventHandler(container, ["mouseout"], function() {
switchClasses(controls, "jsk-SecondaryFontColor", "jsk-LinkColor");
});
JSKitLib.addEventHandler(container, ["mouseover"], function() {
switchClasses(controls, "jsk-LinkColor", "jsk-SecondaryFontColor");
});
};
cmt.bg = jsc('Bg');
var stripe = jsc('Body') || jsc('');
stripe.className += " js-singleCommentDepth" + (obj.depth || 0);
if (this.useEcho()) {
if (obj.depth) {
stripe.className += " jsk-TrinaryBackgroundColor jsk-ItemWrapperChild";
switchClasses([cmt.bg], 'jsk-TrinaryBackgroundColor', 'js-singleCommentBg');
} else if (obj.thread && obj.thread.length) {
stripe.className += " jsk-ItemWrapperThread";
}
}
if(!(cmt.style.display.match(/none/))){
stripe.className += " js-comment-stripe-" + ((globalIdx % this.stripecount) + 1);
}
if(self.IM && typeof(obj.conversation)=='number') {
if(obj.hasCnvs) {
this.appendConversation(cmt, obj.conversation);
} else {
this.appendConversationChild(cmt);
}
}
/* Handle avatars */
if(obj.status!='DT' && obj.status!='DD') self.placeAvatar(obj, jsc('Avatar'));
/* Handle if ratings are present */
if (obj.Rating > 0 && ( ! this.isStandalone()) ) {
var self = this;
var action = function() {
if (!jsc('Rating')) return;
jsc('Rating').appendChild(self.createMiniStarObject(obj.Rating, 10));
jsc('Rating').appendChild(JSKitLib.html(''));
JSKitLib.show(jsc('Rating'));
}
$JSKitGlobal.tryRatingsAppObjectAction(this.uniq, action);
} else {
if (jsc('Rating')) JSKitLib.hide(jsc('Rating'));
}
var sa = jsc("Name");
if(sa) {
self.rerenderName(cmt);
if(obj.admin) sa.className = sa.className + " js-siteAdmin";
}
var renderKarmaView = function(karma, container, value, voters) {
JSKitLib.text(karma.score, value, true);
JSKitLib.text(karma.votesText, voters, true);
JSKitLib.show(container, "inline");
};
var kS = jsc("KarmaScore");
if(kS && obj.karma) {
var kVal = jsc("KarmaValue");
var kVot = jsc("KarmaVoters");
if(obj.karma.votes) renderKarmaView(obj.karma, kS, kVal, kVot);
var setKarmaAction = function(name, score) {
if (!jsc(name)) return;
JSKitLib.setEventHandler(jsc(name), ['click'], function() {
obj.karma.recomputeScore(score);
renderKarmaView(obj.karma, kS, kVal, kVot);
this.blur();
});
}
setKarmaAction("KarmaY", 1);
setKarmaAction("KarmaN", -1);
}
if(jsc("KarmaShow") && obj.karma && obj.yours && obj.karma.votes) {
renderKarmaView(obj.karma, jsc("KarmaShow"), jsc("KarmaValueShow"), jsc("KarmaVotersShow"));
}
if (so.likedBy && jsc("LikedBy")){
var anonymousAvatar = self.avatarsManager.anonymousAvatarData();
eval("var votersList = " + (obj.like || "[]") + ";");
obj.likeInstance = new JSCCLike({
"ID" : obj.ID,
"jx": self.jcaIndex,
"ref": JSKitLib.getRef(self),
"path": self.pathOverride,
"voters" : votersList,
"target" : jsc("LikedBy"),
"profile": function(){ return self.serverOptions.profile; },
"translator" : $JCL,
"onInit" : function(){
var expandMarker = this.getExpandMarker();
if (expandMarker) appendHoverActions([expandMarker]);
},
"onVoterInit" : function(target, data){
var avatar = data.avatarData || anonymousAvatar;
data.avatar = avatar.name;
data.avatarWidth = avatar.width;
data.avatarHeight = avatar.height;
delete data.avatarData;
self.appendProfileHandler(target, data);
},
"onVoterRender" : function(dom, data){
self.avatarsManager.assembleAvatar({
"instance": dom.get("avatar"),
"width": "16",
"height": "16"
}, data.avatar || anonymousAvatar);
},
"likeControl": jsc("Like")
});
}
var functionsToBind = [
["Edit", "ShowCommentDialog", [{isEditing: true}]],
["Flag", "markOffensive"],
["Like", "postLikeVote"],
["Reply", "ShowCommentDialog"],
["Block", "cmtBlock"],
["Delete", "cmtDelete"],
["Approve", "cmtApprove"],
["Moderate","cmtBlock"],
["ComModMark", "markOffensive"],
["ApproveUser", "cmtApproveUser"]
];
JSKitLib.fmap(functionsToBind, function(list){
(function(elementName, funcName, args) {
if (!jsc(elementName)) return;
args = args || [];
args.unshift(cmt.id);
JSKitLib.setEventHandler(jsc(elementName), ['click'], function(){
self[funcName].apply(self, args);
});
}).apply(self, list);
});
var elementVisibilityConditions = {
"IP" : !self.adminMode,
"Url" : obj.Url,
"Karma" : !this.scoringEnabled() || obj.yours || !obj.karma || typeCondition || cfg.nolc,
"ComMod" : flagCondition,
"LikedBy" : !so.likedBy,
"Editable" : cfg.editable != 'yes' || cfg.nolc || !(self.adminMode || self.ownerMode),
"Likeable" : !so.likedBy || anonymous,
"Flagable" : flagCondition,
"Deletable" : (!self.adminMode || !obj.event_type) && ((!obj.yours && !self.IM && !self.ownerMode) || (self.adminMode && !cfg.nolc)),
/* FIXME(?) Lev, this.serverOptions are not defined in moderation mode but the result is likely as desired, i.e. admin can still reply */
"Replyable" : so.mmode == "pause" || !self.isSourceAvailable("Comments") || typeCondition || (cfg.nolc && (!self.IM || obj.yours)),
"Moderatable" : !self.adminMode || cfg.nolc,
"ApproveUser" : so.mmode != "onhold",
"ProfileLinkable" : !obj.profile || cfg.nolc
};
JSKitLib.fmap(elementVisibilityConditions, function(flag, name){
if (jsc(name) && flag) JSKitLib.hide(jsc(name));
});
cmt.bg.style.zIndex = this.czidx - (pageIdx % this.czidx);
cmt.domINFO = jsc('INFO');
cmt.domCtls = jsc('Ctls') || jsc('controls');
if(obj.status == 'S')
this.cmtSetSpamStatus(cmt, true);
if(obj.status == 'O')
this.cmtSetOffensiveStatus(cmt, true);
if(obj.admin) {
JSKitLib.addClass(cmt, "js-commentByAdmin");
if(cfg.adminBgColor) {
cmt.style.backgroundColor = cfg.adminBgColor;
cmt.bg.style.backgroundColor = cfg.adminBgColor;
}
var star = jsc('AdminStar');
if(star) JSKitLib.show(star, 'inline');
}
if(obj.status == 'DT') {
if(cmt.domINFO) JSKitLib.hide(cmt.domINFO);
if(cmt.domCtls) JSKitLib.hide(cmt.domCtls);
}
if(obj.status == 'DD') {
if(cmt.domCtls) JSKitLib.hide(cmt.domCtls);
this.placeProcessAvatar(jsc('Avatar'));
}
if(jsc("Checkbox")) {
var checkbox = jsc("Checkbox");
var state = this.moderationCommentsList[obj.ID] ? "checked" : "unchecked";
this.setInputState("checkbox", checkbox, state);
checkbox.onclick = function() {
var state = self.moderationCommentsList[obj.ID] ? "unchecked" : "checked";
self.setInputState("checkbox", checkbox, state);
self.moderationCommentsListUpdate(obj.ID, state == "checked");
};
}
if(jsc("Menu")) {
if(!obj.menu)
obj.menu = self.addMenu(cmt, obj);
if(obj.menu)
jsc("Menu").appendChild(obj.menu);
}
if(jsc("ViaIcon")) JSKitLib.addPNG(jsc("ViaIcon"), obj.content.service.iconUrl);
var controls = JSKitLib.fmap(["Flag", "Like", "Reply", "Moderate", "Edit", "Delete", "ViaThirdPartyService"], function(name){
var element = jsc(name);
if (element) return element;
});
appendHoverActions(controls);
}
JSCC.prototype.setInputState = function(type, element, state) {
JSKitLib.addPNG(element, "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/common/" + type + "_" + state + ".png");
}
JSCC.prototype.level2margin = function(level) {
if(level < 20) return "10px";
if(level < 40) return "4px";
return "0px";
}
JSCC.prototype.level4margin = function(level) {
switch (this.config.skin) {
case 'echo':
if(level > 1) level = 1;
return ((parseInt(this.maxAvatarDims.width) + 10) * level) + 'px';
default:
if(level <= 20) return (10 * level) + 'px';
if(level <= 40) return (200 + 4 * level) + 'px';
return '280px';
}
}
JSCC.prototype.cmtInDiv = function(div, obj, fincb) {
JSKW$Events.syncBroadcast("smileys-newCommentInDiv", obj);
if (!obj.isEditing) {
var cIdx, insBefore = false;
if(this.config.backwards == 'yes') {
var fitem = this.jspg.getFirstItem();
if(fitem) {
cIdx = fitem.obj.ID;
insBefore = true;
}
}
if(this.config.thread != 'yes') {
obj.Notice = $JCL('commentMoveNotice');
cIdx = obj.ParentID || cIdx;
delete obj.ParentID;
delete obj.depth;
}
if(this.useEcho()) {
cIdx = this.jspg.getPlaceIdxByTS(obj.TS);
insBefore = true;
}
obj.cedge = 3;
if(obj.ParentID) {
obj.cedge = 0;
var prn = this.objById[obj.ParentID];
var td = (prn && prn.depth) ? prn.depth : 0;
if(prn) {
if (this.useEcho()) {
JSKitLib.addClass(this.jspg.getItemById(obj.ParentID).div, 'jsk-ItemWrapperThread');
}
if(!obj.depth) {
prn.thread.push(obj);
obj.depth = 1 + td;
}
if(this.IM && typeof(prn.conversation)=='number') obj.conversation = prn.conversation;
cIdx = this.getLastReply(obj.ParentID).obj.ID;
insBefore = false;
var curItem = this.jspg.getItemById(cIdx);
if(curItem && curItem.obj.cedge>1) {
obj.cedge = 2;
curItem.obj.cedge -= 2;
var parentPageIdx = this.jspg.getPageByItemId(obj.ParentID);
var insertedPageIdx = this.jspg.getPageByItemId(cIdx);
this.jspg.invalidatePagesView(parentPageIdx, insertedPageIdx-parentPageIdx+1);
}
}
}
if(this.IM) {
for(var i=0; i 0) {
cmt.cobj.height += cmtHeight;
cmt.style.height = cmt.cobj.height + 'px';
return true;
} else if (cmt.cobj.cntBorderPause == 8) {
cmt.style.overflow = "";
cmt.style.height = "";
cmt.cobj.height = -1;
cmt.cobj.cntBorderPause--;
return true;
} else if (cmt.cobj.cntBorderPause > 0) {
cmt.cobj.cntBorderPause--;
return true;
} else if (cmt.cobj.cntBorderUp < 256) {
cmt.cobj.cntBorderUp += 10;
var blue = cmt.cobj.cntBorderUp;
bg.style.backgroundColor = "rgb(256, 256, " + (blue > 256 ? 256 : blue) + ")";
return true;
} else {
self.setOpacity(bg, 1);
bg.style.backgroundColor = "";
delete cmt.cobj.echoItemFirstTime;
return false;
}
}
var oldEffectStep = function(cmt) {
if (cmt.cobj.cntDown > 0) {
self.setOpacity(bg, calcOpacity());
return true;
} else {
bg.style.backgroundColor = "";
self.setOpacity(bg, 1);
return false;
}
}
cmt.cobj.cntDown -= cmt.cobj.cntMode ? decr.f : decr.s;
return cmt.cobj.echoItemFirstTime ? echoEffectStep(cmt) : oldEffectStep(cmt);
}
var runStep = function() {
obj.intvl = setTimeout(function() {
var nextStep = effectStep(cmt);
if (nextStep) runStep();
else {
obj.intvl = null;
delete obj.havingEffect;
}
}, 50);
};
runStep();
}
JSCC.prototype.foldInputFields = function(e, acc, f) {
if(e.getAttribute) {
var name = e.getAttribute('NAME');
if(name && (name.substr(0, 6) == 'js-Cmt')) {
var shortName = name.substr(6);
acc = f.call(this, e, acc, shortName) || acc;
}
}
var cn = e.childNodes;
if(cn) {
var clen = cn.length;
for(var i = 0; i < clen; i++)
acc = this.foldInputFields(cn[i], acc, f);
}
return acc;
}
JSCC.prototype.inputFieldsMsg = function(ctl, cmtObj, pText) {
return this.foldInputFields(ctl, [], function(e, a, name){
if (e.jsk$not_specified || JHI2.isEmpty(e)) return;
var isText = /^Text(Edit)?$/.test(name);
var text = isText ? pText : e.value;
a.push({"Name": "js-Cmt" + name, "Value": text});
if(isText && this.serverOptions.htmlMode)
text = text.replace(/<[\/]?[a-z]{1,3}(\s+(href)=[^>]+)?>/g, '');
//text = text.replace(/&/g, '&').replace(//g, '>');
cmtObj[name] = text;
});
}
JSCC.prototype.cmtAvatarPlaceWidth = function(cobj) {
return cobj.ParentID ? this.maxAvatarDims.width/2 : this.maxAvatarDims.width;
}
JSCC.prototype.cmtInPlace = function(cobj, fincb) {
var div = this.TC["js-OldComments"];
cobj.Name = cobj.Name || $JCL("guest");
this.cmtInDiv(div, cobj, function(cmt) {
if(cmt) this.flash(cmt);
if(fincb) fincb.apply(this, [cmt]);
});
}
JSCC.prototype.ShowCommentDialog = function(msgId, extra) {
if(this.commentPostingProcess) {
alert($JCL('messagePostingInProgress'));
return;
}
var s = this;
msgId = msgId || '';
this.forMsg = this.objById[msgId];
/* Remove dialog from sight */
this.CommentCancelled();
extra = extra || {};
if (s.getSkin() == "echo") {
if (this.TC["js-CmtText"] && (this.jskauth.isLogged() || !this.anonymousCmt)) {
var hint = $JCL("defaultCommentText");
var input = s.TC["js-CmtText"];
if (s.serverOptions.wysiwyg) {
hint = '' + hint + '';
input.hint = hint;
input.value = hint;
} else {
JHI2.remove(input);
JHI2.create(hint, input);
}
}
JSKitLib.fmap(s.serverOptions.wysiwyg ? [] : ["js-CmtText", "js-CmtTextEdit", "jsk-CommentFormBody", "jsk-CommentEditFormBody"], function(name) {
if (s.TC[name]) JSKitLib.addClass(s.TC[name], name + "-noWYSIWYG");
});
}
var isReply = !!msgId;
var cct = this.TC["js-LeaveComment"];
if (!this.getSkin().match(/smoothgray|echo/)) this.onAddImgButton(this.imgShow);
var ccd = this.TC[extra.isEditing ? "js-EditComment" : "js-CreateComment"];
if (extra.isEditing) {
isReply = false;
var cte = this.TC['js-CmtTextEdit'];
if (this.forMsg.originalText) {
cte.value = this.forMsg.originalText;
} else {
cte.value = this.forMsg.Text.replace(/<\/wbr>/g, '');
if (!this.serverOptions.wysiwyg) {
cte.value = JSKitLib.htmlUnquote(cte.value);
JSKW$Events.syncBroadcast("smileys-beforePostNewComment", cte);
}
}
}
this.replyForId = (isReply ? msgId : '');
var placeDialog = function(immediate, apl) {
if (!apl) apl = [this.TC["js-CommentsArea"], this.TC["js-CommentsArea"].firstChild];
if(msgId){
apl[0].insertBefore(ccd, apl[1]);
} else if (this.config.backwards == 'yes') {
apl[0].insertBefore(ccd, this.TC['js-WelcomePanel'] ? apl[1].nextSibling : apl[1]);
} else {
this.addChild(apl[0], ccd);
}
if (extra.isEditing) JSKitLib.hide(apl[1]);
if(this.config.backwards == 'yes' && msgId)
cct.style.visibility = "hidden";
else
cct.style.display = "none";
ccd.style.display = "block";
try {
var name_suffix = (extra.isEditing ? 'Edit' : '');
var text = this.TC["js-CmtText" + name_suffix];
/* TinyMCE support (A) */
if(!text.id) text.id = "js-CmtText" + name_suffix + "-" + this.jcaIndex;
if(!text.richEditor && this.serverOptions.wysiwyg) try {
text.smoothWysiwygLoading = (s.getSkin() == 'echo' && !extra.isEditing);
if (text.smoothWysiwygLoading) {
if (!text.jsk$cover) {
text.jsk$cover = JSKitLib.html('');
text.jsk$wrapper = s.TC['jsk-CommentFormBody'];
}
text.jsk$wrapper.parentNode.replaceChild(text.jsk$cover, text.jsk$wrapper);
JSKitLib.hide(text.jsk$wrapper);
text.jsk$cover.parentNode.insertBefore(text.jsk$wrapper, text.jsk$cover);
}
var addMCECtrl = function(){
text.jsk$nofocus = extra.nofocus;
text.jsk$widget = s;
if(s.tmce.foreign) tinyMCE.settings = s.tmce.cfg;
tinyMCE.settings.auto_focus = (extra.nofocus ? null : text.id);
text.jsk$hasDefaultValue = (s.getSkin() == 'echo' && !extra.isEditing);
if (text.jsk$hasDefaultValue) {
var re = new RegExp('( )?' + text.hint + '( )?');
text.defaultRemoved = !text.value.match(re);
}
tinyMCE.execCommand('mceAddControl', false, text.id);
text.richEditor = true;
if(text.mceLoadedCtx) {
JSKW$Events.invalidateContext(text.mceLoadedCtx);
text.mceLoadedCtx = null;
}
}
if(window.tinyMCE) {
if(tinyMCE.getInstanceById(text.id) == null) {
setTimeout(function() { addMCECtrl(); }, 0);
}
} else text.mceLoadedCtx = JSKW$Events.registerEventCallback(undefined, addMCECtrl, "mceLoaded");
} catch(e) {}
var sub = this.TC["js-Cmtsubmit" + name_suffix];
var can = this.TC["js-Cmtcancel" + name_suffix];
var prev = function(e){JSKitLib.stopEventPropagation(e); JSKitLib.preventDefaultEvent(e); return false;}
if(JSKitLib.isOpera()) {
var onkey = function(){};
} else if(JSKitLib.isIE()) {
var onkey = function(d,f){d.onkeydown=f};
} else {
var onkey = function(d,f){d.onkeypress=f};
}
/* combined ratings */
var commentRatingElements = JSKitLib.getElementsByClass(ccd, "js-commentRatingDisplay");
var commentRatingDisplay = 'none';
this.submitRating = false;
if (this.hasRatingsAppObject() && ( ! isReply)) {
if (this.TC["js-commentFieldRating"]) {
this.embedRatingsAppObject(this.TC["js-commentFieldRating"]);
commentRatingDisplay = '';
this.submitRating = true;
}
}
for (var i=0; i < commentRatingElements.length; i++) {
commentRatingElements[i].style.display = commentRatingDisplay;
}
var flds = this.foldInputFields(ccd, [],
function(e, a, name) {
var dfl = this.fieldDfl[name];
if(dfl) {
if(e.jsk$setdfl)
e.jsk$setdfl(dfl);
else if(!e.value)
e.value = dfl;
}
var aclen = a.length;
if(e.richEditor) {
if (e.value) {
e.value = e.value.replace(/^\n\n+/, '');
if(!e.value.match(/^(\n|.)*<\/p>$/)) e.value = ' ' + e.value + ' ';
}
var o = { focus: function() {
var setupFocusing = function(ed) {
var keyHandler = function(ed, e) {
if(e.keyCode != 9) return true;
window.focus();
try {
a[aclen+(e.shiftKey?-1:1)].focus();
} catch(ex) { ; }
return prev(e);
};
if (JSKitLib.isIE()) ed.onKeyDown.add(keyHandler); else ed.onKeyPress.add(keyHandler);
}
var ed = tinyMCE.getInstanceById(text.id);
if(ed) {
setupFocusing(ed);
} else {
var t = setInterval(function() {
var ed = tinyMCE.getInstanceById(text.id);
if(ed) { clearInterval(t); setupFocusing(ed); }
}, 100);
}
} };
if(aclen) onkey(a[aclen-1], function(e) {
e = e || window.event;
if(e.keyCode == 9 && !e.shiftKey) {
this.blur();
o.focus();
return prev(e);
}
});
a.push(o);
} else {
a.push(e);
}
});
var okd = function(offset) { return function(e) {
e = e || window.event;
if(e.keyCode != 9) return true;
this.blur();
flds[offset+(e.shiftKey?(flds.length-2):0)].focus();
return prev(e);
} }
onkey(flds[flds.length-1], okd(0));
onkey(flds[0], okd(1));
// Place initial focus.
if(!extra.nofocus) {
for(var i = 0; i < flds.length; i++)
if(!flds[i].value || flds[i].type == 'submit') {
flds[i].focus();
break;
}
if (s.config.backwards != 'yes')
sub.scrollIntoView(false);
}
} catch(e) { }
};
if(!msgId) {
placeDialog.apply(this,[true]);
} else {
var id = this.useReplyThreadsCollapsing() || extra.isEditing ?
msgId : this.getLastReply(msgId).obj.ID;
var pn = this.jspg.getPageByItemId(id);
var item = this.jspg.getItemById(id);
item.obj.isEditing = extra.isEditing;
this.displayPage(pn+1, function(immed) {
if (!immed) return;
if (!s.useEcho()) item = s.jspg.getItemById(id);
var placement = [item.div.parentNode, item.div.nextSibling];
if (extra.isEditing) {
s.editingCmt = item.div.ctls['js-singleCommentText'];
placement = [s.editingCmt.parentNode, s.editingCmt];
}
placeDialog.apply(s, [true, placement]);
});
s.setStreamState(true, true);
}
var pb = this.TC["js-poweredBy-echo"] || this.TC["js-poweredByJSKit"];
if (this.serverOptions.whitelabel && pb) JSKitLib.hide(pb);
if (s.getSkin() != 'echo') {
var oiddiv = s.TC['js-logoutSpan'];
if (oiddiv) oiddiv.style.display = s.jskauth.isLogged() ? 'inline' : 'none';
s.jskauth.drawSelector(s.TC['js-authSelector']);
s.setThirdPartyShare();
s.setNameFieldValue();
}
return false;
}
JSCC.prototype.CommentCancelled = function() {
if(this.tmce && (this.serverOptions.media || this.serverOptions.smiley))
this.tmce.cfg.closePopups();
var cct = this.TC["js-LeaveComment"];
var ccd = [this.TC["js-EditComment"], this.TC["js-CreateComment"]];
if (cct) {
cct.style.visibility = "";
cct.style.display = "";
}
var name_suffix = (this.editingCmt ? 'Edit' : '');
var text = this.TC["js-CmtText" + name_suffix];
if(text && text.richEditor) {
try {
if (!this.anonymousCmt) {
tinyMCE.triggerSave(false, false);
}
var v = text.value;
tinyMCE.execCommand('mceRemoveControl', false, text.id); //tmce set value from its internal property
text.value = v;
} catch(e) { ; };
text.richEditor = false;
if(text.mceLoadedCtx) {
JSKW$Events.invalidateContext(text.mceLoadedCtx);
text.mceLoadedCtx = null;
}
}
var s = this;
JSKitLib.fmap(ccd, function(el, i){
el && el.parentNode && el.parentNode.removeChild(el);
});
if (this.editingCmt) {
JSKitLib.show(this.editingCmt);
delete this.editingCmt;
}
return false;
}
JSCC.prototype.smileTag = function(smile) {
return '';
}
JSCC.prototype.textSmiles2Graphical = function(text, reverse) {
var s = this;
if(window.tinyMCE) tinyMCE.settings.smiley = false;
var flag = true;
var orig = text;
JSKitLib.fmap(s.smiles, function(el, i){
text = reverse ? text.replace(el.regexpTag, ' ' + i + ' ') : text.replace(el.regexpText, function($0, $1){return ($1 ? $0 : s.smileTag(el));});
if(window.tinyMCE && flag && (text !== orig)) {
tinyMCE.settings.smiley = true;
flag = false;
}
});
return text;
}
JSCC.prototype.thirdPartyImport = function(KVLMsg) {
var s = this;
var text = JSKitLib.stripTags(KVLMsg['js-CmtText']);
var permalink = KVLMsg['permalink'] || s.config.permalink;
var reg = RegExp("^http(.)?://(.*?)/");
var m = reg.exec(permalink);
var domain = (m && m.length>1) ? m[2] : s.config.domain;
var share_data = {
'domain': domain,
'permalink': permalink,
'Text': text
};
var createTargetDiv = function() {
var tgt = 'div-sharing-' + Math.random();
var div = JSKitLib.html('');
s.target.appendChild(div);
return tgt;
}
var facebook = s.jskauth.getAuthIdentity("facebook");
if(facebook && KVLMsg['js-CmtShare-facebook']=='on') {
var jsk$fb = new JSKitFBSDK(
JSKitLib.getRef(s),
facebook.params.app_id,
facebook.params.xd_receiver,
function() {
this.shareComment(s.serverOptions.whitelabel);
},
undefined,
share_data);
}
var gfc = s.jskauth.getAuthIdentity("gfc");
if(gfc && gfc.params.site && KVLMsg['js-CmtShare-gfc']=='on') {
var jsk$gfc = new JSKitGFC(
JSKitLib.getRef(s),
createTargetDiv(),
gfc.params.site,
function(){
this.sharedata = share_data;
this.shareComment();
});
}
}
JSCC.prototype.appendFormFields = function(fields, tmpObj) {
var self = this;
var formFields = this.getKVListFromMsg(fields);
var extraFields = JSKitLib.foldl({}, this.extraFormFields, function(value, acc, name) {
if (name != "Email" || self.getSkin() != "echo") acc["js-Cmt" + name] = value;
});
var mergedFields = JSKitLib.foldl(extraFields, formFields, function(value, acc, name) { acc[name] = value; });
return JSKitLib.fmap(mergedFields, function(value, name) {
tmpObj[name.replace("js-Cmt", "")] = value;
return {"Name": name, "Value": value};
});
}
JSCC.prototype.CommentSubmitted = function() {
var s = this;
var prn = this.forMsg;
var isEditing = prn && prn.isEditing;
if(!isEditing && this.serverOptions.requireUsername && this.TC["js-CmtName"] && JHI2.isEmpty(this.TC["js-CmtName"])) {
alert($JCL('nicknameRequired'));
s.TC["js-CmtName"].focus();
return;
}
/* TinyMCE support (B) */
var name_suffix = (isEditing ? 'Edit' : '');
var text = this.TC["js-CmtText" + name_suffix];
var textValue;
if(text.richEditor) {
tinyMCE.triggerSave(false, false);
JSKW$Events.syncBroadcast("smileys-beforePostNewComment", text);
textValue = String(text.value).
replace(/(<\/p>)[\r\n]+()/g, '$1$2').
replace(/( ) (<\/p>)/g, '$1$2').
replace(/ /g, '\n').replace(/<\/p>/g, '').replace(/ /g, '\n').
replace(/^\n/, '');
} else {
textValue = String(text.value).replace(/&/g, '&');
}
var textMsg = (this.getSkin() != "echo" || !JHI2.isEmpty(text)) ? encodeURIComponent(textValue) : "";
if(!textMsg || !textMsg.length) {
alert($JCL("tooShort"));
return;
}
var mcl = this.serverOptions.maxCommentLength || 3000;
if(text.value.length > mcl) {
alert($JCL("tooLong",{"maxCommentLength":mcl}));
return;
}
var form = this.TC[isEditing ? "js-EditComment" : "js-CreateComment"];
var avt = this.avatarsManager.getActiveAvatar() || 'no';
var permalink = this.config.permalink;
var moderate = this.config.moderate;
var tmpObj = {yours:true};
if(prn) {
if (isEditing) {
tmpObj.ID = prn.ID;
} else {
tmpObj.ParentID = prn.ID;
}
tmpObj.path = prn.path;
if(prn.permalink) {
tmpObj.permalink = prn.permalink;
permalink = prn.permalink;
}
}
if (this.getSkin() == "echo" && this.extraFormFields["Url"] && this.jskauth.isLogged()) {
this.extraFormFields["Url"] = "";
}
this.extraFormFields["Name"] = this.getUserProperty("Name", "");
this.extraFormFields["Email"] = this.getUserProperty("Email", "");
this.extraFormFields["Webpresence"] = this.getSelectedIdentities();
var message = this.appendFormFields(this.inputFieldsMsg(form, tmpObj, textValue), tmpObj);
if (this.getSkin() == "echo") {
message.push({'Name': 'js-CmtNotifyMode', 'Value': s.serverOptions.notifyMode});
}
tmpObj["Name"] = tmpObj["Name"] || $JCL("guest");
/* combined ratings */
if (this.submitRating) {
rating = this.getRatingsAppObject().userRating;
message.push({'Name': 'js-CmtRating', 'Value': rating});
tmpObj.Rating = rating;
}
if(prn && !isEditing) {
message.push({'Name': 'js-CmtParentID', 'Value': prn.ID});
if(this.IM=='own' && prn.profile) {
message.push({'Name': 'destProfile', 'Value': prn.profile});
}
}
if(permalink) message.push({'Name': 'permalink', 'Value': permalink});
if (!isEditing) {
if(avt) message.push({'Name': 'avatar', 'Value': (avt.name ? avt.name : avt)});
} else {
tmpObj.isEditing = true;
}
if(moderate) this.pathOverride = this.forMsg.path;
var onsuccess = function(cmtObj) {
var KVLCmt = s.getKVListFromMsg(message);
// API: subscriber expects
// (ConstructedMessageObject[, FormDOM])
try {
JSKitAPI.askpublic.call(s, "comment-submit",
s.generateEventParams(KVLCmt), form);
} catch(e) {
return;
}
s.CommentCancelled();
if (s.TC['js-CmtText' + name_suffix]) {
s.TC['js-CmtText' + name_suffix].value = '';
}
if (s.clearImgs) {
s.clearImgs();
}
if (!isEditing) {
s.thirdPartyImport(KVLCmt);
}
if (s.extraControlsMenu) {
s.extraControlsMenu.collapseTabs();
}
var am = s.avatarsManagement;
if (am && am.avatarsListContainer) {
JSKitLib.hide(am.avatarsListContainer);
}
delete s.replyForId;
}
var onerror = function() {
var cover = s.commentPostingProcess.cover;
if (cover) {
JSKitLib.text($JCL('messagePostFailed'), cover.get("Label"), true);
cover.get("Img").src = "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/warning.gif";
JSKitLib.show(cover.get("Retry"), "inline");
} else {
alert($JCL("messagePostFailed"));
s.setStateLCF("enable");
}
}
this.postComment(tmpObj, message, {
'onsuccess': onsuccess,
'onerror': onerror
});
}
JSCC.prototype.prepareCommentObj = function(tmpObj) {
var cobj = JSKitLib.cloneObject(tmpObj);
if(cobj.isEditing) {
cobj.Text = cobj.TextEdit;
delete cobj.TextEdit;
} else if (cobj.echoItem) {
cobj.extra = {};
cobj.thread = [];
} else {
this.tmpID++;
cobj.ID = "jst-" + this.tmpID;
cobj.status = 'A';
cobj.profile = this.serverOptions.profile;
var avatar = this.avatarsManager.getActiveAvatar();
if (avatar) {
cobj.avatar = avatar.name;
cobj.avatarWidth = avatar.width;
cobj.avatarHeight = avatar.height;
}
cobj.avatarPlaceWidth = this.cmtAvatarPlaceWidth(cobj);
cobj.extra = {};
cobj.thread = [];
cobj.depth = 0;
cobj.admin = this.adminMode;
var d = new Date();
cobj.TS = Math.round(d.valueOf() / 1000) + (this.serverDiffTS || 0);
}
cobj.jcaIndex = this.jcaIndex;
return cobj;
}
JSCC.prototype.postComment = function(tmpObj, tmpMsg, options) {
var s = this;
var cmtObj = JSKitLib.cloneObject(tmpObj);
if (s.useEcho()) {
cmtObj.echoItemFirstTime = true;
}
if(s.images) cmtObj.imgs = s.images;
var msg = JSKitLib.fmap(tmpMsg, function(e){ return e; });
if(cmtObj.ParentID && !this.objById[cmtObj.ParentID]) {
this.invalidateJSPG();
if(options && options.onerror) options.onerror();
return;
}
cmtObj = this.prepareCommentObj(cmtObj);
/* Kick in message submission */
msg.push({'Name': 'tid', 'Value': cmtObj.ID});
s.prepareImgData(msg);
var src = (cmtObj.isEditing ? '.edit' : '.put');
var prms = this.getKVListFromMsg(msg);
s.commentPostingProcess = {
attempts: 1,
attemptsMax: 3,
cmtObj: cmtObj,
start: function(){
s.commentPostingProcess.timer = setTimeout(function(){
var p = s.commentPostingProcess;
if(!p) return;
if(p.attempts < p.attemptsMax) {
p.attempts++;
s.commentPostingProcess.start();
} else {
if(options && options.onerror)
options.onerror();
}
}, JSCC.REPOST_COMMENT_TIMEOUT);
s.setStateLCF("disable");
s.server(src, prms, true, {transport: 'POST'});
},
stop: function(){
s.setStateLCF("enable");
clearTimeout(s.commentPostingProcess.timer);
delete s.commentPostingProcess;
if(options && options.onsuccess)
options.onsuccess(cmtObj);
},
disableLCF: function() {
var container = s.TC["jsk-CommentFormSurface"];
if (!container || cmtObj.isEditing) return;
JSKitLib.addClass(container, "js-kit-relative");
var p = s.commentPostingProcess;
p.enableLCF();
p.cover = s.assembleCoverLCF();
container.appendChild(p.cover.content);
p.adjustCoverPosition(container);
},
enableLCF: function() {
var cover = s.commentPostingProcess.cover;
if (cover && cover.content.parentNode) {
var container = cover.content.parentNode;
container.removeChild(cover.content);
JSKitLib.removeClass(container, "js-kit-relative");
}
},
adjustCoverPosition: function(container) {
var cover = s.commentPostingProcess.cover;
if (JSKitLib.isIE()) {
cover.content.style.width = container.offsetWidth+ "px";
cover.content.style.height = container.offsetHeight + "px";
}
cover.get("Msg").style.top = (container.offsetHeight - cover.get("Msg").offsetHeight)/2 + "px";
}
};
s.commentPostingProcess.start();
}
JSCC.prototype.setStateLCF = function(state) {
this.setControlsStateLCF(state, [this.TC['js-Cmtcancel']]);
this.commentPostingProcess[state + "LCF"]();
}
JSCC.prototype.assembleCoverLCF = function() {
var s = this;
var attachEvent = function(element, extraCallback) {
element.href = "javascript:void(0);";
element.onclick = function() {
s.setStateLCF("enable");
delete s.commentPostingProcess;
if (extraCallback) extraCallback();
return false;
};
};
var descriptors = {
"Wrapper": function(element) {
JSKitLib.setOpacity(element, 0.7);
},
"Label": function(element) {
var attempts = s.commentPostingProcess.attempts;
JSKitLib.text($JCL("posting") + (attempts > 1 ? " (" + $JCL("attempt") + " " + attempts + ")" : "") + "...", element, true);
},
"Post": function(element) {
attachEvent(element, function() {
s.CommentSubmitted();
});
},
"Cancel": function(element) {
attachEvent(element);
}
};
return JSKitLib.toDOM(s.gtmpl(s.dtPostingCommentDialog), "js-CommentWaitSubmit", descriptors);
}
JSCC.prototype.getKVListFromMsg = function(msg) {
var prms = {};
JSKitLib.fmap(msg, function(v) { prms[v.Name] = v.Value; });
return prms;
}
JSCC.prototype.getRatingsAppObject = function() {
return this.isStandalone() ? null : $JSKitGlobal.getRatingsAppObject(this.uniq);
}
JSCC.prototype.hasRatingsAppObject = function() {
return this.getRatingsAppObject() ? true : false;
}
JSCC.prototype.embedRatingsAppObject = function(node) {
// One time
if ( ! this.embedRatingsAppObjectCompleted) {
$JSKitGlobal.copyRatingsAppObject(this.uniq, node);
this.embedRatingsAppObjectCompleted = true;
}
}
JSCC.prototype.createMiniStarObject = function(rating, scale) {
var rao = this.getRatingsAppObject();
var fullStar = rao.miniFullStar['user'];
var emptyStar = rao.miniEmptyStar['user'];
var starWidth = rao.miniStarWidth + 'px';
var starHeight = rao.miniStarHeight + 'px';
var setImage = function(star, imageURL) {
if(star.imageURL == imageURL)
return; // Already set and we know it
star.imageURL = imageURL;
if(document.body.filters) {
star.runtimeStyle.filter
= "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
+ imageURL + "', sizingMethod='crop')"
} else {
star.style.backgroundImage = 'url(' + imageURL + ')';
}
}
var obj = document.createElement('div');
/* Increment by Full Star Ratings */
for (var i=2; i <= scale; i += 2) {
var star = this.cr('div');
star.style.cssFloat = 'left';
star.style.styleFloat = 'left';
star.style.width = starWidth;
star.style.height = starHeight;
setImage(star, (rating >= i ? fullStar : emptyStar));
obj.appendChild(star);
}
return obj;
}
JSCC.prototype.rerenderName = function(cmt) {
var self = this;
var ctls = cmt.ctls;
var jsc = function(t){return ctls['js-singleComment'+t]};
var sn = jsc("Name");
if(sn && !(cmt.cobj.msgtype && cmt.cobj.msgtype.match(/T|P/))) {
sn.style.cursor = 'pointer';
self.appendProfileHandler(sn, cmt.cobj);
}
var su = jsc("Url");
if(su && cmt.cobj.Url && self.serverOptions.extraFieldURL
&& !(cmt.cobj.msgtype && cmt.cobj.msgtype.match(/T|P/))) {
su.style.cursor = 'pointer';
su.setAttribute('title', cmt.cobj.Url);
su.style.display = 'inline';
su.onclick = function() {
window.open(cmt.cobj.Url, '_blank');
return false;
}
}
}
JSCC.prototype.gotPermanentId = function(tmpid, msgId) {
var self = this;
if (!this.commentPostingProcess) return;
var cobj = this.commentPostingProcess.cmtObj;
this.commentPostingProcess.stop();
cobj.ID = msgId;
self.objById[msgId] = cobj;
var aux = arguments.length > 2 ? arguments[2] : {};
var props = {
'status': cobj,
'Text': cobj,
'originalText': cobj,
'mtext': self.serverOptions,
'mmode': self.serverOptions};
for(var pname in props) {
if(aux.hasOwnProperty(pname)) {
props[pname][pname] = aux[pname];
}
}
if (aux.Text) {
JSKW$Events.syncBroadcast('smileys-loadCommentsWidget', cobj, self.jcaIndex);
}
if(!self.serverOptions.profile && aux.profile) {
self.serverOptions.profile = aux.profile;
}
if (aux.profile) {
cobj.profile = aux.profile;
}
var fillObject = function(obj) {
if (aux.avatar) {
obj.avatar = aux.avatar;
obj.avatarWidth = aux.avatarWidth;
obj.avatarHeight = aux.avatarHeight;
obj.avatarPlaceWidth = self.cmtAvatarPlaceWidth(obj);
}
if (aux.destName) {
obj.destName = aux.destName;
}
if (aux.gravatarId) {
obj.GravatarID = aux.gravatarId;
}
return obj;
};
cobj = fillObject(cobj);
var cnvsObj = fillObject({"Name": cobj.Name});
if(aux.avatar || aux.gravatarId) {
self.placeAvatar(cobj);
}
if(this.IM && cobj.waitConversation) {
cnvsObj.direction = "out";
this.conversations[cobj.waitConversation.cnvsIdx] = cnvsObj;
cobj.conversation = cobj.waitConversation.cnvsIdx;
cobj.waitConversation = false;
cobj.hasCnvs = false;
}
this.isCommentSender = true;
this.routeAction(function() {
if (!this.isSourceAvailable("Comments")) return;
this.cmtInPlace(cobj, function() {
if (!this.isCommentSender) return;
this.controls.reveal();
this.reCalcPages();
if (this.useEcho() && this.serverOptions.expandLeaveCmt && !this.config.noautoexpand) {
this.ShowCommentDialog(undefined, {nofocus: true});
}
delete this.isCommentSender;
});
});
this.publishEvent(tmpid == msgId ? 'comment-edited' : 'comment-added', {'cmtId': msgId});
}
function JSReplyMSGId(tmpid, msgId) {
try {
var cobj;
var widget;
for(var i = 0; i < $JCA.length; i++) {
var p = $JCA[i].commentPostingProcess;
if(p && p.cmtObj && p.cmtObj.ID == tmpid && p.cmtObj.jcaIndex == $JCA[i].jcaIndex) {
cobj = p.cmtObj;
widget = $JCA[i];
break;
}
}
if (widget) widget.gotPermanentId.apply(widget, arguments);
} catch(e){}
}
function JSDeleteMSGId(msgId, jcaIndex, deletedCount) {
try {
var self = $JCA[jcaIndex];
var item = self.jspg.getItemById(msgId);
if(item) {
var cmt = item.div;
if(cmt.cobj.action)
JSKW$Events.syncBroadcast("comments_serverRequest_" + cmt.cobj.action);
self.routeAction(function() {
if(deletedCount>1){
this.tag = null;
this.invalidateJSPG();
var pageNo = this.curPage;
this.curPage = 0;
this.displayPage(pageNo);
} else {
this.postHandlerDelete(cmt);
}
});
}
} catch(e){}
}
function JSMarkOffensive() {
alert($JCL('markoffMessage'));
}
function JSCCLike(config) {
this.uriAvatar = JSCC.URI_AVATAR;
this.uriDomain = JSCC.DOMAIN;
this.avatarSize = {"width": "16", "height": "16"};
JSKitLib.fmap.call(this, config, function(v, k){ this[k] = v; });
this.voters = {"raw": this.voters};
this.initVoters();
this.loadCSS();
}
JSCCLike.prototype.loadCSS = function() {
JSKitLib.addCss(
".js-kit-like-label { float: left; margin-right: 5px; }" +
".js-kit-like-expand { float: left; cursor: pointer; }" +
".js-kit-like-name { float: left; }" +
".js-kit-like-avatar { float: left; margin-right: 2px; }" +
".js-kit-like-userButton { float: left; height: 16px; margin: 0px 5px 2px 0px; cursor: pointer; }" , "like");
}
JSCCLike.prototype.label = function(key, data){
return this.translator("like_" + key, data);
}
JSCCLike.prototype.initVoters = function(){
var self = this;
//if voters list contains more than 7 voters - display 5 voters and expand marker
this.displayLimit = {"reduced": 5, "full": 7};
var i = 0;
while (i < this.voters["raw"].length){
if (this.voters["raw"][i].profile == this.profile()){
//if voters list contains your profile we will show it first
this.voters["raw"].unshift(this.voters["raw"].splice(i, 1).shift());
this.voted = true;
break;
}
i++;
}
this.guestsCount = 0;
this.voters["normalized"] = JSKitLib.filter(function(voter){
if (voter.name == "" && voter.profile != self.profile()) self.guestsCount++;
return (voter.name != "" || voter.profile == self.profile());
}, this.voters["raw"]);
if (this.guestsCount > 0) {
this.displayLimit["full"]--;
this.displayLimit["reduced"]--;
}
if (this.voters["normalized"].length > this.displayLimit["full"]) {
this.voters["reduced"] = this.voters["normalized"].slice(0, this.displayLimit["reduced"]);
} else delete(this.voters["reduced"]);
this.assemble();
this.renderLikeControl();
}
JSCCLike.prototype.renderLikeControl = function(flag) {
var label = this.voted ? "unlike" : "like";
JSKitLib.text(this.label(label + (flag ? "_progress" : "")), this.likeControl, true);
this.likeControl.title = this.label(label + "_title");
}
JSCCLike.prototype.sendRequest = function(obj) {
var params = {
"p": this.path,
"id": this.ID,
"jx": this.jx,
"action": this.voted ? "unlike" : "like"
};
var request = JSKitLib.foldl(obj, params, function(value, acc, key) { acc[key] = value; });
new JSRVC({
"uri": this.uriDomain + '/comment-karma',
"request": request,
"ref": this.ref,
"epb": window.JSKitEPB ? JSKitEPB.getAsHash() : {}
});
}
JSCCLike.prototype.vote = function(action, obj) {
var voterInList = JSKitLib.lookup(function(voter){
return voter.profile == obj.profile;
}, this.voters["raw"]);
if (action == "like" && !voterInList) {
this.voters["raw"].unshift(obj);
this.initVoters();
}
if (action == "unlike" && voterInList) {
this.voters["raw"] = JSKitLib.filter(function(voter){
return voter.profile != obj.profile;
}, this.voters["raw"]);
this.voted = false;
this.initVoters();
}
}
JSCCLike.prototype.assembleVotersList = function(voters) {
var self = this;
var container = [];
var assembleSingleVoter = function(textLabel, avatar){
var template =
' ';
var dom = JSKitLib.toDOM(template, "js-kit-like-", {});
self.onVoterRender(dom, {"avatar": avatar});
return dom.content;
};
JSKitLib.fmap(voters || [], function(voter){
var avatar = voter.avatar ? {
"name": voter.avatar,
"width": voter.avatar_width,
"height": voter.avatar_height
} : undefined;
var textLabel = (voter["profile"] == self.profile()) ? self.label("you") : voter["name"];
var singleVoter = assembleSingleVoter(textLabel, avatar);
self.onVoterInit(singleVoter, {
"Name": voter.name,
"profile": voter.profile,
"avatarData": avatar
});
container.push(singleVoter);
});
if (this.guestsCount > 0){
var textLabel = self.label((self.guestsCount > 1) ? "guests" : "guest", {"guestsCount": self.guestsCount});
container.push(assembleSingleVoter(textLabel));
}
return container;
}
JSCCLike.prototype.assemble = function() {
var self = this;
if (!self.voters["normalized"].length && self.guestsCount == 0) {
JSKitLib.removeChildren(self.target);
return;
}
var descriptors = [
function(container) {
container.appendChild(JSKitLib.html('' + self.label("likedBy") + ' '));
},
function(container){
JSKitLib.fmap(self.assembleVotersList(self.voters["reduced"] && !self.expanded ? self.voters["reduced"] : self.voters["normalized"]), function(userButton){
container.appendChild(userButton);
});
},
function(container){
if (!self.voters["reduced"]) return;
self.expandMarker = JSKitLib.html('');
var expandLabel = self.label(self.expanded ? "collapseList" : "andXMore", {"count" : self.voters["normalized"].length - self.displayLimit["reduced"]});
JSKitLib.text(expandLabel, self.expandMarker, true);
JSKitLib.preventSelect(self.expandMarker);
JSKitLib.setEventHandler(self.expandMarker, ["click"], function(){
self.expanded = !self.expanded;
JSKitLib.removeChildren(self.target);
self.assemble();
});
container.appendChild(self.expandMarker);
}
];
JSKitLib.removeChildren(self.target);
JSKitLib.fmap(descriptors, function(descriptor){
descriptor(self.target);
});
this.onInit();
}
JSCCLike.prototype.getExpandMarker = function(element){
return this.expandMarker;
}
function JSCCKarma(cObj, self) {
var kObj = { p: cObj.karmaP || 0, n: cObj.karmaN || 0 };
this.score = kObj.p - kObj.n;
this.votes = kObj.p + kObj.n;
this.cObj = cObj;
this.self = self;
this.vote2text();
return this;
}
JSCCKarma.prototype.vote2text = function() {
this.votesText = this.votes + ' '
+ ((this.votes == 1) ? $JCL("vote") : $JCL("votes"));
}
JSCCKarma.prototype.recomputeScore = function(scoreAdjustment) {
var now = new Date();
if(this.votedAlready) {
this.score -= this.myVote;
} else {
this.votes += 1;
this.votedAlready = true;
var kObj = this;
setTimeout(function() {
var action = kObj.myVote > 0 ? '+' : '-';
kObj.self.server('-karma', {'id': kObj.cObj.ID,
'action': action});
}, 2000);
}
this.score += scoreAdjustment;
this.myVote = scoreAdjustment;
this.vote2text();
}
JSCC.prototype.divPages = function(so, items) {
var srv = so.pages;
this.curPage = 0;
var self = this;
if(!this.jspg && !this.useEcho()) {
this.jspg = new JSPGC(items.length, srv.ps);
this.jspg.dataRequest = function(pageIdx, pg, cb) {
var pageNo = pageIdx+1;
if(!pg.target) pg.target = self.cr('div');
var tgt = pg.target;
if(tgt.parentNode) tgt.parentNode.removeChild(tgt);
self.dataLoader = function() {
self.renderLeaveCommentForm();
self.curPage = 0;
self.displayPage(pageNo, function(immed){ cb.apply(self, [undefined, immed])});
}
if(srv.pn < 10)
srv.pn += 5;
self.getpages(pageNo - Math.ceil(srv.pn / 2), {'pn[0]': srv.pn});
JSKitLib.text($JCL("loading"), tgt, true);
return cb(tgt, false);
};
this.jspg.dataVisualizator = function(sIdx, arr, pg, cb) {
if(!pg.target) pg.target = self.cr('div');
var tgt = pg.target;
if(tgt.parentNode) tgt.parentNode.removeChild(tgt);
var itemsOnPage = arr.length;
var cnvs = [];
var cn = JSKitLib.fmap(arr,function(V,K){
if(!V.html) {
var oldN = V.obj.Name;
V.obj.Name = (self.IM && V.obj.yours) ? 'Me' : oldN;
var oldT = V.obj.Text;
if(V.obj.status=='DT') V.obj.Text = 'Deleted';
if (V.obj.Url && !V.obj.Url.match(/^https?:\/\//) ) {
V.obj.Url = "https://" + V.obj.Url;
}
V.obj.avatarPlaceWidth = self.cmtAvatarPlaceWidth(V.obj);
V.html = self.createCommentAsHTML(V.obj);
V.obj.Name = oldN;
V.obj.Text = oldT;
delete V.div;
}
V.div = JSKitLib.html(V.html);
V.div.id = V.obj.ID;
V.obj.hasCnvs = !cnvs[V.obj.conversation];
cnvs[V.obj.conversation] = true;
self.fixComment(V.div, V.obj, K, K+sIdx, itemsOnPage);
return V;
});
JSKitLib.removeChildren(tgt);
self.pageHeader(tgt, sIdx, arr, itemsOnPage);
if(self.dtGroupModeration)
tgt.appendChild(self.groupModerationBlock(self.dtGroupModeration));
for(var i=0; i1) {
var crdiv = function(className) {
var div = self.cr("div");
div.className = className;
return div;
};
var div = crdiv("js-TornPageDivider");
var divT = crdiv("js-TornPageDividerTop");
var divB = crdiv("js-TornPageDividerBottom");
div.appendChild(divT);
div.appendChild(divB);
tgt.appendChild(div);
}
}
self.pageFooter(tgt, sIdx, arr, itemsOnPage);
if(self.dtGroupModeration)
tgt.appendChild(self.groupModerationBlock(self.dtGroupModeration));
return cb(tgt, true);
};
}
if(!this.jspg && this.useEcho()) {
this.jspg = new JSKEchoPGC(srv.ps, srv.echo_after);
this.jspg.dataRequest = function(pageIdx, more, echo_after, cb) {
var pageNo = pageIdx+1;
if(!self.jspg.target) self.jspg.target = self.cr('div');
var tgt = self.jspg.target;
if(tgt.parentNode) tgt.parentNode.removeChild(tgt);
if(!more) JSKitLib.removeChildren(tgt);
self.dataLoader = function() {
self.renderLeaveCommentForm();
self.curPage = 0;
self.displayPage(pageNo, function(immed){ cb.apply(self, [undefined, immed])});
}
var params = {'echo[0]': true};
if (more && echo_after) params['echo_after[0]'] = echo_after;
self.getpages(undefined, params);
var pageNav = self.TC['js-PageNavBottom'];
if(pageNav) {
JSKitLib.removeChildren(pageNav);
pageNav.appendChild(JSKitLib.html(''));
}
self.jspg.loading = true;
return cb(tgt, false);
};
this.jspg.dataVisualizator = function(arr, cb) {
if(!self.jspg.target) self.jspg.target = self.cr('div');
var tgt = self.jspg.target;
var itemsOnPage = arr.length;
var cnvs = [];
var cn = JSKitLib.fmap(arr,function(V,K){
if(!V.html) {
var oldN = V.obj.Name;
V.obj.Name = (self.IM && V.obj.yours) ? 'Me' : oldN;
var oldT = V.obj.Text;
if(V.obj.status=='DT') V.obj.Text = 'Deleted';
if (V.obj.Url && !V.obj.Url.match(/^https?:\/\//) ) {
V.obj.Url = "https://" + V.obj.Url;
}
if(V.obj.event_publisher) {
if(typeof(V.obj.content) == 'string')
eval('var content = ' + V.obj.content + '; V.obj.content = content;');
// Removing links to this page
var sanitizer = function(url) {
if (!url) return '';
if ('/' != url[url.length - 1]) url = url + '/';
return url.split('#', 2)[0]
.toLowerCase()
.replace(/\butm_(source|medium|term|content|campaign)=[^&$]+(&|$)/g, '')
.replace(/\?*&*$/, '')
.replace(/^https?:\/\/(www\.)?/, '')
.replace(/\/\/+/, '/');
};
var el = document.createElement('div');
el.innerHTML = V.obj.content.title;
var ref = sanitizer(self.config.permalink);
var links= JSKitLib.getElementsByClass(el, '*', 'a');
JSKitLib.fmap(links, function(link) {
var data_resolved = sanitizer(link.getAttribute('data-resolved'));
var href = sanitizer(link.href);
if((href == ref) || (data_resolved == ref))
link.parentNode.removeChild(link);
});
var clearText = JSKitLib.trim(el.innerHTML.replace(/<\/?wbr>/g, ''));
if (clearText == "") {
el.innerHTML = $JCL("sharedThisOn", {"service_name": V.obj.content.service.name || V.obj.event_publisher});
}
V.obj.content.title = el.innerHTML;
if(V.obj.content.user && (V.obj.content.user.profileUrl || V.obj.content.user.avatarUrl)) {
V.obj.avatar = V.obj.GravatarID = (V.obj.content.user.avatarUrl ||
V.obj.content.user.profileUrl + "/picture?size=medium");
V.obj.avatarWidth = "50";
V.obj.avatarHeight = "50";
V.obj.avatarPlaceWidth = self.cmtAvatarPlaceWidth(V.obj);
V.obj.ProfileURL = V.obj.content.user.profileUrl;
}
V.html = self.tmpl(self.ffComment, V.obj);
} else {
V.obj.avatarPlaceWidth = self.cmtAvatarPlaceWidth(V.obj);
V.html = self.createCommentAsHTML(V.obj);
}
V.obj.Name = oldN;
V.obj.Text = oldT;
V.$olddiv = V.div;
V.$isnew = true;
V.div = JSKitLib.html(V.html);
if (V.obj.extra && V.obj.extra.cssClass) {
JSKitLib.addClass(V.div, V.obj.extra.cssClass);
}
}
V.div.id = V.obj.ID;
V.obj.hasCnvs = !cnvs[V.obj.conversation];
cnvs[V.obj.conversation] = true;
if(V.obj.echoItemFirstTime && !V.obj.havingEffect) {
V.div.style.overflow = 'hidden';
V.div.style.height = "1px";
V.obj.height = 1;
}
if(V.$isnew)
self.fixComment(V.div, V.obj, K, K, itemsOnPage);
return V;
});
for(var i=0; i0) {
req.variableRequest = idlist.spam;
req.request.junk = 'no';
req.uri = this.uriDomain + '/comments-junk';
new JSRVC(req);
}
if(idlist.appr.length>0) {
req.variableRequest = idlist.appr;
req.uri = this.uriDomain + '/comments-approve';
new JSRVC(req);
}
if(idlist.del.length>0) {
req.variableRequest = idlist.del;
req.request.apr = 'message';
req.uri = this.uriDomain + '/comments-del';
new JSRVC(req);
}
break;
case 'delete':
req.uri = this.uriDomain + '/comments-del';
new JSRVC(req);
break;
case 'spam':
req.request.junk = 'yes';
req.uri = this.uriDomain + '/comments-junk';
new JSRVC(req);
break;
case 'user':
req.request.apr = 'user';
req.uri = this.uriDomain + '/comments-del';
new JSRVC(req);
break;
case 'blockuser':
req.request.by = 'user';
req.uri = this.uriDomain + '/comments-block';
new JSRVC(req);
break;
case 'blockip':
req.request.by = 'ip';
req.uri = this.uriDomain + '/comments-block';
new JSRVC(req);
break;
case 'unban':
if(this.config.permalink) req.request.permalink = this.config.permalink;
req.request.unban = 1;
req.uri = this.uriDomain + '/comments-approve';
new JSRVC(req);
break;
};
}
JSCC.prototype.pageHeader = function(target, globalIndex, items, itemsOnPage) {
if(this.getSkin()=='smoothgray' && itemsOnPage>0 && items.length>0 && (!this.adminMode || this.inlineModeration)) {
var obj = items[0].obj;
if(obj.cedge!=3 && obj.cedge!=1) {
var div = this.cr("div");
div.className = "js-TornPageTop";
if(JSKitLib.isIE()) {
var img = this.cr("img");
img.className = "js-TornPageTopImg";
img.src = "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/tornPaperT.gif";
div.appendChild(img);
}
target.appendChild(div);
}
}
}
JSCC.prototype.pageFooter = function(target, globalIndex, items, itemsOnPage) {
if(this.getSkin()=='smoothgray' && itemsOnPage>0 && items.length==itemsOnPage && (!this.adminMode || this.inlineModeration)) {
var obj = items[itemsOnPage-1].obj;
if(obj.cedge!=3 && obj.cedge!=2) {
var div = this.cr("div");
div.className = "js-TornPageBottom";
if(JSKitLib.isIE()) {
var img = this.cr("img");
img.className = "js-TornPageBottomImg";
img.src = "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/tornPaperB.gif";
div.appendChild(img);
}
target.appendChild(div);
}
}
}
JSCC.prototype.htmlPaginate = function(thread) {
return this.htmlPaginator(thread, []);
}
JSCC.prototype.htmlPaginator = function(thread, arr) {
var tl = thread.length;
for(var i = 0; i < tl; i++) {
var obj = thread[i];
var present = (obj.status == 'D') ? 0 : 1;
if(present) {
arr.push(obj);
}
this.htmlPaginator(obj.thread, arr);
}
return arr;
}
JSCC.prototype.restoreEchoAfter = function() {
if(this.useEcho()) {
this.jspg.echo_after = this.jspg.$old_echo_after;
}
}
JSCC.prototype.invalidateJSPG = function() {
this.restoreEchoAfter();
this.jspg.invalidate();
}
// Part of externally useable API
JSCC.prototype.rerender = function() {
var pageToDisplay = this.curPage;
this.restoreEchoAfter();
this.curPage = 0;
this.jspg.invalidatePagesView(pageToDisplay-1, 1);
this.displayPage(pageToDisplay);
}
JSCC.prototype.setPath = function(path) {
this.pathOverride = path;
}
JSCC.prototype.detectCommentDialogOpened = function() {
var ccd = this.TC[this.forMsg && this.forMsg.isEditing ? "js-EditComment" : "js-CreateComment"];
return !!ccd && JSKitLib.hasParentNode(ccd) && ccd.style.display == 'block';
}
JSCC.prototype.displayPage = function(pageNo, cb) {
if(this.loading && !cb) {
var nt = (new Date()).valueOf();
if((nt - this.loading) > 5000) {
this.gen++;
} else {
return;
}
}
if(pageNo < 1)
return;
if(pageNo > this.jspg.pageCount)
pageNo = this.jspg.pageCount;
var immediate = true;
if(this.curPage != pageNo) {
var cd = this.detectCommentDialogOpened();
try {
if (!this.useEcho() || this.forMsg) this.CommentCancelled();
} catch(e) { }
if(!this.useEcho())
try {
if(this.curPage) {
var p = this.jspg.getPage(this.curPage - 1);
if(p && p.target && p.target.parentNode)
p.target.parentNode.removeChild(p.target);
}
} catch(e) { }
var oc = this.TC["js-OldComments"];
var self = this;
if(this.useEcho()) {
this.curPage = 1;
var pcb = function(p, immed) {
if(p) {
if(self.jspg.target && !JSKitLib.hasParentNode(self.jspg.target)) oc.appendChild(p);
p.style.display = '';
}
if(immed && cb) cb.apply(self, [immed]);
};
this.jspg.getPageVisualization(pageNo-1, pcb);
if(cd && this.replyForId) {
var parentMsg = this.jspg.getItemById(this.replyForId);
this.ShowCommentDialog(parentMsg ? this.replyForId : undefined);
}
cd = undefined;
} else {
this.curPage = pageNo;
var pcb = function(p, immed) {
if(p) {
oc.appendChild(p);
p.style.display = '';
}
if(immed && cb) cb.apply(self, [immed]);
};
this.jspg.getPageVisualization(pageNo-1, pcb);
}
immediate = false;
if (cd && !this.forMsg) { // show only if not reply and not editing
if (((this.config.nolc && this.IM == 'foreign') || (this.serverOptions.expandLeaveCmt && !this.config.noautoexpand)) && !this.config.moderate) {
this.ShowCommentDialog(undefined, {nofocus: true});
}
}
}
var ocw = this.TC["js-OldCommentsWrap"];
if (this.jspg.itemsCount != 0)
{
JSKitLib.show(ocw);
}
else
{
JSKitLib.hide(ocw);
}
if(!this.jspg.loading || !this.useEcho()) this.rePageNavigator(this.curPage-1);
if(immediate && cb) cb.apply(this, [immediate]);
}
JSCC.prototype.SearchLine = function() {
var self = this;
var sExit = self.cr('span');
var title = self.cr('span');
title.className = 'js-SearchTitle';
title.innerHTML = ''+$JCL("youSearchedFor")+':';
sExit.appendChild(title);
var line = self.cr('span');
line.className = 'js-SearchWords';
text = JSKitLib.truncate(self.searchString, 15, "...", true);
line.insertBefore(JSKitLib.text(text),line.firstChild);
sExit.appendChild(line);
var del = self.cr('input');
del.type = 'button';
del.value = $JCL('clearSearch');
sExit.appendChild(del);
var obj={
'containerElement': sExit,
'field': line,
'itemObject': self,
'type': 'Search',
'Property': 'searchString',
'title': $JCL("youSearchedFor")+': ',
'mode': 'full'
};
obj.jsipe$start = function(){
del.style.display = "none";
line.style.border = "0px";
title.style.display = "none";
return true;
}
obj.jsk$on_submit_exit = function(value){
self.searchString = value;
self.viewControl({name: "search"});
}
line.wasEdited = function(value){
JSKitLib.text(JSKitLib.truncate(value, 15, "...", true), line, true);
del.style.display = "";
line.style.borderBottom = "";
title.style.display = "";
}
del.onclick = function(){
this.name="del-line";
self.viewControl(this);
}
var jsipe = new JSIPE(obj);
return sExit;
}
JSCC.prototype.navSym = { "prev": "←", "next": "→" };
JSCC.prototype.rePageNavigator = function(pageIdx) {
var s = this;
var hasMultiplePages = s.jspg.pageCount > 1 || s.jspg.echo_after;
var display = s.searchString || hasMultiplePages ? "" : "none";
var assemblePageNavigation = function() {
var navigation = '';
if (hasMultiplePages) {
navigation = s.useEcho()
? s.pageNavigatorEchoLive(s.jspg.pageCount, s.jspg.echo_after)
: s.getSkin() == "echo"
? s.pageNavigatorEcho(s.jspg.pageCount, s.curPage)
: s.pageNavigator(s.jspg.pageCount, s.curPage);
}
return (typeof(navigation) == "string")
? JSKitLib.html('' + (navigation || '') + ' ')
: navigation;
};
var nvs = s.useEcho() ? ['Bottom'] : ['Top','Bottom'];
for(var i = 0; i < nvs.length; i++) {
var bar = s.TC['js-PageNav' + nvs[i]];
if (!bar) continue;
JSKitLib.replaceChildren(bar, assemblePageNavigation());
JSKitLib.preventSelect(bar);
bar.style.display = display;
if(i) bar.style.display = ((pageIdx==undefined) ? 'none' : '');
if(s.searchString) s.addChild(bar, s.SearchLine(), true);
}
}
JSCC.prototype.pageNavigator = function(pages, cur) {
var self = this;
var arr = [];
var postingProcessValidation = "if ($JCA["+self.jcaIndex+"].commentPostingProcess) { alert($JCL('messagePostingInProgress')); return false; }";
var f = function(i, txt, cmt, cls, cf) {
return '' + txt + ' '; }
arr.push($JCL('page'));
arr.push(f(cur - 1, this.navSym.prev, $JCL('pagePrevious'),
'js-PageArrow' + ((cur == 1)?' js-PageArrowCur':'')));
for(var i = 1; i <= pages; i++) {
if((i == 4 || i == 3) && (cur - i) > 3) {
i = Math.floor((cur - i) / 2 + i);
arr.push(f(i, '…', 'Page-' + i));
i = cur - ((pages - cur > 3 || cur == pages) ? 2 : 1);
}
if((i == cur + 3) && (pages - cur) > 4) {
i = Math.floor((pages - cur) / 2 + cur);
arr.push(f(i, '…', 'Page-' + i));
i = pages - 1;
}
if(i == cur) {
arr.push(f(i, i, 'Page-' + i, "js-PageNCur", '$JCA['+self.jcaIndex+'].jspg.invalidate(); $JCA['+self.jcaIndex+'].rerender();'));
} else {
arr.push(f(i, i, 'Page-' + i));
}
}
arr.push(f(cur + 1, this.navSym.next, $JCL('pageNext'),
'js-PageArrow' + ((pages == cur)?' js-PageArrowCur':'')));
return arr.join('');
}
JSCC.prototype.pageNavigatorEcho = function(pages, cur) {
var self = this;
var assemble = function(container, i, txt, cmt, cls, cf) {
var isInactive = function(cls) {
return cls && cls.match(/PrevOff|NextOff|Active/);
};
var template =
'' +
(isInactive(cls) ? txt : '' + txt + '') +
'';
var scroll = function() {
var anchor = self.TC['jsk-HeaderWrapper'];
if (!anchor || JSKitLib.getStyleProperty(anchor, 'display') == 'none') {
anchor = self.TC['jsk-ThreadWrapper'];
}
if (anchor) anchor.scrollIntoView(true);
};
var linkHandler = function(element) {
element.href = "#" + cmt;
element.onclick = function() {
if (self.commentPostingProcess) {
alert($JCL('messagePostingInProgress'));
return false;
}
if (cf) {
cf();
return false;
}
self.displayPage(i, function() {
self.hideExpirationBanner();
setTimeout(scroll, 0);
});
return false;
};
JSKitLib.setMouseEvent(element, "over", function() {
window.status = cmt;
});
JSKitLib.setMouseEvent(element, "out", function() {
window.status = '';
});
};
container.appendChild(JSKitLib.toDOM(template, "js-Page",
{"Link": linkHandler}).content);
}
var template =
'';
var assemblePages = function(element) {
assemble(element, cur - 1, $JCL('btnPagePrevious'), $JCL('pagePrevious'),
((cur == 1) ? 'jsk-PrevOff' : 'jsk-Prev'));
for(var i = 1; i <= pages; i++) {
if((i == 4 || i == 3) && (cur - i) > 3) {
i = Math.floor((cur - i) / 2 + i);
assemble(element, i, '…', 'Page-' + i);
i = cur - ((pages - cur > 3 || cur == pages) ? 2 : 1);
}
if((i == cur + 3) && (pages - cur) > 4) {
i = Math.floor((pages - cur) / 2 + cur);
assemble(element, i, '…', 'Page-' + i);
i = pages - 1;
}
if(i == cur) {
var cb = function() {
self.jspg.invalidate();
self.rerender();
};
assemble(element, i, i, 'Page-' + i, 'jsk-Active', cb);
} else {
assemble(element, i, i, 'Page-' + i);
}
}
assemble(element, cur + 1, $JCL('btnPageNext'), $JCL('pageNext'),
((pages == cur) ? 'jsk-NextOff' : 'jsk-Next'));
};
return JSKitLib.toDOM(template, "jsk-", {"Pager": assemblePages}).content;
}
JSCC.prototype.pageNavigatorEchoLive = function(pages, cur) {
var self = this;
var template =
'' +
'{Label:More}' +
' ';
var moreButtonHandler = function(element) {
element.onclick = function() {
self.displayPage(2);
};
JSKitLib.setMouseEvent(element, "over", function() {
JSKitLib.addClass(element, "jsk-PagerItemHover");
});
JSKitLib.setMouseEvent(element, "out", function() {
JSKitLib.removeClass(element, "jsk-PagerItemHover");
});
};
return JSKitLib.toDOM(this.gtmpl(template), "js-Page", {"More": moreButtonHandler}).content;
}
JSCC.prototype.hideSettingsWindow = function(wname) {
if(this[wname]) this.settingsWindow(wname);
}
JSCC.prototype.showProgress = function(wname, on) {
if(this[wname]) this[wname].showProgress(on);
}
JSCC.prototype.settingsWindow = function(wname, atDiv, html) {
var s = this;
if(s[wname]) {
if(!s.sWHideable) return;
s[wname].parentNode.removeChild(s[wname]);
delete s[wname];
return;
}
var nohide = function() {
s.sWHideable = false;
if(s.swsHidt) clearTimeout(s.swsHidt);
s.swsHidt = setTimeout(function(){s.sWHideable=true}, 100);
}
var div = this.cr("div");
div.className = "js-SettingsWindow";
if (s.config.nolc) JSKitLib.addClass(div, "js-SettingsWindowNolc");
div.style.background = '#FFFFFF url('+this.uriDomain
+'/images/bg-header-gray.png) bottom repeat-x';
div.onclick = nohide;
div.onselectstart = function() { return false; }
if(typeof(html) == 'string') {
div.innerHTML = html;
} else {
if(!html.dropWidth) div.style.width = '20em';
div.appendChild(html);
}
if (wname == 'ctWnd' && s.TC['js-WelcomePanel']) {
var aoh = s.cr('div');
aoh.className = 'js-SettingsWindowHeader';
JSKitLib.text($JCL('administratorOptions'), aoh);
div.appendChild(aoh);
var wp = s.TC['js-WelcomePanel'];
var links = JSKitLib.html(''
+ '');
var tc = JSKitLib.mapClass2Object({}, links);
div.appendChild(links);
tc['js-WelcomeOpenPanel'].onclick = function() {
JSKitLib.toggle(wp);
JSKitLib.text($JCL(JSKitLib.visible(wp) ? 'closeWelcome' : 'openWelcome'), this.lastChild.lastChild);
};
tc['js-WelcomeContact'].onclick = function(){location.href = s.uriDomain + '/comments/qa.html';};
}
var pgr = this.cr('div');
pgr.className = "js-Progress";
var url = this.uriDomain + '/images/progress-wg.png';
if(document.body.filters) {
pgr.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + url + ", sizingMethod=crop)";
} else pgr.style.backgroundImage = 'url(' + url + ')';
div.appendChild(pgr);
div.showProgress = function(on) {
if(!on) {
if(div.pIntvl) clearInterval(div.pIntvl);
div.pIntvl = null;
pgr.style.visibility = 'hidden';
return;
} else if(div.pIntvl) return;
var f = function() {
pgr.vison = !pgr.vison;
pgr.style.visibility = pgr.vison
? 'visible' : 'hidden';
}
f();
div.pIntvl = setInterval(f, 500);
}
s[wname] = div;
var swh = this.cr("div");
swh.className = "js-SettingsWindowHeader";
JSKitLib.text($JCL(wname == 'ctWnd' ? "viewOptions" : "moderation"), swh);
div.insertBefore(swh, div.firstChild);
div.style.position = "absolute";
var jsd = new JSDL(div, [swh]);
document.body.appendChild(div);
div.style.left = jsd.getElmAbsPos(atDiv, false).x + "px";
div.style.top = jsd.getElmAbsPos(atDiv, false).y + atDiv.offsetHeight + "px";
try {
if (document.body.clientWidth < jsd.getElmAbsPos(atDiv, false).x + div.offsetWidth)
div.style.left = document.body.clientWidth - div.offsetWidth -
(parseInt(div.style.marginLeft) || 0) -
(parseInt(div.style.marginRight) || 0) + "px";
} catch(e) {;}
var ifrWr;
if(JSKitLib.getBrowser() == 'gecko' && !atDiv.notShowIfr) {
ifrWr = this.cr("div");
ifrWr.id = "jsk-yIfr";
var yIfr = this.cr("iframe");
yIfr.style.position = "absolute";
yIfr.style.top = 0;
yIfr.style.left = 0;
yIfr.style.zIndex = -1;
yIfr.style.display = "block";
yIfr.style.height = div.offsetHeight + "px";
yIfr.style.width = div.offsetWidth + "px";
yIfr.scrolling = "no";
yIfr.frameBorder = "0";
ifrWr.appendChild(yIfr);
div.appendChild(ifrWr);
}
div.jsk$on_start_drag = function(){if(ifrWr) ifrWr.style.display = "none"};
div.jsk$on_stop_drag = function(){if(ifrWr) ifrWr.style.display = ""};
nohide();
}
JSCC.prototype.getImages = function(id) {
var arg = {rnd: id, jx: this.jcaIndex};
this.server(this.uriDomain + '/api/images/pick-attachments.js', arg);
}
JSCC.prototype.prepareImgData = function(msg) {
if(this.images){
JSKitLib.removeChildren(this.imgArea);
JSKitLib.map(function(elem, i){
JSKitLib.fmap(['img','orig','width','height','descr','mime'],
function(E) { msg.push({'Name': 'js-CmtattachFile_'+i+'_'+E, 'Value': elem[E]})}
);
},this.images);
}
}
JSCC.prototype.parseImgData = function(obj) {
var re = /attachFile_(\d+)_(\w+)/;
var imgs = [];
for (var i in obj){
var keys = re.exec(i);
if (keys) {
if (!imgs[keys[1]]) imgs[keys[1]] = {};
imgs[keys[1]][keys[2]] = obj[i];
}
}
return imgs;
}
JSCC.prototype.createImages = function(imgs, isPreview){
var s = this;
var d=function(){return s.div.apply(s,arguments);}
var content = isPreview ? d() :
d("js-all-previewImages",d("js-previewImageTitle jsk-ItemAttachmentsTitle jsk-SecondaryBackgroundColor", $JCL('picTitle')),
JSKitLib.html(''));
var bloburl = function(name) {
return name.match(/^[^\/]+$/)?(s.uriDomain+"/blob/"+name):"";
}
var crImg = function(elem, i){
var img = d("js-previewImage jsk-ItemAttachmentWrapper");
var thumb = s.cr("img");
elem.descr = elem.descr || '';
thumb.src = bloburl(elem.img);
JSKitLib.setStyle(thumb, " width: "+elem.width+"px; height: "+elem.height+"px; cursor: pointer;");
JSKitLib.addClass(thumb, "jsk-ItemAttachmentIcon");
var wrap = d("js-imageWrap jsk-ItemAttachmentIconWrapper");
JSKitLib.setStyle(wrap, "margin-top: " + ((96-elem.height)/2) + "px; margin-bottom: " + ((96-elem.height)/2) + "px;");
thumb.onclick = function() { window.open(bloburl(elem.orig)); }
var text = d("js-previewImageDescr jsk-ItemAttachmentLabel");
s.addChild(wrap, thumb);
s.addChild(img, wrap);
if (isPreview) {
var wasEdited = function(){
if(elem.descr != "" ) JSKitLib.removeClass(text,"js-uploadGreyDescr");
else JSKitLib.addClass(text,"js-uploadGreyDescr");
}
var jsipe = new JSIPE2({obj: elem,
property: 'descr',
title: 'Description',
defaultText: 'Add caption',
width: '90px',
maxLength: 80,
hideApplyBtn: true,
jsk$wasEdited: wasEdited
});
text.appendChild(jsipe.div);
var onEditBtnClick = function(e){
if(jsipe.editMode) jsipe.editMode(e);
JSKitLib.stopEventPropagation(e || window.event);
}
var onDeleteBtnClick = function(e){
img.parentNode.removeChild(img);
if(imgs && imgs[i]) imgs.splice(i, 1);
JSKitLib.stopEventPropagation(e || window.event);
}
var editBtn = s.crImgCtrl("edit", {top: "60px", left: "15px"}, onEditBtnClick);
var deleteBtn = s.crImgCtrl("delete", {top: "60px", left: "57px"}, onDeleteBtnClick);
var displayMode = function(mode){
editBtn.style.display = mode;
deleteBtn.style.display = mode;
}
img.onmouseover = function(e) { displayMode("inline"); }
img.onmouseout = function(e) { displayMode("none"); }
s.addChild(img, editBtn);
s.addChild(img, deleteBtn);
if(elem.descr == "") JSKitLib.addClass(text,"js-uploadGreyDescr");
} else {
text.innerHTML = elem.descr.replace(//g,">");
}
thumb.title = JSKitLib.htmlUnquote(elem.descr);
s.addChild(img, text);
s.addChild(content, img);
}
JSKitLib.map(crImg,imgs);
s.addChild(content, JSKitLib.html(''));
return content;
}
JSCC.prototype.crImgCtrl = function(type, position, onClick) {
var btn = this.cr("div");
var ctrlBtn = { width : "30px", height : "30px", imgWidth : "30px", imgHeight : "30px" };
JSKitLib.setStyle(btn, "display:none; background:transparent; position:absolute; float:left; padding:0; margin:0; "
+ "width:" + ctrlBtn.width + "; height:" + ctrlBtn.height + "; cursor: pointer;"
+ "top:" + position.top + "; left:" + position.left);
btn.title = $JCL(type + "Image");
btn.onclick = onClick;
imgUrl = this.uriDomain + "/images/" + "avatar-" + type + ".png";
JSKitLib.addPNG(btn, imgUrl);
return btn;
}
JSCC.prototype.addImage = function(img) {
if(this.lbliChange) this.lbliChange(0);
if (typeof(img) == "object"){
if (img.error) {
switch (img.error) {
case 'big_image':
alert($JCL('imgUploadErrorBigImage'));
break;
case 'wrong_format':
alert($JCL('imgUploadErrorWrongFormat'));
break;
case 'internal_error':
default:
alert($JCL('imgUploadErrorInternal'));
}
return;
}
if (this.images) this.images.push(img)
else this.images = [img];
if (!this.imgArea) return;
JSKitLib.removeChildren(this.imgArea);
var content = this.createImages(this.images, true);
this.addChild(this.imgArea, content);
}
}
JSCC.prototype.viewControl = function(sel) {
var s = this;
var ap = { "usr": "yes" };
switch(sel.name) {
case "jss-srt":
var newSortBy = sel.options[sel.selectedIndex].value;
if(newSortBy == s.config.sort) return true;
s.config.sort = newSortBy;
s.showProgress('ctWnd', true);
break;
case "jss-rev":
var backwardsNewStatus = sel.selectedIndex?'yes':'no';
if(s.config.backwards == backwardsNewStatus) return true;
s.config.backwards = backwardsNewStatus;
s.showProgress('ctWnd', true);
break;
case "jss-prs":
var newThr = sel.options[sel.selectedIndex].value == 'flat' ? 'no' : 'yes';
if(newThr == s.config.thread) return true;
s.config.thread = newThr;
s.showProgress('ctWnd', true);
break;
case "search":
ap.srch = s.searchString;
break;
case "del-line":
break;
default: return false;
}
s.dataLoader = function() {
this.showProgress('ctWnd', false);
this.curPage = 0;
this.displayPage(1); }
if(this.curPage) {
var p = this.jspg.getPage(this.curPage - 1);
if(p && p.target && p.target.parentNode)
p.target.parentNode.removeChild(p.target);
}
s.ctag = null;
ap.opts = s.config.sort+'|'+(s.config.backwards == "yes" ? "desc" : "asc")+'|'+(s.config.thread == "yes" ? "thr" : "flat");
s.getpages(0, ap);
return true;
}
JSCC.prototype.placeAvatar = function(obj, div) {
div = div || obj.avatarPlace;
if(!div) return;
if(this.getSkin() != 'echo' && !obj.avatar && !obj.GravatarID) {
obj.avatarPlace = div;
return;
}
var container = {
"instance": div,
"width": obj.avatarPlaceWidth,
"height": obj.avatarPlaceWidth
};
this.appendAvatarImage(container, obj);
this.appendProfileHandler(div, obj);
return div;
}
JSCC.prototype.appendAvatarImage = function(container, obj) {
var self = this;
obj = obj || {};
var avtCtrl = this.avatarsManager;
var data = obj.avatar ?
{"name": obj.avatar, "width": obj.avatarWidth, "height": obj.avatarHeight} :
avtCtrl.anonymousAvatarData();
var avatar = avtCtrl.calcAvatarDim(container, data);
avatar.name = obj.GravatarID ?
avtCtrl.getGravatarURL(obj.GravatarID, this.maxAvatarDims) :
avtCtrl.avatarURL(avatar.name);
avatar.onerror = function() {
this.onerror = null;
self.appendAvatarImage(container);
}
avtCtrl.assembleAvatar(container, avatar);
}
JSCC.prototype.placeProcessAvatar = function(div) {
if(!div) return;
JSKitLib.removeChildren(div);
JSKitLib.addPNG(div, '//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/progress-wg.png');
JSKitLib.addStyle(div, "width: 15px; height: 15px;");
}
JSCC.prototype.refreshComments = function(params) {
var s = this;
params = params || {};
s.deleteWelcomePanel();
s.hideExpirationBanner();
s.invalidateJSPG();
s.objById = {};
if (s.curPage == 1) s.curPage = 0;
s.displayPage(1, function() {
if (!s.isSourceAvailable("Comments")) return;
s.preventAnonymousComments();
s.makeWelcomePanel();
s.ShowCommentDialog(s.replyForId, params);
});
}
JSCC.prototype.preventAnonymousComments = function() {
var anonymCond = this.anonymousCmt && !this.jskauth.isLogged();
this.setControlsStateLCF(anonymCond ? "disable" : "enable");
}
JSCC.prototype.setControlsStateLCF = function(state, extraControls) {
var s = this;
var disable = state == "disable";
var disableCtrls = JSKitLib.merge([s.TC['js-CmtText'], s.TC['js-CmtTextEdit'], s.TC['js-Cmtsubmit'], s.TC['js-CmtsubmitEdit'], s.TC['js-CmtcancelEdit'], s.TC['js-CmtName'], s.TC['js-CmtEmail'], s.imgUpload], extraControls || []);
var lockCtrls = [s.TC['js-Cmtsubmit']];
var imgArea = s.TC['js-commentImageArea'];
JSKitLib.fmap(disableCtrls, function(V){ if (V) V.disabled = disable; });
JSKitLib.fmap(lockCtrls, function(V){ if (V) V.btnLocked = (disable) ? "true" : null; });
if (imgArea) imgArea.disableUpload = disable;
}
JSCC.prototype.setThirdPartyShare = function() {
var s = this;
var po = s.TC["js-commentPubOptions"];
if(!po) return;
JSKitLib.removeChildren(po);
var appendSharingControl = function(type, extraElement) {
var identity = s.jskauth.getAuthIdentity(type);
var publish = identity && identity.publish;
var control = JSKitLib.html('');
control.defaultChecked = !!publish;
control.checked = !!publish;
control.value = control.checked ? "on" : "off";
control.onchange = function() {
this.value = this.checked ? "on" : "off";
};
var label = JSKitLib.html('');
po.appendChild(control);
po.appendChild(label);
if (extraElement) po.appendChild(extraElement);
};
JSKitLib.fmap(s.jskauth.getIdentities("auth"), function(identity) {
if (identity.can_publish && identity.user) {
var extraElement = (identity.type == "yahoo") ? JSKitLib.html('') : undefined;
appendSharingControl(identity.type, extraElement);
}
});
}
JSCC.prototype.wrapJSKAuth = function() {
var s = this;
var tc = s.TC;
var appendAuthSelector = !tc["js-kit-lcf-userInfoWrapper"];
if (s.config.nolc) return;
if (!tc['js-AuthAreaWrap']) {
var items = ['js-commentOpenID', 'js-commentInputOpenID', 'js-CmtOpenID', 'js-OpenIDError'];
JSKitLib.fmap(items, function(item) {
if (tc[item]) tc[item].parentNode.removeChild(tc[item]);
});
if (appendAuthSelector) return;
}
var authAreaTmpl =
'' +
'' +
' ' +
' ' +
' []' +
' ' +
' ';
if (tc['js-commentInputOpenID']) JSKitLib.hide(tc['js-commentInputOpenID']);
if (appendAuthSelector) {
var authAreaContainer = JSKitLib.html(s.gtmpl(authAreaTmpl));
tc['js-AuthAreaWrap'].appendChild(authAreaContainer);
JSKitLib.mapClass2Object(tc, authAreaContainer);
}
}
JSCC.prototype.initAvatarsManager = function(size) {
var s = this;
var so = s.serverOptions;
if (s.avatarsManager) s.avatarsManager.deActivateEvents();
var identities = JSKitLib.foldl({}, s.jskauth.identities.auth, function(identity, acc) {
if (identity.group != "third_party") return;
acc[identity.type] = {
"title": s.jskauth.getIdentityLabel(identity.type, true),
"action": identity.user ? null : function() {
s.jskauth.show(identity.type);
},
"authenticated": !!identity.user
};
});
var avatars = so.avatars || [];
var addEPBAvatar = function(identity) {
if (JSKitEPB.isExists() && identity) {
var type = 'https://' + s.config.domain;
var index = -1;
JSKitLib.fmap(avatars, function(av, i) {
if (av.type == type) {
index = i;
}
});
var avatar = JSKitEPB.getValue('Avatar');
if (avatar) {
if (index < 0) {
JSKitLib.fmap(avatars, function(av) { delete av.chosen; });
avatars.push({name: avatar, width: 64, height: 64, type: type, params: identity.params, chosen: true});
} else {
avatars[index].name = avatar;
}
} else if (index >= 0) {
avatars.splice(index, 1);
}
}
}
addEPBAvatar(s.jskauth.getAuthIdentity('epb'));
var config = {
"id": "comments-" + s.jcaIndex,
"ref": JSKitLib.getRef(s),
"size": size,
"yours": !s.config.nolc,
"layer": s.getSkin() == "smoothgray" ? this.target : undefined,
"target": this.target,
"labels": $JCL,
"avatars": avatars,
"autoSave": false,
"controls": [s.TC["js-Cmtsubmit"]],
"uriAvatar": s.uriAvatar,
"identities": identities,
"gravatarEmail": so.gravatarEmail
};
return new JSKAvatars(config);
}
JSCC.prototype.setFormFields = function(fields) {
var s = this;
var tc = s.TC;
var emptyLabels = {
'Url': $JCL('urlIsOptional'),
'Email': $JCL('emailIsOptional')
}
JSKitLib.fmap(fields, function(v, name) {
var o = tc['js-Cmt'+name];
if(o) {
o.jsk$setdfl = function(val) {
o.style.color = '';
o.jsk$setdfl = false;
o.jsk$not_specified = false;
o.value = val || '';
}
if (v) {
o.jsk$setdfl(v);
} else {
o.style.color = '#808080';
o.value = emptyLabels[name];
o.jsk$not_specified = true;
}
o.onfocus = function() { if (o.jsk$setdfl) o.jsk$setdfl(); }
}
});
}
JSCC.prototype.getThreadHeader = function() {
var s = this;
var header;
if (s.config.skin == 'echo') {
var replacements = {
"Title": s.config["thread-title"],
"CountLabel": $JCL("commentsCountLabel", {"Count": s.serverOptions.pages.tc})
};
var template = s.dtHeaderEcho;
JSKitLib.fmap(replacements, function(replacement, pattern) {
template = template.replace(new RegExp("{" + pattern + "}", "g"), replacement);
});
header = JSKitLib.html(s.gtmpl(template));
JSKitLib.mapClass2Object(s.TC, header);
if (s.TC["jsk-HeaderInfoBoxImg"]) JSKitLib.addPNG(s.TC["jsk-HeaderInfoBoxImg"], "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/echo.png");
s.renderPauseIndicator();
s.renderPauseCounter();
} else {
header = s.div();
}
return header;
}
JSCC.prototype.assembleImagesUploadForm = function(uInp, imgArea) {
var s = this;
var tc = s.TC;
s.imgArea = imgArea;
var handler = function(e){
e = e || window.event;
if(e.keyCode == 27 || e.which == 27) JSKitLib.preventDefaultEvent(e);
};
if (uInp && !uInp.ifri){
var frmi = s.cr('form');
JSKitLib.setStyle(frmi, "clear: both;");
JSKitLib.addClass(frmi, "js-uploadImageForm");
frmi.method = 'post';
frmi.acceptCharset = 'UTF-8';
frmi.encoding = 'multipart/form-data';
frmi.style.margin = "0px";
var lbli = s.cr('div');
JSKitLib.addClass(lbli, "js-uploadImageInputLabel");
s.lbliChange = function(mode) {
JSKitLib.removeChildren(lbli);
lbli.appendChild(JSKitLib.html("" + $JCL(mode ? "loading" : "uploadImage") + ""));
}
s.lbliChange(0);
params = JSKitEPB.getAsHash({ref: JSKitLib.getRef(s)});
JSKitLib.fmap(params, function(v, k) {
var item = s.cr('input');
item.type = 'hidden';
item.name = k;
item.value = encodeURIComponent(v);
frmi.appendChild(item);
});
var upfi = s.cr('input');
s.imgUpload = upfi;
upfi.disabled = ( s.imgArea && s.imgArea.disableUpload ) ? true : false ;
upfi.type = 'file';
upfi.name = 'image';
var formitems = JSKitLib.mapClass2Object({}, frmi);
var val;
var fi = function() {
if(val) {
var subi = s.TC["js-Cmtsubmit"];
subi.disabled = false;
upfi.disabled = false;
frmi.reset();
JSKitLib.fmap(params, function(v, k) {
formitems[k].value = encodeURIComponent(v);
});
JSKitLib.removeEventHandler(document, ["keydown"], handler);
s.getImages(val);
val = undefined;
}
}
var tgti = 'js-ifrm-'+s.jcaIndex + Math.random();
var ifri = JSKitLib.createHiddenIframe(tgti, uInp, fi, false);
frmi.target = tgti;
upfi.onchange = function() {
val = (new Date()).getUTCMilliseconds() + "-" + Math.random( );
frmi.action = s.uriImage+'add?rnd='+val;
s.lbliChange(1);
frmi.submit();
var subi = s.TC["js-Cmtsubmit"];
subi.disabled = true;
upfi.disabled = true;
JSKitLib.addEventHandler(document, ["keydown"], handler);
};
uInp.appendChild(lbli)
frmi.appendChild(upfi);
uInp.appendChild(frmi);
uInp.ifri = ifri;
}
s.preventAnonymousComments();
}
JSCC.prototype.assembleEchoBrand = function() {
var template =
'';
return JSKitLib.toDOM(template, "js-poweredBy-", {}).content;
}
JSCC.prototype.isSourceAvailable = function(source) {
var filter = this.sourceFilter;
if (!filter || !this.useEcho()) return true;
source = filter.normalize(source);
var sourceInList = filter.sources.hash.hasOwnProperty(source);
return sourceInList ? filter.sources.hash[source] : filter.type == "exclude";
}
JSCC.prototype.avatarsManagerWrapper = function(element) {
this.avatarsManager.assembleAvatarArea(element);
}
JSCC.prototype.dataLoader = function(so, nc) {
var s = this;
var so = s.serverOptions;
var tc = s.TC;
var d = function(){return s.div.apply(s,arguments);}
if (this.config.disabled != 'no') return;
var cc = JSKitLib.html(s.gtmpl(s.utmpl['js-CreateComment'] || (s.config.nolc ? s.dtProfileCreate : s.dtCreate)));
JSKitLib.mapClass2Object(tc, cc);
JSKitLib.attachDescriptors2Elements(tc, "js-kit-lcf-", this);
if (JSKitEPB.isExists()) {
JSKitLib.fmap(['Name', 'Email'], function(field) {
if (tc['js-Cmt' + field]) {
tc['js-Cmt' + field].disabled = true;
}
});
}
var ec = JSKitLib.html(s.gtmpl(s.dtEditComment));
JSKitLib.mapClass2Object(tc, ec);
if(s.config.profileLC) {
var cin = tc['js-commentInputName'];
if(cin) cin.style.display = 'none';
var cie = tc['js-commentInputEmail'];
if(cie) cie.style.display = 'none';
}
if(so.extraFieldURL) {
var ciu = tc['js-commentInputUrl'];
if (ciu) ciu.style.display = 'block';
}
var ac = function(name, cb) {
var o = tc['js-'+name];
if(!o) return;
if(o.tagName == 'A') o.href="javascript:void(0);";
o.style.cursor = 'pointer';
o.onselectstart = function() { return false; }
o.onclick = cb;
}
var uInp = tc['js-uploadImageInput'];
var uInpW = tc['js-uploadImageInputWrapper1'];
s.clearImgs = function(){
JSKitLib.removeChildren(s.imgArea);
if(uInpW) uInpW.style.paddingTop = '0px';
if(uInp && uInp.ifri) {
JSKitLib.removeChildren(uInp);
JSKitLib.hide(uInp);
uInp.ifri = undefined;
}
if(s.images) delete(s.images);
}
JSKitLib.fmap(['', 'Edit'], function(el, i) {
ac('Cmtsubmit' + el, function() {
s.pause.forced = false;
s.CommentSubmitted();
return false;
});
ac('Cmtcancel' + el, function() {
s.clearImgs();
if(s.onCancel) s.onCancel();
s.CommentCancelled();
if (s.useReplyThreadsCollapsing() && s.replyForId) {
var pageNo = s.curPage;
var comment = s.objById[s.replyForId];
delete s.replyForId;
if (comment) s.markCollapsedReplies(comment);
s.pause.forced = false;
s.curPage = 0;
s.displayPage(pageNo);
}
return false;
});
});
if (JSKitLib.isIE()) {
var op = tc['js-commentOptions'];
var sub = tc['js-commentSubmit'];
if (op) op.style.paddingLeft = "3px";
if (sub) sub.style.paddingLeft = "3px";
}
s.anonymousCmt = so.anonymousCmt;
if (tc["js-commentAvatar"]) s.avatarsManager.assembleAvatarArea(tc["js-commentAvatar"]);
if (s.getSkin() != 'echo') {
s.setFormFields({'Email': '', 'Url': ''});
s.wrapJSKAuth();
}
s.preventAnonymousComments();
ac('commentOpenIDLogout', function() {
setTimeout(function(){
var gfc = s.jskauth.getAuthIdentity("gfc");
if(gfc && gfc.params.site && gfc.user) {
new JSKitGFC(
JSKitLib.getRef(s),
s.target,
gfc.params.site,
function(){
this.processLogout();
});
}
s.server(s.uriDomain + '/api/session/logout.js', {});
}, 0);
return false;
});
if(!tc['js-commentMore']) {
var m = tc['js-CCMore'];
if(m) m.style.display = 'none';
}
s.onAddImgButton = function(isShow) {
if(s.commentPostingProcess) {
alert($JCL('messagePostingInProgress'));
return;
}
if(s.config.uploadImages) {
s.imgArea = tc['js-commentImageArea'];
if(uInp && s.imgArea) {
uInp.style.display = isShow ? 'block' : 'none';
if(uInpW) uInpW.style.paddingTop = isShow ? '15px' : '0px';
s.imgShow = isShow;
}
}
s.assembleImagesUploadForm(uInp, s.imgArea);
};
var uImg = tc['js-uploadImageButton'];
if (uInp) JSKitLib.hide(uInp);
if(uInp && uImg && !s.config.uploadImages) {
JSKitLib.hide(uImg);
JSKitLib.hide(uInp);
}
ac('uploadImageButton', function(){
s.onAddImgButton(!JSKitLib.visible(uInp));
});
var toggleAvatarArea = function(isVisible) {
JSKitLib.fmap(["Avatar", "AvatarLabel"], function(key) {
var element = tc["js-comment" + key];
if (!element) return;
JSKitLib[isVisible ? "show" : "hide"](element);
});
};
if (s.getSkin() == "") {
toggleAvatarArea(false);
}
var onCommentMore = function(obj, label) {
obj.ashown = !obj.ashown;
JSKitLib.text(obj.ashown ? label.less : label.more, obj, true);
s.onAddImgButton(obj.ashown);
toggleAvatarArea(obj.ashown);
return false;
};
ac('commentAddAvatar', function() {
var label = {'less': '-', 'more': '+'};
return onCommentMore(this, label);
});
ac('commentMore', function() {
var label = {'less': this.getAttribute("less") || $JCL('less'),
'more': this.getAttribute("more") || $JCL('more') };
return onCommentMore(this, label);
});
if (!tc["js-commentAvatar"] && (!s.config.uploadImages || tc['js-uploadImageButton'] || !tc['js-uploadImageInput'])) {
JSKitLib.fmap(['js-commentMore', 'js-CCMore'], function(element) { if (tc[element]) JSKitLib.hide(tc[element]); });
}
if(so.mmode == "pause" || !s.isSourceAvailable("Comments")) {
var lca = null;
} else {
var lca = d('js-commentControl', s.a(s.JCL('leaveComment')));
lca.onclick = function() { return s.ShowCommentDialog(); };
}
var jmg = d('js-commentControl js-commentTool', JSKitLib.html('@ '), s.a($JCL("controls")));
jmg.onclick = function() {
var srt = ["date", "name"];
if(!s.config.moderate && s.scoringEnabled()) srt.push("karma");
if(s.adminMode) srt.push("status");
/* s.submitRating check is not good for all the cases */
if ( $JSKitGlobal.isRatingsAppAvailable() ) srt.push("rating");
var srtOpts = [];
for(var i = 0; i < srt.length; i++) {
srtOpts.push('');
}
var bkw = ["ascending", "descending"];
var bkwOpts = [];
for(var i = 0; i < bkw.length; i++) {
bkwOpts.push('');
}
var prs = ["on (threaded)", "off (flat)"];
var prsMap = {'on (threaded)':'yes','off (flat)':'no'}
var prsOpts = [];
for(var i = 0; i < prs.length; i++) {
prsOpts.push('');
}
var div = s.cr("div");
div.innerHTML =
""
+ "" + $JCL("sortBy") + ' | | "
+ "" + $JCL("order") + ' | | "
+ "" + $JCL("threading") + ' | | "
+ "" + $JCL("search") + ' | | '
+ (s.adminMode && !s.config.moderate?('Moderate whole site | '):'')
+ " "
this.notShowIfr = true;
s.settingsWindow('ctWnd', this, div);
var obj={'mode': 'form', 'inpSize': '121px', type: 'Search'};
var form = new JSIPE(obj);
obj.jsk$on_submit_exit = function(){
s.searchString = form.input.value;
s.viewControl({name: "search"});
s.hideSettingsWindow('ctWnd');
}
form.input.value = s.searchString || "";
if (s.searchString) form.cleaner.style.visibility = "visible";
var sCell = document.getElementById("js-SearchCell-"+s.jcaIndex);
if (sCell) s.addChild(sCell, form.main);
return false;
}
s.controls = jmg;
if(nc || s.config.moderate) {
s.controls.reveal = function(){};
} else {
s.controls.style.display = 'none';
s.controls.reveal = function(){s.controls.style.display=''}
}
var pb;
if(so.subs || so.noJunk || so.whitelabel) {
pb = "";
} else {
if (s.getSkin() != "echo") {
var propLink = JSKitLib.html('Powered by JS-Kit');
var prop = d('', "(", propLink, ")");
prop.style.position = 'relative';
pb = d("js-commentControl js-poweredBy", prop);
}
}
var ca = d("js-CommentsArea",
(s.config.nolc && !s.IM)?null:d("js-LeaveComment", s.config.moderate || s.IM=='own' ?null:lca, s.IM ? null : jmg, !s.config.nolc ? pb : null,
JSKitLib.html(' ')),
tc["js-CreateComment"], tc["js-EditComment"]);
this.makeWelcomePanel();
if (!so.wysiwyg && so.smiley) {
JSKitLib.fmap(['Text', 'TextEdit'], function(v) {
var sd = s.cr('div');
sd.style.margin = '3px 0px 0px 3px';
var text = tc['js-Cmt' + v];
var processed = {};
var index = 0;
JSKitLib.fmap(s.smiles, function(el, i) {
if (!processed[el.file]) {
processed[el.file] = 1;
var smile = JSKitLib.html(s.smileTag(el));
smile.style.display = 'inline';
smile.style.cursor = 'pointer';
smile.style.marginRight = '5px';
smile.onclick = function() {
if (s.getSkin() == "echo" && JHI2.isEmpty(text)) {
JHI2.set(text, i);
} else text.value += ' ' + i;
text.focus();
if (JSKitLib.isSafari()) {
text.setSelectionRange(text.value.length, text.value.length);
}
};
sd.appendChild(smile);
}
});
var element = (s.getSkin() == "echo") ? s.TC[v == "Text" ? "jsk-CommentFormBody" : "jsk-CommentEditFormBody"] : text;
element.parentNode.insertBefore(sd, element.nextSibling);
});
}
var pageNavTop = s.config.skin == 'echo' ? null : d('js-PageNavTop');
var pageNavBottom = d('js-PageNavBottom');
var header = s.getThreadHeader();
var thread = d("jsk-ThreadWrapper jsk-PrimaryFont jsk-PrimaryBackgroundColor", pageNavTop, d("js-OldCommentsWrap jsk-StreamWrapper", d("js-OldComments")), pageNavBottom);
s.TC["jsk-ThreadWrapper"] = thread;
if(s.config.backwards == 'yes') {
s.addChild(ca, header);
s.addChild(ca, thread);
} else {
s.addChild(ca, thread, true);
s.addChild(ca, header, true);
}
if (s.getSkin() == "echo" && !so.whitelabel) s.addChild(thread, s.assembleEchoBrand());
if(s.useEcho()) {
JSKitLib.setMouseEvent(thread, "over", function() { s.setStreamState(true); });
JSKitLib.setMouseEvent(thread, "out", function() { s.setStreamState(false); });
}
var pageToDisplay = so.pages.sp;
var dpCB;
if(s.comment_location) {
var obj = s.jspg.getItemById(s.comment_location);
if(obj) {
pageToDisplay = s.jspg.getPageByItemId(s.comment_location) + 1;
dpCB = function() {
if(obj.div) s.flash(obj.div);
};
}
delete s.comment_location;
}
s.displayPage(pageToDisplay, dpCB);
var closeControlsPopup = function() {
s.hideSettingsWindow('ctWnd');
s.hideSettingsWindow('ctBlock');
}
JSKW$Events.registerEventCallback(undefined, closeControlsPopup, "comments_closeControlsPopup");
ca.onclick = function() {
closeControlsPopup();
JSKW$Events.syncBroadcast("miniProfile_collapseAll");
}
s.addChild(s.target, ca);
if (lca && !s.config.moderate && (s.config.nolc && s.IM == 'foreign' || (so.expandLeaveCmt && !s.config.noautoexpand)) && !s.config.userProfileComments) {
s.ShowCommentDialog(undefined, {nofocus: true});
}
}
JSCC.prototype.objRerender = function(obj, cmt) {
cmt.ctls['js-singleCommentText'].innerHTML =
this.tmpl("{Text}", obj, true);
}
JSCC.prototype.getLastReply = function(pobjId) {
var pobj = this.jspg.getItemById(pobjId);
var lreplyObj = null;
for(var i=pobj.obj.thread.length-1; i>=0; i--){
if(pobj.obj.thread[i].status!='D') {
var c = this.jspg.getItemById(pobj.obj.thread[i].ID);
if(c) {
lreplyObj = this.getLastReply(c.obj.ID);
break;
}
}
}
return lreplyObj || pobj;
}
JSCC.prototype.reCalcPages = function() {
if(this.curPage>this.jspg.pageCount) this.displayPage(this.jspg.pageCount);
this.rePageNavigator(this.jspg.pageCount>0 ? this.jspg.pageCount-1 : undefined);
}
JSCC.prototype.appendConversation = function (cmt, conversation) {
var cnvsObj = {};
var cnvs = this.conversations[conversation];
if(!cnvs) return;
JSKitLib.fmap(["Name","avatar","avatarHeight","avatarWidth"],
function(V){ cnvsObj[V] = cnvs.direction=="in" ? cnvs[V] : cnvs["dest"+V] });
cnvsObj.Label = "Conversation with ";
var dtc = JSKitLib.html(this.tmpl(this.dtConversation, cnvsObj));
var ctls = JSKitLib.mapClass2Object({}, dtc);
var nm = ctls['js-ConversationName'];
if(nm && this.serverOptions.showProfile) {
nm.style.textDecoration = 'underline';
this.appendProfileHandler(nm, {profile: cnvs.profile});
}
cmt.insertBefore(dtc, cmt.firstChild);
JSKitLib.addClass(cmt, "js-singleCommentConversationHead");
}
JSCC.prototype.removeConversation = function (cmt) {
JSKitLib.removeClass(cmt, "js-singleCommentConversationHead");
cmt.removeChild(cmt.firstChild);
}
JSCC.prototype.appendConversationChild = function (cmt) {
JSKitLib.addClass(cmt, "js-singleCommentConversationChild");
}
JSCC.prototype.removeConversationChild = function (cmt) {
JSKitLib.removeClass(cmt, "js-singleCommentConversationChild");
}
JSCC.prototype.getSkin = function() {
return this.config.skin==="wireframe" ? "" : (this.config.skin || "");
}
JSCC.prototype.generateEventParams = function(extra_params) {
extra_params = extra_params || {};
var s = this;
var params = {
jcaIndex: s.jcaIndex,
uniq: s.config.path.replace(/^\//, ''),
domain: s.config.domain
};
JSKitLib.fmap(extra_params, function(v, k) {
params[k] = v;
});
return params;
}
JSCC.prototype.publishEvent = function(event_name, params) {
JSKitAPI.publish(event_name,
this.generateEventParams(params));
}
JSCC.prototype.eventsHandler = function(eventName, eventParams) {
var self = this;
var so = self.serverOptions;
eventParams = eventParams || {};
switch (eventName) {
case "comment-deleting":
var item = self.jspg.getItemById(eventParams.cmtId);
if(!item || !item.div) return;
var div = item.div;
if(div.domCtls) div.domCtls.style.visibility = "hidden";
var av = div.ctls['js-singleCommentAvatar'];
self.placeProcessAvatar(av);
item.obj.origstatus = item.obj.status;
item.obj.status = 'DP';
item.obj.dTimer = setTimeout(function(){
item.obj.status = 'A';
if(div.domCtls) div.domCtls.style.visibility = "";
if(av) self.placeAvatar(item.obj, av);
delete item.obj.dTimer;
}, 30000);
break;
case "comment-deleted":
var item = self.jspg.getItemById(eventParams.cmtId);
if(!item || !item.div) return;
var div = item.div;
if(item.obj.dTimer) clearTimeout(item.obj.dTimer);
if(item.obj.ParentID) {
var parentCmt = self.objById[item.obj.ParentID];
if (parentCmt) {
parentCmt.thread = JSKitLib.filter(function(obj) {
return obj.ID != eventParams.cmtId;
}, parentCmt.thread);
}
self.markCollapsedReplies(self.objById[eventParams.cmtId]);
} else {
if (self.useReplyThreadsCollapsing()) {
self.removeRepliesExpandMarker(item.obj);
}
}
so.pages.tc -= self.removeComment(div, true);
self.publishEvent("comments-count-updated", {'count': so.pages.tc});
break;
case "comment-added":
so.pages.tc++;
self.publishEvent("comments-count-updated", {'count': so.pages.tc});
break;
case "comments-data-loaded":
self.publishEvent("comments-count-updated", {'count': so.pages.tc});
break;
case "comments-count-updated":
self.refreshThreadHeader();
if(self.popupInstance) {
var title = self.replaceCountTemplate(self.config['popup-title'],
eventParams.count);
self.popupInstance.updateTitle(title);
}
if(self.parentWidget && self.parentWidget.popupLink) {
self.drawCommentLink.call(self.parentWidget, eventParams.count);
}
break;
case "user-login":
if (self.config['display-mode'] == "inline") {
var nofocus = typeof(eventParams.nofocus) == "undefined"
|| eventParams.nofocus;
self.refreshComments({"nofocus": nofocus});
}
break;
case "user-logout":
if (self.config['display-mode'] == "inline") {
var nofocus = typeof(eventParams.nofocus) == "undefined"
|| eventParams.nofocus;
JSKW$Events.invalidateContext(self.miniProfileCtx);
setTimeout(function(){
self.refreshComments({"nofocus": nofocus});
}, 0);
}
break;
}
}
JSCC.prototype.refreshThreadHeader = function() {
var hdr = this.TC['jsk-HeaderWrapper'];
if(hdr && hdr.parentNode) {
hdr.parentNode.replaceChild(this.getThreadHeader(), hdr);
this.addAdminMenu(this.TC['jsk-MenuAdmin']);
}
}
JSCC.prototype.makeWelcomePanel = function() {
var s = this;
if (s.jcaIndex) return;
if (!s.adminMode) {
s.deleteWelcomePanel();
return;
}
if (s.TC['js-WelcomePanel'] || s.config.moderate || s.config.nolc) return;
var wp_html = ''
+ ''
+ ' '
+ ' '
+ ''
+ ((s.serverOptions.welcome || {}).message || $JCL('welcomeToComments'))
+ ' '
+ ' '
+ ' {Label:getStarted}:'
+ ' '
+ ' | '
+ ' | '
+ ' | '
+ ' | '
+ ' '
+ ' '
+ ' '
+ ' {Label:getInvolved}:'
+ ' '
+ ' '
+ ' '
+ ' '
+ ' '
+ ' '
+ ' ';
var wp = JSKitLib.html(s.gtmpl(wp_html));
JSKitLib.mapClass2Object(s.TC, wp);
s.TC['js-WelcomePanelClose'].onclick = function() {
s.TC['js-WelcomePanel'].style.display = 'none';
if (s.serverOptions.welcome && s.serverOptions.welcome.ts) {
s.server('s-welcome-close', {'ts':
s.serverOptions.welcome.ts});
}
}
s.appendProfileHandler(s.TC['js-WelcomeProfileLink'], {profile: s.serverOptions.profile});
JSKitLib.addPNG(s.TC['js-WelcomePanelArrow'], s.uriDomain + "/images/welcome/triangle.png");
var lc = s.TC['js-LeaveComment'];
if (lc) lc.parentNode.insertBefore(wp, lc);
}
JSCC.prototype.deleteWelcomePanel = function() {
if (this.TC['js-WelcomePanel']) {
this.TC['js-WelcomePanel'].parentNode.removeChild(this.TC['js-WelcomePanel']);
delete this.TC['js-WelcomePanel'];
}
}
JSCC.prototype.addMenu = function(cmt, obj) {
var self = this;
var showOffensive = this.serverOptions.commod && !obj.yours && !this.config.nolc && (!obj.msgtype || !obj.msgtype.match(/T|P/) || this.serverOptions.trackbackreply);
var showProfile = obj.profile && self.serverOptions.showProfile && !(obj.msgtype && obj.msgtype.match(/T|P/)) && !this.config.nolc;
var cmtURL = ((obj.permalink || this.config.permalink).replace(/#jsid-*/, "") + "#") + obj.ID;
var data = [
{title: $JCL("showUserProfile"), action: function() {self.showProfile(cmt.firstChild, obj);}, hidden: !showProfile, icon: this.uriDomain + "/images/menu/show-user-profile.png"},
{title: $JCL("markAsOffensive"), icon: this.uriDomain + "/images/menu/mark-comment-as-offensive.png", action: function(){self.markOffensive(obj.ID)}, hidden: !showOffensive},
{title: $JCL("getPermalinkURL"), icon: this.uriDomain + "/images/menu/comment-permalink.png", inputValue: cmtURL, type: "DTI"}
];
if (!this.serverOptions.whitelabel) {
data.push({type: "Delimeter"});
data.push({title: $JCL("getWidgetLikeThis"), action: function() { window.open("https://web.archive.org/web/20120319135727/https://js-kit.com/comments?menu", "_blank");}, statusText: "https://web.archive.org/web/20120319135727/https://js-kit.com/comments?menu"});
}
var mtgt = this.config.nolc ? self.target.parentNode.parentNode : undefined;
return JSMenu($JCL("options"), data);
}
JSCC.prototype.addAdminMenu = function(container) {
if (!container) return;
var s = this;
var so = s.serverOptions;
var isEPB = JSKitEPB.isExists();
var isLogged = s.jskauth.isLogged();
var isCmtAvailable = s.isSourceAvailable("Comments");
var showProfile = function() {
s.showProfile(container, {"profile": so.profile}, {"activeSection": "editProfile"});
};
var mkItem = function(label, icon, action, guard, extra) {
return guard ? JSKitLib.foldl({
"icon": icon ? '//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/menu/' + icon : undefined,
"title": $JCL("menu" + label),
"action": action
}, extra || {}, function(value, acc, key) { acc[key] = value; }) : [];
};
var mkLink = function(label, icon, url, guard, disabled) {
return mkItem(label, icon, function() { window.open(url, '_blank'); }, guard, {
"disabled": disabled,
"statusText": url
});
};
var mkDelimeter = function(guard) {
return guard ? {"type": "Delimeter"} : [];
};
var items = JSKitLib.merge(
mkItem("Logout", "key.png", function() { s.jskauth.logout(); },
!isEPB && isLogged && isCmtAvailable),
mkItem("Login", "key.png", function() { s.jskauth.show(); },
!isEPB && !isLogged && isCmtAvailable),
mkItem("EditProfile", "user-edit.png", function() { showProfile(); },
so.showProfile && isCmtAvailable && !so.isNullSession),
mkItem("Follow", "follow.png", function() { s.openFollowPopup(); },
!isEPB && isCmtAvailable, {"disabled" : so.anonymousCmt && !isLogged}),
mkDelimeter(isCmtAvailable),
mkLink("Moderation", "comment-edit.png", s.uriDomain + "/moderate/",
isCmtAvailable, !so.adminMode),
mkLink("Settings", "wrench.png", s.uriDomain + "/settings/",
isCmtAvailable, !so.adminMode),
mkLink("AdminNotices", null, "https://web.archive.org/web/20120319135727/https://blog.js-kit.com/tag/admin/",
isCmtAvailable, !so.adminMode),
mkDelimeter(isCmtAvailable && !so.whitelabel),
mkLink("GetThis", "script-code.png", s.uriDomain + "/comments?menu",
!so.whitelabel),
mkLink("JSKBlog", "newspaper.png", "https://web.archive.org/web/20120319135727/https://blog.js-kit.com/",
!so.whitelabel),
mkLink("JSKTwitter", "twitter-favicon.png", "https://web.archive.org/web/20120319135727/https://twitter.com/echoenabled",
!so.whitelabel),
mkLink("Help", "information.png", s.uriDomain + '/support/',
!so.whitelabel)
);
if (!items.length) {
JSKitLib.removeChildren(container);
return;
}
JSKitLib.replaceChildren(container, JSMenu($JCL("menuAdmin"), items, "", s.target));
}
JSCC.prototype.getSelectedIdentities = function() {
var self = this;
var format = function(type, prefix, filter) {
return JSKitLib.fmap(self.jskauth.getIdentities(type), function(identity) {
if (!filter || filter(identity)) {
var flag = identity.use_as_from ? "checked" : "unchecked";
return [prefix + identity.type, identity.url || '', flag, false];
}
});
}
var identities = JSKitLib.merge(
format("auth", "login-", function(identity) { return !!identity.user; }),
format("web", ""));
return JSKitLib.Object2JSON(identities);
}
JSCC.prototype.constructFromToButtons = function(type) {
var template =
'';
var descriptors = {
"BarExpandMarker" : function(element){ JSKitLib.addPNG(element, "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/common/arrow-down-10x10.png") }
};
return JSKitLib.toDOM(template, "jskit-GoogleLikeMenu", descriptors).content;
}
JSCC.prototype.fromMenuAnonymous = function() {
var self = this;
var template =
'';
var updateAnonymousURL = function(url) {
if (typeof url == "object") url = url[1];
self.extraFormFields["Url"] = url;
};
var identities = JSKitLib.fmap(self.jskauth.getIdentities("auth"), function(identity) {
return {
"icon": JSKAuth.prototype.getIdentityParam('favicon', identity, "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/" + identity.type + ".png"),
"type": "Checkbox",
"state": "disabled",
"title": JSKAuth.prototype.getIdentityParam('long_label', identity, JSKAuth.prototype.getIdentityLabel(identity.type, true)),
"action": function() { self.jskauth.show(identity.type); }
};
});
var items = JSKitLib.merge(
{"type": "HTML", "title": JSKitLib.html('')},
identities,
self.serverOptions.extraFieldURL ? [
{
"type": "HTML",
"title": JSKitLib.html(''),
"hidden": self.serverOptions.anonymousCmt
},
{
"type": "SRCheckbox",
"icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/default.png",
"title": self.extraFormFields["Url"] || $JCL("myURL"),
"oncreate": updateAnonymousURL,
"onupdate": updateAnonymousURL,
"deletable": false,
"unclonable": true,
"hideCheckbox": true,
"hidden": self.serverOptions.anonymousCmt
}
] : [],
{"type": "HTML", "title": JSKitLib.html('')}
);
var menu = JSMenu(self.constructFromToButtons("from"), items, "HTML");
var descriptors = {
"control": function() {
return menu;
},
"field": function(element) {
self.renderNameField(element, "js-kit-from-name");
if (self.serverOptions.anonymousCmt) {
JSKitLib.preventSelect(element);
JSKitLib.addEventHandler(element, ['click'], function(e) {
JSKitLib.stopEventPropagation(e);
JSKW$Events.syncBroadcast('JSMenu-Opened', menu);
});
}
}
};
return JSKitLib.toDOM(template, "js-kit-from-", descriptors).content;
}
JSCC.prototype.setNameFieldValue = function() {
var input = this.TC["js-CmtName"];
if (!input) return;
JHI2.remove(input);
input.value = (!JHI2.isEmpty(input) && input.value) || this.extraFormFields["Name"] || "";
JHI2.create(this.serverOptions.requireUsername ? $JCL("yourNameRequired") : $JCL("yourNameHere"), input);
}
JSCC.prototype.renderNameField = function(container, className, readonly) {
var element;
var anonymousCondition = this.serverOptions.anonymousCmt && !this.jskauth.isLogged();
if (readonly || anonymousCondition) {
var text = this.extraFormFields["Name"] || "";
if (anonymousCondition) {
text = $JCL("loginRequiredNotice");
JSKitLib.addClass(container, "js-kit-disabledNameField");
}
element = JSKitLib.html("" + text + " ");
} else {
element = JSKitLib.html("");
if(this.TC) this.TC["js-CmtName"] = element;
JSKitLib.addEventHandler(container, ["click"], function(e) {
JSKitLib.stopEventPropagation(e);
element.focus();
});
element.title = $JCL("clickToEdit");
this.setNameFieldValue();
}
JSKitLib.replaceChildren(container, element);
}
JSCC.prototype.fromMenuActionsHandler = function(identity, action, data) {
var self = this;
var rerenderUserInfo = function() {
self.userInfoWrapper(self.TC["js-kit-lcf-userInfoWrapper"]);
}
var rerenderLinksIcon = function() {
self.miniProfile.render("siteLinksIcons", {"identities": self.jskauth.getIdentities()});
}
switch (action) {
case "delete": if (identity.group == "web") {
self.jskauth.identityServerAction("unbind", identity, {}, rerenderLinksIcon);
break;
};
case "delete":
var loggedCount = JSKitLib.foldl(0, self.jskauth.getIdentities("auth"), function(identity, acc) {
return acc += identity.user ? 1 : 0;
});
var firstConfirmed;
if (
(firstConfirmed = confirm($JCL("confirmMessage_unbindAccount"))) && loggedCount > 1
|| firstConfirmed && loggedCount == 1 && confirm($JCL("confirmMessage_unbindLastAccount"))
) {
self.jskauth.identityServerAction("unbind", identity, {}, rerenderUserInfo);
}
break;
case "create":
self.jskauth.identityServerAction("bind", identity, {}, rerenderLinksIcon);
break;
case "update":
self.jskauth.identityServerAction("update", identity, {url: data[1]}, rerenderLinksIcon);
break;
case "check":
identity.use_as_from = true;
rerenderLinksIcon();
break;
case "uncheck":
identity.use_as_from = false;
rerenderLinksIcon();
break;
}
}
JSCC.prototype.fromMenuLoggedIn = function() {
var self = this;
var identities = {"auth": {}, "web": {}};
var applyCallbacks = function(item) {
JSKitLib.fmap(["check", "uncheck", "delete", "update", "create"], function(action) {
item["on" + action] = function(data) {
if (!this.identity)
this.identity = self.jskauth.assembleIdentity(data, "home", "web");
self.fromMenuActionsHandler(this.identity, action, data);
}
});
return item;
}
var validateURLs = function(url) {
if(!url) {
alert($JCL("urlIsEmpty"));
return false;
}
for(var i = 0; i < this.parent.items.length; i++) {
if(this.parent.items[i].title == url && this.parent.items[i] != this) {
alert($JCL("urlAlreadyExists"));
return false;
}
}
return true;
}
identities.auth = JSKitLib.fmap(this.jskauth.getIdentities("auth"), function(identity) {
var state;
if (!identity.user) {
state = "disabled";
} else if (identity.use_as_from) {
state = "checked";
} else {
state = "unchecked";
}
return applyCallbacks({
"type": "Checkbox",
"icon": JSKAuth.prototype.getIdentityParam('favicon', identity, "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/" + identity.type + ".png"),
"state": state,
"title": identity.url,
"action": state == "disabled" ? function() { self.jskauth.show(identity.type); } : null,
"identity": identity,
"displayTitle": (function(){
if(identity.user) {
var Name;
if(identity.group == "epb" && JSKitEPB.isExists())
Name = JSKitEPB.getValue("Name");
Name = Name || identity.name || identity.user;
return Name + " @ " + JSKAuth.prototype.getIdentityParam('short_label', identity, JSKAuth.prototype.getIdentityLabel(identity.type));
} else {
return JSKAuth.prototype.getIdentityParam('long_label', identity, JSKAuth.prototype.getIdentityLabel(identity.type, true));
}
}()),
"deletable": identity.user && identity.group != 'epb',
"deleteLabel": $JCL("menuUnbindIdentity")
});
});
identities.web = JSKitLib.fmap(this.jskauth.getIdentities("web"), function(identity) {
return applyCallbacks({
"type": "SRCheckbox",
"icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/default.png",
"state": identity.use_as_from ? "checked" : "unchecked",
"title": identity.url,
"identity": identity,
"alreadyEdited": true
});
});
var items = JSKitLib.merge(
{"type": "HTML", "title": JSKitLib.html('')},
identities.auth,
self.serverOptions.extraFieldURL ? JSKitLib.merge(
{
"type": "HTML",
"title": JSKitLib.html('')
},
identities.web,
applyCallbacks({
"type": "SRCheckbox",
"icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/default.png",
"title": $JCL("myURL"),
"hideCheckbox": true
})
) : [],
{"type": "HTML", "title": JSKitLib.html('')}
);
return JSMenu($JCL("addAnotherSite"), items);
}
JSCC.prototype.toMenu = function() {
var self = this;
var share = function(identity, publish) {
identity.publish = publish;
self.extraFormFields["Share-" + identity.type] = publish ? "on" : "off";
}
var sharingServices = JSKitLib.fmap(this.jskauth.getIdentities("auth"), function(identity) {
if (!identity.can_publish) return;
self.extraFormFields["Share-" + identity.type] = "off";
var sharing_available = identity.user && !identity.expired;
return {
"type": "Checkbox",
"icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/" + identity.type + ".png",
"title": $JCL("shareWith_" + identity.type),
"state": sharing_available ? (identity.publish || self.$temp_publish == identity.type ? "checked" : "unchecked") : "disabled",
"action": sharing_available ? null : function() {
self.$temp_publish = identity.type;
self.jskauth.show(identity.type);
},
"oninit": function() {
if (sharing_available && (identity.publish || self.$temp_publish == identity.type)) this.oncheck(this.title);
},
"oncheck": function(title) {
var item = this;
share(identity, true);
item.dt = cnt.insertBefore(
JSDogtag({
"text": title,
"icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/" + identity.type + ".png",
"onclose": function() {
item.setState("unchecked");
cnt.removeChild(item.dt);
share(identity, false);
}
}),
cnt.lastChild);
},
"onuncheck": function(title) {
share(identity, false);
if (this.dt) cnt.removeChild(this.dt);
}
};
});
var items = JSKitLib.merge(
{"type": "HTML", "title": JSKitLib.html('')},
{
"type": "Checkbox",
"icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/default.png",
"title": $JCL("thisPage"),
"state": "checked-disabled"
},
sharingServices,
{"type": "HTML", "title": JSKitLib.html('')});
var cnt = JSKitLib.cr({className: "js-kit-lcf-toField"});
cnt.appendChild(new JSDogtag({"text": $JCL("thisPage"), "icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/favicons/default.png"}, cnt));
cnt.appendChild(JSKitLib.html(''));
var menu = JSMenu(self.constructFromToButtons("to"), items, "HTML");
cnt.insertBefore(menu, cnt.firstChild);
JSKitLib.addEventHandler(cnt, ['click'], function(e) {
JSKitLib.stopEventPropagation(e);
JSKW$Events.syncBroadcast('JSMenu-Opened', menu);
});
delete this.$temp_publish;
return cnt;
}
JSCC.prototype.miniProfileWrapper = function(target) {
var self = this;
var so = this.serverOptions;
var avatar = this.avatarsManager.getActiveAvatar() || this.avatarsManager.anonymousAvatarData();
this.miniProfileCtx = JSKW$Events.registerEventCallback(undefined, function(name, newSites) {
if (!self.serverOptions.extraFieldURL) return;
self.jskauth.setWebIdentities(JSKitLib.fmap(newSites, function(site) {
return self.jskauth.assembleIdentity(site.data[1], site.data[0], 'web');
}));
self.miniProfile.render("addAnotherSite");
self.miniProfile.render("siteLinksIcons", {"identities": self.jskauth.getIdentities()});
}, "profile_socialSitesUpdated");
var descriptors = {
"name": function(element) {
self.renderNameField(element, "js-kit-miniProfile-name-ipe", JSKitEPB.isExists());
},
"avatar": function(element) {
self.avatarsManager.assembleAvatarArea(element);
},
"logout": function(element) {
element.onclick = function() {
if (element.busy) return;
element.busy = true;
JSKitLib.text($JCL("loggingOut"), element, true);
self.jskauth.logout();
};
},
"logoutLink": function(element) { JSKitLib.text($JCL("menuLogout"), element); },
"logoutIcon": function(element) { JSKitLib.addPNG(element, "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/cross.png"); },
"addAnotherSite": function(element) {
return self.fromMenuLoggedIn();
}
};
var gfc = this.jskauth.getAuthIdentity("gfc");
if (gfc && gfc.params.site) gfc.params.domain = this.config.domain;
var data = {
"Name": this.getUserProperty("Name", $JCL("guest")),
"profile": so.profile,
"avatarData": avatar,
"identities": this.jskauth.getIdentities()
};
var config = {
"mode": "embedded",
"labels": $JCL,
"template": this.dtMiniProfileLeaveComment,
"uriDomain": this.uriDomain,
"uriAvatar": this.uriAvatar,
"cssPrefix": "js-kit-lcf-miniProfile",
"avatarSize": {"width": "64", "height": "64"},
"descriptors": descriptors,
"openFullProfile": function() { self.showProfile(target, data); },
"isNativeProfileDisabled": !self.serverOptions.showProfile
};
this.miniProfile = new JSKitMiniProfile(target, data, config);
}
JSCC.prototype.renderLeaveCommentForm = function() {
var s = this;
if (s.getSkin() != 'echo') {
if (s.TC["js-commentAvatar"]) {
JSKitLib.removeChildren(s.TC["js-commentAvatar"]);
s.avatarsManager.assembleAvatarArea(s.TC["js-commentAvatar"]);
}
return;
}
JSKitLib.fmap(["userInfoWrapper", "extraControlsMenuWrapper"], function(name) {
var element = s.TC["js-kit-lcf-" + name];
if (element && typeof(s[name]) == "function") s[name](element);
});
}
JSCC.prototype.userInfoWrapper = function(target) {
var template = this["dtCreateUserInfo" + (this.jskauth.isLogged() ? "" : "Non") + "Logged"];
JSKitLib.replaceChildren(target, JSKitLib.toDOM(template, "js-kit-lcf-", this).content);
}
JSCC.prototype.getRSSUrl = function() {
var config = this.config;
return this.serverOptions.customRSSLink
? window.location.protocol + "//web.archive.org/web/20120319135727/https://rss." + config.domain + "/comments" + config.path
: window.location.protocol + "//web.archive.org/web/20120319135727/https://js-kit.com/rss/" + config.domain + config.path;
}
JSCC.prototype.openFollowPopup = function() {
var self = this;
var dialog, eventCtx;
if (window.JSKW$currentProfile) {
window.JSKW$currentProfile.hideProfile();
}
var notifyMode = self.serverOptions.notifyMode;
var followPanel = this.followPanelPopup = this.assembleFollowPanel("popup");
followPanel.get("rssThreadInput").value = this.getRSSUrl();
var closeDialog = function() {
dialog.close();
JSKW$Events.invalidateContext(eventCtx);
delete self.followPanelPopup;
};
var template = this.gtmpl(this.dtFollowPanelPopup);
var descriptors = {
"content": function() {
return followPanel.content;
},
"doneButton": function(element, dom) {
element.onclick = function() {
new JSRVC({
"uri": self.uriDomain + "/manage-email-subscription",
"ref": JSKitLib.getRef(self),
"target": self.target,
"request": {
"p": self.pathOverride,
"mode": self.serverOptions.notifyMode
}
});
element.value = $JCL("follow_subscriptionInProgress");
JSKitLib.fmap([
element,
dom.get("cancelButton")
], function(control) {
if (control) control.disabled = true;
});
}
},
"cancelButton": function(element) {
element.onclick = function() {
closeDialog();
self.serverOptions.notifyMode = notifyMode;
};
},
"editNotifications": function(element) {
element.onclick = function() {
window.open(self.uriDomain + "/settings/pctl.cgi?site=" + self.config.domain);
}
}
};
var dom = JSKitLib.toDOM(template, "js-kit-follow-popup-", descriptors);
var config = {
"width": 450,
"height": 230,
"cssClass": "js-kit-follow-popup"
};
dialog = new JSKitModalDialog(dom.content, config);
dialog.open();
var handleServerResponse = function(eventName, data) {
self.serverOptions.profile = data.profile;
if (data.hasOwnProperty("mode")) {
self.serverOptions.notifyMode = data.mode;
}
self.updateFollowPanel(self.followPanel);
closeDialog();
}
eventCtx = JSKW$Events.registerEventCallback(undefined,
handleServerResponse, "JSKit_emailSubscription");
}
JSCC.prototype.updateFollowPanel = function(dom) {
var self = this;
JSKitLib.fmap(["noemail", "email", "anymails"], function(notifyMode) {
self.setInputState("radio",
dom.get("notifyOptionRadio-" + notifyMode),
self.serverOptions.notifyMode == notifyMode ? "checked" : "unchecked");
});
}
JSCC.prototype.assembleFollowPanel = function(postfix) {
var self = this;
var rssUrl = this.getRSSUrl();
var template = this.gtmpl(this.dtFollowPanel);
var getEmail = function(emptyEmailLabel) {
return self.extraFormFields["Email"] || emptyEmailLabel;
};
var descriptors = {
"rssIcon": function(element) {
JSKitLib.addPNG(element, "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/rss.png");
},
"rssThreadInput": function(element) {
element.title = rssUrl;
},
"rssThreadButton": function(element) {
element.onclick = function() { window.open(rssUrl); };
},
"emailAddress": function(element) {
JSKitLib.text(getEmail($JCL("follow_emptyEmail")), element, true);
},
"editProfileLink": function(element) {
element.onclick = function() {
var profile = window.JSKW$currentProfile;
if (profile && profile.isYours()) return;
setTimeout(function() {
self.showProfile(self.target,
{"profile": self.serverOptions.profile},
{"activeSection": "editProfile"});
}, 0);
JSKitLib.text($JCL("follow_openingProfile"), element, true);
JSKitLib.addClass(element, "js-kit-follow-openingProfile");
};
},
"emailIcon": function(element) {
JSKitLib.addPNG(element, "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/email.png");
}
};
JSKitLib.fmap(["noemail", "email", "anymails"], function(mode) {
var notifyOptionHandler = function(element, dom) {
var updateNotifyControlsLayout = function(previousMode) {
if (!getEmail()) {
var link = dom.get("emailAddress");
var getClass = function(notifyMode) {
return "js-kit-follow-activeNotifyMode-" + notifyMode;
};
if (previousMode) {
JSKitLib.removeClass(link, getClass(previousMode));
}
JSKitLib.addClass(link, getClass(mode));
}
self.updateFollowPanel(dom);
};
if (self.serverOptions.notifyMode == mode) {
updateNotifyControlsLayout();
}
element.onclick = function() {
var previousMode = self.serverOptions.notifyMode;
self.serverOptions.notifyMode = mode;
updateNotifyControlsLayout(previousMode);
};
};
descriptors["notifyOptionRadio-" + mode] = notifyOptionHandler;
descriptors["notifyOptionLabel-" + mode] = notifyOptionHandler;
});
return JSKitLib.toDOM(template, "js-kit-follow-", descriptors);
}
JSCC.prototype.extraControlsMenuWrapper = function(target) {
var self = this;
var container = this.TC["js-kit-lcf-extraControlsMenuContent"];
if (!container) return;
var tabs = [];
if (this.config.uploadImages) tabs.push({
"name": "images",
"icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/picture_add.png",
"title": $JCL("addImgText"),
"content": function() {
var template =
'' +
' {Label:addImagesSectionNotice} ' +
' ' +
' ' +
' ';
var dom = JSKitLib.toDOM(self.gtmpl(template), "js-kit-images-", {});
self.assembleImagesUploadForm(dom.get("form"), dom.get("list"));
return dom.content;
}
});
var panel = this.followPanel = this.assembleFollowPanel();
tabs.push({
"name": "follow",
"icon": "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/follow.png",
"title": $JCL("follow"),
"callbacks" : {
"onTabOpened": function() {
self.updateFollowPanel(panel);
setTimeout(function() {
panel.get("rssThreadInput").value = self.getRSSUrl();
}, 0);
},
"onTabClosed": function() {
panel.get("rssThreadInput").value = "";
}
},
"content": function() {
return panel.content;
}
});
var template =
'' +
' ' +
' ' +
' ' +
' ' +
' ';
var marker = function(element) {
JSKitLib.addPNG(element, "//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/menu/vertical-menu-expand-marker.png");
};
this.extraControlsMenu = new JSTabsManager(tabs, {
"titles": target,
"content": container
}, {
"mode": "toggle",
"template": template,
"descriptors": {"expandMarker": marker}
});
}
JSCC.prototype.renderSubscribeEvents = function(subscribeEvents) {
var s = this;
if(subscribeEvents.error) {
alert(subscribeEvents.errorDescription);
return;
}
var appliedEvents = 0;
JSKitLib.fmap(subscribeEvents, function(subscribeEvent){
var item = s.jspg.getItemById(subscribeEvent.ID);
var f;
f = function(operation) {
if(operation=='add') {
if(!item) {
var cmtobj = subscribeEvent.content;
if(cmtobj.ParentID && !s.jspg.getItemById(cmtobj.ParentID)) return;
s.pause.visible = true;
s.renderPauseIndicator();
if(!s.pause.state) {
cmtobj.ID = subscribeEvent.ID;
if (s.serverOptions.clustering)
cmtobj.ParentID = JSFSearch.search(s.jspg.getItemsToDisplay(), cmtobj);
cmtobj.echoItem = true;
cmtobj.echoItemFirstTime = true;
cmtobj.imgs = s.parseImgData(cmtobj);
s.cmtInPlace(s.prepareCommentObj(cmtobj));
s.publishEvent('comment-added', {'cmtId': cmtobj.ID});
appliedEvents++;
}
} else {
f('edit');
}
}
if(s.pause.state) {
s.pause.queue.push(subscribeEvent);
if(operation=='add') {
s.renderPauseCounter();
}
return;
}
if(operation=='edit') {
if(item) {
var msgId = subscribeEvent.ID;
var cobj = s.objById[msgId];
JSKitLib.fmap(subscribeEvent.content,
function(v,k){
cobj[k] = v;
});
JSKW$Events.syncBroadcast("smileys-newCommentInDiv", cobj);
s.jspg.invalidateItemView(msgId);
if(s.jspg.getPageByItemId(msgId)==s.curPage-1){
var pageNo = s.curPage;
s.curPage = 0;
s.displayPage(pageNo);
}
JSKW$Events.syncBroadcast("comment-edited", s.jcaIndex, msgId);
appliedEvents++;
}
}
if(operation=='delete') {
if(item) {
s.postHandlerDelete(item.div);
appliedEvents++;
}
}
if(operation=='like_vote') {
if(item) {
var cobj = s.objById[subscribeEvent.ID];
cobj.likeInstance.vote(subscribeEvent.content.action, subscribeEvent.content);
}
}
}
f(subscribeEvent.operation);
});
if(appliedEvents > 0) {
s.reCalcPages();
s.controls.reveal();
}
}
JSCC.prototype.useEcho = function() {
return (this.getSkin() == 'echo') && this.serverOptions.echoLiveUpdates && !this.IM && !this.config.nolc && !this.config.moderate;
}
JSCC.prototype.useReplyThreadsCollapsing = function() {
return this.useEcho() && this.serverOptions.collapseReplyThreads;
}
JSCC.prototype.replaceCountTemplate = function(template, count) {
return template.replace(/{Count}/, count);
}
JSCC.prototype.constructPopupLink = function(count) {
var s = this;
var so = s.serverOptions;
var tmpl = s.utmpl['js-CommentsPopupLink'] || s.dtCommentsPopupLink;
var link = tmpl.replace(/{LinkLabel}/, s.constructCommentsLabel(count, so.countLabels));
link = s.replaceCountTemplate(link, count);
popupLink = JSKitLib.html(s.gtmpl(link));
JSKitLib.addEventHandler(popupLink, ['click'],
function(e) {
s.popComments();
JSKitLib.preventDefaultEvent(e);
});
return popupLink;
}
JSCC.prototype.drawCommentLink = function(count) {
var s = this;
if (s.popupLink) {
var oldPopupLink = s.popupLink;
s.popupLink = s.constructPopupLink(count);
s.target.parentNode.replaceChild(s.popupLink, oldPopupLink);
} else {
s.popupLink = s.constructPopupLink(count);
s.target.parentNode.insertBefore(s.popupLink, s.target);
JSKitLib.hide(s.target);
}
}
JSCC.prototype.constructCommentsLabel = function(c, labels) {
if (typeof window.JSKitCommentsCountFilter == 'function')
return JSKitCommentsCountFilter(c);
labels = labels || ["Comments", "Comments (1)", "Comments ({Count})"];
switch (c) {
case 0: return labels[0];
case 1: return labels[1];
default: return this.replaceCountTemplate(labels[2], c);
}
}
JSCC.prototype.popComments = function() {
var self = this;
var config = this.config;
switch (config['display-mode']) {
case 'ext-popup':
var wl = window.location;
var url = this.uriDomain + "/api/static/pop_comments?ref="
+ encodeURIComponent(JSKitLib.getRef(self))
+ "&title=" + encodeURIComponent(config['page-title']);
url += '&' + JSKitLib.fmap(config, function(v, k) {
if (v && !k.match(/^(domain|popup-width|popup-height|display-mode|disabled|noDataRequest)$/))
return k + "=" + encodeURIComponent(v);
}).join('&');
var params = 'width=' + config['popup-width'] + ", height=" + config['popup-height'] + ", status=yes, resizable=yes, scrollbars=yes";
var w = window.open(url, "js_kit_popup_" + self.jcaIndex, params);
w.focus();
break;
case 'int-popup':
var divc = this.target.cloneNode(false);
divc.jsk$initialized = false;
var title = this.config['popup-title'];
var popupWidget = new JSCC(divc, {'config': {'display-mode': 'inline'}});
var popupInstance = new JSKitUniversalContainer(divc,
{
'mode': 'popup', 'title': self.replaceCountTemplate(title, '0'),
'backdrop': 'yes', 'opacity': 0.4,
'size': {'width': config['popup-width'], 'height': config['popup-height']},
'cssPrefix': 'js-kit-popupComments',
'whiteLabel': self.serverOptions.whitelabel
},
{
'onContainerBeforeClose': function() {
if (window.JSKW$currentProfile) window.JSKW$currentProfile.hideProfile();
JSKW$Events.syncBroadcast("comments_closeControlsPopup");
popupWidget.CommentCancelled();
}
}
);
popupWidget.parentWidget = this;
popupWidget.popupInstance = popupInstance;
break;
}
}
JSCC.prototype.initAuth = function() {
var s = this;
var old_facebook = s.jskauth && s.jskauth.getAuthIdentity("facebook");
if (s.jskauth) s.jskauth.destroy();
s.jskauth = new JSKAuth({
ref: JSKitLib.getRef(s),
mode: "popup",
target: s.target,
identities: s.serverOptions.identities,
withBackdrop: "true"
});
var facebook = s.jskauth.getAuthIdentity("facebook");
if (facebook) {
JSKitFBSDK.prototype.detectXD(s.target);
}
if (old_facebook && old_facebook.user
&& (!facebook || facebook.user != old_facebook.user)) {
new JSKitFBSDK(
JSKitLib.getRef(s),
old_facebook.params.app_id,
old_facebook.params.xd_receiver,
function() {
this.logout();
}
);
}
}
JSCC.prototype.updateConfigFromServer = function(so) {
var s = this;
JSKitLib.fmap({
'display-mode': 'displayMode',
'popup-title': 'popupTitle',
'popup-width': 'popupWidth',
'popup-height': 'popupHeight'
}, function(v, k) { s.config[k] = s.config[k] || so[v]; });
s.config.skin = s.hasOwnProperty("dtComment") ? s.config.skin : (s.config.skin || so.skin);
s.config['display-mode'] = s.config['display-mode'] || "inline";
}
JSCC.prototype.findRootParent = function(comment) {
return (comment && comment.ParentID) ?
this.findRootParent(this.objById[comment.ParentID]) : comment;
}
JSCC.prototype.assembleExpandRepliesMarker = function(comment) {
var self = this;
var template =
'';
var descriptors = {
"label": function() {
return JSKitLib.text($JCL("expandXMoreReplies", {"count": comment.extra.collapsedCmtsCount}));
},
"container": function(element) {
JSKitLib.addStyle(element, "margin-left: " + self.level4margin(1) + ";");
JSKitLib.setEventHandler(element, ["click"], function() {
var pageNo = self.curPage;
self.markCollapsedReplies(comment, false);
self.curPage = 0;
self.displayPage(pageNo);
});
}
};
return JSKitLib.toDOM(template, "js-kit-replies-expand-", descriptors).content;
}
JSCC.prototype.removeRepliesExpandMarker = function(comment) {
if (!comment.extra.expandMarker) return;
var marker = comment.extra.expandMarker;
if (JSKitLib.hasParentNode(marker)) {
marker.parentNode.removeChild(marker);
delete comment.extra.expandMarker;
}
}
JSCC.prototype.markCollapsedReplies = function(comment, collapse) {
if (!this.useReplyThreadsCollapsing()) return;
var self = this;
if (comment.ParentID) {
comment = this.findRootParent(comment);
}
if (!comment) return;
if (typeof(collapse) == "undefined") {
collapse = typeof(comment.extra.areRepliesCollapsed) == "undefined" ||
comment.extra.areRepliesCollapsed;
}
var threadWalk = function(cmt, callback, idx) {
if (!idx) idx = 0;
JSKitLib.fmap(cmt.thread, function(reply) {
idx++;
if (callback) callback(reply, idx);
idx = threadWalk(reply, callback, idx);
});
return idx;
};
var limits = {"chunk": 2, "full": 5};
var totalRepliesCount = threadWalk(comment);
threadWalk(comment, function(cmt, idx) {
cmt.extra.collapsed = collapse &&
totalRepliesCount > limits.full &&
idx - limits.chunk > 0 &&
idx + limits.chunk <= totalRepliesCount;
cmt.extra.cssClass = (collapse && totalRepliesCount - idx == limits.chunk - 1) ?
"jsk-ItemWrapper-borderless" : undefined;
if (cmt.extra.collapsed && cmt.ID == self.replyForId) {
cmt.extra.cssClass = "jsk-ItemWrapper-borderless";
cmt.extra.collapsed = false;
}
if (self.jspg) {
self.jspg.invalidateItemView(cmt.ID);
}
});
var collapsedCmtsCount = totalRepliesCount - limits.chunk*2;
comment.extra.collapsedCmtsCount = collapsedCmtsCount > 0 ? collapsedCmtsCount : 0;
comment.extra.areRepliesCollapsed = collapse;
this.removeRepliesExpandMarker(comment);
}
JSCC.prototype.newCount = function(count, so) {
var s = this;
s.serverOptions = so;
s.updateConfigFromServer(so);
s.drawCommentLink(count);
s.publishEvent('comments-count-updated', {'count': count});
}
/* Must be last to support Opera */
JSCC.prototype.newData = function(arr, so) {
var s = this;
s.updateConfigFromServer(so);
if (s.config['display-mode'] == "inline") {
s.target.style.display = "block";
s.target.style.visibility = "visible";
}
JSKitLib.fmap(arr, function(obj) {
obj.Name = obj.Name || $JCL("guest");
});
s.serverOptions = so;
s.account = so.account || {};
s.searchString = so.srch;
s.adminMode = !!so.adminMode;
s.ownerMode = !!so.ownerMode;
s.inlineModeration = (s.adminMode && !s.config.moderate);
s.initAuth();
so.smiley = so.smiley || s.config.smiles == "yes";
s.config.uploadImages = so.uploadImages;
if (s.useEcho()) {
s.config.backwards = 'yes';
if (s.extraFormFields["Url"]) {
var identity = s.jskauth.assembleIdentity(s.extraFormFields["Url"], "home", "web");
s.jskauth.appendIdentity(identity);
}
}
if(so.TS)
this.serverDiffTS = so.TS - Math.round((new Date()).valueOf() / 1000);
var dims = {
"form": (s.getSkin() == 'echo') ? '64x64' : '96x96',
"thread": (s.config.nolc || s.getSkin() == 'echo') ? '48x48' : so.avatardim
};
s.avatarsManager = s.initAvatarsManager(dims.form);
s.maxAvatarDims = s.avatarsManager.splitAvatarDim(dims.thread);
JSKitLib.addClass(s.target, "js-CommentsSkin-" + (s.getSkin() || "wireframe"));
switch (s.config.skin) {
case "smoothgray":
s.navSym = JSKitLib.isIE() ? { "prev": '←', "next": '→'} : { "prev": '◀', "next": '▶' };
if(!s.hasOwnProperty("dtComment")) s.dtComment = JSCC.prototype.dtComment2;
s.dtCreate = JSCC.prototype.dtCreate2;
s.dtEditComment = JSCC.prototype.dtEditComment2;
break;
case "haloscan":
s.dtComment = JSCC.prototype.dtComment3;
s.dtCreate = JSCC.prototype.dtCreate3;
s.dtEditComment = JSCC.prototype.dtEditComment;
if (window.JK$HS$haloscan_style)
JSKitLib.addCss(window.JK$HS$haloscan_style, "comments-skin-haloscan-custom");
break;
case "echo":
s.dtComment = JSCC.prototype.dtCommentEcho;
s.dtCreate = JSCC.prototype.dtCreateEcho;
s.dtEditComment = JSCC.prototype.dtEditComment;
break;
}
if (so.smiley) {
s.smiles = {
"O:-)" : {file: 'innocent.gif', title: 'Innocent'},
">:o": {file: 'yell.gif', title: 'Yell'},
":)" : {file: 'smile.gif', title: 'Smile'},
":-)" : {file: 'smile.gif', title: 'Smile'},
";)" : {file: 'wink.gif', title: 'Wink'},
";-)" : {file: 'wink.gif', title: 'Wink'},
":'(" : {file: 'cry.gif', title: 'Cry'},
"8-)" : {file: 'cool.gif', title: 'Cool'},
":(" : {file: 'frown.gif', title: 'Frown'},
":-(" : {file: 'frown.gif', title: 'Frown'},
":*" : {file: 'kiss.gif', title: 'Kiss'},
":-*" : {file: 'kiss.gif', title: 'Kiss'},
":-D" : {file: 'laughing.gif', title: 'Laughing'},
"=-O" : {file: 'surprised.gif', title: 'Surprised'},
"=-X" : {file: 'sealed.gif', title: 'Sealed'},
":-[" : {file: 'embarassed.gif', title: 'Embarassed'},
":-$" : {file: 'money-mouth.gif', title: 'Money mouth'},
":-P" : {file: 'tongue-out.gif', title: 'Tongue out'},
":-E" : {file: 'foot-in-mouth.gif', title: 'Foot in mouth'},
"*DONT_KNOW*" : {file: 'undecided.gif', title: 'Undecided'}
};
var f = function(v) { return v.replace(/([\W])/g,"\\$1"); };
JSKitLib.fmap(s.smiles, function(el, i) {
/* fix for case ">)" */
s.smiles[i].regexpText = new RegExp('(>|<)?' + f(i), 'g');
s.smiles[i].regexpTag = new RegExp(' ?' + f(s.smileTag(el)) + ' ?', 'g');
});
}
var cb = function(name, obj, jcaIndex) {
switch(name) {
case "smileys-onchangeCommentText":
if(so.smiley && obj && obj.Text) obj.Text = s.textSmiles2Graphical(obj.Text.replace(/&/g, "&"));
break;
case "smileys-beforePostNewComment":
if(so.smiley && obj && obj.value) obj.value = s.textSmiles2Graphical(obj.value, 1);
break;
case "smileys-loadCommentsWidget":
if (s.jcaIndex != jcaIndex) return;
/* no break needed !!! */
case "smileys-newCommentInDiv":
var needAutolink = (so.htmlMode || s.config.nolc);
if ((so.smiley || needAutolink) && obj && obj.Text) {
obj.Text = obj.Text.split('').join('');
if (needAutolink) {
var tags;
var tags2meta = function(t){tags = []; t = t.replace(/]*>.*?<\/a>|<.*?>/ig, function(m){tags.push(m); return ' %#HTML_TAG#% ';}); return t;};
var meta2tags = function(t){JSKitLib.map(function(v){t = t.replace(' %#HTML_TAG#% ', v);}, tags); return t;};
obj.Text = tags2meta(obj.Text);
obj.Text = obj.Text.replace(/((?:http|ftp|https):\/\/(?:[a-z0-9#:\/\;\?\-\.\+,@&=%!\*\'(){}\[\]$_|^~`](?!gt;|lt;))+)/ig, '$1');
obj.Text = tags2meta(meta2tags(obj.Text));
}
obj.Text = obj.Text.replace(/&/g, '&');
if (so.smiley) obj.Text = s.textSmiles2Graphical(obj.Text);
if (needAutolink) {
obj.Text = meta2tags(obj.Text);
}
obj.Text = obj.Text.replace(/(]*)?([^&<>\s\/\-]{12})([^&<>\s\/\-]{12})/ig, function($0, $1, $2, $3){if($1)return $0; return $2+''+$3;});
}
break;
}
}
var ctx = JSKW$Events.registerEventCallback(undefined, cb, "smileys-newCommentInDiv");
JSKW$Events.registerEventCallback(ctx, cb, "smileys-loadCommentsWidget");
JSKW$Events.registerEventCallback(ctx, cb, "smileys-beforePostNewComment");
JSKW$Events.registerEventCallback(ctx, cb, "smileys-onchangeCommentText");
if(so.req) {
s.config.sort = so.req.srt;
s.config.backwards = so.req.ord == 'desc' ? 'yes' : 'no';
s.config.thread = ((so.req.prs == 'flat') ? 'no' : 'yes');
}
s.gen++;
s.loading = false;
if(s.ctag != so.tag) {
s.objById = {};
if(s.jspg) s.invalidateJSPG();
}
var flat = (s.searchString) ? true : s.config.thread != 'yes';
var ttt = []; // top level thread
var newChildren = {};
var nc = 0;
JSKitLib.fmap(arr, function(obj) {
if(!obj.ID) return;
if(s.IM && obj.yours) obj.Name = 'Me';
if(flat) {
delete(obj.ParentID);
delete(obj.depth);
}
s.objById[obj.ID] = obj;
obj.extra = {};
obj.thread = [];
JSKW$Events.syncBroadcast("smileys-loadCommentsWidget", obj, s.jcaIndex);
obj.karma = new JSCCKarma(obj, s);
if(obj.status != 'D') nc++;
var prn = s.objById[obj.ParentID];
if(prn) {
if(!newChildren[obj.ParentID]) {
ttt.push(obj);
}
prn.thread.push(obj);
} else {
ttt.push(obj);
}
newChildren[obj.ID] = 1;
obj.imgs = s.parseImgData(obj);
});
if (s.useReplyThreadsCollapsing()) {
JSKitLib.fmap(ttt, function(cmt) {
s.markCollapsedReplies(cmt, true);
});
}
s.divPages(so, s.htmlPaginate(ttt));
if(this.IM) this.conversations = so.conversations;
s.ctag = so.tag;
if (so.wysiwyg) {
if (so.smiley) {
so.allowedHTMLTags.push('img/src', 'img/title', 'img/border', 'img/alt');
}
var attrsByTag = {};
JSKitLib.fmap(so.allowedHTMLTags, function(v) {
var p = v.split('/');
var tag = p[0] || p;
var attr = p[1];
if (!attrsByTag[tag]) {
attrsByTag[tag] = ["style"];
}
if (attr) {
attrsByTag[tag].push(attr);
}
});
var allowedTags = JSKitLib.fmap(attrsByTag, function(attrs, tag) {
return tag + (attrs.length ? '[' + attrs.join('|') + ']' : '');
}).join(',');
s.tmce = { foreign: true, cfg: {
document_base_url: '//web.archive.org/web/20120319135727/https://cdn.js-kit.com',
convert_newlines_to_brs: true,
relative_urls: 0,
remove_script_host: 0,
uri_domain: '//web.archive.org/web/20120319135727/https://cdn.js-kit.com',
width: '100%',
closePopups: function() {
var cns = document.body.childNodes;
var i = 0;
while(i < cns.length) {
if(cns[i].id && cns[i].id.match(/^mce_\d+$/) && cns[i].className.match(/clearlooks2/)) document.body.removeChild(cns[i]);
else i++;
}
},
bookMark: function() {
tinyMCE.settings.curBM = tinyMCE.activeEditor.selection.getBookmark();
},
mode: "none",
plugins: "inlinepopups" + (so.smiley?",emotions":"") + (so.media?",youtube":""),
theme: "advanced",
theme_advanced_buttons1:
"bold,italic,underline,|,undo,redo,link,unlink"
+ (so.media?",youtube":"") + (so.smiley?",emotions":""),
theme_advanced_buttons2: "",
theme_advanced_buttons3: "",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
valid_elements: allowedTags,
setup: function(ed) {
var setContent = function(ed, value, extra) {
if(JSKitLib.isIE()) {
ed.setContent(value, extra);
tinyMCE.execInstanceCommand(ed.id, 'selectall');
ed.selection.collapse(0);
} else {
ed.setContent('', extra);
ed.execCommand('mceInsertContent', false, value, extra);
}
};
JSKitLib.fmap(["onClick","onKeyUp"], function(ev) {
ed[ev].add(function(ed, e){
tinyMCE.settings.bookMark();
if (ev == 'onClick') {
JSKW$Events.syncBroadcast('JSMenu-CollapseAll');
JSKW$Events.syncBroadcast('miniProfile_collapseAll');
}
});
});
if (ed.getElement().smoothWysiwygLoading) {
ed.onBeforeRenderUI.add(function(ed, e) {
var el = ed.getElement();
el.jsk$cover.parentNode.replaceChild(el.jsk$wrapper, el.jsk$cover);
});
ed[JSKitLib.getBrowser() == 'gecko' ? 'onInit' : 'onPostRender'].add(function(ed, e) {
var el = ed.getElement();
JSKitLib.show(el.jsk$wrapper);
if (!el.jsk$nofocus && el.jsk$widget.config.backwards != 'yes')
el.jsk$widget.TC["js-Cmtsubmit"].scrollIntoView(false);
});
}
if(JSKitLib.getBrowser() == 'gecko') {
ed.onInit.add(function(ed, e) {
var d = ed.getDoc();
try {
d.designMode = 'on';
} catch(e) { ; }
});
}
if (ed.getElement().jsk$hasDefaultValue && (s.jskauth.loginStatus || !s.anonymousCmt)) {
ed.onInit.add(function(ed, e) {
var d = (JSKitLib.getBrowser() == 'gecko' ? ed.getDoc() : ed.getWin());
tinymce.dom.Event.add(d, 'focus', function(e) {
var el = ed.getElement();
if (!el.defaultRemoved) {
setContent(ed, '', {format: 'raw', skip_undo: true});
el.defaultRemoved = true;
}
tinyMCE.settings.auto_focus = el.id;
});
});
}
if (!so.smiley) return;
ed.onKeyUp.add(function(ed, e) {
var content = {Text: ed.getContent({format: 'raw'})};
JSKW$Events.syncBroadcast("smileys-onchangeCommentText", content);
if(tinyMCE.settings.smiley) {
setContent(ed, content.Text, {format: 'raw'});
}
});
}
}};
}
s.dataLoader(so, nc);
var showCD = function() {
if(so.ShowSavedCommentDialog)
so.ShowSavedCommentDialog(s);
}
if(so.wysiwyg && !window.tinyMCE) {
JSKitLib.preloadImg('//web.archive.org/web/20120319135727/https://cdn.js-kit.com/images/loading.gif');
var inittmce = function() {
s.tmce.foreign = false;
s.tmce.cfg.plugins = "inlinepopups"+(so.smiley?",emotions":"")+(so.media?",youtube":""); // !inl-pop
s.tmce.cfg.strict_loading_mode = true;
tinyMCE.init(s.tmce.cfg);
showCD();
}
var oldcb = window.jsk$tmcecb;
if(oldcb) {
window.jsk$tmcecb = function() { if(oldcb) oldcb(); showCD(); };
} else {
window.jsk$tmcecb = inittmce;
JSKitLib.addScript('//web.archive.org/web/20120319135727/https://cdn.js-kit.com/extra/tiny_mce/tmce.js', this.target);
}
} else {
showCD();
}
var f = s.onDataLoad;
if(f) { s.onDataLoad = null; setTimeout(f, 0); }
s.publishEvent('comments-data-loaded', {'count': so.pages.tc});
if(this.useEcho() && (!s.echoSubscribed)) {
var jsk$echo = jskEchoInit(JSKitLib.getRef(s), s.target);
var voidRenderer = function(rendererIdx) {
if(!jsk$echo.getRendererById(rendererIdx)) {
jsk$echo.existingRenderers.push({
id: rendererIdx,
content: function() {}
});
}
}
voidRenderer(0);
voidRenderer(1);
var request = {
p: s.config.path,
permalink: s.config.permalink
};
if (s.sourceFilter) request[s.sourceFilter.type] = s.sourceFilter.sources.list;
jsk$echo.subscribe([{
request: request,
callback: function() {
s.renderSubscribeEvents.apply(s, arguments)
}
}]);
s.echoSubscribed = true;
}
}
}
|