likebutton.js 1.5 KB

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