gitlab-org--gitlab-foss/app/assets/javascripts/awards_handler.coffee

111 lines
3.2 KiB
CoffeeScript
Raw Normal View History

2015-11-11 13:12:51 +00:00
class @AwardsHandler
2015-12-11 11:10:00 +00:00
constructor: (@post_emoji_url, @noteable_type, @noteable_id, @aliases) ->
$(".add-award").click (event)->
event.stopPropagation()
event.preventDefault()
$(".emoji-menu").show()
$("html").click ->
if !$(event.target).closest(".emoji-menu").length
if $(".emoji-menu").is(":visible")
$(".emoji-menu").hide()
2015-11-11 13:12:51 +00:00
addAward: (emoji) ->
2015-12-11 11:10:00 +00:00
emoji = @normilizeEmojiName(emoji)
2015-11-11 13:12:51 +00:00
@postEmoji emoji, =>
@addAwardToEmojiBar(emoji)
$(".emoji-menu").hide()
2015-11-11 13:12:51 +00:00
addAwardToEmojiBar: (emoji) ->
2015-12-11 11:10:00 +00:00
emoji = @normilizeEmojiName(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")
2015-11-18 13:43:53 +00:00
@addMeToAuthorList(emoji)
else
@createEmoji(emoji)
2015-11-11 13:12:51 +00:00
exist: (emoji) ->
@findEmojiIcon(emoji).length > 0
2015-11-11 13:12:51 +00:00
isActive: (emoji) ->
@findEmojiIcon(emoji).parent().hasClass("active")
2015-11-11 13:12:51 +00:00
decrementCounter: (emoji) ->
counter = @findEmojiIcon(emoji).siblings(".counter")
2015-11-11 13:12:51 +00:00
if parseInt(counter.text()) > 1
counter.text(parseInt(counter.text()) - 1)
counter.parent().removeClass("active")
2015-11-18 13:43:53 +00:00
@removeMeFromAuthorList(emoji)
2015-11-11 13:12:51 +00:00
else
2015-11-18 13:43:53 +00:00
award = counter.parent()
award.tooltip("destroy")
award.remove()
2015-11-11 13:12:51 +00:00
2015-11-18 13:43:53 +00:00
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")
2015-12-22 18:02:22 +00:00
# "destroy" call is asynchronous and there is no appropriate callback on it, this is why we need to set timeout.
2015-11-18 13:43:53 +00:00
setTimeout (->
award.tooltip()
), 200
2015-11-11 13:12:51 +00:00
createEmoji: (emoji) ->
emojiCssClass = @resolveNameToCssClass(emoji)
2015-11-11 13:12:51 +00:00
nodes = []
2015-11-18 13:43:53 +00:00
nodes.push("<div class='award active' title='me'>")
nodes.push("<div class='icon emoji-icon " + emojiCssClass + "' data-emoji='" + emoji + "'></div>")
nodes.push("<div class='counter'>1</div>")
2015-11-11 13:12:51 +00:00
nodes.push("</div>")
emoji_node = $(nodes.join("\n")).insertBefore(".awards-controls").find(".emoji-icon").data("emoji", emoji)
2015-11-11 13:12:51 +00:00
2015-11-18 13:43:53 +00:00
$(".award").tooltip()
resolveNameToCssClass: (emoji) ->
unicodeName = $(".emoji-menu-content [data-emoji='?']".replace("?", emoji)).data("unicode-name")
"emoji-" + unicodeName
2015-11-11 13:12:51 +00:00
postEmoji: (emoji, callback) ->
2015-11-19 16:12:17 +00:00
$.post @post_emoji_url, { note: {
2015-11-20 09:13:43 +00:00
note: ":" + emoji + ":"
2015-11-11 13:12:51 +00:00
noteable_type: @noteable_type
noteable_id: @noteable_id
2015-11-19 16:12:17 +00:00
}},(data) ->
2015-11-11 13:12:51 +00:00
if data.ok
callback.call()
findEmojiIcon: (emoji) ->
$(".award [data-emoji='" + emoji + "']")
scrollToAwards: ->
$('body, html').animate({
scrollTop: $('.awards').offset().top - 80
}, 200)
2015-12-11 11:10:00 +00:00
normilizeEmojiName: (emoji) ->
@aliases[emoji] || emoji