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