1
0

likebutton.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. $(document).ready(function() {
  2. pixelfed.fetchLikes = () => {
  3. axios.get('/api/v1/likes')
  4. .then(function (res) {
  5. ls.set('likes', res.data);
  6. })
  7. .catch(function (res) {
  8. ls.set('likes', []);
  9. })
  10. }
  11. pixelfed.hydrateLikes = () => {
  12. var likes = ls.get('likes');
  13. $('.like-form').each(function(i, el) {
  14. var el = $(el);
  15. var id = el.data('id');
  16. var heart = el.find('.status-heart');
  17. if(likes.indexOf(id) != -1) {
  18. heart.removeClass('text-dark').addClass('text-primary');
  19. } else {
  20. heart.removeClass('text-primary').addClass('text-dark');
  21. }
  22. });
  23. };
  24. pixelfed.fetchLikes();
  25. pixelfed.hydrateLikes();
  26. $(document).on('submit', '.like-form', function(e) {
  27. e.preventDefault();
  28. var el = $(this);
  29. var id = el.data('id');
  30. axios.post('/i/like', {item: id})
  31. .then(function (res) {
  32. pixelfed.fetchLikes();
  33. pixelfed.hydrateLikes();
  34. var likes = ls.get('likes');
  35. var action = false;
  36. var counter = el.parents().eq(1).find('.like-count');
  37. var count = res.data.count;
  38. var heart = el.find('.status-heart');
  39. if(likes.indexOf(id) > -1) {
  40. heart.removeClass('text-primary').addClass('text-dark');
  41. likes = likes.filter(function(item) {
  42. return item !== id
  43. });
  44. counter.text(count);
  45. action = 'unlike';
  46. } else {
  47. heart.removeClass('text-dark').addClass('text-primary');
  48. likes.push(id);
  49. counter.text(count);
  50. action = 'like';
  51. }
  52. ls.set('likes', likes);
  53. console.log(action + ' - ' + id + ' like event');
  54. });
  55. });
  56. });