(function ($){
const container=$('#covernews-reactions');
if(!container.length) return;
container.find('button').on('click keydown', function (event){
if(event.type==='keydown'&&event.key!=='Enter') return;
const btn=$(this);
const reaction=btn.data('reaction');
const postID=container.data('postid');
if(localStorage.getItem('covernews_reacted_' + postID + '_' + reaction)){
showReactionToast(btn, covernewsReactions.alreadyReactedMsg||'You already reacted.');
return;
}
$.post(covernewsReactions.ajax_url, {
action: 'covernews_react',
nonce: covernewsReactions.nonce,
post_id: postID,
reaction: reaction
}, function (response){
if(response.success){
localStorage.setItem('covernews_reacted_' + postID + '_' + reaction, '1');
const counts=response.data.counts;
const total=response.data.total;
container.find('button').each(function (){
const key=$(this).data('reaction');
const count=counts[key]||0;
const percentage=total > 0 ? Math.round((count / total) * 100):0;
$(this).find('.reaction-percentage').text(percentage + '%');
});
showReactionToast(btn, covernewsReactions.thankYouMsg||'Thanks for reacting!');
}else{
showReactionToast(btn, covernewsReactions.errorMsg||'Error occurred.');
}});
});
function showReactionToast($target, message){
const $toast=$('<div class="covernews-toast covernews-reaction-toast"></div>').text(message);
$('body').append($toast);
const offset=$target.offset();
if(offset){
$toast.css({
top: offset.top - 40,
left: offset.left,
});
}
setTimeout(()=> $toast.fadeOut(300, ()=> $toast.remove()), 2000);
}})(jQuery);