diff --git a/.gitignore b/.gitignore
index 975e6e2a..844d3487 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
.localeapp/key
/assets/scripts/config/locales.js
.DS_Store
+/public/images/emoji
diff --git a/.travis.yml b/.travis.yml
index 83fefcb9..6439df11 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,8 +11,8 @@ env:
matrix:
- "TEST_SUITE=ruby ARTIFACTS_S3_BUCKET=travis-web-production"
- "TEST_SUITE=phantomjs"
- - "TEST_SUITE=saucelabs BROWSER='firefox:19:Windows 2012'"
- - "TEST_SUITE=saucelabs BROWSER='chrome::Windows 2008'"
+ - "TEST_SUITE=saucelabs BROWSER='firefox::Windows XP'"
+ - "TEST_SUITE=saucelabs BROWSER='chrome::Windows XP'"
script: "script/ci"
before_script:
diff --git a/Assetfile b/Assetfile
index da341d89..8c867331 100644
--- a/Assetfile
+++ b/Assetfile
@@ -31,10 +31,15 @@ input assets.scripts do
end
match 'vendor/**/*.js' do
+ if assets.production?
+ reject 'ember.js'
+ else
+ reject 'ember.prod.js'
+ end
safe_concat assets.vendor_order, 'vendor.js'
end
- match '{spec,spec/unit,spec/unit/views}/*.js' do
+ match '{spec,spec/integration,spec/unit,spec/unit/views}/*.js' do
concat 'spec/specs.js'
end
diff --git a/Gemfile b/Gemfile
index 33be7c01..a7922e0b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -17,12 +17,12 @@ group :assets do
gem 'tilt'
gem 'uglifier'
gem 'yui-compressor'
+ gem 'libv8', '~> 3.16.0'
end
group :development, :test do
gem 'rake'
gem 'localeapp'
- gem 'handlebars'
gem 'localeapp-handlebars_i18n'
end
@@ -40,61 +40,3 @@ group :test do
gem 'sinatra-contrib'
end
-require 'bundler/installer'
-
-module ::Bundler
- class Installer < Environment
- MAX_RETRIES = 3
-
- def install_gem_from_spec(spec, standalone = false)
- retries = 1
- # Download the gem to get the spec, because some specs that are returned
- # by rubygems.org are broken and wrong.
- Bundler::Fetcher.fetch(spec) if spec.source.is_a?(Bundler::Source::Rubygems)
-
- # Fetch the build settings, if there are any
- settings = Bundler.settings["build.#{spec.name}"]
- Bundler.rubygems.with_build_args [settings] do
- spec.source.install(spec)
- Bundler.ui.debug "from #{spec.loaded_from} "
- end
-
- # newline comes after installing, some gems say "with native extensions"
- Bundler.ui.info ""
- if Bundler.settings[:bin] && standalone
- generate_standalone_bundler_executable_stubs(spec)
- elsif Bundler.settings[:bin]
- generate_bundler_executable_stubs(spec, :force => true)
- end
-
- FileUtils.rm_rf(Bundler.tmp)
- rescue Gem::RemoteFetcher::FetchError => e
- if retries <= MAX_RETRIES
- Bundler.ui.warn "#{e.class}: #{e.message}"
- Bundler.ui.warn "Installing #{spec.name} (#{spec.version}) failed."
- Bundler.ui.warn "Retrying (#{retries}/#{MAX_RETRIES})"
- retries += 1
- sleep retries
- retry
- else
- Bundler.ui.warn "Installing #{spec.name} (#{spec.version}) failed after #{retries} retries: #{e.message}."
- Bundler.ui.warn "Giving up"
- msg = "An error, most likely because of network issues, has occurred trying to install #{spec.name} (#{spec.version}), "
- msg << "and Bundler cannot continue."
- raise Bundler::InstallError, msg
- end
- rescue Exception => e
- # install hook failed
- raise e if e.is_a?(Bundler::InstallHookError) || e.is_a?(Bundler::SecurityError)
-
- # other failure, likely a native extension build failure
- Bundler.ui.info ""
- Bundler.ui.warn "#{e.class}: #{e.message}"
- msg = "An error occurred while installing #{spec.name} (#{spec.version}),"
- msg << " and Bundler cannot continue.\nMake sure that `gem install"
- msg << " #{spec.name} -v '#{spec.version}'` succeeds before bundling."
- Bundler.ui.debug e.backtrace.join("\n")
- raise Bundler::InstallError, msg
- end
- end
-end
diff --git a/Gemfile.lock b/Gemfile.lock
index fcdcc460..80adb3af 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -29,7 +29,6 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.5.0)
- commonjs (0.2.6)
compass (0.12.2)
chunky_png (~> 1.2)
fssm (>= 0.2.7)
@@ -48,12 +47,9 @@ GEM
pry (>= 0.9.10)
terminal-table (>= 1.4.3)
thor (>= 0.14.6)
- handlebars (0.4.0)
- commonjs (~> 0.2.3)
- therubyracer (~> 0.11.1)
i18n (0.6.3)
json (1.7.7)
- libv8 (3.11.8.13)
+ libv8 (3.16.14.3)
listen (0.7.3)
localeapp (0.6.9)
gli
@@ -72,8 +68,8 @@ GEM
coderay (~> 1.0.5)
method_source (~> 0.8)
slop (~> 3.4)
- puma (1.6.3)
- rack (~> 1.2)
+ puma (2.6.0)
+ rack (>= 1.1, < 2.0)
rack (1.5.2)
rack-cache (1.2)
rack (>= 0.4)
@@ -89,7 +85,6 @@ GEM
rake-pipeline-i18n-filters (0.0.5)
rake-pipeline (~> 0.6)
rb-fsevent (0.9.3)
- ref (1.0.2)
rerun (0.8.0)
listen
rest-client (1.6.7)
@@ -116,9 +111,6 @@ GEM
tilt (~> 1.3)
slop (3.4.3)
terminal-table (1.4.5)
- therubyracer (0.11.4)
- libv8 (~> 3.11.8.12)
- ref
thor (0.17.0)
tilt (1.3.3)
uglifier (1.3.0)
@@ -136,7 +128,7 @@ DEPENDENCIES
compass
foreman
guard
- handlebars
+ libv8 (~> 3.16.0)
localeapp
localeapp-handlebars_i18n
puma
diff --git a/LICENCSE b/LICENSE
similarity index 100%
rename from LICENCSE
rename to LICENSE
diff --git a/NOTES.txt b/NOTES.txt
index 577dc5a8..1b2fc3b7 100644
--- a/NOTES.txt
+++ b/NOTES.txt
@@ -10,7 +10,7 @@
# Handlebars
-* Can't {{bindAttr}} be just {{attr}}? Who cares it's "bound" in that context?
+* Can't {{bind-attr}} be just {{attr}}? Who cares it's "bound" in that context?
{{#each}} isn't {{#bindEach}} either.
* Why is {{#collection contentBinding="foo"}} not just {{#collection foo}}?
diff --git a/README.md b/README.md
index 51aff3cc..0c7f90c7 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
## Travis CI ember web client
-[](https://travis-ci.org/travis-ci/travis-web)
+[](https://travis-ci.org/travis-ci/travis-web)
### Running the app
In order to run the app you need to install dependencies with:
diff --git a/Rakefile b/Rakefile
index ae388e82..e7afa057 100644
--- a/Rakefile
+++ b/Rakefile
@@ -28,3 +28,9 @@ namespace :ember do
system 'cp tmp/ember.js/dist/ember.js assets/javascripts/vendor/ember.js'
end
end
+
+task :update_emojis do
+ s = Dir.glob('assets/images/emoji/*.png').map {|png| png.split('/', 4)[3].gsub('.png', '')}.map{|png| "'#{png}'"}.join(", ")
+ e = "@EmojiDictionary = [#{s}]"
+ File.open("assets/scripts/config/emoij.coffee", "w") {|f| f.write(e) }
+end
diff --git a/assets/images/emoji/+1.png b/assets/images/emoji/+1.png
new file mode 100644
index 00000000..81786c1d
Binary files /dev/null and b/assets/images/emoji/+1.png differ
diff --git a/assets/images/emoji/-1.png b/assets/images/emoji/-1.png
index 6f757ba8..41c6b825 100644
Binary files a/assets/images/emoji/-1.png and b/assets/images/emoji/-1.png differ
diff --git a/assets/images/emoji/0.png b/assets/images/emoji/0.png
deleted file mode 100644
index 65146943..00000000
Binary files a/assets/images/emoji/0.png and /dev/null differ
diff --git a/assets/images/emoji/1.png b/assets/images/emoji/1.png
deleted file mode 100644
index d9ee9e36..00000000
Binary files a/assets/images/emoji/1.png and /dev/null differ
diff --git a/assets/images/emoji/100.png b/assets/images/emoji/100.png
new file mode 100644
index 00000000..ca3bb9bc
Binary files /dev/null and b/assets/images/emoji/100.png differ
diff --git a/assets/images/emoji/109.png b/assets/images/emoji/109.png
deleted file mode 100644
index 9c3512f2..00000000
Binary files a/assets/images/emoji/109.png and /dev/null differ
diff --git a/assets/images/emoji/1234.png b/assets/images/emoji/1234.png
new file mode 100644
index 00000000..c47c2e1f
Binary files /dev/null and b/assets/images/emoji/1234.png differ
diff --git a/assets/images/emoji/2.png b/assets/images/emoji/2.png
deleted file mode 100644
index 670b9904..00000000
Binary files a/assets/images/emoji/2.png and /dev/null differ
diff --git a/assets/images/emoji/3.png b/assets/images/emoji/3.png
deleted file mode 100644
index 4884ee22..00000000
Binary files a/assets/images/emoji/3.png and /dev/null differ
diff --git a/assets/images/emoji/4.png b/assets/images/emoji/4.png
deleted file mode 100644
index 9023a2cf..00000000
Binary files a/assets/images/emoji/4.png and /dev/null differ
diff --git a/assets/images/emoji/5.png b/assets/images/emoji/5.png
deleted file mode 100644
index 0bd3dad8..00000000
Binary files a/assets/images/emoji/5.png and /dev/null differ
diff --git a/assets/images/emoji/6.png b/assets/images/emoji/6.png
deleted file mode 100644
index 62012079..00000000
Binary files a/assets/images/emoji/6.png and /dev/null differ
diff --git a/assets/images/emoji/7.png b/assets/images/emoji/7.png
deleted file mode 100644
index f510edd6..00000000
Binary files a/assets/images/emoji/7.png and /dev/null differ
diff --git a/assets/images/emoji/8.png b/assets/images/emoji/8.png
deleted file mode 100644
index c9996021..00000000
Binary files a/assets/images/emoji/8.png and /dev/null differ
diff --git a/assets/images/emoji/8ball.png b/assets/images/emoji/8ball.png
index 74db01b7..c2c710d4 100644
Binary files a/assets/images/emoji/8ball.png and b/assets/images/emoji/8ball.png differ
diff --git a/assets/images/emoji/9.png b/assets/images/emoji/9.png
deleted file mode 100644
index a340a91a..00000000
Binary files a/assets/images/emoji/9.png and /dev/null differ
diff --git a/assets/images/emoji/a.png b/assets/images/emoji/a.png
index 989e3e4b..09ff6d6f 100644
Binary files a/assets/images/emoji/a.png and b/assets/images/emoji/a.png differ
diff --git a/assets/images/emoji/ab.png b/assets/images/emoji/ab.png
index 8ae786c1..2a522204 100644
Binary files a/assets/images/emoji/ab.png and b/assets/images/emoji/ab.png differ
diff --git a/assets/images/emoji/abc.png b/assets/images/emoji/abc.png
new file mode 100644
index 00000000..505d40a1
Binary files /dev/null and b/assets/images/emoji/abc.png differ
diff --git a/assets/images/emoji/abcd.png b/assets/images/emoji/abcd.png
new file mode 100644
index 00000000..5218470b
Binary files /dev/null and b/assets/images/emoji/abcd.png differ
diff --git a/assets/images/emoji/accept.png b/assets/images/emoji/accept.png
new file mode 100644
index 00000000..2d200903
Binary files /dev/null and b/assets/images/emoji/accept.png differ
diff --git a/assets/images/emoji/aerial_tramway.png b/assets/images/emoji/aerial_tramway.png
new file mode 100644
index 00000000..38f6dfe2
Binary files /dev/null and b/assets/images/emoji/aerial_tramway.png differ
diff --git a/assets/images/emoji/airplane.png b/assets/images/emoji/airplane.png
index a6adc588..8407cb67 100644
Binary files a/assets/images/emoji/airplane.png and b/assets/images/emoji/airplane.png differ
diff --git a/assets/images/emoji/alarm_clock.png b/assets/images/emoji/alarm_clock.png
new file mode 100644
index 00000000..86ca8c8e
Binary files /dev/null and b/assets/images/emoji/alarm_clock.png differ
diff --git a/assets/images/emoji/alien.png b/assets/images/emoji/alien.png
index 141e2fbf..416de47b 100644
Binary files a/assets/images/emoji/alien.png and b/assets/images/emoji/alien.png differ
diff --git a/assets/images/emoji/ambulance.png b/assets/images/emoji/ambulance.png
index 9fe869fc..b740f45d 100644
Binary files a/assets/images/emoji/ambulance.png and b/assets/images/emoji/ambulance.png differ
diff --git a/assets/images/emoji/anchor.png b/assets/images/emoji/anchor.png
new file mode 100644
index 00000000..0c5192e6
Binary files /dev/null and b/assets/images/emoji/anchor.png differ
diff --git a/assets/images/emoji/angel.png b/assets/images/emoji/angel.png
index d57c86ab..da52c310 100644
Binary files a/assets/images/emoji/angel.png and b/assets/images/emoji/angel.png differ
diff --git a/assets/images/emoji/anger.png b/assets/images/emoji/anger.png
index c9245ca7..6fb4dca1 100644
Binary files a/assets/images/emoji/anger.png and b/assets/images/emoji/anger.png differ
diff --git a/assets/images/emoji/angry.png b/assets/images/emoji/angry.png
index 3c8e8920..f95bfa89 100644
Binary files a/assets/images/emoji/angry.png and b/assets/images/emoji/angry.png differ
diff --git a/assets/images/emoji/anguished.png b/assets/images/emoji/anguished.png
new file mode 100644
index 00000000..c6259472
Binary files /dev/null and b/assets/images/emoji/anguished.png differ
diff --git a/assets/images/emoji/ant.png b/assets/images/emoji/ant.png
new file mode 100644
index 00000000..b92d1cc1
Binary files /dev/null and b/assets/images/emoji/ant.png differ
diff --git a/assets/images/emoji/apple.png b/assets/images/emoji/apple.png
index 4137b45a..08aa17b9 100644
Binary files a/assets/images/emoji/apple.png and b/assets/images/emoji/apple.png differ
diff --git a/assets/images/emoji/aquarius.png b/assets/images/emoji/aquarius.png
index 49ce4316..cbff66ed 100644
Binary files a/assets/images/emoji/aquarius.png and b/assets/images/emoji/aquarius.png differ
diff --git a/assets/images/emoji/aries.png b/assets/images/emoji/aries.png
index 05835de5..89990223 100644
Binary files a/assets/images/emoji/aries.png and b/assets/images/emoji/aries.png differ
diff --git a/assets/images/emoji/arrow_backward.png b/assets/images/emoji/arrow_backward.png
index 9ad1296e..08862183 100644
Binary files a/assets/images/emoji/arrow_backward.png and b/assets/images/emoji/arrow_backward.png differ
diff --git a/assets/images/emoji/arrow_double_down.png b/assets/images/emoji/arrow_double_down.png
new file mode 100644
index 00000000..2ecbebcd
Binary files /dev/null and b/assets/images/emoji/arrow_double_down.png differ
diff --git a/assets/images/emoji/arrow_double_up.png b/assets/images/emoji/arrow_double_up.png
new file mode 100644
index 00000000..d42979d4
Binary files /dev/null and b/assets/images/emoji/arrow_double_up.png differ
diff --git a/assets/images/emoji/arrow_down.png b/assets/images/emoji/arrow_down.png
index 3f9258d8..e6702f02 100644
Binary files a/assets/images/emoji/arrow_down.png and b/assets/images/emoji/arrow_down.png differ
diff --git a/assets/images/emoji/arrow_down_small.png b/assets/images/emoji/arrow_down_small.png
new file mode 100644
index 00000000..d168a555
Binary files /dev/null and b/assets/images/emoji/arrow_down_small.png differ
diff --git a/assets/images/emoji/arrow_forward.png b/assets/images/emoji/arrow_forward.png
index 200a6447..fbfe711b 100644
Binary files a/assets/images/emoji/arrow_forward.png and b/assets/images/emoji/arrow_forward.png differ
diff --git a/assets/images/emoji/arrow_heading_down.png b/assets/images/emoji/arrow_heading_down.png
new file mode 100644
index 00000000..56dd3b9d
Binary files /dev/null and b/assets/images/emoji/arrow_heading_down.png differ
diff --git a/assets/images/emoji/arrow_heading_up.png b/assets/images/emoji/arrow_heading_up.png
new file mode 100644
index 00000000..c8f670a1
Binary files /dev/null and b/assets/images/emoji/arrow_heading_up.png differ
diff --git a/assets/images/emoji/arrow_left.png b/assets/images/emoji/arrow_left.png
index 59be8e30..d64ac619 100644
Binary files a/assets/images/emoji/arrow_left.png and b/assets/images/emoji/arrow_left.png differ
diff --git a/assets/images/emoji/arrow_lower_left.png b/assets/images/emoji/arrow_lower_left.png
index 7cc33a31..55fb03c4 100644
Binary files a/assets/images/emoji/arrow_lower_left.png and b/assets/images/emoji/arrow_lower_left.png differ
diff --git a/assets/images/emoji/arrow_lower_right.png b/assets/images/emoji/arrow_lower_right.png
index 67d1c281..da8fb829 100644
Binary files a/assets/images/emoji/arrow_lower_right.png and b/assets/images/emoji/arrow_lower_right.png differ
diff --git a/assets/images/emoji/arrow_right.png b/assets/images/emoji/arrow_right.png
index 99ae84e6..6d483b51 100644
Binary files a/assets/images/emoji/arrow_right.png and b/assets/images/emoji/arrow_right.png differ
diff --git a/assets/images/emoji/arrow_right_hook.png b/assets/images/emoji/arrow_right_hook.png
new file mode 100644
index 00000000..8b4ea6e1
Binary files /dev/null and b/assets/images/emoji/arrow_right_hook.png differ
diff --git a/assets/images/emoji/arrow_up.png b/assets/images/emoji/arrow_up.png
index fd80ace4..b5b0688d 100644
Binary files a/assets/images/emoji/arrow_up.png and b/assets/images/emoji/arrow_up.png differ
diff --git a/assets/images/emoji/arrow_up_down.png b/assets/images/emoji/arrow_up_down.png
new file mode 100644
index 00000000..b718c214
Binary files /dev/null and b/assets/images/emoji/arrow_up_down.png differ
diff --git a/assets/images/emoji/arrow_up_small.png b/assets/images/emoji/arrow_up_small.png
new file mode 100644
index 00000000..3f40bfb8
Binary files /dev/null and b/assets/images/emoji/arrow_up_small.png differ
diff --git a/assets/images/emoji/arrow_upper_left.png b/assets/images/emoji/arrow_upper_left.png
index 52b9b39f..e895fd7b 100644
Binary files a/assets/images/emoji/arrow_upper_left.png and b/assets/images/emoji/arrow_upper_left.png differ
diff --git a/assets/images/emoji/arrow_upper_right.png b/assets/images/emoji/arrow_upper_right.png
index e8370c8a..e23790ba 100644
Binary files a/assets/images/emoji/arrow_upper_right.png and b/assets/images/emoji/arrow_upper_right.png differ
diff --git a/assets/images/emoji/arrows_clockwise.png b/assets/images/emoji/arrows_clockwise.png
new file mode 100644
index 00000000..5f84d7e7
Binary files /dev/null and b/assets/images/emoji/arrows_clockwise.png differ
diff --git a/assets/images/emoji/arrows_counterclockwise.png b/assets/images/emoji/arrows_counterclockwise.png
new file mode 100644
index 00000000..1933ae18
Binary files /dev/null and b/assets/images/emoji/arrows_counterclockwise.png differ
diff --git a/assets/images/emoji/art.png b/assets/images/emoji/art.png
index 109f664f..d45212b0 100644
Binary files a/assets/images/emoji/art.png and b/assets/images/emoji/art.png differ
diff --git a/assets/images/emoji/articulated_lorry.png b/assets/images/emoji/articulated_lorry.png
new file mode 100644
index 00000000..81ec1f91
Binary files /dev/null and b/assets/images/emoji/articulated_lorry.png differ
diff --git a/assets/images/emoji/astonished.png b/assets/images/emoji/astonished.png
index 052dfdbf..858a8348 100644
Binary files a/assets/images/emoji/astonished.png and b/assets/images/emoji/astonished.png differ
diff --git a/assets/images/emoji/atm.png b/assets/images/emoji/atm.png
index 357caf4d..c2846e79 100644
Binary files a/assets/images/emoji/atm.png and b/assets/images/emoji/atm.png differ
diff --git a/assets/images/emoji/b.png b/assets/images/emoji/b.png
index dab96329..8742b3d2 100644
Binary files a/assets/images/emoji/b.png and b/assets/images/emoji/b.png differ
diff --git a/assets/images/emoji/baby.png b/assets/images/emoji/baby.png
index 25b4d645..3b29da40 100644
Binary files a/assets/images/emoji/baby.png and b/assets/images/emoji/baby.png differ
diff --git a/assets/images/emoji/baby_bottle.png b/assets/images/emoji/baby_bottle.png
new file mode 100644
index 00000000..1b2cfe5e
Binary files /dev/null and b/assets/images/emoji/baby_bottle.png differ
diff --git a/assets/images/emoji/baby_chick.png b/assets/images/emoji/baby_chick.png
index 9551846a..9be8d293 100644
Binary files a/assets/images/emoji/baby_chick.png and b/assets/images/emoji/baby_chick.png differ
diff --git a/assets/images/emoji/baby_symbol.png b/assets/images/emoji/baby_symbol.png
index 149dabf2..2e58725c 100644
Binary files a/assets/images/emoji/baby_symbol.png and b/assets/images/emoji/baby_symbol.png differ
diff --git a/assets/images/emoji/baggage_claim.png b/assets/images/emoji/baggage_claim.png
new file mode 100644
index 00000000..59ae044a
Binary files /dev/null and b/assets/images/emoji/baggage_claim.png differ
diff --git a/assets/images/emoji/balloon.png b/assets/images/emoji/balloon.png
index 9f0cbd76..03448970 100644
Binary files a/assets/images/emoji/balloon.png and b/assets/images/emoji/balloon.png differ
diff --git a/assets/images/emoji/ballot_box_with_check.png b/assets/images/emoji/ballot_box_with_check.png
new file mode 100644
index 00000000..f07a466c
Binary files /dev/null and b/assets/images/emoji/ballot_box_with_check.png differ
diff --git a/assets/images/emoji/bamboo.png b/assets/images/emoji/bamboo.png
index fe642bfc..fc858d0f 100644
Binary files a/assets/images/emoji/bamboo.png and b/assets/images/emoji/bamboo.png differ
diff --git a/assets/images/emoji/banana.png b/assets/images/emoji/banana.png
new file mode 100644
index 00000000..a0563afb
Binary files /dev/null and b/assets/images/emoji/banana.png differ
diff --git a/assets/images/emoji/bangbang.png b/assets/images/emoji/bangbang.png
new file mode 100644
index 00000000..7270f0af
Binary files /dev/null and b/assets/images/emoji/bangbang.png differ
diff --git a/assets/images/emoji/bank.png b/assets/images/emoji/bank.png
index 74402657..1faa8777 100644
Binary files a/assets/images/emoji/bank.png and b/assets/images/emoji/bank.png differ
diff --git a/assets/images/emoji/bar_chart.png b/assets/images/emoji/bar_chart.png
new file mode 100644
index 00000000..09d7301c
Binary files /dev/null and b/assets/images/emoji/bar_chart.png differ
diff --git a/assets/images/emoji/barber.png b/assets/images/emoji/barber.png
index 6081b417..a10cb232 100644
Binary files a/assets/images/emoji/barber.png and b/assets/images/emoji/barber.png differ
diff --git a/assets/images/emoji/baseball.png b/assets/images/emoji/baseball.png
index 39b29b37..da004e2e 100644
Binary files a/assets/images/emoji/baseball.png and b/assets/images/emoji/baseball.png differ
diff --git a/assets/images/emoji/basketball.png b/assets/images/emoji/basketball.png
index 0c4f880b..ef694bec 100644
Binary files a/assets/images/emoji/basketball.png and b/assets/images/emoji/basketball.png differ
diff --git a/assets/images/emoji/bath.png b/assets/images/emoji/bath.png
index 9672442c..8f75d1d2 100644
Binary files a/assets/images/emoji/bath.png and b/assets/images/emoji/bath.png differ
diff --git a/assets/images/emoji/bathtub.png b/assets/images/emoji/bathtub.png
new file mode 100644
index 00000000..1c3f844a
Binary files /dev/null and b/assets/images/emoji/bathtub.png differ
diff --git a/assets/images/emoji/battery.png b/assets/images/emoji/battery.png
new file mode 100644
index 00000000..aa7eedce
Binary files /dev/null and b/assets/images/emoji/battery.png differ
diff --git a/assets/images/emoji/bear.png b/assets/images/emoji/bear.png
index d01c4ce3..f5afe920 100644
Binary files a/assets/images/emoji/bear.png and b/assets/images/emoji/bear.png differ
diff --git a/assets/images/emoji/bee.png b/assets/images/emoji/bee.png
new file mode 100644
index 00000000..f5373395
Binary files /dev/null and b/assets/images/emoji/bee.png differ
diff --git a/assets/images/emoji/beer.png b/assets/images/emoji/beer.png
index da1e34ab..cd78bed7 100644
Binary files a/assets/images/emoji/beer.png and b/assets/images/emoji/beer.png differ
diff --git a/assets/images/emoji/beers.png b/assets/images/emoji/beers.png
index c6e2d638..cc5e4ab5 100644
Binary files a/assets/images/emoji/beers.png and b/assets/images/emoji/beers.png differ
diff --git a/assets/images/emoji/beetle.png b/assets/images/emoji/beetle.png
new file mode 100644
index 00000000..222577ca
Binary files /dev/null and b/assets/images/emoji/beetle.png differ
diff --git a/assets/images/emoji/beginner.png b/assets/images/emoji/beginner.png
index 784a81e1..1f022d17 100644
Binary files a/assets/images/emoji/beginner.png and b/assets/images/emoji/beginner.png differ
diff --git a/assets/images/emoji/bell.png b/assets/images/emoji/bell.png
index df5d66ab..69acceb2 100644
Binary files a/assets/images/emoji/bell.png and b/assets/images/emoji/bell.png differ
diff --git a/assets/images/emoji/bento.png b/assets/images/emoji/bento.png
index a66a2f5f..c6d99e89 100644
Binary files a/assets/images/emoji/bento.png and b/assets/images/emoji/bento.png differ
diff --git a/assets/images/emoji/bicyclist.png b/assets/images/emoji/bicyclist.png
new file mode 100644
index 00000000..4e3e0549
Binary files /dev/null and b/assets/images/emoji/bicyclist.png differ
diff --git a/assets/images/emoji/bike.png b/assets/images/emoji/bike.png
index 36bc09ba..65738602 100644
Binary files a/assets/images/emoji/bike.png and b/assets/images/emoji/bike.png differ
diff --git a/assets/images/emoji/bikini.png b/assets/images/emoji/bikini.png
index e62cf066..4ff63b40 100644
Binary files a/assets/images/emoji/bikini.png and b/assets/images/emoji/bikini.png differ
diff --git a/assets/images/emoji/bird.png b/assets/images/emoji/bird.png
index 88e5786a..e6be8c02 100644
Binary files a/assets/images/emoji/bird.png and b/assets/images/emoji/bird.png differ
diff --git a/assets/images/emoji/birthday.png b/assets/images/emoji/birthday.png
index 5b2c28c0..36e8edcb 100644
Binary files a/assets/images/emoji/birthday.png and b/assets/images/emoji/birthday.png differ
diff --git a/assets/images/emoji/black_circle.png b/assets/images/emoji/black_circle.png
new file mode 100644
index 00000000..e46f9df6
Binary files /dev/null and b/assets/images/emoji/black_circle.png differ
diff --git a/assets/images/emoji/black_joker.png b/assets/images/emoji/black_joker.png
new file mode 100644
index 00000000..4c78f361
Binary files /dev/null and b/assets/images/emoji/black_joker.png differ
diff --git a/assets/images/emoji/black_nib.png b/assets/images/emoji/black_nib.png
new file mode 100644
index 00000000..29f6994c
Binary files /dev/null and b/assets/images/emoji/black_nib.png differ
diff --git a/assets/images/emoji/black_square.png b/assets/images/emoji/black_square.png
index dcd4ca95..71da10de 100644
Binary files a/assets/images/emoji/black_square.png and b/assets/images/emoji/black_square.png differ
diff --git a/assets/images/emoji/black_square_button.png b/assets/images/emoji/black_square_button.png
new file mode 100644
index 00000000..f2597e95
Binary files /dev/null and b/assets/images/emoji/black_square_button.png differ
diff --git a/assets/images/emoji/blossom.png b/assets/images/emoji/blossom.png
new file mode 100644
index 00000000..55a97353
Binary files /dev/null and b/assets/images/emoji/blossom.png differ
diff --git a/assets/images/emoji/blowfish.png b/assets/images/emoji/blowfish.png
new file mode 100644
index 00000000..d3ad4658
Binary files /dev/null and b/assets/images/emoji/blowfish.png differ
diff --git a/assets/images/emoji/blue_book.png b/assets/images/emoji/blue_book.png
new file mode 100644
index 00000000..e2b9e8c7
Binary files /dev/null and b/assets/images/emoji/blue_book.png differ
diff --git a/assets/images/emoji/blue_car.png b/assets/images/emoji/blue_car.png
index badd22ea..978291e0 100644
Binary files a/assets/images/emoji/blue_car.png and b/assets/images/emoji/blue_car.png differ
diff --git a/assets/images/emoji/blue_heart.png b/assets/images/emoji/blue_heart.png
index a8105782..baa29b31 100644
Binary files a/assets/images/emoji/blue_heart.png and b/assets/images/emoji/blue_heart.png differ
diff --git a/assets/images/emoji/blush.png b/assets/images/emoji/blush.png
index 0b2628e9..3a95eb61 100644
Binary files a/assets/images/emoji/blush.png and b/assets/images/emoji/blush.png differ
diff --git a/assets/images/emoji/boar.png b/assets/images/emoji/boar.png
index 2bd9362f..8196ad4a 100644
Binary files a/assets/images/emoji/boar.png and b/assets/images/emoji/boar.png differ
diff --git a/assets/images/emoji/boat.png b/assets/images/emoji/boat.png
index 8084f0e5..ff656dc6 100644
Binary files a/assets/images/emoji/boat.png and b/assets/images/emoji/boat.png differ
diff --git a/assets/images/emoji/bomb.png b/assets/images/emoji/bomb.png
index 322a3f1b..3289787d 100644
Binary files a/assets/images/emoji/bomb.png and b/assets/images/emoji/bomb.png differ
diff --git a/assets/images/emoji/book.png b/assets/images/emoji/book.png
index 3fa6b7c2..8b698415 100644
Binary files a/assets/images/emoji/book.png and b/assets/images/emoji/book.png differ
diff --git a/assets/images/emoji/bookmark.png b/assets/images/emoji/bookmark.png
new file mode 100644
index 00000000..dbee45c6
Binary files /dev/null and b/assets/images/emoji/bookmark.png differ
diff --git a/assets/images/emoji/bookmark_tabs.png b/assets/images/emoji/bookmark_tabs.png
new file mode 100644
index 00000000..0c4e3bf1
Binary files /dev/null and b/assets/images/emoji/bookmark_tabs.png differ
diff --git a/assets/images/emoji/books.png b/assets/images/emoji/books.png
new file mode 100644
index 00000000..dca06a1a
Binary files /dev/null and b/assets/images/emoji/books.png differ
diff --git a/assets/images/emoji/boom.png b/assets/images/emoji/boom.png
new file mode 100644
index 00000000..bddeb8f4
Binary files /dev/null and b/assets/images/emoji/boom.png differ
diff --git a/assets/images/emoji/boot.png b/assets/images/emoji/boot.png
index fd52cafa..58d0fdbc 100644
Binary files a/assets/images/emoji/boot.png and b/assets/images/emoji/boot.png differ
diff --git a/assets/images/emoji/bouquet.png b/assets/images/emoji/bouquet.png
index 791bfe86..ce637832 100644
Binary files a/assets/images/emoji/bouquet.png and b/assets/images/emoji/bouquet.png differ
diff --git a/assets/images/emoji/bow.png b/assets/images/emoji/bow.png
index 87c85122..024cb610 100644
Binary files a/assets/images/emoji/bow.png and b/assets/images/emoji/bow.png differ
diff --git a/assets/images/emoji/bowling.png b/assets/images/emoji/bowling.png
new file mode 100644
index 00000000..13d8ece2
Binary files /dev/null and b/assets/images/emoji/bowling.png differ
diff --git a/assets/images/emoji/bowtie.png b/assets/images/emoji/bowtie.png
index 86550b32..28ff0c78 100644
Binary files a/assets/images/emoji/bowtie.png and b/assets/images/emoji/bowtie.png differ
diff --git a/assets/images/emoji/boy.png b/assets/images/emoji/boy.png
index 584bb395..f79f1f29 100644
Binary files a/assets/images/emoji/boy.png and b/assets/images/emoji/boy.png differ
diff --git a/assets/images/emoji/bread.png b/assets/images/emoji/bread.png
index 934bb3c5..7e7c6375 100644
Binary files a/assets/images/emoji/bread.png and b/assets/images/emoji/bread.png differ
diff --git a/assets/images/emoji/bride_with_veil.png b/assets/images/emoji/bride_with_veil.png
new file mode 100644
index 00000000..dd0b0cfd
Binary files /dev/null and b/assets/images/emoji/bride_with_veil.png differ
diff --git a/assets/images/emoji/bridge_at_night.png b/assets/images/emoji/bridge_at_night.png
new file mode 100644
index 00000000..495b06c3
Binary files /dev/null and b/assets/images/emoji/bridge_at_night.png differ
diff --git a/assets/images/emoji/briefcase.png b/assets/images/emoji/briefcase.png
index 3491b84d..46e82b00 100644
Binary files a/assets/images/emoji/briefcase.png and b/assets/images/emoji/briefcase.png differ
diff --git a/assets/images/emoji/broken_heart.png b/assets/images/emoji/broken_heart.png
index cc70df0c..a1bc850e 100644
Binary files a/assets/images/emoji/broken_heart.png and b/assets/images/emoji/broken_heart.png differ
diff --git a/assets/images/emoji/bug.png b/assets/images/emoji/bug.png
index 2230749e..c2eaf7a7 100644
Binary files a/assets/images/emoji/bug.png and b/assets/images/emoji/bug.png differ
diff --git a/assets/images/emoji/bulb.png b/assets/images/emoji/bulb.png
index 02638b30..23afca1c 100644
Binary files a/assets/images/emoji/bulb.png and b/assets/images/emoji/bulb.png differ
diff --git a/assets/images/emoji/bullettrain_front.png b/assets/images/emoji/bullettrain_front.png
index c64c517c..16651acf 100644
Binary files a/assets/images/emoji/bullettrain_front.png and b/assets/images/emoji/bullettrain_front.png differ
diff --git a/assets/images/emoji/bullettrain_side.png b/assets/images/emoji/bullettrain_side.png
index 39499c1e..8eca3684 100644
Binary files a/assets/images/emoji/bullettrain_side.png and b/assets/images/emoji/bullettrain_side.png differ
diff --git a/assets/images/emoji/bus.png b/assets/images/emoji/bus.png
index 7014c9ae..823aa39e 100644
Binary files a/assets/images/emoji/bus.png and b/assets/images/emoji/bus.png differ
diff --git a/assets/images/emoji/busstop.png b/assets/images/emoji/busstop.png
index c806a037..94894847 100644
Binary files a/assets/images/emoji/busstop.png and b/assets/images/emoji/busstop.png differ
diff --git a/assets/images/emoji/bust_in_silhouette.png b/assets/images/emoji/bust_in_silhouette.png
new file mode 100644
index 00000000..d1313986
Binary files /dev/null and b/assets/images/emoji/bust_in_silhouette.png differ
diff --git a/assets/images/emoji/busts_in_silhouette.png b/assets/images/emoji/busts_in_silhouette.png
new file mode 100644
index 00000000..1f3aabcf
Binary files /dev/null and b/assets/images/emoji/busts_in_silhouette.png differ
diff --git a/assets/images/emoji/cactus.png b/assets/images/emoji/cactus.png
index fb8eb2de..5a2c3cc7 100644
Binary files a/assets/images/emoji/cactus.png and b/assets/images/emoji/cactus.png differ
diff --git a/assets/images/emoji/cake.png b/assets/images/emoji/cake.png
index 80b9e654..efeb9b4b 100644
Binary files a/assets/images/emoji/cake.png and b/assets/images/emoji/cake.png differ
diff --git a/assets/images/emoji/calendar.png b/assets/images/emoji/calendar.png
new file mode 100644
index 00000000..900b868b
Binary files /dev/null and b/assets/images/emoji/calendar.png differ
diff --git a/assets/images/emoji/calling.png b/assets/images/emoji/calling.png
index 4309feb5..837897f2 100644
Binary files a/assets/images/emoji/calling.png and b/assets/images/emoji/calling.png differ
diff --git a/assets/images/emoji/camel.png b/assets/images/emoji/camel.png
index 5d022a41..496c186a 100644
Binary files a/assets/images/emoji/camel.png and b/assets/images/emoji/camel.png differ
diff --git a/assets/images/emoji/camera.png b/assets/images/emoji/camera.png
index 9909c287..397d03b3 100644
Binary files a/assets/images/emoji/camera.png and b/assets/images/emoji/camera.png differ
diff --git a/assets/images/emoji/cancer.png b/assets/images/emoji/cancer.png
index e0c95e8c..ea43a4a2 100644
Binary files a/assets/images/emoji/cancer.png and b/assets/images/emoji/cancer.png differ
diff --git a/assets/images/emoji/candy.png b/assets/images/emoji/candy.png
new file mode 100644
index 00000000..33722f23
Binary files /dev/null and b/assets/images/emoji/candy.png differ
diff --git a/assets/images/emoji/capital_abcd.png b/assets/images/emoji/capital_abcd.png
new file mode 100644
index 00000000..ffc0cba4
Binary files /dev/null and b/assets/images/emoji/capital_abcd.png differ
diff --git a/assets/images/emoji/capricorn.png b/assets/images/emoji/capricorn.png
index 6c73c8e3..f2044e78 100644
Binary files a/assets/images/emoji/capricorn.png and b/assets/images/emoji/capricorn.png differ
diff --git a/assets/images/emoji/car.png b/assets/images/emoji/car.png
index c8bc8020..d70a2f06 100644
Binary files a/assets/images/emoji/car.png and b/assets/images/emoji/car.png differ
diff --git a/assets/images/emoji/card_index.png b/assets/images/emoji/card_index.png
new file mode 100644
index 00000000..374e94e9
Binary files /dev/null and b/assets/images/emoji/card_index.png differ
diff --git a/assets/images/emoji/carousel_horse.png b/assets/images/emoji/carousel_horse.png
new file mode 100644
index 00000000..765d2c0a
Binary files /dev/null and b/assets/images/emoji/carousel_horse.png differ
diff --git a/assets/images/emoji/cat.png b/assets/images/emoji/cat.png
index 31631e59..09b9ef79 100644
Binary files a/assets/images/emoji/cat.png and b/assets/images/emoji/cat.png differ
diff --git a/assets/images/emoji/cat2.png b/assets/images/emoji/cat2.png
new file mode 100644
index 00000000..6dbc4c71
Binary files /dev/null and b/assets/images/emoji/cat2.png differ
diff --git a/assets/images/emoji/cd.png b/assets/images/emoji/cd.png
index 9dec2a4b..baff835c 100644
Binary files a/assets/images/emoji/cd.png and b/assets/images/emoji/cd.png differ
diff --git a/assets/images/emoji/chart.png b/assets/images/emoji/chart.png
index 14853baf..ac2c4bb0 100644
Binary files a/assets/images/emoji/chart.png and b/assets/images/emoji/chart.png differ
diff --git a/assets/images/emoji/chart_with_downwards_trend.png b/assets/images/emoji/chart_with_downwards_trend.png
new file mode 100644
index 00000000..cb0d2a11
Binary files /dev/null and b/assets/images/emoji/chart_with_downwards_trend.png differ
diff --git a/assets/images/emoji/chart_with_upwards_trend.png b/assets/images/emoji/chart_with_upwards_trend.png
new file mode 100644
index 00000000..7c66745c
Binary files /dev/null and b/assets/images/emoji/chart_with_upwards_trend.png differ
diff --git a/assets/images/emoji/checkered_flag.png b/assets/images/emoji/checkered_flag.png
index f65aa36c..ead4a68d 100644
Binary files a/assets/images/emoji/checkered_flag.png and b/assets/images/emoji/checkered_flag.png differ
diff --git a/assets/images/emoji/cherries.png b/assets/images/emoji/cherries.png
new file mode 100644
index 00000000..8d3e044f
Binary files /dev/null and b/assets/images/emoji/cherries.png differ
diff --git a/assets/images/emoji/cherry_blossom.png b/assets/images/emoji/cherry_blossom.png
index 2d7612c2..e0315549 100644
Binary files a/assets/images/emoji/cherry_blossom.png and b/assets/images/emoji/cherry_blossom.png differ
diff --git a/assets/images/emoji/chestnut.png b/assets/images/emoji/chestnut.png
new file mode 100644
index 00000000..066fb6bf
Binary files /dev/null and b/assets/images/emoji/chestnut.png differ
diff --git a/assets/images/emoji/chicken.png b/assets/images/emoji/chicken.png
index 2b57ed25..6d25c0ef 100644
Binary files a/assets/images/emoji/chicken.png and b/assets/images/emoji/chicken.png differ
diff --git a/assets/images/emoji/children_crossing.png b/assets/images/emoji/children_crossing.png
new file mode 100644
index 00000000..b0302ae6
Binary files /dev/null and b/assets/images/emoji/children_crossing.png differ
diff --git a/assets/images/emoji/chocolate_bar.png b/assets/images/emoji/chocolate_bar.png
new file mode 100644
index 00000000..c7ec19d0
Binary files /dev/null and b/assets/images/emoji/chocolate_bar.png differ
diff --git a/assets/images/emoji/christmas_tree.png b/assets/images/emoji/christmas_tree.png
index ec99e0be..d813b959 100644
Binary files a/assets/images/emoji/christmas_tree.png and b/assets/images/emoji/christmas_tree.png differ
diff --git a/assets/images/emoji/church.png b/assets/images/emoji/church.png
index 3600c589..4c07c6b9 100644
Binary files a/assets/images/emoji/church.png and b/assets/images/emoji/church.png differ
diff --git a/assets/images/emoji/cinema.png b/assets/images/emoji/cinema.png
index 448ff809..a990ccf9 100644
Binary files a/assets/images/emoji/cinema.png and b/assets/images/emoji/cinema.png differ
diff --git a/assets/images/emoji/circus_tent.png b/assets/images/emoji/circus_tent.png
new file mode 100644
index 00000000..4af8719a
Binary files /dev/null and b/assets/images/emoji/circus_tent.png differ
diff --git a/assets/images/emoji/city_sunrise.png b/assets/images/emoji/city_sunrise.png
index a076d9df..91ca2a40 100644
Binary files a/assets/images/emoji/city_sunrise.png and b/assets/images/emoji/city_sunrise.png differ
diff --git a/assets/images/emoji/city_sunset.png b/assets/images/emoji/city_sunset.png
index 78fc5c4a..7cb178a2 100644
Binary files a/assets/images/emoji/city_sunset.png and b/assets/images/emoji/city_sunset.png differ
diff --git a/assets/images/emoji/cl.png b/assets/images/emoji/cl.png
new file mode 100644
index 00000000..15ac6752
Binary files /dev/null and b/assets/images/emoji/cl.png differ
diff --git a/assets/images/emoji/clap.png b/assets/images/emoji/clap.png
index a3845d70..d01c982a 100644
Binary files a/assets/images/emoji/clap.png and b/assets/images/emoji/clap.png differ
diff --git a/assets/images/emoji/clapper.png b/assets/images/emoji/clapper.png
index 1af03bd7..4e1dc111 100644
Binary files a/assets/images/emoji/clapper.png and b/assets/images/emoji/clapper.png differ
diff --git a/assets/images/emoji/clipboard.png b/assets/images/emoji/clipboard.png
new file mode 100644
index 00000000..e2c74e6d
Binary files /dev/null and b/assets/images/emoji/clipboard.png differ
diff --git a/assets/images/emoji/clock1.png b/assets/images/emoji/clock1.png
index 4c55f8f7..9174d4e0 100644
Binary files a/assets/images/emoji/clock1.png and b/assets/images/emoji/clock1.png differ
diff --git a/assets/images/emoji/clock10.png b/assets/images/emoji/clock10.png
index d097b7f0..39f590d6 100644
Binary files a/assets/images/emoji/clock10.png and b/assets/images/emoji/clock10.png differ
diff --git a/assets/images/emoji/clock1030.png b/assets/images/emoji/clock1030.png
new file mode 100644
index 00000000..0483b305
Binary files /dev/null and b/assets/images/emoji/clock1030.png differ
diff --git a/assets/images/emoji/clock11.png b/assets/images/emoji/clock11.png
index 0a101daa..ddb53fad 100644
Binary files a/assets/images/emoji/clock11.png and b/assets/images/emoji/clock11.png differ
diff --git a/assets/images/emoji/clock1130.png b/assets/images/emoji/clock1130.png
new file mode 100644
index 00000000..415999ec
Binary files /dev/null and b/assets/images/emoji/clock1130.png differ
diff --git a/assets/images/emoji/clock12.png b/assets/images/emoji/clock12.png
index e028d673..87b13287 100644
Binary files a/assets/images/emoji/clock12.png and b/assets/images/emoji/clock12.png differ
diff --git a/assets/images/emoji/clock1230.png b/assets/images/emoji/clock1230.png
new file mode 100644
index 00000000..a6527154
Binary files /dev/null and b/assets/images/emoji/clock1230.png differ
diff --git a/assets/images/emoji/clock130.png b/assets/images/emoji/clock130.png
new file mode 100644
index 00000000..90ea5b91
Binary files /dev/null and b/assets/images/emoji/clock130.png differ
diff --git a/assets/images/emoji/clock2.png b/assets/images/emoji/clock2.png
index 83a23ddb..65b3b3af 100644
Binary files a/assets/images/emoji/clock2.png and b/assets/images/emoji/clock2.png differ
diff --git a/assets/images/emoji/clock230.png b/assets/images/emoji/clock230.png
new file mode 100644
index 00000000..f12c6912
Binary files /dev/null and b/assets/images/emoji/clock230.png differ
diff --git a/assets/images/emoji/clock3.png b/assets/images/emoji/clock3.png
index 880176e4..3e44d64e 100644
Binary files a/assets/images/emoji/clock3.png and b/assets/images/emoji/clock3.png differ
diff --git a/assets/images/emoji/clock330.png b/assets/images/emoji/clock330.png
new file mode 100644
index 00000000..1dc9628e
Binary files /dev/null and b/assets/images/emoji/clock330.png differ
diff --git a/assets/images/emoji/clock4.png b/assets/images/emoji/clock4.png
index cc9f3648..948ed1a3 100644
Binary files a/assets/images/emoji/clock4.png and b/assets/images/emoji/clock4.png differ
diff --git a/assets/images/emoji/clock430.png b/assets/images/emoji/clock430.png
new file mode 100644
index 00000000..5d6b16a2
Binary files /dev/null and b/assets/images/emoji/clock430.png differ
diff --git a/assets/images/emoji/clock5.png b/assets/images/emoji/clock5.png
index 49626ea7..b010b4f8 100644
Binary files a/assets/images/emoji/clock5.png and b/assets/images/emoji/clock5.png differ
diff --git a/assets/images/emoji/clock530.png b/assets/images/emoji/clock530.png
new file mode 100644
index 00000000..e08d4ad2
Binary files /dev/null and b/assets/images/emoji/clock530.png differ
diff --git a/assets/images/emoji/clock6.png b/assets/images/emoji/clock6.png
index 08cc70d2..76bf8cf1 100644
Binary files a/assets/images/emoji/clock6.png and b/assets/images/emoji/clock6.png differ
diff --git a/assets/images/emoji/clock630.png b/assets/images/emoji/clock630.png
new file mode 100644
index 00000000..46f0681f
Binary files /dev/null and b/assets/images/emoji/clock630.png differ
diff --git a/assets/images/emoji/clock7.png b/assets/images/emoji/clock7.png
index 26fcf6e0..d48f645d 100644
Binary files a/assets/images/emoji/clock7.png and b/assets/images/emoji/clock7.png differ
diff --git a/assets/images/emoji/clock730.png b/assets/images/emoji/clock730.png
new file mode 100644
index 00000000..f2807de2
Binary files /dev/null and b/assets/images/emoji/clock730.png differ
diff --git a/assets/images/emoji/clock8.png b/assets/images/emoji/clock8.png
index df1b0ad2..74c770d8 100644
Binary files a/assets/images/emoji/clock8.png and b/assets/images/emoji/clock8.png differ
diff --git a/assets/images/emoji/clock830.png b/assets/images/emoji/clock830.png
new file mode 100644
index 00000000..f58f3dad
Binary files /dev/null and b/assets/images/emoji/clock830.png differ
diff --git a/assets/images/emoji/clock9.png b/assets/images/emoji/clock9.png
index 649a79cb..f009d14a 100644
Binary files a/assets/images/emoji/clock9.png and b/assets/images/emoji/clock9.png differ
diff --git a/assets/images/emoji/clock930.png b/assets/images/emoji/clock930.png
new file mode 100644
index 00000000..fd352214
Binary files /dev/null and b/assets/images/emoji/clock930.png differ
diff --git a/assets/images/emoji/closed_book.png b/assets/images/emoji/closed_book.png
new file mode 100644
index 00000000..484029c5
Binary files /dev/null and b/assets/images/emoji/closed_book.png differ
diff --git a/assets/images/emoji/closed_lock_with_key.png b/assets/images/emoji/closed_lock_with_key.png
new file mode 100644
index 00000000..e6fdf6cb
Binary files /dev/null and b/assets/images/emoji/closed_lock_with_key.png differ
diff --git a/assets/images/emoji/closed_umbrella.png b/assets/images/emoji/closed_umbrella.png
index 0fdfb872..0b719f08 100644
Binary files a/assets/images/emoji/closed_umbrella.png and b/assets/images/emoji/closed_umbrella.png differ
diff --git a/assets/images/emoji/cloud.png b/assets/images/emoji/cloud.png
index 564d056d..b31c08c0 100644
Binary files a/assets/images/emoji/cloud.png and b/assets/images/emoji/cloud.png differ
diff --git a/assets/images/emoji/clubs.png b/assets/images/emoji/clubs.png
index cc1b874b..bfab5365 100644
Binary files a/assets/images/emoji/clubs.png and b/assets/images/emoji/clubs.png differ
diff --git a/assets/images/emoji/cn.png b/assets/images/emoji/cn.png
index 75cf144d..b30dcc53 100644
Binary files a/assets/images/emoji/cn.png and b/assets/images/emoji/cn.png differ
diff --git a/assets/images/emoji/cocktail.png b/assets/images/emoji/cocktail.png
index c003656e..28b45ea5 100644
Binary files a/assets/images/emoji/cocktail.png and b/assets/images/emoji/cocktail.png differ
diff --git a/assets/images/emoji/coffee.png b/assets/images/emoji/coffee.png
index 076281d5..57e1adcb 100644
Binary files a/assets/images/emoji/coffee.png and b/assets/images/emoji/coffee.png differ
diff --git a/assets/images/emoji/cold_sweat.png b/assets/images/emoji/cold_sweat.png
index dc53962a..b9e39bc6 100644
Binary files a/assets/images/emoji/cold_sweat.png and b/assets/images/emoji/cold_sweat.png differ
diff --git a/assets/images/emoji/collision.png b/assets/images/emoji/collision.png
new file mode 100644
index 00000000..bddeb8f4
Binary files /dev/null and b/assets/images/emoji/collision.png differ
diff --git a/assets/images/emoji/computer.png b/assets/images/emoji/computer.png
index f7075d4b..d4d26876 100644
Binary files a/assets/images/emoji/computer.png and b/assets/images/emoji/computer.png differ
diff --git a/assets/images/emoji/confetti_ball.png b/assets/images/emoji/confetti_ball.png
new file mode 100644
index 00000000..bd293e3d
Binary files /dev/null and b/assets/images/emoji/confetti_ball.png differ
diff --git a/assets/images/emoji/confounded.png b/assets/images/emoji/confounded.png
index 219dafef..762c3766 100644
Binary files a/assets/images/emoji/confounded.png and b/assets/images/emoji/confounded.png differ
diff --git a/assets/images/emoji/confused.png b/assets/images/emoji/confused.png
new file mode 100644
index 00000000..8dc494db
Binary files /dev/null and b/assets/images/emoji/confused.png differ
diff --git a/assets/images/emoji/congratulations.png b/assets/images/emoji/congratulations.png
index 7d783977..dcbb1d22 100644
Binary files a/assets/images/emoji/congratulations.png and b/assets/images/emoji/congratulations.png differ
diff --git a/assets/images/emoji/construction.png b/assets/images/emoji/construction.png
index b0c95584..523e9f10 100644
Binary files a/assets/images/emoji/construction.png and b/assets/images/emoji/construction.png differ
diff --git a/assets/images/emoji/construction_worker.png b/assets/images/emoji/construction_worker.png
index 7eed109b..4d648604 100644
Binary files a/assets/images/emoji/construction_worker.png and b/assets/images/emoji/construction_worker.png differ
diff --git a/assets/images/emoji/convenience_store.png b/assets/images/emoji/convenience_store.png
index 5c1a906a..671696c2 100644
Binary files a/assets/images/emoji/convenience_store.png and b/assets/images/emoji/convenience_store.png differ
diff --git a/assets/images/emoji/cookie.png b/assets/images/emoji/cookie.png
new file mode 100644
index 00000000..653edb25
Binary files /dev/null and b/assets/images/emoji/cookie.png differ
diff --git a/assets/images/emoji/cool.png b/assets/images/emoji/cool.png
index 8dbf6aa6..937dcd79 100644
Binary files a/assets/images/emoji/cool.png and b/assets/images/emoji/cool.png differ
diff --git a/assets/images/emoji/cop.png b/assets/images/emoji/cop.png
index b3a62914..43a5a84f 100644
Binary files a/assets/images/emoji/cop.png and b/assets/images/emoji/cop.png differ
diff --git a/assets/images/emoji/copyright.png b/assets/images/emoji/copyright.png
index 00a6b07a..38493c33 100644
Binary files a/assets/images/emoji/copyright.png and b/assets/images/emoji/copyright.png differ
diff --git a/assets/images/emoji/corn.png b/assets/images/emoji/corn.png
new file mode 100644
index 00000000..fe5d8b12
Binary files /dev/null and b/assets/images/emoji/corn.png differ
diff --git a/assets/images/emoji/couple.png b/assets/images/emoji/couple.png
index 698ed8ce..9e51f40e 100644
Binary files a/assets/images/emoji/couple.png and b/assets/images/emoji/couple.png differ
diff --git a/assets/images/emoji/couple_with_heart.png b/assets/images/emoji/couple_with_heart.png
index 8652482f..c503f40a 100644
Binary files a/assets/images/emoji/couple_with_heart.png and b/assets/images/emoji/couple_with_heart.png differ
diff --git a/assets/images/emoji/couplekiss.png b/assets/images/emoji/couplekiss.png
index 0468b41c..d0279082 100644
Binary files a/assets/images/emoji/couplekiss.png and b/assets/images/emoji/couplekiss.png differ
diff --git a/assets/images/emoji/cow.png b/assets/images/emoji/cow.png
index efe8a44e..12e1ab6c 100644
Binary files a/assets/images/emoji/cow.png and b/assets/images/emoji/cow.png differ
diff --git a/assets/images/emoji/cow2.png b/assets/images/emoji/cow2.png
new file mode 100644
index 00000000..594c9215
Binary files /dev/null and b/assets/images/emoji/cow2.png differ
diff --git a/assets/images/emoji/credit_card.png b/assets/images/emoji/credit_card.png
new file mode 100644
index 00000000..be1c1dd3
Binary files /dev/null and b/assets/images/emoji/credit_card.png differ
diff --git a/assets/images/emoji/crocodile.png b/assets/images/emoji/crocodile.png
new file mode 100644
index 00000000..7435d5ab
Binary files /dev/null and b/assets/images/emoji/crocodile.png differ
diff --git a/assets/images/emoji/crossed_flags.png b/assets/images/emoji/crossed_flags.png
index 9f95128c..2397bcd0 100644
Binary files a/assets/images/emoji/crossed_flags.png and b/assets/images/emoji/crossed_flags.png differ
diff --git a/assets/images/emoji/crown.png b/assets/images/emoji/crown.png
index 5b7e2a9e..39da1d52 100644
Binary files a/assets/images/emoji/crown.png and b/assets/images/emoji/crown.png differ
diff --git a/assets/images/emoji/cry.png b/assets/images/emoji/cry.png
index 11175cee..6d0d9afd 100644
Binary files a/assets/images/emoji/cry.png and b/assets/images/emoji/cry.png differ
diff --git a/assets/images/emoji/crying_cat_face.png b/assets/images/emoji/crying_cat_face.png
new file mode 100644
index 00000000..42d4c27c
Binary files /dev/null and b/assets/images/emoji/crying_cat_face.png differ
diff --git a/assets/images/emoji/crystal_ball.png b/assets/images/emoji/crystal_ball.png
new file mode 100644
index 00000000..6d2c6c42
Binary files /dev/null and b/assets/images/emoji/crystal_ball.png differ
diff --git a/assets/images/emoji/cupid.png b/assets/images/emoji/cupid.png
index 9791bfb0..49872847 100644
Binary files a/assets/images/emoji/cupid.png and b/assets/images/emoji/cupid.png differ
diff --git a/assets/images/emoji/curly_loop.png b/assets/images/emoji/curly_loop.png
new file mode 100644
index 00000000..7dd841d0
Binary files /dev/null and b/assets/images/emoji/curly_loop.png differ
diff --git a/assets/images/emoji/currency_exchange.png b/assets/images/emoji/currency_exchange.png
index 8d846b85..6ebebe70 100644
Binary files a/assets/images/emoji/currency_exchange.png and b/assets/images/emoji/currency_exchange.png differ
diff --git a/assets/images/emoji/curry.png b/assets/images/emoji/curry.png
index cd470810..7983c706 100644
Binary files a/assets/images/emoji/curry.png and b/assets/images/emoji/curry.png differ
diff --git a/assets/images/emoji/custard.png b/assets/images/emoji/custard.png
new file mode 100644
index 00000000..9f843b4c
Binary files /dev/null and b/assets/images/emoji/custard.png differ
diff --git a/assets/images/emoji/customs.png b/assets/images/emoji/customs.png
new file mode 100644
index 00000000..92691e31
Binary files /dev/null and b/assets/images/emoji/customs.png differ
diff --git a/assets/images/emoji/cyclone.png b/assets/images/emoji/cyclone.png
index 94216ffb..5fd2e451 100644
Binary files a/assets/images/emoji/cyclone.png and b/assets/images/emoji/cyclone.png differ
diff --git a/assets/images/emoji/dancer.png b/assets/images/emoji/dancer.png
index 2a9895b4..6885a0bc 100644
Binary files a/assets/images/emoji/dancer.png and b/assets/images/emoji/dancer.png differ
diff --git a/assets/images/emoji/dancers.png b/assets/images/emoji/dancers.png
index 4e48231e..2dfb451a 100644
Binary files a/assets/images/emoji/dancers.png and b/assets/images/emoji/dancers.png differ
diff --git a/assets/images/emoji/dango.png b/assets/images/emoji/dango.png
index 27d2c1f8..2d042aeb 100644
Binary files a/assets/images/emoji/dango.png and b/assets/images/emoji/dango.png differ
diff --git a/assets/images/emoji/dart.png b/assets/images/emoji/dart.png
index d35614a2..0438fe54 100644
Binary files a/assets/images/emoji/dart.png and b/assets/images/emoji/dart.png differ
diff --git a/assets/images/emoji/dash.png b/assets/images/emoji/dash.png
index 534ef442..dc2c0a8f 100644
Binary files a/assets/images/emoji/dash.png and b/assets/images/emoji/dash.png differ
diff --git a/assets/images/emoji/date.png b/assets/images/emoji/date.png
new file mode 100644
index 00000000..6ad2efa5
Binary files /dev/null and b/assets/images/emoji/date.png differ
diff --git a/assets/images/emoji/de.png b/assets/images/emoji/de.png
index f0dde235..16a28548 100644
Binary files a/assets/images/emoji/de.png and b/assets/images/emoji/de.png differ
diff --git a/assets/images/emoji/deciduous_tree.png b/assets/images/emoji/deciduous_tree.png
new file mode 100644
index 00000000..3fdf8c00
Binary files /dev/null and b/assets/images/emoji/deciduous_tree.png differ
diff --git a/assets/images/emoji/department_store.png b/assets/images/emoji/department_store.png
index 4330c8ac..68d959c5 100644
Binary files a/assets/images/emoji/department_store.png and b/assets/images/emoji/department_store.png differ
diff --git a/assets/images/emoji/diamond_shape_with_a_dot_inside.png b/assets/images/emoji/diamond_shape_with_a_dot_inside.png
new file mode 100644
index 00000000..dfd1098b
Binary files /dev/null and b/assets/images/emoji/diamond_shape_with_a_dot_inside.png differ
diff --git a/assets/images/emoji/diamonds.png b/assets/images/emoji/diamonds.png
index be9cdffc..fe082775 100644
Binary files a/assets/images/emoji/diamonds.png and b/assets/images/emoji/diamonds.png differ
diff --git a/assets/images/emoji/disappointed.png b/assets/images/emoji/disappointed.png
index cc18531c..82552008 100644
Binary files a/assets/images/emoji/disappointed.png and b/assets/images/emoji/disappointed.png differ
diff --git a/assets/images/emoji/disappointed_relieved.png b/assets/images/emoji/disappointed_relieved.png
new file mode 100644
index 00000000..fa5f9e7f
Binary files /dev/null and b/assets/images/emoji/disappointed_relieved.png differ
diff --git a/assets/images/emoji/dizzy.png b/assets/images/emoji/dizzy.png
new file mode 100644
index 00000000..467f73e8
Binary files /dev/null and b/assets/images/emoji/dizzy.png differ
diff --git a/assets/images/emoji/dizzy_face.png b/assets/images/emoji/dizzy_face.png
new file mode 100644
index 00000000..8001d6ff
Binary files /dev/null and b/assets/images/emoji/dizzy_face.png differ
diff --git a/assets/images/emoji/do_not_litter.png b/assets/images/emoji/do_not_litter.png
new file mode 100644
index 00000000..38c7ae7a
Binary files /dev/null and b/assets/images/emoji/do_not_litter.png differ
diff --git a/assets/images/emoji/dog.png b/assets/images/emoji/dog.png
index 43dbf654..389a02bf 100644
Binary files a/assets/images/emoji/dog.png and b/assets/images/emoji/dog.png differ
diff --git a/assets/images/emoji/dog2.png b/assets/images/emoji/dog2.png
new file mode 100644
index 00000000..c7f6a24a
Binary files /dev/null and b/assets/images/emoji/dog2.png differ
diff --git a/assets/images/emoji/dollar.png b/assets/images/emoji/dollar.png
new file mode 100644
index 00000000..63de8849
Binary files /dev/null and b/assets/images/emoji/dollar.png differ
diff --git a/assets/images/emoji/dolls.png b/assets/images/emoji/dolls.png
index 0edb37b0..47ce3390 100644
Binary files a/assets/images/emoji/dolls.png and b/assets/images/emoji/dolls.png differ
diff --git a/assets/images/emoji/dolphin.png b/assets/images/emoji/dolphin.png
index bc15516f..9326077a 100644
Binary files a/assets/images/emoji/dolphin.png and b/assets/images/emoji/dolphin.png differ
diff --git a/assets/images/emoji/donut.png b/assets/images/emoji/donut.png
new file mode 100644
index 00000000..ccf86912
Binary files /dev/null and b/assets/images/emoji/donut.png differ
diff --git a/assets/images/emoji/door.png b/assets/images/emoji/door.png
new file mode 100644
index 00000000..83c819ae
Binary files /dev/null and b/assets/images/emoji/door.png differ
diff --git a/assets/images/emoji/doughnut.png b/assets/images/emoji/doughnut.png
new file mode 100644
index 00000000..ccf86912
Binary files /dev/null and b/assets/images/emoji/doughnut.png differ
diff --git a/assets/images/emoji/dragon.png b/assets/images/emoji/dragon.png
new file mode 100644
index 00000000..88d4784b
Binary files /dev/null and b/assets/images/emoji/dragon.png differ
diff --git a/assets/images/emoji/dragon_face.png b/assets/images/emoji/dragon_face.png
new file mode 100644
index 00000000..e5e556bd
Binary files /dev/null and b/assets/images/emoji/dragon_face.png differ
diff --git a/assets/images/emoji/dress.png b/assets/images/emoji/dress.png
index 3884e546..6434e2e2 100644
Binary files a/assets/images/emoji/dress.png and b/assets/images/emoji/dress.png differ
diff --git a/assets/images/emoji/dromedary_camel.png b/assets/images/emoji/dromedary_camel.png
new file mode 100644
index 00000000..c8c7b9ff
Binary files /dev/null and b/assets/images/emoji/dromedary_camel.png differ
diff --git a/assets/images/emoji/droplet.png b/assets/images/emoji/droplet.png
new file mode 100644
index 00000000..cae7f495
Binary files /dev/null and b/assets/images/emoji/droplet.png differ
diff --git a/assets/images/emoji/dvd.png b/assets/images/emoji/dvd.png
index f38631ae..363c83d0 100644
Binary files a/assets/images/emoji/dvd.png and b/assets/images/emoji/dvd.png differ
diff --git a/assets/images/emoji/e-mail.png b/assets/images/emoji/e-mail.png
new file mode 100644
index 00000000..176a8e1e
Binary files /dev/null and b/assets/images/emoji/e-mail.png differ
diff --git a/assets/images/emoji/ear.png b/assets/images/emoji/ear.png
index 26fd9757..2bbbf10c 100644
Binary files a/assets/images/emoji/ear.png and b/assets/images/emoji/ear.png differ
diff --git a/assets/images/emoji/ear_of_rice.png b/assets/images/emoji/ear_of_rice.png
index 9a64b786..a9bba5c2 100644
Binary files a/assets/images/emoji/ear_of_rice.png and b/assets/images/emoji/ear_of_rice.png differ
diff --git a/assets/images/emoji/earth_africa.png b/assets/images/emoji/earth_africa.png
new file mode 100644
index 00000000..44ce5ecb
Binary files /dev/null and b/assets/images/emoji/earth_africa.png differ
diff --git a/assets/images/emoji/earth_americas.png b/assets/images/emoji/earth_americas.png
new file mode 100644
index 00000000..97d71767
Binary files /dev/null and b/assets/images/emoji/earth_americas.png differ
diff --git a/assets/images/emoji/earth_asia.png b/assets/images/emoji/earth_asia.png
new file mode 100644
index 00000000..95ec357c
Binary files /dev/null and b/assets/images/emoji/earth_asia.png differ
diff --git a/assets/images/emoji/egg.png b/assets/images/emoji/egg.png
index 7ca9357f..c3de6ae4 100644
Binary files a/assets/images/emoji/egg.png and b/assets/images/emoji/egg.png differ
diff --git a/assets/images/emoji/eggplant.png b/assets/images/emoji/eggplant.png
index 73582101..66f25fce 100644
Binary files a/assets/images/emoji/eggplant.png and b/assets/images/emoji/eggplant.png differ
diff --git a/assets/images/emoji/egplant.png b/assets/images/emoji/egplant.png
deleted file mode 100644
index b12cad33..00000000
Binary files a/assets/images/emoji/egplant.png and /dev/null differ
diff --git a/assets/images/emoji/eight.png b/assets/images/emoji/eight.png
new file mode 100644
index 00000000..7bdb4223
Binary files /dev/null and b/assets/images/emoji/eight.png differ
diff --git a/assets/images/emoji/eight_pointed_black_star.png b/assets/images/emoji/eight_pointed_black_star.png
index 9693e50c..6ddaa21f 100644
Binary files a/assets/images/emoji/eight_pointed_black_star.png and b/assets/images/emoji/eight_pointed_black_star.png differ
diff --git a/assets/images/emoji/eight_spoked_asterisk.png b/assets/images/emoji/eight_spoked_asterisk.png
index 459c1d2d..946a2033 100644
Binary files a/assets/images/emoji/eight_spoked_asterisk.png and b/assets/images/emoji/eight_spoked_asterisk.png differ
diff --git a/assets/images/emoji/electric_plug.png b/assets/images/emoji/electric_plug.png
new file mode 100644
index 00000000..fbef4068
Binary files /dev/null and b/assets/images/emoji/electric_plug.png differ
diff --git a/assets/images/emoji/elephant.png b/assets/images/emoji/elephant.png
index c8010a66..5ca04570 100644
Binary files a/assets/images/emoji/elephant.png and b/assets/images/emoji/elephant.png differ
diff --git a/assets/images/emoji/email.png b/assets/images/emoji/email.png
index 22584b9b..0e01fd5f 100644
Binary files a/assets/images/emoji/email.png and b/assets/images/emoji/email.png differ
diff --git a/assets/images/emoji/end.png b/assets/images/emoji/end.png
new file mode 100644
index 00000000..edb0bda2
Binary files /dev/null and b/assets/images/emoji/end.png differ
diff --git a/assets/images/emoji/envelope.png b/assets/images/emoji/envelope.png
new file mode 100644
index 00000000..3631861b
Binary files /dev/null and b/assets/images/emoji/envelope.png differ
diff --git a/assets/images/emoji/es.png b/assets/images/emoji/es.png
index e6fa0f2f..71b30bff 100644
Binary files a/assets/images/emoji/es.png and b/assets/images/emoji/es.png differ
diff --git a/assets/images/emoji/euro.png b/assets/images/emoji/euro.png
new file mode 100644
index 00000000..1c5904b7
Binary files /dev/null and b/assets/images/emoji/euro.png differ
diff --git a/assets/images/emoji/european_castle.png b/assets/images/emoji/european_castle.png
index 8a8a4c99..8229b8a8 100644
Binary files a/assets/images/emoji/european_castle.png and b/assets/images/emoji/european_castle.png differ
diff --git a/assets/images/emoji/european_post_office.png b/assets/images/emoji/european_post_office.png
new file mode 100644
index 00000000..0f65b145
Binary files /dev/null and b/assets/images/emoji/european_post_office.png differ
diff --git a/assets/images/emoji/evergreen_tree.png b/assets/images/emoji/evergreen_tree.png
new file mode 100644
index 00000000..ae8ad103
Binary files /dev/null and b/assets/images/emoji/evergreen_tree.png differ
diff --git a/assets/images/emoji/exclamation.png b/assets/images/emoji/exclamation.png
index 2171aa8d..77bbdeab 100644
Binary files a/assets/images/emoji/exclamation.png and b/assets/images/emoji/exclamation.png differ
diff --git a/assets/images/emoji/expressionless.png b/assets/images/emoji/expressionless.png
new file mode 100644
index 00000000..913ff4e2
Binary files /dev/null and b/assets/images/emoji/expressionless.png differ
diff --git a/assets/images/emoji/eyeglasses.png b/assets/images/emoji/eyeglasses.png
new file mode 100644
index 00000000..a3cf75a2
Binary files /dev/null and b/assets/images/emoji/eyeglasses.png differ
diff --git a/assets/images/emoji/eyes.png b/assets/images/emoji/eyes.png
index b02c44e3..dc2216f6 100644
Binary files a/assets/images/emoji/eyes.png and b/assets/images/emoji/eyes.png differ
diff --git a/assets/images/emoji/facepunch.png b/assets/images/emoji/facepunch.png
new file mode 100644
index 00000000..277047b7
Binary files /dev/null and b/assets/images/emoji/facepunch.png differ
diff --git a/assets/images/emoji/factory.png b/assets/images/emoji/factory.png
index f80c4ec6..64046347 100644
Binary files a/assets/images/emoji/factory.png and b/assets/images/emoji/factory.png differ
diff --git a/assets/images/emoji/fallen_leaf.png b/assets/images/emoji/fallen_leaf.png
index dc6c3137..d49f9c17 100644
Binary files a/assets/images/emoji/fallen_leaf.png and b/assets/images/emoji/fallen_leaf.png differ
diff --git a/assets/images/emoji/family.png b/assets/images/emoji/family.png
new file mode 100644
index 00000000..b4b365f3
Binary files /dev/null and b/assets/images/emoji/family.png differ
diff --git a/assets/images/emoji/fast_forward.png b/assets/images/emoji/fast_forward.png
index c478e558..8830e146 100644
Binary files a/assets/images/emoji/fast_forward.png and b/assets/images/emoji/fast_forward.png differ
diff --git a/assets/images/emoji/fax.png b/assets/images/emoji/fax.png
index e20110fe..62be2c95 100644
Binary files a/assets/images/emoji/fax.png and b/assets/images/emoji/fax.png differ
diff --git a/assets/images/emoji/fearful.png b/assets/images/emoji/fearful.png
index 46765149..513fce47 100644
Binary files a/assets/images/emoji/fearful.png and b/assets/images/emoji/fearful.png differ
diff --git a/assets/images/emoji/feelsgood.png b/assets/images/emoji/feelsgood.png
index 54567b97..361f969b 100644
Binary files a/assets/images/emoji/feelsgood.png and b/assets/images/emoji/feelsgood.png differ
diff --git a/assets/images/emoji/feet.png b/assets/images/emoji/feet.png
index af5261aa..1b0147b1 100644
Binary files a/assets/images/emoji/feet.png and b/assets/images/emoji/feet.png differ
diff --git a/assets/images/emoji/ferris_wheel.png b/assets/images/emoji/ferris_wheel.png
index 9b791ca5..54a1dcfa 100644
Binary files a/assets/images/emoji/ferris_wheel.png and b/assets/images/emoji/ferris_wheel.png differ
diff --git a/assets/images/emoji/file_folder.png b/assets/images/emoji/file_folder.png
new file mode 100644
index 00000000..4d8bebf8
Binary files /dev/null and b/assets/images/emoji/file_folder.png differ
diff --git a/assets/images/emoji/finnadie.png b/assets/images/emoji/finnadie.png
index 12394fc8..bfc5a0d9 100644
Binary files a/assets/images/emoji/finnadie.png and b/assets/images/emoji/finnadie.png differ
diff --git a/assets/images/emoji/fire.png b/assets/images/emoji/fire.png
index fd6bc84e..f2a3149b 100644
Binary files a/assets/images/emoji/fire.png and b/assets/images/emoji/fire.png differ
diff --git a/assets/images/emoji/fire_engine.png b/assets/images/emoji/fire_engine.png
index 1c115bba..9e6c59c9 100644
Binary files a/assets/images/emoji/fire_engine.png and b/assets/images/emoji/fire_engine.png differ
diff --git a/assets/images/emoji/fireworks.png b/assets/images/emoji/fireworks.png
index 435247db..b4eccd57 100644
Binary files a/assets/images/emoji/fireworks.png and b/assets/images/emoji/fireworks.png differ
diff --git a/assets/images/emoji/first_quarter_moon.png b/assets/images/emoji/first_quarter_moon.png
new file mode 100644
index 00000000..f38c2369
Binary files /dev/null and b/assets/images/emoji/first_quarter_moon.png differ
diff --git a/assets/images/emoji/first_quarter_moon_with_face.png b/assets/images/emoji/first_quarter_moon_with_face.png
new file mode 100644
index 00000000..85ae2ce7
Binary files /dev/null and b/assets/images/emoji/first_quarter_moon_with_face.png differ
diff --git a/assets/images/emoji/fish.png b/assets/images/emoji/fish.png
index e0195747..90bdda2c 100644
Binary files a/assets/images/emoji/fish.png and b/assets/images/emoji/fish.png differ
diff --git a/assets/images/emoji/fish_cake.png b/assets/images/emoji/fish_cake.png
new file mode 100644
index 00000000..a8f22614
Binary files /dev/null and b/assets/images/emoji/fish_cake.png differ
diff --git a/assets/images/emoji/fishing_pole_and_fish.png b/assets/images/emoji/fishing_pole_and_fish.png
new file mode 100644
index 00000000..d84609c3
Binary files /dev/null and b/assets/images/emoji/fishing_pole_and_fish.png differ
diff --git a/assets/images/emoji/fist.png b/assets/images/emoji/fist.png
index 2d4a5147..ecc8874c 100644
Binary files a/assets/images/emoji/fist.png and b/assets/images/emoji/fist.png differ
diff --git a/assets/images/emoji/five.png b/assets/images/emoji/five.png
new file mode 100644
index 00000000..794321aa
Binary files /dev/null and b/assets/images/emoji/five.png differ
diff --git a/assets/images/emoji/flags.png b/assets/images/emoji/flags.png
index ed6d0153..540164e8 100644
Binary files a/assets/images/emoji/flags.png and b/assets/images/emoji/flags.png differ
diff --git a/assets/images/emoji/flashlight.png b/assets/images/emoji/flashlight.png
new file mode 100644
index 00000000..215940aa
Binary files /dev/null and b/assets/images/emoji/flashlight.png differ
diff --git a/assets/images/emoji/floppy_disk.png b/assets/images/emoji/floppy_disk.png
new file mode 100644
index 00000000..4ad56315
Binary files /dev/null and b/assets/images/emoji/floppy_disk.png differ
diff --git a/assets/images/emoji/flower_playing_cards.png b/assets/images/emoji/flower_playing_cards.png
new file mode 100644
index 00000000..cc46a6a1
Binary files /dev/null and b/assets/images/emoji/flower_playing_cards.png differ
diff --git a/assets/images/emoji/flushed.png b/assets/images/emoji/flushed.png
index 866466ba..74b78c9c 100644
Binary files a/assets/images/emoji/flushed.png and b/assets/images/emoji/flushed.png differ
diff --git a/assets/images/emoji/foggy.png b/assets/images/emoji/foggy.png
new file mode 100644
index 00000000..3c7b8b04
Binary files /dev/null and b/assets/images/emoji/foggy.png differ
diff --git a/assets/images/emoji/football.png b/assets/images/emoji/football.png
index 07d67ece..0e4e168f 100644
Binary files a/assets/images/emoji/football.png and b/assets/images/emoji/football.png differ
diff --git a/assets/images/emoji/fork_and_knife.png b/assets/images/emoji/fork_and_knife.png
index 8f031940..8ba4bc65 100644
Binary files a/assets/images/emoji/fork_and_knife.png and b/assets/images/emoji/fork_and_knife.png differ
diff --git a/assets/images/emoji/fountain.png b/assets/images/emoji/fountain.png
index 38b52329..da126e64 100644
Binary files a/assets/images/emoji/fountain.png and b/assets/images/emoji/fountain.png differ
diff --git a/assets/images/emoji/four.png b/assets/images/emoji/four.png
new file mode 100644
index 00000000..14782ba2
Binary files /dev/null and b/assets/images/emoji/four.png differ
diff --git a/assets/images/emoji/four_leaf_clover.png b/assets/images/emoji/four_leaf_clover.png
index adaf4ce1..f2014bea 100644
Binary files a/assets/images/emoji/four_leaf_clover.png and b/assets/images/emoji/four_leaf_clover.png differ
diff --git a/assets/images/emoji/fr.png b/assets/images/emoji/fr.png
index 2a2afb76..6311c911 100644
Binary files a/assets/images/emoji/fr.png and b/assets/images/emoji/fr.png differ
diff --git a/assets/images/emoji/free.png b/assets/images/emoji/free.png
new file mode 100644
index 00000000..c886cf24
Binary files /dev/null and b/assets/images/emoji/free.png differ
diff --git a/assets/images/emoji/fried_shrimp.png b/assets/images/emoji/fried_shrimp.png
new file mode 100644
index 00000000..c8c284bf
Binary files /dev/null and b/assets/images/emoji/fried_shrimp.png differ
diff --git a/assets/images/emoji/fries.png b/assets/images/emoji/fries.png
index 727b5578..cfef6696 100644
Binary files a/assets/images/emoji/fries.png and b/assets/images/emoji/fries.png differ
diff --git a/assets/images/emoji/frog.png b/assets/images/emoji/frog.png
index bac9a67e..cfe11b18 100644
Binary files a/assets/images/emoji/frog.png and b/assets/images/emoji/frog.png differ
diff --git a/assets/images/emoji/frowning.png b/assets/images/emoji/frowning.png
new file mode 100644
index 00000000..087a6627
Binary files /dev/null and b/assets/images/emoji/frowning.png differ
diff --git a/assets/images/emoji/fu.png b/assets/images/emoji/fu.png
new file mode 100644
index 00000000..61a3fee8
Binary files /dev/null and b/assets/images/emoji/fu.png differ
diff --git a/assets/images/emoji/fuelpump.png b/assets/images/emoji/fuelpump.png
index d229b667..54c29aeb 100644
Binary files a/assets/images/emoji/fuelpump.png and b/assets/images/emoji/fuelpump.png differ
diff --git a/assets/images/emoji/full_moon.png b/assets/images/emoji/full_moon.png
new file mode 100644
index 00000000..8ff657a2
Binary files /dev/null and b/assets/images/emoji/full_moon.png differ
diff --git a/assets/images/emoji/full_moon_with_face.png b/assets/images/emoji/full_moon_with_face.png
new file mode 100644
index 00000000..d42b3f0f
Binary files /dev/null and b/assets/images/emoji/full_moon_with_face.png differ
diff --git a/assets/images/emoji/game_die.png b/assets/images/emoji/game_die.png
new file mode 100644
index 00000000..4136e78e
Binary files /dev/null and b/assets/images/emoji/game_die.png differ
diff --git a/assets/images/emoji/gb.png b/assets/images/emoji/gb.png
index d9eab20a..2a62c7a0 100644
Binary files a/assets/images/emoji/gb.png and b/assets/images/emoji/gb.png differ
diff --git a/assets/images/emoji/gem.png b/assets/images/emoji/gem.png
index 1245c0ad..8a5d8dad 100644
Binary files a/assets/images/emoji/gem.png and b/assets/images/emoji/gem.png differ
diff --git a/assets/images/emoji/gemini.png b/assets/images/emoji/gemini.png
index db22fba8..d926f6e8 100644
Binary files a/assets/images/emoji/gemini.png and b/assets/images/emoji/gemini.png differ
diff --git a/assets/images/emoji/ghost.png b/assets/images/emoji/ghost.png
index 23408c40..671dd0c9 100644
Binary files a/assets/images/emoji/ghost.png and b/assets/images/emoji/ghost.png differ
diff --git a/assets/images/emoji/gift.png b/assets/images/emoji/gift.png
index b6262ebb..552cfdc2 100644
Binary files a/assets/images/emoji/gift.png and b/assets/images/emoji/gift.png differ
diff --git a/assets/images/emoji/gift_heart.png b/assets/images/emoji/gift_heart.png
index 12305e24..f31c26a3 100644
Binary files a/assets/images/emoji/gift_heart.png and b/assets/images/emoji/gift_heart.png differ
diff --git a/assets/images/emoji/girl.png b/assets/images/emoji/girl.png
index 98c032da..ea412694 100644
Binary files a/assets/images/emoji/girl.png and b/assets/images/emoji/girl.png differ
diff --git a/assets/images/emoji/globe_with_meridians.png b/assets/images/emoji/globe_with_meridians.png
new file mode 100644
index 00000000..b1986466
Binary files /dev/null and b/assets/images/emoji/globe_with_meridians.png differ
diff --git a/assets/images/emoji/goat.png b/assets/images/emoji/goat.png
new file mode 100644
index 00000000..4be9cf30
Binary files /dev/null and b/assets/images/emoji/goat.png differ
diff --git a/assets/images/emoji/goberserk.png b/assets/images/emoji/goberserk.png
index 8d3917a5..59a742aa 100644
Binary files a/assets/images/emoji/goberserk.png and b/assets/images/emoji/goberserk.png differ
diff --git a/assets/images/emoji/godmode.png b/assets/images/emoji/godmode.png
index d8feb0d8..7e75ab20 100644
Binary files a/assets/images/emoji/godmode.png and b/assets/images/emoji/godmode.png differ
diff --git a/assets/images/emoji/golf.png b/assets/images/emoji/golf.png
index f30131f6..cba2116a 100644
Binary files a/assets/images/emoji/golf.png and b/assets/images/emoji/golf.png differ
diff --git a/assets/images/emoji/grapes.png b/assets/images/emoji/grapes.png
new file mode 100644
index 00000000..0f9f007a
Binary files /dev/null and b/assets/images/emoji/grapes.png differ
diff --git a/assets/images/emoji/green_apple.png b/assets/images/emoji/green_apple.png
new file mode 100644
index 00000000..337205cd
Binary files /dev/null and b/assets/images/emoji/green_apple.png differ
diff --git a/assets/images/emoji/green_book.png b/assets/images/emoji/green_book.png
new file mode 100644
index 00000000..e86651e5
Binary files /dev/null and b/assets/images/emoji/green_book.png differ
diff --git a/assets/images/emoji/green_heart.png b/assets/images/emoji/green_heart.png
index 1b0b4d16..7289cb81 100644
Binary files a/assets/images/emoji/green_heart.png and b/assets/images/emoji/green_heart.png differ
diff --git a/assets/images/emoji/grey_exclamation.png b/assets/images/emoji/grey_exclamation.png
index c94a2b93..a50d265e 100644
Binary files a/assets/images/emoji/grey_exclamation.png and b/assets/images/emoji/grey_exclamation.png differ
diff --git a/assets/images/emoji/grey_question.png b/assets/images/emoji/grey_question.png
index a50cca2a..fb97ba75 100644
Binary files a/assets/images/emoji/grey_question.png and b/assets/images/emoji/grey_question.png differ
diff --git a/assets/images/emoji/grimacing.png b/assets/images/emoji/grimacing.png
new file mode 100644
index 00000000..18a63e3e
Binary files /dev/null and b/assets/images/emoji/grimacing.png differ
diff --git a/assets/images/emoji/grin.png b/assets/images/emoji/grin.png
index 694bf56f..591cfcef 100644
Binary files a/assets/images/emoji/grin.png and b/assets/images/emoji/grin.png differ
diff --git a/assets/images/emoji/grinning.png b/assets/images/emoji/grinning.png
new file mode 100644
index 00000000..7e812b7e
Binary files /dev/null and b/assets/images/emoji/grinning.png differ
diff --git a/assets/images/emoji/guardsman.png b/assets/images/emoji/guardsman.png
index c228553b..b67b335d 100644
Binary files a/assets/images/emoji/guardsman.png and b/assets/images/emoji/guardsman.png differ
diff --git a/assets/images/emoji/guitar.png b/assets/images/emoji/guitar.png
index 81ee4722..2b7fa43c 100644
Binary files a/assets/images/emoji/guitar.png and b/assets/images/emoji/guitar.png differ
diff --git a/assets/images/emoji/gun.png b/assets/images/emoji/gun.png
index 24209c4a..c49dc52c 100644
Binary files a/assets/images/emoji/gun.png and b/assets/images/emoji/gun.png differ
diff --git a/assets/images/emoji/haircut.png b/assets/images/emoji/haircut.png
index c3bca9b4..902d273f 100644
Binary files a/assets/images/emoji/haircut.png and b/assets/images/emoji/haircut.png differ
diff --git a/assets/images/emoji/hamburger.png b/assets/images/emoji/hamburger.png
index f3c76f63..9f1a3fdf 100644
Binary files a/assets/images/emoji/hamburger.png and b/assets/images/emoji/hamburger.png differ
diff --git a/assets/images/emoji/hammer.png b/assets/images/emoji/hammer.png
index 99f5a2f5..482b1c74 100644
Binary files a/assets/images/emoji/hammer.png and b/assets/images/emoji/hammer.png differ
diff --git a/assets/images/emoji/hamster.png b/assets/images/emoji/hamster.png
index 5c9340b0..addfd2e6 100644
Binary files a/assets/images/emoji/hamster.png and b/assets/images/emoji/hamster.png differ
diff --git a/assets/images/emoji/hand.png b/assets/images/emoji/hand.png
index 1cdf992f..5e45c25a 100644
Binary files a/assets/images/emoji/hand.png and b/assets/images/emoji/hand.png differ
diff --git a/assets/images/emoji/handbag.png b/assets/images/emoji/handbag.png
index 34fec65c..d7adf04d 100644
Binary files a/assets/images/emoji/handbag.png and b/assets/images/emoji/handbag.png differ
diff --git a/assets/images/emoji/hankey.png b/assets/images/emoji/hankey.png
index 69bc33f1..73a4dc84 100644
Binary files a/assets/images/emoji/hankey.png and b/assets/images/emoji/hankey.png differ
diff --git a/assets/images/emoji/hash.png b/assets/images/emoji/hash.png
index 4fdc5cc0..6765d7d3 100644
Binary files a/assets/images/emoji/hash.png and b/assets/images/emoji/hash.png differ
diff --git a/assets/images/emoji/hatched_chick.png b/assets/images/emoji/hatched_chick.png
new file mode 100644
index 00000000..39c25bc7
Binary files /dev/null and b/assets/images/emoji/hatched_chick.png differ
diff --git a/assets/images/emoji/hatching_chick.png b/assets/images/emoji/hatching_chick.png
new file mode 100644
index 00000000..005a5551
Binary files /dev/null and b/assets/images/emoji/hatching_chick.png differ
diff --git a/assets/images/emoji/headphones.png b/assets/images/emoji/headphones.png
index 440ed43f..ad83000e 100644
Binary files a/assets/images/emoji/headphones.png and b/assets/images/emoji/headphones.png differ
diff --git a/assets/images/emoji/hear_no_evil.png b/assets/images/emoji/hear_no_evil.png
new file mode 100644
index 00000000..f97a1f9a
Binary files /dev/null and b/assets/images/emoji/hear_no_evil.png differ
diff --git a/assets/images/emoji/heart.png b/assets/images/emoji/heart.png
index 5de16c9f..7d7790ce 100644
Binary files a/assets/images/emoji/heart.png and b/assets/images/emoji/heart.png differ
diff --git a/assets/images/emoji/heart_decoration.png b/assets/images/emoji/heart_decoration.png
index f895cf53..b8be44db 100644
Binary files a/assets/images/emoji/heart_decoration.png and b/assets/images/emoji/heart_decoration.png differ
diff --git a/assets/images/emoji/heart_eyes.png b/assets/images/emoji/heart_eyes.png
index ef85cb66..0e579427 100644
Binary files a/assets/images/emoji/heart_eyes.png and b/assets/images/emoji/heart_eyes.png differ
diff --git a/assets/images/emoji/heart_eyes_cat.png b/assets/images/emoji/heart_eyes_cat.png
new file mode 100644
index 00000000..eeba240e
Binary files /dev/null and b/assets/images/emoji/heart_eyes_cat.png differ
diff --git a/assets/images/emoji/heartbeat.png b/assets/images/emoji/heartbeat.png
index ce670748..b6628f6f 100644
Binary files a/assets/images/emoji/heartbeat.png and b/assets/images/emoji/heartbeat.png differ
diff --git a/assets/images/emoji/heartpulse.png b/assets/images/emoji/heartpulse.png
index dc7e55d3..a7491cbe 100644
Binary files a/assets/images/emoji/heartpulse.png and b/assets/images/emoji/heartpulse.png differ
diff --git a/assets/images/emoji/hearts.png b/assets/images/emoji/hearts.png
index be35ebdd..e8947153 100644
Binary files a/assets/images/emoji/hearts.png and b/assets/images/emoji/hearts.png differ
diff --git a/assets/images/emoji/heavy_check_mark.png b/assets/images/emoji/heavy_check_mark.png
new file mode 100644
index 00000000..d0f010b4
Binary files /dev/null and b/assets/images/emoji/heavy_check_mark.png differ
diff --git a/assets/images/emoji/heavy_division_sign.png b/assets/images/emoji/heavy_division_sign.png
new file mode 100644
index 00000000..ac757a23
Binary files /dev/null and b/assets/images/emoji/heavy_division_sign.png differ
diff --git a/assets/images/emoji/heavy_dollar_sign.png b/assets/images/emoji/heavy_dollar_sign.png
new file mode 100644
index 00000000..361e26ae
Binary files /dev/null and b/assets/images/emoji/heavy_dollar_sign.png differ
diff --git a/assets/images/emoji/heavy_exclamation_mark.png b/assets/images/emoji/heavy_exclamation_mark.png
new file mode 100644
index 00000000..4c560f5e
Binary files /dev/null and b/assets/images/emoji/heavy_exclamation_mark.png differ
diff --git a/assets/images/emoji/heavy_minus_sign.png b/assets/images/emoji/heavy_minus_sign.png
new file mode 100644
index 00000000..4a33f905
Binary files /dev/null and b/assets/images/emoji/heavy_minus_sign.png differ
diff --git a/assets/images/emoji/heavy_multiplication_x.png b/assets/images/emoji/heavy_multiplication_x.png
new file mode 100644
index 00000000..13d66607
Binary files /dev/null and b/assets/images/emoji/heavy_multiplication_x.png differ
diff --git a/assets/images/emoji/heavy_plus_sign.png b/assets/images/emoji/heavy_plus_sign.png
new file mode 100644
index 00000000..61595387
Binary files /dev/null and b/assets/images/emoji/heavy_plus_sign.png differ
diff --git a/assets/images/emoji/helicopter.png b/assets/images/emoji/helicopter.png
new file mode 100644
index 00000000..8e82a0d5
Binary files /dev/null and b/assets/images/emoji/helicopter.png differ
diff --git a/assets/images/emoji/herb.png b/assets/images/emoji/herb.png
new file mode 100644
index 00000000..de1ff1b7
Binary files /dev/null and b/assets/images/emoji/herb.png differ
diff --git a/assets/images/emoji/hibiscus.png b/assets/images/emoji/hibiscus.png
index 0f1c4af0..9365ae21 100644
Binary files a/assets/images/emoji/hibiscus.png and b/assets/images/emoji/hibiscus.png differ
diff --git a/assets/images/emoji/high_brightness.png b/assets/images/emoji/high_brightness.png
new file mode 100644
index 00000000..ba9de7d4
Binary files /dev/null and b/assets/images/emoji/high_brightness.png differ
diff --git a/assets/images/emoji/high_heel.png b/assets/images/emoji/high_heel.png
index 275389ed..525b6a0d 100644
Binary files a/assets/images/emoji/high_heel.png and b/assets/images/emoji/high_heel.png differ
diff --git a/assets/images/emoji/hocho.png b/assets/images/emoji/hocho.png
new file mode 100644
index 00000000..3f05193c
Binary files /dev/null and b/assets/images/emoji/hocho.png differ
diff --git a/assets/images/emoji/honey_pot.png b/assets/images/emoji/honey_pot.png
new file mode 100644
index 00000000..73278898
Binary files /dev/null and b/assets/images/emoji/honey_pot.png differ
diff --git a/assets/images/emoji/honeybee.png b/assets/images/emoji/honeybee.png
new file mode 100644
index 00000000..f5373395
Binary files /dev/null and b/assets/images/emoji/honeybee.png differ
diff --git a/assets/images/emoji/horse.png b/assets/images/emoji/horse.png
index 9e43abfd..78d580ad 100644
Binary files a/assets/images/emoji/horse.png and b/assets/images/emoji/horse.png differ
diff --git a/assets/images/emoji/horse_racing.png b/assets/images/emoji/horse_racing.png
new file mode 100644
index 00000000..e3bbaec1
Binary files /dev/null and b/assets/images/emoji/horse_racing.png differ
diff --git a/assets/images/emoji/hospital.png b/assets/images/emoji/hospital.png
index 2c72c9a5..c05c4937 100644
Binary files a/assets/images/emoji/hospital.png and b/assets/images/emoji/hospital.png differ
diff --git a/assets/images/emoji/hotel.png b/assets/images/emoji/hotel.png
index 1b1b48ee..d29f276a 100644
Binary files a/assets/images/emoji/hotel.png and b/assets/images/emoji/hotel.png differ
diff --git a/assets/images/emoji/hotsprings.png b/assets/images/emoji/hotsprings.png
index 64c6a1d7..a0bc9d75 100644
Binary files a/assets/images/emoji/hotsprings.png and b/assets/images/emoji/hotsprings.png differ
diff --git a/assets/images/emoji/hourglass.png b/assets/images/emoji/hourglass.png
new file mode 100644
index 00000000..405aab41
Binary files /dev/null and b/assets/images/emoji/hourglass.png differ
diff --git a/assets/images/emoji/hourglass_flowing_sand.png b/assets/images/emoji/hourglass_flowing_sand.png
new file mode 100644
index 00000000..b68eb695
Binary files /dev/null and b/assets/images/emoji/hourglass_flowing_sand.png differ
diff --git a/assets/images/emoji/house.png b/assets/images/emoji/house.png
index fdaeca1a..95b9ee09 100644
Binary files a/assets/images/emoji/house.png and b/assets/images/emoji/house.png differ
diff --git a/assets/images/emoji/house_with_garden.png b/assets/images/emoji/house_with_garden.png
new file mode 100644
index 00000000..6261cd3c
Binary files /dev/null and b/assets/images/emoji/house_with_garden.png differ
diff --git a/assets/images/emoji/hurtrealbad.png b/assets/images/emoji/hurtrealbad.png
index 68153c60..146ef1a6 100644
Binary files a/assets/images/emoji/hurtrealbad.png and b/assets/images/emoji/hurtrealbad.png differ
diff --git a/assets/images/emoji/hushed.png b/assets/images/emoji/hushed.png
new file mode 100644
index 00000000..b1c0108a
Binary files /dev/null and b/assets/images/emoji/hushed.png differ
diff --git a/assets/images/emoji/ice_cream.png b/assets/images/emoji/ice_cream.png
new file mode 100644
index 00000000..190be016
Binary files /dev/null and b/assets/images/emoji/ice_cream.png differ
diff --git a/assets/images/emoji/icecream.png b/assets/images/emoji/icecream.png
index 22d32c5b..871ce097 100644
Binary files a/assets/images/emoji/icecream.png and b/assets/images/emoji/icecream.png differ
diff --git a/assets/images/emoji/id.png b/assets/images/emoji/id.png
index 0bd32b0e..47437a76 100644
Binary files a/assets/images/emoji/id.png and b/assets/images/emoji/id.png differ
diff --git a/assets/images/emoji/ideograph_advantage.png b/assets/images/emoji/ideograph_advantage.png
index fad3f964..e79af784 100644
Binary files a/assets/images/emoji/ideograph_advantage.png and b/assets/images/emoji/ideograph_advantage.png differ
diff --git a/assets/images/emoji/imp.png b/assets/images/emoji/imp.png
index c69f6b70..5acca337 100644
Binary files a/assets/images/emoji/imp.png and b/assets/images/emoji/imp.png differ
diff --git a/assets/images/emoji/inbox_tray.png b/assets/images/emoji/inbox_tray.png
new file mode 100644
index 00000000..e2df0f89
Binary files /dev/null and b/assets/images/emoji/inbox_tray.png differ
diff --git a/assets/images/emoji/incoming_envelope.png b/assets/images/emoji/incoming_envelope.png
new file mode 100644
index 00000000..afc82712
Binary files /dev/null and b/assets/images/emoji/incoming_envelope.png differ
diff --git a/assets/images/emoji/information_desk_person.png b/assets/images/emoji/information_desk_person.png
index f6eb7216..52c0a50a 100644
Binary files a/assets/images/emoji/information_desk_person.png and b/assets/images/emoji/information_desk_person.png differ
diff --git a/assets/images/emoji/information_source.png b/assets/images/emoji/information_source.png
new file mode 100644
index 00000000..9cb8b09b
Binary files /dev/null and b/assets/images/emoji/information_source.png differ
diff --git a/assets/images/emoji/innocent.png b/assets/images/emoji/innocent.png
new file mode 100644
index 00000000..503b614f
Binary files /dev/null and b/assets/images/emoji/innocent.png differ
diff --git a/assets/images/emoji/interrobang.png b/assets/images/emoji/interrobang.png
new file mode 100644
index 00000000..64304b9f
Binary files /dev/null and b/assets/images/emoji/interrobang.png differ
diff --git a/assets/images/emoji/iphone.png b/assets/images/emoji/iphone.png
index 7995a678..df007103 100644
Binary files a/assets/images/emoji/iphone.png and b/assets/images/emoji/iphone.png differ
diff --git a/assets/images/emoji/it.png b/assets/images/emoji/it.png
index fc3e8a2d..70bc9f32 100644
Binary files a/assets/images/emoji/it.png and b/assets/images/emoji/it.png differ
diff --git a/assets/images/emoji/izakaya_lantern.png b/assets/images/emoji/izakaya_lantern.png
new file mode 100644
index 00000000..18730ad5
Binary files /dev/null and b/assets/images/emoji/izakaya_lantern.png differ
diff --git a/assets/images/emoji/jack_o_lantern.png b/assets/images/emoji/jack_o_lantern.png
index 23ae0e98..1f7667ea 100644
Binary files a/assets/images/emoji/jack_o_lantern.png and b/assets/images/emoji/jack_o_lantern.png differ
diff --git a/assets/images/emoji/japan.png b/assets/images/emoji/japan.png
new file mode 100644
index 00000000..45932803
Binary files /dev/null and b/assets/images/emoji/japan.png differ
diff --git a/assets/images/emoji/japanese_castle.png b/assets/images/emoji/japanese_castle.png
index bb76bcc0..f225ab21 100644
Binary files a/assets/images/emoji/japanese_castle.png and b/assets/images/emoji/japanese_castle.png differ
diff --git a/assets/images/emoji/japanese_goblin.png b/assets/images/emoji/japanese_goblin.png
new file mode 100644
index 00000000..bd21b187
Binary files /dev/null and b/assets/images/emoji/japanese_goblin.png differ
diff --git a/assets/images/emoji/japanese_ogre.png b/assets/images/emoji/japanese_ogre.png
new file mode 100644
index 00000000..e9f5471c
Binary files /dev/null and b/assets/images/emoji/japanese_ogre.png differ
diff --git a/assets/images/emoji/jeans.png b/assets/images/emoji/jeans.png
new file mode 100644
index 00000000..d721cea5
Binary files /dev/null and b/assets/images/emoji/jeans.png differ
diff --git a/assets/images/emoji/joy.png b/assets/images/emoji/joy.png
index f6f27e48..47df693d 100644
Binary files a/assets/images/emoji/joy.png and b/assets/images/emoji/joy.png differ
diff --git a/assets/images/emoji/joy_cat.png b/assets/images/emoji/joy_cat.png
new file mode 100644
index 00000000..6c60cb0e
Binary files /dev/null and b/assets/images/emoji/joy_cat.png differ
diff --git a/assets/images/emoji/jp.png b/assets/images/emoji/jp.png
index 8c6e76d7..b786efbb 100644
Binary files a/assets/images/emoji/jp.png and b/assets/images/emoji/jp.png differ
diff --git a/assets/images/emoji/key.png b/assets/images/emoji/key.png
index 05159c57..34673213 100644
Binary files a/assets/images/emoji/key.png and b/assets/images/emoji/key.png differ
diff --git a/assets/images/emoji/keycap_ten.png b/assets/images/emoji/keycap_ten.png
new file mode 100644
index 00000000..71dac1c1
Binary files /dev/null and b/assets/images/emoji/keycap_ten.png differ
diff --git a/assets/images/emoji/kimono.png b/assets/images/emoji/kimono.png
index 4c9456e7..34ffe137 100644
Binary files a/assets/images/emoji/kimono.png and b/assets/images/emoji/kimono.png differ
diff --git a/assets/images/emoji/kiss.png b/assets/images/emoji/kiss.png
index 141bb429..14fd9918 100644
Binary files a/assets/images/emoji/kiss.png and b/assets/images/emoji/kiss.png differ
diff --git a/assets/images/emoji/kissing.png b/assets/images/emoji/kissing.png
new file mode 100644
index 00000000..f3c8dcd7
Binary files /dev/null and b/assets/images/emoji/kissing.png differ
diff --git a/assets/images/emoji/kissing_cat.png b/assets/images/emoji/kissing_cat.png
new file mode 100644
index 00000000..adc62fbe
Binary files /dev/null and b/assets/images/emoji/kissing_cat.png differ
diff --git a/assets/images/emoji/kissing_closed_eyes.png b/assets/images/emoji/kissing_closed_eyes.png
new file mode 100644
index 00000000..449de197
Binary files /dev/null and b/assets/images/emoji/kissing_closed_eyes.png differ
diff --git a/assets/images/emoji/kissing_face.png b/assets/images/emoji/kissing_face.png
index 6143085a..449de197 100644
Binary files a/assets/images/emoji/kissing_face.png and b/assets/images/emoji/kissing_face.png differ
diff --git a/assets/images/emoji/kissing_heart.png b/assets/images/emoji/kissing_heart.png
index df01721b..af9a80b7 100644
Binary files a/assets/images/emoji/kissing_heart.png and b/assets/images/emoji/kissing_heart.png differ
diff --git a/assets/images/emoji/kissing_smiling_eyes.png b/assets/images/emoji/kissing_smiling_eyes.png
new file mode 100644
index 00000000..57f7b493
Binary files /dev/null and b/assets/images/emoji/kissing_smiling_eyes.png differ
diff --git a/assets/images/emoji/koala.png b/assets/images/emoji/koala.png
index cac71a4e..e17bd3cf 100644
Binary files a/assets/images/emoji/koala.png and b/assets/images/emoji/koala.png differ
diff --git a/assets/images/emoji/koko.png b/assets/images/emoji/koko.png
index dd6e90c1..3bef28c9 100644
Binary files a/assets/images/emoji/koko.png and b/assets/images/emoji/koko.png differ
diff --git a/assets/images/emoji/kr.png b/assets/images/emoji/kr.png
index c37b34d5..b4c0c1b6 100644
Binary files a/assets/images/emoji/kr.png and b/assets/images/emoji/kr.png differ
diff --git a/assets/images/emoji/large_blue_circle.png b/assets/images/emoji/large_blue_circle.png
new file mode 100644
index 00000000..a5b4ad4a
Binary files /dev/null and b/assets/images/emoji/large_blue_circle.png differ
diff --git a/assets/images/emoji/large_blue_diamond.png b/assets/images/emoji/large_blue_diamond.png
new file mode 100644
index 00000000..f4598ec0
Binary files /dev/null and b/assets/images/emoji/large_blue_diamond.png differ
diff --git a/assets/images/emoji/large_orange_diamond.png b/assets/images/emoji/large_orange_diamond.png
new file mode 100644
index 00000000..803725aa
Binary files /dev/null and b/assets/images/emoji/large_orange_diamond.png differ
diff --git a/assets/images/emoji/last_quarter_moon.png b/assets/images/emoji/last_quarter_moon.png
new file mode 100644
index 00000000..8a692c23
Binary files /dev/null and b/assets/images/emoji/last_quarter_moon.png differ
diff --git a/assets/images/emoji/last_quarter_moon_with_face.png b/assets/images/emoji/last_quarter_moon_with_face.png
new file mode 100644
index 00000000..9ece82df
Binary files /dev/null and b/assets/images/emoji/last_quarter_moon_with_face.png differ
diff --git a/assets/images/emoji/laughing.png b/assets/images/emoji/laughing.png
new file mode 100644
index 00000000..11c91eb2
Binary files /dev/null and b/assets/images/emoji/laughing.png differ
diff --git a/assets/images/emoji/leaves.png b/assets/images/emoji/leaves.png
index 9021b3ea..5229e06b 100644
Binary files a/assets/images/emoji/leaves.png and b/assets/images/emoji/leaves.png differ
diff --git a/assets/images/emoji/ledger.png b/assets/images/emoji/ledger.png
new file mode 100644
index 00000000..e4f72ace
Binary files /dev/null and b/assets/images/emoji/ledger.png differ
diff --git a/assets/images/emoji/left_luggage.png b/assets/images/emoji/left_luggage.png
new file mode 100644
index 00000000..1c08b464
Binary files /dev/null and b/assets/images/emoji/left_luggage.png differ
diff --git a/assets/images/emoji/left_right_arrow.png b/assets/images/emoji/left_right_arrow.png
new file mode 100644
index 00000000..b9fd11c5
Binary files /dev/null and b/assets/images/emoji/left_right_arrow.png differ
diff --git a/assets/images/emoji/leftwards_arrow_with_hook.png b/assets/images/emoji/leftwards_arrow_with_hook.png
new file mode 100644
index 00000000..bc45dfef
Binary files /dev/null and b/assets/images/emoji/leftwards_arrow_with_hook.png differ
diff --git a/assets/images/emoji/lemon.png b/assets/images/emoji/lemon.png
new file mode 100644
index 00000000..9814dc95
Binary files /dev/null and b/assets/images/emoji/lemon.png differ
diff --git a/assets/images/emoji/leo.png b/assets/images/emoji/leo.png
index 1432e36c..e025933b 100644
Binary files a/assets/images/emoji/leo.png and b/assets/images/emoji/leo.png differ
diff --git a/assets/images/emoji/leopard.png b/assets/images/emoji/leopard.png
new file mode 100644
index 00000000..3e738d2d
Binary files /dev/null and b/assets/images/emoji/leopard.png differ
diff --git a/assets/images/emoji/libra.png b/assets/images/emoji/libra.png
index bd35d66d..c9062dd2 100644
Binary files a/assets/images/emoji/libra.png and b/assets/images/emoji/libra.png differ
diff --git a/assets/images/emoji/light_rail.png b/assets/images/emoji/light_rail.png
new file mode 100644
index 00000000..bcfe801e
Binary files /dev/null and b/assets/images/emoji/light_rail.png differ
diff --git a/assets/images/emoji/link.png b/assets/images/emoji/link.png
new file mode 100644
index 00000000..0239e48e
Binary files /dev/null and b/assets/images/emoji/link.png differ
diff --git a/assets/images/emoji/lips.png b/assets/images/emoji/lips.png
index f996a8a6..826ed110 100644
Binary files a/assets/images/emoji/lips.png and b/assets/images/emoji/lips.png differ
diff --git a/assets/images/emoji/lipstick.png b/assets/images/emoji/lipstick.png
index 214ecded..82f990c5 100644
Binary files a/assets/images/emoji/lipstick.png and b/assets/images/emoji/lipstick.png differ
diff --git a/assets/images/emoji/lock.png b/assets/images/emoji/lock.png
index 5c35d91d..4892b023 100644
Binary files a/assets/images/emoji/lock.png and b/assets/images/emoji/lock.png differ
diff --git a/assets/images/emoji/lock_with_ink_pen.png b/assets/images/emoji/lock_with_ink_pen.png
new file mode 100644
index 00000000..375e67e8
Binary files /dev/null and b/assets/images/emoji/lock_with_ink_pen.png differ
diff --git a/assets/images/emoji/lollipop.png b/assets/images/emoji/lollipop.png
new file mode 100644
index 00000000..ba55e709
Binary files /dev/null and b/assets/images/emoji/lollipop.png differ
diff --git a/assets/images/emoji/loop.png b/assets/images/emoji/loop.png
index 68807b91..ef34df3a 100644
Binary files a/assets/images/emoji/loop.png and b/assets/images/emoji/loop.png differ
diff --git a/assets/images/emoji/loudspeaker.png b/assets/images/emoji/loudspeaker.png
index d5ffa73b..752385e5 100644
Binary files a/assets/images/emoji/loudspeaker.png and b/assets/images/emoji/loudspeaker.png differ
diff --git a/assets/images/emoji/love_hotel.png b/assets/images/emoji/love_hotel.png
index dc168a91..44d7db82 100644
Binary files a/assets/images/emoji/love_hotel.png and b/assets/images/emoji/love_hotel.png differ
diff --git a/assets/images/emoji/love_letter.png b/assets/images/emoji/love_letter.png
new file mode 100644
index 00000000..e29981f4
Binary files /dev/null and b/assets/images/emoji/love_letter.png differ
diff --git a/assets/images/emoji/low_brightness.png b/assets/images/emoji/low_brightness.png
new file mode 100644
index 00000000..ea15bde4
Binary files /dev/null and b/assets/images/emoji/low_brightness.png differ
diff --git a/assets/images/emoji/m.png b/assets/images/emoji/m.png
new file mode 100644
index 00000000..7424665e
Binary files /dev/null and b/assets/images/emoji/m.png differ
diff --git a/assets/images/emoji/mag.png b/assets/images/emoji/mag.png
index 9b03915a..aa5b1d7c 100644
Binary files a/assets/images/emoji/mag.png and b/assets/images/emoji/mag.png differ
diff --git a/assets/images/emoji/mag_right.png b/assets/images/emoji/mag_right.png
new file mode 100644
index 00000000..6e6cf11e
Binary files /dev/null and b/assets/images/emoji/mag_right.png differ
diff --git a/assets/images/emoji/mahjong.png b/assets/images/emoji/mahjong.png
index 9fe286e2..f51ce65f 100644
Binary files a/assets/images/emoji/mahjong.png and b/assets/images/emoji/mahjong.png differ
diff --git a/assets/images/emoji/mailbox.png b/assets/images/emoji/mailbox.png
index 47d2ee7e..8351e707 100644
Binary files a/assets/images/emoji/mailbox.png and b/assets/images/emoji/mailbox.png differ
diff --git a/assets/images/emoji/mailbox_closed.png b/assets/images/emoji/mailbox_closed.png
new file mode 100644
index 00000000..a5982b69
Binary files /dev/null and b/assets/images/emoji/mailbox_closed.png differ
diff --git a/assets/images/emoji/mailbox_with_mail.png b/assets/images/emoji/mailbox_with_mail.png
new file mode 100644
index 00000000..dae34594
Binary files /dev/null and b/assets/images/emoji/mailbox_with_mail.png differ
diff --git a/assets/images/emoji/mailbox_with_no_mail.png b/assets/images/emoji/mailbox_with_no_mail.png
new file mode 100644
index 00000000..59f15c5d
Binary files /dev/null and b/assets/images/emoji/mailbox_with_no_mail.png differ
diff --git a/assets/images/emoji/man.png b/assets/images/emoji/man.png
index be0c82c6..d9bfa26a 100644
Binary files a/assets/images/emoji/man.png and b/assets/images/emoji/man.png differ
diff --git a/assets/images/emoji/man_with_gua_pi_mao.png b/assets/images/emoji/man_with_gua_pi_mao.png
index 79448395..7aad74b5 100644
Binary files a/assets/images/emoji/man_with_gua_pi_mao.png and b/assets/images/emoji/man_with_gua_pi_mao.png differ
diff --git a/assets/images/emoji/man_with_turban.png b/assets/images/emoji/man_with_turban.png
index 4a31f317..036604ca 100644
Binary files a/assets/images/emoji/man_with_turban.png and b/assets/images/emoji/man_with_turban.png differ
diff --git a/assets/images/emoji/mans_shoe.png b/assets/images/emoji/mans_shoe.png
new file mode 100644
index 00000000..ecba9ba7
Binary files /dev/null and b/assets/images/emoji/mans_shoe.png differ
diff --git a/assets/images/emoji/maple_leaf.png b/assets/images/emoji/maple_leaf.png
index dc7d1bbc..4e9b4720 100644
Binary files a/assets/images/emoji/maple_leaf.png and b/assets/images/emoji/maple_leaf.png differ
diff --git a/assets/images/emoji/mask.png b/assets/images/emoji/mask.png
index e71b212c..05887e99 100644
Binary files a/assets/images/emoji/mask.png and b/assets/images/emoji/mask.png differ
diff --git a/assets/images/emoji/massage.png b/assets/images/emoji/massage.png
index 89215138..dd30d159 100644
Binary files a/assets/images/emoji/massage.png and b/assets/images/emoji/massage.png differ
diff --git a/assets/images/emoji/meat_on_bone.png b/assets/images/emoji/meat_on_bone.png
new file mode 100644
index 00000000..5b79a660
Binary files /dev/null and b/assets/images/emoji/meat_on_bone.png differ
diff --git a/assets/images/emoji/mega.png b/assets/images/emoji/mega.png
index d66178b2..022df2f8 100644
Binary files a/assets/images/emoji/mega.png and b/assets/images/emoji/mega.png differ
diff --git a/assets/images/emoji/melon.png b/assets/images/emoji/melon.png
new file mode 100644
index 00000000..11c13cbb
Binary files /dev/null and b/assets/images/emoji/melon.png differ
diff --git a/assets/images/emoji/memo.png b/assets/images/emoji/memo.png
index 9b890c3d..fc97ddbc 100644
Binary files a/assets/images/emoji/memo.png and b/assets/images/emoji/memo.png differ
diff --git a/assets/images/emoji/mens.png b/assets/images/emoji/mens.png
index 1749c4aa..abccfc9f 100644
Binary files a/assets/images/emoji/mens.png and b/assets/images/emoji/mens.png differ
diff --git a/assets/images/emoji/metal.png b/assets/images/emoji/metal.png
index 1bbac1d4..94f1fda2 100644
Binary files a/assets/images/emoji/metal.png and b/assets/images/emoji/metal.png differ
diff --git a/assets/images/emoji/metro.png b/assets/images/emoji/metro.png
index ca0204a0..4acf5ab3 100644
Binary files a/assets/images/emoji/metro.png and b/assets/images/emoji/metro.png differ
diff --git a/assets/images/emoji/microphone.png b/assets/images/emoji/microphone.png
index 79dffda8..68c74ada 100644
Binary files a/assets/images/emoji/microphone.png and b/assets/images/emoji/microphone.png differ
diff --git a/assets/images/emoji/microscope.png b/assets/images/emoji/microscope.png
new file mode 100644
index 00000000..f11d54c0
Binary files /dev/null and b/assets/images/emoji/microscope.png differ
diff --git a/assets/images/emoji/milky_way.png b/assets/images/emoji/milky_way.png
new file mode 100644
index 00000000..901090a1
Binary files /dev/null and b/assets/images/emoji/milky_way.png differ
diff --git a/assets/images/emoji/minibus.png b/assets/images/emoji/minibus.png
new file mode 100644
index 00000000..c52cef23
Binary files /dev/null and b/assets/images/emoji/minibus.png differ
diff --git a/assets/images/emoji/minidisc.png b/assets/images/emoji/minidisc.png
index 8e8245bd..e19cc5d0 100644
Binary files a/assets/images/emoji/minidisc.png and b/assets/images/emoji/minidisc.png differ
diff --git a/assets/images/emoji/mobile_phone_off.png b/assets/images/emoji/mobile_phone_off.png
index 621cf190..fa16c763 100644
Binary files a/assets/images/emoji/mobile_phone_off.png and b/assets/images/emoji/mobile_phone_off.png differ
diff --git a/assets/images/emoji/money_with_wings.png b/assets/images/emoji/money_with_wings.png
new file mode 100644
index 00000000..135e3981
Binary files /dev/null and b/assets/images/emoji/money_with_wings.png differ
diff --git a/assets/images/emoji/moneybag.png b/assets/images/emoji/moneybag.png
index efafdf14..5546c04b 100644
Binary files a/assets/images/emoji/moneybag.png and b/assets/images/emoji/moneybag.png differ
diff --git a/assets/images/emoji/monkey.png b/assets/images/emoji/monkey.png
index 33b1381c..64070359 100644
Binary files a/assets/images/emoji/monkey.png and b/assets/images/emoji/monkey.png differ
diff --git a/assets/images/emoji/monkey_face.png b/assets/images/emoji/monkey_face.png
index c137de49..6964cf4d 100644
Binary files a/assets/images/emoji/monkey_face.png and b/assets/images/emoji/monkey_face.png differ
diff --git a/assets/images/emoji/monorail.png b/assets/images/emoji/monorail.png
new file mode 100644
index 00000000..913d3002
Binary files /dev/null and b/assets/images/emoji/monorail.png differ
diff --git a/assets/images/emoji/moon.png b/assets/images/emoji/moon.png
index a2ace7ab..afdb450d 100644
Binary files a/assets/images/emoji/moon.png and b/assets/images/emoji/moon.png differ
diff --git a/assets/images/emoji/mortar_board.png b/assets/images/emoji/mortar_board.png
index a7df3e48..2e811b09 100644
Binary files a/assets/images/emoji/mortar_board.png and b/assets/images/emoji/mortar_board.png differ
diff --git a/assets/images/emoji/mount_fuji.png b/assets/images/emoji/mount_fuji.png
index 2fdebf6e..4c313e58 100644
Binary files a/assets/images/emoji/mount_fuji.png and b/assets/images/emoji/mount_fuji.png differ
diff --git a/assets/images/emoji/mountain_bicyclist.png b/assets/images/emoji/mountain_bicyclist.png
new file mode 100644
index 00000000..b6988975
Binary files /dev/null and b/assets/images/emoji/mountain_bicyclist.png differ
diff --git a/assets/images/emoji/mountain_cableway.png b/assets/images/emoji/mountain_cableway.png
new file mode 100644
index 00000000..5688bb23
Binary files /dev/null and b/assets/images/emoji/mountain_cableway.png differ
diff --git a/assets/images/emoji/mountain_railway.png b/assets/images/emoji/mountain_railway.png
new file mode 100644
index 00000000..1f3d1aab
Binary files /dev/null and b/assets/images/emoji/mountain_railway.png differ
diff --git a/assets/images/emoji/mouse.png b/assets/images/emoji/mouse.png
index 35da0e5c..8ff162e2 100644
Binary files a/assets/images/emoji/mouse.png and b/assets/images/emoji/mouse.png differ
diff --git a/assets/images/emoji/mouse2.png b/assets/images/emoji/mouse2.png
new file mode 100644
index 00000000..2d777e5e
Binary files /dev/null and b/assets/images/emoji/mouse2.png differ
diff --git a/assets/images/emoji/movie_camera.png b/assets/images/emoji/movie_camera.png
index ec2047ce..9c143840 100644
Binary files a/assets/images/emoji/movie_camera.png and b/assets/images/emoji/movie_camera.png differ
diff --git a/assets/images/emoji/moyai.png b/assets/images/emoji/moyai.png
new file mode 100644
index 00000000..61a1a9c2
Binary files /dev/null and b/assets/images/emoji/moyai.png differ
diff --git a/assets/images/emoji/muscle.png b/assets/images/emoji/muscle.png
index 5381079f..19f92efb 100644
Binary files a/assets/images/emoji/muscle.png and b/assets/images/emoji/muscle.png differ
diff --git a/assets/images/emoji/mushroom.png b/assets/images/emoji/mushroom.png
new file mode 100644
index 00000000..5eeed8e7
Binary files /dev/null and b/assets/images/emoji/mushroom.png differ
diff --git a/assets/images/emoji/musical_keyboard.png b/assets/images/emoji/musical_keyboard.png
new file mode 100644
index 00000000..93647a4a
Binary files /dev/null and b/assets/images/emoji/musical_keyboard.png differ
diff --git a/assets/images/emoji/musical_note.png b/assets/images/emoji/musical_note.png
index 476d49e4..68b261bc 100644
Binary files a/assets/images/emoji/musical_note.png and b/assets/images/emoji/musical_note.png differ
diff --git a/assets/images/emoji/musical_score.png b/assets/images/emoji/musical_score.png
new file mode 100644
index 00000000..c99e3381
Binary files /dev/null and b/assets/images/emoji/musical_score.png differ
diff --git a/assets/images/emoji/mute.png b/assets/images/emoji/mute.png
new file mode 100644
index 00000000..4cf67c36
Binary files /dev/null and b/assets/images/emoji/mute.png differ
diff --git a/assets/images/emoji/nail_care.png b/assets/images/emoji/nail_care.png
index acb0d774..6a66e63d 100644
Binary files a/assets/images/emoji/nail_care.png and b/assets/images/emoji/nail_care.png differ
diff --git a/assets/images/emoji/name_badge.png b/assets/images/emoji/name_badge.png
new file mode 100644
index 00000000..2b712dcd
Binary files /dev/null and b/assets/images/emoji/name_badge.png differ
diff --git a/assets/images/emoji/neckbeard.png b/assets/images/emoji/neckbeard.png
new file mode 100644
index 00000000..35ebdf06
Binary files /dev/null and b/assets/images/emoji/neckbeard.png differ
diff --git a/assets/images/emoji/necktie.png b/assets/images/emoji/necktie.png
index e5909380..80461c66 100644
Binary files a/assets/images/emoji/necktie.png and b/assets/images/emoji/necktie.png differ
diff --git a/assets/images/emoji/negative_squared_cross_mark.png b/assets/images/emoji/negative_squared_cross_mark.png
new file mode 100644
index 00000000..b47a0cec
Binary files /dev/null and b/assets/images/emoji/negative_squared_cross_mark.png differ
diff --git a/assets/images/emoji/neutral_face.png b/assets/images/emoji/neutral_face.png
new file mode 100644
index 00000000..682a1ba0
Binary files /dev/null and b/assets/images/emoji/neutral_face.png differ
diff --git a/assets/images/emoji/new.png b/assets/images/emoji/new.png
index 8c586250..28d1570e 100644
Binary files a/assets/images/emoji/new.png and b/assets/images/emoji/new.png differ
diff --git a/assets/images/emoji/new_moon.png b/assets/images/emoji/new_moon.png
new file mode 100644
index 00000000..72492cb9
Binary files /dev/null and b/assets/images/emoji/new_moon.png differ
diff --git a/assets/images/emoji/new_moon_with_face.png b/assets/images/emoji/new_moon_with_face.png
new file mode 100644
index 00000000..b9aff7a0
Binary files /dev/null and b/assets/images/emoji/new_moon_with_face.png differ
diff --git a/assets/images/emoji/newspaper.png b/assets/images/emoji/newspaper.png
new file mode 100644
index 00000000..d171394e
Binary files /dev/null and b/assets/images/emoji/newspaper.png differ
diff --git a/assets/images/emoji/ng.png b/assets/images/emoji/ng.png
new file mode 100644
index 00000000..2ca180ae
Binary files /dev/null and b/assets/images/emoji/ng.png differ
diff --git a/assets/images/emoji/nine.png b/assets/images/emoji/nine.png
new file mode 100644
index 00000000..8006cc90
Binary files /dev/null and b/assets/images/emoji/nine.png differ
diff --git a/assets/images/emoji/no_bell.png b/assets/images/emoji/no_bell.png
new file mode 100644
index 00000000..613b81cd
Binary files /dev/null and b/assets/images/emoji/no_bell.png differ
diff --git a/assets/images/emoji/no_bicycles.png b/assets/images/emoji/no_bicycles.png
new file mode 100644
index 00000000..4b262166
Binary files /dev/null and b/assets/images/emoji/no_bicycles.png differ
diff --git a/assets/images/emoji/no_entry.png b/assets/images/emoji/no_entry.png
new file mode 100644
index 00000000..cf2086a8
Binary files /dev/null and b/assets/images/emoji/no_entry.png differ
diff --git a/assets/images/emoji/no_entry_sign.png b/assets/images/emoji/no_entry_sign.png
new file mode 100644
index 00000000..a8444d18
Binary files /dev/null and b/assets/images/emoji/no_entry_sign.png differ
diff --git a/assets/images/emoji/no_good.png b/assets/images/emoji/no_good.png
index 06bc3a87..d459a35b 100644
Binary files a/assets/images/emoji/no_good.png and b/assets/images/emoji/no_good.png differ
diff --git a/assets/images/emoji/no_mobile_phones.png b/assets/images/emoji/no_mobile_phones.png
new file mode 100644
index 00000000..41df57cf
Binary files /dev/null and b/assets/images/emoji/no_mobile_phones.png differ
diff --git a/assets/images/emoji/no_mouth.png b/assets/images/emoji/no_mouth.png
new file mode 100644
index 00000000..e6780204
Binary files /dev/null and b/assets/images/emoji/no_mouth.png differ
diff --git a/assets/images/emoji/no_pedestrians.png b/assets/images/emoji/no_pedestrians.png
new file mode 100644
index 00000000..c35f530b
Binary files /dev/null and b/assets/images/emoji/no_pedestrians.png differ
diff --git a/assets/images/emoji/no_smoking.png b/assets/images/emoji/no_smoking.png
index a304c808..5880ddfd 100644
Binary files a/assets/images/emoji/no_smoking.png and b/assets/images/emoji/no_smoking.png differ
diff --git a/assets/images/emoji/non-potable_water.png b/assets/images/emoji/non-potable_water.png
new file mode 100644
index 00000000..1b29d35b
Binary files /dev/null and b/assets/images/emoji/non-potable_water.png differ
diff --git a/assets/images/emoji/nose.png b/assets/images/emoji/nose.png
index 6ecf9fbc..ad17c16c 100644
Binary files a/assets/images/emoji/nose.png and b/assets/images/emoji/nose.png differ
diff --git a/assets/images/emoji/notebook.png b/assets/images/emoji/notebook.png
new file mode 100644
index 00000000..07ea6087
Binary files /dev/null and b/assets/images/emoji/notebook.png differ
diff --git a/assets/images/emoji/notebook_with_decorative_cover.png b/assets/images/emoji/notebook_with_decorative_cover.png
new file mode 100644
index 00000000..4f3b14c8
Binary files /dev/null and b/assets/images/emoji/notebook_with_decorative_cover.png differ
diff --git a/assets/images/emoji/notes.png b/assets/images/emoji/notes.png
index 4f445684..0956d6ab 100644
Binary files a/assets/images/emoji/notes.png and b/assets/images/emoji/notes.png differ
diff --git a/assets/images/emoji/nut_and_bolt.png b/assets/images/emoji/nut_and_bolt.png
new file mode 100644
index 00000000..bddfa72a
Binary files /dev/null and b/assets/images/emoji/nut_and_bolt.png differ
diff --git a/assets/images/emoji/o.png b/assets/images/emoji/o.png
index a283db8f..0ededebe 100644
Binary files a/assets/images/emoji/o.png and b/assets/images/emoji/o.png differ
diff --git a/assets/images/emoji/o2.png b/assets/images/emoji/o2.png
index 9858eed4..d85f9fb9 100644
Binary files a/assets/images/emoji/o2.png and b/assets/images/emoji/o2.png differ
diff --git a/assets/images/emoji/ocean.png b/assets/images/emoji/ocean.png
index 6f1bb9d1..f8d520cd 100644
Binary files a/assets/images/emoji/ocean.png and b/assets/images/emoji/ocean.png differ
diff --git a/assets/images/emoji/octocat.png b/assets/images/emoji/octocat.png
index 0b68cf0d..361f6822 100644
Binary files a/assets/images/emoji/octocat.png and b/assets/images/emoji/octocat.png differ
diff --git a/assets/images/emoji/octopus.png b/assets/images/emoji/octopus.png
index 7deac05f..52ce64b4 100644
Binary files a/assets/images/emoji/octopus.png and b/assets/images/emoji/octopus.png differ
diff --git a/assets/images/emoji/oden.png b/assets/images/emoji/oden.png
index 66fbc2c7..73add1c7 100644
Binary files a/assets/images/emoji/oden.png and b/assets/images/emoji/oden.png differ
diff --git a/assets/images/emoji/office.png b/assets/images/emoji/office.png
index 1b2a2862..ea9281a4 100644
Binary files a/assets/images/emoji/office.png and b/assets/images/emoji/office.png differ
diff --git a/assets/images/emoji/ok.png b/assets/images/emoji/ok.png
index 015870e2..6433d1a9 100644
Binary files a/assets/images/emoji/ok.png and b/assets/images/emoji/ok.png differ
diff --git a/assets/images/emoji/ok_hand.png b/assets/images/emoji/ok_hand.png
index 636d39bb..80c5aebb 100644
Binary files a/assets/images/emoji/ok_hand.png and b/assets/images/emoji/ok_hand.png differ
diff --git a/assets/images/emoji/ok_woman.png b/assets/images/emoji/ok_woman.png
index 3b3ebba6..e8b98194 100644
Binary files a/assets/images/emoji/ok_woman.png and b/assets/images/emoji/ok_woman.png differ
diff --git a/assets/images/emoji/older_man.png b/assets/images/emoji/older_man.png
index ecfb575a..149f0cfb 100644
Binary files a/assets/images/emoji/older_man.png and b/assets/images/emoji/older_man.png differ
diff --git a/assets/images/emoji/older_woman.png b/assets/images/emoji/older_woman.png
index 1d565d8d..f839565f 100644
Binary files a/assets/images/emoji/older_woman.png and b/assets/images/emoji/older_woman.png differ
diff --git a/assets/images/emoji/on.png b/assets/images/emoji/on.png
new file mode 100644
index 00000000..3595387f
Binary files /dev/null and b/assets/images/emoji/on.png differ
diff --git a/assets/images/emoji/oncoming_automobile.png b/assets/images/emoji/oncoming_automobile.png
new file mode 100644
index 00000000..cb46de22
Binary files /dev/null and b/assets/images/emoji/oncoming_automobile.png differ
diff --git a/assets/images/emoji/oncoming_bus.png b/assets/images/emoji/oncoming_bus.png
new file mode 100644
index 00000000..3695f762
Binary files /dev/null and b/assets/images/emoji/oncoming_bus.png differ
diff --git a/assets/images/emoji/oncoming_police_car.png b/assets/images/emoji/oncoming_police_car.png
new file mode 100644
index 00000000..af20e7ef
Binary files /dev/null and b/assets/images/emoji/oncoming_police_car.png differ
diff --git a/assets/images/emoji/oncoming_taxi.png b/assets/images/emoji/oncoming_taxi.png
new file mode 100644
index 00000000..f78cf310
Binary files /dev/null and b/assets/images/emoji/oncoming_taxi.png differ
diff --git a/assets/images/emoji/one.png b/assets/images/emoji/one.png
new file mode 100644
index 00000000..2d1f9f8c
Binary files /dev/null and b/assets/images/emoji/one.png differ
diff --git a/assets/images/emoji/open_file_folder.png b/assets/images/emoji/open_file_folder.png
new file mode 100644
index 00000000..2bbbbf5e
Binary files /dev/null and b/assets/images/emoji/open_file_folder.png differ
diff --git a/assets/images/emoji/open_hands.png b/assets/images/emoji/open_hands.png
index bc2fe3de..2cc25bd4 100644
Binary files a/assets/images/emoji/open_hands.png and b/assets/images/emoji/open_hands.png differ
diff --git a/assets/images/emoji/open_mouth.png b/assets/images/emoji/open_mouth.png
new file mode 100644
index 00000000..daf91427
Binary files /dev/null and b/assets/images/emoji/open_mouth.png differ
diff --git a/assets/images/emoji/ophiuchus.png b/assets/images/emoji/ophiuchus.png
index 8c4be843..4eef715b 100644
Binary files a/assets/images/emoji/ophiuchus.png and b/assets/images/emoji/ophiuchus.png differ
diff --git a/assets/images/emoji/orange_book.png b/assets/images/emoji/orange_book.png
new file mode 100644
index 00000000..49650d59
Binary files /dev/null and b/assets/images/emoji/orange_book.png differ
diff --git a/assets/images/emoji/outbox_tray.png b/assets/images/emoji/outbox_tray.png
new file mode 100644
index 00000000..7ad15e64
Binary files /dev/null and b/assets/images/emoji/outbox_tray.png differ
diff --git a/assets/images/emoji/ox.png b/assets/images/emoji/ox.png
new file mode 100644
index 00000000..8d981946
Binary files /dev/null and b/assets/images/emoji/ox.png differ
diff --git a/assets/images/emoji/page_facing_up.png b/assets/images/emoji/page_facing_up.png
new file mode 100644
index 00000000..64cd2e1b
Binary files /dev/null and b/assets/images/emoji/page_facing_up.png differ
diff --git a/assets/images/emoji/page_with_curl.png b/assets/images/emoji/page_with_curl.png
new file mode 100644
index 00000000..bf8f979d
Binary files /dev/null and b/assets/images/emoji/page_with_curl.png differ
diff --git a/assets/images/emoji/pager.png b/assets/images/emoji/pager.png
new file mode 100644
index 00000000..e3e1fc44
Binary files /dev/null and b/assets/images/emoji/pager.png differ
diff --git a/assets/images/emoji/palm_tree.png b/assets/images/emoji/palm_tree.png
index 92fc3c2c..d534785e 100644
Binary files a/assets/images/emoji/palm_tree.png and b/assets/images/emoji/palm_tree.png differ
diff --git a/assets/images/emoji/panda_face.png b/assets/images/emoji/panda_face.png
new file mode 100644
index 00000000..a794fb17
Binary files /dev/null and b/assets/images/emoji/panda_face.png differ
diff --git a/assets/images/emoji/paperclip.png b/assets/images/emoji/paperclip.png
new file mode 100644
index 00000000..677669a8
Binary files /dev/null and b/assets/images/emoji/paperclip.png differ
diff --git a/assets/images/emoji/parking.png b/assets/images/emoji/parking.png
index bd114958..c24af81c 100644
Binary files a/assets/images/emoji/parking.png and b/assets/images/emoji/parking.png differ
diff --git a/assets/images/emoji/part_alternation_mark.png b/assets/images/emoji/part_alternation_mark.png
index bff6f750..45dc9b85 100644
Binary files a/assets/images/emoji/part_alternation_mark.png and b/assets/images/emoji/part_alternation_mark.png differ
diff --git a/assets/images/emoji/partly_sunny.png b/assets/images/emoji/partly_sunny.png
new file mode 100644
index 00000000..020dd5ff
Binary files /dev/null and b/assets/images/emoji/partly_sunny.png differ
diff --git a/assets/images/emoji/passport_control.png b/assets/images/emoji/passport_control.png
new file mode 100644
index 00000000..675b76d3
Binary files /dev/null and b/assets/images/emoji/passport_control.png differ
diff --git a/assets/images/emoji/paw_prints.png b/assets/images/emoji/paw_prints.png
new file mode 100644
index 00000000..89b9fec9
Binary files /dev/null and b/assets/images/emoji/paw_prints.png differ
diff --git a/assets/images/emoji/peach.png b/assets/images/emoji/peach.png
new file mode 100644
index 00000000..ee2139ec
Binary files /dev/null and b/assets/images/emoji/peach.png differ
diff --git a/assets/images/emoji/pear.png b/assets/images/emoji/pear.png
new file mode 100644
index 00000000..f24aca8c
Binary files /dev/null and b/assets/images/emoji/pear.png differ
diff --git a/assets/images/emoji/pencil.png b/assets/images/emoji/pencil.png
index 9b890c3d..fc97ddbc 100644
Binary files a/assets/images/emoji/pencil.png and b/assets/images/emoji/pencil.png differ
diff --git a/assets/images/emoji/pencil2.png b/assets/images/emoji/pencil2.png
new file mode 100644
index 00000000..61bfef97
Binary files /dev/null and b/assets/images/emoji/pencil2.png differ
diff --git a/assets/images/emoji/penguin.png b/assets/images/emoji/penguin.png
index 541e8531..d8edbcb8 100644
Binary files a/assets/images/emoji/penguin.png and b/assets/images/emoji/penguin.png differ
diff --git a/assets/images/emoji/pensive.png b/assets/images/emoji/pensive.png
index e6e1624a..4159f3c4 100644
Binary files a/assets/images/emoji/pensive.png and b/assets/images/emoji/pensive.png differ
diff --git a/assets/images/emoji/performing_arts.png b/assets/images/emoji/performing_arts.png
new file mode 100644
index 00000000..899fbe5a
Binary files /dev/null and b/assets/images/emoji/performing_arts.png differ
diff --git a/assets/images/emoji/persevere.png b/assets/images/emoji/persevere.png
index a6a347ed..f99f6da4 100644
Binary files a/assets/images/emoji/persevere.png and b/assets/images/emoji/persevere.png differ
diff --git a/assets/images/emoji/person_frowning.png b/assets/images/emoji/person_frowning.png
new file mode 100644
index 00000000..6f34d5e1
Binary files /dev/null and b/assets/images/emoji/person_frowning.png differ
diff --git a/assets/images/emoji/person_with_blond_hair.png b/assets/images/emoji/person_with_blond_hair.png
index 4abdfdf0..c144301c 100644
Binary files a/assets/images/emoji/person_with_blond_hair.png and b/assets/images/emoji/person_with_blond_hair.png differ
diff --git a/assets/images/emoji/person_with_pouting_face.png b/assets/images/emoji/person_with_pouting_face.png
new file mode 100644
index 00000000..c4a95c3b
Binary files /dev/null and b/assets/images/emoji/person_with_pouting_face.png differ
diff --git a/assets/images/emoji/phone.png b/assets/images/emoji/phone.png
index e1d64368..87d2559b 100644
Binary files a/assets/images/emoji/phone.png and b/assets/images/emoji/phone.png differ
diff --git a/assets/images/emoji/pig.png b/assets/images/emoji/pig.png
index 38b05b41..f7f273c7 100644
Binary files a/assets/images/emoji/pig.png and b/assets/images/emoji/pig.png differ
diff --git a/assets/images/emoji/pig2.png b/assets/images/emoji/pig2.png
new file mode 100644
index 00000000..fec3374d
Binary files /dev/null and b/assets/images/emoji/pig2.png differ
diff --git a/assets/images/emoji/pig_nose.png b/assets/images/emoji/pig_nose.png
new file mode 100644
index 00000000..38d61244
Binary files /dev/null and b/assets/images/emoji/pig_nose.png differ
diff --git a/assets/images/emoji/pill.png b/assets/images/emoji/pill.png
index 405d1c57..cd84a78f 100644
Binary files a/assets/images/emoji/pill.png and b/assets/images/emoji/pill.png differ
diff --git a/assets/images/emoji/pineapple.png b/assets/images/emoji/pineapple.png
new file mode 100644
index 00000000..d6f8e287
Binary files /dev/null and b/assets/images/emoji/pineapple.png differ
diff --git a/assets/images/emoji/pisces.png b/assets/images/emoji/pisces.png
index 5f49272f..6db2c3d5 100644
Binary files a/assets/images/emoji/pisces.png and b/assets/images/emoji/pisces.png differ
diff --git a/assets/images/emoji/pizza.png b/assets/images/emoji/pizza.png
new file mode 100644
index 00000000..460367d0
Binary files /dev/null and b/assets/images/emoji/pizza.png differ
diff --git a/assets/images/emoji/plus1.png b/assets/images/emoji/plus1.png
index 4dae7a09..81786c1d 100644
Binary files a/assets/images/emoji/plus1.png and b/assets/images/emoji/plus1.png differ
diff --git a/assets/images/emoji/point_down.png b/assets/images/emoji/point_down.png
index 37f4eb1b..658c6d91 100644
Binary files a/assets/images/emoji/point_down.png and b/assets/images/emoji/point_down.png differ
diff --git a/assets/images/emoji/point_left.png b/assets/images/emoji/point_left.png
index 4faf0db8..38a99b43 100644
Binary files a/assets/images/emoji/point_left.png and b/assets/images/emoji/point_left.png differ
diff --git a/assets/images/emoji/point_right.png b/assets/images/emoji/point_right.png
index 6d0b8f3b..6f9f029a 100644
Binary files a/assets/images/emoji/point_right.png and b/assets/images/emoji/point_right.png differ
diff --git a/assets/images/emoji/point_up.png b/assets/images/emoji/point_up.png
index 533a3d1b..01896e21 100644
Binary files a/assets/images/emoji/point_up.png and b/assets/images/emoji/point_up.png differ
diff --git a/assets/images/emoji/point_up_2.png b/assets/images/emoji/point_up_2.png
index 87956d23..1cfe7367 100644
Binary files a/assets/images/emoji/point_up_2.png and b/assets/images/emoji/point_up_2.png differ
diff --git a/assets/images/emoji/police_car.png b/assets/images/emoji/police_car.png
index 00a4e173..b8f17275 100644
Binary files a/assets/images/emoji/police_car.png and b/assets/images/emoji/police_car.png differ
diff --git a/assets/images/emoji/poodle.png b/assets/images/emoji/poodle.png
new file mode 100644
index 00000000..adac80bd
Binary files /dev/null and b/assets/images/emoji/poodle.png differ
diff --git a/assets/images/emoji/poop.png b/assets/images/emoji/poop.png
index 69bc33f1..73a4dc84 100644
Binary files a/assets/images/emoji/poop.png and b/assets/images/emoji/poop.png differ
diff --git a/assets/images/emoji/post_office.png b/assets/images/emoji/post_office.png
index 4ec24548..43b59e30 100644
Binary files a/assets/images/emoji/post_office.png and b/assets/images/emoji/post_office.png differ
diff --git a/assets/images/emoji/postal_horn.png b/assets/images/emoji/postal_horn.png
new file mode 100644
index 00000000..b12c3002
Binary files /dev/null and b/assets/images/emoji/postal_horn.png differ
diff --git a/assets/images/emoji/postbox.png b/assets/images/emoji/postbox.png
index 1cb2ea99..ce04b700 100644
Binary files a/assets/images/emoji/postbox.png and b/assets/images/emoji/postbox.png differ
diff --git a/assets/images/emoji/potable_water.png b/assets/images/emoji/potable_water.png
new file mode 100644
index 00000000..e9fd5607
Binary files /dev/null and b/assets/images/emoji/potable_water.png differ
diff --git a/assets/images/emoji/pouch.png b/assets/images/emoji/pouch.png
new file mode 100644
index 00000000..dc35ae8e
Binary files /dev/null and b/assets/images/emoji/pouch.png differ
diff --git a/assets/images/emoji/poultry_leg.png b/assets/images/emoji/poultry_leg.png
new file mode 100644
index 00000000..43ad8596
Binary files /dev/null and b/assets/images/emoji/poultry_leg.png differ
diff --git a/assets/images/emoji/pound.png b/assets/images/emoji/pound.png
new file mode 100644
index 00000000..f8be91d7
Binary files /dev/null and b/assets/images/emoji/pound.png differ
diff --git a/assets/images/emoji/pouting_cat.png b/assets/images/emoji/pouting_cat.png
new file mode 100644
index 00000000..4325fd48
Binary files /dev/null and b/assets/images/emoji/pouting_cat.png differ
diff --git a/assets/images/emoji/pray.png b/assets/images/emoji/pray.png
index b91bde40..f86c992d 100644
Binary files a/assets/images/emoji/pray.png and b/assets/images/emoji/pray.png differ
diff --git a/assets/images/emoji/princess.png b/assets/images/emoji/princess.png
index 90a2f9e1..1ebb2ce9 100644
Binary files a/assets/images/emoji/princess.png and b/assets/images/emoji/princess.png differ
diff --git a/assets/images/emoji/punch.png b/assets/images/emoji/punch.png
index 52dbccae..277047b7 100644
Binary files a/assets/images/emoji/punch.png and b/assets/images/emoji/punch.png differ
diff --git a/assets/images/emoji/purple_heart.png b/assets/images/emoji/purple_heart.png
index 98c0bc72..d5f87504 100644
Binary files a/assets/images/emoji/purple_heart.png and b/assets/images/emoji/purple_heart.png differ
diff --git a/assets/images/emoji/purse.png b/assets/images/emoji/purse.png
new file mode 100644
index 00000000..8f06a2b9
Binary files /dev/null and b/assets/images/emoji/purse.png differ
diff --git a/assets/images/emoji/pushpin.png b/assets/images/emoji/pushpin.png
new file mode 100644
index 00000000..540c4ecb
Binary files /dev/null and b/assets/images/emoji/pushpin.png differ
diff --git a/assets/images/emoji/put_litter_in_its_place.png b/assets/images/emoji/put_litter_in_its_place.png
new file mode 100644
index 00000000..c2e350c2
Binary files /dev/null and b/assets/images/emoji/put_litter_in_its_place.png differ
diff --git a/assets/images/emoji/question.png b/assets/images/emoji/question.png
index 1c3edc0a..38cedf56 100644
Binary files a/assets/images/emoji/question.png and b/assets/images/emoji/question.png differ
diff --git a/assets/images/emoji/rabbit.png b/assets/images/emoji/rabbit.png
index 178f91dd..5cb3ef6f 100644
Binary files a/assets/images/emoji/rabbit.png and b/assets/images/emoji/rabbit.png differ
diff --git a/assets/images/emoji/rabbit2.png b/assets/images/emoji/rabbit2.png
new file mode 100644
index 00000000..789de15c
Binary files /dev/null and b/assets/images/emoji/rabbit2.png differ
diff --git a/assets/images/emoji/racehorse.png b/assets/images/emoji/racehorse.png
index e3267946..4d09c64d 100644
Binary files a/assets/images/emoji/racehorse.png and b/assets/images/emoji/racehorse.png differ
diff --git a/assets/images/emoji/radio.png b/assets/images/emoji/radio.png
index e377db2c..ea589efe 100644
Binary files a/assets/images/emoji/radio.png and b/assets/images/emoji/radio.png differ
diff --git a/assets/images/emoji/radio_button.png b/assets/images/emoji/radio_button.png
new file mode 100644
index 00000000..63755eec
Binary files /dev/null and b/assets/images/emoji/radio_button.png differ
diff --git a/assets/images/emoji/rage.png b/assets/images/emoji/rage.png
index cdd8858c..c65ddff5 100644
Binary files a/assets/images/emoji/rage.png and b/assets/images/emoji/rage.png differ
diff --git a/assets/images/emoji/rage1.png b/assets/images/emoji/rage1.png
index d4d84679..1506ba40 100644
Binary files a/assets/images/emoji/rage1.png and b/assets/images/emoji/rage1.png differ
diff --git a/assets/images/emoji/rage2.png b/assets/images/emoji/rage2.png
index 0cd7052c..f792e063 100644
Binary files a/assets/images/emoji/rage2.png and b/assets/images/emoji/rage2.png differ
diff --git a/assets/images/emoji/rage3.png b/assets/images/emoji/rage3.png
index 340ad870..58764cbc 100644
Binary files a/assets/images/emoji/rage3.png and b/assets/images/emoji/rage3.png differ
diff --git a/assets/images/emoji/rage4.png b/assets/images/emoji/rage4.png
index 6e6c1238..c726c94a 100644
Binary files a/assets/images/emoji/rage4.png and b/assets/images/emoji/rage4.png differ
diff --git a/assets/images/emoji/railway_car.png b/assets/images/emoji/railway_car.png
new file mode 100644
index 00000000..22361158
Binary files /dev/null and b/assets/images/emoji/railway_car.png differ
diff --git a/assets/images/emoji/rainbow.png b/assets/images/emoji/rainbow.png
index 4b150bd5..6b1faa03 100644
Binary files a/assets/images/emoji/rainbow.png and b/assets/images/emoji/rainbow.png differ
diff --git a/assets/images/emoji/raised_hand.png b/assets/images/emoji/raised_hand.png
new file mode 100644
index 00000000..5e45c25a
Binary files /dev/null and b/assets/images/emoji/raised_hand.png differ
diff --git a/assets/images/emoji/raised_hands.png b/assets/images/emoji/raised_hands.png
index f9f2a95f..e03142bd 100644
Binary files a/assets/images/emoji/raised_hands.png and b/assets/images/emoji/raised_hands.png differ
diff --git a/assets/images/emoji/raising_hand.png b/assets/images/emoji/raising_hand.png
new file mode 100644
index 00000000..e1741a40
Binary files /dev/null and b/assets/images/emoji/raising_hand.png differ
diff --git a/assets/images/emoji/ram.png b/assets/images/emoji/ram.png
new file mode 100644
index 00000000..5ea7bfbc
Binary files /dev/null and b/assets/images/emoji/ram.png differ
diff --git a/assets/images/emoji/ramen.png b/assets/images/emoji/ramen.png
index c6524f3e..78dc7d53 100644
Binary files a/assets/images/emoji/ramen.png and b/assets/images/emoji/ramen.png differ
diff --git a/assets/images/emoji/rat.png b/assets/images/emoji/rat.png
new file mode 100644
index 00000000..1c463dfd
Binary files /dev/null and b/assets/images/emoji/rat.png differ
diff --git a/assets/images/emoji/recycle.png b/assets/images/emoji/recycle.png
new file mode 100644
index 00000000..99104c0e
Binary files /dev/null and b/assets/images/emoji/recycle.png differ
diff --git a/assets/images/emoji/red_car.png b/assets/images/emoji/red_car.png
index c8bc8020..d70a2f06 100644
Binary files a/assets/images/emoji/red_car.png and b/assets/images/emoji/red_car.png differ
diff --git a/assets/images/emoji/red_circle.png b/assets/images/emoji/red_circle.png
index ef13dc4a..b391289b 100644
Binary files a/assets/images/emoji/red_circle.png and b/assets/images/emoji/red_circle.png differ
diff --git a/assets/images/emoji/registered.png b/assets/images/emoji/registered.png
index dcecc555..31c68a80 100644
Binary files a/assets/images/emoji/registered.png and b/assets/images/emoji/registered.png differ
diff --git a/assets/images/emoji/relaxed.png b/assets/images/emoji/relaxed.png
index 4b8412cd..bbab82d3 100644
Binary files a/assets/images/emoji/relaxed.png and b/assets/images/emoji/relaxed.png differ
diff --git a/assets/images/emoji/relieved.png b/assets/images/emoji/relieved.png
index e9405da0..fe5629f4 100644
Binary files a/assets/images/emoji/relieved.png and b/assets/images/emoji/relieved.png differ
diff --git a/assets/images/emoji/repeat.png b/assets/images/emoji/repeat.png
new file mode 100644
index 00000000..80113b69
Binary files /dev/null and b/assets/images/emoji/repeat.png differ
diff --git a/assets/images/emoji/repeat_one.png b/assets/images/emoji/repeat_one.png
new file mode 100644
index 00000000..3c47bcc1
Binary files /dev/null and b/assets/images/emoji/repeat_one.png differ
diff --git a/assets/images/emoji/restroom.png b/assets/images/emoji/restroom.png
index 612eccda..d6c111b2 100644
Binary files a/assets/images/emoji/restroom.png and b/assets/images/emoji/restroom.png differ
diff --git a/assets/images/emoji/revolving_hearts.png b/assets/images/emoji/revolving_hearts.png
new file mode 100644
index 00000000..ea3317c4
Binary files /dev/null and b/assets/images/emoji/revolving_hearts.png differ
diff --git a/assets/images/emoji/rewind.png b/assets/images/emoji/rewind.png
index 3997771b..26289dc3 100644
Binary files a/assets/images/emoji/rewind.png and b/assets/images/emoji/rewind.png differ
diff --git a/assets/images/emoji/ribbon.png b/assets/images/emoji/ribbon.png
index b7281b0f..63ee5ba5 100644
Binary files a/assets/images/emoji/ribbon.png and b/assets/images/emoji/ribbon.png differ
diff --git a/assets/images/emoji/rice.png b/assets/images/emoji/rice.png
index 13ce2747..1fd22027 100644
Binary files a/assets/images/emoji/rice.png and b/assets/images/emoji/rice.png differ
diff --git a/assets/images/emoji/rice_ball.png b/assets/images/emoji/rice_ball.png
index 084660ef..04f8a880 100644
Binary files a/assets/images/emoji/rice_ball.png and b/assets/images/emoji/rice_ball.png differ
diff --git a/assets/images/emoji/rice_cracker.png b/assets/images/emoji/rice_cracker.png
index 3f7cbffc..954c901e 100644
Binary files a/assets/images/emoji/rice_cracker.png and b/assets/images/emoji/rice_cracker.png differ
diff --git a/assets/images/emoji/rice_scene.png b/assets/images/emoji/rice_scene.png
index ce41fe81..14361988 100644
Binary files a/assets/images/emoji/rice_scene.png and b/assets/images/emoji/rice_scene.png differ
diff --git a/assets/images/emoji/ring.png b/assets/images/emoji/ring.png
index 0fd547aa..8a57fd68 100644
Binary files a/assets/images/emoji/ring.png and b/assets/images/emoji/ring.png differ
diff --git a/assets/images/emoji/rocket.png b/assets/images/emoji/rocket.png
index 4b52a2e6..783078d3 100644
Binary files a/assets/images/emoji/rocket.png and b/assets/images/emoji/rocket.png differ
diff --git a/assets/images/emoji/roller_coaster.png b/assets/images/emoji/roller_coaster.png
index d33d7c54..9180b986 100644
Binary files a/assets/images/emoji/roller_coaster.png and b/assets/images/emoji/roller_coaster.png differ
diff --git a/assets/images/emoji/rooster.png b/assets/images/emoji/rooster.png
new file mode 100644
index 00000000..fab23ad3
Binary files /dev/null and b/assets/images/emoji/rooster.png differ
diff --git a/assets/images/emoji/rose.png b/assets/images/emoji/rose.png
index d28df9eb..3479fbcb 100644
Binary files a/assets/images/emoji/rose.png and b/assets/images/emoji/rose.png differ
diff --git a/assets/images/emoji/rotating_light.png b/assets/images/emoji/rotating_light.png
new file mode 100644
index 00000000..6cf4a775
Binary files /dev/null and b/assets/images/emoji/rotating_light.png differ
diff --git a/assets/images/emoji/round_pushpin.png b/assets/images/emoji/round_pushpin.png
new file mode 100644
index 00000000..e498e92c
Binary files /dev/null and b/assets/images/emoji/round_pushpin.png differ
diff --git a/assets/images/emoji/rowboat.png b/assets/images/emoji/rowboat.png
new file mode 100644
index 00000000..e370d0fb
Binary files /dev/null and b/assets/images/emoji/rowboat.png differ
diff --git a/assets/images/emoji/ru.png b/assets/images/emoji/ru.png
index 1fefb2ca..55fcf354 100644
Binary files a/assets/images/emoji/ru.png and b/assets/images/emoji/ru.png differ
diff --git a/assets/images/emoji/rugby_football.png b/assets/images/emoji/rugby_football.png
new file mode 100644
index 00000000..f8db67d7
Binary files /dev/null and b/assets/images/emoji/rugby_football.png differ
diff --git a/assets/images/emoji/runner.png b/assets/images/emoji/runner.png
index a2c78f55..cb004296 100644
Binary files a/assets/images/emoji/runner.png and b/assets/images/emoji/runner.png differ
diff --git a/assets/images/emoji/running.png b/assets/images/emoji/running.png
new file mode 100644
index 00000000..cb004296
Binary files /dev/null and b/assets/images/emoji/running.png differ
diff --git a/assets/images/emoji/running_shirt_with_sash.png b/assets/images/emoji/running_shirt_with_sash.png
new file mode 100644
index 00000000..0d68bba0
Binary files /dev/null and b/assets/images/emoji/running_shirt_with_sash.png differ
diff --git a/assets/images/emoji/sa.png b/assets/images/emoji/sa.png
index 82a27c7a..387f098b 100644
Binary files a/assets/images/emoji/sa.png and b/assets/images/emoji/sa.png differ
diff --git a/assets/images/emoji/sagittarius.png b/assets/images/emoji/sagittarius.png
index 8c14a431..8b5435ba 100644
Binary files a/assets/images/emoji/sagittarius.png and b/assets/images/emoji/sagittarius.png differ
diff --git a/assets/images/emoji/sailboat.png b/assets/images/emoji/sailboat.png
index 8084f0e5..ff656dc6 100644
Binary files a/assets/images/emoji/sailboat.png and b/assets/images/emoji/sailboat.png differ
diff --git a/assets/images/emoji/sake.png b/assets/images/emoji/sake.png
index ce544d72..1f69907e 100644
Binary files a/assets/images/emoji/sake.png and b/assets/images/emoji/sake.png differ
diff --git a/assets/images/emoji/sandal.png b/assets/images/emoji/sandal.png
index 4f740a33..0bb3f663 100644
Binary files a/assets/images/emoji/sandal.png and b/assets/images/emoji/sandal.png differ
diff --git a/assets/images/emoji/santa.png b/assets/images/emoji/santa.png
index c753675e..a2240c07 100644
Binary files a/assets/images/emoji/santa.png and b/assets/images/emoji/santa.png differ
diff --git a/assets/images/emoji/satellite.png b/assets/images/emoji/satellite.png
index d3f07107..3481cc2e 100644
Binary files a/assets/images/emoji/satellite.png and b/assets/images/emoji/satellite.png differ
diff --git a/assets/images/emoji/satisfied.png b/assets/images/emoji/satisfied.png
index f68006dd..11c91eb2 100644
Binary files a/assets/images/emoji/satisfied.png and b/assets/images/emoji/satisfied.png differ
diff --git a/assets/images/emoji/saxophone.png b/assets/images/emoji/saxophone.png
index ac27b0de..011559a7 100644
Binary files a/assets/images/emoji/saxophone.png and b/assets/images/emoji/saxophone.png differ
diff --git a/assets/images/emoji/school.png b/assets/images/emoji/school.png
index bdc0fa00..afd922bf 100644
Binary files a/assets/images/emoji/school.png and b/assets/images/emoji/school.png differ
diff --git a/assets/images/emoji/school_satchel.png b/assets/images/emoji/school_satchel.png
index ba7925e4..edfb19ae 100644
Binary files a/assets/images/emoji/school_satchel.png and b/assets/images/emoji/school_satchel.png differ
diff --git a/assets/images/emoji/scissors.png b/assets/images/emoji/scissors.png
index 77b38148..be916043 100644
Binary files a/assets/images/emoji/scissors.png and b/assets/images/emoji/scissors.png differ
diff --git a/assets/images/emoji/scorpius.png b/assets/images/emoji/scorpius.png
index 69734fa0..67fcea16 100644
Binary files a/assets/images/emoji/scorpius.png and b/assets/images/emoji/scorpius.png differ
diff --git a/assets/images/emoji/scream.png b/assets/images/emoji/scream.png
index 222aae8d..9e93c885 100644
Binary files a/assets/images/emoji/scream.png and b/assets/images/emoji/scream.png differ
diff --git a/assets/images/emoji/scream_cat.png b/assets/images/emoji/scream_cat.png
new file mode 100644
index 00000000..d94cd34f
Binary files /dev/null and b/assets/images/emoji/scream_cat.png differ
diff --git a/assets/images/emoji/scroll.png b/assets/images/emoji/scroll.png
new file mode 100644
index 00000000..c5a10e6b
Binary files /dev/null and b/assets/images/emoji/scroll.png differ
diff --git a/assets/images/emoji/seat.png b/assets/images/emoji/seat.png
index 9d7311a8..d1cb864b 100644
Binary files a/assets/images/emoji/seat.png and b/assets/images/emoji/seat.png differ
diff --git a/assets/images/emoji/secret.png b/assets/images/emoji/secret.png
index 26b63912..82e383a6 100644
Binary files a/assets/images/emoji/secret.png and b/assets/images/emoji/secret.png differ
diff --git a/assets/images/emoji/see_no_evil.png b/assets/images/emoji/see_no_evil.png
new file mode 100644
index 00000000..0890a622
Binary files /dev/null and b/assets/images/emoji/see_no_evil.png differ
diff --git a/assets/images/emoji/seedling.png b/assets/images/emoji/seedling.png
new file mode 100644
index 00000000..2ab07931
Binary files /dev/null and b/assets/images/emoji/seedling.png differ
diff --git a/assets/images/emoji/seven.png b/assets/images/emoji/seven.png
new file mode 100644
index 00000000..354e89ae
Binary files /dev/null and b/assets/images/emoji/seven.png differ
diff --git a/assets/images/emoji/shaved_ice.png b/assets/images/emoji/shaved_ice.png
index a8f6833b..0d0b382c 100644
Binary files a/assets/images/emoji/shaved_ice.png and b/assets/images/emoji/shaved_ice.png differ
diff --git a/assets/images/emoji/sheep.png b/assets/images/emoji/sheep.png
index 7ca93eaf..c7277d28 100644
Binary files a/assets/images/emoji/sheep.png and b/assets/images/emoji/sheep.png differ
diff --git a/assets/images/emoji/shell.png b/assets/images/emoji/shell.png
index d2892f08..3145b564 100644
Binary files a/assets/images/emoji/shell.png and b/assets/images/emoji/shell.png differ
diff --git a/assets/images/emoji/ship.png b/assets/images/emoji/ship.png
index 7b709089..5d2d8b60 100644
Binary files a/assets/images/emoji/ship.png and b/assets/images/emoji/ship.png differ
diff --git a/assets/images/emoji/shipit.png b/assets/images/emoji/shipit.png
index 5097004b..a58a47f6 100644
Binary files a/assets/images/emoji/shipit.png and b/assets/images/emoji/shipit.png differ
diff --git a/assets/images/emoji/shirt.png b/assets/images/emoji/shirt.png
index 591b55bf..297a6d63 100644
Binary files a/assets/images/emoji/shirt.png and b/assets/images/emoji/shirt.png differ
diff --git a/assets/images/emoji/shit.png b/assets/images/emoji/shit.png
index 69bc33f1..73a4dc84 100644
Binary files a/assets/images/emoji/shit.png and b/assets/images/emoji/shit.png differ
diff --git a/assets/images/emoji/shoe.png b/assets/images/emoji/shoe.png
index 3771bfb6..45b82e61 100644
Binary files a/assets/images/emoji/shoe.png and b/assets/images/emoji/shoe.png differ
diff --git a/assets/images/emoji/shower.png b/assets/images/emoji/shower.png
new file mode 100644
index 00000000..0d72ab86
Binary files /dev/null and b/assets/images/emoji/shower.png differ
diff --git a/assets/images/emoji/signal_strength.png b/assets/images/emoji/signal_strength.png
index 05d422c1..a4bd23eb 100644
Binary files a/assets/images/emoji/signal_strength.png and b/assets/images/emoji/signal_strength.png differ
diff --git a/assets/images/emoji/six.png b/assets/images/emoji/six.png
new file mode 100644
index 00000000..56880556
Binary files /dev/null and b/assets/images/emoji/six.png differ
diff --git a/assets/images/emoji/six_pointed_star.png b/assets/images/emoji/six_pointed_star.png
index 28e49230..010f8f5f 100644
Binary files a/assets/images/emoji/six_pointed_star.png and b/assets/images/emoji/six_pointed_star.png differ
diff --git a/assets/images/emoji/ski.png b/assets/images/emoji/ski.png
index e8d54f58..98f5cb0f 100644
Binary files a/assets/images/emoji/ski.png and b/assets/images/emoji/ski.png differ
diff --git a/assets/images/emoji/skull.png b/assets/images/emoji/skull.png
index d29156dc..bd4ee382 100644
Binary files a/assets/images/emoji/skull.png and b/assets/images/emoji/skull.png differ
diff --git a/assets/images/emoji/sleeping.png b/assets/images/emoji/sleeping.png
new file mode 100644
index 00000000..093b8523
Binary files /dev/null and b/assets/images/emoji/sleeping.png differ
diff --git a/assets/images/emoji/sleepy.png b/assets/images/emoji/sleepy.png
index e607a0ca..df4f55ef 100644
Binary files a/assets/images/emoji/sleepy.png and b/assets/images/emoji/sleepy.png differ
diff --git a/assets/images/emoji/slot_machine.png b/assets/images/emoji/slot_machine.png
index 7a98d229..26f11483 100644
Binary files a/assets/images/emoji/slot_machine.png and b/assets/images/emoji/slot_machine.png differ
diff --git a/assets/images/emoji/small_blue_diamond.png b/assets/images/emoji/small_blue_diamond.png
new file mode 100644
index 00000000..8cd49205
Binary files /dev/null and b/assets/images/emoji/small_blue_diamond.png differ
diff --git a/assets/images/emoji/small_orange_diamond.png b/assets/images/emoji/small_orange_diamond.png
new file mode 100644
index 00000000..04941d37
Binary files /dev/null and b/assets/images/emoji/small_orange_diamond.png differ
diff --git a/assets/images/emoji/small_red_triangle.png b/assets/images/emoji/small_red_triangle.png
new file mode 100644
index 00000000..8c4428da
Binary files /dev/null and b/assets/images/emoji/small_red_triangle.png differ
diff --git a/assets/images/emoji/small_red_triangle_down.png b/assets/images/emoji/small_red_triangle_down.png
new file mode 100644
index 00000000..94832f06
Binary files /dev/null and b/assets/images/emoji/small_red_triangle_down.png differ
diff --git a/assets/images/emoji/smile.png b/assets/images/emoji/smile.png
index 636390ec..81a83968 100644
Binary files a/assets/images/emoji/smile.png and b/assets/images/emoji/smile.png differ
diff --git a/assets/images/emoji/smile_cat.png b/assets/images/emoji/smile_cat.png
new file mode 100644
index 00000000..ad333ba3
Binary files /dev/null and b/assets/images/emoji/smile_cat.png differ
diff --git a/assets/images/emoji/smiley.png b/assets/images/emoji/smiley.png
index 6c4ef119..77b581d6 100644
Binary files a/assets/images/emoji/smiley.png and b/assets/images/emoji/smiley.png differ
diff --git a/assets/images/emoji/smiley_cat.png b/assets/images/emoji/smiley_cat.png
new file mode 100644
index 00000000..dbf1b027
Binary files /dev/null and b/assets/images/emoji/smiley_cat.png differ
diff --git a/assets/images/emoji/smiling_imp.png b/assets/images/emoji/smiling_imp.png
new file mode 100644
index 00000000..d9040493
Binary files /dev/null and b/assets/images/emoji/smiling_imp.png differ
diff --git a/assets/images/emoji/smirk.png b/assets/images/emoji/smirk.png
index 57a69306..bc6e5082 100644
Binary files a/assets/images/emoji/smirk.png and b/assets/images/emoji/smirk.png differ
diff --git a/assets/images/emoji/smirk_cat.png b/assets/images/emoji/smirk_cat.png
new file mode 100644
index 00000000..351565e2
Binary files /dev/null and b/assets/images/emoji/smirk_cat.png differ
diff --git a/assets/images/emoji/smoking.png b/assets/images/emoji/smoking.png
index c7c39a12..4aad6cbd 100644
Binary files a/assets/images/emoji/smoking.png and b/assets/images/emoji/smoking.png differ
diff --git a/assets/images/emoji/snail.png b/assets/images/emoji/snail.png
new file mode 100644
index 00000000..e75e69a8
Binary files /dev/null and b/assets/images/emoji/snail.png differ
diff --git a/assets/images/emoji/snake.png b/assets/images/emoji/snake.png
index b8e2e241..ef58933e 100644
Binary files a/assets/images/emoji/snake.png and b/assets/images/emoji/snake.png differ
diff --git a/assets/images/emoji/snowboarder.png b/assets/images/emoji/snowboarder.png
new file mode 100644
index 00000000..aeda5c8d
Binary files /dev/null and b/assets/images/emoji/snowboarder.png differ
diff --git a/assets/images/emoji/snowflake.png b/assets/images/emoji/snowflake.png
new file mode 100644
index 00000000..54b68ff4
Binary files /dev/null and b/assets/images/emoji/snowflake.png differ
diff --git a/assets/images/emoji/snowman.png b/assets/images/emoji/snowman.png
index 0daf91c1..a97902e5 100644
Binary files a/assets/images/emoji/snowman.png and b/assets/images/emoji/snowman.png differ
diff --git a/assets/images/emoji/sob.png b/assets/images/emoji/sob.png
index 079a944f..1561df92 100644
Binary files a/assets/images/emoji/sob.png and b/assets/images/emoji/sob.png differ
diff --git a/assets/images/emoji/soccer.png b/assets/images/emoji/soccer.png
index fe4a6759..1e118b5b 100644
Binary files a/assets/images/emoji/soccer.png and b/assets/images/emoji/soccer.png differ
diff --git a/assets/images/emoji/soon.png b/assets/images/emoji/soon.png
new file mode 100644
index 00000000..9386615a
Binary files /dev/null and b/assets/images/emoji/soon.png differ
diff --git a/assets/images/emoji/sos.png b/assets/images/emoji/sos.png
new file mode 100644
index 00000000..e3e16ef7
Binary files /dev/null and b/assets/images/emoji/sos.png differ
diff --git a/assets/images/emoji/sound.png b/assets/images/emoji/sound.png
new file mode 100644
index 00000000..6aa4dbff
Binary files /dev/null and b/assets/images/emoji/sound.png differ
diff --git a/assets/images/emoji/space_invader.png b/assets/images/emoji/space_invader.png
index 3c7804c7..38404916 100644
Binary files a/assets/images/emoji/space_invader.png and b/assets/images/emoji/space_invader.png differ
diff --git a/assets/images/emoji/spades.png b/assets/images/emoji/spades.png
index 17084df6..133a1aba 100644
Binary files a/assets/images/emoji/spades.png and b/assets/images/emoji/spades.png differ
diff --git a/assets/images/emoji/spaghetti.png b/assets/images/emoji/spaghetti.png
index 8aec1011..08de243f 100644
Binary files a/assets/images/emoji/spaghetti.png and b/assets/images/emoji/spaghetti.png differ
diff --git a/assets/images/emoji/sparkler.png b/assets/images/emoji/sparkler.png
index 306e0c59..4aabd7e0 100644
Binary files a/assets/images/emoji/sparkler.png and b/assets/images/emoji/sparkler.png differ
diff --git a/assets/images/emoji/sparkles.png b/assets/images/emoji/sparkles.png
index db6afa96..92138828 100644
Binary files a/assets/images/emoji/sparkles.png and b/assets/images/emoji/sparkles.png differ
diff --git a/assets/images/emoji/sparkling_heart.png b/assets/images/emoji/sparkling_heart.png
new file mode 100644
index 00000000..64ac0666
Binary files /dev/null and b/assets/images/emoji/sparkling_heart.png differ
diff --git a/assets/images/emoji/speak_no_evil.png b/assets/images/emoji/speak_no_evil.png
new file mode 100644
index 00000000..87944c4d
Binary files /dev/null and b/assets/images/emoji/speak_no_evil.png differ
diff --git a/assets/images/emoji/speaker.png b/assets/images/emoji/speaker.png
index ad245cfe..470476e1 100644
Binary files a/assets/images/emoji/speaker.png and b/assets/images/emoji/speaker.png differ
diff --git a/assets/images/emoji/speech_balloon.png b/assets/images/emoji/speech_balloon.png
new file mode 100644
index 00000000..2896c278
Binary files /dev/null and b/assets/images/emoji/speech_balloon.png differ
diff --git a/assets/images/emoji/speedboat.png b/assets/images/emoji/speedboat.png
index 9af4c3ba..da6689b3 100644
Binary files a/assets/images/emoji/speedboat.png and b/assets/images/emoji/speedboat.png differ
diff --git a/assets/images/emoji/squirrel.png b/assets/images/emoji/squirrel.png
index 5097004b..a58a47f6 100644
Binary files a/assets/images/emoji/squirrel.png and b/assets/images/emoji/squirrel.png differ
diff --git a/assets/images/emoji/star.png b/assets/images/emoji/star.png
index 7ca7067b..1bfddc86 100644
Binary files a/assets/images/emoji/star.png and b/assets/images/emoji/star.png differ
diff --git a/assets/images/emoji/star2.png b/assets/images/emoji/star2.png
index 94f9ceb4..8b40ff4c 100644
Binary files a/assets/images/emoji/star2.png and b/assets/images/emoji/star2.png differ
diff --git a/assets/images/emoji/stars.png b/assets/images/emoji/stars.png
index 3c9c684c..097a8424 100644
Binary files a/assets/images/emoji/stars.png and b/assets/images/emoji/stars.png differ
diff --git a/assets/images/emoji/station.png b/assets/images/emoji/station.png
index 70fdf630..e77daa8a 100644
Binary files a/assets/images/emoji/station.png and b/assets/images/emoji/station.png differ
diff --git a/assets/images/emoji/statue_of_liberty.png b/assets/images/emoji/statue_of_liberty.png
index a5212907..9ad90280 100644
Binary files a/assets/images/emoji/statue_of_liberty.png and b/assets/images/emoji/statue_of_liberty.png differ
diff --git a/assets/images/emoji/steam_locomotive.png b/assets/images/emoji/steam_locomotive.png
new file mode 100644
index 00000000..54950776
Binary files /dev/null and b/assets/images/emoji/steam_locomotive.png differ
diff --git a/assets/images/emoji/stew.png b/assets/images/emoji/stew.png
index 7168767d..e9687f9e 100644
Binary files a/assets/images/emoji/stew.png and b/assets/images/emoji/stew.png differ
diff --git a/assets/images/emoji/straight_ruler.png b/assets/images/emoji/straight_ruler.png
new file mode 100644
index 00000000..d96658ea
Binary files /dev/null and b/assets/images/emoji/straight_ruler.png differ
diff --git a/assets/images/emoji/strawberry.png b/assets/images/emoji/strawberry.png
index ac74fb83..13eb827a 100644
Binary files a/assets/images/emoji/strawberry.png and b/assets/images/emoji/strawberry.png differ
diff --git a/assets/images/emoji/stuck_out_tongue.png b/assets/images/emoji/stuck_out_tongue.png
new file mode 100644
index 00000000..fa7b58e2
Binary files /dev/null and b/assets/images/emoji/stuck_out_tongue.png differ
diff --git a/assets/images/emoji/stuck_out_tongue_closed_eyes.png b/assets/images/emoji/stuck_out_tongue_closed_eyes.png
new file mode 100644
index 00000000..333716ee
Binary files /dev/null and b/assets/images/emoji/stuck_out_tongue_closed_eyes.png differ
diff --git a/assets/images/emoji/stuck_out_tongue_winking_eye.png b/assets/images/emoji/stuck_out_tongue_winking_eye.png
new file mode 100644
index 00000000..6ae9d497
Binary files /dev/null and b/assets/images/emoji/stuck_out_tongue_winking_eye.png differ
diff --git a/assets/images/emoji/sun_with_face.png b/assets/images/emoji/sun_with_face.png
new file mode 100644
index 00000000..ee276636
Binary files /dev/null and b/assets/images/emoji/sun_with_face.png differ
diff --git a/assets/images/emoji/sunflower.png b/assets/images/emoji/sunflower.png
index 9eae979e..d9bad194 100644
Binary files a/assets/images/emoji/sunflower.png and b/assets/images/emoji/sunflower.png differ
diff --git a/assets/images/emoji/sunglasses.png b/assets/images/emoji/sunglasses.png
new file mode 100644
index 00000000..1c468a1c
Binary files /dev/null and b/assets/images/emoji/sunglasses.png differ
diff --git a/assets/images/emoji/sunny.png b/assets/images/emoji/sunny.png
index 81a412dd..d23c095e 100644
Binary files a/assets/images/emoji/sunny.png and b/assets/images/emoji/sunny.png differ
diff --git a/assets/images/emoji/sunrise.png b/assets/images/emoji/sunrise.png
index 4822140b..ec58dcc9 100644
Binary files a/assets/images/emoji/sunrise.png and b/assets/images/emoji/sunrise.png differ
diff --git a/assets/images/emoji/sunrise_over_mountains.png b/assets/images/emoji/sunrise_over_mountains.png
index ea3fa19a..ebc3db14 100644
Binary files a/assets/images/emoji/sunrise_over_mountains.png and b/assets/images/emoji/sunrise_over_mountains.png differ
diff --git a/assets/images/emoji/surfer.png b/assets/images/emoji/surfer.png
index 27248dc6..b067e8cb 100644
Binary files a/assets/images/emoji/surfer.png and b/assets/images/emoji/surfer.png differ
diff --git a/assets/images/emoji/sushi.png b/assets/images/emoji/sushi.png
index 135e3633..0d179bd9 100644
Binary files a/assets/images/emoji/sushi.png and b/assets/images/emoji/sushi.png differ
diff --git a/assets/images/emoji/suspect.png b/assets/images/emoji/suspect.png
index d96e0bc7..58e8921c 100644
Binary files a/assets/images/emoji/suspect.png and b/assets/images/emoji/suspect.png differ
diff --git a/assets/images/emoji/suspension_railway.png b/assets/images/emoji/suspension_railway.png
new file mode 100644
index 00000000..aaa45f61
Binary files /dev/null and b/assets/images/emoji/suspension_railway.png differ
diff --git a/assets/images/emoji/sweat.png b/assets/images/emoji/sweat.png
index d7179708..e894b769 100644
Binary files a/assets/images/emoji/sweat.png and b/assets/images/emoji/sweat.png differ
diff --git a/assets/images/emoji/sweat_drops.png b/assets/images/emoji/sweat_drops.png
index 2c4ac5c6..a83b3e96 100644
Binary files a/assets/images/emoji/sweat_drops.png and b/assets/images/emoji/sweat_drops.png differ
diff --git a/assets/images/emoji/sweat_smile.png b/assets/images/emoji/sweat_smile.png
new file mode 100644
index 00000000..3903f717
Binary files /dev/null and b/assets/images/emoji/sweat_smile.png differ
diff --git a/assets/images/emoji/sweet_potato.png b/assets/images/emoji/sweet_potato.png
new file mode 100644
index 00000000..cde7880a
Binary files /dev/null and b/assets/images/emoji/sweet_potato.png differ
diff --git a/assets/images/emoji/swimmer.png b/assets/images/emoji/swimmer.png
index d384f95c..d3878a06 100644
Binary files a/assets/images/emoji/swimmer.png and b/assets/images/emoji/swimmer.png differ
diff --git a/assets/images/emoji/symbols.png b/assets/images/emoji/symbols.png
new file mode 100644
index 00000000..16bc1da9
Binary files /dev/null and b/assets/images/emoji/symbols.png differ
diff --git a/assets/images/emoji/syringe.png b/assets/images/emoji/syringe.png
index c066625d..7314255e 100644
Binary files a/assets/images/emoji/syringe.png and b/assets/images/emoji/syringe.png differ
diff --git a/assets/images/emoji/tada.png b/assets/images/emoji/tada.png
index 78c674fd..7411b526 100644
Binary files a/assets/images/emoji/tada.png and b/assets/images/emoji/tada.png differ
diff --git a/assets/images/emoji/tanabata_tree.png b/assets/images/emoji/tanabata_tree.png
new file mode 100644
index 00000000..6dea4b2d
Binary files /dev/null and b/assets/images/emoji/tanabata_tree.png differ
diff --git a/assets/images/emoji/tangerine.png b/assets/images/emoji/tangerine.png
index ad2f3d48..fc9d4f82 100644
Binary files a/assets/images/emoji/tangerine.png and b/assets/images/emoji/tangerine.png differ
diff --git a/assets/images/emoji/taurus.png b/assets/images/emoji/taurus.png
index 86bbf864..6af582f6 100644
Binary files a/assets/images/emoji/taurus.png and b/assets/images/emoji/taurus.png differ
diff --git a/assets/images/emoji/taxi.png b/assets/images/emoji/taxi.png
index 0e74be12..60a50d36 100644
Binary files a/assets/images/emoji/taxi.png and b/assets/images/emoji/taxi.png differ
diff --git a/assets/images/emoji/tea.png b/assets/images/emoji/tea.png
index a323e485..3ece0b70 100644
Binary files a/assets/images/emoji/tea.png and b/assets/images/emoji/tea.png differ
diff --git a/assets/images/emoji/telephone.png b/assets/images/emoji/telephone.png
index e1d64368..87d2559b 100644
Binary files a/assets/images/emoji/telephone.png and b/assets/images/emoji/telephone.png differ
diff --git a/assets/images/emoji/telephone_receiver.png b/assets/images/emoji/telephone_receiver.png
new file mode 100644
index 00000000..36e21e01
Binary files /dev/null and b/assets/images/emoji/telephone_receiver.png differ
diff --git a/assets/images/emoji/telescope.png b/assets/images/emoji/telescope.png
new file mode 100644
index 00000000..8511fa96
Binary files /dev/null and b/assets/images/emoji/telescope.png differ
diff --git a/assets/images/emoji/tennis.png b/assets/images/emoji/tennis.png
index 18559da3..278d904e 100644
Binary files a/assets/images/emoji/tennis.png and b/assets/images/emoji/tennis.png differ
diff --git a/assets/images/emoji/tent.png b/assets/images/emoji/tent.png
index 452aebda..5c0d20e4 100644
Binary files a/assets/images/emoji/tent.png and b/assets/images/emoji/tent.png differ
diff --git a/assets/images/emoji/thought_balloon.png b/assets/images/emoji/thought_balloon.png
new file mode 100644
index 00000000..febe30d0
Binary files /dev/null and b/assets/images/emoji/thought_balloon.png differ
diff --git a/assets/images/emoji/three.png b/assets/images/emoji/three.png
new file mode 100644
index 00000000..55644c99
Binary files /dev/null and b/assets/images/emoji/three.png differ
diff --git a/assets/images/emoji/thumbsdown.png b/assets/images/emoji/thumbsdown.png
index 6f757ba8..41c6b825 100644
Binary files a/assets/images/emoji/thumbsdown.png and b/assets/images/emoji/thumbsdown.png differ
diff --git a/assets/images/emoji/thumbsup.png b/assets/images/emoji/thumbsup.png
index 4dae7a09..81786c1d 100644
Binary files a/assets/images/emoji/thumbsup.png and b/assets/images/emoji/thumbsup.png differ
diff --git a/assets/images/emoji/ticket.png b/assets/images/emoji/ticket.png
index c926699b..cdacf1a7 100644
Binary files a/assets/images/emoji/ticket.png and b/assets/images/emoji/ticket.png differ
diff --git a/assets/images/emoji/tiger.png b/assets/images/emoji/tiger.png
index 1f44a975..d6cc84a3 100644
Binary files a/assets/images/emoji/tiger.png and b/assets/images/emoji/tiger.png differ
diff --git a/assets/images/emoji/tiger2.png b/assets/images/emoji/tiger2.png
new file mode 100644
index 00000000..b0c7d8dc
Binary files /dev/null and b/assets/images/emoji/tiger2.png differ
diff --git a/assets/images/emoji/tired_face.png b/assets/images/emoji/tired_face.png
new file mode 100644
index 00000000..3a8eefe5
Binary files /dev/null and b/assets/images/emoji/tired_face.png differ
diff --git a/assets/images/emoji/tm.png b/assets/images/emoji/tm.png
index 202ec305..c7dec75a 100644
Binary files a/assets/images/emoji/tm.png and b/assets/images/emoji/tm.png differ
diff --git a/assets/images/emoji/toilet.png b/assets/images/emoji/toilet.png
index 18147e6d..e5cc4119 100644
Binary files a/assets/images/emoji/toilet.png and b/assets/images/emoji/toilet.png differ
diff --git a/assets/images/emoji/tokyo_tower.png b/assets/images/emoji/tokyo_tower.png
index b2712ac9..e1cbd7a3 100644
Binary files a/assets/images/emoji/tokyo_tower.png and b/assets/images/emoji/tokyo_tower.png differ
diff --git a/assets/images/emoji/tomato.png b/assets/images/emoji/tomato.png
index b2f14ece..a129700b 100644
Binary files a/assets/images/emoji/tomato.png and b/assets/images/emoji/tomato.png differ
diff --git a/assets/images/emoji/tongue.png b/assets/images/emoji/tongue.png
index 1b76e224..b0bab120 100644
Binary files a/assets/images/emoji/tongue.png and b/assets/images/emoji/tongue.png differ
diff --git a/assets/images/emoji/top.png b/assets/images/emoji/top.png
index 3a4f2cd1..5aa4dd44 100644
Binary files a/assets/images/emoji/top.png and b/assets/images/emoji/top.png differ
diff --git a/assets/images/emoji/tophat.png b/assets/images/emoji/tophat.png
index f12f2321..7d27134d 100644
Binary files a/assets/images/emoji/tophat.png and b/assets/images/emoji/tophat.png differ
diff --git a/assets/images/emoji/tractor.png b/assets/images/emoji/tractor.png
new file mode 100644
index 00000000..058fd3ed
Binary files /dev/null and b/assets/images/emoji/tractor.png differ
diff --git a/assets/images/emoji/traffic_light.png b/assets/images/emoji/traffic_light.png
index c15a6442..50c78101 100644
Binary files a/assets/images/emoji/traffic_light.png and b/assets/images/emoji/traffic_light.png differ
diff --git a/assets/images/emoji/train.png b/assets/images/emoji/train.png
index 26288046..3202d80e 100644
Binary files a/assets/images/emoji/train.png and b/assets/images/emoji/train.png differ
diff --git a/assets/images/emoji/train2.png b/assets/images/emoji/train2.png
new file mode 100644
index 00000000..9c0d3ab6
Binary files /dev/null and b/assets/images/emoji/train2.png differ
diff --git a/assets/images/emoji/tram.png b/assets/images/emoji/tram.png
new file mode 100644
index 00000000..5eb29fb7
Binary files /dev/null and b/assets/images/emoji/tram.png differ
diff --git a/assets/images/emoji/triangular_flag_on_post.png b/assets/images/emoji/triangular_flag_on_post.png
new file mode 100644
index 00000000..f9a3f32d
Binary files /dev/null and b/assets/images/emoji/triangular_flag_on_post.png differ
diff --git a/assets/images/emoji/triangular_ruler.png b/assets/images/emoji/triangular_ruler.png
new file mode 100644
index 00000000..383677cb
Binary files /dev/null and b/assets/images/emoji/triangular_ruler.png differ
diff --git a/assets/images/emoji/trident.png b/assets/images/emoji/trident.png
index 900a5a4d..d79a7b4c 100644
Binary files a/assets/images/emoji/trident.png and b/assets/images/emoji/trident.png differ
diff --git a/assets/images/emoji/triumph.png b/assets/images/emoji/triumph.png
new file mode 100644
index 00000000..92f93bd1
Binary files /dev/null and b/assets/images/emoji/triumph.png differ
diff --git a/assets/images/emoji/trolleybus.png b/assets/images/emoji/trolleybus.png
new file mode 100644
index 00000000..b9740a53
Binary files /dev/null and b/assets/images/emoji/trolleybus.png differ
diff --git a/assets/images/emoji/trollface.png b/assets/images/emoji/trollface.png
new file mode 100644
index 00000000..e234893c
Binary files /dev/null and b/assets/images/emoji/trollface.png differ
diff --git a/assets/images/emoji/trophy.png b/assets/images/emoji/trophy.png
index 39177993..95d3b63f 100644
Binary files a/assets/images/emoji/trophy.png and b/assets/images/emoji/trophy.png differ
diff --git a/assets/images/emoji/tropical_drink.png b/assets/images/emoji/tropical_drink.png
new file mode 100644
index 00000000..55ca9eed
Binary files /dev/null and b/assets/images/emoji/tropical_drink.png differ
diff --git a/assets/images/emoji/tropical_fish.png b/assets/images/emoji/tropical_fish.png
index fcaefe85..a6d73498 100644
Binary files a/assets/images/emoji/tropical_fish.png and b/assets/images/emoji/tropical_fish.png differ
diff --git a/assets/images/emoji/truck.png b/assets/images/emoji/truck.png
index d346efd0..3f25ba1f 100644
Binary files a/assets/images/emoji/truck.png and b/assets/images/emoji/truck.png differ
diff --git a/assets/images/emoji/trumpet.png b/assets/images/emoji/trumpet.png
index e98f5b76..c84cfb13 100644
Binary files a/assets/images/emoji/trumpet.png and b/assets/images/emoji/trumpet.png differ
diff --git a/assets/images/emoji/tshirt.png b/assets/images/emoji/tshirt.png
index 591b55bf..297a6d63 100644
Binary files a/assets/images/emoji/tshirt.png and b/assets/images/emoji/tshirt.png differ
diff --git a/assets/images/emoji/tulip.png b/assets/images/emoji/tulip.png
index 1f20c543..b3ee1102 100644
Binary files a/assets/images/emoji/tulip.png and b/assets/images/emoji/tulip.png differ
diff --git a/assets/images/emoji/turtle.png b/assets/images/emoji/turtle.png
new file mode 100644
index 00000000..04d1d968
Binary files /dev/null and b/assets/images/emoji/turtle.png differ
diff --git a/assets/images/emoji/tv.png b/assets/images/emoji/tv.png
index 90b80974..803dc3d4 100644
Binary files a/assets/images/emoji/tv.png and b/assets/images/emoji/tv.png differ
diff --git a/assets/images/emoji/twisted_rightwards_arrows.png b/assets/images/emoji/twisted_rightwards_arrows.png
new file mode 100644
index 00000000..25cde18b
Binary files /dev/null and b/assets/images/emoji/twisted_rightwards_arrows.png differ
diff --git a/assets/images/emoji/two.png b/assets/images/emoji/two.png
new file mode 100644
index 00000000..c191f8a3
Binary files /dev/null and b/assets/images/emoji/two.png differ
diff --git a/assets/images/emoji/two_hearts.png b/assets/images/emoji/two_hearts.png
new file mode 100644
index 00000000..b189e9ae
Binary files /dev/null and b/assets/images/emoji/two_hearts.png differ
diff --git a/assets/images/emoji/two_men_holding_hands.png b/assets/images/emoji/two_men_holding_hands.png
new file mode 100644
index 00000000..d1099f21
Binary files /dev/null and b/assets/images/emoji/two_men_holding_hands.png differ
diff --git a/assets/images/emoji/two_women_holding_hands.png b/assets/images/emoji/two_women_holding_hands.png
new file mode 100644
index 00000000..619646c4
Binary files /dev/null and b/assets/images/emoji/two_women_holding_hands.png differ
diff --git a/assets/images/emoji/u5272.png b/assets/images/emoji/u5272.png
index 6ce43a06..2148253f 100644
Binary files a/assets/images/emoji/u5272.png and b/assets/images/emoji/u5272.png differ
diff --git a/assets/images/emoji/u5408.png b/assets/images/emoji/u5408.png
new file mode 100644
index 00000000..03ab0d87
Binary files /dev/null and b/assets/images/emoji/u5408.png differ
diff --git a/assets/images/emoji/u55b6.png b/assets/images/emoji/u55b6.png
index d10e0764..ba946d3f 100644
Binary files a/assets/images/emoji/u55b6.png and b/assets/images/emoji/u55b6.png differ
diff --git a/assets/images/emoji/u6307.png b/assets/images/emoji/u6307.png
index d185ca7a..6557f567 100644
Binary files a/assets/images/emoji/u6307.png and b/assets/images/emoji/u6307.png differ
diff --git a/assets/images/emoji/u6708.png b/assets/images/emoji/u6708.png
index ab493e4f..e4dfe5aa 100644
Binary files a/assets/images/emoji/u6708.png and b/assets/images/emoji/u6708.png differ
diff --git a/assets/images/emoji/u6709.png b/assets/images/emoji/u6709.png
index 0287b16a..cd8fb3f6 100644
Binary files a/assets/images/emoji/u6709.png and b/assets/images/emoji/u6709.png differ
diff --git a/assets/images/emoji/u6e80.png b/assets/images/emoji/u6e80.png
index 90dd116d..5df1cb87 100644
Binary files a/assets/images/emoji/u6e80.png and b/assets/images/emoji/u6e80.png differ
diff --git a/assets/images/emoji/u7121.png b/assets/images/emoji/u7121.png
index 9ff16c51..25f694ed 100644
Binary files a/assets/images/emoji/u7121.png and b/assets/images/emoji/u7121.png differ
diff --git a/assets/images/emoji/u7533.png b/assets/images/emoji/u7533.png
index 7efbd9d8..fc4a9901 100644
Binary files a/assets/images/emoji/u7533.png and b/assets/images/emoji/u7533.png differ
diff --git a/assets/images/emoji/u7981.png b/assets/images/emoji/u7981.png
new file mode 100644
index 00000000..f550a573
Binary files /dev/null and b/assets/images/emoji/u7981.png differ
diff --git a/assets/images/emoji/u7a7a.png b/assets/images/emoji/u7a7a.png
index eb9774e1..c05f5cff 100644
Binary files a/assets/images/emoji/u7a7a.png and b/assets/images/emoji/u7a7a.png differ
diff --git a/assets/images/emoji/uk.png b/assets/images/emoji/uk.png
new file mode 100644
index 00000000..2a62c7a0
Binary files /dev/null and b/assets/images/emoji/uk.png differ
diff --git a/assets/images/emoji/umbrella.png b/assets/images/emoji/umbrella.png
index a6d3890e..1db722fa 100644
Binary files a/assets/images/emoji/umbrella.png and b/assets/images/emoji/umbrella.png differ
diff --git a/assets/images/emoji/unamused.png b/assets/images/emoji/unamused.png
index 234c9c08..3722e6f5 100644
Binary files a/assets/images/emoji/unamused.png and b/assets/images/emoji/unamused.png differ
diff --git a/assets/images/emoji/underage.png b/assets/images/emoji/underage.png
index ae3a771d..a789b3c6 100644
Binary files a/assets/images/emoji/underage.png and b/assets/images/emoji/underage.png differ
diff --git a/assets/images/emoji/unlock.png b/assets/images/emoji/unlock.png
index b664853f..22b429cd 100644
Binary files a/assets/images/emoji/unlock.png and b/assets/images/emoji/unlock.png differ
diff --git a/assets/images/emoji/up.png b/assets/images/emoji/up.png
index b065186e..829219a8 100644
Binary files a/assets/images/emoji/up.png and b/assets/images/emoji/up.png differ
diff --git a/assets/images/emoji/us.png b/assets/images/emoji/us.png
index 97323c7d..38137669 100644
Binary files a/assets/images/emoji/us.png and b/assets/images/emoji/us.png differ
diff --git a/assets/images/emoji/v.png b/assets/images/emoji/v.png
index e9cc8dc8..f61267c2 100644
Binary files a/assets/images/emoji/v.png and b/assets/images/emoji/v.png differ
diff --git a/assets/images/emoji/vertical_traffic_light.png b/assets/images/emoji/vertical_traffic_light.png
new file mode 100644
index 00000000..7a5ba35f
Binary files /dev/null and b/assets/images/emoji/vertical_traffic_light.png differ
diff --git a/assets/images/emoji/vhs.png b/assets/images/emoji/vhs.png
index 34027fb2..881081c1 100644
Binary files a/assets/images/emoji/vhs.png and b/assets/images/emoji/vhs.png differ
diff --git a/assets/images/emoji/vibration_mode.png b/assets/images/emoji/vibration_mode.png
index 7d9b811b..a716e96c 100644
Binary files a/assets/images/emoji/vibration_mode.png and b/assets/images/emoji/vibration_mode.png differ
diff --git a/assets/images/emoji/video_camera.png b/assets/images/emoji/video_camera.png
new file mode 100644
index 00000000..274cecdd
Binary files /dev/null and b/assets/images/emoji/video_camera.png differ
diff --git a/assets/images/emoji/video_game.png b/assets/images/emoji/video_game.png
new file mode 100644
index 00000000..59d45bae
Binary files /dev/null and b/assets/images/emoji/video_game.png differ
diff --git a/assets/images/emoji/violin.png b/assets/images/emoji/violin.png
new file mode 100644
index 00000000..27fdc8f7
Binary files /dev/null and b/assets/images/emoji/violin.png differ
diff --git a/assets/images/emoji/virgo.png b/assets/images/emoji/virgo.png
index 37219d75..72e1763f 100644
Binary files a/assets/images/emoji/virgo.png and b/assets/images/emoji/virgo.png differ
diff --git a/assets/images/emoji/volcano.png b/assets/images/emoji/volcano.png
new file mode 100644
index 00000000..9b434539
Binary files /dev/null and b/assets/images/emoji/volcano.png differ
diff --git a/assets/images/emoji/vs.png b/assets/images/emoji/vs.png
index da838c3f..86363885 100644
Binary files a/assets/images/emoji/vs.png and b/assets/images/emoji/vs.png differ
diff --git a/assets/images/emoji/walking.png b/assets/images/emoji/walking.png
index 4c7501fa..52bc0381 100644
Binary files a/assets/images/emoji/walking.png and b/assets/images/emoji/walking.png differ
diff --git a/assets/images/emoji/waning_crescent_moon.png b/assets/images/emoji/waning_crescent_moon.png
new file mode 100644
index 00000000..30387780
Binary files /dev/null and b/assets/images/emoji/waning_crescent_moon.png differ
diff --git a/assets/images/emoji/waning_gibbous_moon.png b/assets/images/emoji/waning_gibbous_moon.png
new file mode 100644
index 00000000..51009907
Binary files /dev/null and b/assets/images/emoji/waning_gibbous_moon.png differ
diff --git a/assets/images/emoji/warning.png b/assets/images/emoji/warning.png
index d2de14ce..466658d9 100644
Binary files a/assets/images/emoji/warning.png and b/assets/images/emoji/warning.png differ
diff --git a/assets/images/emoji/watch.png b/assets/images/emoji/watch.png
new file mode 100644
index 00000000..d503bb87
Binary files /dev/null and b/assets/images/emoji/watch.png differ
diff --git a/assets/images/emoji/water_buffalo.png b/assets/images/emoji/water_buffalo.png
new file mode 100644
index 00000000..3bcde3ed
Binary files /dev/null and b/assets/images/emoji/water_buffalo.png differ
diff --git a/assets/images/emoji/watermelon.png b/assets/images/emoji/watermelon.png
index af8e3aca..fc212be7 100644
Binary files a/assets/images/emoji/watermelon.png and b/assets/images/emoji/watermelon.png differ
diff --git a/assets/images/emoji/wave.png b/assets/images/emoji/wave.png
index 17641964..e78402eb 100644
Binary files a/assets/images/emoji/wave.png and b/assets/images/emoji/wave.png differ
diff --git a/assets/images/emoji/wavy_dash.png b/assets/images/emoji/wavy_dash.png
new file mode 100644
index 00000000..77f626cc
Binary files /dev/null and b/assets/images/emoji/wavy_dash.png differ
diff --git a/assets/images/emoji/waxing_crescent_moon.png b/assets/images/emoji/waxing_crescent_moon.png
new file mode 100644
index 00000000..c8f13dd3
Binary files /dev/null and b/assets/images/emoji/waxing_crescent_moon.png differ
diff --git a/assets/images/emoji/waxing_gibbous_moon.png b/assets/images/emoji/waxing_gibbous_moon.png
new file mode 100644
index 00000000..8cdfdf10
Binary files /dev/null and b/assets/images/emoji/waxing_gibbous_moon.png differ
diff --git a/assets/images/emoji/wc.png b/assets/images/emoji/wc.png
index 27125f19..dfe84d2a 100644
Binary files a/assets/images/emoji/wc.png and b/assets/images/emoji/wc.png differ
diff --git a/assets/images/emoji/weary.png b/assets/images/emoji/weary.png
new file mode 100644
index 00000000..0c547541
Binary files /dev/null and b/assets/images/emoji/weary.png differ
diff --git a/assets/images/emoji/wedding.png b/assets/images/emoji/wedding.png
index 75bbf800..ead19d52 100644
Binary files a/assets/images/emoji/wedding.png and b/assets/images/emoji/wedding.png differ
diff --git a/assets/images/emoji/whale.png b/assets/images/emoji/whale.png
index 43b319a7..5bb113e4 100644
Binary files a/assets/images/emoji/whale.png and b/assets/images/emoji/whale.png differ
diff --git a/assets/images/emoji/whale2.png b/assets/images/emoji/whale2.png
new file mode 100644
index 00000000..f6fb07ea
Binary files /dev/null and b/assets/images/emoji/whale2.png differ
diff --git a/assets/images/emoji/wheelchair.png b/assets/images/emoji/wheelchair.png
index 6d53c499..eddcdd79 100644
Binary files a/assets/images/emoji/wheelchair.png and b/assets/images/emoji/wheelchair.png differ
diff --git a/assets/images/emoji/white_check_mark.png b/assets/images/emoji/white_check_mark.png
new file mode 100644
index 00000000..61dc0583
Binary files /dev/null and b/assets/images/emoji/white_check_mark.png differ
diff --git a/assets/images/emoji/white_circle.png b/assets/images/emoji/white_circle.png
new file mode 100644
index 00000000..3f648d1b
Binary files /dev/null and b/assets/images/emoji/white_circle.png differ
diff --git a/assets/images/emoji/white_flower.png b/assets/images/emoji/white_flower.png
new file mode 100644
index 00000000..c0929d0d
Binary files /dev/null and b/assets/images/emoji/white_flower.png differ
diff --git a/assets/images/emoji/white_square.png b/assets/images/emoji/white_square.png
index 65b56745..60cb19a1 100644
Binary files a/assets/images/emoji/white_square.png and b/assets/images/emoji/white_square.png differ
diff --git a/assets/images/emoji/white_square_button.png b/assets/images/emoji/white_square_button.png
new file mode 100644
index 00000000..ad54d55c
Binary files /dev/null and b/assets/images/emoji/white_square_button.png differ
diff --git a/assets/images/emoji/wind_chime.png b/assets/images/emoji/wind_chime.png
index 5de30d7f..efacf5dd 100644
Binary files a/assets/images/emoji/wind_chime.png and b/assets/images/emoji/wind_chime.png differ
diff --git a/assets/images/emoji/wine_glass.png b/assets/images/emoji/wine_glass.png
new file mode 100644
index 00000000..82b0f000
Binary files /dev/null and b/assets/images/emoji/wine_glass.png differ
diff --git a/assets/images/emoji/wink.png b/assets/images/emoji/wink.png
index 9d593b88..756766dd 100644
Binary files a/assets/images/emoji/wink.png and b/assets/images/emoji/wink.png differ
diff --git a/assets/images/emoji/wink2.png b/assets/images/emoji/wink2.png
deleted file mode 100644
index 3d1b442a..00000000
Binary files a/assets/images/emoji/wink2.png and /dev/null differ
diff --git a/assets/images/emoji/wolf.png b/assets/images/emoji/wolf.png
index f1969e6b..c60c9689 100644
Binary files a/assets/images/emoji/wolf.png and b/assets/images/emoji/wolf.png differ
diff --git a/assets/images/emoji/woman.png b/assets/images/emoji/woman.png
index b052f4fa..6bf0d2b1 100644
Binary files a/assets/images/emoji/woman.png and b/assets/images/emoji/woman.png differ
diff --git a/assets/images/emoji/womans_clothes.png b/assets/images/emoji/womans_clothes.png
new file mode 100644
index 00000000..aa297c7b
Binary files /dev/null and b/assets/images/emoji/womans_clothes.png differ
diff --git a/assets/images/emoji/womans_hat.png b/assets/images/emoji/womans_hat.png
index 0afbe823..4cb2e6a6 100644
Binary files a/assets/images/emoji/womans_hat.png and b/assets/images/emoji/womans_hat.png differ
diff --git a/assets/images/emoji/womens.png b/assets/images/emoji/womens.png
index 83deabfa..110f8851 100644
Binary files a/assets/images/emoji/womens.png and b/assets/images/emoji/womens.png differ
diff --git a/assets/images/emoji/worried.png b/assets/images/emoji/worried.png
new file mode 100644
index 00000000..276291a9
Binary files /dev/null and b/assets/images/emoji/worried.png differ
diff --git a/assets/images/emoji/wrench.png b/assets/images/emoji/wrench.png
new file mode 100644
index 00000000..a87072ad
Binary files /dev/null and b/assets/images/emoji/wrench.png differ
diff --git a/assets/images/emoji/x.png b/assets/images/emoji/x.png
index a2b46bfc..dff9efa8 100644
Binary files a/assets/images/emoji/x.png and b/assets/images/emoji/x.png differ
diff --git a/assets/images/emoji/yellow_heart.png b/assets/images/emoji/yellow_heart.png
index 409cc176..fa41ce78 100644
Binary files a/assets/images/emoji/yellow_heart.png and b/assets/images/emoji/yellow_heart.png differ
diff --git a/assets/images/emoji/yen.png b/assets/images/emoji/yen.png
new file mode 100644
index 00000000..139bc936
Binary files /dev/null and b/assets/images/emoji/yen.png differ
diff --git a/assets/images/emoji/yum.png b/assets/images/emoji/yum.png
new file mode 100644
index 00000000..fc39637e
Binary files /dev/null and b/assets/images/emoji/yum.png differ
diff --git a/assets/images/emoji/zap.png b/assets/images/emoji/zap.png
index d3dd89f6..260c531b 100644
Binary files a/assets/images/emoji/zap.png and b/assets/images/emoji/zap.png differ
diff --git a/assets/images/emoji/zero.png b/assets/images/emoji/zero.png
new file mode 100644
index 00000000..6e57b334
Binary files /dev/null and b/assets/images/emoji/zero.png differ
diff --git a/assets/images/emoji/zzz.png b/assets/images/emoji/zzz.png
index 55e31ae1..30be0465 100644
Binary files a/assets/images/emoji/zzz.png and b/assets/images/emoji/zzz.png differ
diff --git a/assets/images/getting-started/build-email.jpg b/assets/images/getting-started/build-email.jpg
new file mode 100644
index 00000000..706a57dc
Binary files /dev/null and b/assets/images/getting-started/build-email.jpg differ
diff --git a/assets/images/getting-started/build-email.png b/assets/images/getting-started/build-email.png
index acde95b5..d39e04b9 100644
Binary files a/assets/images/getting-started/build-email.png and b/assets/images/getting-started/build-email.png differ
diff --git a/assets/images/getting-started/first-build.png b/assets/images/getting-started/first-build.png
index 9a367ec5..599a75c6 100644
Binary files a/assets/images/getting-started/first-build.png and b/assets/images/getting-started/first-build.png differ
diff --git a/assets/images/getting-started/first-project-no-recent.png b/assets/images/getting-started/first-project-no-recent.png
index d9a72ce3..a37bb154 100644
Binary files a/assets/images/getting-started/first-project-no-recent.png and b/assets/images/getting-started/first-project-no-recent.png differ
diff --git a/assets/images/getting-started/mustache-no-spin.png b/assets/images/getting-started/mustache-no-spin.png
new file mode 100644
index 00000000..a8f5af92
Binary files /dev/null and b/assets/images/getting-started/mustache-no-spin.png differ
diff --git a/assets/images/getting-started/mustache-spinner.gif b/assets/images/getting-started/mustache-spinner.gif
new file mode 100644
index 00000000..461229f7
Binary files /dev/null and b/assets/images/getting-started/mustache-spinner.gif differ
diff --git a/assets/images/getting-started/project-switch.png b/assets/images/getting-started/project-switch.png
index 6e23b6ec..1696aa3c 100644
Binary files a/assets/images/getting-started/project-switch.png and b/assets/images/getting-started/project-switch.png differ
diff --git a/assets/images/icons/align-justify.png b/assets/images/icons/align-justify.png
new file mode 100755
index 00000000..96bfc24b
Binary files /dev/null and b/assets/images/icons/align-justify.png differ
diff --git a/assets/images/icons/code-climate-icon.png b/assets/images/icons/code-climate-icon.png
new file mode 100644
index 00000000..4d547a94
Binary files /dev/null and b/assets/images/icons/code-climate-icon.png differ
diff --git a/assets/images/icons/code-climate-logo.png b/assets/images/icons/code-climate-logo.png
new file mode 100644
index 00000000..4c739e45
Binary files /dev/null and b/assets/images/icons/code-climate-logo.png differ
diff --git a/assets/images/icons/github.png b/assets/images/icons/github.png
index 182a1a3f..d99646c7 100644
Binary files a/assets/images/icons/github.png and b/assets/images/icons/github.png differ
diff --git a/assets/images/icons/off.png b/assets/images/icons/off.png
new file mode 100755
index 00000000..8e11bea2
Binary files /dev/null and b/assets/images/icons/off.png differ
diff --git a/assets/images/icons/repeat.png b/assets/images/icons/repeat.png
new file mode 100755
index 00000000..6e5b206f
Binary files /dev/null and b/assets/images/icons/repeat.png differ
diff --git a/assets/images/mailer/arrow-error.png b/assets/images/mailer/arrow-error.png
new file mode 100644
index 00000000..466ee5bc
Binary files /dev/null and b/assets/images/mailer/arrow-error.png differ
diff --git a/assets/images/mailer/arrow-failed.png b/assets/images/mailer/arrow-failed.png
new file mode 100644
index 00000000..43c4e98f
Binary files /dev/null and b/assets/images/mailer/arrow-failed.png differ
diff --git a/assets/images/mailer/arrow-success.png b/assets/images/mailer/arrow-success.png
new file mode 100644
index 00000000..29ca38ce
Binary files /dev/null and b/assets/images/mailer/arrow-success.png differ
diff --git a/assets/images/mailer/canceled-header-bg.png b/assets/images/mailer/canceled-header-bg.png
index bbab26f9..b82e9dbe 100644
Binary files a/assets/images/mailer/canceled-header-bg.png and b/assets/images/mailer/canceled-header-bg.png differ
diff --git a/assets/images/mailer/clock.png b/assets/images/mailer/clock.png
new file mode 100644
index 00000000..7c977e1e
Binary files /dev/null and b/assets/images/mailer/clock.png differ
diff --git a/assets/images/mailer/email-footer-travis-logo.png b/assets/images/mailer/email-footer-travis-logo.png
new file mode 100644
index 00000000..3c53a96f
Binary files /dev/null and b/assets/images/mailer/email-footer-travis-logo.png differ
diff --git a/assets/images/mailer/error.png b/assets/images/mailer/error.png
new file mode 100755
index 00000000..036a9371
Binary files /dev/null and b/assets/images/mailer/error.png differ
diff --git a/assets/images/mailer/errored-header-bg.png b/assets/images/mailer/errored-header-bg.png
index bbab26f9..b82e9dbe 100644
Binary files a/assets/images/mailer/errored-header-bg.png and b/assets/images/mailer/errored-header-bg.png differ
diff --git a/assets/images/mailer/failed-header-bg.png b/assets/images/mailer/failed-header-bg.png
index 4f933cba..6eaa7f8d 100644
Binary files a/assets/images/mailer/failed-header-bg.png and b/assets/images/mailer/failed-header-bg.png differ
diff --git a/assets/images/mailer/failed.png b/assets/images/mailer/failed.png
new file mode 100755
index 00000000..95515446
Binary files /dev/null and b/assets/images/mailer/failed.png differ
diff --git a/assets/images/mailer/footer-logo-38x38.png b/assets/images/mailer/footer-logo-38x38.png
index 817417ec..d97b233a 100644
Binary files a/assets/images/mailer/footer-logo-38x38.png and b/assets/images/mailer/footer-logo-38x38.png differ
diff --git a/assets/images/mailer/mascot-avatar-15px.png b/assets/images/mailer/mascot-avatar-15px.png
new file mode 100644
index 00000000..f575d73c
Binary files /dev/null and b/assets/images/mailer/mascot-avatar-15px.png differ
diff --git a/assets/images/mailer/mascot-avatar-40px.png b/assets/images/mailer/mascot-avatar-40px.png
new file mode 100644
index 00000000..1c0b1e8d
Binary files /dev/null and b/assets/images/mailer/mascot-avatar-40px.png differ
diff --git a/assets/images/mailer/passed-header-bg.png b/assets/images/mailer/passed-header-bg.png
index 7823c81d..fcba8ab3 100644
Binary files a/assets/images/mailer/passed-header-bg.png and b/assets/images/mailer/passed-header-bg.png differ
diff --git a/assets/images/mailer/please-donate.png b/assets/images/mailer/please-donate.png
index 7f087c39..439694dd 100644
Binary files a/assets/images/mailer/please-donate.png and b/assets/images/mailer/please-donate.png differ
diff --git a/assets/images/mailer/stopwatch-error.png b/assets/images/mailer/stopwatch-error.png
new file mode 100755
index 00000000..33f0b12f
Binary files /dev/null and b/assets/images/mailer/stopwatch-error.png differ
diff --git a/assets/images/mailer/stopwatch-failed.png b/assets/images/mailer/stopwatch-failed.png
new file mode 100755
index 00000000..725985c3
Binary files /dev/null and b/assets/images/mailer/stopwatch-failed.png differ
diff --git a/assets/images/mailer/stopwatch-success.png b/assets/images/mailer/stopwatch-success.png
new file mode 100755
index 00000000..0a67ed9c
Binary files /dev/null and b/assets/images/mailer/stopwatch-success.png differ
diff --git a/assets/images/mailer/success.png b/assets/images/mailer/success.png
new file mode 100755
index 00000000..414856cf
Binary files /dev/null and b/assets/images/mailer/success.png differ
diff --git a/assets/images/mailer/travis-mascot.png b/assets/images/mailer/travis-mascot.png
new file mode 100644
index 00000000..915b8865
Binary files /dev/null and b/assets/images/mailer/travis-mascot.png differ
diff --git a/assets/images/rgsoc.jpg b/assets/images/rgsoc.jpg
index fe383a95..80e72c06 100644
Binary files a/assets/images/rgsoc.jpg and b/assets/images/rgsoc.jpg differ
diff --git a/assets/images/sponsors/8thlight-205x60.jpg b/assets/images/sponsors/8thlight-205x60.jpg
index 4783a5c2..e51d68ad 100644
Binary files a/assets/images/sponsors/8thlight-205x60.jpg and b/assets/images/sponsors/8thlight-205x60.jpg differ
diff --git a/assets/images/sponsors/agileanimal-205x60.png b/assets/images/sponsors/agileanimal-205x60.png
index 1c53f966..aa4546af 100644
Binary files a/assets/images/sponsors/agileanimal-205x60.png and b/assets/images/sponsors/agileanimal-205x60.png differ
diff --git a/assets/images/sponsors/atomicobject-205x60.png b/assets/images/sponsors/atomicobject-205x60.png
index 62166365..c3021bc7 100644
Binary files a/assets/images/sponsors/atomicobject-205x60.png and b/assets/images/sponsors/atomicobject-205x60.png differ
diff --git a/assets/images/sponsors/avarteq-140x40.png b/assets/images/sponsors/avarteq-140x40.png
index e13e0143..a11cb466 100644
Binary files a/assets/images/sponsors/avarteq-140x40.png and b/assets/images/sponsors/avarteq-140x40.png differ
diff --git a/assets/images/sponsors/basho-205x60.png b/assets/images/sponsors/basho-205x60.png
index 8d95c094..eb814dbb 100644
Binary files a/assets/images/sponsors/basho-205x60.png and b/assets/images/sponsors/basho-205x60.png differ
diff --git a/assets/images/sponsors/bendyworks-100x60.png b/assets/images/sponsors/bendyworks-100x60.png
index 9c98b7e7..f38dedb5 100644
Binary files a/assets/images/sponsors/bendyworks-100x60.png and b/assets/images/sponsors/bendyworks-100x60.png differ
diff --git a/assets/images/sponsors/bendyworks-205x130.png b/assets/images/sponsors/bendyworks-205x130.png
index c8654cd0..e15e9f58 100644
Binary files a/assets/images/sponsors/bendyworks-205x130.png and b/assets/images/sponsors/bendyworks-205x130.png differ
diff --git a/assets/images/sponsors/bendyworks-210x210.png b/assets/images/sponsors/bendyworks-210x210.png
index 4ce673df..03d3bb52 100644
Binary files a/assets/images/sponsors/bendyworks-210x210.png and b/assets/images/sponsors/bendyworks-210x210.png differ
diff --git a/assets/images/sponsors/bluebox-78x15.png b/assets/images/sponsors/bluebox-78x15.png
index b3ae538c..15020a08 100644
Binary files a/assets/images/sponsors/bluebox-78x15.png and b/assets/images/sponsors/bluebox-78x15.png differ
diff --git a/assets/images/sponsors/cloudcontrol-100x60.png b/assets/images/sponsors/cloudcontrol-100x60.png
index ffb2e163..60fb4163 100644
Binary files a/assets/images/sponsors/cloudcontrol-100x60.png and b/assets/images/sponsors/cloudcontrol-100x60.png differ
diff --git a/assets/images/sponsors/cloudcontrol-205x130.png b/assets/images/sponsors/cloudcontrol-205x130.png
index 9f790453..6f73d9f8 100644
Binary files a/assets/images/sponsors/cloudcontrol-205x130.png and b/assets/images/sponsors/cloudcontrol-205x130.png differ
diff --git a/assets/images/sponsors/cloudcontrol-210x210.png b/assets/images/sponsors/cloudcontrol-210x210.png
index 11748a85..700ea8a7 100644
Binary files a/assets/images/sponsors/cloudcontrol-210x210.png and b/assets/images/sponsors/cloudcontrol-210x210.png differ
diff --git a/assets/images/sponsors/cobotme-205x60.png b/assets/images/sponsors/cobotme-205x60.png
index 775485cd..2e26f43c 100644
Binary files a/assets/images/sponsors/cobotme-205x60.png and b/assets/images/sponsors/cobotme-205x60.png differ
diff --git a/assets/images/sponsors/codeminer-205x60.png b/assets/images/sponsors/codeminer-205x60.png
index f4b2caec..def37456 100644
Binary files a/assets/images/sponsors/codeminer-205x60.png and b/assets/images/sponsors/codeminer-205x60.png differ
diff --git a/assets/images/sponsors/crowdinteractive-205x60.png b/assets/images/sponsors/crowdinteractive-205x60.png
index d4399390..6987bac9 100644
Binary files a/assets/images/sponsors/crowdinteractive-205x60.png and b/assets/images/sponsors/crowdinteractive-205x60.png differ
diff --git a/assets/images/sponsors/engineyard-140x40.png b/assets/images/sponsors/engineyard-140x40.png
index 46fec6bb..cac0287c 100644
Binary files a/assets/images/sponsors/engineyard-140x40.png and b/assets/images/sponsors/engineyard-140x40.png differ
diff --git a/assets/images/sponsors/enterprise-rails-140x40.png b/assets/images/sponsors/enterprise-rails-140x40.png
index 3f992209..ed2d012e 100644
Binary files a/assets/images/sponsors/enterprise-rails-140x40.png and b/assets/images/sponsors/enterprise-rails-140x40.png differ
diff --git a/assets/images/sponsors/esm-205x60.png b/assets/images/sponsors/esm-205x60.png
index d6c93c94..7b1c8be6 100644
Binary files a/assets/images/sponsors/esm-205x60.png and b/assets/images/sponsors/esm-205x60.png differ
diff --git a/assets/images/sponsors/evilmartians-205x60.png b/assets/images/sponsors/evilmartians-205x60.png
index 0322fa27..c47e6a5d 100644
Binary files a/assets/images/sponsors/evilmartians-205x60.png and b/assets/images/sponsors/evilmartians-205x60.png differ
diff --git a/assets/images/sponsors/fingertips-205x60.png b/assets/images/sponsors/fingertips-205x60.png
index f30e8164..3d9fe39f 100644
Binary files a/assets/images/sponsors/fingertips-205x60.png and b/assets/images/sponsors/fingertips-205x60.png differ
diff --git a/assets/images/sponsors/gidsy.png b/assets/images/sponsors/gidsy.png
index a1f7ca1b..7b29864d 100644
Binary files a/assets/images/sponsors/gidsy.png and b/assets/images/sponsors/gidsy.png differ
diff --git a/assets/images/sponsors/github.png b/assets/images/sponsors/github.png
index 224c946f..40d39bf7 100644
Binary files a/assets/images/sponsors/github.png and b/assets/images/sponsors/github.png differ
diff --git a/assets/images/sponsors/heroku-100x60.png b/assets/images/sponsors/heroku-100x60.png
index a79e3a8d..4030d161 100644
Binary files a/assets/images/sponsors/heroku-100x60.png and b/assets/images/sponsors/heroku-100x60.png differ
diff --git a/assets/images/sponsors/heroku-140x40.png b/assets/images/sponsors/heroku-140x40.png
index e104cd98..9ad13de3 100644
Binary files a/assets/images/sponsors/heroku-140x40.png and b/assets/images/sponsors/heroku-140x40.png differ
diff --git a/assets/images/sponsors/heroku-205x130.png b/assets/images/sponsors/heroku-205x130.png
index f540df48..2cf3884b 100644
Binary files a/assets/images/sponsors/heroku-205x130.png and b/assets/images/sponsors/heroku-205x130.png differ
diff --git a/assets/images/sponsors/heroku-205x60.png b/assets/images/sponsors/heroku-205x60.png
index b3e08851..d69886bb 100644
Binary files a/assets/images/sponsors/heroku-205x60.png and b/assets/images/sponsors/heroku-205x60.png differ
diff --git a/assets/images/sponsors/iriscouch-140x40.png b/assets/images/sponsors/iriscouch-140x40.png
index 345807ce..a9939779 100644
Binary files a/assets/images/sponsors/iriscouch-140x40.png and b/assets/images/sponsors/iriscouch-140x40.png differ
diff --git a/assets/images/sponsors/jumpstartlab-140x40.png b/assets/images/sponsors/jumpstartlab-140x40.png
index cc097f2b..5beaac27 100644
Binary files a/assets/images/sponsors/jumpstartlab-140x40.png and b/assets/images/sponsors/jumpstartlab-140x40.png differ
diff --git a/assets/images/sponsors/jumpstartlab-205x60.png b/assets/images/sponsors/jumpstartlab-205x60.png
index 463887ec..2ef8cda7 100644
Binary files a/assets/images/sponsors/jumpstartlab-205x60.png and b/assets/images/sponsors/jumpstartlab-205x60.png differ
diff --git a/assets/images/sponsors/kanbanery-100x60.png b/assets/images/sponsors/kanbanery-100x60.png
index 8e986406..bb6e6d52 100644
Binary files a/assets/images/sponsors/kanbanery-100x60.png and b/assets/images/sponsors/kanbanery-100x60.png differ
diff --git a/assets/images/sponsors/kanbanery-205x130.png b/assets/images/sponsors/kanbanery-205x130.png
index 186d11d0..9763a4a0 100644
Binary files a/assets/images/sponsors/kanbanery-205x130.png and b/assets/images/sponsors/kanbanery-205x130.png differ
diff --git a/assets/images/sponsors/kanbanery-205x60.png b/assets/images/sponsors/kanbanery-205x60.png
index 5a402e39..75a575d3 100644
Binary files a/assets/images/sponsors/kanbanery-205x60.png and b/assets/images/sponsors/kanbanery-205x60.png differ
diff --git a/assets/images/sponsors/librato-metrics-140x40.png b/assets/images/sponsors/librato-metrics-140x40.png
index 19be7adb..9d1a9cfd 100644
Binary files a/assets/images/sponsors/librato-metrics-140x40.png and b/assets/images/sponsors/librato-metrics-140x40.png differ
diff --git a/assets/images/sponsors/medidata-205x60.png b/assets/images/sponsors/medidata-205x60.png
index 19e0db9f..59b5a4f3 100644
Binary files a/assets/images/sponsors/medidata-205x60.png and b/assets/images/sponsors/medidata-205x60.png differ
diff --git a/assets/images/sponsors/meltmedia-205x60.png b/assets/images/sponsors/meltmedia-205x60.png
index c7d65875..6aa879e9 100644
Binary files a/assets/images/sponsors/meltmedia-205x60.png and b/assets/images/sponsors/meltmedia-205x60.png differ
diff --git a/assets/images/sponsors/mindmatters-205x60.png b/assets/images/sponsors/mindmatters-205x60.png
index 9edd7b9e..f6a9f0a4 100644
Binary files a/assets/images/sponsors/mindmatters-205x60.png and b/assets/images/sponsors/mindmatters-205x60.png differ
diff --git a/assets/images/sponsors/mongohq-100x60.png b/assets/images/sponsors/mongohq-100x60.png
index 1f50505d..87bf53f9 100644
Binary files a/assets/images/sponsors/mongohq-100x60.png and b/assets/images/sponsors/mongohq-100x60.png differ
diff --git a/assets/images/sponsors/mongohq-205x130.png b/assets/images/sponsors/mongohq-205x130.png
index 6b431f17..ddf604e4 100644
Binary files a/assets/images/sponsors/mongohq-205x130.png and b/assets/images/sponsors/mongohq-205x130.png differ
diff --git a/assets/images/sponsors/mongohq-205x60.png b/assets/images/sponsors/mongohq-205x60.png
index dfe04e5c..cd4341be 100644
Binary files a/assets/images/sponsors/mongohq-205x60.png and b/assets/images/sponsors/mongohq-205x60.png differ
diff --git a/assets/images/sponsors/nedap-100x60.png b/assets/images/sponsors/nedap-100x60.png
index 6aa9a9ee..9dc6e5ef 100644
Binary files a/assets/images/sponsors/nedap-100x60.png and b/assets/images/sponsors/nedap-100x60.png differ
diff --git a/assets/images/sponsors/nedap-205x130.png b/assets/images/sponsors/nedap-205x130.png
index 69294bf4..98f08c0d 100644
Binary files a/assets/images/sponsors/nedap-205x130.png and b/assets/images/sponsors/nedap-205x130.png differ
diff --git a/assets/images/sponsors/nedap-205x60.png b/assets/images/sponsors/nedap-205x60.png
index a9e2895c..bd4ef160 100644
Binary files a/assets/images/sponsors/nedap-205x60.png and b/assets/images/sponsors/nedap-205x60.png differ
diff --git a/assets/images/sponsors/nedap-430x130.png b/assets/images/sponsors/nedap-430x130.png
index 4423d1b3..b09f97c2 100644
Binary files a/assets/images/sponsors/nedap-430x130.png and b/assets/images/sponsors/nedap-430x130.png differ
diff --git a/assets/images/sponsors/papertrail-140x40.png b/assets/images/sponsors/papertrail-140x40.png
index 4a55288c..db9c2167 100644
Binary files a/assets/images/sponsors/papertrail-140x40.png and b/assets/images/sponsors/papertrail-140x40.png differ
diff --git a/assets/images/sponsors/planio-100x60.png b/assets/images/sponsors/planio-100x60.png
index 8438d775..481bc4f2 100644
Binary files a/assets/images/sponsors/planio-100x60.png and b/assets/images/sponsors/planio-100x60.png differ
diff --git a/assets/images/sponsors/planio-205x130.png b/assets/images/sponsors/planio-205x130.png
index d858e26f..90520389 100644
Binary files a/assets/images/sponsors/planio-205x130.png and b/assets/images/sponsors/planio-205x130.png differ
diff --git a/assets/images/sponsors/planio-205x60.png b/assets/images/sponsors/planio-205x60.png
index c70b7faf..c1de4de0 100644
Binary files a/assets/images/sponsors/planio-205x60.png and b/assets/images/sponsors/planio-205x60.png differ
diff --git a/assets/images/sponsors/postmark-140x40.png b/assets/images/sponsors/postmark-140x40.png
index cbfd4acf..eb40ce5a 100644
Binary files a/assets/images/sponsors/postmark-140x40.png and b/assets/images/sponsors/postmark-140x40.png differ
diff --git a/assets/images/sponsors/pusher-140x40.png b/assets/images/sponsors/pusher-140x40.png
index a3869727..e566c9b2 100644
Binary files a/assets/images/sponsors/pusher-140x40.png and b/assets/images/sponsors/pusher-140x40.png differ
diff --git a/assets/images/sponsors/railslove-140x40.png b/assets/images/sponsors/railslove-140x40.png
index dc6bd9dc..cb49bfdd 100644
Binary files a/assets/images/sponsors/railslove-140x40.png and b/assets/images/sponsors/railslove-140x40.png differ
diff --git a/assets/images/sponsors/railslove.png b/assets/images/sponsors/railslove.png
index 4c3da1ac..e936484e 100644
Binary files a/assets/images/sponsors/railslove.png and b/assets/images/sponsors/railslove.png differ
diff --git a/assets/images/sponsors/servergrove-140x40.png b/assets/images/sponsors/servergrove-140x40.png
index 05360ea4..e135ef37 100644
Binary files a/assets/images/sponsors/servergrove-140x40.png and b/assets/images/sponsors/servergrove-140x40.png differ
diff --git a/assets/images/sponsors/shopify-140x40.png b/assets/images/sponsors/shopify-140x40.png
index 70d37581..5ea05850 100644
Binary files a/assets/images/sponsors/shopify-140x40.png and b/assets/images/sponsors/shopify-140x40.png differ
diff --git a/assets/images/sponsors/shopify.png b/assets/images/sponsors/shopify.png
index e513522e..7f3da5ea 100644
Binary files a/assets/images/sponsors/shopify.png and b/assets/images/sponsors/shopify.png differ
diff --git a/assets/images/sponsors/site5-205x60.png b/assets/images/sponsors/site5-205x60.png
index 1e03b3b0..c6d4b9fa 100644
Binary files a/assets/images/sponsors/site5-205x60.png and b/assets/images/sponsors/site5-205x60.png differ
diff --git a/assets/images/sponsors/soundcloud-100x60.png b/assets/images/sponsors/soundcloud-100x60.png
index 7bce4957..9e474822 100644
Binary files a/assets/images/sponsors/soundcloud-100x60.png and b/assets/images/sponsors/soundcloud-100x60.png differ
diff --git a/assets/images/sponsors/soundcloud-205x130.png b/assets/images/sponsors/soundcloud-205x130.png
index eda0ebee..13699592 100644
Binary files a/assets/images/sponsors/soundcloud-205x130.png and b/assets/images/sponsors/soundcloud-205x130.png differ
diff --git a/assets/images/sponsors/soundcloud-205x60.png b/assets/images/sponsors/soundcloud-205x60.png
index 5aa886ad..f940a56b 100644
Binary files a/assets/images/sponsors/soundcloud-205x60.png and b/assets/images/sponsors/soundcloud-205x60.png differ
diff --git a/assets/images/sponsors/soundcloud.png b/assets/images/sponsors/soundcloud.png
index c00faba7..34dbd9fd 100644
Binary files a/assets/images/sponsors/soundcloud.png and b/assets/images/sponsors/soundcloud.png differ
diff --git a/assets/images/sponsors/stickermule-140x40.png b/assets/images/sponsors/stickermule-140x40.png
index 5fb9498c..52ae2df1 100644
Binary files a/assets/images/sponsors/stickermule-140x40.png and b/assets/images/sponsors/stickermule-140x40.png differ
diff --git a/assets/images/sponsors/stripe-140x40.png b/assets/images/sponsors/stripe-140x40.png
index d440f9ce..4ec41a20 100644
Binary files a/assets/images/sponsors/stripe-140x40.png and b/assets/images/sponsors/stripe-140x40.png differ
diff --git a/assets/images/sponsors/stripe-205x60.png b/assets/images/sponsors/stripe-205x60.png
index f284cb94..2abc8448 100644
Binary files a/assets/images/sponsors/stripe-205x60.png and b/assets/images/sponsors/stripe-205x60.png differ
diff --git a/assets/images/sponsors/stripe-stamp-111x103.png b/assets/images/sponsors/stripe-stamp-111x103.png
index ce37710e..661049d1 100644
Binary files a/assets/images/sponsors/stripe-stamp-111x103.png and b/assets/images/sponsors/stripe-stamp-111x103.png differ
diff --git a/assets/images/sponsors/thinkrelevance-205x60.png b/assets/images/sponsors/thinkrelevance-205x60.png
index 45b3f912..165396c3 100644
Binary files a/assets/images/sponsors/thinkrelevance-205x60.png and b/assets/images/sponsors/thinkrelevance-205x60.png differ
diff --git a/assets/images/sponsors/thoughtbot-140x40.png b/assets/images/sponsors/thoughtbot-140x40.png
index b12cd310..54148f79 100644
Binary files a/assets/images/sponsors/thoughtbot-140x40.png and b/assets/images/sponsors/thoughtbot-140x40.png differ
diff --git a/assets/images/sponsors/ticketevolution-100x60.png b/assets/images/sponsors/ticketevolution-100x60.png
index f0b4bfbf..0371385b 100644
Binary files a/assets/images/sponsors/ticketevolution-100x60.png and b/assets/images/sponsors/ticketevolution-100x60.png differ
diff --git a/assets/images/sponsors/ticketevolution-205x130.jpg b/assets/images/sponsors/ticketevolution-205x130.jpg
index c1f233a0..767f96ca 100644
Binary files a/assets/images/sponsors/ticketevolution-205x130.jpg and b/assets/images/sponsors/ticketevolution-205x130.jpg differ
diff --git a/assets/images/sponsors/ticketevolution-205x60.jpg b/assets/images/sponsors/ticketevolution-205x60.jpg
index 058d45f4..3ee7ccb5 100644
Binary files a/assets/images/sponsors/ticketevolution-205x60.jpg and b/assets/images/sponsors/ticketevolution-205x60.jpg differ
diff --git a/assets/images/sponsors/tupalo-205x60.png b/assets/images/sponsors/tupalo-205x60.png
index 2bbb0c4d..4e6b04a8 100644
Binary files a/assets/images/sponsors/tupalo-205x60.png and b/assets/images/sponsors/tupalo-205x60.png differ
diff --git a/assets/images/sponsors/twitter-205x60.png b/assets/images/sponsors/twitter-205x60.png
index 1b886678..9249a59e 100644
Binary files a/assets/images/sponsors/twitter-205x60.png and b/assets/images/sponsors/twitter-205x60.png differ
diff --git a/assets/images/sponsors/wooga-100x60.png b/assets/images/sponsors/wooga-100x60.png
index e511d203..c5f48f87 100644
Binary files a/assets/images/sponsors/wooga-100x60.png and b/assets/images/sponsors/wooga-100x60.png differ
diff --git a/assets/images/sponsors/wooga-205x130.png b/assets/images/sponsors/wooga-205x130.png
index 3c0f9138..5b4fe43c 100644
Binary files a/assets/images/sponsors/wooga-205x130.png and b/assets/images/sponsors/wooga-205x130.png differ
diff --git a/assets/images/sponsors/wooga-210x210.png b/assets/images/sponsors/wooga-210x210.png
index ccf039f1..5019959e 100644
Binary files a/assets/images/sponsors/wooga-210x210.png and b/assets/images/sponsors/wooga-210x210.png differ
diff --git a/assets/images/sponsors/xing-100x60.png b/assets/images/sponsors/xing-100x60.png
index d85ee60f..bdc56101 100644
Binary files a/assets/images/sponsors/xing-100x60.png and b/assets/images/sponsors/xing-100x60.png differ
diff --git a/assets/images/sponsors/xing-205x130.png b/assets/images/sponsors/xing-205x130.png
index 605aa9d8..6ea14bc0 100644
Binary files a/assets/images/sponsors/xing-205x130.png and b/assets/images/sponsors/xing-205x130.png differ
diff --git a/assets/images/sponsors/xing-210x210.png b/assets/images/sponsors/xing-210x210.png
index edde528c..ed52b9fc 100644
Binary files a/assets/images/sponsors/xing-210x210.png and b/assets/images/sponsors/xing-210x210.png differ
diff --git a/assets/images/sponsors/zendesk-205x60.png b/assets/images/sponsors/zendesk-205x60.png
index f08c70bd..8044b7b5 100644
Binary files a/assets/images/sponsors/zendesk-205x60.png and b/assets/images/sponsors/zendesk-205x60.png differ
diff --git a/assets/images/sponsors/zweitag-100x60.png b/assets/images/sponsors/zweitag-100x60.png
index 1a5a9e92..d441e798 100644
Binary files a/assets/images/sponsors/zweitag-100x60.png and b/assets/images/sponsors/zweitag-100x60.png differ
diff --git a/assets/images/sponsors/zweitag-205x130.png b/assets/images/sponsors/zweitag-205x130.png
index efcb3f47..1ad343cf 100644
Binary files a/assets/images/sponsors/zweitag-205x130.png and b/assets/images/sponsors/zweitag-205x130.png differ
diff --git a/assets/images/sponsors/zweitag-205x60.png b/assets/images/sponsors/zweitag-205x60.png
index c2a01f20..62d2fec1 100644
Binary files a/assets/images/sponsors/zweitag-205x60.png and b/assets/images/sponsors/zweitag-205x60.png differ
diff --git a/assets/images/travis-mascot-150.png b/assets/images/travis-mascot-150.png
new file mode 100644
index 00000000..c7995568
Binary files /dev/null and b/assets/images/travis-mascot-150.png differ
diff --git a/assets/images/ui/activate.png b/assets/images/ui/activate.png
index 6219207d..29b4cded 100644
Binary files a/assets/images/ui/activate.png and b/assets/images/ui/activate.png differ
diff --git a/assets/images/ui/activated.png b/assets/images/ui/activated.png
index 53a808f0..450c6099 100644
Binary files a/assets/images/ui/activated.png and b/assets/images/ui/activated.png differ
diff --git a/assets/images/ui/cal.png b/assets/images/ui/cal.png
new file mode 100644
index 00000000..ed89d223
Binary files /dev/null and b/assets/images/ui/cal.png differ
diff --git a/assets/images/ui/clock.png b/assets/images/ui/clock.png
index 70996793..03b66950 100644
Binary files a/assets/images/ui/clock.png and b/assets/images/ui/clock.png differ
diff --git a/assets/images/ui/close-white.png b/assets/images/ui/close-white.png
new file mode 100644
index 00000000..1348122d
Binary files /dev/null and b/assets/images/ui/close-white.png differ
diff --git a/assets/images/ui/close.png b/assets/images/ui/close.png
index 40d1f626..c8a66316 100644
Binary files a/assets/images/ui/close.png and b/assets/images/ui/close.png differ
diff --git a/assets/images/ui/github-admin.png b/assets/images/ui/github-admin.png
index 3e3ae4f3..96fe3fa5 100644
Binary files a/assets/images/ui/github-admin.png and b/assets/images/ui/github-admin.png differ
diff --git a/assets/images/ui/github-forks.png b/assets/images/ui/github-forks.png
index 147787bb..3e235ff0 100644
Binary files a/assets/images/ui/github-forks.png and b/assets/images/ui/github-forks.png differ
diff --git a/assets/images/ui/github-watchers.png b/assets/images/ui/github-watchers.png
index 0e4c5ec1..871e200d 100644
Binary files a/assets/images/ui/github-watchers.png and b/assets/images/ui/github-watchers.png differ
diff --git a/assets/images/ui/help.png b/assets/images/ui/help.png
index cff36cc0..b0c5be51 100644
Binary files a/assets/images/ui/help.png and b/assets/images/ui/help.png differ
diff --git a/assets/images/ui/info.png b/assets/images/ui/info.png
index 8ff77223..ce3c9cc5 100644
Binary files a/assets/images/ui/info.png and b/assets/images/ui/info.png differ
diff --git a/assets/images/ui/log.fold.closed.2.png b/assets/images/ui/log.fold.closed.2.png
index fe9ae810..51509978 100644
Binary files a/assets/images/ui/log.fold.closed.2.png and b/assets/images/ui/log.fold.closed.2.png differ
diff --git a/assets/images/ui/log.fold.closed.3.png b/assets/images/ui/log.fold.closed.3.png
index 304b09e7..07c0a351 100644
Binary files a/assets/images/ui/log.fold.closed.3.png and b/assets/images/ui/log.fold.closed.3.png differ
diff --git a/assets/images/ui/log.fold.closed.png b/assets/images/ui/log.fold.closed.png
index 66b51eec..2f8190a5 100644
Binary files a/assets/images/ui/log.fold.closed.png and b/assets/images/ui/log.fold.closed.png differ
diff --git a/assets/images/ui/log.fold.open.2.png b/assets/images/ui/log.fold.open.2.png
index f2bc248e..42916db5 100644
Binary files a/assets/images/ui/log.fold.open.2.png and b/assets/images/ui/log.fold.open.2.png differ
diff --git a/assets/images/ui/log.fold.open.png b/assets/images/ui/log.fold.open.png
index 2f0a4f71..45542ba8 100644
Binary files a/assets/images/ui/log.fold.open.png and b/assets/images/ui/log.fold.open.png differ
diff --git a/assets/images/ui/logo.png b/assets/images/ui/logo.png
index e2492550..1e8a48e7 100644
Binary files a/assets/images/ui/logo.png and b/assets/images/ui/logo.png differ
diff --git a/assets/images/ui/org.png b/assets/images/ui/org.png
index 88345c39..ea47fc65 100644
Binary files a/assets/images/ui/org.png and b/assets/images/ui/org.png differ
diff --git a/assets/images/ui/search.png b/assets/images/ui/search.png
index 09362097..d8d0278a 100644
Binary files a/assets/images/ui/search.png and b/assets/images/ui/search.png differ
diff --git a/assets/images/ui/slider-closed.png b/assets/images/ui/slider-closed.png
index e08a3214..4f2ca670 100644
Binary files a/assets/images/ui/slider-closed.png and b/assets/images/ui/slider-closed.png differ
diff --git a/assets/images/ui/slider-open.png b/assets/images/ui/slider-open.png
index f3d33b97..6a037b7b 100644
Binary files a/assets/images/ui/slider-open.png and b/assets/images/ui/slider-open.png differ
diff --git a/assets/images/ui/to-top.png b/assets/images/ui/to-top.png
index 3f03161c..25e63fff 100644
Binary files a/assets/images/ui/to-top.png and b/assets/images/ui/to-top.png differ
diff --git a/assets/images/ui/tools-button.png b/assets/images/ui/tools-button.png
index bceffe9f..4358df83 100644
Binary files a/assets/images/ui/tools-button.png and b/assets/images/ui/tools-button.png differ
diff --git a/assets/images/ui/user.png b/assets/images/ui/user.png
index f8842fd3..0250506a 100644
Binary files a/assets/images/ui/user.png and b/assets/images/ui/user.png differ
diff --git a/assets/images/ui/workers-close.png b/assets/images/ui/workers-close.png
index 664066c2..25e63fff 100644
Binary files a/assets/images/ui/workers-close.png and b/assets/images/ui/workers-close.png differ
diff --git a/assets/images/ui/workers-open.png b/assets/images/ui/workers-open.png
index d6704e1c..4723ec48 100644
Binary files a/assets/images/ui/workers-open.png and b/assets/images/ui/workers-open.png differ
diff --git a/assets/scripts/app/app.coffee b/assets/scripts/app/app.coffee
index 36dcd0c1..4e16be6f 100644
--- a/assets/scripts/app/app.coffee
+++ b/assets/scripts/app/app.coffee
@@ -1,13 +1,35 @@
unless window.TravisApplication
window.TravisApplication = Em.Application.extend(Ember.Evented,
- LOG_TRANSITIONS: true
- authStateBinding: 'auth.state'
+ LOG_TRANSITIONS: true,
+ authState: Ember.computed.alias('auth.state')
signedIn: (-> @get('authState') == 'signed-in' ).property('authState')
+ mappings: (->
+ broadcasts: Travis.Broadcast
+ repositories: Travis.Repo
+ repository: Travis.Repo
+ repos: Travis.Repo
+ repo: Travis.Repo
+ builds: Travis.Build
+ build: Travis.Build
+ commits: Travis.Commit
+ commit: Travis.Commit
+ jobs: Travis.Job
+ job: Travis.Job
+ account: Travis.Account
+ accounts: Travis.Account
+ worker: Travis.Worker
+ workers: Travis.Worker
+ ).property()
+
+ modelClasses: (->
+ [Travis.User, Travis.Build, Travis.Job, Travis.Repo, Travis.Commit, Travis.Worker, Travis.Account, Travis.Broadcast, Travis.Hook]
+ ).property()
+
setup: ->
- @store = Travis.Store.create(
- adapter: Travis.RestAdapter.create()
- )
+ @get('modelClasses').forEach (klass) ->
+ klass.adapter = Travis.Adapter.create()
+ klass.url = "/#{klass.pluralName()}"
@slider = new Travis.Slider()
@pusher = new Travis.Pusher(Travis.config.pusher_key) if Travis.config.pusher_key
@@ -16,12 +38,17 @@ unless window.TravisApplication
@set('auth', Travis.Auth.create(app: this, endpoint: Travis.config.api_endpoint))
reset: ->
- @_super.apply(this, arguments);
+ @_super.apply(this, arguments)
+ @get('modelClasses').forEach (klass) ->
+ klass.resetData()
@setup()
lookup: ->
@__container__.lookup.apply @__container__, arguments
+ flash: (options) ->
+ Travis.lookup('controller:flash').loadFlashes([options])
+
storeAfterSignInPath: (path) ->
@get('auth').storeAfterSignInPath(path)
@@ -34,8 +61,79 @@ unless window.TravisApplication
signOut: ->
@get('auth').signOut()
- receive: ->
- @store.receive.apply(@store, arguments)
+ signingIn: (->
+ Travis.get('authState') == 'signing-in'
+ ).property('authState')
+
+ receive: (event, data) ->
+ [name, type] = event.split(':')
+
+ type = Ember.get(Travis, 'mappings')[name]
+
+ if event == 'build:started' && data.build.commit
+ # TODO: commit should be a sideload record on build, not mixed with it
+ build = data.build
+ commit = {
+ id: build.commit_id
+ author_email: build.author_email
+ author_name: build.author_name
+ branch: build.branch
+ committed_at: build.committed_at
+ committer_email: build.committer_email
+ committer_name: build.committer_name
+ compare_url: build.compare_url
+ message: build.message
+ sha: build.commit
+ }
+ delete(data.build.commit)
+ @loadOrMerge(Travis.Commit, commit)
+
+
+ if event == 'job:log'
+ console.log 'store: received job:log event', data if Log.DEBUG
+ data = data.job
+ job = Travis.Job.find(data.id)
+ job.appendLog(number: parseInt(data.number), content: data._log, final: data.final)
+ else if data[type.singularName()]
+ @_loadOne(this, type, data)
+ else if data[type.pluralName()]
+ @_loadMany(this, type, data)
+ else
+ throw "can't load data for #{name}" unless type
+
+ _loadOne: (store, type, json) ->
+ root = type.singularName()
+ reference = @loadOrMerge(type, json[root])
+ unless reference.record
+ type.loadRecordForReference(reference)
+
+ # we get other types of records only in a few situations and
+ # it's not always needed to update data, so I'm specyfing which
+ # things I want to update here:
+ if type == Travis.Build && (json.repository || json.repo)
+ data = json.repository || json.repo
+ reference = @loadOrMerge(Travis.Repo, data)
+ unless reference.record
+ Travis.Repo.loadRecordForReference(reference)
+
+ loadOrMerge: (type, hash, options) ->
+ options ||= {}
+
+ reference = type._getReferenceById(hash.id)
+
+ if reference && options.skipIfExists
+ return
+
+ reference = type._getOrCreateReferenceForId(hash.id)
+ if reference.record
+ reference.record.merge(hash)
+ else
+ if type.sideloadedData && type.sideloadedData[hash.id]
+ Ember.merge(type.sideloadedData[hash.id], hash)
+ else
+ type.load([hash])
+
+ reference
toggleSidebar: ->
$('body').toggleClass('maximized')
diff --git a/assets/scripts/app/auth.coffee b/assets/scripts/app/auth.coffee
index ea40fe3b..565a18c1 100644
--- a/assets/scripts/app/auth.coffee
+++ b/assets/scripts/app/auth.coffee
@@ -14,12 +14,14 @@
@set('state', 'signed-out')
@set('user', undefined)
if user = Travis.__container__.lookup('controller:currentUser').get('content')
- if user.get('stateManager.currentPath') == 'rootState.loaded.updated.uncommitted'
- user.send('rollback')
- user.unloadRecord()
+ user.unload()
Travis.__container__.lookup('controller:currentUser').set('content', null)
if router = Travis.__container__.lookup('router:main')
- router.send('afterSignOut')
+ try
+ router.send('afterSignOut')
+ catch e
+ throw e unless e.message =~ /There are no active handlers/
+
signIn: (data) ->
if data
@@ -68,17 +70,16 @@
Travis.setLocale(data.user.locale || Travis.default_locale)
Travis.trigger('user:signed_in', data.user)
if router = Travis.__container__.lookup('router:main')
- path = @readAfterSignInPath()
Ember.run.next =>
try
- router.send('afterSignIn', path)
+ router.send('afterSignIn')
catch e
throw e unless e =~ /There are no active handlers/
@refreshUserData(data.user)
refreshUserData: (user) ->
Travis.ajax.get "/users/#{user.id}", (data) =>
- Travis.store.loadIncomplete(Travis.User, data.user)
+ Travis.loadOrMerge(Travis.User, data.user)
# if user is still signed in, update saved data
if @signedIn()
data.user.token = user.token
@@ -93,20 +94,11 @@
storage.setItem('travis.user', JSON.stringify(data.user))
loadUser: (user) ->
- store = @app.store
- store.load(Travis.User, user.id, user)
- user = store.find(Travis.User, user.id)
+ Travis.loadOrMerge(Travis.User, user)
+ user = Travis.User.find(user.id)
user.get('permissions')
user
- storeAfterSignInPath: (path) ->
- Travis.sessionStorage.setItem('travis.after_signin_path', path)
-
- readAfterSignInPath: ->
- path = Travis.sessionStorage.getItem('travis.after_signin_path')
- Travis.sessionStorage.removeItem('travis.after_signin_path')
- path
-
receiveMessage: (event) ->
if event.origin == @expectedOrigin()
if event.data == 'redirect'
diff --git a/assets/scripts/app/components.coffee b/assets/scripts/app/components.coffee
new file mode 100644
index 00000000..da423edd
--- /dev/null
+++ b/assets/scripts/app/components.coffee
@@ -0,0 +1,9 @@
+Travis.TravisSwitchComponent = Ember.Component.extend
+ tagName: 'a'
+ classNames: ['travis-switch']
+ classNameBindings: ['active']
+
+ activeBinding: 'target.active'
+
+ click: ->
+ @sendAction('action', @get('target'))
diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee
index 475e997d..f1b4f520 100644
--- a/assets/scripts/app/controllers.coffee
+++ b/assets/scripts/app/controllers.coffee
@@ -1,11 +1,30 @@
require 'helpers'
-require 'travis/ticker'
Travis.Controller = Em.Controller.extend()
Travis.TopController = Em.Controller.extend
needs: ['currentUser']
userBinding: 'controllers.currentUser'
+ userName: (->
+ @get('user.name') || @get('user.login')
+ ).property('user.login', 'user.name')
+
+ gravatarUrl: (->
+ "#{location.protocol}//www.gravatar.com/avatar/#{@get('user.gravatarId')}?s=48&d=mm"
+ ).property('user.gravatarId')
+
+ signedIn: (->
+ Travis.get('authState') == 'signed-in'
+ ).property('Travis.authState')
+
+ signedOut: (->
+ Travis.get('authState') == 'signed-out'
+ ).property('Travis.authState')
+
+ signingIn: (->
+ Travis.get('authState') == 'signing-in'
+ ).property('Travis.authState')
+
Travis.ApplicationController = Em.Controller.extend
templateName: 'layouts/home'
@@ -20,9 +39,15 @@ Travis.ProfileLayoutController = Em.Controller.extend()
Travis.AuthLayoutController = Em.Controller.extend()
Travis.AccountProfileController = Em.Controller.extend
- needs: ['currentUser']
+ needs: ['currentUser', 'repos']
userBinding: 'controllers.currentUser'
+Travis.FirstSyncController = Em.Controller.extend
+ needs: ['currentUser']
+ user: Ember.computed.alias('controllers.currentUser')
+
+ isSyncing: Ember.computed.alias('user.isSyncing')
+
require 'controllers/accounts'
require 'controllers/build'
require 'controllers/builds'
@@ -32,8 +57,6 @@ require 'controllers/job'
require 'controllers/profile'
require 'controllers/repos'
require 'controllers/repo'
-require 'controllers/running_jobs'
-require 'controllers/sidebar'
require 'controllers/stats'
require 'controllers/current_user'
require 'controllers/account_index'
diff --git a/assets/scripts/spec/unit/log_request_spec.coffee b/assets/scripts/app/controllers/annotations.coffee
similarity index 100%
rename from assets/scripts/spec/unit/log_request_spec.coffee
rename to assets/scripts/app/controllers/annotations.coffee
diff --git a/assets/scripts/app/controllers/build.coffee b/assets/scripts/app/controllers/build.coffee
index 493b710a..6e61ab6f 100644
--- a/assets/scripts/app/controllers/build.coffee
+++ b/assets/scripts/app/controllers/build.coffee
@@ -2,7 +2,8 @@ Travis.BuildController = Ember.Controller.extend
needs: ['repo']
repoBinding: 'controllers.repo.repo'
commitBinding: 'build.commit'
- lineNumberBinding: 'controllers.repo.lineNumber'
+ currentUserBinding: 'controllers.repo.currentUser'
+ tabBinding: 'controllers.repo.tab'
currentItemBinding: 'build'
@@ -13,11 +14,3 @@ Travis.BuildController = Ember.Controller.extend
urlGithubCommit: (->
Travis.Urls.githubCommit(@get('repo.slug'), @get('commit.sha'))
).property('repo.slug', 'commit.sha')
-
- urlAuthor: (->
- Travis.Urls.email(@get('commit.authorEmail'))
- ).property('commit.authorEmail')
-
- urlCommitter: (->
- Travis.Urls.email(@get('commit.committerEmail'))
- ).property('commit.committerEmail')
diff --git a/assets/scripts/app/controllers/builds.coffee b/assets/scripts/app/controllers/builds.coffee
index 8bfb61da..76234a22 100644
--- a/assets/scripts/app/controllers/builds.coffee
+++ b/assets/scripts/app/controllers/builds.coffee
@@ -7,6 +7,7 @@ Travis.BuildsController = Em.ArrayController.extend
repoBinding: 'controllers.repo.repo'
tabBinding: 'controllers.repo.tab'
isLoadedBinding: 'content.isLoaded'
+ isLoadingBinding: 'content.isLoading'
showMore: ->
id = @get('repo.id')
diff --git a/assets/scripts/app/controllers/current_user.coffee b/assets/scripts/app/controllers/current_user.coffee
index 548e06a5..c8226503 100644
--- a/assets/scripts/app/controllers/current_user.coffee
+++ b/assets/scripts/app/controllers/current_user.coffee
@@ -1,3 +1,17 @@
+delegate = (name, options) ->
+ options ||= options
+ ->
+ target = @get(options.to)
+ target[name].apply(target, arguments)
+
Travis.CurrentUserController = Em.ObjectController.extend
sync: ->
@get('content').sync()
+
+ syncingDidChange: (->
+ if (user = @get('content')) && user.get('isSyncing') && !user.get('syncedAt')
+ Ember.run.scheduleOnce 'routerTransitions', this, ->
+ @container.lookup('router:main').send('renderFirstSync')
+ ).observes('isSyncing', 'content')
+
+ updateLocale: delegate('updateLocale', to: 'content')
diff --git a/assets/scripts/app/controllers/flash.coffee b/assets/scripts/app/controllers/flash.coffee
index 67ad6ae5..1d2c839a 100644
--- a/assets/scripts/app/controllers/flash.coffee
+++ b/assets/scripts/app/controllers/flash.coffee
@@ -2,14 +2,12 @@ Travis.FlashController = Ember.ArrayController.extend
needs: ['currentUser']
currentUserBinding: 'controllers.currentUser'
- broadcastBinding: 'currentUser.broadcasts'
-
init: ->
@_super.apply this, arguments
@set('flashes', Ember.A())
content: (->
- @get('unseenBroadcasts').concat(@get('flashes'))
+ @get('unseenBroadcasts').concat(@get('flashes')).filter( (o) -> o ).uniq()
).property('unseenBroadcasts.length', 'flashes.length')
unseenBroadcasts: (->
@@ -17,8 +15,8 @@ Travis.FlashController = Ember.ArrayController.extend
).property('broadcasts.isLoaded', 'broadcasts.length')
broadcasts: (->
- if @get('currentUser') then Travis.Broadcast.find() else Ember.A()
- ).property('currentUser')
+ if @get('currentUser.id') then Travis.Broadcast.find() else Ember.A()
+ ).property('currentUser.id')
loadFlashes: (msgs) ->
for msg in msgs
diff --git a/assets/scripts/app/controllers/job.coffee b/assets/scripts/app/controllers/job.coffee
index 262081fd..193aab42 100644
--- a/assets/scripts/app/controllers/job.coffee
+++ b/assets/scripts/app/controllers/job.coffee
@@ -4,19 +4,12 @@ Travis.JobController = Em.Controller.extend
jobBinding: 'controllers.repo.job'
repoBinding: 'controllers.repo.repo'
commitBinding: 'job.commit'
- lineNumberBinding: 'controllers.repo.lineNumber'
annotationsBinding: 'job.annotations'
+ currentUserBinding: 'controllers.repo.currentUser'
+ tabBinding: 'controllers.repo.tab'
currentItemBinding: 'job'
urlGithubCommit: (->
Travis.Urls.githubCommit(@get('repo.slug'), @get('commit.sha'))
).property('repo.slug', 'commit.sha')
-
- urlAuthor: (->
- Travis.Urls.email(@get('commit.authorEmail'))
- ).property('commit.authorEmail')
-
- urlCommitter: (->
- Travis.Urls.email(@get('commit.committerEmail'))
- ).property('commit.committerEmail')
diff --git a/assets/scripts/app/controllers/profile.coffee b/assets/scripts/app/controllers/profile.coffee
index 02800623..2415d05a 100644
--- a/assets/scripts/app/controllers/profile.coffee
+++ b/assets/scripts/app/controllers/profile.coffee
@@ -35,13 +35,16 @@ Travis.ProfileController = Travis.Controller.extend
@reloadHooks()
reloadHooks: ->
- @set('allHooks', Travis.Hook.find(all: true, owner_name: @get('params.login') || @get('user.login')))
+ # TODO: figure out why user is not available sometimes
+ @set('allHooks', Travis.Hook.find(all: true, owner_name: @get('params.login') || @get('user.login') || Travis.lookup('controller:currentUser').get('login')))
hooks: (->
+ @reloadHooks() unless hooks = @get('allHooks')
@get('allHooks').filter (hook) -> hook.get('admin')
).property('allHooks.length', 'allHooks')
unAdminisetableHooks: (->
+ @reloadHooks() unless hooks = @get('allHooks')
@get('allHooks').filter (hook) -> !hook.get('admin')
).property('allHooks.length', 'allHooks')
diff --git a/assets/scripts/app/controllers/repo.coffee b/assets/scripts/app/controllers/repo.coffee
index ff9b2b77..88276d71 100644
--- a/assets/scripts/app/controllers/repo.coffee
+++ b/assets/scripts/app/controllers/repo.coffee
@@ -1,8 +1,9 @@
Travis.RepoController = Travis.Controller.extend
- bindings: []
- needs: ['repos', 'currentUser']
+ needs: ['repos', 'currentUser', 'build']
currentUserBinding: 'controllers.currentUser'
+ build: Ember.computed.alias('controllers.build.build')
+
slug: (-> @get('repo.slug') ).property('repo.slug')
isLoading: (-> @get('repo.isLoading') ).property('repo.isLoading')
@@ -11,22 +12,26 @@ Travis.RepoController = Travis.Controller.extend
Visibility.every Travis.INTERVALS.updateTimes, @updateTimes.bind(this)
updateTimes: ->
- if builds = @get('builds')
- builds.forEach (b) -> b.updateTimes()
+ Ember.run this, ->
+ if builds = @get('builds')
+ builds.forEach (b) -> b.updateTimes()
- if build = @get('build')
- build.updateTimes()
+ if build = @get('build')
+ build.updateTimes()
- if build && jobs = build.get('jobs')
- jobs.forEach (j) -> j.updateTimes()
+ if build && jobs = build.get('jobs')
+ jobs.forEach (j) -> j.updateTimes()
activate: (action) ->
+ @stopObservingLastBuild()
this["view#{$.camelize(action)}"]()
viewIndex: ->
+ @observeLastBuild()
@connectTab('current')
viewCurrent: ->
+ @observeLastBuild()
@connectTab('current')
viewBuilds: ->
@@ -44,15 +49,24 @@ Travis.RepoController = Travis.Controller.extend
viewJob: ->
@connectTab('job')
+ lastBuildDidChange: ->
+ Ember.run.scheduleOnce('data', this, @_lastBuildDidChange);
+
+ _lastBuildDidChange: ->
+ build = @get('repo.lastBuild')
+ @set('build', build)
+
+ stopObservingLastBuild: ->
+ @removeObserver('repo.lastBuild', this, 'lastBuildDidChange')
+
+ observeLastBuild: ->
+ @lastBuildDidChange()
+ @addObserver('repo.lastBuild', this, 'lastBuildDidChange')
+
connectTab: (tab) ->
# TODO: such implementation seems weird now, because we render
# in the renderTemplate function in routes
name = if tab == 'current' then 'build' else tab
- viewClass = if name in ['builds', 'branches', 'pull_requests']
- Travis.BuildsView
- else
- Travis["#{$.camelize(name)}View"]
-
@set('tab', tab)
urlGithub: (->
diff --git a/assets/scripts/app/controllers/repos.coffee b/assets/scripts/app/controllers/repos.coffee
index 55a9df1f..f61de1a4 100644
--- a/assets/scripts/app/controllers/repos.coffee
+++ b/assets/scripts/app/controllers/repos.coffee
@@ -6,7 +6,7 @@ Travis.ReposController = Ember.ArrayController.extend
'owned'
else
'recent'
- ).property('currentUser')
+ ).property('currentUser.id')
currentUserIdDidChange: (->
if @get('currentUser.id')
@@ -16,10 +16,10 @@ Travis.ReposController = Ember.ArrayController.extend
).observes('currentUser.id')
tabOrIsLoadedDidChange: (->
- if @get('tab') == 'owned' && @get('isLoaded') && @get('length') == 0
-
- @container.lookup('router:main').send('renderNoOwnedRepos')
- ).observes('isLoaded', 'tab')
+ Ember.run.scheduleOnce 'routerTransitions', this, ->
+ if @get('tab') == 'owned' && @get('isLoaded') && @get('length') == 0
+ @container.lookup('router:main').send('renderNoOwnedRepos')
+ ).observes('isLoaded', 'tab', 'length')
isLoadedBinding: 'content.isLoaded'
needs: ['currentUser', 'repo']
@@ -36,7 +36,6 @@ Travis.ReposController = Ember.ArrayController.extend
Visibility.every Travis.INTERVALS.updateTimes, @updateTimes.bind(this)
recentRepos: (->
- Travis.Repo.find()
Travis.LimitedArray.create
content: Em.ArrayProxy.extend(Em.SortableMixin).create(
sortProperties: ['sortOrder']
@@ -64,7 +63,14 @@ Travis.ReposController = Ember.ArrayController.extend
@set('content', @get('recentRepos'))
viewOwned: ->
- @set('content', Travis.Repo.accessibleBy(@get('currentUser.login')))
+ @set('content', @get('userRepos'))
+
+ userRepos: (->
+ if login = @get('currentUser.login')
+ Travis.Repo.accessibleBy(login)
+ else
+ []
+ ).property('currentUser.login')
viewSearch: (params) ->
@set('content', Travis.Repo.search(params.search))
@@ -83,3 +89,14 @@ Travis.ReposController = Ember.ArrayController.extend
@searchLater = Ember.run.later(this, (->
@activate 'search', search: phrase
), 500)
+
+ noReposMessage: (->
+ tab = @get('tab')
+
+ if tab == 'owned'
+ 'You don\'t have any repos set up on Travis CI'
+ else if tab == 'recent'
+ 'Repositories could not be loaded'
+ else
+ 'Could not find any repos'
+ ).property('tab')
diff --git a/assets/scripts/app/controllers/running_jobs.coffee b/assets/scripts/app/controllers/running_jobs.coffee
deleted file mode 100644
index 4d81a0e8..00000000
--- a/assets/scripts/app/controllers/running_jobs.coffee
+++ /dev/null
@@ -1,103 +0,0 @@
-Travis.RunningJobsController = Em.ArrayProxy.extend
- Group: Em.Object.extend
- slug: (-> @get('jobs.firstObject.repoSlug') ).property('jobs.firstObject.repoSlug')
-
- init: ->
- @_super.apply this, arguments
- @set 'jobs', []
-
- @set 'sortedJobs', Em.ArrayProxy.extend(Em.SortableMixin,
- sortProperties: ['number']
- ).create(content: @get('jobs'))
-
- willDestroy: ->
- @get('sortedJobs').destroy()
-
- add: (job) ->
- @get('jobs').pushObject(job) unless @get('jobs').contains job
- @attach()
-
- remove: (job) ->
- @get('jobs').removeObject(job)
- @clean()
-
- attach: ->
- @get('parent').addGroup(this)
-
- clean: ->
- @get('parent').removeGroup(this) if @get('isEmpty')
-
- isEmpty: (->
- @get('jobs.length') == 0
- ).property('jobs.length')
-
- groups: []
- sortedGroups: (->
- Em.ArrayProxy.extend(Em.SortableMixin,
- sortProperties: ['slug']
- ).create(content: @get('groups'))
- ).property()
-
- groupsBySlug: {}
-
- init: ->
- @_super.apply this, arguments
-
- jobs = Travis.Job.running()
- @set 'content', jobs
- @addedJobs jobs
-
- contentArrayWillChange: (array, index, removedCount, addedCount) ->
- @_super.apply this, arguments
-
- if removedCount
- @removedJobs array.slice(index, index + removedCount)
-
- contentArrayDidChange: (array, index, removedCount, addedCount) ->
- @_super.apply this, arguments
-
- if addedCount
- @addedJobs array.slice(index, index + addedCount)
-
- addedJobs: (jobs) ->
- self = this
- jobs.forEach (job) ->
- self.waitForSlug(job, 'addJob')
-
- removedJobs: (jobs) ->
- self = this
- jobs.forEach (job) ->
- self.waitForSlug(job, 'removeJob')
-
- addJob: (job) ->
- slug = job.get('repoSlug')
- group = @groupForSlug(slug)
- group.add(job)
-
- removeJob: (job) ->
- slug = job.get('repoSlug')
- group = @groupForSlug(slug)
- group.remove(job)
-
- waitForSlug: (job, callbackName) ->
- callback = @[callbackName]
- self = this
- if job.get('repoSlug')?
- callback.call self, job
- else
- observer = ->
- if job.get('repoSlug')?
- callback.call self, job
- job.removeObserver 'repoSlug', observer
- job.addObserver 'repoSlug', observer
-
- groupForSlug: (slug) ->
- @groupsBySlug[slug] ||= @Group.create(slug: slug, parent: this)
-
- addGroup: (group) ->
- @get('groups').pushObject group unless @get('groups').contains group
-
- removeGroup: (group) ->
- @get('groups').removeObject group
- delete @groupsBySlug[group.get('slug')]
- group.destroy()
diff --git a/assets/scripts/app/controllers/sidebar.coffee b/assets/scripts/app/controllers/sidebar.coffee
deleted file mode 100644
index c1a37f2f..00000000
--- a/assets/scripts/app/controllers/sidebar.coffee
+++ /dev/null
@@ -1,45 +0,0 @@
-Travis.reopen
- SidebarController: Em.ArrayController.extend
- needs: ['runningJobs']
- jobsBinding: 'controllers.runningJobs'
-
- init: ->
- @_super.apply this, arguments
- @tickables = []
-
- tick: ->
- tickable.tick() for tickable in @tickables
-
- QueuesController: Em.ArrayController.extend
- init: ->
- @_super.apply this, arguments
-
- queues = for queue in Travis.QUEUES
- Travis.LimitedArray.create
- content: Travis.Job.queued(queue.name), limit: 20
- id: "queue_#{queue.name}"
- name: queue.display
- @set 'content', queues
-
- showAll: (queue) ->
- queue.showAll()
-
- WorkersController: Em.ArrayController.extend
- init: ->
- @_super.apply this, arguments
- @set 'content', Travis.Worker.find()
-
- groups: (->
- if content = @get 'arrangedContent'
- groups = {}
- for worker in content.toArray()
- host = worker.get('host')
- unless groups[host]
- groups[host] = Em.ArrayProxy.extend(Em.SortableMixin,
- content: [],
- sortProperties: ['nameForSort']
- ).create()
- groups[host].pushObject(worker)
-
- $.values(groups)
- ).property('length')
diff --git a/assets/scripts/app/helpers/handlebars.coffee b/assets/scripts/app/helpers/handlebars.coffee
index d86aa80d..8dfda033 100644
--- a/assets/scripts/app/helpers/handlebars.coffee
+++ b/assets/scripts/app/helpers/handlebars.coffee
@@ -18,8 +18,9 @@ Ember.registerBoundHelper 'formatTime', (value, options) ->
Ember.registerBoundHelper 'formatDuration', (duration, options) ->
safe Travis.Helpers.timeInWords(duration)
-Ember.registerBoundHelper 'formatCommit', (commit, options) ->
+Ember.Handlebars.helper('formatCommit', (commit) ->
safe Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')) if commit
+, 'sha', 'branch')
Ember.registerBoundHelper 'formatSha', (sha, options) ->
safe Travis.Helpers.formatSha(sha)
@@ -27,8 +28,8 @@ Ember.registerBoundHelper 'formatSha', (sha, options) ->
Ember.registerBoundHelper 'pathFrom', (url, options) ->
safe Travis.Helpers.pathFrom(url)
-Ember.registerBoundHelper 'formatMessage', (message, options) ->
- safe Travis.Helpers.formatMessage(message, options)
+Ember.Handlebars.helper 'formatMessage', (message, options) ->
+ safe Travis.Helpers.formatMessage(message, options.hash)
Ember.registerBoundHelper 'formatConfig', (config, options) ->
safe Travis.Helpers.formatConfig(config)
diff --git a/assets/scripts/app/helpers/helpers.coffee b/assets/scripts/app/helpers/helpers.coffee
index 2b68dbd4..209f333f 100644
--- a/assets/scripts/app/helpers/helpers.coffee
+++ b/assets/scripts/app/helpers/helpers.coffee
@@ -26,18 +26,21 @@ require 'config/emoij'
(sha || '').substr(0, 7)
formatConfig: (config) ->
- config = $.only config, Travis.CONFIG_KEYS
+ config = $.only config, Object.keys(Travis.CONFIG_KEYS_MAP)
values = $.map config, (value, key) ->
value = (if value && value.join then value.join(', ') else value) || ''
if key == 'rvm' && "#{value}".match(/^\d+$/)
value = "#{value}.0"
- '%@: %@'.fmt $.camelize(key), value
+ '%@: %@'.fmt Travis.CONFIG_KEYS_MAP[key], value
if values.length == 0 then '-' else values.join(', ')
formatMessage: (message, options) ->
message = message || ''
message = message.split(/\n/)[0] if options.short
- @_emojize(@_escape(message)).replace /\n/g, '
'
+ message = @_emojize(@_escape(message))
+ if !!options.repo
+ message = @githubify(message, options.repo.get('owner'), options.repo.get('name'))
+ message.replace /\n/g, '
'
pathFrom: (url) ->
(url || '').split('/').pop()
@@ -66,6 +69,35 @@ require 'config/emoij'
result.push seconds + ' sec' if seconds > 0
if result.length > 0 then result.join(' ') else '-'
+ githubify: (text, owner, repo) ->
+ self = this
+ text = text.replace @_githubReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedNumber) ->
+ self._githubReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, number: matchedNumber } )
+ text = text.replace @_githubUserRegexp, (reference, username) ->
+ self._githubUserLink(reference, username)
+ text = text.replace @_githubCommitReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedSHA) ->
+ self._githubCommitReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, sha: matchedSHA })
+ text
+
+ _githubReferenceRegexp: new RegExp("([\\w-]+)?\\/?([\\w-]+)?(?:#|gh-)(\\d+)", 'g')
+
+ _githubReferenceLink: (reference, current, matched) ->
+ owner = matched.owner || current.owner
+ repo = matched.repo || current.repo
+ "#{reference}"
+
+ _githubUserRegexp: new RegExp("\\B@([\\w-]+)", 'g')
+
+ _githubUserLink: (reference, username) ->
+ "#{reference}"
+
+ _githubCommitReferenceRegexp: new RegExp("([\\w-]+)?\\/([\\w-]+)?@([0-9A-Fa-f]+)", 'g')
+
+ _githubCommitReferenceLink: (reference, current, matched) ->
+ owner = matched.owner || current.owner
+ repo = matched.repo || current.repo
+ "#{reference}"
+
_normalizeDateString: (string) ->
if window.JHW
string = string.replace('T', ' ').replace(/-/g, '/')
@@ -93,4 +125,4 @@ require 'config/emoij'
configKeys: (config) ->
return [] unless config
- $.intersect($.keys(config), Travis.CONFIG_KEYS)
+ $.intersect($.keys(config), Object.keys(Travis.CONFIG_KEYS_MAP))
diff --git a/assets/scripts/app/helpers/urls.coffee b/assets/scripts/app/helpers/urls.coffee
index 8af4d14e..17b75597 100644
--- a/assets/scripts/app/helpers/urls.coffee
+++ b/assets/scripts/app/helpers/urls.coffee
@@ -3,22 +3,22 @@
"#{Travis.config.api_endpoint}/jobs/#{id}/log.txt?deansi=true"
githubPullRequest: (slug, pullRequestNumber) ->
- "http://github.com/#{slug}/pull/#{pullRequestNumber}"
+ "https://github.com/#{slug}/pull/#{pullRequestNumber}"
githubCommit: (slug, sha) ->
- "http://github.com/#{slug}/commit/#{sha}"
+ "https://github.com/#{slug}/commit/#{sha}"
githubRepo: (slug) ->
- "http://github.com/#{slug}"
+ "https://github.com/#{slug}"
githubWatchers: (slug) ->
- "http://github.com/#{slug}/watchers"
+ "https://github.com/#{slug}/watchers"
githubNetwork: (slug) ->
- "http://github.com/#{slug}/network"
+ "https://github.com/#{slug}/network"
githubAdmin: (slug) ->
- "http://github.com/#{slug}/settings/hooks#travis_minibucket"
+ "https://github.com/#{slug}/settings/hooks#travis_minibucket"
statusImage: (slug, branch) ->
"#{location.protocol}//#{location.host}/#{slug}.png" + if branch then "?branch=#{branch}" else ''
diff --git a/assets/scripts/app/models/account.coffee b/assets/scripts/app/models/account.coffee
index 4169903e..03c29f79 100644
--- a/assets/scripts/app/models/account.coffee
+++ b/assets/scripts/app/models/account.coffee
@@ -1,12 +1,18 @@
require 'travis/model'
@Travis.Account = Travis.Model.extend
- primaryKey: 'login'
- login: DS.attr('string')
- name: DS.attr('string')
- type: DS.attr('string')
- reposCount: DS.attr('number')
+ login: Ember.attr('string')
+ name: Ember.attr('string')
+ type: Ember.attr('string')
+ _reposCount: Ember.attr(Number, key: 'repos_count')
urlGithub: (->
- "http://github.com/#{@get('login')}"
+ "https://github.com/#{@get('login')}"
).property()
+
+ # TODO: maybe it would be good to add a "default" value for Ember.attr
+ reposCount: (->
+ @get('_reposCount') || 0
+ ).property('_reposCount')
+
+Travis.Account.primaryKey = 'login'
diff --git a/assets/scripts/app/models/annotation.coffee b/assets/scripts/app/models/annotation.coffee
index 1f776765..df299b5e 100644
--- a/assets/scripts/app/models/annotation.coffee
+++ b/assets/scripts/app/models/annotation.coffee
@@ -1,10 +1,10 @@
require 'travis/model'
@Travis.Annotation = Travis.Model.extend
- jobId: DS.attr('number')
- description: DS.attr('string')
- url: DS.attr('string')
- image: DS.attr('object')
- providerName: DS.attr('string')
+ jobId: Ember.attr('number')
+ description: Ember.attr('string')
+ url: Ember.attr('string')
+ image: Ember.attr('object')
+ providerName: Ember.attr('string')
- job: DS.belongsTo('Travis.Job')
+ job: Ember.belongsTo('Travis.Job')
diff --git a/assets/scripts/app/models/branch.coffee b/assets/scripts/app/models/branch.coffee
index 3d45d52d..9f6e66f7 100644
--- a/assets/scripts/app/models/branch.coffee
+++ b/assets/scripts/app/models/branch.coffee
@@ -1,18 +1,18 @@
require 'travis/model'
@Travis.Branch = Travis.Model.extend
- repoId: DS.attr('number', key: 'repository_id')
- commitId: DS.attr('number')
- state: DS.attr('string')
- number: DS.attr('number')
- branch: DS.attr('string')
- message: DS.attr('string')
- result: DS.attr('number')
- duration: DS.attr('number')
- startedAt: DS.attr('string')
- finishedAt: DS.attr('string')
+ repoId: Ember.attr('number', key: 'repository_id')
+ commitId: Ember.attr('number')
+ state: Ember.attr('string')
+ number: Ember.attr('number')
+ branch: Ember.attr('string')
+ message: Ember.attr('string')
+ result: Ember.attr('number')
+ duration: Ember.attr('number')
+ startedAt: Ember.attr('string')
+ finishedAt: Ember.attr('string')
- commit: DS.belongsTo('Travis.Commit')
+ commit: Ember.belongsTo('Travis.Commit')
repo: (->
Travis.Repo.find @get('repoId') if @get('repoId')
diff --git a/assets/scripts/app/models/broadcast.coffee b/assets/scripts/app/models/broadcast.coffee
index dab4fe4d..9f712631 100644
--- a/assets/scripts/app/models/broadcast.coffee
+++ b/assets/scripts/app/models/broadcast.coffee
@@ -1,7 +1,7 @@
require 'travis/model'
@Travis.Broadcast = Travis.Model.extend
- message: DS.attr('string')
+ message: Ember.attr('string')
toObject: ->
{ type: 'broadcast', id: @get('id'), message: @get('message') }
diff --git a/assets/scripts/app/models/build.coffee b/assets/scripts/app/models/build.coffee
index 9906e770..667daee9 100644
--- a/assets/scripts/app/models/build.coffee
+++ b/assets/scripts/app/models/build.coffee
@@ -1,32 +1,31 @@
require 'travis/model'
@Travis.Build = Travis.Model.extend Travis.DurationCalculations,
- eventType: DS.attr('string')
- repoId: DS.attr('number')
- commitId: DS.attr('number')
+ repositoryId: Ember.attr('number')
+ commitId: Ember.attr('number')
- state: DS.attr('string')
- number: DS.attr('number')
- branch: DS.attr('string')
- message: DS.attr('string')
- _duration: DS.attr('number')
- _config: DS.attr('object')
- startedAt: DS.attr('string')
- finishedAt: DS.attr('string')
- pullRequest: DS.attr('boolean')
- pullRequestTitle: DS.attr('string')
- pullRequestNumber: DS.attr('number')
+ state: Ember.attr('string')
+ number: Ember.attr(Number)
+ branch: Ember.attr('string')
+ message: Ember.attr('string')
+ _duration: Ember.attr(Number, key: 'duration')
+ _config: Ember.attr('object', key: 'config')
+ startedAt: Ember.attr('string')
+ finishedAt: Ember.attr('string')
+ pullRequest: Ember.attr('boolean')
+ pullRequestTitle: Ember.attr('string')
+ pullRequestNumber: Ember.attr(Number)
- repo: DS.belongsTo('Travis.Repo')
- commit: DS.belongsTo('Travis.Commit')
- jobs: DS.hasMany('Travis.Job')
+ repo: Ember.belongsTo('Travis.Repo', key: 'repository_id')
+ commit: Ember.belongsTo('Travis.Commit')
+ jobs: Ember.hasMany('Travis.Job')
config: (->
Travis.Helpers.compact(@get('_config'))
).property('_config')
isPullRequest: (->
- @get('eventType') == 'pull_request'
+ @get('eventType') == 'pull_request' || @get('pullRequest')
).property('eventType')
isMatrix: (->
@@ -46,7 +45,7 @@ require 'travis/model'
).property('jobs.@each.allowFailure')
rawConfigKeys: (->
- keys = Travis.Helpers.configKeys(@get('config'))
+ keys = []
@get('jobs').forEach (job) ->
Travis.Helpers.configKeys(job.get('config')).forEach (key) ->
@@ -58,26 +57,30 @@ require 'travis/model'
configKeys: (->
keys = @get('rawConfigKeys')
headers = (I18n.t(key) for key in ['build.job', 'build.duration', 'build.finished_at'])
- $.map(headers.concat(keys), (key) -> return $.camelize(key))
+ $.map(headers.concat(keys), (key) -> if Travis.CONFIG_KEYS_MAP.hasOwnProperty(key) then Travis.CONFIG_KEYS_MAP[key] else key)
).property('rawConfigKeys.length')
canCancel: (->
- @get('state') == 'created' # TODO
- ).property('state')
+ !@get('isFinished') && @get('jobs').filter( (j) -> j.get('canCancel') ).get('length') > 0
+ ).property('isFinished', 'jobs.@each.canCancel')
cancel: (->
- Travis.ajax.post "/builds/#{@get('id')}", _method: 'delete'
+ Travis.ajax.post "/builds/#{@get('id')}/cancel"
)
requeue: ->
Travis.ajax.post '/requests', build_id: @get('id')
- isAttributeLoaded: (key) ->
+ isPropertyLoaded: (key) ->
if ['_duration', 'finishedAt'].contains(key) && !@get('isFinished')
return true
else
@_super(key)
+ formattedFinishedAt: (->
+ if finishedAt = @get('finishedAt')
+ moment(finishedAt).format('lll')
+ ).property('finishedAt')
@Travis.Build.reopenClass
byRepoId: (id, parameters) ->
diff --git a/assets/scripts/app/models/commit.coffee b/assets/scripts/app/models/commit.coffee
index 18602b5c..bea75130 100644
--- a/assets/scripts/app/models/commit.coffee
+++ b/assets/scripts/app/models/commit.coffee
@@ -1,15 +1,14 @@
require 'travis/model'
@Travis.Commit = Travis.Model.extend
- buildId: DS.attr('number')
- sha: DS.attr('string')
- branch: DS.attr('string')
- message: DS.attr('string')
- compareUrl: DS.attr('string')
- authorName: DS.attr('string')
- authorEmail: DS.attr('string')
- committerName: DS.attr('string')
- committerEmail: DS.attr('string')
- pullRequestNumber: DS.attr('number')
+ buildId: Ember.attr('number')
+ sha: Ember.attr('string')
+ branch: Ember.attr('string')
+ message: Ember.attr('string')
+ compareUrl: Ember.attr('string')
+ authorName: Ember.attr('string')
+ authorEmail: Ember.attr('string')
+ committerName: Ember.attr('string')
+ committerEmail: Ember.attr('string')
- build: DS.belongsTo('Travis.Build')
+ build: Ember.belongsTo('Travis.Build')
diff --git a/assets/scripts/app/models/event.coffee b/assets/scripts/app/models/event.coffee
index 605fe7b3..357d9abd 100644
--- a/assets/scripts/app/models/event.coffee
+++ b/assets/scripts/app/models/event.coffee
@@ -1,11 +1,11 @@
require 'travis/model'
@Travis.Event = Travis.Model.extend
- event: DS.attr('string')
- repoId: DS.attr('number', key: 'repository_id')
- sourceId: DS.attr('number', key: 'source_id')
- sourceType: DS.attr('string', key: 'source_type')
- createdAt: DS.attr('string', key: 'created_at')
+ event: Ember.attr('string')
+ repoId: Ember.attr('number', key: 'repository_id')
+ sourceId: Ember.attr('number', key: 'source_id')
+ sourceType: Ember.attr('string', key: 'source_type')
+ createdAt: Ember.attr('string', key: 'created_at')
event_: (->
@get('event')
diff --git a/assets/scripts/app/models/extensions.coffee b/assets/scripts/app/models/extensions.coffee
index be8f2b7a..013da4f5 100644
--- a/assets/scripts/app/models/extensions.coffee
+++ b/assets/scripts/app/models/extensions.coffee
@@ -7,6 +7,6 @@ Travis.DurationCalculations = Ember.Mixin.create
).property('_duration', 'finishedAt', 'startedAt')
updateTimes: ->
- unless ['rootState.loaded.reloading', 'rootState.loading'].contains @get('stateManager.currentState.path')
+ unless ['rootState.loaded.reloading', 'rootState.loading'].contains @get('stateManager.currentState.path') or @get('isFinished')
@notifyPropertyChange '_duration'
@notifyPropertyChange 'finished_at'
diff --git a/assets/scripts/app/models/hook.coffee b/assets/scripts/app/models/hook.coffee
index 13cc04d1..677708d1 100644
--- a/assets/scripts/app/models/hook.coffee
+++ b/assets/scripts/app/models/hook.coffee
@@ -1,11 +1,11 @@
require 'travis/model'
@Travis.Hook = Travis.Model.extend
- name: DS.attr('string')
- ownerName: DS.attr('string')
- description: DS.attr('string')
- active: DS.attr('boolean')
- admin: DS.attr('boolean')
+ name: Ember.attr('string')
+ ownerName: Ember.attr('string')
+ description: Ember.attr('string')
+ active: Ember.attr('boolean')
+ admin: Ember.attr('boolean')
account: (->
@get('slug').split('/')[0]
@@ -16,18 +16,14 @@ require 'travis/model'
).property('ownerName', 'name')
urlGithub: (->
- "http://github.com/#{@get('slug')}"
+ "https://github.com/#{@get('slug')}"
).property()
urlGithubAdmin: (->
- "http://github.com/#{@get('slug')}/settings/hooks#travis_minibucket"
+ "https://github.com/#{@get('slug')}/settings/hooks#travis_minibucket"
).property()
toggle: ->
return if @get('isSaving')
- transaction = @get('store').transaction()
- transaction.add this
-
@set 'active', !@get('active')
-
- transaction.commit()
+ @save()
diff --git a/assets/scripts/app/models/job.coffee b/assets/scripts/app/models/job.coffee
index 7378915b..d28eb522 100644
--- a/assets/scripts/app/models/job.coffee
+++ b/assets/scripts/app/models/job.coffee
@@ -1,39 +1,26 @@
require 'travis/model'
@Travis.Job = Travis.Model.extend Travis.DurationCalculations,
- repoId: DS.attr('number')
- buildId: DS.attr('number')
- commitId: DS.attr('number')
- logId: DS.attr('number')
+ repoId: Ember.attr('string', key: 'repository_id')
+ buildId: Ember.attr('string')
+ commitId: Ember.attr('string')
+ logId: Ember.attr('string')
- queue: DS.attr('string')
- state: DS.attr('string')
- number: DS.attr('string')
- startedAt: DS.attr('string')
- finishedAt: DS.attr('string')
- allowFailure: DS.attr('boolean')
+ queue: Ember.attr('string')
+ state: Ember.attr('string')
+ number: Ember.attr('string')
+ startedAt: Ember.attr('string')
+ finishedAt: Ember.attr('string')
+ allowFailure: Ember.attr('boolean')
- repositorySlug: DS.attr('string')
- repo: DS.belongsTo('Travis.Repo')
- build: DS.belongsTo('Travis.Build')
- commit: DS.belongsTo('Travis.Commit')
+ repositorySlug: Ember.attr('string')
+ repo: Ember.belongsTo('Travis.Repo', key: 'repository_id')
+ build: Ember.belongsTo('Travis.Build')
+ commit: Ember.belongsTo('Travis.Commit')
- annotations: DS.hasMany('Travis.Annotation')
+ annotations: Ember.hasMany('Travis.Annotation')
- # this is a fake relationship just to get rid
- # of ember data's bug: https://github.com/emberjs/data/issues/758
- # TODO: remove when this issue is fixed
- fakeBuild: DS.belongsTo('Travis.Build')
-
- _config: DS.attr('object')
-
- repoSlugDidChange: (->
- if slug = @get('repoSlug')
- @get('store').loadIncomplete(Travis.Repo, {
- id: @get('repoId'),
- slug: slug
- }, { skipIfExists: true })
- ).observes('repoSlug')
+ _config: Ember.attr('object', key: 'config')
log: ( ->
@set('isLogAccessed', true)
@@ -75,11 +62,11 @@ require 'travis/model'
).property('config', 'build.rawConfigKeys.length')
canCancel: (->
- @get('state') == 'created' || @get('state') == 'queued' # TODO
+ !@get('isFinished')
).property('state')
cancel: (->
- Travis.ajax.post "/jobs/#{@get('id')}", _method: 'delete'
+ Travis.ajax.post "/jobs/#{@get('id')}/cancel"
)
requeue: ->
@@ -105,7 +92,7 @@ require 'travis/model'
Travis.pusher.unsubscribe "job-#{@get('id')}"
).observes('state')
- isAttributeLoaded: (key) ->
+ isPropertyLoaded: (key) ->
if ['finishedAt'].contains(key) && !@get('isFinished')
return true
else if key == 'startedAt' && @get('state') == 'created'
@@ -117,19 +104,41 @@ require 'travis/model'
@get('state') in ['passed', 'failed', 'errored', 'canceled']
).property('state')
+ # TODO: such formattings should be done in controller, but in order
+ # to use it there easily, I would have to refactor job and build
+ # controllers
+ formattedFinishedAt: (->
+ if finishedAt = @get('finishedAt')
+ moment(finishedAt).format('lll')
+ ).property('finishedAt')
+
@Travis.Job.reopenClass
- queued: (queue) ->
- @find()
- Travis.store.filter this, (job) ->
- queued = ['created', 'queued'].indexOf(job.get('state')) != -1
- # TODO: why queue is sometimes just common instead of build.common?
- queued && (!queue || job.get('queue') == "builds.#{queue}" || job.get('queue') == queue)
+ queued: ->
+ filtered = Ember.FilteredRecordArray.create(
+ modelClass: Travis.Job
+ filterFunction: (job) ->
+ ['created', 'queued'].indexOf(job.get('state')) != -1
+ filterProperties: ['state', 'queue']
+ )
+
+ @fetch().then (array) ->
+ filtered.updateFilter()
+ filtered.set('isLoaded', true)
+
+ filtered
running: ->
- @find(state: 'started')
- Travis.store.filter this, (job) ->
- job.get('state') == 'started'
+ filtered = Ember.FilteredRecordArray.create(
+ modelClass: Travis.Job
+ filterFunction: (job) ->
+ job.get('state') == 'started'
+ filterProperties: ['state']
+ )
+
+ @fetch(state: 'started').then (array) ->
+ filtered.updateFilter()
+ filtered.set('isLoaded', true)
+
+ filtered
- findMany: (ids) ->
- Travis.store.findMany this, ids
diff --git a/assets/scripts/app/models/log.coffee b/assets/scripts/app/models/log.coffee
index 63df7690..5671199d 100644
--- a/assets/scripts/app/models/log.coffee
+++ b/assets/scripts/app/models/log.coffee
@@ -15,6 +15,7 @@ require 'travis/chunk_buffer'
fetch: ->
console.log 'log model: fetching log' if Log.DEBUG
+ @setParts()
handlers =
json: (json) => @loadParts(json['log']['parts'])
text: (text) => @loadText(text)
@@ -45,7 +46,7 @@ Travis.Log.Request = Em.Object.extend
Travis.ajax.ajax "/jobs/#{@id}/log?cors_hax=true", 'GET',
dataType: 'text'
headers: @HEADERS
- success: (body, status, xhr) => @handle(body, status, xhr)
+ success: (body, status, xhr) => Ember.run(this, -> @handle(body, status, xhr))
handle: (body, status, xhr) ->
if xhr.status == 204
diff --git a/assets/scripts/app/models/repo.coffee b/assets/scripts/app/models/repo.coffee
index e1503b2a..f582fb10 100644
--- a/assets/scripts/app/models/repo.coffee
+++ b/assets/scripts/app/models/repo.coffee
@@ -2,16 +2,18 @@ require 'travis/expandable_record_array'
require 'travis/model'
@Travis.Repo = Travis.Model.extend
- slug: DS.attr('string')
- description: DS.attr('string')
- lastBuildId: DS.attr('number')
- lastBuildNumber: DS.attr('string')
- lastBuildState: DS.attr('string')
- lastBuildStartedAt: DS.attr('string')
- lastBuildFinishedAt: DS.attr('string')
- _lastBuildDuration: DS.attr('number')
+ id: Ember.attr('string')
+ slug: Ember.attr('string')
+ description: Ember.attr('string')
+ lastBuildId: Ember.attr('string')
+ lastBuildNumber: Ember.attr(Number)
+ lastBuildState: Ember.attr('string')
+ lastBuildStartedAt: Ember.attr('string')
+ lastBuildFinishedAt: Ember.attr('string')
+ githubLanguage: Ember.attr('string')
+ _lastBuildDuration: Ember.attr(Number, key: 'last_build_duration')
- lastBuild: DS.belongsTo('Travis.Build')
+ lastBuild: Ember.belongsTo('Travis.Build', key: 'last_build_id')
lastBuildHash: (->
{
@@ -22,7 +24,9 @@ require 'travis/model'
).property('lastBuildId', 'lastBuildNumber')
allBuilds: (->
- Travis.Build.find()
+ recordArray = Ember.RecordArray.create({ modelClass: Travis.Build, content: Ember.A([]) })
+ Travis.Build.registerRecordArray(recordArray)
+ recordArray
).property()
builds: (->
@@ -33,12 +37,11 @@ require 'travis/model'
array = Travis.ExpandableRecordArray.create
type: Travis.Build
content: Ember.A([])
- store: @get('store')
array.load(builds)
id = @get('id')
- array.observe(@get('allBuilds'), (build) -> build.get('isLoaded') && build.get('eventType') && build.get('repo.id') == id && !build.get('isPullRequest') )
+ array.observe(@get('allBuilds'), (build) -> build.get('isLoaded') && build.get('repo.id') == id && !build.get('isPullRequest') )
array
).property()
@@ -49,12 +52,11 @@ require 'travis/model'
array = Travis.ExpandableRecordArray.create
type: Travis.Build
content: Ember.A([])
- store: @get('store')
array.load(builds)
id = @get('id')
- array.observe(@get('allBuilds'), (build) -> build.get('isLoaded') && build.get('eventType') && build.get('repo.id') == id && build.get('isPullRequest') )
+ array.observe(@get('allBuilds'), (build) -> build.get('isLoaded') && build.get('repo.id') == id && build.get('isPullRequest') )
array
).property()
@@ -117,13 +119,28 @@ require 'travis/model'
@find(search: query, orderBy: 'name')
withLastBuild: ->
- @filter( (repo) -> (!repo.get('incomplete') || repo.isAttributeLoaded('lastBuildId')) && repo.get('lastBuildId') )
+ filtered = Ember.FilteredRecordArray.create(
+ modelClass: Travis.Repo
+ filterFunction: (repo) -> repo.get('lastBuildId')
+ filterProperties: ['lastBuildId']
+ )
+
+ Travis.Repo.fetch().then (array) ->
+ filtered.updateFilter()
+ filtered.set('isLoaded', true)
+
+ filtered
bySlug: (slug) ->
repo = $.select(@find().toArray(), (repo) -> repo.get('slug') == slug)
if repo.length > 0 then repo else @find(slug: slug)
+ fetchBySlug: (slug) ->
+ repos = $.select(@find().toArray(), (repo) -> repo.get('slug') == slug)
+ if repos.length > 0
+ repos[0]
+ else
+ @fetch(slug: slug).then (repos) -> Ember.get(repos, 'firstObject')
+
# buildURL: (slug) ->
# if slug then slug else 'repos'
-
-
diff --git a/assets/scripts/app/models/user.coffee b/assets/scripts/app/models/user.coffee
index 242ffb93..553b26bc 100644
--- a/assets/scripts/app/models/user.coffee
+++ b/assets/scripts/app/models/user.coffee
@@ -2,17 +2,17 @@ require 'travis/ajax'
require 'travis/model'
@Travis.User = Travis.Model.extend
- _name: DS.attr('string')
- email: DS.attr('string')
- login: DS.attr('string')
- token: DS.attr('string')
- locale: DS.attr('string')
- gravatarId: DS.attr('string')
- isSyncing: DS.attr('boolean')
- syncedAt: DS.attr('string')
- repoCount: DS.attr('number')
+ _name: Ember.attr('string', key: 'name')
+ email: Ember.attr('string')
+ login: Ember.attr('string')
+ token: Ember.attr('string')
+ locale: Ember.attr('string')
+ gravatarId: Ember.attr('string')
+ isSyncing: Ember.attr('boolean')
+ syncedAt: Ember.attr('string')
+ repoCount: Ember.attr('number')
- # This is the only way I found to override the attribue created with DS.attr
+ # This is the only way I found to override the attribue created with Ember.attr
name: Ember.computed( (key, value) ->
if arguments.length == 1
@get('_name') || @get('login')
@@ -27,34 +27,40 @@ require 'travis/model'
Ember.run.next this, ->
@poll() if @get('isSyncing')
- Ember.run.next this, ->
- transaction = @get('store').transaction()
- transaction.add this
-
urlGithub: (->
"https://github.com/#{@get('login')}"
).property()
+ _rawPermissions: (->
+ Travis.ajax.get('/users/permissions')
+ ).property()
+
permissions: (->
- unless @permissions
- @permissions = Ember.ArrayProxy.create(content: [])
- Travis.ajax.get('/users/permissions', (data) => @permissions.set('content', data.permissions))
- @permissions
+ permissions = Ember.ArrayProxy.create(content: [])
+ @get('_rawPermissions').then (data) => permissions.set('content', data.permissions)
+ permissions
+ ).property()
+
+ adminPermissions: (->
+ permissions = Ember.ArrayProxy.create(content: [])
+ @get('_rawPermissions').then (data) => permissions.set('content', data.admin)
+ permissions
+ ).property()
+
+ pullPermissions: (->
+ permissions = Ember.ArrayProxy.create(content: [])
+ @get('_rawPermissions').then (data) => permissions.set('content', data.pull)
+ permissions
+ ).property()
+
+ pushPermissions: (->
+ permissions = Ember.ArrayProxy.create(content: [])
+ @get('_rawPermissions').then (data) => permissions.set('content', data.push)
+ permissions
).property()
updateLocale: (locale) ->
-
- transaction = @get('transaction')
- transaction.commit()
-
- self = this
- observer = ->
- unless self.get('isSaving')
- self.removeObserver 'isSaving', observer
- transaction = self.get('store').transaction()
- transaction.add self
-
- @addObserver 'isSaving', observer
+ @save()
Travis.setLocale(locale)
type: (->
@@ -71,7 +77,10 @@ require 'travis/model'
poll: ->
Travis.ajax.get '/users', (data) =>
if data.user.is_syncing
- Ember.run.later(this, this.poll.bind(this), 3000)
+ self = this
+ setTimeout ->
+ self.poll()
+ , 3000
else
@set('isSyncing', false)
@setWithSession('syncedAt', data.user.synced_at)
diff --git a/assets/scripts/app/models/worker.coffee b/assets/scripts/app/models/worker.coffee
index c60a898f..c5bc8539 100644
--- a/assets/scripts/app/models/worker.coffee
+++ b/assets/scripts/app/models/worker.coffee
@@ -1,10 +1,10 @@
require 'travis/model'
@Travis.Worker = Travis.Model.extend
- state: DS.attr('string')
- name: DS.attr('string')
- host: DS.attr('string')
- payload: DS.attr('object')
+ state: Ember.attr('string')
+ name: Ember.attr('string')
+ host: Ember.attr('string')
+ payload: Ember.attr('object')
number: (->
@get('name').match(/\d+$/)[0]
diff --git a/assets/scripts/app/pusher.coffee b/assets/scripts/app/pusher.coffee
index 473982e9..c3b1f825 100644
--- a/assets/scripts/app/pusher.coffee
+++ b/assets/scripts/app/pusher.coffee
@@ -55,11 +55,11 @@ $.extend Travis.Pusher.prototype,
# TODO remove job:requeued, once sf-restart-event has been merged
# TODO this also needs to clear logs on build:created if matrix jobs are already loaded
if event == 'job:created' || event == 'job:requeued'
- if Travis.store.isInStore(Travis.Job, data.job.id)
+ if Travis.Job.isRecordLoaded(data.job.id)
Travis.Job.find(data.job.id).clearLog()
Ember.run.next ->
- Travis.store.receive(event, data)
+ Travis.receive(event, data)
processSavedCallbacks: ->
while callback = @callbacksToProcess.shiftObject()
@@ -78,7 +78,7 @@ $.extend Travis.Pusher.prototype,
switch event
when 'build:started', 'build:finished'
data
- when 'job:created', 'job:started', 'job:requeued', 'job:finished', 'job:log'
+ when 'job:created', 'job:started', 'job:requeued', 'job:finished', 'job:log', 'job:canceled'
data.queue = data.queue.replace('builds.', '') if data.queue
{ job: data }
when 'worker:added', 'worker:updated', 'worker:removed'
diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee
index 93dda8af..711111a8 100644
--- a/assets/scripts/app/routes.coffee
+++ b/assets/scripts/app/routes.coffee
@@ -1,44 +1,9 @@
require 'travis/location'
-require 'travis/line_number_parser'
-
-Travis.DontSetupModelForControllerMixin = Ember.Mixin.create
- # I've override setup to *not* set controller's model
- # this can be remove when this patch will be merged https://github.com/emberjs/ember.js/pull/2044
- # this will allow us to override setting up model for a controller
- setup: (context) ->
- isTop = undefined
- unless @_redirected
- isTop = true
- @_redirected = []
-
- @_checkingRedirect = true
- depth = ++@_redirectDepth
-
- if context is `undefined`
- @redirect()
- else
- @redirect context
-
- @_redirectDepth--
- @_checkingRedirect = false
-
- redirected = @_redirected
-
- @_redirected = null if isTop
-
- return false if redirected[depth]
-
- controller = @controllerFor(@routeName, context)
-
- @setupController controller, context
- @renderTemplate controller, context
Ember.Router.reopen
location: (if testMode? then Ember.NoneLocation.create() else Travis.Location.create())
handleURL: (url) ->
- Travis.autoSignIn() unless Travis.__container__.lookup('controller:currentUser').get('content')
-
url = url.replace(/#.*?$/, '')
try
@_super(url)
@@ -51,29 +16,51 @@ Ember.Router.reopen
# TODO: don't reopen Ember.Route to add events, there should be
# a better way (like "parent" resource for everything inside map)
Ember.Route.reopen
- events:
+ _actions:
renderDefaultTemplate: ->
@renderDefaultTemplate() if @renderDefaultTemplate
+ error: (error) ->
+ if error == 'needs-auth'
+ authController = @container.lookup('controller:auth') || @generateController('auth')
+ authController.set('redirected', true)
+ @transitionTo('auth')
+ else
+ throw(error)
+
renderNoOwnedRepos: ->
@render('no_owned_repos', outlet: 'main')
+ renderFirstSync: ->
+ @renderFirstSync()
+
afterSignIn: (path) ->
@afterSignIn(path)
afterSignOut: ->
@afterSignOut()
- afterSignIn: (path) ->
- @routeToPath(path)
+ afterSignIn: ->
+ if transition = Travis.auth.get('afterSignInTransition')
+ Travis.auth.set('afterSignInTransition', null)
+ transition.retry()
+ else
+ @transitionTo('index.current') if @constructor == Travis.AuthRoute || @constructor.superclass == Travis.AuthRoute
afterSignOut: ->
- @routeToPath('/')
+ @transitionTo('index.current')
- routeToPath: (path) ->
- return unless path
- @router.handleURL(path)
- @router.location.setURL(path)
+ renderFirstSync: ->
+ @transitionTo 'first_sync'
+
+ beforeModel: (transition) ->
+ Travis.autoSignIn() unless @signedIn()
+
+ if !@signedIn() && @get('needsAuth')
+ Travis.auth.set('afterSignInTransition', transition)
+ Ember.RSVP.reject("needs-auth")
+ else
+ @_super.apply(this, arguments)
signedIn: ->
@controllerFor('currentUser').get('content')
@@ -91,13 +78,6 @@ Ember.Route.reopen
Travis.storeAfterSignInPath(path)
@transitionTo('auth')
-Travis.Router.reopen
- transitionTo: ->
- this.container.lookup('controller:repo').set('lineNumber', null)
-
- @_super.apply this, arguments
-
-
Travis.Router.map ->
@resource 'index', path: '/', ->
@route 'current', path: '/'
@@ -110,6 +90,7 @@ Travis.Router.map ->
@resource 'branches', path: '/branches'
@route 'getting_started'
+ @route 'first_sync'
@route 'stats', path: '/stats'
@route 'auth', path: '/auth'
@route 'notFound', path: '/not-found'
@@ -120,32 +101,17 @@ Travis.Router.map ->
@route 'index', path: '/'
@route 'profile', path: '/profile'
-Travis.ApplicationRoute = Ember.Route.extend Travis.LineNumberParser,
- setupController: ->
- @_super.apply this, arguments
-
- this.controllerFor('repo').set('lineNumber', @fetchLineNumber())
-
Travis.SetupLastBuild = Ember.Mixin.create
setupController: ->
- @lastBuildDidChange()
- @controllerFor('repo').addObserver('repo.lastBuild', this, 'lastBuildDidChange')
@repoDidLoad()
@controllerFor('repo').addObserver('repo.isLoaded', this, 'repoDidLoad')
- deactivate: ->
- @_super.apply this, arguments
- @controllerFor('repo').removeObserver('repo.lastBuild', this, 'lastBuildDidChange')
-
repoDidLoad: ->
# TODO: it would be nicer to do it with promises
repo = @controllerFor('repo').get('repo')
- if repo && repo.get('isLoaded') && !repo.get('lastBuild')
- @render('builds/not_found', outlet: 'pane', into: 'repo')
-
- lastBuildDidChange: ->
- build = @controllerFor('repo').get('repo.lastBuild')
- @controllerFor('build').set('build', build)
+ if repo && repo.get('isLoaded') && !repo.get('lastBuildId')
+ Ember.run.next =>
+ @render('builds/not_found', outlet: 'pane', into: 'repo')
Travis.GettingStartedRoute = Ember.Route.extend
setupController: ->
@@ -159,11 +125,23 @@ Travis.GettingStartedRoute = Ember.Route.extend
@render 'repos', outlet: 'left'
@_super.apply(this, arguments)
-Travis.IndexCurrentRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin, Travis.SetupLastBuild,
- renderDefaultTemplate: ->
- @render 'repo'
- @render 'build', outlet: 'pane', into: 'repo'
+Travis.FirstSyncRoute = Ember.Route.extend
+ _actions:
+ renderNoOwnedRepos: (->)
+ # do nothing, we are showing first sync, so it's normal that there is
+ # no owned repos
+ setupController: ->
+ $('body').attr('id', 'home')
+ @container.lookup('controller:repos').activate()
+ @container.lookup('controller:application').connectLayout 'simple'
+ @_super.apply(this, arguments)
+
+ renderTemplate: ->
+ @render 'top', outlet: 'top'
+ @_super.apply(this, arguments)
+
+Travis.IndexCurrentRoute = Ember.Route.extend Travis.SetupLastBuild,
renderTemplate: ->
@render 'repo'
@render 'build', outlet: 'pane', into: 'repo'
@@ -171,7 +149,8 @@ Travis.IndexCurrentRoute = Ember.Route.extend Travis.DontSetupModelForController
setupController: ->
@_super.apply this, arguments
@currentRepoDidChange()
- @container.lookup('controller:repo').activate('index')
+
+ @controllerFor('repo').activate('index')
@controllerFor('repos').addObserver('firstObject', this, 'currentRepoDidChange')
deactivate: ->
@@ -180,7 +159,7 @@ Travis.IndexCurrentRoute = Ember.Route.extend Travis.DontSetupModelForController
currentRepoDidChange: ->
@controllerFor('repo').set('repo', @controllerFor('repos').get('firstObject'))
-Travis.AbstractBuildsRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin,
+Travis.AbstractBuildsRoute = Ember.Route.extend
renderTemplate: ->
@render 'builds', outlet: 'pane', into: 'repo'
@@ -205,7 +184,7 @@ Travis.BuildsRoute = Travis.AbstractBuildsRoute.extend(contentType: 'builds')
Travis.PullRequestsRoute = Travis.AbstractBuildsRoute.extend(contentType: 'pull_requests')
Travis.BranchesRoute = Travis.AbstractBuildsRoute.extend(contentType: 'branches')
-Travis.BuildRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin,
+Travis.BuildRoute = Ember.Route.extend
renderTemplate: ->
@render 'build', outlet: 'pane', into: 'repo'
@@ -223,7 +202,10 @@ Travis.BuildRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin,
@controllerFor('build').set('build', model)
repo.set('build', model)
-Travis.JobRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin,
+ model: (params) ->
+ Travis.Build.fetch(params.build_id)
+
+Travis.JobRoute = Ember.Route.extend
renderTemplate: ->
@render 'job', outlet: 'pane', into: 'repo'
@@ -238,18 +220,23 @@ Travis.JobRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin,
repo = @controllerFor('repo')
repo.set('job', model)
repo.activate('job')
- @controllerFor('build').set('build', model.get('build'))
- repo.set('build', model.get('build'))
-Travis.RepoIndexRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin, Travis.SetupLastBuild,
+ if build = model.get('build')
+ @controllerFor('build').set('build', build)
+ repo.set('build', build)
+
+ model: (params) ->
+ Travis.Job.fetch(params.job_id)
+
+Travis.RepoIndexRoute = Ember.Route.extend Travis.SetupLastBuild,
setupController: (controller, model) ->
@_super.apply this, arguments
- @container.lookup('controller:repo').activate('current')
+ @controllerFor('repo').activate('current')
renderTemplate: ->
@render 'build', outlet: 'pane', into: 'repo'
-Travis.RepoRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin,
+Travis.RepoRoute = Ember.Route.extend
renderTemplate: ->
@render 'repo'
@@ -264,38 +251,21 @@ Travis.RepoRoute = Ember.Route.extend Travis.DontSetupModelForControllerMixin,
[owner, name] = slug.split('/')
{ owner: owner, name: name }
- deserialize: (params) ->
+ model: (params) ->
slug = "#{params.owner}/#{params.name}"
- content = Ember.Object.create slug: slug, isLoaded: false, isLoading: true
- proxy = Ember.ObjectProxy.create(content: content)
- repos = Travis.Repo.bySlug(slug)
+ Travis.Repo.fetchBySlug(slug)
- self = this
-
- observer = ->
- if repos.get 'isLoaded'
- repos.removeObserver 'isLoaded', observer
- proxy.set 'isLoading', false
-
- if repos.get('length') == 0
- self.render('repos/not_found', outlet: 'main')
- else
- proxy.set 'content', repos.objectAt(0)
-
- if repos.length
- proxy.set('content', repos[0])
- else
- repos.addObserver 'isLoaded', observer
-
- proxy
+ actions:
+ error: ->
+ Ember.run.next this, ->
+ @render('repos/not_found', outlet: 'main')
Travis.IndexRoute = Ember.Route.extend
renderTemplate: ->
$('body').attr('id', 'home')
@render 'repos', outlet: 'left'
- @render 'sidebar', outlet: 'right'
@render 'top', outlet: 'top'
@render 'flash', outlet: 'flash'
@@ -303,6 +273,10 @@ Travis.IndexRoute = Ember.Route.extend
@container.lookup('controller:repos').activate()
@container.lookup('controller:application').connectLayout 'home'
+Travis.IndexLoadingRoute = Ember.Route.extend
+ renderTemplate: ->
+ @render('index_loading')
+
Travis.StatsRoute = Ember.Route.extend
renderTemplate: ->
$('body').attr('id', 'stats')
@@ -354,7 +328,7 @@ Travis.AccountRoute = Ember.Route.extend
params = { login: account.get('login') }
profileController.setParams(params)
- deserialize: (params) ->
+ model: (params) ->
controller = @container.lookup('controller:accounts')
account = controller.findByLogin(params.login)
@@ -373,7 +347,7 @@ Travis.AccountRoute = Ember.Route.extend
proxy
serialize: (account) ->
- if account
+ if account && account.get
{ login: account.get('login') }
else
{}
@@ -401,3 +375,6 @@ Travis.AuthRoute = Ember.Route.extend
setupController: ->
@container.lookup('controller:application').connectLayout('simple')
+
+ deactivate: ->
+ @controllerFor('auth').set('redirected', false)
diff --git a/assets/scripts/app/store.coffee b/assets/scripts/app/store.coffee
deleted file mode 100644
index 101b5ae5..00000000
--- a/assets/scripts/app/store.coffee
+++ /dev/null
@@ -1,176 +0,0 @@
-require 'store/rest_adapter'
-
-coerceId = (id) -> if id == null then null else id+''
-
-Travis.Store = DS.Store.extend
- revision: 12
- adapter: Travis.RestAdapter.create()
-
- init: ->
- @_super.apply this, arguments
- @_loadedData = {}
- @clientIdToComplete = {}
-
- load: (type, data, prematerialized) ->
- result = @_super.apply this, arguments
-
- if result && result.clientId && @clientIdToComplete[result.clientId] == undefined
- # I assume that everything that goes through load is complete record
- # representation, incomplete hashes from pusher go through merge()
- @clientIdToComplete[result.clientId] = true
-
- result
-
- # TODO use isUpdating once we've upgraded ember-data
- loadMany: (type, ids, hashes) ->
- result = @_super.apply this, arguments
- array.set('isLoaded', true) for array in @typeMapFor(type).recordArrays
- result
-
- merge: (type, data, incomplete) ->
- id = coerceId data.id
-
- typeMap = @typeMapFor(type)
- clientId = typeMap.idToCid[id]
- record = @recordCache[clientId]
- if record
- @get('adapter').merge(this, record, data)
- else
- if (savedData = @clientIdToData[clientId]) && savedData.id?
- $.extend(savedData, data)
- else
- result = @load(type, data, {id: data.id})
-
- if result && result.clientId
- clientId = result.clientId
- if incomplete
- @clientIdToComplete[result.clientId] = false
-
- { clientId: clientId, id: id }
-
- isInStore: (type, id) ->
- !!@typeMapFor(type).idToCid[id]
-
- receive: (event, data) ->
- [name, type] = event.split(':')
-
- mappings = @adapter.get('mappings')
- type = mappings[name]
-
-
- if event == 'build:started' && data.build.commit
- # TODO: commit should be a sideload record on build, not mixed with it
- build = data.build
- commit = {
- id: build.commit_id
- author_email: build.author_email
- author_name: build.author_name
- branch: build.branch
- committed_at: build.committed_at
- committer_email: build.committer_email
- committer_name: build.committer_name
- compare_url: build.compare_url
- message: build.message
- sha: build.commit
- }
- delete(data.build.commit)
- @loadIncomplete(Travis.Commit, commit)
-
-
- if event == 'job:log'
- console.log 'store: received job:log event', data if Log.DEBUG
- data = data.job
- job = @find(Travis.Job, data.id)
- job.appendLog(number: parseInt(data.number), content: data._log, final: data.final)
- else if data[type.singularName()]
- @_loadOne(this, type, data)
- else if data[type.pluralName()]
- @_loadMany(this, type, data)
- else
- throw "can't load data for #{name}" unless type
-
- _loadOne: (store, type, json) ->
- root = type.singularName()
- # we get other types of records only in a few situations and
- # it's not always needed to update data, so I'm specyfing which
- # things I want to update here:
- if type == Travis.Build && (json.repository || json.repo)
- @loadIncomplete(Travis.Repo, json.repository || json.repo)
-
- result = @loadIncomplete(type, json[root])
- if result.id
- @find(type, result.id)
-
- addLoadedData: (type, clientId, hash) ->
- id = hash.id
- @_loadedData[type.toString()] ||= {}
- loadedData = (@_loadedData[type][clientId] ||= [])
-
- serializer = @get('adapter.serializer')
-
- Ember.get(type, 'attributes').forEach( (name, meta) ->
- value = @extractAttribute(type, hash, name)
- if value != undefined
- loadedData.pushObject name unless loadedData.contains(name)
- , serializer)
-
- Ember.get(type, 'relationshipsByName').forEach( (name, relationship) ->
- key = @_keyForBelongsTo(type, relationship.key)
- value = @extractBelongsTo(type, hash, key)
- if value != undefined
- loadedData.pushObject name unless loadedData.contains(name)
- , serializer)
-
- isDataLoadedFor: (type, clientId, key) ->
- if recordsData = @_loadedData[type.toString()]
- if data = recordsData[clientId]
- data.contains(key)
-
- loadIncomplete: (type, hash, options) ->
- options ?= {}
-
- id = coerceId hash.id
-
- typeMap = @typeMapFor(type)
- cidToData = @clientIdToData
- clientId = typeMap.idToCid[id]
-
- if clientId && cidToData[clientId] && options.skipIfExists
- return
-
- result = @merge(type, hash, true)
- if result && result.clientId
- @addLoadedData(type, result.clientId, hash)
- #@_updateRelationships(type, hash)
-
- result
-
- materializeRecord: (type, clientId, id) ->
- record = @_super.apply this, arguments
-
- if @clientIdToComplete[clientId] != undefined && !@clientIdToComplete[clientId]
- record.set 'incomplete', true
- else
- record.set 'incomplete', false
-
- record
-
- _loadMany: (store, type, json) ->
- root = type.pluralName()
- @adapter.sideload(store, type, json, root)
- @loadMany(type, json[root])
-
- _updateRelationships: (type, data) ->
- Em.get(type, 'relationshipsByName').forEach (key, meta) =>
- if meta.kind == 'belongsTo'
- id = data["#{key}_id"]
- if clientId = @typeMapFor(meta.type).idToCid[id]
- if parent = this.findByClientId(meta.type, clientId, id)
- dataProxy = parent.get('data')
- if ids = dataProxy['hasMany'][type.pluralName()]
- unless data.id in ids
- state = parent.get('stateManager.currentState.path')
- unless state == "rootState.loaded.materializing"
- parent.send('materializingData')
- ids.pushObject(data.id)
- parent.notifyPropertyChange('data')
diff --git a/assets/scripts/app/templates/auth/signin.hbs b/assets/scripts/app/templates/auth/signin.hbs
index 867fa2b5..1a83cc2e 100644
--- a/assets/scripts/app/templates/auth/signin.hbs
+++ b/assets/scripts/app/templates/auth/signin.hbs
@@ -1,11 +1,16 @@
-{{#if view.signingIn}}
-
- Trying to authenticate with GitHub. -
-{{else}} -- Please sign in with GitHub. -
+{{#if redirected}} {{/if}} + + ++ + {{#if Travis.signingIn}} + Signing in... + {{else}} + Sign in with GitHub + {{/if}} + +
diff --git a/assets/scripts/app/templates/builds/list.hbs b/assets/scripts/app/templates/builds/list.hbs index 317594aa..5d73ca69 100644 --- a/assets/scripts/app/templates/builds/list.hbs +++ b/assets/scripts/app/templates/builds/list.hbs @@ -26,16 +26,16 @@{{view view.ShowMoreButton}} + {{#if isLoading}} + + {{/if}}
{{/if}} {{else}} diff --git a/assets/scripts/app/templates/builds/show.hbs b/assets/scripts/app/templates/builds/show.hbs index ee75d356..969bac0a 100644 --- a/assets/scripts/app/templates/builds/show.hbs +++ b/assets/scripts/app/templates/builds/show.hbs @@ -8,49 +8,45 @@ {{#if build.id}} {{#if build.repo.slug}} - {{#linkTo build repo build}}{{build.number}}{{/linkTo}} + {{#link-to "build" repo build}}{{build.number}}{{/link-to}} {{/if}} {{/if}}One more thing
+Just a few more seconds as we talk to GitHub to find out which repositories belong to you.
+ ++ If you're part of an organization that already has repositories set up on Travis CI, we'll take you to the list once we're done. +
++ If you're not part of any existing organizations yet, we'll take you to a handy getting started guide to get you off the ground quickly. +
+Great news!
++ We've successfully synchronized your details from GitHub. We will redirect you to your profile in a few seconds. +
+ {{/unless}} ++ | {{formatDuration duration}} | -+ | {{formatTime finishedAt}} | {{#each value in configValues}} @@ -45,7 +45,7 @@ {{#unless view.required}}
Source: | " + escapeText( source ) + " |
---|
Expected: | " + expected + " |
---|---|
Result: | " + actual + " |
Diff: | " + QUnit.diff( expected, actual ) + " |
Source: | " + escapeText( source ) + " |
Result: | " + escapeText( actual ) + " |
---|---|
Source: | " + escapeText( source ) + " |
{{person.signature}}
+ ``` + + You can use `yield` inside a template to + include the **contents** of any block attached to + the component. The block will be executed in the + context of the surrounding context or outer controller: + + ```handlebars + {{#app-profile person=currentUser}} +Admin mode
+ {{! Executed in the controllers context. }} + {{/app-profile}} + ``` + + ```handlebars + +{{user.role.description}}
+{{description}}
+ {{/with}} +hi |
{{user.role.description}}
+{{description}}
+ {{/with}} +Howdy Dave
+Howdy Mary
+Howdy Sara
+Sorry, nobody is available for this task.
+ {{/each}} + ``` + ### Specifying a View class for items + If you provide an `itemViewClass` option that references a view class + with its own `template` you can omit the block. + + The following template: + + ```handlebars + {{#view App.MyView }} + {{each view.items itemViewClass="App.AnItemView"}} + {{/view}} + ``` + + And application code + + ```javascript + App = Ember.Application.create({ + MyView: Ember.View.extend({ + items: [ + Ember.Object.create({name: 'Dave'}), + Ember.Object.create({name: 'Mary'}), + Ember.Object.create({name: 'Sara'}) + ] + }) + }); + + App.AnItemView = Ember.View.extend({ + template: Ember.Handlebars.compile("Greetings {{name}}") + }); + ``` + + Will result in the HTML structure below + + ```html +