diff --git a/app/Controllers/TricksController.php b/app/Controllers/TricksController.php index 07b23a2..e70905d 100644 --- a/app/Controllers/TricksController.php +++ b/app/Controllers/TricksController.php @@ -72,12 +72,22 @@ public function postLike($slug) } $user = Auth::user(); - $user = $trick->votes()->attach($user->id, [ - 'created_at' => new \DateTime, - 'updated_at' => new \DateTime - ]); + + $voted = $trick->votes()->whereUserId($user->id)->first(); + + if(!$voted) { + + $user = $trick->votes()->attach($user->id, [ + 'created_at' => new \DateTime, + 'updated_at' => new \DateTime + ]); + $trick->vote_cache = $trick->vote_cache + 1; + + } else { + $trick->votes()->detach($voted->id); + $trick->vote_cache = $trick->vote_cache - 1; + } - $trick->vote_cache = $trick->vote_cache + 1; $trick->save(); return Response::make($trick->vote_cache, 200); diff --git a/app/views/tricks/single.blade.php b/app/views/tricks/single.blade.php index 9213d19..c5a8020 100644 --- a/app/views/tricks/single.blade.php +++ b/app/views/tricks/single.blade.php @@ -11,8 +11,8 @@ @if(Auth::check()) + (function(e){e(".js-like-trick").click(function(t){t.preventDefault();var n=e(this).data("liked")=="0";var r={_token:"{{ csrf_token() }}"};e.post('{{ route("tricks.like", $trick->slug) }}',r,function(t){if(t!="error"){if(!n){e(".js-like-trick .fa").removeClass("text-red");e(".js-like-trick").data("liked","0");e(".js-like-status").html("Like this?")}else{e(".js-like-trick .fa").addClass("text-red");e(".js-like-trick").data("liked","1");e(".js-like-status").html("You like this")}e(".js-like-count").html(t+" likes")}})})})(jQuery) + @endif @stop diff --git a/public/js/trick-like-backup.js b/public/js/trick-like-backup.js index e8653a0..4b169de 100644 --- a/public/js/trick-like-backup.js +++ b/public/js/trick-like-backup.js @@ -1,22 +1,33 @@ -$(function() -{ - $('.js-like-trick').click(function(e) - { +(function ($) { + + $('.js-like-trick').click(function (e) { e.preventDefault(); - if($(this).data('liked') == '0') - { - var data = {}; - - $.post('{{ route("tricks.like", $trick->slug) }}', data, function(res) - { - if(res != 'error') - { - $('.js-like-trick').find('.fa').addClass('text-primary'); + var liked = $(this).data('liked') == '0'; + + var data = {"_token": "{{ csrf_token() }}" }; + + $.post('{{ route("tricks.like", $trick->slug) }}', data, function (res) { + if (res != 'error') { + + if (!liked) { + + $('.js-like-trick .fa').removeClass('text-red'); + + $('.js-like-trick').data('liked', '0'); + + $('.js-like-status').html('Like this?'); + } else { + + $('.js-like-trick .fa').addClass('text-red'); + $('.js-like-trick').data('liked', '1'); + $('.js-like-status').html('You like this'); - $('.js-like-count').html(res + ' likes'); } - }); - } + + $('.js-like-count').html(res + ' likes'); + } + }); + }); -}); +})(jQuery) \ No newline at end of file