Commit 37120872 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'improve_emoji_picker' into 'master'

Improve emoji picker

This request uses an emoji image sprite to show big set of emojis. The sprite has been made based one gemojione gem images. The categories are retrieved from https://github.com/jonathanwiesel/gemojione/blob/master/config/index.json as well.

Some categories are pretty poor, it can be extended in the future.

It's a first step on the way to improve picker.

The first implementation was using https://github.com/iamcal/emoji-data project, but there was huge incompatibility with gemojione emojis set and I had to drop that solution.

![Screenshot_2015-12-22_23.26.27](/uploads/7d323eb0586204ac92915b41233b97ec/Screenshot_2015-12-22_23.26.27.png)


See merge request !2172
parents e68ae9c6 44d8714f
class @AwardsHandler class @AwardsHandler
constructor: (@post_emoji_url, @noteable_type, @noteable_id, @aliases) -> 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()
addAward: (emoji) -> addAward: (emoji) ->
emoji = @normilizeEmojiName(emoji) emoji = @normilizeEmojiName(emoji)
@postEmoji emoji, => @postEmoji emoji, =>
@addAwardToEmojiBar(emoji) @addAwardToEmojiBar(emoji)
addAwardToEmojiBar: (emoji, custom_path = '') -> $(".emoji-menu").hide()
addAwardToEmojiBar: (emoji) ->
emoji = @normilizeEmojiName(emoji) emoji = @normilizeEmojiName(emoji)
if @exist(emoji) if @exist(emoji)
if @isActive(emoji) if @isActive(emoji)
...@@ -17,7 +28,7 @@ class @AwardsHandler ...@@ -17,7 +28,7 @@ class @AwardsHandler
counter.parent().addClass("active") counter.parent().addClass("active")
@addMeToAuthorList(emoji) @addMeToAuthorList(emoji)
else else
@createEmoji(emoji, custom_path) @createEmoji(emoji)
exist: (emoji) -> exist: (emoji) ->
@findEmojiIcon(emoji).length > 0 @findEmojiIcon(emoji).length > 0
...@@ -54,31 +65,29 @@ class @AwardsHandler ...@@ -54,31 +65,29 @@ class @AwardsHandler
resetTooltip: (award) -> resetTooltip: (award) ->
award.tooltip("destroy") award.tooltip("destroy")
# "destroy" call is asynchronous, this is why we need to set timeout. # "destroy" call is asynchronous and there is no appropriate callback on it, this is why we need to set timeout.
setTimeout (-> setTimeout (->
award.tooltip() award.tooltip()
), 200 ), 200
createEmoji: (emoji, custom_path) -> createEmoji: (emoji) ->
emojiCssClass = @resolveNameToCssClass(emoji)
nodes = [] nodes = []
nodes.push("<div class='award active' title='me'>") nodes.push("<div class='award active' title='me'>")
nodes.push("<div class='icon' data-emoji='" + emoji + "'>") nodes.push("<div class='icon emoji-icon " + emojiCssClass + "' data-emoji='" + emoji + "'></div>")
nodes.push(@getImage(emoji, custom_path)) nodes.push("<div class='counter'>1</div>")
nodes.push("</div>") nodes.push("</div>")
nodes.push("<div class='counter'>1")
nodes.push("</div></div>")
$(".awards-controls").before(nodes.join("\n")) emoji_node = $(nodes.join("\n")).insertBefore(".awards-controls").find(".emoji-icon").data("emoji", emoji)
$(".award").tooltip() $(".award").tooltip()
getImage: (emoji, custom_path) -> resolveNameToCssClass: (emoji) ->
if custom_path unicodeName = $(".emoji-menu-content [data-emoji='?']".replace("?", emoji)).data("unicode-name")
$("<img>").attr({src: custom_path, width: 20, height: 20}).wrap("<div>").parent().html()
else
$("li[data-emoji='" + emoji + "']").html()
"emoji-" + unicodeName
postEmoji: (emoji, callback) -> postEmoji: (emoji, callback) ->
$.post @post_emoji_url, { note: { $.post @post_emoji_url, { note: {
...@@ -90,7 +99,7 @@ class @AwardsHandler ...@@ -90,7 +99,7 @@ class @AwardsHandler
callback.call() callback.call()
findEmojiIcon: (emoji) -> findEmojiIcon: (emoji) ->
$(".icon[data-emoji='" + emoji + "']") $(".award [data-emoji='" + emoji + "']")
scrollToAwards: -> scrollToAwards: ->
$('body, html').animate({ $('body, html').animate({
......
...@@ -127,7 +127,7 @@ class @Notes ...@@ -127,7 +127,7 @@ class @Notes
@initTaskList() @initTaskList()
if note.award if note.award
awards_handler.addAwardToEmojiBar(note.note, note.emoji_path) awards_handler.addAwardToEmojiBar(note.note)
awards_handler.scrollToAwards() awards_handler.scrollToAwards()
### ###
......
...@@ -2,6 +2,12 @@ ...@@ -2,6 +2,12 @@
@include clearfix; @include clearfix;
line-height: 34px; line-height: 34px;
.emoji-icon {
width: 20px;
height: 20px;
margin: 7px 0 0 5px;
}
.award { .award {
@include border-radius(5px); @include border-radius(5px);
...@@ -40,6 +46,7 @@ ...@@ -40,6 +46,7 @@
} }
.awards-controls { .awards-controls {
position: relative;
margin-left: 10px; margin-left: 10px;
float: left; float: left;
...@@ -55,32 +62,60 @@ ...@@ -55,32 +62,60 @@
} }
} }
.awards-menu { .emoji-menu{
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
padding: 5px 0;
margin: 2px 0 0;
font-size: 14px;
text-align: left;
list-style: none;
background-color: #fff;
-webkit-background-clip: padding-box;
background-clip: padding-box;
border: 1px solid #ccc;
border: 1px solid rgba(0,0,0,.15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
box-shadow: 0 6px 12px rgba(0,0,0,.175);
.emoji-menu-content {
padding: $gl-padding; padding: $gl-padding;
min-width: 214px; width: 300px;
height: 300px;
overflow-y: scroll;
> li { h5 {
clear: left;
}
ul {
list-style-type: none;
margin-left: -20px;
margin-bottom: 20px;
overflow: auto;
}
li {
cursor: pointer; cursor: pointer;
width: 30px; width: 30px;
height: 30px; height: 30px;
text-align: center; text-align: center;
float: left;
margin: 3px;
list-decorate: none;
@include border-radius(5px); @include border-radius(5px);
img {
margin-bottom: 2px;
}
&:hover { &:hover {
background-color: #ccc; background-color: #ccc;
} }
} }
} }
} }
.awards-menu{
li {
float: left;
margin: 3px;
}
} }
} }
/*
File is generated by https://github.com/jakesgordon/sprite-factory and midified manualy
The source: gemojione gem.
*/
.emoji-icon{
background-image: url(emoji.png);
background-repeat: no-repeat;
}
.emoji-0023-20E3 { background-position: 0px 0px; }
.emoji-0030-20E3 { background-position: -20px 0px; }
.emoji-0031-20E3 { background-position: -40px 0px; }
.emoji-0032-20E3 { background-position: -60px 0px; }
.emoji-0033-20E3 { background-position: -80px 0px; }
.emoji-0034-20E3 { background-position: -100px 0px; }
.emoji-0035-20E3 { background-position: -120px 0px; }
.emoji-0036-20E3 { background-position: -140px 0px; }
.emoji-0037-20E3 { background-position: -160px 0px; }
.emoji-0038-20E3 { background-position: -180px 0px; }
.emoji-0039-20E3 { background-position: -200px 0px; }
.emoji-00A9 { background-position: -220px 0px; }
.emoji-00AE { background-position: -240px 0px; }
.emoji-1F004 { background-position: -260px 0px; }
.emoji-1F0CF { background-position: -280px 0px; }
.emoji-1F170 { background-position: -300px 0px; }
.emoji-1F171 { background-position: -320px 0px; }
.emoji-1F17E { background-position: -340px 0px; }
.emoji-1F17F { background-position: -360px 0px; }
.emoji-1F18E { background-position: -380px 0px; }
.emoji-1F191 { background-position: -400px 0px; }
.emoji-1F192 { background-position: -420px 0px; }
.emoji-1F193 { background-position: -440px 0px; }
.emoji-1F194 { background-position: -460px 0px; }
.emoji-1F195 { background-position: -480px 0px; }
.emoji-1F196 { background-position: -500px 0px; }
.emoji-1F197 { background-position: -520px 0px; }
.emoji-1F198 { background-position: -540px 0px; }
.emoji-1F199 { background-position: -560px 0px; }
.emoji-1F19A { background-position: -580px 0px; }
.emoji-1F1E6-1F1E8 { background-position: -600px 0px; }
.emoji-1F1E6-1F1E9 { background-position: -620px 0px; }
.emoji-1F1E6-1F1EA { background-position: -640px 0px; }
.emoji-1F1E6-1F1EB { background-position: -660px 0px; }
.emoji-1F1E6-1F1EC { background-position: -680px 0px; }
.emoji-1F1E6-1F1EE { background-position: -700px 0px; }
.emoji-1F1E6-1F1F1 { background-position: -720px 0px; }
.emoji-1F1E6-1F1F2 { background-position: -740px 0px; }
.emoji-1F1E6-1F1F4 { background-position: -760px 0px; }
.emoji-1F1E6-1F1F7 { background-position: -780px 0px; }
.emoji-1F1E6-1F1F9 { background-position: -800px 0px; }
.emoji-1F1E6-1F1FA { background-position: -820px 0px; }
.emoji-1F1E6-1F1FC { background-position: -840px 0px; }
.emoji-1F1E6-1F1FF { background-position: -860px 0px; }
.emoji-1F1E7-1F1E6 { background-position: -880px 0px; }
.emoji-1F1E7-1F1E7 { background-position: -900px 0px; }
.emoji-1F1E7-1F1E9 { background-position: -920px 0px; }
.emoji-1F1E7-1F1EA { background-position: -940px 0px; }
.emoji-1F1E7-1F1EB { background-position: -960px 0px; }
.emoji-1F1E7-1F1EC { background-position: -980px 0px; }
.emoji-1F1E7-1F1ED { background-position: -1000px 0px; }
.emoji-1F1E7-1F1EE { background-position: -1020px 0px; }
.emoji-1F1E7-1F1EF { background-position: -1040px 0px; }
.emoji-1F1E7-1F1F2 { background-position: -1060px 0px; }
.emoji-1F1E7-1F1F3 { background-position: -1080px 0px; }
.emoji-1F1E7-1F1F4 { background-position: -1100px 0px; }
.emoji-1F1E7-1F1F7 { background-position: -1120px 0px; }
.emoji-1F1E7-1F1F8 { background-position: -1140px 0px; }
.emoji-1F1E7-1F1F9 { background-position: -1160px 0px; }
.emoji-1F1E7-1F1FC { background-position: -1180px 0px; }
.emoji-1F1E7-1F1FE { background-position: -1200px 0px; }
.emoji-1F1E7-1F1FF { background-position: -1220px 0px; }
.emoji-1F1E8-1F1E6 { background-position: -1240px 0px; }
.emoji-1F1E8-1F1E9 { background-position: -1260px 0px; }
.emoji-1F1E8-1F1EB { background-position: -1280px 0px; }
.emoji-1F1E8-1F1EC { background-position: -1300px 0px; }
.emoji-1F1E8-1F1ED { background-position: -1320px 0px; }
.emoji-1F1E8-1F1EE { background-position: -1340px 0px; }
.emoji-1F1E8-1F1F1 { background-position: -1360px 0px; }
.emoji-1F1E8-1F1F2 { background-position: -1380px 0px; }
.emoji-1F1E8-1F1F3 { background-position: -1400px 0px; }
.emoji-1F1E8-1F1F4 { background-position: -1420px 0px; }
.emoji-1F1E8-1F1F7 { background-position: -1440px 0px; }
.emoji-1F1E8-1F1FA { background-position: -1460px 0px; }
.emoji-1F1E8-1F1FB { background-position: -1480px 0px; }
.emoji-1F1E8-1F1FE { background-position: -1500px 0px; }
.emoji-1F1E8-1F1FF { background-position: -1520px 0px; }
.emoji-1F1E9-1F1EA { background-position: -1540px 0px; }
.emoji-1F1E9-1F1EF { background-position: -1560px 0px; }
.emoji-1F1E9-1F1F0 { background-position: -1580px 0px; }
.emoji-1F1E9-1F1F2 { background-position: -1600px 0px; }
.emoji-1F1E9-1F1F4 { background-position: -1620px 0px; }
.emoji-1F1E9-1F1FF { background-position: -1640px 0px; }
.emoji-1F1EA-1F1E8 { background-position: -1660px 0px; }
.emoji-1F1EA-1F1EA { background-position: -1680px 0px; }
.emoji-1F1EA-1F1EC { background-position: -1700px 0px; }
.emoji-1F1EA-1F1ED { background-position: -1720px 0px; }
.emoji-1F1EA-1F1F7 { background-position: -1740px 0px; }
.emoji-1F1EA-1F1F8 { background-position: -1760px 0px; }
.emoji-1F1EA-1F1F9 { background-position: -1780px 0px; }
.emoji-1F1EB-1F1EE { background-position: -1800px 0px; }
.emoji-1F1EB-1F1EF { background-position: -1820px 0px; }
.emoji-1F1EB-1F1F0 { background-position: -1840px 0px; }
.emoji-1F1EB-1F1F2 { background-position: -1860px 0px; }
.emoji-1F1EB-1F1F4 { background-position: -1880px 0px; }
.emoji-1F1EB-1F1F7 { background-position: -1900px 0px; }
.emoji-1F1EC-1F1E6 { background-position: -1920px 0px; }
.emoji-1F1EC-1F1E7 { background-position: -1940px 0px; }
.emoji-1F1EC-1F1E9 { background-position: -1960px 0px; }
.emoji-1F1EC-1F1EA { background-position: -1980px 0px; }
.emoji-1F1EC-1F1ED { background-position: -2000px 0px; }
.emoji-1F1EC-1F1EE { background-position: -2020px 0px; }
.emoji-1F1EC-1F1F1 { background-position: -2040px 0px; }
.emoji-1F1EC-1F1F2 { background-position: -2060px 0px; }
.emoji-1F1EC-1F1F3 { background-position: -2080px 0px; }
.emoji-1F1EC-1F1F6 { background-position: -2100px 0px; }
.emoji-1F1EC-1F1F7 { background-position: -2120px 0px; }
.emoji-1F1EC-1F1F9 { background-position: -2140px 0px; }
.emoji-1F1EC-1F1FA { background-position: -2160px 0px; }
.emoji-1F1EC-1F1FC { background-position: -2180px 0px; }
.emoji-1F1EC-1F1FE { background-position: -2200px 0px; }
.emoji-1F1ED-1F1F0 { background-position: -2220px 0px; }
.emoji-1F1ED-1F1F3 { background-position: -2240px 0px; }
.emoji-1F1ED-1F1F7 { background-position: -2260px 0px; }
.emoji-1F1ED-1F1F9 { background-position: -2280px 0px; }
.emoji-1F1ED-1F1FA { background-position: -2300px 0px; }
.emoji-1F1EE-1F1E9 { background-position: -2320px 0px; }
.emoji-1F1EE-1F1EA { background-position: -2340px 0px; }
.emoji-1F1EE-1F1F1 { background-position: -2360px 0px; }
.emoji-1F1EE-1F1F3 { background-position: -2380px 0px; }
.emoji-1F1EE-1F1F6 { background-position: -2400px 0px; }
.emoji-1F1EE-1F1F7 { background-position: -2420px 0px; }
.emoji-1F1EE-1F1F8 { background-position: -2440px 0px; }
.emoji-1F1EE-1F1F9 { background-position: -2460px 0px; }
.emoji-1F1EF-1F1EA { background-position: -2480px 0px; }
.emoji-1F1EF-1F1F2 { background-position: -2500px 0px; }
.emoji-1F1EF-1F1F4 { background-position: -2520px 0px; }
.emoji-1F1EF-1F1F5 { background-position: -2540px 0px; }
.emoji-1F1F0-1F1EA { background-position: -2560px 0px; }
.emoji-1F1F0-1F1EC { background-position: -2580px 0px; }
.emoji-1F1F0-1F1ED { background-position: -2600px 0px; }
.emoji-1F1F0-1F1EE { background-position: -2620px 0px; }
.emoji-1F1F0-1F1F2 { background-position: -2640px 0px; }
.emoji-1F1F0-1F1F3 { background-position: -2660px 0px; }
.emoji-1F1F0-1F1F5 { background-position: -2680px 0px; }
.emoji-1F1F0-1F1F7 { background-position: -2700px 0px; }
.emoji-1F1F0-1F1FC { background-position: -2720px 0px; }
.emoji-1F1F0-1F1FE { background-position: -2740px 0px; }
.emoji-1F1F0-1F1FF { background-position: -2760px 0px; }
.emoji-1F1F1-1F1E6 { background-position: -2780px 0px; }
.emoji-1F1F1-1F1E7 { background-position: -2800px 0px; }
.emoji-1F1F1-1F1E8 { background-position: -2820px 0px; }
.emoji-1F1F1-1F1EE { background-position: -2840px 0px; }
.emoji-1F1F1-1F1F0 { background-position: -2860px 0px; }
.emoji-1F1F1-1F1F7 { background-position: -2880px 0px; }
.emoji-1F1F1-1F1F8 { background-position: -2900px 0px; }
.emoji-1F1F1-1F1F9 { background-position: -2920px 0px; }
.emoji-1F1F1-1F1FA { background-position: -2940px 0px; }
.emoji-1F1F1-1F1FB { background-position: -2960px 0px; }
.emoji-1F1F1-1F1FE { background-position: -2980px 0px; }
.emoji-1F1F2-1F1E6 { background-position: -3000px 0px; }
.emoji-1F1F2-1F1E8 { background-position: -3020px 0px; }
.emoji-1F1F2-1F1E9 { background-position: -3040px 0px; }
.emoji-1F1F2-1F1EA { background-position: -3060px 0px; }
.emoji-1F1F2-1F1EC { background-position: -3080px 0px; }
.emoji-1F1F2-1F1ED { background-position: -3100px 0px; }
.emoji-1F1F2-1F1F0 { background-position: -3120px 0px; }
.emoji-1F1F2-1F1F1 { background-position: -3140px 0px; }
.emoji-1F1F2-1F1F2 { background-position: -3160px 0px; }
.emoji-1F1F2-1F1F3 { background-position: -3180px 0px; }
.emoji-1F1F2-1F1F4 { background-position: -3200px 0px; }
.emoji-1F1F2-1F1F7 { background-position: -3220px 0px; }
.emoji-1F1F2-1F1F8 { background-position: -3240px 0px; }
.emoji-1F1F2-1F1F9 { background-position: -3260px 0px; }
.emoji-1F1F2-1F1FA { background-position: -3280px 0px; }
.emoji-1F1F2-1F1FB { background-position: -3300px 0px; }
.emoji-1F1F2-1F1FC { background-position: -3320px 0px; }
.emoji-1F1F2-1F1FD { background-position: -3340px 0px; }
.emoji-1F1F2-1F1FE { background-position: -3360px 0px; }
.emoji-1F1F2-1F1FF { background-position: -3380px 0px; }
.emoji-1F1F3-1F1E6 { background-position: -3400px 0px; }
.emoji-1F1F3-1F1E8 { background-position: -3420px 0px; }
.emoji-1F1F3-1F1EA { background-position: -3440px 0px; }
.emoji-1F1F3-1F1EC { background-position: -3460px 0px; }
.emoji-1F1F3-1F1EE { background-position: -3480px 0px; }
.emoji-1F1F3-1F1F1 { background-position: -3500px 0px; }
.emoji-1F1F3-1F1F4 { background-position: -3520px 0px; }
.emoji-1F1F3-1F1F5 { background-position: -3540px 0px; }
.emoji-1F1F3-1F1F7 { background-position: -3560px 0px; }
.emoji-1F1F3-1F1FA { background-position: -3580px 0px; }
.emoji-1F1F3-1F1FF { background-position: -3600px 0px; }
.emoji-1F1F4-1F1F2 { background-position: -3620px 0px; }
.emoji-1F1F5-1F1E6 { background-position: -3640px 0px; }
.emoji-1F1F5-1F1EA { background-position: -3660px 0px; }
.emoji-1F1F5-1F1EB { background-position: -3680px 0px; }
.emoji-1F1F5-1F1EC { background-position: -3700px 0px; }
.emoji-1F1F5-1F1ED { background-position: -3720px 0px; }
.emoji-1F1F5-1F1F0 { background-position: -3740px 0px; }
.emoji-1F1F5-1F1F1 { background-position: -3760px 0px; }
.emoji-1F1F5-1F1F7 { background-position: -3780px 0px; }
.emoji-1F1F5-1F1F8 { background-position: -3800px 0px; }
.emoji-1F1F5-1F1F9 { background-position: -3820px 0px; }
.emoji-1F1F5-1F1FC { background-position: -3840px 0px; }
.emoji-1F1F5-1F1FE { background-position: -3860px 0px; }
.emoji-1F1F6-1F1E6 { background-position: -3880px 0px; }
.emoji-1F1F7-1F1F4 { background-position: -3900px 0px; }
.emoji-1F1F7-1F1F8 { background-position: -3920px 0px; }
.emoji-1F1F7-1F1FA { background-position: -3940px 0px; }
.emoji-1F1F7-1F1FC { background-position: -3960px 0px; }
.emoji-1F1F8-1F1E6 { background-position: -3980px 0px; }
.emoji-1F1F8-1F1E7 { background-position: -4000px 0px; }
.emoji-1F1F8-1F1E8 { background-position: -4020px 0px; }
.emoji-1F1F8-1F1E9 { background-position: -4040px 0px; }
.emoji-1F1F8-1F1EA { background-position: -4060px 0px; }
.emoji-1F1F8-1F1EC { background-position: -4080px 0px; }
.emoji-1F1F8-1F1ED { background-position: -4100px 0px; }
.emoji-1F1F8-1F1EE { background-position: -4120px 0px; }
.emoji-1F1F8-1F1F0 { background-position: -4140px 0px; }
.emoji-1F1F8-1F1F1 { background-position: -4160px 0px; }
.emoji-1F1F8-1F1F2 { background-position: -4180px 0px; }
.emoji-1F1F8-1F1F3 { background-position: -4200px 0px; }
.emoji-1F1F8-1F1F4 { background-position: -4220px 0px; }
.emoji-1F1F8-1F1F7 { background-position: -4240px 0px; }
.emoji-1F1F8-1F1F9 { background-position: -4260px 0px; }
.emoji-1F1F8-1F1FB { background-position: -4280px 0px; }
.emoji-1F1F8-1F1FE { background-position: -4300px 0px; }
.emoji-1F1F8-1F1FF { background-position: -4320px 0px; }
.emoji-1F1F9-1F1E9 { background-position: -4340px 0px; }
.emoji-1F1F9-1F1EC { background-position: -4360px 0px; }
.emoji-1F1F9-1F1ED { background-position: -4380px 0px; }
.emoji-1F1F9-1F1EF { background-position: -4400px 0px; }
.emoji-1F1F9-1F1F1 { background-position: -4420px 0px; }
.emoji-1F1F9-1F1F2 { background-position: -4440px 0px; }
.emoji-1F1F9-1F1F3 { background-position: -4460px 0px; }
.emoji-1F1F9-1F1F4 { background-position: -4480px 0px; }
.emoji-1F1F9-1F1F7 { background-position: -4500px 0px; }
.emoji-1F1F9-1F1F9 { background-position: -4520px 0px; }
.emoji-1F1F9-1F1FB { background-position: -4540px 0px; }
.emoji-1F1F9-1F1FC { background-position: -4560px 0px; }
.emoji-1F1F9-1F1FF { background-position: -4580px 0px; }
.emoji-1F1FA-1F1E6 { background-position: -4600px 0px; }
.emoji-1F1FA-1F1EC { background-position: -4620px 0px; }
.emoji-1F1FA-1F1F8 { background-position: -4640px 0px; }
.emoji-1F1FA-1F1FE { background-position: -4660px 0px; }
.emoji-1F1FA-1F1FF { background-position: -4680px 0px; }
.emoji-1F1FB-1F1E6 { background-position: -4700px 0px; }
.emoji-1F1FB-1F1E8 { background-position: -4720px 0px; }
.emoji-1F1FB-1F1EA { background-position: -4740px 0px; }
.emoji-1F1FB-1F1EE { background-position: -4760px 0px; }
.emoji-1F1FB-1F1F3 { background-position: -4780px 0px; }
.emoji-1F1FB-1F1FA { background-position: -4800px 0px; }
.emoji-1F1FC-1F1EB { background-position: -4820px 0px; }
.emoji-1F1FC-1F1F8 { background-position: -4840px 0px; }
.emoji-1F1FD-1F1F0 { background-position: -4860px 0px; }
.emoji-1F1FE-1F1EA { background-position: -4880px 0px; }
.emoji-1F1FF-1F1E6 { background-position: -4900px 0px; }
.emoji-1F1FF-1F1F2 { background-position: -4920px 0px; }
.emoji-1F1FF-1F1FC { background-position: -4940px 0px; }
.emoji-1F201 { background-position: -4960px 0px; }
.emoji-1F202 { background-position: -4980px 0px; }
.emoji-1F21A { background-position: -5000px 0px; }
.emoji-1F22F { background-position: -5020px 0px; }
.emoji-1F232 { background-position: -5040px 0px; }
.emoji-1F233 { background-position: -5060px 0px; }
.emoji-1F234 { background-position: -5080px 0px; }
.emoji-1F235 { background-position: -5100px 0px; }
.emoji-1F236 { background-position: -5120px 0px; }
.emoji-1F237 { background-position: -5140px 0px; }
.emoji-1F238 { background-position: -5160px 0px; }
.emoji-1F239 { background-position: -5180px 0px; }
.emoji-1F23A { background-position: -5200px 0px; }
.emoji-1F250 { background-position: -5220px 0px; }
.emoji-1F251 { background-position: -5240px 0px; }
.emoji-1F300 { background-position: -5260px 0px; }
.emoji-1F301 { background-position: -5280px 0px; }
.emoji-1F302 { background-position: -5300px 0px; }
.emoji-1F303 { background-position: -5320px 0px; }
.emoji-1F304 { background-position: -5340px 0px; }
.emoji-1F305 { background-position: -5360px 0px; }
.emoji-1F306 { background-position: -5380px 0px; }
.emoji-1F307 { background-position: -5400px 0px; }
.emoji-1F308 { background-position: -5420px 0px; }
.emoji-1F309 { background-position: -5440px 0px; }
.emoji-1F30A { background-position: -5460px 0px; }
.emoji-1F30B { background-position: -5480px 0px; }
.emoji-1F30C { background-position: -5500px 0px; }
.emoji-1F30D { background-position: -5520px 0px; }
.emoji-1F30E { background-position: -5540px 0px; }
.emoji-1F30F { background-position: -5560px 0px; }
.emoji-1F310 { background-position: -5580px 0px; }
.emoji-1F311 { background-position: -5600px 0px; }
.emoji-1F312 { background-position: -5620px 0px; }
.emoji-1F313 { background-position: -5640px 0px; }
.emoji-1F314 { background-position: -5660px 0px; }
.emoji-1F315 { background-position: -5680px 0px; }
.emoji-1F316 { background-position: -5700px 0px; }
.emoji-1F317 { background-position: -5720px 0px; }
.emoji-1F318 { background-position: -5740px 0px; }
.emoji-1F319 { background-position: -5760px 0px; }
.emoji-1F31A { background-position: -5780px 0px; }
.emoji-1F31B { background-position: -5800px 0px; }
.emoji-1F31C { background-position: -5820px 0px; }
.emoji-1F31D { background-position: -5840px 0px; }
.emoji-1F31E { background-position: -5860px 0px; }
.emoji-1F31F { background-position: -5880px 0px; }
.emoji-1F320 { background-position: -5900px 0px; }
.emoji-1F321 { background-position: -5920px 0px; }
.emoji-1F327 { background-position: -5940px 0px; }
.emoji-1F328 { background-position: -5960px 0px; }
.emoji-1F329 { background-position: -5980px 0px; }
.emoji-1F32A { background-position: -6000px 0px; }
.emoji-1F32B { background-position: -6020px 0px; }
.emoji-1F32C { background-position: -6040px 0px; }
.emoji-1F330 { background-position: -6060px 0px; }
.emoji-1F331 { background-position: -6080px 0px; }
.emoji-1F332 { background-position: -6100px 0px; }
.emoji-1F333 { background-position: -6120px 0px; }
.emoji-1F334 { background-position: -6140px 0px; }
.emoji-1F335 { background-position: -6160px 0px; }
.emoji-1F336 { background-position: -6180px 0px; }
.emoji-1F337 { background-position: -6200px 0px; }
.emoji-1F338 { background-position: -6220px 0px; }
.emoji-1F339 { background-position: -6240px 0px; }
.emoji-1F33A { background-position: -6260px 0px; }
.emoji-1F33B { background-position: -6280px 0px; }
.emoji-1F33C { background-position: -6300px 0px; }
.emoji-1F33D { background-position: -6320px 0px; }
.emoji-1F33E { background-position: -6340px 0px; }
.emoji-1F33F { background-position: -6360px 0px; }
.emoji-1F340 { background-position: -6380px 0px; }
.emoji-1F341 { background-position: -6400px 0px; }
.emoji-1F342 { background-position: -6420px 0px; }
.emoji-1F343 { background-position: -6440px 0px; }
.emoji-1F344 { background-position: -6460px 0px; }
.emoji-1F345 { background-position: -6480px 0px; }
.emoji-1F346 { background-position: -6500px 0px; }
.emoji-1F347 { background-position: -6520px 0px; }
.emoji-1F348 { background-position: -6540px 0px; }
.emoji-1F349 { background-position: -6560px 0px; }
.emoji-1F34A { background-position: -6580px 0px; }
.emoji-1F34B { background-position: -6600px 0px; }
.emoji-1F34C { background-position: -6620px 0px; }
.emoji-1F34D { background-position: -6640px 0px; }
.emoji-1F34E { background-position: -6660px 0px; }
.emoji-1F34F { background-position: -6680px 0px; }
.emoji-1F350 { background-position: -6700px 0px; }
.emoji-1F351 { background-position: -6720px 0px; }
.emoji-1F352 { background-position: -6740px 0px; }
.emoji-1F353 { background-position: -6760px 0px; }
.emoji-1F354 { background-position: -6780px 0px; }
.emoji-1F355 { background-position: -6800px 0px; }
.emoji-1F356 { background-position: -6820px 0px; }
.emoji-1F357 { background-position: -6840px 0px; }
.emoji-1F358 { background-position: -6860px 0px; }
.emoji-1F359 { background-position: -6880px 0px; }
.emoji-1F35A { background-position: -6900px 0px; }
.emoji-1F35B { background-position: -6920px 0px; }
.emoji-1F35C { background-position: -6940px 0px; }
.emoji-1F35D { background-position: -6960px 0px; }
.emoji-1F35E { background-position: -6980px 0px; }
.emoji-1F35F { background-position: -7000px 0px; }
.emoji-1F360 { background-position: -7020px 0px; }
.emoji-1F361 { background-position: -7040px 0px; }
.emoji-1F362 { background-position: -7060px 0px; }
.emoji-1F363 { background-position: -7080px 0px; }
.emoji-1F364 { background-position: -7100px 0px; }
.emoji-1F365 { background-position: -7120px 0px; }
.emoji-1F366 { background-position: -7140px 0px; }
.emoji-1F367 { background-position: -7160px 0px; }
.emoji-1F368 { background-position: -7180px 0px; }
.emoji-1F369 { background-position: -7200px 0px; }
.emoji-1F36A { background-position: -7220px 0px; }
.emoji-1F36B { background-position: -7240px 0px; }
.emoji-1F36C { background-position: -7260px 0px; }
.emoji-1F36D { background-position: -7280px 0px; }
.emoji-1F36E { background-position: -7300px 0px; }
.emoji-1F36F { background-position: -7320px 0px; }
.emoji-1F370 { background-position: -7340px 0px; }
.emoji-1F371 { background-position: -7360px 0px; }
.emoji-1F372 { background-position: -7380px 0px; }
.emoji-1F373 { background-position: -7400px 0px; }
.emoji-1F374 { background-position: -7420px 0px; }
.emoji-1F375 { background-position: -7440px 0px; }
.emoji-1F376 { background-position: -7460px 0px; }
.emoji-1F377 { background-position: -7480px 0px; }
.emoji-1F378 { background-position: -7500px 0px; }
.emoji-1F379 { background-position: -7520px 0px; }
.emoji-1F37A { background-position: -7540px 0px; }
.emoji-1F37B { background-position: -7560px 0px; }
.emoji-1F37C { background-position: -7580px 0px; }
.emoji-1F37D { background-position: -7600px 0px; }
.emoji-1F380 { background-position: -7620px 0px; }
.emoji-1F381 { background-position: -7640px 0px; }
.emoji-1F382 { background-position: -7660px 0px; }
.emoji-1F383 { background-position: -7680px 0px; }
.emoji-1F384 { background-position: -7700px 0px; }
.emoji-1F385 { background-position: -7720px 0px; }
.emoji-1F386 { background-position: -7740px 0px; }
.emoji-1F387 { background-position: -7760px 0px; }
.emoji-1F388 { background-position: -7780px 0px; }
.emoji-1F389 { background-position: -7800px 0px; }
.emoji-1F38A { background-position: -7820px 0px; }
.emoji-1F38B { background-position: -7840px 0px; }
.emoji-1F38C { background-position: -7860px 0px; }
.emoji-1F38D { background-position: -7880px 0px; }
.emoji-1F38E { background-position: -7900px 0px; }
.emoji-1F38F { background-position: -7920px 0px; }
.emoji-1F390 { background-position: -7940px 0px; }
.emoji-1F391 { background-position: -7960px 0px; }
.emoji-1F392 { background-position: -7980px 0px; }
.emoji-1F393 { background-position: -8000px 0px; }
.emoji-1F394 { background-position: -8020px 0px; }
.emoji-1F395 { background-position: -8040px 0px; }
.emoji-1F396 { background-position: -8060px 0px; }
.emoji-1F397 { background-position: -8080px 0px; }
.emoji-1F398 { background-position: -8100px 0px; }
.emoji-1F399 { background-position: -8120px 0px; }
.emoji-1F39A { background-position: -8140px 0px; }
.emoji-1F39B { background-position: -8160px 0px; }
.emoji-1F39C { background-position: -8180px 0px; }
.emoji-1F39D { background-position: -8200px 0px; }
.emoji-1F39E { background-position: -8220px 0px; }
.emoji-1F39F { background-position: -8240px 0px; }
.emoji-1F3A0 { background-position: -8260px 0px; }
.emoji-1F3A1 { background-position: -8280px 0px; }
.emoji-1F3A2 { background-position: -8300px 0px; }
.emoji-1F3A3 { background-position: -8320px 0px; }
.emoji-1F3A4 { background-position: -8340px 0px; }
.emoji-1F3A5 { background-position: -8360px 0px; }
.emoji-1F3A6 { background-position: -8380px 0px; }
.emoji-1F3A7 { background-position: -8400px 0px; }
.emoji-1F3A8 { background-position: -8420px 0px; }
.emoji-1F3A9 { background-position: -8440px 0px; }
.emoji-1F3AA { background-position: -8460px 0px; }
.emoji-1F3AB { background-position: -8480px 0px; }
.emoji-1F3AC { background-position: -8500px 0px; }
.emoji-1F3AD { background-position: -8520px 0px; }
.emoji-1F3AE { background-position: -8540px 0px; }
.emoji-1F3AF { background-position: -8560px 0px; }
.emoji-1F3B0 { background-position: -8580px 0px; }
.emoji-1F3B1 { background-position: -8600px 0px; }
.emoji-1F3B2 { background-position: -8620px 0px; }
.emoji-1F3B3 { background-position: -8640px 0px; }
.emoji-1F3B4 { background-position: -8660px 0px; }
.emoji-1F3B5 { background-position: -8680px 0px; }
.emoji-1F3B6 { background-position: -8700px 0px; }
.emoji-1F3B7 { background-position: -8720px 0px; }
.emoji-1F3B8 { background-position: -8740px 0px; }
.emoji-1F3B9 { background-position: -8760px 0px; }
.emoji-1F3BA { background-position: -8780px 0px; }
.emoji-1F3BB { background-position: -8800px 0px; }
.emoji-1F3BC { background-position: -8820px 0px; }
.emoji-1F3BD { background-position: -8840px 0px; }
.emoji-1F3BE { background-position: -8860px 0px; }
.emoji-1F3BF { background-position: -8880px 0px; }
.emoji-1F3C0 { background-position: -8900px 0px; }
.emoji-1F3C1 { background-position: -8920px 0px; }
.emoji-1F3C2 { background-position: -8940px 0px; }
.emoji-1F3C3 { background-position: -8960px 0px; }
.emoji-1F3C4 { background-position: -8980px 0px; }
.emoji-1F3C5 { background-position: -9000px 0px; }
.emoji-1F3C6 { background-position: -9020px 0px; }
.emoji-1F3C7 { background-position: -9040px 0px; }
.emoji-1F3C8 { background-position: -9060px 0px; }
.emoji-1F3C9 { background-position: -9080px 0px; }
.emoji-1F3CA { background-position: -9100px 0px; }
.emoji-1F3CB { background-position: -9120px 0px; }
.emoji-1F3CC { background-position: -9140px 0px; }
.emoji-1F3CD { background-position: -9160px 0px; }
.emoji-1F3CE { background-position: -9180px 0px; }
.emoji-1F3D4 { background-position: -9200px 0px; }
.emoji-1F3D5 { background-position: -9220px 0px; }
.emoji-1F3D6 { background-position: -9240px 0px; }
.emoji-1F3D7 { background-position: -9260px 0px; }
.emoji-1F3D8 { background-position: -9280px 0px; }
.emoji-1F3D9 { background-position: -9300px 0px; }
.emoji-1F3DA { background-position: -9320px 0px; }
.emoji-1F3DB { background-position: -9340px 0px; }
.emoji-1F3DC { background-position: -9360px 0px; }
.emoji-1F3DD { background-position: -9380px 0px; }
.emoji-1F3DE { background-position: -9400px 0px; }
.emoji-1F3DF { background-position: -9420px 0px; }
.emoji-1F3E0 { background-position: -9440px 0px; }
.emoji-1F3E1 { background-position: -9460px 0px; }
.emoji-1F3E2 { background-position: -9480px 0px; }
.emoji-1F3E3 { background-position: -9500px 0px; }
.emoji-1F3E4 { background-position: -9520px 0px; }
.emoji-1F3E5 { background-position: -9540px 0px; }
.emoji-1F3E6 { background-position: -9560px 0px; }
.emoji-1F3E7 { background-position: -9580px 0px; }
.emoji-1F3E8 { background-position: -9600px 0px; }
.emoji-1F3E9 { background-position: -9620px 0px; }
.emoji-1F3EA { background-position: -9640px 0px; }
.emoji-1F3EB { background-position: -9660px 0px; }
.emoji-1F3EC { background-position: -9680px 0px; }
.emoji-1F3ED { background-position: -9700px 0px; }
.emoji-1F3EE { background-position: -9720px 0px; }
.emoji-1F3EF { background-position: -9740px 0px; }
.emoji-1F3F0 { background-position: -9760px 0px; }
.emoji-1F3F1 { background-position: -9780px 0px; }
.emoji-1F3F2 { background-position: -9800px 0px; }
.emoji-1F3F3 { background-position: -9820px 0px; }
.emoji-1F3F4 { background-position: -9840px 0px; }
.emoji-1F3F5 { background-position: -9860px 0px; }
.emoji-1F3F6 { background-position: -9880px 0px; }
.emoji-1F3F7 { background-position: -9900px 0px; }
.emoji-1F400 { background-position: -9920px 0px; }
.emoji-1F401 { background-position: -9940px 0px; }
.emoji-1F402 { background-position: -9960px 0px; }
.emoji-1F403 { background-position: -9980px 0px; }
.emoji-1F404 { background-position: -10000px 0px; }
.emoji-1F405 { background-position: -10020px 0px; }
.emoji-1F406 { background-position: -10040px 0px; }
.emoji-1F407 { background-position: -10060px 0px; }
.emoji-1F408 { background-position: -10080px 0px; }
.emoji-1F409 { background-position: -10100px 0px; }
.emoji-1F40A { background-position: -10120px 0px; }
.emoji-1F40B { background-position: -10140px 0px; }
.emoji-1F40C { background-position: -10160px 0px; }
.emoji-1F40D { background-position: -10180px 0px; }
.emoji-1F40E { background-position: -10200px 0px; }
.emoji-1F40F { background-position: -10220px 0px; }
.emoji-1F410 { background-position: -10240px 0px; }
.emoji-1F411 { background-position: -10260px 0px; }
.emoji-1F412 { background-position: -10280px 0px; }
.emoji-1F413 { background-position: -10300px 0px; }
.emoji-1F414 { background-position: -10320px 0px; }
.emoji-1F415 { background-position: -10340px 0px; }
.emoji-1F416 { background-position: -10360px 0px; }
.emoji-1F417 { background-position: -10380px 0px; }
.emoji-1F418 { background-position: -10400px 0px; }
.emoji-1F419 { background-position: -10420px 0px; }
.emoji-1F41A { background-position: -10440px 0px; }
.emoji-1F41B { background-position: -10460px 0px; }
.emoji-1F41C { background-position: -10480px 0px; }
.emoji-1F41D { background-position: -10500px 0px; }
.emoji-1F41E { background-position: -10520px 0px; }
.emoji-1F41F { background-position: -10540px 0px; }
.emoji-1F420 { background-position: -10560px 0px; }
.emoji-1F421 { background-position: -10580px 0px; }
.emoji-1F422 { background-position: -10600px 0px; }
.emoji-1F423 { background-position: -10620px 0px; }
.emoji-1F424 { background-position: -10640px 0px; }
.emoji-1F425 { background-position: -10660px 0px; }
.emoji-1F426 { background-position: -10680px 0px; }
.emoji-1F427 { background-position: -10700px 0px; }
.emoji-1F428 { background-position: -10720px 0px; }
.emoji-1F429 { background-position: -10740px 0px; }
.emoji-1F42A { background-position: -10760px 0px; }
.emoji-1F42B { background-position: -10780px 0px; }
.emoji-1F42C { background-position: -10800px 0px; }
.emoji-1F42D { background-position: -10820px 0px; }
.emoji-1F42E { background-position: -10840px 0px; }
.emoji-1F42F { background-position: -10860px 0px; }
.emoji-1F430 { background-position: -10880px 0px; }
.emoji-1F431 { background-position: -10900px 0px; }
.emoji-1F432 { background-position: -10920px 0px; }
.emoji-1F433 { background-position: -10940px 0px; }
.emoji-1F434 { background-position: -10960px 0px; }
.emoji-1F435 { background-position: -10980px 0px; }
.emoji-1F436 { background-position: -11000px 0px; }
.emoji-1F437 { background-position: -11020px 0px; }
.emoji-1F438 { background-position: -11040px 0px; }
.emoji-1F439 { background-position: -11060px 0px; }
.emoji-1F43A { background-position: -11080px 0px; }
.emoji-1F43B { background-position: -11100px 0px; }
.emoji-1F43C { background-position: -11120px 0px; }
.emoji-1F43D { background-position: -11140px 0px; }
.emoji-1F43E { background-position: -11160px 0px; }
.emoji-1F43F { background-position: -11180px 0px; }
.emoji-1F440 { background-position: -11200px 0px; }
.emoji-1F441 { background-position: -11220px 0px; }
.emoji-1F442 { background-position: -11240px 0px; }
.emoji-1F443 { background-position: -11260px 0px; }
.emoji-1F444 { background-position: -11280px 0px; }
.emoji-1F445 { background-position: -11300px 0px; }
.emoji-1F446 { background-position: -11320px 0px; }
.emoji-1F447 { background-position: -11340px 0px; }
.emoji-1F448 { background-position: -11360px 0px; }
.emoji-1F449 { background-position: -11380px 0px; }
.emoji-1F44A { background-position: -11400px 0px; }
.emoji-1F44B { background-position: -11420px 0px; }
.emoji-1F44C { background-position: -11440px 0px; }
.emoji-1F44D { background-position: -11460px 0px; }
.emoji-1F44E { background-position: -11480px 0px; }
.emoji-1F44F { background-position: -11500px 0px; }
.emoji-1F450 { background-position: -11520px 0px; }
.emoji-1F451 { background-position: -11540px 0px; }
.emoji-1F452 { background-position: -11560px 0px; }
.emoji-1F453 { background-position: -11580px 0px; }
.emoji-1F454 { background-position: -11600px 0px; }
.emoji-1F455 { background-position: -11620px 0px; }
.emoji-1F456 { background-position: -11640px 0px; }
.emoji-1F457 { background-position: -11660px 0px; }
.emoji-1F458 { background-position: -11680px 0px; }
.emoji-1F459 { background-position: -11700px 0px; }
.emoji-1F45A { background-position: -11720px 0px; }
.emoji-1F45B { background-position: -11740px 0px; }
.emoji-1F45C { background-position: -11760px 0px; }
.emoji-1F45D { background-position: -11780px 0px; }
.emoji-1F45E { background-position: -11800px 0px; }
.emoji-1F45F { background-position: -11820px 0px; }
.emoji-1F460 { background-position: -11840px 0px; }
.emoji-1F461 { background-position: -11860px 0px; }
.emoji-1F462 { background-position: -11880px 0px; }
.emoji-1F463 { background-position: -11900px 0px; }
.emoji-1F464 { background-position: -11920px 0px; }
.emoji-1F465 { background-position: -11940px 0px; }
.emoji-1F466 { background-position: -11960px 0px; }
.emoji-1F467 { background-position: -11980px 0px; }
.emoji-1F468 { background-position: -12000px 0px; }
.emoji-1F468-1F468-1F466 { background-position: -12020px 0px; }
.emoji-1F468-1F468-1F466-1F466 { background-position: -12040px 0px; }
.emoji-1F468-1F468-1F467 { background-position: -12060px 0px; }
.emoji-1F468-1F468-1F467-1F466 { background-position: -12080px 0px; }
.emoji-1F468-1F468-1F467-1F467 { background-position: -12100px 0px; }
.emoji-1F468-1F469-1F466-1F466 { background-position: -12120px 0px; }
.emoji-1F468-1F469-1F467 { background-position: -12140px 0px; }
.emoji-1F468-1F469-1F467-1F466 { background-position: -12160px 0px; }
.emoji-1F468-1F469-1F467-1F467 { background-position: -12180px 0px; }
.emoji-1F468-2764-1F468 { background-position: -12200px 0px; }
.emoji-1F468-2764-1F48B-1F468 { background-position: -12220px 0px; }
.emoji-1F469 { background-position: -12240px 0px; }
.emoji-1F469-1F469-1F466 { background-position: -12260px 0px; }
.emoji-1F469-1F469-1F466-1F466 { background-position: -12280px 0px; }
.emoji-1F469-1F469-1F467 { background-position: -12300px 0px; }
.emoji-1F469-1F469-1F467-1F466 { background-position: -12320px 0px; }
.emoji-1F469-1F469-1F467-1F467 { background-position: -12340px 0px; }
.emoji-1F469-2764-1F469 { background-position: -12360px 0px; }
.emoji-1F469-2764-1F48B-1F469 { background-position: -12380px 0px; }
.emoji-1F46A { background-position: -12400px 0px; }
.emoji-1F46B { background-position: -12420px 0px; }
.emoji-1F46C { background-position: -12440px 0px; }
.emoji-1F46D { background-position: -12460px 0px; }
.emoji-1F46E { background-position: -12480px 0px; }
.emoji-1F46F { background-position: -12500px 0px; }
.emoji-1F470 { background-position: -12520px 0px; }
.emoji-1F471 { background-position: -12540px 0px; }
.emoji-1F472 { background-position: -12560px 0px; }
.emoji-1F473 { background-position: -12580px 0px; }
.emoji-1F474 { background-position: -12600px 0px; }
.emoji-1F475 { background-position: -12620px 0px; }
.emoji-1F476 { background-position: -12640px 0px; }
.emoji-1F477 { background-position: -12660px 0px; }
.emoji-1F478 { background-position: -12680px 0px; }
.emoji-1F479 { background-position: -12700px 0px; }
.emoji-1F47A { background-position: -12720px 0px; }
.emoji-1F47B { background-position: -12740px 0px; }
.emoji-1F47C { background-position: -12760px 0px; }
.emoji-1F47D { background-position: -12780px 0px; }
.emoji-1F47E { background-position: -12800px 0px; }
.emoji-1F47F { background-position: -12820px 0px; }
.emoji-1F480 { background-position: -12840px 0px; }
.emoji-1F481 { background-position: -12860px 0px; }
.emoji-1F482 { background-position: -12880px 0px; }
.emoji-1F483 { background-position: -12900px 0px; }
.emoji-1F484 { background-position: -12920px 0px; }
.emoji-1F485 { background-position: -12940px 0px; }
.emoji-1F486 { background-position: -12960px 0px; }
.emoji-1F487 { background-position: -12980px 0px; }
.emoji-1F488 { background-position: -13000px 0px; }
.emoji-1F489 { background-position: -13020px 0px; }
.emoji-1F48A { background-position: -13040px 0px; }
.emoji-1F48B { background-position: -13060px 0px; }
.emoji-1F48C { background-position: -13080px 0px; }
.emoji-1F48D { background-position: -13100px 0px; }
.emoji-1F48E { background-position: -13120px 0px; }
.emoji-1F48F { background-position: -13140px 0px; }
.emoji-1F490 { background-position: -13160px 0px; }
.emoji-1F491 { background-position: -13180px 0px; }
.emoji-1F492 { background-position: -13200px 0px; }
.emoji-1F493 { background-position: -13220px 0px; }
.emoji-1F494 { background-position: -13240px 0px; }
.emoji-1F495 { background-position: -13260px 0px; }
.emoji-1F496 { background-position: -13280px 0px; }
.emoji-1F497 { background-position: -13300px 0px; }
.emoji-1F498 { background-position: -13320px 0px; }
.emoji-1F499 { background-position: -13340px 0px; }
.emoji-1F49A { background-position: -13360px 0px; }
.emoji-1F49B { background-position: -13380px 0px; }
.emoji-1F49C { background-position: -13400px 0px; }
.emoji-1F49D { background-position: -13420px 0px; }
.emoji-1F49E { background-position: -13440px 0px; }
.emoji-1F49F { background-position: -13460px 0px; }
.emoji-1F4A0 { background-position: -13480px 0px; }
.emoji-1F4A1 { background-position: -13500px 0px; }
.emoji-1F4A2 { background-position: -13520px 0px; }
.emoji-1F4A3 { background-position: -13540px 0px; }
.emoji-1F4A4 { background-position: -13560px 0px; }
.emoji-1F4A5 { background-position: -13580px 0px; }
.emoji-1F4A6 { background-position: -13600px 0px; }
.emoji-1F4A7 { background-position: -13620px 0px; }
.emoji-1F4A8 { background-position: -13640px 0px; }
.emoji-1F4A9 { background-position: -13660px 0px; }
.emoji-1F4AA { background-position: -13680px 0px; }
.emoji-1F4AB { background-position: -13700px 0px; }
.emoji-1F4AC { background-position: -13720px 0px; }
.emoji-1F4AD { background-position: -13740px 0px; }
.emoji-1F4AE { background-position: -13760px 0px; }
.emoji-1F4AF { background-position: -13780px 0px; }
.emoji-1F4B0 { background-position: -13800px 0px; }
.emoji-1F4B1 { background-position: -13820px 0px; }
.emoji-1F4B2 { background-position: -13840px 0px; }
.emoji-1F4B3 { background-position: -13860px 0px; }
.emoji-1F4B4 { background-position: -13880px 0px; }
.emoji-1F4B5 { background-position: -13900px 0px; }
.emoji-1F4B6 { background-position: -13920px 0px; }
.emoji-1F4B7 { background-position: -13940px 0px; }
.emoji-1F4B8 { background-position: -13960px 0px; }
.emoji-1F4B9 { background-position: -13980px 0px; }
.emoji-1F4BA { background-position: -14000px 0px; }
.emoji-1F4BB { background-position: -14020px 0px; }
.emoji-1F4BC { background-position: -14040px 0px; }
.emoji-1F4BD { background-position: -14060px 0px; }
.emoji-1F4BE { background-position: -14080px 0px; }
.emoji-1F4BF { background-position: -14100px 0px; }
.emoji-1F4C0 { background-position: -14120px 0px; }
.emoji-1F4C1 { background-position: -14140px 0px; }
.emoji-1F4C2 { background-position: -14160px 0px; }
.emoji-1F4C3 { background-position: -14180px 0px; }
.emoji-1F4C4 { background-position: -14200px 0px; }
.emoji-1F4C5 { background-position: -14220px 0px; }
.emoji-1F4C6 { background-position: -14240px 0px; }
.emoji-1F4C7 { background-position: -14260px 0px; }
.emoji-1F4C8 { background-position: -14280px 0px; }
.emoji-1F4C9 { background-position: -14300px 0px; }
.emoji-1F4CA { background-position: -14320px 0px; }
.emoji-1F4CB { background-position: -14340px 0px; }
.emoji-1F4CC { background-position: -14360px 0px; }
.emoji-1F4CD { background-position: -14380px 0px; }
.emoji-1F4CE { background-position: -14400px 0px; }
.emoji-1F4CF { background-position: -14420px 0px; }
.emoji-1F4D0 { background-position: -14440px 0px; }
.emoji-1F4D1 { background-position: -14460px 0px; }
.emoji-1F4D2 { background-position: -14480px 0px; }
.emoji-1F4D3 { background-position: -14500px 0px; }
.emoji-1F4D4 { background-position: -14520px 0px; }
.emoji-1F4D5 { background-position: -14540px 0px; }
.emoji-1F4D6 { background-position: -14560px 0px; }
.emoji-1F4D7 { background-position: -14580px 0px; }
.emoji-1F4D8 { background-position: -14600px 0px; }
.emoji-1F4D9 { background-position: -14620px 0px; }
.emoji-1F4DA { background-position: -14640px 0px; }
.emoji-1F4DB { background-position: -14660px 0px; }
.emoji-1F4DC { background-position: -14680px 0px; }
.emoji-1F4DD { background-position: -14700px 0px; }
.emoji-1F4DE { background-position: -14720px 0px; }
.emoji-1F4DF { background-position: -14740px 0px; }
.emoji-1F4E0 { background-position: -14760px 0px; }
.emoji-1F4E1 { background-position: -14780px 0px; }
.emoji-1F4E2 { background-position: -14800px 0px; }
.emoji-1F4E3 { background-position: -14820px 0px; }
.emoji-1F4E4 { background-position: -14840px 0px; }
.emoji-1F4E5 { background-position: -14860px 0px; }
.emoji-1F4E6 { background-position: -14880px 0px; }
.emoji-1F4E7 { background-position: -14900px 0px; }
.emoji-1F4E8 { background-position: -14920px 0px; }
.emoji-1F4E9 { background-position: -14940px 0px; }
.emoji-1F4EA { background-position: -14960px 0px; }
.emoji-1F4EB { background-position: -14980px 0px; }
.emoji-1F4EC { background-position: -15000px 0px; }
.emoji-1F4ED { background-position: -15020px 0px; }
.emoji-1F4EE { background-position: -15040px 0px; }
.emoji-1F4EF { background-position: -15060px 0px; }
.emoji-1F4F0 { background-position: -15080px 0px; }
.emoji-1F4F1 { background-position: -15100px 0px; }
.emoji-1F4F2 { background-position: -15120px 0px; }
.emoji-1F4F3 { background-position: -15140px 0px; }
.emoji-1F4F4 { background-position: -15160px 0px; }
.emoji-1F4F5 { background-position: -15180px 0px; }
.emoji-1F4F6 { background-position: -15200px 0px; }
.emoji-1F4F7 { background-position: -15220px 0px; }
.emoji-1F4F8 { background-position: -15240px 0px; }
.emoji-1F4F9 { background-position: -15260px 0px; }
.emoji-1F4FA { background-position: -15280px 0px; }
.emoji-1F4FB { background-position: -15300px 0px; }
.emoji-1F4FC { background-position: -15320px 0px; }
.emoji-1F4FD { background-position: -15340px 0px; }
.emoji-1F4FE { background-position: -15360px 0px; }
.emoji-1F500 { background-position: -15380px 0px; }
.emoji-1F501 { background-position: -15400px 0px; }
.emoji-1F502 { background-position: -15420px 0px; }
.emoji-1F503 { background-position: -15440px 0px; }
.emoji-1F504 { background-position: -15460px 0px; }
.emoji-1F505 { background-position: -15480px 0px; }
.emoji-1F506 { background-position: -15500px 0px; }
.emoji-1F507 { background-position: -15520px 0px; }
.emoji-1F508 { background-position: -15540px 0px; }
.emoji-1F509 { background-position: -15560px 0px; }
.emoji-1F50A { background-position: -15580px 0px; }
.emoji-1F50B { background-position: -15600px 0px; }
.emoji-1F50C { background-position: -15620px 0px; }
.emoji-1F50D { background-position: -15640px 0px; }
.emoji-1F50E { background-position: -15660px 0px; }
.emoji-1F50F { background-position: -15680px 0px; }
.emoji-1F510 { background-position: -15700px 0px; }
.emoji-1F511 { background-position: -15720px 0px; }
.emoji-1F512 { background-position: -15740px 0px; }
.emoji-1F513 { background-position: -15760px 0px; }
.emoji-1F514 { background-position: -15780px 0px; }
.emoji-1F515 { background-position: -15800px 0px; }
.emoji-1F516 { background-position: -15820px 0px; }
.emoji-1F517 { background-position: -15840px 0px; }
.emoji-1F518 { background-position: -15860px 0px; }
.emoji-1F519 { background-position: -15880px 0px; }
.emoji-1F51A { background-position: -15900px 0px; }
.emoji-1F51B { background-position: -15920px 0px; }
.emoji-1F51C { background-position: -15940px 0px; }
.emoji-1F51D { background-position: -15960px 0px; }
.emoji-1F51E { background-position: -15980px 0px; }
.emoji-1F51F { background-position: -16000px 0px; }
.emoji-1F520 { background-position: -16020px 0px; }
.emoji-1F521 { background-position: -16040px 0px; }
.emoji-1F522 { background-position: -16060px 0px; }
.emoji-1F523 { background-position: -16080px 0px; }
.emoji-1F524 { background-position: -16100px 0px; }
.emoji-1F525 { background-position: -16120px 0px; }
.emoji-1F526 { background-position: -16140px 0px; }
.emoji-1F527 { background-position: -16160px 0px; }
.emoji-1F528 { background-position: -16180px 0px; }
.emoji-1F529 { background-position: -16200px 0px; }
.emoji-1F52A { background-position: -16220px 0px; }
.emoji-1F52B { background-position: -16240px 0px; }
.emoji-1F52C { background-position: -16260px 0px; }
.emoji-1F52D { background-position: -16280px 0px; }
.emoji-1F52E { background-position: -16300px 0px; }
.emoji-1F52F { background-position: -16320px 0px; }
.emoji-1F530 { background-position: -16340px 0px; }
.emoji-1F531 { background-position: -16360px 0px; }
.emoji-1F532 { background-position: -16380px 0px; }
.emoji-1F533 { background-position: -16400px 0px; }
.emoji-1F534 { background-position: -16420px 0px; }
.emoji-1F535 { background-position: -16440px 0px; }
.emoji-1F536 { background-position: -16460px 0px; }
.emoji-1F537 { background-position: -16480px 0px; }
.emoji-1F538 { background-position: -16500px 0px; }
.emoji-1F539 { background-position: -16520px 0px; }
.emoji-1F53A { background-position: -16540px 0px; }
.emoji-1F53B { background-position: -16560px 0px; }
.emoji-1F53C { background-position: -16580px 0px; }
.emoji-1F53D { background-position: -16600px 0px; }
.emoji-1F546 { background-position: -16620px 0px; }
.emoji-1F547 { background-position: -16640px 0px; }
.emoji-1F548 { background-position: -16660px 0px; }
.emoji-1F549 { background-position: -16680px 0px; }
.emoji-1F54A { background-position: -16700px 0px; }
.emoji-1F550 { background-position: -16720px 0px; }
.emoji-1F551 { background-position: -16740px 0px; }
.emoji-1F552 { background-position: -16760px 0px; }
.emoji-1F553 { background-position: -16780px 0px; }
.emoji-1F554 { background-position: -16800px 0px; }
.emoji-1F555 { background-position: -16820px 0px; }
.emoji-1F556 { background-position: -16840px 0px; }
.emoji-1F557 { background-position: -16860px 0px; }
.emoji-1F558 { background-position: -16880px 0px; }
.emoji-1F559 { background-position: -16900px 0px; }
.emoji-1F55A { background-position: -16920px 0px; }
.emoji-1F55B { background-position: -16940px 0px; }
.emoji-1F55C { background-position: -16960px 0px; }
.emoji-1F55D { background-position: -16980px 0px; }
.emoji-1F55E { background-position: -17000px 0px; }
.emoji-1F55F { background-position: -17020px 0px; }
.emoji-1F560 { background-position: -17040px 0px; }
.emoji-1F561 { background-position: -17060px 0px; }
.emoji-1F562 { background-position: -17080px 0px; }
.emoji-1F563 { background-position: -17100px 0px; }
.emoji-1F564 { background-position: -17120px 0px; }
.emoji-1F565 { background-position: -17140px 0px; }
.emoji-1F566 { background-position: -17160px 0px; }
.emoji-1F567 { background-position: -17180px 0px; }
.emoji-1F568 { background-position: -17200px 0px; }
.emoji-1F569 { background-position: -17220px 0px; }
.emoji-1F56A { background-position: -17240px 0px; }
.emoji-1F56B { background-position: -17260px 0px; }
.emoji-1F56C { background-position: -17280px 0px; }
.emoji-1F56D { background-position: -17300px 0px; }
.emoji-1F56E { background-position: -17320px 0px; }
.emoji-1F56F { background-position: -17340px 0px; }
.emoji-1F570 { background-position: -17360px 0px; }
.emoji-1F571 { background-position: -17380px 0px; }
.emoji-1F572 { background-position: -17400px 0px; }
.emoji-1F573 { background-position: -17420px 0px; }
.emoji-1F574 { background-position: -17440px 0px; }
.emoji-1F575 { background-position: -17460px 0px; }
.emoji-1F576 { background-position: -17480px 0px; }
.emoji-1F577 { background-position: -17500px 0px; }
.emoji-1F578 { background-position: -17520px 0px; }
.emoji-1F579 { background-position: -17540px 0px; }
.emoji-1F57B { background-position: -17560px 0px; }
.emoji-1F57E { background-position: -17580px 0px; }
.emoji-1F57F { background-position: -17600px 0px; }
.emoji-1F581 { background-position: -17620px 0px; }
.emoji-1F582 { background-position: -17640px 0px; }
.emoji-1F583 { background-position: -17660px 0px; }
.emoji-1F585 { background-position: -17680px 0px; }
.emoji-1F586 { background-position: -17700px 0px; }
.emoji-1F587 { background-position: -17720px 0px; }
.emoji-1F588 { background-position: -17740px 0px; }
.emoji-1F589 { background-position: -17760px 0px; }
.emoji-1F58A { background-position: -17780px 0px; }
.emoji-1F58B { background-position: -17800px 0px; }
.emoji-1F58C { background-position: -17820px 0px; }
.emoji-1F58D { background-position: -17840px 0px; }
.emoji-1F58E { background-position: -17860px 0px; }
.emoji-1F58F { background-position: -17880px 0px; }
.emoji-1F590 { background-position: -17900px 0px; }
.emoji-1F591 { background-position: -17920px 0px; }
.emoji-1F592 { background-position: -17940px 0px; }
.emoji-1F593 { background-position: -17960px 0px; }
.emoji-1F594 { background-position: -17980px 0px; }
.emoji-1F595 { background-position: -18000px 0px; }
.emoji-1F596 { background-position: -18020px 0px; }
.emoji-1F597 { background-position: -18040px 0px; }
.emoji-1F598 { background-position: -18060px 0px; }
.emoji-1F599 { background-position: -18080px 0px; }
.emoji-1F59E { background-position: -18100px 0px; }
.emoji-1F59F { background-position: -18120px 0px; }
.emoji-1F5A5 { background-position: -18140px 0px; }
.emoji-1F5A6 { background-position: -18160px 0px; }
.emoji-1F5A7 { background-position: -18180px 0px; }
.emoji-1F5A8 { background-position: -18200px 0px; }
.emoji-1F5A9 { background-position: -18220px 0px; }
.emoji-1F5AA { background-position: -18240px 0px; }
.emoji-1F5AB { background-position: -18260px 0px; }
.emoji-1F5AD { background-position: -18280px 0px; }
.emoji-1F5AE { background-position: -18300px 0px; }
.emoji-1F5AF { background-position: -18320px 0px; }
.emoji-1F5B2 { background-position: -18340px 0px; }
.emoji-1F5B3 { background-position: -18360px 0px; }
.emoji-1F5B4 { background-position: -18380px 0px; }
.emoji-1F5B8 { background-position: -18400px 0px; }
.emoji-1F5B9 { background-position: -18420px 0px; }
.emoji-1F5BC { background-position: -18440px 0px; }
.emoji-1F5BD { background-position: -18460px 0px; }
.emoji-1F5BE { background-position: -18480px 0px; }
.emoji-1F5C0 { background-position: -18500px 0px; }
.emoji-1F5C1 { background-position: -18520px 0px; }
.emoji-1F5C2 { background-position: -18540px 0px; }
.emoji-1F5C3 { background-position: -18560px 0px; }
.emoji-1F5C4 { background-position: -18580px 0px; }
.emoji-1F5C6 { background-position: -18600px 0px; }
.emoji-1F5C7 { background-position: -18620px 0px; }
.emoji-1F5C9 { background-position: -18640px 0px; }
.emoji-1F5CA { background-position: -18660px 0px; }
.emoji-1F5CE { background-position: -18680px 0px; }
.emoji-1F5CF { background-position: -18700px 0px; }
.emoji-1F5D0 { background-position: -18720px 0px; }
.emoji-1F5D1 { background-position: -18740px 0px; }
.emoji-1F5D2 { background-position: -18760px 0px; }
.emoji-1F5D3 { background-position: -18780px 0px; }
.emoji-1F5D4 { background-position: -18800px 0px; }
.emoji-1F5D8 { background-position: -18820px 0px; }
.emoji-1F5D9 { background-position: -18840px 0px; }
.emoji-1F5DC { background-position: -18860px 0px; }
.emoji-1F5DD { background-position: -18880px 0px; }
.emoji-1F5DE { background-position: -18900px 0px; }
.emoji-1F5E0 { background-position: -18920px 0px; }
.emoji-1F5E1 { background-position: -18940px 0px; }
.emoji-1F5E2 { background-position: -18960px 0px; }
.emoji-1F5E3 { background-position: -18980px 0px; }
.emoji-1F5E8 { background-position: -19000px 0px; }
.emoji-1F5E9 { background-position: -19020px 0px; }
.emoji-1F5EA { background-position: -19040px 0px; }
.emoji-1F5EB { background-position: -19060px 0px; }
.emoji-1F5EC { background-position: -19080px 0px; }
.emoji-1F5ED { background-position: -19100px 0px; }
.emoji-1F5EE { background-position: -19120px 0px; }
.emoji-1F5EF { background-position: -19140px 0px; }
.emoji-1F5F0 { background-position: -19160px 0px; }
.emoji-1F5F1 { background-position: -19180px 0px; }
.emoji-1F5F2 { background-position: -19200px 0px; }
.emoji-1F5F3 { background-position: -19220px 0px; }
.emoji-1F5F4 { background-position: -19240px 0px; }
.emoji-1F5F5 { background-position: -19260px 0px; }
.emoji-1F5F8 { background-position: -19280px 0px; }
.emoji-1F5F9 { background-position: -19300px 0px; }
.emoji-1F5FA { background-position: -19320px 0px; }
.emoji-1F5FB { background-position: -19340px 0px; }
.emoji-1F5FC { background-position: -19360px 0px; }
.emoji-1F5FD { background-position: -19380px 0px; }
.emoji-1F5FE { background-position: -19400px 0px; }
.emoji-1F5FF { background-position: -19420px 0px; }
.emoji-1F600 { background-position: -19440px 0px; }
.emoji-1F601 { background-position: -19460px 0px; }
.emoji-1F602 { background-position: -19480px 0px; }
.emoji-1F603 { background-position: -19500px 0px; }
.emoji-1F604 { background-position: -19520px 0px; }
.emoji-1F605 { background-position: -19540px 0px; }
.emoji-1F606 { background-position: -19560px 0px; }
.emoji-1F607 { background-position: -19580px 0px; }
.emoji-1F608 { background-position: -19600px 0px; }
.emoji-1F609 { background-position: -19620px 0px; }
.emoji-1F60A { background-position: -19640px 0px; }
.emoji-1F60B { background-position: -19660px 0px; }
.emoji-1F60C { background-position: -19680px 0px; }
.emoji-1F60D { background-position: -19700px 0px; }
.emoji-1F60E { background-position: -19720px 0px; }
.emoji-1F60F { background-position: -19740px 0px; }
.emoji-1F610 { background-position: -19760px 0px; }
.emoji-1F611 { background-position: -19780px 0px; }
.emoji-1F612 { background-position: -19800px 0px; }
.emoji-1F613 { background-position: -19820px 0px; }
.emoji-1F614 { background-position: -19840px 0px; }
.emoji-1F615 { background-position: -19860px 0px; }
.emoji-1F616 { background-position: -19880px 0px; }
.emoji-1F617 { background-position: -19900px 0px; }
.emoji-1F618 { background-position: -19920px 0px; }
.emoji-1F619 { background-position: -19940px 0px; }
.emoji-1F61A { background-position: -19960px 0px; }
.emoji-1F61B { background-position: -19980px 0px; }
.emoji-1F61C { background-position: -20000px 0px; }
.emoji-1F61D { background-position: -20020px 0px; }
.emoji-1F61E { background-position: -20040px 0px; }
.emoji-1F61F { background-position: -20060px 0px; }
.emoji-1F620 { background-position: -20080px 0px; }
.emoji-1F621 { background-position: -20100px 0px; }
.emoji-1F622 { background-position: -20120px 0px; }
.emoji-1F623 { background-position: -20140px 0px; }
.emoji-1F624 { background-position: -20160px 0px; }
.emoji-1F625 { background-position: -20180px 0px; }
.emoji-1F626 { background-position: -20200px 0px; }
.emoji-1F627 { background-position: -20220px 0px; }
.emoji-1F628 { background-position: -20240px 0px; }
.emoji-1F629 { background-position: -20260px 0px; }
.emoji-1F62A { background-position: -20280px 0px; }
.emoji-1F62B { background-position: -20300px 0px; }
.emoji-1F62C { background-position: -20320px 0px; }
.emoji-1F62D { background-position: -20340px 0px; }
.emoji-1F62E { background-position: -20360px 0px; }
.emoji-1F62F { background-position: -20380px 0px; }
.emoji-1F630 { background-position: -20400px 0px; }
.emoji-1F631 { background-position: -20420px 0px; }
.emoji-1F632 { background-position: -20440px 0px; }
.emoji-1F633 { background-position: -20460px 0px; }
.emoji-1F634 { background-position: -20480px 0px; }
.emoji-1F635 { background-position: -20500px 0px; }
.emoji-1F636 { background-position: -20520px 0px; }
.emoji-1F637 { background-position: -20540px 0px; }
.emoji-1F638 { background-position: -20560px 0px; }
.emoji-1F639 { background-position: -20580px 0px; }
.emoji-1F63A { background-position: -20600px 0px; }
.emoji-1F63B { background-position: -20620px 0px; }
.emoji-1F63C { background-position: -20640px 0px; }
.emoji-1F63D { background-position: -20660px 0px; }
.emoji-1F63E { background-position: -20680px 0px; }
.emoji-1F63F { background-position: -20700px 0px; }
.emoji-1F640 { background-position: -20720px 0px; }
.emoji-1F641 { background-position: -20740px 0px; }
.emoji-1F642 { background-position: -20760px 0px; }
.emoji-1F645 { background-position: -20780px 0px; }
.emoji-1F646 { background-position: -20800px 0px; }
.emoji-1F647 { background-position: -20820px 0px; }
.emoji-1F648 { background-position: -20840px 0px; }
.emoji-1F649 { background-position: -20860px 0px; }
.emoji-1F64A { background-position: -20880px 0px; }
.emoji-1F64B { background-position: -20900px 0px; }
.emoji-1F64C { background-position: -20920px 0px; }
.emoji-1F64D { background-position: -20940px 0px; }
.emoji-1F64E { background-position: -20960px 0px; }
.emoji-1F64F { background-position: -20980px 0px; }
.emoji-1F680 { background-position: -21000px 0px; }
.emoji-1F681 { background-position: -21020px 0px; }
.emoji-1F682 { background-position: -21040px 0px; }
.emoji-1F683 { background-position: -21060px 0px; }
.emoji-1F684 { background-position: -21080px 0px; }
.emoji-1F685 { background-position: -21100px 0px; }
.emoji-1F686 { background-position: -21120px 0px; }
.emoji-1F687 { background-position: -21140px 0px; }
.emoji-1F688 { background-position: -21160px 0px; }
.emoji-1F689 { background-position: -21180px 0px; }
.emoji-1F68A { background-position: -21200px 0px; }
.emoji-1F68B { background-position: -21220px 0px; }
.emoji-1F68C { background-position: -21240px 0px; }
.emoji-1F68D { background-position: -21260px 0px; }
.emoji-1F68E { background-position: -21280px 0px; }
.emoji-1F68F { background-position: -21300px 0px; }
.emoji-1F690 { background-position: -21320px 0px; }
.emoji-1F691 { background-position: -21340px 0px; }
.emoji-1F692 { background-position: -21360px 0px; }
.emoji-1F693 { background-position: -21380px 0px; }
.emoji-1F694 { background-position: -21400px 0px; }
.emoji-1F695 { background-position: -21420px 0px; }
.emoji-1F696 { background-position: -21440px 0px; }
.emoji-1F697 { background-position: -21460px 0px; }
.emoji-1F698 { background-position: -21480px 0px; }
.emoji-1F699 { background-position: -21500px 0px; }
.emoji-1F69A { background-position: -21520px 0px; }
.emoji-1F69B { background-position: -21540px 0px; }
.emoji-1F69C { background-position: -21560px 0px; }
.emoji-1F69D { background-position: -21580px 0px; }
.emoji-1F69E { background-position: -21600px 0px; }
.emoji-1F69F { background-position: -21620px 0px; }
.emoji-1F6A0 { background-position: -21640px 0px; }
.emoji-1F6A1 { background-position: -21660px 0px; }
.emoji-1F6A2 { background-position: -21680px 0px; }
.emoji-1F6A3 { background-position: -21700px 0px; }
.emoji-1F6A4 { background-position: -21720px 0px; }
.emoji-1F6A5 { background-position: -21740px 0px; }
.emoji-1F6A6 { background-position: -21760px 0px; }
.emoji-1F6A7 { background-position: -21780px 0px; }
.emoji-1F6A8 { background-position: -21800px 0px; }
.emoji-1F6A9 { background-position: -21820px 0px; }
.emoji-1F6AA { background-position: -21840px 0px; }
.emoji-1F6AB { background-position: -21860px 0px; }
.emoji-1F6AC { background-position: -21880px 0px; }
.emoji-1F6AD { background-position: -21900px 0px; }
.emoji-1F6AE { background-position: -21920px 0px; }
.emoji-1F6AF { background-position: -21940px 0px; }
.emoji-1F6B0 { background-position: -21960px 0px; }
.emoji-1F6B1 { background-position: -21980px 0px; }
.emoji-1F6B2 { background-position: -22000px 0px; }
.emoji-1F6B3 { background-position: -22020px 0px; }
.emoji-1F6B4 { background-position: -22040px 0px; }
.emoji-1F6B5 { background-position: -22060px 0px; }
.emoji-1F6B6 { background-position: -22080px 0px; }
.emoji-1F6B7 { background-position: -22100px 0px; }
.emoji-1F6B8 { background-position: -22120px 0px; }
.emoji-1F6B9 { background-position: -22140px 0px; }
.emoji-1F6BA { background-position: -22160px 0px; }
.emoji-1F6BB { background-position: -22180px 0px; }
.emoji-1F6BC { background-position: -22200px 0px; }
.emoji-1F6BD { background-position: -22220px 0px; }
.emoji-1F6BE { background-position: -22240px 0px; }
.emoji-1F6BF { background-position: -22260px 0px; }
.emoji-1F6C0 { background-position: -22280px 0px; }
.emoji-1F6C1 { background-position: -22300px 0px; }
.emoji-1F6C2 { background-position: -22320px 0px; }
.emoji-1F6C3 { background-position: -22340px 0px; }
.emoji-1F6C4 { background-position: -22360px 0px; }
.emoji-1F6C5 { background-position: -22380px 0px; }
.emoji-1F6C6 { background-position: -22400px 0px; }
.emoji-1F6C7 { background-position: -22420px 0px; }
.emoji-1F6C8 { background-position: -22440px 0px; }
.emoji-1F6C9 { background-position: -22460px 0px; }
.emoji-1F6CA { background-position: -22480px 0px; }
.emoji-1F6CB { background-position: -22500px 0px; }
.emoji-1F6CC { background-position: -22520px 0px; }
.emoji-1F6CD { background-position: -22540px 0px; }
.emoji-1F6CE { background-position: -22560px 0px; }
.emoji-1F6CF { background-position: -22580px 0px; }
.emoji-1F6E0 { background-position: -22600px 0px; }
.emoji-1F6E1 { background-position: -22620px 0px; }
.emoji-1F6E2 { background-position: -22640px 0px; }
.emoji-1F6E3 { background-position: -22660px 0px; }
.emoji-1F6E4 { background-position: -22680px 0px; }
.emoji-1F6E5 { background-position: -22700px 0px; }
.emoji-1F6E6 { background-position: -22720px 0px; }
.emoji-1F6E7 { background-position: -22740px 0px; }
.emoji-1F6E8 { background-position: -22760px 0px; }
.emoji-1F6E9 { background-position: -22780px 0px; }
.emoji-1F6EA { background-position: -22800px 0px; }
.emoji-1F6EB { background-position: -22820px 0px; }
.emoji-1F6EC { background-position: -22840px 0px; }
.emoji-1F6F0 { background-position: -22860px 0px; }
.emoji-1F6F1 { background-position: -22880px 0px; }
.emoji-1F6F2 { background-position: -22900px 0px; }
.emoji-1F6F3 { background-position: -22920px 0px; }
.emoji-203C { background-position: -22940px 0px; }
.emoji-2049 { background-position: -22960px 0px; }
.emoji-2122 { background-position: -22980px 0px; }
.emoji-2139 { background-position: -23000px 0px; }
.emoji-2194 { background-position: -23020px 0px; }
.emoji-2195 { background-position: -23040px 0px; }
.emoji-2196 { background-position: -23060px 0px; }
.emoji-2197 { background-position: -23080px 0px; }
.emoji-2198 { background-position: -23100px 0px; }
.emoji-2199 { background-position: -23120px 0px; }
.emoji-21A9 { background-position: -23140px 0px; }
.emoji-21AA { background-position: -23160px 0px; }
.emoji-231A { background-position: -23180px 0px; }
.emoji-231B { background-position: -23200px 0px; }
.emoji-23E9 { background-position: -23220px 0px; }
.emoji-23EA { background-position: -23240px 0px; }
.emoji-23EB { background-position: -23260px 0px; }
.emoji-23EC { background-position: -23280px 0px; }
.emoji-23F0 { background-position: -23300px 0px; }
.emoji-23F3 { background-position: -23320px 0px; }
.emoji-24C2 { background-position: -23340px 0px; }
.emoji-25AA { background-position: -23360px 0px; }
.emoji-25AB { background-position: -23380px 0px; }
.emoji-25B6 { background-position: -23400px 0px; }
.emoji-25C0 { background-position: -23420px 0px; }
.emoji-25FB { background-position: -23440px 0px; }
.emoji-25FC { background-position: -23460px 0px; }
.emoji-25FD { background-position: -23480px 0px; }
.emoji-25FE { background-position: -23500px 0px; }
.emoji-2600 { background-position: -23520px 0px; }
.emoji-2601 { background-position: -23540px 0px; }
.emoji-260E { background-position: -23560px 0px; }
.emoji-2611 { background-position: -23580px 0px; }
.emoji-2614 { background-position: -23600px 0px; }
.emoji-2615 { background-position: -23620px 0px; }
.emoji-261D { background-position: -23640px 0px; }
.emoji-263A { background-position: -23660px 0px; }
.emoji-2648 { background-position: -23680px 0px; }
.emoji-2649 { background-position: -23700px 0px; }
.emoji-264A { background-position: -23720px 0px; }
.emoji-264B { background-position: -23740px 0px; }
.emoji-264C { background-position: -23760px 0px; }
.emoji-264D { background-position: -23780px 0px; }
.emoji-264E { background-position: -23800px 0px; }
.emoji-264F { background-position: -23820px 0px; }
.emoji-2650 { background-position: -23840px 0px; }
.emoji-2651 { background-position: -23860px 0px; }
.emoji-2652 { background-position: -23880px 0px; }
.emoji-2653 { background-position: -23900px 0px; }
.emoji-2660 { background-position: -23920px 0px; }
.emoji-2663 { background-position: -23940px 0px; }
.emoji-2665 { background-position: -23960px 0px; }
.emoji-2666 { background-position: -23980px 0px; }
.emoji-2668 { background-position: -24000px 0px; }
.emoji-267B { background-position: -24020px 0px; }
.emoji-267F { background-position: -24040px 0px; }
.emoji-2693 { background-position: -24060px 0px; }
.emoji-26A0 { background-position: -24080px 0px; }
.emoji-26A1 { background-position: -24100px 0px; }
.emoji-26AA { background-position: -24120px 0px; }
.emoji-26AB { background-position: -24140px 0px; }
.emoji-26BD { background-position: -24160px 0px; }
.emoji-26BE { background-position: -24180px 0px; }
.emoji-26C4 { background-position: -24200px 0px; }
.emoji-26C5 { background-position: -24220px 0px; }
.emoji-26CE { background-position: -24240px 0px; }
.emoji-26D4 { background-position: -24260px 0px; }
.emoji-26EA { background-position: -24280px 0px; }
.emoji-26F2 { background-position: -24300px 0px; }
.emoji-26F3 { background-position: -24320px 0px; }
.emoji-26F5 { background-position: -24340px 0px; }
.emoji-26FA { background-position: -24360px 0px; }
.emoji-26FD { background-position: -24380px 0px; }
.emoji-2702 { background-position: -24400px 0px; }
.emoji-2705 { background-position: -24420px 0px; }
.emoji-2708 { background-position: -24440px 0px; }
.emoji-2709 { background-position: -24460px 0px; }
.emoji-270A { background-position: -24480px 0px; }
.emoji-270B { background-position: -24500px 0px; }
.emoji-270C { background-position: -24520px 0px; }
.emoji-270F { background-position: -24540px 0px; }
.emoji-2712 { background-position: -24560px 0px; }
.emoji-2714 { background-position: -24580px 0px; }
.emoji-2716 { background-position: -24600px 0px; }
.emoji-2728 { background-position: -24620px 0px; }
.emoji-2733 { background-position: -24640px 0px; }
.emoji-2734 { background-position: -24660px 0px; }
.emoji-2744 { background-position: -24680px 0px; }
.emoji-2747 { background-position: -24700px 0px; }
.emoji-274C { background-position: -24720px 0px; }
.emoji-274E { background-position: -24740px 0px; }
.emoji-2753 { background-position: -24760px 0px; }
.emoji-2754 { background-position: -24780px 0px; }
.emoji-2755 { background-position: -24800px 0px; }
.emoji-2757 { background-position: -24820px 0px; }
.emoji-2764 { background-position: -24840px 0px; }
.emoji-2795 { background-position: -24860px 0px; }
.emoji-2796 { background-position: -24880px 0px; }
.emoji-2797 { background-position: -24900px 0px; }
.emoji-27A1 { background-position: -24920px 0px; }
.emoji-27B0 { background-position: -24940px 0px; }
.emoji-27BF { background-position: -24960px 0px; }
.emoji-2934 { background-position: -24980px 0px; }
.emoji-2935 { background-position: -25000px 0px; }
.emoji-2B05 { background-position: -25020px 0px; }
.emoji-2B06 { background-position: -25040px 0px; }
.emoji-2B07 { background-position: -25060px 0px; }
.emoji-2B1B { background-position: -25080px 0px; }
.emoji-2B1C { background-position: -25100px 0px; }
.emoji-2B50 { background-position: -25120px 0px; }
.emoji-2B55 { background-position: -25140px 0px; }
.emoji-3030 { background-position: -25160px 0px; }
.emoji-303D { background-position: -25180px 0px; }
.emoji-3297 { background-position: -25200px 0px; }
.emoji-3299 { background-position: -25220px 0px; }
\ No newline at end of file
...@@ -139,7 +139,6 @@ class Projects::NotesController < Projects::ApplicationController ...@@ -139,7 +139,6 @@ class Projects::NotesController < Projects::ApplicationController
discussion_id: note.discussion_id, discussion_id: note.discussion_id,
html: note_to_html(note), html: note_to_html(note),
award: note.is_award, award: note.is_award,
emoji_path: note.is_award ? view_context.image_url(::AwardEmoji.path_to_emoji_image(note.note)) : "",
note: note.note, note: note.note,
discussion_html: note_to_discussion_html(note), discussion_html: note_to_discussion_html(note),
discussion_with_diff_html: note_to_discussion_with_diff_html(note) discussion_with_diff_html: note_to_discussion_with_diff_html(note)
......
...@@ -94,11 +94,13 @@ module IssuesHelper ...@@ -94,11 +94,13 @@ module IssuesHelper
end.sort.to_sentence(last_word_connector: ', or ') end.sort.to_sentence(last_word_connector: ', or ')
end end
def url_to_emoji(name) def emoji_icon(name, unicode = nil)
emoji_path = ::AwardEmoji.path_to_emoji_image(name) unicode ||= Emoji.emoji_filename(name)
url_to_image(emoji_path)
rescue StandardError content_tag :div, "",
"" class: "icon emoji-icon emoji-#{unicode}",
"data-emoji" => name,
"data-unicode-name" => unicode
end end
def emoji_author_list(notes, current_user) def emoji_author_list(notes, current_user)
...@@ -109,10 +111,6 @@ module IssuesHelper ...@@ -109,10 +111,6 @@ module IssuesHelper
list.join(", ") list.join(", ")
end end
def emoji_list
::AwardEmoji::EMOJI_LIST
end
def note_active_class(notes, current_user) def note_active_class(notes, current_user)
if current_user && notes.pluck(:author_id).include?(current_user.id) if current_user && notes.pluck(:author_id).include?(current_user.id)
"active" "active"
......
.awards.votes-block .awards.votes-block
- votable.notes.awards.grouped_awards.each do |emoji, notes| - votable.notes.awards.grouped_awards.each do |emoji, notes|
.award{class: (note_active_class(notes, current_user)), title: emoji_author_list(notes, current_user)} .award{class: (note_active_class(notes, current_user)), title: emoji_author_list(notes, current_user)}
.icon{"data-emoji" => "#{emoji}"} = emoji_icon(emoji)
= image_tag url_to_emoji(emoji), height: "20px", width: "20px"
.counter .counter
= notes.count = notes.count
- if current_user - if current_user
.dropdown.awards-controls .awards-controls
%a.add-award{"data-toggle" => "dropdown", "data-target" => "#", "href" => "#"} %a.add-award{"data-toggle" => "dropdown", "data-target" => "#", "href" => "#"}
= icon('smile-o') = icon('smile-o')
%ul.dropdown-menu.awards-menu .emoji-menu
- emoji_list.each do |emoji| .emoji-menu-content
%li{"data-emoji" => "#{emoji}"}= image_tag url_to_emoji(emoji), height: "20px", width: "20px" - AwardEmoji.emoji_by_category.each do |category, emojis|
%h5= AwardEmoji::CATEGORIES[category]
%ul
- emojis.each do |emoji|
%li
= emoji_icon(emoji["name"], emoji["unicode"])
- if current_user - if current_user
:coffeescript :coffeescript
...@@ -20,10 +24,16 @@ ...@@ -20,10 +24,16 @@
noteable_type = "#{votable.class.name.underscore}" noteable_type = "#{votable.class.name.underscore}"
noteable_id = "#{votable.id}" noteable_id = "#{votable.id}"
aliases = #{AwardEmoji::ALIASES.to_json} aliases = #{AwardEmoji::ALIASES.to_json}
window.awards_handler = new AwardsHandler(post_emoji_url, noteable_type, noteable_id, aliases)
$(".awards-menu li").click (e)-> window.awards_handler = new AwardsHandler(
emoji = $(this).data("emoji") post_emoji_url,
noteable_type,
noteable_id,
aliases
)
$(".emoji-menu-content li").click (e)->
emoji = $(this).find(".emoji-icon").data("emoji")
awards_handler.addAward(emoji) awards_handler.addAward(emoji)
$(".awards").on "click", ".award", (e)-> $(".awards").on "click", ".award", (e)->
...@@ -31,3 +41,5 @@ ...@@ -31,3 +41,5 @@
awards_handler.addAward(emoji) awards_handler.addAward(emoji)
$(".award").tooltip() $(".award").tooltip()
$(".emoji-menu-content").niceScroll({cursorwidth: "7px", autohidemode: false})
...@@ -13,6 +13,11 @@ Feature: Award Emoji ...@@ -13,6 +13,11 @@ Feature: Award Emoji
Then I have award added Then I have award added
And I can remove it by clicking to icon And I can remove it by clicking to icon
@javascript
Scenario: I can see the list of emoji categories
Given I click to emoji-picker
Then I can see the activity and food categories
@javascript @javascript
Scenario: I add award emoji using regular comment Scenario: I add award emoji using regular comment
Given I leave comment with a single emoji Given I leave comment with a single emoji
......
...@@ -15,8 +15,8 @@ class Spinach::Features::AwardEmoji < Spinach::FeatureSteps ...@@ -15,8 +15,8 @@ class Spinach::Features::AwardEmoji < Spinach::FeatureSteps
end end
step 'I click to emoji in the picker' do step 'I click to emoji in the picker' do
page.within '.awards-menu' do page.within '.emoji-menu' do
page.first('img').click page.first('.emoji-icon').click
end end
end end
...@@ -27,6 +27,13 @@ class Spinach::Features::AwardEmoji < Spinach::FeatureSteps ...@@ -27,6 +27,13 @@ class Spinach::Features::AwardEmoji < Spinach::FeatureSteps
end end
end end
step 'I can see the activity and food categories' do
page.within '.emoji-menu' do
expect(page).to_not have_selector 'Activity'
expect(page).to_not have_selector 'Food'
end
end
step 'I have award added' do step 'I have award added' do
page.within '.awards' do page.within '.awards' do
expect(page).to have_selector '.award' expect(page).to have_selector '.award'
......
class AwardEmoji class AwardEmoji
EMOJI_LIST = [
"+1", "-1", "100", "blush", "heart", "smile", "rage",
"beers", "disappointed", "ok_hand",
"helicopter", "shit", "airplane", "alarm_clock",
"ambulance", "anguished", "two_hearts", "wink"
]
ALIASES = { ALIASES = {
pout: "rage", pout: "rage",
satisfied: "laughing", satisfied: "laughing",
...@@ -37,11 +30,41 @@ class AwardEmoji ...@@ -37,11 +30,41 @@ class AwardEmoji
squirrel: "shipit" squirrel: "shipit"
}.with_indifferent_access }.with_indifferent_access
def self.path_to_emoji_image(name) CATEGORIES = {
"emoji/#{Emoji.emoji_filename(name)}.png" other: "Other",
end objects: "Objects",
places: "Places",
travel_places: "Travel",
emoticons: "Emoticons",
objects_symbols: "Symbols",
nature: "Nature",
celebration: "Celebration",
people: "People",
activity: "Activity",
flags: "Flags",
food_drink: "Food"
}.with_indifferent_access
def self.normilize_emoji_name(name) def self.normilize_emoji_name(name)
ALIASES[name] || name ALIASES[name] || name
end end
def self.emoji_by_category
unless @emoji_by_category
@emoji_by_category = {}
emojis_added = []
Emoji.emojis.each do |emoji_name, data|
next if emojis_added.include?(data["name"])
emojis_added << data["name"]
@emoji_by_category[data["category"]] ||= []
@emoji_by_category[data["category"]] << data
end
@emoji_by_category = @emoji_by_category.sort.to_h
end
@emoji_by_category
end
end end
...@@ -127,18 +127,6 @@ describe IssuesHelper do ...@@ -127,18 +127,6 @@ describe IssuesHelper do
it { is_expected.to eq("!1, !2, or !3") } it { is_expected.to eq("!1, !2, or !3") }
end end
describe "#url_to_emoji" do
it "returns url" do
expect(url_to_emoji("smile")).to include("emoji/1F604.png")
end
end
describe "#emoji_list" do
it "returns url" do
expect(emoji_list).to be_kind_of(Array)
end
end
describe "#note_active_class" do describe "#note_active_class" do
before do before do
@note = create :note @note = create :note
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment