1 WCF
.Like
=Class
.extend({_allowForOwnContent
:false,_canLike
:false,_containers
:{},_containerData
:{},_enableDislikes
:true,_isBusy
:false,_likeDetails
:{},_likeDetailsDialog
:null,_proxy
:null,_showSummary
:true,init:function(a
,c
,f
,e
){this._canLike
=a
;this._enableDislikes
=c
;this._isBusy
=false;this._likeDetails
={};this._likeDetailsDialog
=null;this._showSummary
=f
;this._allowForOwnContent
=e
;var d
=this._getContainers();this._initContainers(d
);this._proxy
=new WCF
.Action
.Proxy({success
:$.proxy(this._success
,this)});var g
=new Date();var b
=g
.toString().hashCode
+g
.getUTCMilliseconds();WCF
.DOMNodeInsertedHandler
.addCallback("WCF.Like"+b
,$.proxy(this._domNodeInserted
,this))},_domNodeInserted:function(){var a
=this._getContainers();this._initContainers(a
)},_initContainers:function(containers
){var $createdWidgets
=false;containers
.each($.proxy(function(index
,container
){var $container
=$(container
);var $containerID
=$container
.wcfIdentify();if(!this._containers
[$containerID
]){this._containers
[$containerID
]=$container
;this._containerData
[$containerID
]={likeButton
:null,badge
:null,dislikeButton
:null,likes
:$container
.data("like-likes"),dislikes
:$container
.data("like-dislikes"),objectType
:$container
.data("objectType"),objectID
:this._getObjectID($containerID
),users
:eval($container
.data("like-users")),liked
:$container
.data("like-liked")};this._createWidget($containerID
);$createdWidgets
=true}},this));if($createdWidgets
){new WCF
.PeriodicalExecuter(function(pe
){pe
.stop();WCF
.DOMNodeInsertedHandler
.execute()},250)}},_getContainers:function(){},_getWidgetContainer:function(a
){},_getObjectID:function(a
){},_addWidget:function(a
,b
){var c
=this._getWidgetContainer(a
);b
.appendTo(c
)},_buildWidget:function(b
,a
,d
,c
,e
){var f
=$('<aside class="likesWidget"><ul></ul></aside>');if(this._canLike
){a
.appendTo(f
.find("ul"));d
.appendTo(f
.find("ul"))}c
.appendTo(f
);this._addWidget(b
,f
)},_createWidget:function(b
){var e
=$('<li class="likeButton"><a title="'+WCF
.Language
.get("wcf.like.button.like")+'" class="jsTooltip"><span class="icon icon16 icon-thumbs-up-alt" /> <span class="invisible">'+WCF
.Language
.get("wcf.like.button.like")+"</span></a></li>");var c
=$('<li class="dislikeButton"><a title="'+WCF
.Language
.get("wcf.like.button.dislike")+'" class="jsTooltip"><span class="icon icon16 icon-thumbs-down-alt" /> <span class="invisible">'+WCF
.Language
.get("wcf.like.button.dislike")+"</span></a></li>");if(!this._enableDislikes
){c
.hide()}if(!this._allowForOwnContent
&&(WCF
.User
.userID
==this._containers
[b
].data("userID"))){e
=$("");c
=$("")}var d
=$('<a class="badge jsTooltip likesBadge" />').data("containerID",b
).click($.proxy(this._showLikeDetails
,this));var a
=null;if(this._showSummary
){a
=$('<p class="likesSummary"><span class="pointer" /></p>');a
.children("span").data("containerID",b
).click($.proxy(this._showLikeDetails
,this))}this._buildWidget(b
,e
,c
,d
,a
);this._containerData
[b
].likeButton
=e
;this._containerData
[b
].dislikeButton
=c
;this._containerData
[b
].badge
=d
;this._containerData
[b
].summary
=a
;e
.data("containerID",b
).data("type","like").click($.proxy(this._click
,this));c
.data("containerID",b
).data("type","dislike").click($.proxy(this._click
,this));this._setActiveState(e
,c
,this._containerData
[b
].liked
);this._updateBadge(b
);if(this._showSummary
){this._updateSummary(b
)}},_showLikeDetails:function(c
,a
){var b
=(c
===null)?a
:$(c
.currentTarget
).data("containerID");if(this._likeDetails
[b
]===undefined){this._proxy
.setOption("data",{actionName
:"getLikeDetails",className
:"wcf\\data\\like\\LikeAction",parameters
:{data
:{containerID
:b
,objectID
:this._containerData
[b
].objectID
,objectType
:this._containerData
[b
].objectType
}}});this._proxy
.sendRequest()}else{if(this._likeDetailsDialog
===null){this._likeDetailsDialog
=$("<div>"+this._likeDetails
[b
]+"</div>").hide().appendTo(document
.body
);this._likeDetailsDialog
.wcfDialog({title
:WCF
.Language
.get("wcf.like.details")})}else{this._likeDetailsDialog
.html(this._likeDetails
[b
]).wcfDialog("open")}}},_click:function(a
){var b
=$(a
.currentTarget
);if(b
===null){console
.debug("[WCF.Like] Unable to find target button, aborting.");return}this._sendRequest(b
.data("containerID"),b
.data("type"))},_sendRequest:function(a
,b
){if(this._isBusy
){return}this._isBusy
=true;this._proxy
.setOption("data",{actionName
:b
,className
:"wcf\\data\\like\\LikeAction",parameters
:{data
:{containerID
:a
,objectID
:this._containerData
[a
].objectID
,objectType
:this._containerData
[a
].objectType
}}});this._proxy
.sendRequest()},_success:function(d
,g
,b
){var a
=d
.returnValues
.containerID
;if(!this._containers
[a
]){return}switch(d
.actionName
){case"dislike":case"like":this._containerData
[a
].likes
=parseInt(d
.returnValues
.likes
);this._containerData
[a
].dislikes
=parseInt(d
.returnValues
.dislikes
);this._containerData
[a
].users
=d
.returnValues
.users
;this._updateBadge(a
);if(this._showSummary
){this._updateSummary(a
)}var f
=this._containerData
[a
].likeButton
;var e
=this._containerData
[a
].dislikeButton
;var c
=0;if(d
.returnValues
.isLiked
){c
=1}else{if(d
.returnValues
.isDisliked
){c
=-1}}this._setActiveState(f
,e
,c
);if(this._likeDetails
[a
]!==undefined){delete this._likeDetails
[a
]}this._isBusy
=false;break;case"getLikeDetails":this._likeDetails
[a
]=d
.returnValues
.template
;this._showLikeDetails(null,a
);break}},_updateBadge:function(a
){if(!this._containerData
[a
].likes
&&!this._containerData
[a
].dislikes
){this._containerData
[a
].badge
.hide()}else{this._containerData
[a
].badge
.show();var c
=this._containerData
[a
].likes
-this._containerData
[a
].dislikes
;var d
=this._containerData
[a
].badge
;d
.removeClass("green red");if(c
>0){d
.text("+"+WCF
.String
.formatNumeric(c
));d
.addClass("green")}else{if(c
<0){d
.text(WCF
.String
.formatNumeric(c
));d
.addClass("red")}else{d
.text("\u00B10")}}var e
=this._containerData
[a
].likes
;var b
=this._containerData
[a
].dislikes
;d
.data("tooltip",WCF
.Language
.get("wcf.like.tooltip",{likes
:e
,dislikes
:b
}))}},_updateSummary:function(a
){if(!this._containerData
[a
].likes
){this._containerData
[a
].summary
.hide()}else{this._containerData
[a
].summary
.show();var d
=this._containerData
[a
].users
;var c
=[];for(var b
in d
){c
.push(d
[b
].username
)}var e
=this._containerData
[a
].likes
-c
.length
;this._containerData
[a
].summary
.children("span").html(WCF
.Language
.get("wcf.like.summary",{users
:c
,others
:e
}))}},_setActiveState:function(a
,b
,c
){a
.removeClass("active");b
.removeClass("active");if(c
==1){a
.addClass("active")}else{if(c
==-1){b
.addClass("active")}}}});