likebutton.js 2.0 KB

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