Commit 9b3b521d authored by Andriy Dyadyura's avatar Andriy Dyadyura

Merge branch 'master' of https://gitlab.com/gitlab-org/gitlab-ce into button-height

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