smiles!!!
This commit is contained in:
parent
c7221ef377
commit
97c197f112
|
@ -112,12 +112,54 @@ $(document).on "click", "button[name=ab-destroy]", ->
|
|||
complete: (jqxhr, status) ->
|
||||
btn.button "reset"
|
||||
|
||||
$(document).on "click", "button[name=ab-smile]", ->
|
||||
btn = $(this)
|
||||
aid = btn[0].dataset.aId
|
||||
action = btn[0].dataset.action
|
||||
count = Number $("span#ab-smile-count-#{aid}").html()
|
||||
btn[0].dataset.loadingText = "<i class=\"fa fa-meh-o fa-spin\"></i>"
|
||||
btn.button "loading"
|
||||
|
||||
target_url = switch action
|
||||
when 'smile'
|
||||
count++
|
||||
'/ajax/create_smile'
|
||||
when 'unsmile'
|
||||
count--
|
||||
'/ajax/destroy_smile'
|
||||
|
||||
success = false
|
||||
|
||||
$.ajax
|
||||
url: target_url
|
||||
type: 'POST'
|
||||
data:
|
||||
id: aid
|
||||
success: (data, status, jqxhr) ->
|
||||
success = data.success
|
||||
if success
|
||||
$("span#ab-smile-count-#{aid}").html(count)
|
||||
showNotification data.message, data.success
|
||||
error: (jqxhr, status, error) ->
|
||||
console.log jqxhr, status, error
|
||||
showNotification "An error occurred, a developer should check the console for details", false
|
||||
complete: (jqxhr, status) ->
|
||||
btn.button "reset"
|
||||
if success
|
||||
switch action
|
||||
when 'smile'
|
||||
btn[0].dataset.action = 'unsmile'
|
||||
btn.html "<i class=\"fa fa-frown-o\"></i>"
|
||||
when 'unsmile'
|
||||
btn[0].dataset.action = 'smile'
|
||||
btn.html "<i class=\"fa fa-smile-o\"></i>"
|
||||
|
||||
$(document).on "click", "button[name=user-action]", ->
|
||||
btn = $(this)
|
||||
btn.button "loading"
|
||||
target = btn[0].dataset.target
|
||||
action = btn[0].dataset.action
|
||||
count = Number($("h4.entry-text#follower-count").html())
|
||||
count = Number $("h4.entry-text#follower-count").html()
|
||||
|
||||
target_url = switch action
|
||||
when 'follow'
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
class Ajax::SmileController < ApplicationController
|
||||
def create
|
||||
params.require :id
|
||||
|
||||
answer = Answer.find(params[:id])
|
||||
|
||||
begin
|
||||
current_user.smile answer
|
||||
rescue
|
||||
@status = :fail
|
||||
@message = "You have already smiled that answer."
|
||||
@success = false
|
||||
return
|
||||
end
|
||||
|
||||
@status = :okay
|
||||
@message = "Successfully smiled answer."
|
||||
@success = true
|
||||
end
|
||||
|
||||
def destroy
|
||||
params.require :id
|
||||
|
||||
answer = Answer.find(params[:id])
|
||||
|
||||
begin
|
||||
current_user.unsmile answer
|
||||
rescue
|
||||
@status = :fail
|
||||
@message = "You have not smiled that answer."
|
||||
@success = false
|
||||
return
|
||||
end
|
||||
|
||||
@status = :okay
|
||||
@message = "Successfully unsmiled answer."
|
||||
@success = true
|
||||
end
|
||||
end
|
|
@ -19,6 +19,7 @@ class User < ActiveRecord::Base
|
|||
dependent: :destroy
|
||||
has_many :friends, through: :active_relationships, source: :target
|
||||
has_many :followers, through: :passive_relationships, source: :source
|
||||
has_many :smiles
|
||||
|
||||
SCREEN_NAME_REGEX = /\A[a-zA-Z0-9_]{1,16}\z/
|
||||
|
||||
|
@ -66,7 +67,7 @@ class User < ActiveRecord::Base
|
|||
target_user.decrement! :follower_count
|
||||
end
|
||||
|
||||
# @return [Boolean] true if +current_user+ is following +target_user+
|
||||
# @return [Boolean] true if +self+ is following +target_user+
|
||||
def following?(target_user)
|
||||
friends.include? target_user
|
||||
end
|
||||
|
@ -86,4 +87,10 @@ class User < ActiveRecord::Base
|
|||
decrement! :smiled_count
|
||||
answer.decrement! :smile_count
|
||||
end
|
||||
|
||||
def smiled?(answer)
|
||||
# TODO: you know what to do here, nilsding
|
||||
answer.smiles.each { |s| return true if s.user_id == self.id }
|
||||
false
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
json.partial! 'ajax/shared/status'
|
|
@ -0,0 +1 @@
|
|||
json.partial! 'ajax/shared/status'
|
|
@ -17,9 +17,16 @@
|
|||
%img.img-rounded.img-answerbox-small{src: gravatar_url(a.user)}
|
||||
%span= a.user.screen_name
|
||||
.col-md-6.col-sm-8.col-xs-5.text-right
|
||||
%span.hidden-xs.text-muted x users smiled at this
|
||||
%a.btn.btn-info.btn-sm
|
||||
%i.fa.fa-smile-o
|
||||
%span.hidden-xs.text-muted
|
||||
%span{id: "ab-smile-count-#{a.id}"}= a.smile_count
|
||||
users smiled this
|
||||
- if user_signed_in?
|
||||
- if current_user.smiled? a
|
||||
%button.btn.btn-info.btn-sm{type: :button, name: 'ab-smile', 'data-a-id' => a.id, 'data-action' => 'unsmile'}
|
||||
%i.fa.fa-frown-o
|
||||
- else
|
||||
%button.btn.btn-info.btn-sm{type: :button, name: 'ab-smile', 'data-a-id' => a.id, 'data-action' => 'smile'}
|
||||
%i.fa.fa-smile-o
|
||||
%a.btn.btn-primary.btn-sm
|
||||
%i.fa.fa-comments
|
||||
- if privileged? a.user
|
||||
|
|
|
@ -30,6 +30,8 @@ Rails.application.routes.draw do
|
|||
match '/destroy_answer', to: 'answer#destroy', via: :post, as: :destroy_answer
|
||||
match '/create_friend', to: 'friend#create', via: :post, as: :create_friend
|
||||
match '/destroy_friend', to: 'friend#destroy', via: :post, as: :destroy_friend
|
||||
match '/create_smile', to: 'smile#create', via: :post, as: :create_smile
|
||||
match '/destroy_smile', to: 'smile#destroy', via: :post, as: :destroy_smile
|
||||
end
|
||||
|
||||
match '/inbox', to: 'inbox#show', via: 'get'
|
||||
|
|
Loading…
Reference in New Issue