awards_handler.coffee 2.4 KB
Newer Older
V
Valery Sizov 已提交
1 2 3 4 5
class @AwardsHandler
  constructor: (@post_emoji_url, @noteable_type, @noteable_id) ->

  addAward: (emoji) ->
    @postEmoji emoji, =>
6
      @addAwardToEmojiBar(emoji)
V
Valery Sizov 已提交
7
    
8 9 10 11 12 13 14 15
  addAwardToEmojiBar: (emoji) ->
    if @exist(emoji)
      if @isActive(emoji)
        @decrementCounter(emoji)
      else
        counter = @findEmojiIcon(emoji).siblings(".counter")
        counter.text(parseInt(counter.text()) + 1)
        counter.parent().addClass("active")
V
Valery Sizov 已提交
16
        @addMeToAuthorList(emoji)
17 18
    else
      @createEmoji(emoji)
V
Valery Sizov 已提交
19 20

  exist: (emoji) ->
21
    @findEmojiIcon(emoji).length > 0
V
Valery Sizov 已提交
22 23

  isActive: (emoji) ->
24
    @findEmojiIcon(emoji).parent().hasClass("active")
V
Valery Sizov 已提交
25 26

  decrementCounter: (emoji) ->
27
    counter = @findEmojiIcon(emoji).siblings(".counter")
V
Valery Sizov 已提交
28 29 30 31

    if parseInt(counter.text()) > 1
      counter.text(parseInt(counter.text()) - 1)
      counter.parent().removeClass("active")
V
Valery Sizov 已提交
32
      @removeMeFromAuthorList(emoji)
V
Valery Sizov 已提交
33
    else
V
Valery Sizov 已提交
34 35 36
      award = counter.parent()
      award.tooltip("destroy")
      award.remove()
V
Valery Sizov 已提交
37

V
Valery Sizov 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
  removeMeFromAuthorList: (emoji) ->
    award_block = @findEmojiIcon(emoji).parent()
    authors = award_block.attr("data-original-title").split(", ")
    authors = _.without(authors, "me").join(", ")
    award_block.attr("title", authors)
    @resetTooltip(award_block)

  addMeToAuthorList: (emoji) ->
    award_block = @findEmojiIcon(emoji).parent()
    authors = award_block.attr("data-original-title").split(", ")
    authors.push("me")
    award_block.attr("title", authors.join(", "))
    @resetTooltip(award_block)

  resetTooltip: (award) ->
    award.tooltip("destroy")

    # "destroy" call is asynchronous, this is why we need to set timeout.
    setTimeout (->
      award.tooltip()
    ), 200
    
V
Valery Sizov 已提交
60 61 62

  createEmoji: (emoji) ->
    nodes = []
V
Valery Sizov 已提交
63
    nodes.push("<div class='award active' title='me'>")
64
    nodes.push("<div class='icon' data-emoji='" + emoji + "'>")
V
Valery Sizov 已提交
65 66 67 68 69
    nodes.push(@getImage(emoji))
    nodes.push("</div>")
    nodes.push("<div class='counter'>1")
    nodes.push("</div></div>")

V
Valery Sizov 已提交
70
    $(".awards-controls").before(nodes.join("\n"))
V
Valery Sizov 已提交
71

V
Valery Sizov 已提交
72 73
    $(".award").tooltip()

V
Valery Sizov 已提交
74
  getImage: (emoji) ->
75
    $("li[data-emoji='" + emoji + "'").html()
V
Valery Sizov 已提交
76 77 78 79 80 81 82 83

  postEmoji: (emoji, callback) ->
    $.post @post_emoji_url, {
      emoji: emoji
      noteable_type: @noteable_type
      noteable_id: @noteable_id
    },(data) ->
      if data.ok
84 85 86 87
        callback.call()

  findEmojiIcon: (emoji) ->
    $(".icon[data-emoji='" + emoji + "'")