diff --git a/requirements.txt b/requirements.txt
index 4c3e4507..f36963b0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -16,6 +16,8 @@ django-jinja>=0.23
jinja2==2.7.1
pygments>=1.6
django-sites==0.4
+Markdown==2.4
+fn==0.2.13
# Comment it if you are using python >= 3.4
enum34==0.9.23
diff --git a/taiga/base/static/img/emojis/+1.png b/taiga/base/static/img/emojis/+1.png
new file mode 100644
index 00000000..be57e612
Binary files /dev/null and b/taiga/base/static/img/emojis/+1.png differ
diff --git a/taiga/base/static/img/emojis/-1.png b/taiga/base/static/img/emojis/-1.png
new file mode 100644
index 00000000..32c79443
Binary files /dev/null and b/taiga/base/static/img/emojis/-1.png differ
diff --git a/taiga/base/static/img/emojis/100.png b/taiga/base/static/img/emojis/100.png
new file mode 100644
index 00000000..1116851c
Binary files /dev/null and b/taiga/base/static/img/emojis/100.png differ
diff --git a/taiga/base/static/img/emojis/1234.png b/taiga/base/static/img/emojis/1234.png
new file mode 100644
index 00000000..fd009c43
Binary files /dev/null and b/taiga/base/static/img/emojis/1234.png differ
diff --git a/taiga/base/static/img/emojis/8ball.png b/taiga/base/static/img/emojis/8ball.png
new file mode 100644
index 00000000..b88095f1
Binary files /dev/null and b/taiga/base/static/img/emojis/8ball.png differ
diff --git a/taiga/base/static/img/emojis/a.png b/taiga/base/static/img/emojis/a.png
new file mode 100644
index 00000000..161ea0a8
Binary files /dev/null and b/taiga/base/static/img/emojis/a.png differ
diff --git a/taiga/base/static/img/emojis/ab.png b/taiga/base/static/img/emojis/ab.png
new file mode 100644
index 00000000..7814a89e
Binary files /dev/null and b/taiga/base/static/img/emojis/ab.png differ
diff --git a/taiga/base/static/img/emojis/abc.png b/taiga/base/static/img/emojis/abc.png
new file mode 100644
index 00000000..987448a6
Binary files /dev/null and b/taiga/base/static/img/emojis/abc.png differ
diff --git a/taiga/base/static/img/emojis/abcd.png b/taiga/base/static/img/emojis/abcd.png
new file mode 100644
index 00000000..27034095
Binary files /dev/null and b/taiga/base/static/img/emojis/abcd.png differ
diff --git a/taiga/base/static/img/emojis/accept.png b/taiga/base/static/img/emojis/accept.png
new file mode 100644
index 00000000..f1b14ca7
Binary files /dev/null and b/taiga/base/static/img/emojis/accept.png differ
diff --git a/taiga/base/static/img/emojis/aerial_tramway.png b/taiga/base/static/img/emojis/aerial_tramway.png
new file mode 100644
index 00000000..271a40bd
Binary files /dev/null and b/taiga/base/static/img/emojis/aerial_tramway.png differ
diff --git a/taiga/base/static/img/emojis/airplane.png b/taiga/base/static/img/emojis/airplane.png
new file mode 100644
index 00000000..8788a19b
Binary files /dev/null and b/taiga/base/static/img/emojis/airplane.png differ
diff --git a/taiga/base/static/img/emojis/alarm_clock.png b/taiga/base/static/img/emojis/alarm_clock.png
new file mode 100644
index 00000000..f24b8b98
Binary files /dev/null and b/taiga/base/static/img/emojis/alarm_clock.png differ
diff --git a/taiga/base/static/img/emojis/alien.png b/taiga/base/static/img/emojis/alien.png
new file mode 100644
index 00000000..2ec10c7f
Binary files /dev/null and b/taiga/base/static/img/emojis/alien.png differ
diff --git a/taiga/base/static/img/emojis/ambulance.png b/taiga/base/static/img/emojis/ambulance.png
new file mode 100644
index 00000000..ba70b9cb
Binary files /dev/null and b/taiga/base/static/img/emojis/ambulance.png differ
diff --git a/taiga/base/static/img/emojis/anchor.png b/taiga/base/static/img/emojis/anchor.png
new file mode 100644
index 00000000..c29afa5b
Binary files /dev/null and b/taiga/base/static/img/emojis/anchor.png differ
diff --git a/taiga/base/static/img/emojis/angel.png b/taiga/base/static/img/emojis/angel.png
new file mode 100644
index 00000000..c8cb8d05
Binary files /dev/null and b/taiga/base/static/img/emojis/angel.png differ
diff --git a/taiga/base/static/img/emojis/anger.png b/taiga/base/static/img/emojis/anger.png
new file mode 100644
index 00000000..3c120b3f
Binary files /dev/null and b/taiga/base/static/img/emojis/anger.png differ
diff --git a/taiga/base/static/img/emojis/angry.png b/taiga/base/static/img/emojis/angry.png
new file mode 100644
index 00000000..f7b09836
Binary files /dev/null and b/taiga/base/static/img/emojis/angry.png differ
diff --git a/taiga/base/static/img/emojis/anguished.png b/taiga/base/static/img/emojis/anguished.png
new file mode 100644
index 00000000..f9a25060
Binary files /dev/null and b/taiga/base/static/img/emojis/anguished.png differ
diff --git a/taiga/base/static/img/emojis/ant.png b/taiga/base/static/img/emojis/ant.png
new file mode 100644
index 00000000..89cdca8c
Binary files /dev/null and b/taiga/base/static/img/emojis/ant.png differ
diff --git a/taiga/base/static/img/emojis/apple.png b/taiga/base/static/img/emojis/apple.png
new file mode 100644
index 00000000..987e85a0
Binary files /dev/null and b/taiga/base/static/img/emojis/apple.png differ
diff --git a/taiga/base/static/img/emojis/aquarius.png b/taiga/base/static/img/emojis/aquarius.png
new file mode 100644
index 00000000..8891f7b8
Binary files /dev/null and b/taiga/base/static/img/emojis/aquarius.png differ
diff --git a/taiga/base/static/img/emojis/aries.png b/taiga/base/static/img/emojis/aries.png
new file mode 100644
index 00000000..83c38f10
Binary files /dev/null and b/taiga/base/static/img/emojis/aries.png differ
diff --git a/taiga/base/static/img/emojis/arrow_backward.png b/taiga/base/static/img/emojis/arrow_backward.png
new file mode 100644
index 00000000..daf003a2
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_backward.png differ
diff --git a/taiga/base/static/img/emojis/arrow_double_down.png b/taiga/base/static/img/emojis/arrow_double_down.png
new file mode 100644
index 00000000..a5a701a8
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_double_down.png differ
diff --git a/taiga/base/static/img/emojis/arrow_double_up.png b/taiga/base/static/img/emojis/arrow_double_up.png
new file mode 100644
index 00000000..560d7ff6
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_double_up.png differ
diff --git a/taiga/base/static/img/emojis/arrow_down.png b/taiga/base/static/img/emojis/arrow_down.png
new file mode 100644
index 00000000..e6ec2198
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_down.png differ
diff --git a/taiga/base/static/img/emojis/arrow_down_small.png b/taiga/base/static/img/emojis/arrow_down_small.png
new file mode 100644
index 00000000..c01ef5f4
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_down_small.png differ
diff --git a/taiga/base/static/img/emojis/arrow_forward.png b/taiga/base/static/img/emojis/arrow_forward.png
new file mode 100644
index 00000000..a9e553ae
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_forward.png differ
diff --git a/taiga/base/static/img/emojis/arrow_heading_down.png b/taiga/base/static/img/emojis/arrow_heading_down.png
new file mode 100644
index 00000000..15b29572
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_heading_down.png differ
diff --git a/taiga/base/static/img/emojis/arrow_heading_up.png b/taiga/base/static/img/emojis/arrow_heading_up.png
new file mode 100644
index 00000000..efecd616
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_heading_up.png differ
diff --git a/taiga/base/static/img/emojis/arrow_left.png b/taiga/base/static/img/emojis/arrow_left.png
new file mode 100644
index 00000000..74d6eb4c
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_left.png differ
diff --git a/taiga/base/static/img/emojis/arrow_lower_left.png b/taiga/base/static/img/emojis/arrow_lower_left.png
new file mode 100644
index 00000000..83444b25
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_lower_left.png differ
diff --git a/taiga/base/static/img/emojis/arrow_lower_right.png b/taiga/base/static/img/emojis/arrow_lower_right.png
new file mode 100644
index 00000000..076a4667
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_lower_right.png differ
diff --git a/taiga/base/static/img/emojis/arrow_right.png b/taiga/base/static/img/emojis/arrow_right.png
new file mode 100644
index 00000000..d7719593
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_right.png differ
diff --git a/taiga/base/static/img/emojis/arrow_right_hook.png b/taiga/base/static/img/emojis/arrow_right_hook.png
new file mode 100644
index 00000000..13acfac8
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_right_hook.png differ
diff --git a/taiga/base/static/img/emojis/arrow_up.png b/taiga/base/static/img/emojis/arrow_up.png
new file mode 100644
index 00000000..6072d17a
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_up.png differ
diff --git a/taiga/base/static/img/emojis/arrow_up_down.png b/taiga/base/static/img/emojis/arrow_up_down.png
new file mode 100644
index 00000000..af79dc5b
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_up_down.png differ
diff --git a/taiga/base/static/img/emojis/arrow_up_small.png b/taiga/base/static/img/emojis/arrow_up_small.png
new file mode 100644
index 00000000..00185de0
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_up_small.png differ
diff --git a/taiga/base/static/img/emojis/arrow_upper_left.png b/taiga/base/static/img/emojis/arrow_upper_left.png
new file mode 100644
index 00000000..ff161317
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_upper_left.png differ
diff --git a/taiga/base/static/img/emojis/arrow_upper_right.png b/taiga/base/static/img/emojis/arrow_upper_right.png
new file mode 100644
index 00000000..e47ecc90
Binary files /dev/null and b/taiga/base/static/img/emojis/arrow_upper_right.png differ
diff --git a/taiga/base/static/img/emojis/arrows_clockwise.png b/taiga/base/static/img/emojis/arrows_clockwise.png
new file mode 100644
index 00000000..9ec27419
Binary files /dev/null and b/taiga/base/static/img/emojis/arrows_clockwise.png differ
diff --git a/taiga/base/static/img/emojis/arrows_counterclockwise.png b/taiga/base/static/img/emojis/arrows_counterclockwise.png
new file mode 100644
index 00000000..a8987d18
Binary files /dev/null and b/taiga/base/static/img/emojis/arrows_counterclockwise.png differ
diff --git a/taiga/base/static/img/emojis/art.png b/taiga/base/static/img/emojis/art.png
new file mode 100644
index 00000000..80a87b3f
Binary files /dev/null and b/taiga/base/static/img/emojis/art.png differ
diff --git a/taiga/base/static/img/emojis/articulated_lorry.png b/taiga/base/static/img/emojis/articulated_lorry.png
new file mode 100644
index 00000000..aa5beaa0
Binary files /dev/null and b/taiga/base/static/img/emojis/articulated_lorry.png differ
diff --git a/taiga/base/static/img/emojis/astonished.png b/taiga/base/static/img/emojis/astonished.png
new file mode 100644
index 00000000..e85e20d8
Binary files /dev/null and b/taiga/base/static/img/emojis/astonished.png differ
diff --git a/taiga/base/static/img/emojis/atm.png b/taiga/base/static/img/emojis/atm.png
new file mode 100644
index 00000000..5f09fb86
Binary files /dev/null and b/taiga/base/static/img/emojis/atm.png differ
diff --git a/taiga/base/static/img/emojis/b.png b/taiga/base/static/img/emojis/b.png
new file mode 100644
index 00000000..1bfff889
Binary files /dev/null and b/taiga/base/static/img/emojis/b.png differ
diff --git a/taiga/base/static/img/emojis/baby.png b/taiga/base/static/img/emojis/baby.png
new file mode 100644
index 00000000..40a11164
Binary files /dev/null and b/taiga/base/static/img/emojis/baby.png differ
diff --git a/taiga/base/static/img/emojis/baby_bottle.png b/taiga/base/static/img/emojis/baby_bottle.png
new file mode 100644
index 00000000..f6516f05
Binary files /dev/null and b/taiga/base/static/img/emojis/baby_bottle.png differ
diff --git a/taiga/base/static/img/emojis/baby_chick.png b/taiga/base/static/img/emojis/baby_chick.png
new file mode 100644
index 00000000..662bed8c
Binary files /dev/null and b/taiga/base/static/img/emojis/baby_chick.png differ
diff --git a/taiga/base/static/img/emojis/baby_symbol.png b/taiga/base/static/img/emojis/baby_symbol.png
new file mode 100644
index 00000000..f7e3bc6d
Binary files /dev/null and b/taiga/base/static/img/emojis/baby_symbol.png differ
diff --git a/taiga/base/static/img/emojis/baggage_claim.png b/taiga/base/static/img/emojis/baggage_claim.png
new file mode 100644
index 00000000..c296e851
Binary files /dev/null and b/taiga/base/static/img/emojis/baggage_claim.png differ
diff --git a/taiga/base/static/img/emojis/balloon.png b/taiga/base/static/img/emojis/balloon.png
new file mode 100644
index 00000000..4176a57f
Binary files /dev/null and b/taiga/base/static/img/emojis/balloon.png differ
diff --git a/taiga/base/static/img/emojis/ballot_box_with_check.png b/taiga/base/static/img/emojis/ballot_box_with_check.png
new file mode 100644
index 00000000..936b2dae
Binary files /dev/null and b/taiga/base/static/img/emojis/ballot_box_with_check.png differ
diff --git a/taiga/base/static/img/emojis/bamboo.png b/taiga/base/static/img/emojis/bamboo.png
new file mode 100644
index 00000000..a1bded7e
Binary files /dev/null and b/taiga/base/static/img/emojis/bamboo.png differ
diff --git a/taiga/base/static/img/emojis/banana.png b/taiga/base/static/img/emojis/banana.png
new file mode 100644
index 00000000..36adf23d
Binary files /dev/null and b/taiga/base/static/img/emojis/banana.png differ
diff --git a/taiga/base/static/img/emojis/bangbang.png b/taiga/base/static/img/emojis/bangbang.png
new file mode 100644
index 00000000..8fcd1c58
Binary files /dev/null and b/taiga/base/static/img/emojis/bangbang.png differ
diff --git a/taiga/base/static/img/emojis/bank.png b/taiga/base/static/img/emojis/bank.png
new file mode 100644
index 00000000..43078c08
Binary files /dev/null and b/taiga/base/static/img/emojis/bank.png differ
diff --git a/taiga/base/static/img/emojis/bar_chart.png b/taiga/base/static/img/emojis/bar_chart.png
new file mode 100644
index 00000000..92c57b2f
Binary files /dev/null and b/taiga/base/static/img/emojis/bar_chart.png differ
diff --git a/taiga/base/static/img/emojis/barber.png b/taiga/base/static/img/emojis/barber.png
new file mode 100644
index 00000000..4706e114
Binary files /dev/null and b/taiga/base/static/img/emojis/barber.png differ
diff --git a/taiga/base/static/img/emojis/baseball.png b/taiga/base/static/img/emojis/baseball.png
new file mode 100644
index 00000000..6ffa6e40
Binary files /dev/null and b/taiga/base/static/img/emojis/baseball.png differ
diff --git a/taiga/base/static/img/emojis/basketball.png b/taiga/base/static/img/emojis/basketball.png
new file mode 100644
index 00000000..9552ff18
Binary files /dev/null and b/taiga/base/static/img/emojis/basketball.png differ
diff --git a/taiga/base/static/img/emojis/bath.png b/taiga/base/static/img/emojis/bath.png
new file mode 100644
index 00000000..ba40c0e8
Binary files /dev/null and b/taiga/base/static/img/emojis/bath.png differ
diff --git a/taiga/base/static/img/emojis/bathtub.png b/taiga/base/static/img/emojis/bathtub.png
new file mode 100644
index 00000000..b65340a1
Binary files /dev/null and b/taiga/base/static/img/emojis/bathtub.png differ
diff --git a/taiga/base/static/img/emojis/battery.png b/taiga/base/static/img/emojis/battery.png
new file mode 100644
index 00000000..b9918059
Binary files /dev/null and b/taiga/base/static/img/emojis/battery.png differ
diff --git a/taiga/base/static/img/emojis/bear.png b/taiga/base/static/img/emojis/bear.png
new file mode 100644
index 00000000..fc39613f
Binary files /dev/null and b/taiga/base/static/img/emojis/bear.png differ
diff --git a/taiga/base/static/img/emojis/bee.png b/taiga/base/static/img/emojis/bee.png
new file mode 100644
index 00000000..1c5fc5bf
Binary files /dev/null and b/taiga/base/static/img/emojis/bee.png differ
diff --git a/taiga/base/static/img/emojis/beer.png b/taiga/base/static/img/emojis/beer.png
new file mode 100644
index 00000000..7e977b34
Binary files /dev/null and b/taiga/base/static/img/emojis/beer.png differ
diff --git a/taiga/base/static/img/emojis/beers.png b/taiga/base/static/img/emojis/beers.png
new file mode 100644
index 00000000..532b785b
Binary files /dev/null and b/taiga/base/static/img/emojis/beers.png differ
diff --git a/taiga/base/static/img/emojis/beetle.png b/taiga/base/static/img/emojis/beetle.png
new file mode 100644
index 00000000..50959bb8
Binary files /dev/null and b/taiga/base/static/img/emojis/beetle.png differ
diff --git a/taiga/base/static/img/emojis/beginner.png b/taiga/base/static/img/emojis/beginner.png
new file mode 100644
index 00000000..e4e0f0ad
Binary files /dev/null and b/taiga/base/static/img/emojis/beginner.png differ
diff --git a/taiga/base/static/img/emojis/bell.png b/taiga/base/static/img/emojis/bell.png
new file mode 100644
index 00000000..46a83986
Binary files /dev/null and b/taiga/base/static/img/emojis/bell.png differ
diff --git a/taiga/base/static/img/emojis/bento.png b/taiga/base/static/img/emojis/bento.png
new file mode 100644
index 00000000..459c924f
Binary files /dev/null and b/taiga/base/static/img/emojis/bento.png differ
diff --git a/taiga/base/static/img/emojis/bicyclist.png b/taiga/base/static/img/emojis/bicyclist.png
new file mode 100644
index 00000000..39698d44
Binary files /dev/null and b/taiga/base/static/img/emojis/bicyclist.png differ
diff --git a/taiga/base/static/img/emojis/bike.png b/taiga/base/static/img/emojis/bike.png
new file mode 100644
index 00000000..bb4ae9f1
Binary files /dev/null and b/taiga/base/static/img/emojis/bike.png differ
diff --git a/taiga/base/static/img/emojis/bikini.png b/taiga/base/static/img/emojis/bikini.png
new file mode 100644
index 00000000..6f80c3cf
Binary files /dev/null and b/taiga/base/static/img/emojis/bikini.png differ
diff --git a/taiga/base/static/img/emojis/bird.png b/taiga/base/static/img/emojis/bird.png
new file mode 100644
index 00000000..8d9f01d2
Binary files /dev/null and b/taiga/base/static/img/emojis/bird.png differ
diff --git a/taiga/base/static/img/emojis/birthday.png b/taiga/base/static/img/emojis/birthday.png
new file mode 100644
index 00000000..62e9e2df
Binary files /dev/null and b/taiga/base/static/img/emojis/birthday.png differ
diff --git a/taiga/base/static/img/emojis/black_circle.png b/taiga/base/static/img/emojis/black_circle.png
new file mode 100644
index 00000000..d2ac4a6a
Binary files /dev/null and b/taiga/base/static/img/emojis/black_circle.png differ
diff --git a/taiga/base/static/img/emojis/black_joker.png b/taiga/base/static/img/emojis/black_joker.png
new file mode 100644
index 00000000..7bc34c4c
Binary files /dev/null and b/taiga/base/static/img/emojis/black_joker.png differ
diff --git a/taiga/base/static/img/emojis/black_nib.png b/taiga/base/static/img/emojis/black_nib.png
new file mode 100644
index 00000000..45482510
Binary files /dev/null and b/taiga/base/static/img/emojis/black_nib.png differ
diff --git a/taiga/base/static/img/emojis/black_square.png b/taiga/base/static/img/emojis/black_square.png
new file mode 100644
index 00000000..730cb118
Binary files /dev/null and b/taiga/base/static/img/emojis/black_square.png differ
diff --git a/taiga/base/static/img/emojis/black_square_button.png b/taiga/base/static/img/emojis/black_square_button.png
new file mode 100644
index 00000000..c56f87e1
Binary files /dev/null and b/taiga/base/static/img/emojis/black_square_button.png differ
diff --git a/taiga/base/static/img/emojis/blossom.png b/taiga/base/static/img/emojis/blossom.png
new file mode 100644
index 00000000..ac1d9753
Binary files /dev/null and b/taiga/base/static/img/emojis/blossom.png differ
diff --git a/taiga/base/static/img/emojis/blowfish.png b/taiga/base/static/img/emojis/blowfish.png
new file mode 100644
index 00000000..8a7f7f11
Binary files /dev/null and b/taiga/base/static/img/emojis/blowfish.png differ
diff --git a/taiga/base/static/img/emojis/blue_book.png b/taiga/base/static/img/emojis/blue_book.png
new file mode 100644
index 00000000..6c2452a1
Binary files /dev/null and b/taiga/base/static/img/emojis/blue_book.png differ
diff --git a/taiga/base/static/img/emojis/blue_car.png b/taiga/base/static/img/emojis/blue_car.png
new file mode 100644
index 00000000..71229ce1
Binary files /dev/null and b/taiga/base/static/img/emojis/blue_car.png differ
diff --git a/taiga/base/static/img/emojis/blue_heart.png b/taiga/base/static/img/emojis/blue_heart.png
new file mode 100644
index 00000000..1a9bef4a
Binary files /dev/null and b/taiga/base/static/img/emojis/blue_heart.png differ
diff --git a/taiga/base/static/img/emojis/blush.png b/taiga/base/static/img/emojis/blush.png
new file mode 100644
index 00000000..9674f99b
Binary files /dev/null and b/taiga/base/static/img/emojis/blush.png differ
diff --git a/taiga/base/static/img/emojis/boar.png b/taiga/base/static/img/emojis/boar.png
new file mode 100644
index 00000000..b9a0c479
Binary files /dev/null and b/taiga/base/static/img/emojis/boar.png differ
diff --git a/taiga/base/static/img/emojis/boat.png b/taiga/base/static/img/emojis/boat.png
new file mode 100644
index 00000000..ab65ccc4
Binary files /dev/null and b/taiga/base/static/img/emojis/boat.png differ
diff --git a/taiga/base/static/img/emojis/bomb.png b/taiga/base/static/img/emojis/bomb.png
new file mode 100644
index 00000000..1302680d
Binary files /dev/null and b/taiga/base/static/img/emojis/bomb.png differ
diff --git a/taiga/base/static/img/emojis/book.png b/taiga/base/static/img/emojis/book.png
new file mode 100644
index 00000000..76b02c65
Binary files /dev/null and b/taiga/base/static/img/emojis/book.png differ
diff --git a/taiga/base/static/img/emojis/bookmark.png b/taiga/base/static/img/emojis/bookmark.png
new file mode 100644
index 00000000..a313ff19
Binary files /dev/null and b/taiga/base/static/img/emojis/bookmark.png differ
diff --git a/taiga/base/static/img/emojis/bookmark_tabs.png b/taiga/base/static/img/emojis/bookmark_tabs.png
new file mode 100644
index 00000000..c29b4bd9
Binary files /dev/null and b/taiga/base/static/img/emojis/bookmark_tabs.png differ
diff --git a/taiga/base/static/img/emojis/books.png b/taiga/base/static/img/emojis/books.png
new file mode 100644
index 00000000..c9964484
Binary files /dev/null and b/taiga/base/static/img/emojis/books.png differ
diff --git a/taiga/base/static/img/emojis/boom.png b/taiga/base/static/img/emojis/boom.png
new file mode 100644
index 00000000..c7338258
Binary files /dev/null and b/taiga/base/static/img/emojis/boom.png differ
diff --git a/taiga/base/static/img/emojis/boot.png b/taiga/base/static/img/emojis/boot.png
new file mode 100644
index 00000000..9bad9f14
Binary files /dev/null and b/taiga/base/static/img/emojis/boot.png differ
diff --git a/taiga/base/static/img/emojis/bouquet.png b/taiga/base/static/img/emojis/bouquet.png
new file mode 100644
index 00000000..9339bbf3
Binary files /dev/null and b/taiga/base/static/img/emojis/bouquet.png differ
diff --git a/taiga/base/static/img/emojis/bow.png b/taiga/base/static/img/emojis/bow.png
new file mode 100644
index 00000000..3fe31af8
Binary files /dev/null and b/taiga/base/static/img/emojis/bow.png differ
diff --git a/taiga/base/static/img/emojis/bowling.png b/taiga/base/static/img/emojis/bowling.png
new file mode 100644
index 00000000..93a867f3
Binary files /dev/null and b/taiga/base/static/img/emojis/bowling.png differ
diff --git a/taiga/base/static/img/emojis/bowtie.png b/taiga/base/static/img/emojis/bowtie.png
new file mode 100644
index 00000000..cbe139f2
Binary files /dev/null and b/taiga/base/static/img/emojis/bowtie.png differ
diff --git a/taiga/base/static/img/emojis/boy.png b/taiga/base/static/img/emojis/boy.png
new file mode 100644
index 00000000..f9c041d6
Binary files /dev/null and b/taiga/base/static/img/emojis/boy.png differ
diff --git a/taiga/base/static/img/emojis/bread.png b/taiga/base/static/img/emojis/bread.png
new file mode 100644
index 00000000..29c5dbeb
Binary files /dev/null and b/taiga/base/static/img/emojis/bread.png differ
diff --git a/taiga/base/static/img/emojis/bride_with_veil.png b/taiga/base/static/img/emojis/bride_with_veil.png
new file mode 100644
index 00000000..f6739b18
Binary files /dev/null and b/taiga/base/static/img/emojis/bride_with_veil.png differ
diff --git a/taiga/base/static/img/emojis/bridge_at_night.png b/taiga/base/static/img/emojis/bridge_at_night.png
new file mode 100644
index 00000000..ee47de57
Binary files /dev/null and b/taiga/base/static/img/emojis/bridge_at_night.png differ
diff --git a/taiga/base/static/img/emojis/briefcase.png b/taiga/base/static/img/emojis/briefcase.png
new file mode 100644
index 00000000..32158b9f
Binary files /dev/null and b/taiga/base/static/img/emojis/briefcase.png differ
diff --git a/taiga/base/static/img/emojis/broken_heart.png b/taiga/base/static/img/emojis/broken_heart.png
new file mode 100644
index 00000000..187c5ecf
Binary files /dev/null and b/taiga/base/static/img/emojis/broken_heart.png differ
diff --git a/taiga/base/static/img/emojis/bug.png b/taiga/base/static/img/emojis/bug.png
new file mode 100644
index 00000000..47f6b85e
Binary files /dev/null and b/taiga/base/static/img/emojis/bug.png differ
diff --git a/taiga/base/static/img/emojis/bulb.png b/taiga/base/static/img/emojis/bulb.png
new file mode 100644
index 00000000..c1238b2d
Binary files /dev/null and b/taiga/base/static/img/emojis/bulb.png differ
diff --git a/taiga/base/static/img/emojis/bullettrain_front.png b/taiga/base/static/img/emojis/bullettrain_front.png
new file mode 100644
index 00000000..29502e51
Binary files /dev/null and b/taiga/base/static/img/emojis/bullettrain_front.png differ
diff --git a/taiga/base/static/img/emojis/bullettrain_side.png b/taiga/base/static/img/emojis/bullettrain_side.png
new file mode 100644
index 00000000..ed8d31fa
Binary files /dev/null and b/taiga/base/static/img/emojis/bullettrain_side.png differ
diff --git a/taiga/base/static/img/emojis/bus.png b/taiga/base/static/img/emojis/bus.png
new file mode 100644
index 00000000..208a204f
Binary files /dev/null and b/taiga/base/static/img/emojis/bus.png differ
diff --git a/taiga/base/static/img/emojis/busstop.png b/taiga/base/static/img/emojis/busstop.png
new file mode 100644
index 00000000..7c0c168c
Binary files /dev/null and b/taiga/base/static/img/emojis/busstop.png differ
diff --git a/taiga/base/static/img/emojis/bust_in_silhouette.png b/taiga/base/static/img/emojis/bust_in_silhouette.png
new file mode 100644
index 00000000..f02920b2
Binary files /dev/null and b/taiga/base/static/img/emojis/bust_in_silhouette.png differ
diff --git a/taiga/base/static/img/emojis/busts_in_silhouette.png b/taiga/base/static/img/emojis/busts_in_silhouette.png
new file mode 100644
index 00000000..f11410b6
Binary files /dev/null and b/taiga/base/static/img/emojis/busts_in_silhouette.png differ
diff --git a/taiga/base/static/img/emojis/cactus.png b/taiga/base/static/img/emojis/cactus.png
new file mode 100644
index 00000000..c0ebf50d
Binary files /dev/null and b/taiga/base/static/img/emojis/cactus.png differ
diff --git a/taiga/base/static/img/emojis/cake.png b/taiga/base/static/img/emojis/cake.png
new file mode 100644
index 00000000..288b7ffb
Binary files /dev/null and b/taiga/base/static/img/emojis/cake.png differ
diff --git a/taiga/base/static/img/emojis/calendar.png b/taiga/base/static/img/emojis/calendar.png
new file mode 100644
index 00000000..e086c41b
Binary files /dev/null and b/taiga/base/static/img/emojis/calendar.png differ
diff --git a/taiga/base/static/img/emojis/calling.png b/taiga/base/static/img/emojis/calling.png
new file mode 100644
index 00000000..d2ee43c0
Binary files /dev/null and b/taiga/base/static/img/emojis/calling.png differ
diff --git a/taiga/base/static/img/emojis/camel.png b/taiga/base/static/img/emojis/camel.png
new file mode 100644
index 00000000..e674783f
Binary files /dev/null and b/taiga/base/static/img/emojis/camel.png differ
diff --git a/taiga/base/static/img/emojis/camera.png b/taiga/base/static/img/emojis/camera.png
new file mode 100644
index 00000000..211d6e6d
Binary files /dev/null and b/taiga/base/static/img/emojis/camera.png differ
diff --git a/taiga/base/static/img/emojis/cancer.png b/taiga/base/static/img/emojis/cancer.png
new file mode 100644
index 00000000..820a8bc9
Binary files /dev/null and b/taiga/base/static/img/emojis/cancer.png differ
diff --git a/taiga/base/static/img/emojis/candy.png b/taiga/base/static/img/emojis/candy.png
new file mode 100644
index 00000000..a0d132a0
Binary files /dev/null and b/taiga/base/static/img/emojis/candy.png differ
diff --git a/taiga/base/static/img/emojis/capital_abcd.png b/taiga/base/static/img/emojis/capital_abcd.png
new file mode 100644
index 00000000..5b5a0485
Binary files /dev/null and b/taiga/base/static/img/emojis/capital_abcd.png differ
diff --git a/taiga/base/static/img/emojis/capricorn.png b/taiga/base/static/img/emojis/capricorn.png
new file mode 100644
index 00000000..e6f66157
Binary files /dev/null and b/taiga/base/static/img/emojis/capricorn.png differ
diff --git a/taiga/base/static/img/emojis/car.png b/taiga/base/static/img/emojis/car.png
new file mode 100644
index 00000000..31393f7f
Binary files /dev/null and b/taiga/base/static/img/emojis/car.png differ
diff --git a/taiga/base/static/img/emojis/card_index.png b/taiga/base/static/img/emojis/card_index.png
new file mode 100644
index 00000000..697546ec
Binary files /dev/null and b/taiga/base/static/img/emojis/card_index.png differ
diff --git a/taiga/base/static/img/emojis/carousel_horse.png b/taiga/base/static/img/emojis/carousel_horse.png
new file mode 100644
index 00000000..af960545
Binary files /dev/null and b/taiga/base/static/img/emojis/carousel_horse.png differ
diff --git a/taiga/base/static/img/emojis/cat.png b/taiga/base/static/img/emojis/cat.png
new file mode 100644
index 00000000..c8307fd0
Binary files /dev/null and b/taiga/base/static/img/emojis/cat.png differ
diff --git a/taiga/base/static/img/emojis/cat2.png b/taiga/base/static/img/emojis/cat2.png
new file mode 100644
index 00000000..090137ed
Binary files /dev/null and b/taiga/base/static/img/emojis/cat2.png differ
diff --git a/taiga/base/static/img/emojis/cd.png b/taiga/base/static/img/emojis/cd.png
new file mode 100644
index 00000000..c2d5f147
Binary files /dev/null and b/taiga/base/static/img/emojis/cd.png differ
diff --git a/taiga/base/static/img/emojis/chart.png b/taiga/base/static/img/emojis/chart.png
new file mode 100644
index 00000000..aa527cad
Binary files /dev/null and b/taiga/base/static/img/emojis/chart.png differ
diff --git a/taiga/base/static/img/emojis/chart_with_downwards_trend.png b/taiga/base/static/img/emojis/chart_with_downwards_trend.png
new file mode 100644
index 00000000..50fb4b1e
Binary files /dev/null and b/taiga/base/static/img/emojis/chart_with_downwards_trend.png differ
diff --git a/taiga/base/static/img/emojis/chart_with_upwards_trend.png b/taiga/base/static/img/emojis/chart_with_upwards_trend.png
new file mode 100644
index 00000000..364e792f
Binary files /dev/null and b/taiga/base/static/img/emojis/chart_with_upwards_trend.png differ
diff --git a/taiga/base/static/img/emojis/checkered_flag.png b/taiga/base/static/img/emojis/checkered_flag.png
new file mode 100644
index 00000000..4a4f652f
Binary files /dev/null and b/taiga/base/static/img/emojis/checkered_flag.png differ
diff --git a/taiga/base/static/img/emojis/cherries.png b/taiga/base/static/img/emojis/cherries.png
new file mode 100644
index 00000000..49aa7d62
Binary files /dev/null and b/taiga/base/static/img/emojis/cherries.png differ
diff --git a/taiga/base/static/img/emojis/cherry_blossom.png b/taiga/base/static/img/emojis/cherry_blossom.png
new file mode 100644
index 00000000..e996cd45
Binary files /dev/null and b/taiga/base/static/img/emojis/cherry_blossom.png differ
diff --git a/taiga/base/static/img/emojis/chestnut.png b/taiga/base/static/img/emojis/chestnut.png
new file mode 100644
index 00000000..451e2ccb
Binary files /dev/null and b/taiga/base/static/img/emojis/chestnut.png differ
diff --git a/taiga/base/static/img/emojis/chicken.png b/taiga/base/static/img/emojis/chicken.png
new file mode 100644
index 00000000..37bd0f74
Binary files /dev/null and b/taiga/base/static/img/emojis/chicken.png differ
diff --git a/taiga/base/static/img/emojis/children_crossing.png b/taiga/base/static/img/emojis/children_crossing.png
new file mode 100644
index 00000000..62422ae9
Binary files /dev/null and b/taiga/base/static/img/emojis/children_crossing.png differ
diff --git a/taiga/base/static/img/emojis/chocolate_bar.png b/taiga/base/static/img/emojis/chocolate_bar.png
new file mode 100644
index 00000000..f7a59bf7
Binary files /dev/null and b/taiga/base/static/img/emojis/chocolate_bar.png differ
diff --git a/taiga/base/static/img/emojis/christmas_tree.png b/taiga/base/static/img/emojis/christmas_tree.png
new file mode 100644
index 00000000..7ff7b2a3
Binary files /dev/null and b/taiga/base/static/img/emojis/christmas_tree.png differ
diff --git a/taiga/base/static/img/emojis/church.png b/taiga/base/static/img/emojis/church.png
new file mode 100644
index 00000000..cb16eba6
Binary files /dev/null and b/taiga/base/static/img/emojis/church.png differ
diff --git a/taiga/base/static/img/emojis/cinema.png b/taiga/base/static/img/emojis/cinema.png
new file mode 100644
index 00000000..e80c1f00
Binary files /dev/null and b/taiga/base/static/img/emojis/cinema.png differ
diff --git a/taiga/base/static/img/emojis/circus_tent.png b/taiga/base/static/img/emojis/circus_tent.png
new file mode 100644
index 00000000..12a57bfb
Binary files /dev/null and b/taiga/base/static/img/emojis/circus_tent.png differ
diff --git a/taiga/base/static/img/emojis/city_sunrise.png b/taiga/base/static/img/emojis/city_sunrise.png
new file mode 100644
index 00000000..42b64d08
Binary files /dev/null and b/taiga/base/static/img/emojis/city_sunrise.png differ
diff --git a/taiga/base/static/img/emojis/city_sunset.png b/taiga/base/static/img/emojis/city_sunset.png
new file mode 100644
index 00000000..f262d7cf
Binary files /dev/null and b/taiga/base/static/img/emojis/city_sunset.png differ
diff --git a/taiga/base/static/img/emojis/cl.png b/taiga/base/static/img/emojis/cl.png
new file mode 100644
index 00000000..32c9488b
Binary files /dev/null and b/taiga/base/static/img/emojis/cl.png differ
diff --git a/taiga/base/static/img/emojis/clap.png b/taiga/base/static/img/emojis/clap.png
new file mode 100644
index 00000000..1156223c
Binary files /dev/null and b/taiga/base/static/img/emojis/clap.png differ
diff --git a/taiga/base/static/img/emojis/clapper.png b/taiga/base/static/img/emojis/clapper.png
new file mode 100644
index 00000000..62ce35e8
Binary files /dev/null and b/taiga/base/static/img/emojis/clapper.png differ
diff --git a/taiga/base/static/img/emojis/clipboard.png b/taiga/base/static/img/emojis/clipboard.png
new file mode 100644
index 00000000..2cbe981b
Binary files /dev/null and b/taiga/base/static/img/emojis/clipboard.png differ
diff --git a/taiga/base/static/img/emojis/clock1.png b/taiga/base/static/img/emojis/clock1.png
new file mode 100644
index 00000000..be673dc1
Binary files /dev/null and b/taiga/base/static/img/emojis/clock1.png differ
diff --git a/taiga/base/static/img/emojis/clock10.png b/taiga/base/static/img/emojis/clock10.png
new file mode 100644
index 00000000..5d368878
Binary files /dev/null and b/taiga/base/static/img/emojis/clock10.png differ
diff --git a/taiga/base/static/img/emojis/clock1030.png b/taiga/base/static/img/emojis/clock1030.png
new file mode 100644
index 00000000..a3ed02a1
Binary files /dev/null and b/taiga/base/static/img/emojis/clock1030.png differ
diff --git a/taiga/base/static/img/emojis/clock11.png b/taiga/base/static/img/emojis/clock11.png
new file mode 100644
index 00000000..4d1ec5d5
Binary files /dev/null and b/taiga/base/static/img/emojis/clock11.png differ
diff --git a/taiga/base/static/img/emojis/clock1130.png b/taiga/base/static/img/emojis/clock1130.png
new file mode 100644
index 00000000..15262375
Binary files /dev/null and b/taiga/base/static/img/emojis/clock1130.png differ
diff --git a/taiga/base/static/img/emojis/clock12.png b/taiga/base/static/img/emojis/clock12.png
new file mode 100644
index 00000000..9feeff30
Binary files /dev/null and b/taiga/base/static/img/emojis/clock12.png differ
diff --git a/taiga/base/static/img/emojis/clock1230.png b/taiga/base/static/img/emojis/clock1230.png
new file mode 100644
index 00000000..41b45371
Binary files /dev/null and b/taiga/base/static/img/emojis/clock1230.png differ
diff --git a/taiga/base/static/img/emojis/clock130.png b/taiga/base/static/img/emojis/clock130.png
new file mode 100644
index 00000000..aec7a645
Binary files /dev/null and b/taiga/base/static/img/emojis/clock130.png differ
diff --git a/taiga/base/static/img/emojis/clock2.png b/taiga/base/static/img/emojis/clock2.png
new file mode 100644
index 00000000..7d96e855
Binary files /dev/null and b/taiga/base/static/img/emojis/clock2.png differ
diff --git a/taiga/base/static/img/emojis/clock230.png b/taiga/base/static/img/emojis/clock230.png
new file mode 100644
index 00000000..9c9208e8
Binary files /dev/null and b/taiga/base/static/img/emojis/clock230.png differ
diff --git a/taiga/base/static/img/emojis/clock3.png b/taiga/base/static/img/emojis/clock3.png
new file mode 100644
index 00000000..d3342758
Binary files /dev/null and b/taiga/base/static/img/emojis/clock3.png differ
diff --git a/taiga/base/static/img/emojis/clock330.png b/taiga/base/static/img/emojis/clock330.png
new file mode 100644
index 00000000..b37185df
Binary files /dev/null and b/taiga/base/static/img/emojis/clock330.png differ
diff --git a/taiga/base/static/img/emojis/clock4.png b/taiga/base/static/img/emojis/clock4.png
new file mode 100644
index 00000000..a2991ada
Binary files /dev/null and b/taiga/base/static/img/emojis/clock4.png differ
diff --git a/taiga/base/static/img/emojis/clock430.png b/taiga/base/static/img/emojis/clock430.png
new file mode 100644
index 00000000..e3d1ff51
Binary files /dev/null and b/taiga/base/static/img/emojis/clock430.png differ
diff --git a/taiga/base/static/img/emojis/clock5.png b/taiga/base/static/img/emojis/clock5.png
new file mode 100644
index 00000000..de728e23
Binary files /dev/null and b/taiga/base/static/img/emojis/clock5.png differ
diff --git a/taiga/base/static/img/emojis/clock530.png b/taiga/base/static/img/emojis/clock530.png
new file mode 100644
index 00000000..54e4555e
Binary files /dev/null and b/taiga/base/static/img/emojis/clock530.png differ
diff --git a/taiga/base/static/img/emojis/clock6.png b/taiga/base/static/img/emojis/clock6.png
new file mode 100644
index 00000000..38b509e5
Binary files /dev/null and b/taiga/base/static/img/emojis/clock6.png differ
diff --git a/taiga/base/static/img/emojis/clock630.png b/taiga/base/static/img/emojis/clock630.png
new file mode 100644
index 00000000..f0c311d9
Binary files /dev/null and b/taiga/base/static/img/emojis/clock630.png differ
diff --git a/taiga/base/static/img/emojis/clock7.png b/taiga/base/static/img/emojis/clock7.png
new file mode 100644
index 00000000..852a73d5
Binary files /dev/null and b/taiga/base/static/img/emojis/clock7.png differ
diff --git a/taiga/base/static/img/emojis/clock730.png b/taiga/base/static/img/emojis/clock730.png
new file mode 100644
index 00000000..03e30c25
Binary files /dev/null and b/taiga/base/static/img/emojis/clock730.png differ
diff --git a/taiga/base/static/img/emojis/clock8.png b/taiga/base/static/img/emojis/clock8.png
new file mode 100644
index 00000000..a47559ca
Binary files /dev/null and b/taiga/base/static/img/emojis/clock8.png differ
diff --git a/taiga/base/static/img/emojis/clock830.png b/taiga/base/static/img/emojis/clock830.png
new file mode 100644
index 00000000..b076a5a1
Binary files /dev/null and b/taiga/base/static/img/emojis/clock830.png differ
diff --git a/taiga/base/static/img/emojis/clock9.png b/taiga/base/static/img/emojis/clock9.png
new file mode 100644
index 00000000..f3003c80
Binary files /dev/null and b/taiga/base/static/img/emojis/clock9.png differ
diff --git a/taiga/base/static/img/emojis/clock930.png b/taiga/base/static/img/emojis/clock930.png
new file mode 100644
index 00000000..77d56002
Binary files /dev/null and b/taiga/base/static/img/emojis/clock930.png differ
diff --git a/taiga/base/static/img/emojis/closed_book.png b/taiga/base/static/img/emojis/closed_book.png
new file mode 100644
index 00000000..9e0a9ae2
Binary files /dev/null and b/taiga/base/static/img/emojis/closed_book.png differ
diff --git a/taiga/base/static/img/emojis/closed_lock_with_key.png b/taiga/base/static/img/emojis/closed_lock_with_key.png
new file mode 100644
index 00000000..00959534
Binary files /dev/null and b/taiga/base/static/img/emojis/closed_lock_with_key.png differ
diff --git a/taiga/base/static/img/emojis/closed_umbrella.png b/taiga/base/static/img/emojis/closed_umbrella.png
new file mode 100644
index 00000000..314e4853
Binary files /dev/null and b/taiga/base/static/img/emojis/closed_umbrella.png differ
diff --git a/taiga/base/static/img/emojis/cloud.png b/taiga/base/static/img/emojis/cloud.png
new file mode 100644
index 00000000..5a77db26
Binary files /dev/null and b/taiga/base/static/img/emojis/cloud.png differ
diff --git a/taiga/base/static/img/emojis/clubs.png b/taiga/base/static/img/emojis/clubs.png
new file mode 100644
index 00000000..88dd644f
Binary files /dev/null and b/taiga/base/static/img/emojis/clubs.png differ
diff --git a/taiga/base/static/img/emojis/cn.png b/taiga/base/static/img/emojis/cn.png
new file mode 100644
index 00000000..941702d6
Binary files /dev/null and b/taiga/base/static/img/emojis/cn.png differ
diff --git a/taiga/base/static/img/emojis/cocktail.png b/taiga/base/static/img/emojis/cocktail.png
new file mode 100644
index 00000000..2afdef2c
Binary files /dev/null and b/taiga/base/static/img/emojis/cocktail.png differ
diff --git a/taiga/base/static/img/emojis/coffee.png b/taiga/base/static/img/emojis/coffee.png
new file mode 100644
index 00000000..3d6e3f39
Binary files /dev/null and b/taiga/base/static/img/emojis/coffee.png differ
diff --git a/taiga/base/static/img/emojis/cold_sweat.png b/taiga/base/static/img/emojis/cold_sweat.png
new file mode 100644
index 00000000..7b0223c6
Binary files /dev/null and b/taiga/base/static/img/emojis/cold_sweat.png differ
diff --git a/taiga/base/static/img/emojis/collision.png b/taiga/base/static/img/emojis/collision.png
new file mode 100644
index 00000000..c7338258
Binary files /dev/null and b/taiga/base/static/img/emojis/collision.png differ
diff --git a/taiga/base/static/img/emojis/computer.png b/taiga/base/static/img/emojis/computer.png
new file mode 100644
index 00000000..4ac2f8f6
Binary files /dev/null and b/taiga/base/static/img/emojis/computer.png differ
diff --git a/taiga/base/static/img/emojis/confetti_ball.png b/taiga/base/static/img/emojis/confetti_ball.png
new file mode 100644
index 00000000..b89a0314
Binary files /dev/null and b/taiga/base/static/img/emojis/confetti_ball.png differ
diff --git a/taiga/base/static/img/emojis/confounded.png b/taiga/base/static/img/emojis/confounded.png
new file mode 100644
index 00000000..6036df79
Binary files /dev/null and b/taiga/base/static/img/emojis/confounded.png differ
diff --git a/taiga/base/static/img/emojis/confused.png b/taiga/base/static/img/emojis/confused.png
new file mode 100644
index 00000000..6350ffca
Binary files /dev/null and b/taiga/base/static/img/emojis/confused.png differ
diff --git a/taiga/base/static/img/emojis/congratulations.png b/taiga/base/static/img/emojis/congratulations.png
new file mode 100644
index 00000000..42f78080
Binary files /dev/null and b/taiga/base/static/img/emojis/congratulations.png differ
diff --git a/taiga/base/static/img/emojis/construction.png b/taiga/base/static/img/emojis/construction.png
new file mode 100644
index 00000000..5661e966
Binary files /dev/null and b/taiga/base/static/img/emojis/construction.png differ
diff --git a/taiga/base/static/img/emojis/construction_worker.png b/taiga/base/static/img/emojis/construction_worker.png
new file mode 100644
index 00000000..bb3f0f8f
Binary files /dev/null and b/taiga/base/static/img/emojis/construction_worker.png differ
diff --git a/taiga/base/static/img/emojis/convenience_store.png b/taiga/base/static/img/emojis/convenience_store.png
new file mode 100644
index 00000000..54812389
Binary files /dev/null and b/taiga/base/static/img/emojis/convenience_store.png differ
diff --git a/taiga/base/static/img/emojis/cookie.png b/taiga/base/static/img/emojis/cookie.png
new file mode 100644
index 00000000..e0051c90
Binary files /dev/null and b/taiga/base/static/img/emojis/cookie.png differ
diff --git a/taiga/base/static/img/emojis/cool.png b/taiga/base/static/img/emojis/cool.png
new file mode 100644
index 00000000..30452ecf
Binary files /dev/null and b/taiga/base/static/img/emojis/cool.png differ
diff --git a/taiga/base/static/img/emojis/cop.png b/taiga/base/static/img/emojis/cop.png
new file mode 100644
index 00000000..a6d1f25b
Binary files /dev/null and b/taiga/base/static/img/emojis/cop.png differ
diff --git a/taiga/base/static/img/emojis/copyright.png b/taiga/base/static/img/emojis/copyright.png
new file mode 100644
index 00000000..5fdd5ece
Binary files /dev/null and b/taiga/base/static/img/emojis/copyright.png differ
diff --git a/taiga/base/static/img/emojis/corn.png b/taiga/base/static/img/emojis/corn.png
new file mode 100644
index 00000000..69c1c407
Binary files /dev/null and b/taiga/base/static/img/emojis/corn.png differ
diff --git a/taiga/base/static/img/emojis/couple.png b/taiga/base/static/img/emojis/couple.png
new file mode 100644
index 00000000..6bd22390
Binary files /dev/null and b/taiga/base/static/img/emojis/couple.png differ
diff --git a/taiga/base/static/img/emojis/couple_with_heart.png b/taiga/base/static/img/emojis/couple_with_heart.png
new file mode 100644
index 00000000..dc5090b9
Binary files /dev/null and b/taiga/base/static/img/emojis/couple_with_heart.png differ
diff --git a/taiga/base/static/img/emojis/couplekiss.png b/taiga/base/static/img/emojis/couplekiss.png
new file mode 100644
index 00000000..6e04c6bc
Binary files /dev/null and b/taiga/base/static/img/emojis/couplekiss.png differ
diff --git a/taiga/base/static/img/emojis/cow.png b/taiga/base/static/img/emojis/cow.png
new file mode 100644
index 00000000..9dd0fd6c
Binary files /dev/null and b/taiga/base/static/img/emojis/cow.png differ
diff --git a/taiga/base/static/img/emojis/cow2.png b/taiga/base/static/img/emojis/cow2.png
new file mode 100644
index 00000000..ad246241
Binary files /dev/null and b/taiga/base/static/img/emojis/cow2.png differ
diff --git a/taiga/base/static/img/emojis/credit_card.png b/taiga/base/static/img/emojis/credit_card.png
new file mode 100644
index 00000000..d3da1665
Binary files /dev/null and b/taiga/base/static/img/emojis/credit_card.png differ
diff --git a/taiga/base/static/img/emojis/crocodile.png b/taiga/base/static/img/emojis/crocodile.png
new file mode 100644
index 00000000..116395c4
Binary files /dev/null and b/taiga/base/static/img/emojis/crocodile.png differ
diff --git a/taiga/base/static/img/emojis/crossed_flags.png b/taiga/base/static/img/emojis/crossed_flags.png
new file mode 100644
index 00000000..aacfd9b1
Binary files /dev/null and b/taiga/base/static/img/emojis/crossed_flags.png differ
diff --git a/taiga/base/static/img/emojis/crown.png b/taiga/base/static/img/emojis/crown.png
new file mode 100644
index 00000000..e86a163a
Binary files /dev/null and b/taiga/base/static/img/emojis/crown.png differ
diff --git a/taiga/base/static/img/emojis/cry.png b/taiga/base/static/img/emojis/cry.png
new file mode 100644
index 00000000..be8eaad6
Binary files /dev/null and b/taiga/base/static/img/emojis/cry.png differ
diff --git a/taiga/base/static/img/emojis/crying_cat_face.png b/taiga/base/static/img/emojis/crying_cat_face.png
new file mode 100644
index 00000000..ecc41589
Binary files /dev/null and b/taiga/base/static/img/emojis/crying_cat_face.png differ
diff --git a/taiga/base/static/img/emojis/crystal_ball.png b/taiga/base/static/img/emojis/crystal_ball.png
new file mode 100644
index 00000000..dba2bfeb
Binary files /dev/null and b/taiga/base/static/img/emojis/crystal_ball.png differ
diff --git a/taiga/base/static/img/emojis/cupid.png b/taiga/base/static/img/emojis/cupid.png
new file mode 100644
index 00000000..f4591ef0
Binary files /dev/null and b/taiga/base/static/img/emojis/cupid.png differ
diff --git a/taiga/base/static/img/emojis/curly_loop.png b/taiga/base/static/img/emojis/curly_loop.png
new file mode 100644
index 00000000..f6563a11
Binary files /dev/null and b/taiga/base/static/img/emojis/curly_loop.png differ
diff --git a/taiga/base/static/img/emojis/currency_exchange.png b/taiga/base/static/img/emojis/currency_exchange.png
new file mode 100644
index 00000000..c165bc64
Binary files /dev/null and b/taiga/base/static/img/emojis/currency_exchange.png differ
diff --git a/taiga/base/static/img/emojis/curry.png b/taiga/base/static/img/emojis/curry.png
new file mode 100644
index 00000000..2a8d2cf3
Binary files /dev/null and b/taiga/base/static/img/emojis/curry.png differ
diff --git a/taiga/base/static/img/emojis/custard.png b/taiga/base/static/img/emojis/custard.png
new file mode 100644
index 00000000..b6f4023c
Binary files /dev/null and b/taiga/base/static/img/emojis/custard.png differ
diff --git a/taiga/base/static/img/emojis/customs.png b/taiga/base/static/img/emojis/customs.png
new file mode 100644
index 00000000..33f975e8
Binary files /dev/null and b/taiga/base/static/img/emojis/customs.png differ
diff --git a/taiga/base/static/img/emojis/cyclone.png b/taiga/base/static/img/emojis/cyclone.png
new file mode 100644
index 00000000..bc33f5b3
Binary files /dev/null and b/taiga/base/static/img/emojis/cyclone.png differ
diff --git a/taiga/base/static/img/emojis/dancer.png b/taiga/base/static/img/emojis/dancer.png
new file mode 100644
index 00000000..945aed19
Binary files /dev/null and b/taiga/base/static/img/emojis/dancer.png differ
diff --git a/taiga/base/static/img/emojis/dancers.png b/taiga/base/static/img/emojis/dancers.png
new file mode 100644
index 00000000..9b78bef3
Binary files /dev/null and b/taiga/base/static/img/emojis/dancers.png differ
diff --git a/taiga/base/static/img/emojis/dango.png b/taiga/base/static/img/emojis/dango.png
new file mode 100644
index 00000000..01a9d64c
Binary files /dev/null and b/taiga/base/static/img/emojis/dango.png differ
diff --git a/taiga/base/static/img/emojis/dart.png b/taiga/base/static/img/emojis/dart.png
new file mode 100644
index 00000000..2fb58d9f
Binary files /dev/null and b/taiga/base/static/img/emojis/dart.png differ
diff --git a/taiga/base/static/img/emojis/dash.png b/taiga/base/static/img/emojis/dash.png
new file mode 100644
index 00000000..4abae3cb
Binary files /dev/null and b/taiga/base/static/img/emojis/dash.png differ
diff --git a/taiga/base/static/img/emojis/date.png b/taiga/base/static/img/emojis/date.png
new file mode 100644
index 00000000..e607aa75
Binary files /dev/null and b/taiga/base/static/img/emojis/date.png differ
diff --git a/taiga/base/static/img/emojis/de.png b/taiga/base/static/img/emojis/de.png
new file mode 100644
index 00000000..a0e94149
Binary files /dev/null and b/taiga/base/static/img/emojis/de.png differ
diff --git a/taiga/base/static/img/emojis/deciduous_tree.png b/taiga/base/static/img/emojis/deciduous_tree.png
new file mode 100644
index 00000000..46eb81ef
Binary files /dev/null and b/taiga/base/static/img/emojis/deciduous_tree.png differ
diff --git a/taiga/base/static/img/emojis/department_store.png b/taiga/base/static/img/emojis/department_store.png
new file mode 100644
index 00000000..168e5f8d
Binary files /dev/null and b/taiga/base/static/img/emojis/department_store.png differ
diff --git a/taiga/base/static/img/emojis/diamond_shape_with_a_dot_inside.png b/taiga/base/static/img/emojis/diamond_shape_with_a_dot_inside.png
new file mode 100644
index 00000000..1ad11be0
Binary files /dev/null and b/taiga/base/static/img/emojis/diamond_shape_with_a_dot_inside.png differ
diff --git a/taiga/base/static/img/emojis/diamonds.png b/taiga/base/static/img/emojis/diamonds.png
new file mode 100644
index 00000000..cee6d170
Binary files /dev/null and b/taiga/base/static/img/emojis/diamonds.png differ
diff --git a/taiga/base/static/img/emojis/disappointed.png b/taiga/base/static/img/emojis/disappointed.png
new file mode 100644
index 00000000..5c8500cf
Binary files /dev/null and b/taiga/base/static/img/emojis/disappointed.png differ
diff --git a/taiga/base/static/img/emojis/disappointed_relieved.png b/taiga/base/static/img/emojis/disappointed_relieved.png
new file mode 100644
index 00000000..91b27513
Binary files /dev/null and b/taiga/base/static/img/emojis/disappointed_relieved.png differ
diff --git a/taiga/base/static/img/emojis/dizzy.png b/taiga/base/static/img/emojis/dizzy.png
new file mode 100644
index 00000000..7acc9e12
Binary files /dev/null and b/taiga/base/static/img/emojis/dizzy.png differ
diff --git a/taiga/base/static/img/emojis/dizzy_face.png b/taiga/base/static/img/emojis/dizzy_face.png
new file mode 100644
index 00000000..ee617408
Binary files /dev/null and b/taiga/base/static/img/emojis/dizzy_face.png differ
diff --git a/taiga/base/static/img/emojis/do_not_litter.png b/taiga/base/static/img/emojis/do_not_litter.png
new file mode 100644
index 00000000..b0c4b5ab
Binary files /dev/null and b/taiga/base/static/img/emojis/do_not_litter.png differ
diff --git a/taiga/base/static/img/emojis/dog.png b/taiga/base/static/img/emojis/dog.png
new file mode 100644
index 00000000..62072a79
Binary files /dev/null and b/taiga/base/static/img/emojis/dog.png differ
diff --git a/taiga/base/static/img/emojis/dog2.png b/taiga/base/static/img/emojis/dog2.png
new file mode 100644
index 00000000..f8f1fda3
Binary files /dev/null and b/taiga/base/static/img/emojis/dog2.png differ
diff --git a/taiga/base/static/img/emojis/dollar.png b/taiga/base/static/img/emojis/dollar.png
new file mode 100644
index 00000000..49b21d3b
Binary files /dev/null and b/taiga/base/static/img/emojis/dollar.png differ
diff --git a/taiga/base/static/img/emojis/dolls.png b/taiga/base/static/img/emojis/dolls.png
new file mode 100644
index 00000000..d6489d48
Binary files /dev/null and b/taiga/base/static/img/emojis/dolls.png differ
diff --git a/taiga/base/static/img/emojis/dolphin.png b/taiga/base/static/img/emojis/dolphin.png
new file mode 100644
index 00000000..5bd2543c
Binary files /dev/null and b/taiga/base/static/img/emojis/dolphin.png differ
diff --git a/taiga/base/static/img/emojis/donut.png b/taiga/base/static/img/emojis/donut.png
new file mode 100644
index 00000000..aa6653e3
Binary files /dev/null and b/taiga/base/static/img/emojis/donut.png differ
diff --git a/taiga/base/static/img/emojis/door.png b/taiga/base/static/img/emojis/door.png
new file mode 100644
index 00000000..7a7b9ae7
Binary files /dev/null and b/taiga/base/static/img/emojis/door.png differ
diff --git a/taiga/base/static/img/emojis/doughnut.png b/taiga/base/static/img/emojis/doughnut.png
new file mode 100644
index 00000000..aa6653e3
Binary files /dev/null and b/taiga/base/static/img/emojis/doughnut.png differ
diff --git a/taiga/base/static/img/emojis/dragon.png b/taiga/base/static/img/emojis/dragon.png
new file mode 100644
index 00000000..c563d88d
Binary files /dev/null and b/taiga/base/static/img/emojis/dragon.png differ
diff --git a/taiga/base/static/img/emojis/dragon_face.png b/taiga/base/static/img/emojis/dragon_face.png
new file mode 100644
index 00000000..21cc40d7
Binary files /dev/null and b/taiga/base/static/img/emojis/dragon_face.png differ
diff --git a/taiga/base/static/img/emojis/dress.png b/taiga/base/static/img/emojis/dress.png
new file mode 100644
index 00000000..08c74f54
Binary files /dev/null and b/taiga/base/static/img/emojis/dress.png differ
diff --git a/taiga/base/static/img/emojis/dromedary_camel.png b/taiga/base/static/img/emojis/dromedary_camel.png
new file mode 100644
index 00000000..eeb50b01
Binary files /dev/null and b/taiga/base/static/img/emojis/dromedary_camel.png differ
diff --git a/taiga/base/static/img/emojis/droplet.png b/taiga/base/static/img/emojis/droplet.png
new file mode 100644
index 00000000..353265bc
Binary files /dev/null and b/taiga/base/static/img/emojis/droplet.png differ
diff --git a/taiga/base/static/img/emojis/dvd.png b/taiga/base/static/img/emojis/dvd.png
new file mode 100644
index 00000000..06127724
Binary files /dev/null and b/taiga/base/static/img/emojis/dvd.png differ
diff --git a/taiga/base/static/img/emojis/e-mail.png b/taiga/base/static/img/emojis/e-mail.png
new file mode 100644
index 00000000..73c51105
Binary files /dev/null and b/taiga/base/static/img/emojis/e-mail.png differ
diff --git a/taiga/base/static/img/emojis/ear.png b/taiga/base/static/img/emojis/ear.png
new file mode 100644
index 00000000..12b2123f
Binary files /dev/null and b/taiga/base/static/img/emojis/ear.png differ
diff --git a/taiga/base/static/img/emojis/ear_of_rice.png b/taiga/base/static/img/emojis/ear_of_rice.png
new file mode 100644
index 00000000..56185b92
Binary files /dev/null and b/taiga/base/static/img/emojis/ear_of_rice.png differ
diff --git a/taiga/base/static/img/emojis/earth_africa.png b/taiga/base/static/img/emojis/earth_africa.png
new file mode 100644
index 00000000..f34e82f7
Binary files /dev/null and b/taiga/base/static/img/emojis/earth_africa.png differ
diff --git a/taiga/base/static/img/emojis/earth_americas.png b/taiga/base/static/img/emojis/earth_americas.png
new file mode 100644
index 00000000..4abbe001
Binary files /dev/null and b/taiga/base/static/img/emojis/earth_americas.png differ
diff --git a/taiga/base/static/img/emojis/earth_asia.png b/taiga/base/static/img/emojis/earth_asia.png
new file mode 100644
index 00000000..5ce04884
Binary files /dev/null and b/taiga/base/static/img/emojis/earth_asia.png differ
diff --git a/taiga/base/static/img/emojis/egg.png b/taiga/base/static/img/emojis/egg.png
new file mode 100644
index 00000000..4fc81680
Binary files /dev/null and b/taiga/base/static/img/emojis/egg.png differ
diff --git a/taiga/base/static/img/emojis/eggplant.png b/taiga/base/static/img/emojis/eggplant.png
new file mode 100644
index 00000000..00fc56e3
Binary files /dev/null and b/taiga/base/static/img/emojis/eggplant.png differ
diff --git a/taiga/base/static/img/emojis/eight.png b/taiga/base/static/img/emojis/eight.png
new file mode 100644
index 00000000..82ee6c4d
Binary files /dev/null and b/taiga/base/static/img/emojis/eight.png differ
diff --git a/taiga/base/static/img/emojis/eight_pointed_black_star.png b/taiga/base/static/img/emojis/eight_pointed_black_star.png
new file mode 100644
index 00000000..91e7018b
Binary files /dev/null and b/taiga/base/static/img/emojis/eight_pointed_black_star.png differ
diff --git a/taiga/base/static/img/emojis/eight_spoked_asterisk.png b/taiga/base/static/img/emojis/eight_spoked_asterisk.png
new file mode 100644
index 00000000..25309499
Binary files /dev/null and b/taiga/base/static/img/emojis/eight_spoked_asterisk.png differ
diff --git a/taiga/base/static/img/emojis/electric_plug.png b/taiga/base/static/img/emojis/electric_plug.png
new file mode 100644
index 00000000..d9e14e41
Binary files /dev/null and b/taiga/base/static/img/emojis/electric_plug.png differ
diff --git a/taiga/base/static/img/emojis/elephant.png b/taiga/base/static/img/emojis/elephant.png
new file mode 100644
index 00000000..27cfc5b7
Binary files /dev/null and b/taiga/base/static/img/emojis/elephant.png differ
diff --git a/taiga/base/static/img/emojis/email.png b/taiga/base/static/img/emojis/email.png
new file mode 100644
index 00000000..1bc0578b
Binary files /dev/null and b/taiga/base/static/img/emojis/email.png differ
diff --git a/taiga/base/static/img/emojis/end.png b/taiga/base/static/img/emojis/end.png
new file mode 100644
index 00000000..6319ed35
Binary files /dev/null and b/taiga/base/static/img/emojis/end.png differ
diff --git a/taiga/base/static/img/emojis/envelope.png b/taiga/base/static/img/emojis/envelope.png
new file mode 100644
index 00000000..f2449687
Binary files /dev/null and b/taiga/base/static/img/emojis/envelope.png differ
diff --git a/taiga/base/static/img/emojis/es.png b/taiga/base/static/img/emojis/es.png
new file mode 100644
index 00000000..20ef411e
Binary files /dev/null and b/taiga/base/static/img/emojis/es.png differ
diff --git a/taiga/base/static/img/emojis/euro.png b/taiga/base/static/img/emojis/euro.png
new file mode 100644
index 00000000..94ac9468
Binary files /dev/null and b/taiga/base/static/img/emojis/euro.png differ
diff --git a/taiga/base/static/img/emojis/european_castle.png b/taiga/base/static/img/emojis/european_castle.png
new file mode 100644
index 00000000..c6f22b05
Binary files /dev/null and b/taiga/base/static/img/emojis/european_castle.png differ
diff --git a/taiga/base/static/img/emojis/european_post_office.png b/taiga/base/static/img/emojis/european_post_office.png
new file mode 100644
index 00000000..cb9fbb7f
Binary files /dev/null and b/taiga/base/static/img/emojis/european_post_office.png differ
diff --git a/taiga/base/static/img/emojis/evergreen_tree.png b/taiga/base/static/img/emojis/evergreen_tree.png
new file mode 100644
index 00000000..efa687fc
Binary files /dev/null and b/taiga/base/static/img/emojis/evergreen_tree.png differ
diff --git a/taiga/base/static/img/emojis/exclamation.png b/taiga/base/static/img/emojis/exclamation.png
new file mode 100644
index 00000000..bca3075f
Binary files /dev/null and b/taiga/base/static/img/emojis/exclamation.png differ
diff --git a/taiga/base/static/img/emojis/expressionless.png b/taiga/base/static/img/emojis/expressionless.png
new file mode 100644
index 00000000..88758f01
Binary files /dev/null and b/taiga/base/static/img/emojis/expressionless.png differ
diff --git a/taiga/base/static/img/emojis/eyeglasses.png b/taiga/base/static/img/emojis/eyeglasses.png
new file mode 100644
index 00000000..115f0941
Binary files /dev/null and b/taiga/base/static/img/emojis/eyeglasses.png differ
diff --git a/taiga/base/static/img/emojis/eyes.png b/taiga/base/static/img/emojis/eyes.png
new file mode 100644
index 00000000..84d9ff01
Binary files /dev/null and b/taiga/base/static/img/emojis/eyes.png differ
diff --git a/taiga/base/static/img/emojis/facepunch.png b/taiga/base/static/img/emojis/facepunch.png
new file mode 100644
index 00000000..f817ca3f
Binary files /dev/null and b/taiga/base/static/img/emojis/facepunch.png differ
diff --git a/taiga/base/static/img/emojis/factory.png b/taiga/base/static/img/emojis/factory.png
new file mode 100644
index 00000000..e7082f07
Binary files /dev/null and b/taiga/base/static/img/emojis/factory.png differ
diff --git a/taiga/base/static/img/emojis/fallen_leaf.png b/taiga/base/static/img/emojis/fallen_leaf.png
new file mode 100644
index 00000000..ad970b25
Binary files /dev/null and b/taiga/base/static/img/emojis/fallen_leaf.png differ
diff --git a/taiga/base/static/img/emojis/family.png b/taiga/base/static/img/emojis/family.png
new file mode 100644
index 00000000..41566a66
Binary files /dev/null and b/taiga/base/static/img/emojis/family.png differ
diff --git a/taiga/base/static/img/emojis/fast_forward.png b/taiga/base/static/img/emojis/fast_forward.png
new file mode 100644
index 00000000..084d8d7c
Binary files /dev/null and b/taiga/base/static/img/emojis/fast_forward.png differ
diff --git a/taiga/base/static/img/emojis/fax.png b/taiga/base/static/img/emojis/fax.png
new file mode 100644
index 00000000..cc176a6b
Binary files /dev/null and b/taiga/base/static/img/emojis/fax.png differ
diff --git a/taiga/base/static/img/emojis/fearful.png b/taiga/base/static/img/emojis/fearful.png
new file mode 100644
index 00000000..15f7301a
Binary files /dev/null and b/taiga/base/static/img/emojis/fearful.png differ
diff --git a/taiga/base/static/img/emojis/feelsgood.png b/taiga/base/static/img/emojis/feelsgood.png
new file mode 100644
index 00000000..8910a87a
Binary files /dev/null and b/taiga/base/static/img/emojis/feelsgood.png differ
diff --git a/taiga/base/static/img/emojis/feet.png b/taiga/base/static/img/emojis/feet.png
new file mode 100644
index 00000000..8c52f522
Binary files /dev/null and b/taiga/base/static/img/emojis/feet.png differ
diff --git a/taiga/base/static/img/emojis/ferris_wheel.png b/taiga/base/static/img/emojis/ferris_wheel.png
new file mode 100644
index 00000000..6bf612d9
Binary files /dev/null and b/taiga/base/static/img/emojis/ferris_wheel.png differ
diff --git a/taiga/base/static/img/emojis/file_folder.png b/taiga/base/static/img/emojis/file_folder.png
new file mode 100644
index 00000000..2f654936
Binary files /dev/null and b/taiga/base/static/img/emojis/file_folder.png differ
diff --git a/taiga/base/static/img/emojis/finnadie.png b/taiga/base/static/img/emojis/finnadie.png
new file mode 100644
index 00000000..8f3f2aa3
Binary files /dev/null and b/taiga/base/static/img/emojis/finnadie.png differ
diff --git a/taiga/base/static/img/emojis/fire.png b/taiga/base/static/img/emojis/fire.png
new file mode 100644
index 00000000..38292b29
Binary files /dev/null and b/taiga/base/static/img/emojis/fire.png differ
diff --git a/taiga/base/static/img/emojis/fire_engine.png b/taiga/base/static/img/emojis/fire_engine.png
new file mode 100644
index 00000000..8e879e3e
Binary files /dev/null and b/taiga/base/static/img/emojis/fire_engine.png differ
diff --git a/taiga/base/static/img/emojis/fireworks.png b/taiga/base/static/img/emojis/fireworks.png
new file mode 100644
index 00000000..eb53624b
Binary files /dev/null and b/taiga/base/static/img/emojis/fireworks.png differ
diff --git a/taiga/base/static/img/emojis/first_quarter_moon.png b/taiga/base/static/img/emojis/first_quarter_moon.png
new file mode 100644
index 00000000..4ccac406
Binary files /dev/null and b/taiga/base/static/img/emojis/first_quarter_moon.png differ
diff --git a/taiga/base/static/img/emojis/first_quarter_moon_with_face.png b/taiga/base/static/img/emojis/first_quarter_moon_with_face.png
new file mode 100644
index 00000000..01bf0dc9
Binary files /dev/null and b/taiga/base/static/img/emojis/first_quarter_moon_with_face.png differ
diff --git a/taiga/base/static/img/emojis/fish.png b/taiga/base/static/img/emojis/fish.png
new file mode 100644
index 00000000..3544ff95
Binary files /dev/null and b/taiga/base/static/img/emojis/fish.png differ
diff --git a/taiga/base/static/img/emojis/fish_cake.png b/taiga/base/static/img/emojis/fish_cake.png
new file mode 100644
index 00000000..29add6da
Binary files /dev/null and b/taiga/base/static/img/emojis/fish_cake.png differ
diff --git a/taiga/base/static/img/emojis/fishing_pole_and_fish.png b/taiga/base/static/img/emojis/fishing_pole_and_fish.png
new file mode 100644
index 00000000..fe1371e9
Binary files /dev/null and b/taiga/base/static/img/emojis/fishing_pole_and_fish.png differ
diff --git a/taiga/base/static/img/emojis/fist.png b/taiga/base/static/img/emojis/fist.png
new file mode 100644
index 00000000..7d5fe3f5
Binary files /dev/null and b/taiga/base/static/img/emojis/fist.png differ
diff --git a/taiga/base/static/img/emojis/five.png b/taiga/base/static/img/emojis/five.png
new file mode 100644
index 00000000..3e9c322e
Binary files /dev/null and b/taiga/base/static/img/emojis/five.png differ
diff --git a/taiga/base/static/img/emojis/flags.png b/taiga/base/static/img/emojis/flags.png
new file mode 100644
index 00000000..0ac33230
Binary files /dev/null and b/taiga/base/static/img/emojis/flags.png differ
diff --git a/taiga/base/static/img/emojis/flashlight.png b/taiga/base/static/img/emojis/flashlight.png
new file mode 100644
index 00000000..20f3941b
Binary files /dev/null and b/taiga/base/static/img/emojis/flashlight.png differ
diff --git a/taiga/base/static/img/emojis/floppy_disk.png b/taiga/base/static/img/emojis/floppy_disk.png
new file mode 100644
index 00000000..64362a51
Binary files /dev/null and b/taiga/base/static/img/emojis/floppy_disk.png differ
diff --git a/taiga/base/static/img/emojis/flower_playing_cards.png b/taiga/base/static/img/emojis/flower_playing_cards.png
new file mode 100644
index 00000000..ef3dfbe0
Binary files /dev/null and b/taiga/base/static/img/emojis/flower_playing_cards.png differ
diff --git a/taiga/base/static/img/emojis/flushed.png b/taiga/base/static/img/emojis/flushed.png
new file mode 100644
index 00000000..5a8933cb
Binary files /dev/null and b/taiga/base/static/img/emojis/flushed.png differ
diff --git a/taiga/base/static/img/emojis/foggy.png b/taiga/base/static/img/emojis/foggy.png
new file mode 100644
index 00000000..d23620c5
Binary files /dev/null and b/taiga/base/static/img/emojis/foggy.png differ
diff --git a/taiga/base/static/img/emojis/football.png b/taiga/base/static/img/emojis/football.png
new file mode 100644
index 00000000..87e8b061
Binary files /dev/null and b/taiga/base/static/img/emojis/football.png differ
diff --git a/taiga/base/static/img/emojis/fork_and_knife.png b/taiga/base/static/img/emojis/fork_and_knife.png
new file mode 100644
index 00000000..5155871e
Binary files /dev/null and b/taiga/base/static/img/emojis/fork_and_knife.png differ
diff --git a/taiga/base/static/img/emojis/fountain.png b/taiga/base/static/img/emojis/fountain.png
new file mode 100644
index 00000000..f312d939
Binary files /dev/null and b/taiga/base/static/img/emojis/fountain.png differ
diff --git a/taiga/base/static/img/emojis/four.png b/taiga/base/static/img/emojis/four.png
new file mode 100644
index 00000000..57c65208
Binary files /dev/null and b/taiga/base/static/img/emojis/four.png differ
diff --git a/taiga/base/static/img/emojis/four_leaf_clover.png b/taiga/base/static/img/emojis/four_leaf_clover.png
new file mode 100644
index 00000000..9f5b641f
Binary files /dev/null and b/taiga/base/static/img/emojis/four_leaf_clover.png differ
diff --git a/taiga/base/static/img/emojis/fr.png b/taiga/base/static/img/emojis/fr.png
new file mode 100644
index 00000000..f051223d
Binary files /dev/null and b/taiga/base/static/img/emojis/fr.png differ
diff --git a/taiga/base/static/img/emojis/free.png b/taiga/base/static/img/emojis/free.png
new file mode 100644
index 00000000..1c5d612b
Binary files /dev/null and b/taiga/base/static/img/emojis/free.png differ
diff --git a/taiga/base/static/img/emojis/fried_shrimp.png b/taiga/base/static/img/emojis/fried_shrimp.png
new file mode 100644
index 00000000..a65349ac
Binary files /dev/null and b/taiga/base/static/img/emojis/fried_shrimp.png differ
diff --git a/taiga/base/static/img/emojis/fries.png b/taiga/base/static/img/emojis/fries.png
new file mode 100644
index 00000000..b7e535a0
Binary files /dev/null and b/taiga/base/static/img/emojis/fries.png differ
diff --git a/taiga/base/static/img/emojis/frog.png b/taiga/base/static/img/emojis/frog.png
new file mode 100644
index 00000000..92316aeb
Binary files /dev/null and b/taiga/base/static/img/emojis/frog.png differ
diff --git a/taiga/base/static/img/emojis/frowning.png b/taiga/base/static/img/emojis/frowning.png
new file mode 100644
index 00000000..9f9c188b
Binary files /dev/null and b/taiga/base/static/img/emojis/frowning.png differ
diff --git a/taiga/base/static/img/emojis/fu.png b/taiga/base/static/img/emojis/fu.png
new file mode 100644
index 00000000..ad758495
Binary files /dev/null and b/taiga/base/static/img/emojis/fu.png differ
diff --git a/taiga/base/static/img/emojis/fuelpump.png b/taiga/base/static/img/emojis/fuelpump.png
new file mode 100644
index 00000000..50464a3b
Binary files /dev/null and b/taiga/base/static/img/emojis/fuelpump.png differ
diff --git a/taiga/base/static/img/emojis/full_moon.png b/taiga/base/static/img/emojis/full_moon.png
new file mode 100644
index 00000000..858ec71f
Binary files /dev/null and b/taiga/base/static/img/emojis/full_moon.png differ
diff --git a/taiga/base/static/img/emojis/full_moon_with_face.png b/taiga/base/static/img/emojis/full_moon_with_face.png
new file mode 100644
index 00000000..410a9d45
Binary files /dev/null and b/taiga/base/static/img/emojis/full_moon_with_face.png differ
diff --git a/taiga/base/static/img/emojis/game_die.png b/taiga/base/static/img/emojis/game_die.png
new file mode 100644
index 00000000..fa8565af
Binary files /dev/null and b/taiga/base/static/img/emojis/game_die.png differ
diff --git a/taiga/base/static/img/emojis/gb.png b/taiga/base/static/img/emojis/gb.png
new file mode 100644
index 00000000..02553549
Binary files /dev/null and b/taiga/base/static/img/emojis/gb.png differ
diff --git a/taiga/base/static/img/emojis/gem.png b/taiga/base/static/img/emojis/gem.png
new file mode 100644
index 00000000..d106d2b4
Binary files /dev/null and b/taiga/base/static/img/emojis/gem.png differ
diff --git a/taiga/base/static/img/emojis/gemini.png b/taiga/base/static/img/emojis/gemini.png
new file mode 100644
index 00000000..686e046c
Binary files /dev/null and b/taiga/base/static/img/emojis/gemini.png differ
diff --git a/taiga/base/static/img/emojis/ghost.png b/taiga/base/static/img/emojis/ghost.png
new file mode 100644
index 00000000..fba8b81e
Binary files /dev/null and b/taiga/base/static/img/emojis/ghost.png differ
diff --git a/taiga/base/static/img/emojis/gift.png b/taiga/base/static/img/emojis/gift.png
new file mode 100644
index 00000000..2210f531
Binary files /dev/null and b/taiga/base/static/img/emojis/gift.png differ
diff --git a/taiga/base/static/img/emojis/gift_heart.png b/taiga/base/static/img/emojis/gift_heart.png
new file mode 100644
index 00000000..0805adfe
Binary files /dev/null and b/taiga/base/static/img/emojis/gift_heart.png differ
diff --git a/taiga/base/static/img/emojis/girl.png b/taiga/base/static/img/emojis/girl.png
new file mode 100644
index 00000000..56ce6e09
Binary files /dev/null and b/taiga/base/static/img/emojis/girl.png differ
diff --git a/taiga/base/static/img/emojis/globe_with_meridians.png b/taiga/base/static/img/emojis/globe_with_meridians.png
new file mode 100644
index 00000000..6f93dca0
Binary files /dev/null and b/taiga/base/static/img/emojis/globe_with_meridians.png differ
diff --git a/taiga/base/static/img/emojis/goat.png b/taiga/base/static/img/emojis/goat.png
new file mode 100644
index 00000000..c87eca27
Binary files /dev/null and b/taiga/base/static/img/emojis/goat.png differ
diff --git a/taiga/base/static/img/emojis/goberserk.png b/taiga/base/static/img/emojis/goberserk.png
new file mode 100644
index 00000000..38e7f7eb
Binary files /dev/null and b/taiga/base/static/img/emojis/goberserk.png differ
diff --git a/taiga/base/static/img/emojis/godmode.png b/taiga/base/static/img/emojis/godmode.png
new file mode 100644
index 00000000..55e7f7d4
Binary files /dev/null and b/taiga/base/static/img/emojis/godmode.png differ
diff --git a/taiga/base/static/img/emojis/golf.png b/taiga/base/static/img/emojis/golf.png
new file mode 100644
index 00000000..64193e42
Binary files /dev/null and b/taiga/base/static/img/emojis/golf.png differ
diff --git a/taiga/base/static/img/emojis/grapes.png b/taiga/base/static/img/emojis/grapes.png
new file mode 100644
index 00000000..1b0b9102
Binary files /dev/null and b/taiga/base/static/img/emojis/grapes.png differ
diff --git a/taiga/base/static/img/emojis/green_apple.png b/taiga/base/static/img/emojis/green_apple.png
new file mode 100644
index 00000000..264a125f
Binary files /dev/null and b/taiga/base/static/img/emojis/green_apple.png differ
diff --git a/taiga/base/static/img/emojis/green_book.png b/taiga/base/static/img/emojis/green_book.png
new file mode 100644
index 00000000..bae6a552
Binary files /dev/null and b/taiga/base/static/img/emojis/green_book.png differ
diff --git a/taiga/base/static/img/emojis/green_heart.png b/taiga/base/static/img/emojis/green_heart.png
new file mode 100644
index 00000000..55e25e27
Binary files /dev/null and b/taiga/base/static/img/emojis/green_heart.png differ
diff --git a/taiga/base/static/img/emojis/grey_exclamation.png b/taiga/base/static/img/emojis/grey_exclamation.png
new file mode 100644
index 00000000..e0d8ff86
Binary files /dev/null and b/taiga/base/static/img/emojis/grey_exclamation.png differ
diff --git a/taiga/base/static/img/emojis/grey_question.png b/taiga/base/static/img/emojis/grey_question.png
new file mode 100644
index 00000000..3f6acea1
Binary files /dev/null and b/taiga/base/static/img/emojis/grey_question.png differ
diff --git a/taiga/base/static/img/emojis/grimacing.png b/taiga/base/static/img/emojis/grimacing.png
new file mode 100644
index 00000000..b471487e
Binary files /dev/null and b/taiga/base/static/img/emojis/grimacing.png differ
diff --git a/taiga/base/static/img/emojis/grin.png b/taiga/base/static/img/emojis/grin.png
new file mode 100644
index 00000000..c6a5ef3a
Binary files /dev/null and b/taiga/base/static/img/emojis/grin.png differ
diff --git a/taiga/base/static/img/emojis/grinning.png b/taiga/base/static/img/emojis/grinning.png
new file mode 100644
index 00000000..94ca708b
Binary files /dev/null and b/taiga/base/static/img/emojis/grinning.png differ
diff --git a/taiga/base/static/img/emojis/guardsman.png b/taiga/base/static/img/emojis/guardsman.png
new file mode 100644
index 00000000..e4a66597
Binary files /dev/null and b/taiga/base/static/img/emojis/guardsman.png differ
diff --git a/taiga/base/static/img/emojis/guitar.png b/taiga/base/static/img/emojis/guitar.png
new file mode 100644
index 00000000..9939d795
Binary files /dev/null and b/taiga/base/static/img/emojis/guitar.png differ
diff --git a/taiga/base/static/img/emojis/gun.png b/taiga/base/static/img/emojis/gun.png
new file mode 100644
index 00000000..5cea9d85
Binary files /dev/null and b/taiga/base/static/img/emojis/gun.png differ
diff --git a/taiga/base/static/img/emojis/haircut.png b/taiga/base/static/img/emojis/haircut.png
new file mode 100644
index 00000000..68b011f1
Binary files /dev/null and b/taiga/base/static/img/emojis/haircut.png differ
diff --git a/taiga/base/static/img/emojis/hamburger.png b/taiga/base/static/img/emojis/hamburger.png
new file mode 100644
index 00000000..864d09aa
Binary files /dev/null and b/taiga/base/static/img/emojis/hamburger.png differ
diff --git a/taiga/base/static/img/emojis/hammer.png b/taiga/base/static/img/emojis/hammer.png
new file mode 100644
index 00000000..ca527213
Binary files /dev/null and b/taiga/base/static/img/emojis/hammer.png differ
diff --git a/taiga/base/static/img/emojis/hamster.png b/taiga/base/static/img/emojis/hamster.png
new file mode 100644
index 00000000..3e8d47ad
Binary files /dev/null and b/taiga/base/static/img/emojis/hamster.png differ
diff --git a/taiga/base/static/img/emojis/hand.png b/taiga/base/static/img/emojis/hand.png
new file mode 100644
index 00000000..7537b375
Binary files /dev/null and b/taiga/base/static/img/emojis/hand.png differ
diff --git a/taiga/base/static/img/emojis/handbag.png b/taiga/base/static/img/emojis/handbag.png
new file mode 100644
index 00000000..a46d79be
Binary files /dev/null and b/taiga/base/static/img/emojis/handbag.png differ
diff --git a/taiga/base/static/img/emojis/hankey.png b/taiga/base/static/img/emojis/hankey.png
new file mode 100644
index 00000000..cbd8d185
Binary files /dev/null and b/taiga/base/static/img/emojis/hankey.png differ
diff --git a/taiga/base/static/img/emojis/hash.png b/taiga/base/static/img/emojis/hash.png
new file mode 100644
index 00000000..4082b982
Binary files /dev/null and b/taiga/base/static/img/emojis/hash.png differ
diff --git a/taiga/base/static/img/emojis/hatched_chick.png b/taiga/base/static/img/emojis/hatched_chick.png
new file mode 100644
index 00000000..c1726be7
Binary files /dev/null and b/taiga/base/static/img/emojis/hatched_chick.png differ
diff --git a/taiga/base/static/img/emojis/hatching_chick.png b/taiga/base/static/img/emojis/hatching_chick.png
new file mode 100644
index 00000000..7ecebe7a
Binary files /dev/null and b/taiga/base/static/img/emojis/hatching_chick.png differ
diff --git a/taiga/base/static/img/emojis/headphones.png b/taiga/base/static/img/emojis/headphones.png
new file mode 100644
index 00000000..b56ebcb3
Binary files /dev/null and b/taiga/base/static/img/emojis/headphones.png differ
diff --git a/taiga/base/static/img/emojis/hear_no_evil.png b/taiga/base/static/img/emojis/hear_no_evil.png
new file mode 100644
index 00000000..560993ce
Binary files /dev/null and b/taiga/base/static/img/emojis/hear_no_evil.png differ
diff --git a/taiga/base/static/img/emojis/heart.png b/taiga/base/static/img/emojis/heart.png
new file mode 100644
index 00000000..43f9b660
Binary files /dev/null and b/taiga/base/static/img/emojis/heart.png differ
diff --git a/taiga/base/static/img/emojis/heart_decoration.png b/taiga/base/static/img/emojis/heart_decoration.png
new file mode 100644
index 00000000..2600ef1a
Binary files /dev/null and b/taiga/base/static/img/emojis/heart_decoration.png differ
diff --git a/taiga/base/static/img/emojis/heart_eyes.png b/taiga/base/static/img/emojis/heart_eyes.png
new file mode 100644
index 00000000..b2af9da2
Binary files /dev/null and b/taiga/base/static/img/emojis/heart_eyes.png differ
diff --git a/taiga/base/static/img/emojis/heart_eyes_cat.png b/taiga/base/static/img/emojis/heart_eyes_cat.png
new file mode 100644
index 00000000..26f8bfc6
Binary files /dev/null and b/taiga/base/static/img/emojis/heart_eyes_cat.png differ
diff --git a/taiga/base/static/img/emojis/heartbeat.png b/taiga/base/static/img/emojis/heartbeat.png
new file mode 100644
index 00000000..608989a5
Binary files /dev/null and b/taiga/base/static/img/emojis/heartbeat.png differ
diff --git a/taiga/base/static/img/emojis/heartpulse.png b/taiga/base/static/img/emojis/heartpulse.png
new file mode 100644
index 00000000..97dc3ee4
Binary files /dev/null and b/taiga/base/static/img/emojis/heartpulse.png differ
diff --git a/taiga/base/static/img/emojis/hearts.png b/taiga/base/static/img/emojis/hearts.png
new file mode 100644
index 00000000..fb4e4f7b
Binary files /dev/null and b/taiga/base/static/img/emojis/hearts.png differ
diff --git a/taiga/base/static/img/emojis/heavy_check_mark.png b/taiga/base/static/img/emojis/heavy_check_mark.png
new file mode 100644
index 00000000..59c25db1
Binary files /dev/null and b/taiga/base/static/img/emojis/heavy_check_mark.png differ
diff --git a/taiga/base/static/img/emojis/heavy_division_sign.png b/taiga/base/static/img/emojis/heavy_division_sign.png
new file mode 100644
index 00000000..27ee9649
Binary files /dev/null and b/taiga/base/static/img/emojis/heavy_division_sign.png differ
diff --git a/taiga/base/static/img/emojis/heavy_dollar_sign.png b/taiga/base/static/img/emojis/heavy_dollar_sign.png
new file mode 100644
index 00000000..065f96a8
Binary files /dev/null and b/taiga/base/static/img/emojis/heavy_dollar_sign.png differ
diff --git a/taiga/base/static/img/emojis/heavy_exclamation_mark.png b/taiga/base/static/img/emojis/heavy_exclamation_mark.png
new file mode 100644
index 00000000..a92d1ed0
Binary files /dev/null and b/taiga/base/static/img/emojis/heavy_exclamation_mark.png differ
diff --git a/taiga/base/static/img/emojis/heavy_minus_sign.png b/taiga/base/static/img/emojis/heavy_minus_sign.png
new file mode 100644
index 00000000..032d0e50
Binary files /dev/null and b/taiga/base/static/img/emojis/heavy_minus_sign.png differ
diff --git a/taiga/base/static/img/emojis/heavy_multiplication_x.png b/taiga/base/static/img/emojis/heavy_multiplication_x.png
new file mode 100644
index 00000000..4cf30a90
Binary files /dev/null and b/taiga/base/static/img/emojis/heavy_multiplication_x.png differ
diff --git a/taiga/base/static/img/emojis/heavy_plus_sign.png b/taiga/base/static/img/emojis/heavy_plus_sign.png
new file mode 100644
index 00000000..0a0f2331
Binary files /dev/null and b/taiga/base/static/img/emojis/heavy_plus_sign.png differ
diff --git a/taiga/base/static/img/emojis/helicopter.png b/taiga/base/static/img/emojis/helicopter.png
new file mode 100644
index 00000000..d40615d0
Binary files /dev/null and b/taiga/base/static/img/emojis/helicopter.png differ
diff --git a/taiga/base/static/img/emojis/herb.png b/taiga/base/static/img/emojis/herb.png
new file mode 100644
index 00000000..cd151993
Binary files /dev/null and b/taiga/base/static/img/emojis/herb.png differ
diff --git a/taiga/base/static/img/emojis/hibiscus.png b/taiga/base/static/img/emojis/hibiscus.png
new file mode 100644
index 00000000..6d291b75
Binary files /dev/null and b/taiga/base/static/img/emojis/hibiscus.png differ
diff --git a/taiga/base/static/img/emojis/high_brightness.png b/taiga/base/static/img/emojis/high_brightness.png
new file mode 100644
index 00000000..931856b7
Binary files /dev/null and b/taiga/base/static/img/emojis/high_brightness.png differ
diff --git a/taiga/base/static/img/emojis/high_heel.png b/taiga/base/static/img/emojis/high_heel.png
new file mode 100644
index 00000000..d065a29e
Binary files /dev/null and b/taiga/base/static/img/emojis/high_heel.png differ
diff --git a/taiga/base/static/img/emojis/hocho.png b/taiga/base/static/img/emojis/hocho.png
new file mode 100644
index 00000000..5b3cf0f5
Binary files /dev/null and b/taiga/base/static/img/emojis/hocho.png differ
diff --git a/taiga/base/static/img/emojis/honey_pot.png b/taiga/base/static/img/emojis/honey_pot.png
new file mode 100644
index 00000000..6a30762f
Binary files /dev/null and b/taiga/base/static/img/emojis/honey_pot.png differ
diff --git a/taiga/base/static/img/emojis/honeybee.png b/taiga/base/static/img/emojis/honeybee.png
new file mode 100644
index 00000000..1c5fc5bf
Binary files /dev/null and b/taiga/base/static/img/emojis/honeybee.png differ
diff --git a/taiga/base/static/img/emojis/horse.png b/taiga/base/static/img/emojis/horse.png
new file mode 100644
index 00000000..e0c1f2e8
Binary files /dev/null and b/taiga/base/static/img/emojis/horse.png differ
diff --git a/taiga/base/static/img/emojis/horse_racing.png b/taiga/base/static/img/emojis/horse_racing.png
new file mode 100644
index 00000000..f9d19d2b
Binary files /dev/null and b/taiga/base/static/img/emojis/horse_racing.png differ
diff --git a/taiga/base/static/img/emojis/hospital.png b/taiga/base/static/img/emojis/hospital.png
new file mode 100644
index 00000000..3d5f71ed
Binary files /dev/null and b/taiga/base/static/img/emojis/hospital.png differ
diff --git a/taiga/base/static/img/emojis/hotel.png b/taiga/base/static/img/emojis/hotel.png
new file mode 100644
index 00000000..ee06286c
Binary files /dev/null and b/taiga/base/static/img/emojis/hotel.png differ
diff --git a/taiga/base/static/img/emojis/hotsprings.png b/taiga/base/static/img/emojis/hotsprings.png
new file mode 100644
index 00000000..c3313269
Binary files /dev/null and b/taiga/base/static/img/emojis/hotsprings.png differ
diff --git a/taiga/base/static/img/emojis/hourglass.png b/taiga/base/static/img/emojis/hourglass.png
new file mode 100644
index 00000000..e30b6b61
Binary files /dev/null and b/taiga/base/static/img/emojis/hourglass.png differ
diff --git a/taiga/base/static/img/emojis/hourglass_flowing_sand.png b/taiga/base/static/img/emojis/hourglass_flowing_sand.png
new file mode 100644
index 00000000..9415f644
Binary files /dev/null and b/taiga/base/static/img/emojis/hourglass_flowing_sand.png differ
diff --git a/taiga/base/static/img/emojis/house.png b/taiga/base/static/img/emojis/house.png
new file mode 100644
index 00000000..372dc576
Binary files /dev/null and b/taiga/base/static/img/emojis/house.png differ
diff --git a/taiga/base/static/img/emojis/house_with_garden.png b/taiga/base/static/img/emojis/house_with_garden.png
new file mode 100644
index 00000000..51114ea6
Binary files /dev/null and b/taiga/base/static/img/emojis/house_with_garden.png differ
diff --git a/taiga/base/static/img/emojis/hurtrealbad.png b/taiga/base/static/img/emojis/hurtrealbad.png
new file mode 100644
index 00000000..79c67f50
Binary files /dev/null and b/taiga/base/static/img/emojis/hurtrealbad.png differ
diff --git a/taiga/base/static/img/emojis/hushed.png b/taiga/base/static/img/emojis/hushed.png
new file mode 100644
index 00000000..75007b6f
Binary files /dev/null and b/taiga/base/static/img/emojis/hushed.png differ
diff --git a/taiga/base/static/img/emojis/ice_cream.png b/taiga/base/static/img/emojis/ice_cream.png
new file mode 100644
index 00000000..8911e16c
Binary files /dev/null and b/taiga/base/static/img/emojis/ice_cream.png differ
diff --git a/taiga/base/static/img/emojis/icecream.png b/taiga/base/static/img/emojis/icecream.png
new file mode 100644
index 00000000..33fde29c
Binary files /dev/null and b/taiga/base/static/img/emojis/icecream.png differ
diff --git a/taiga/base/static/img/emojis/id.png b/taiga/base/static/img/emojis/id.png
new file mode 100644
index 00000000..565735db
Binary files /dev/null and b/taiga/base/static/img/emojis/id.png differ
diff --git a/taiga/base/static/img/emojis/ideograph_advantage.png b/taiga/base/static/img/emojis/ideograph_advantage.png
new file mode 100644
index 00000000..76a52f56
Binary files /dev/null and b/taiga/base/static/img/emojis/ideograph_advantage.png differ
diff --git a/taiga/base/static/img/emojis/imp.png b/taiga/base/static/img/emojis/imp.png
new file mode 100644
index 00000000..dc8ca586
Binary files /dev/null and b/taiga/base/static/img/emojis/imp.png differ
diff --git a/taiga/base/static/img/emojis/inbox_tray.png b/taiga/base/static/img/emojis/inbox_tray.png
new file mode 100644
index 00000000..46a67e44
Binary files /dev/null and b/taiga/base/static/img/emojis/inbox_tray.png differ
diff --git a/taiga/base/static/img/emojis/incoming_envelope.png b/taiga/base/static/img/emojis/incoming_envelope.png
new file mode 100644
index 00000000..c43c1e1b
Binary files /dev/null and b/taiga/base/static/img/emojis/incoming_envelope.png differ
diff --git a/taiga/base/static/img/emojis/information_desk_person.png b/taiga/base/static/img/emojis/information_desk_person.png
new file mode 100644
index 00000000..ad75a6c7
Binary files /dev/null and b/taiga/base/static/img/emojis/information_desk_person.png differ
diff --git a/taiga/base/static/img/emojis/information_source.png b/taiga/base/static/img/emojis/information_source.png
new file mode 100644
index 00000000..bc601c25
Binary files /dev/null and b/taiga/base/static/img/emojis/information_source.png differ
diff --git a/taiga/base/static/img/emojis/innocent.png b/taiga/base/static/img/emojis/innocent.png
new file mode 100644
index 00000000..1da31839
Binary files /dev/null and b/taiga/base/static/img/emojis/innocent.png differ
diff --git a/taiga/base/static/img/emojis/interrobang.png b/taiga/base/static/img/emojis/interrobang.png
new file mode 100644
index 00000000..4159e389
Binary files /dev/null and b/taiga/base/static/img/emojis/interrobang.png differ
diff --git a/taiga/base/static/img/emojis/iphone.png b/taiga/base/static/img/emojis/iphone.png
new file mode 100644
index 00000000..1a195563
Binary files /dev/null and b/taiga/base/static/img/emojis/iphone.png differ
diff --git a/taiga/base/static/img/emojis/it.png b/taiga/base/static/img/emojis/it.png
new file mode 100644
index 00000000..93479805
Binary files /dev/null and b/taiga/base/static/img/emojis/it.png differ
diff --git a/taiga/base/static/img/emojis/izakaya_lantern.png b/taiga/base/static/img/emojis/izakaya_lantern.png
new file mode 100644
index 00000000..daeece4b
Binary files /dev/null and b/taiga/base/static/img/emojis/izakaya_lantern.png differ
diff --git a/taiga/base/static/img/emojis/jack_o_lantern.png b/taiga/base/static/img/emojis/jack_o_lantern.png
new file mode 100644
index 00000000..a565b482
Binary files /dev/null and b/taiga/base/static/img/emojis/jack_o_lantern.png differ
diff --git a/taiga/base/static/img/emojis/japan.png b/taiga/base/static/img/emojis/japan.png
new file mode 100644
index 00000000..4ff90791
Binary files /dev/null and b/taiga/base/static/img/emojis/japan.png differ
diff --git a/taiga/base/static/img/emojis/japanese_castle.png b/taiga/base/static/img/emojis/japanese_castle.png
new file mode 100644
index 00000000..4fe4baaa
Binary files /dev/null and b/taiga/base/static/img/emojis/japanese_castle.png differ
diff --git a/taiga/base/static/img/emojis/japanese_goblin.png b/taiga/base/static/img/emojis/japanese_goblin.png
new file mode 100644
index 00000000..5407007c
Binary files /dev/null and b/taiga/base/static/img/emojis/japanese_goblin.png differ
diff --git a/taiga/base/static/img/emojis/japanese_ogre.png b/taiga/base/static/img/emojis/japanese_ogre.png
new file mode 100644
index 00000000..15d319f8
Binary files /dev/null and b/taiga/base/static/img/emojis/japanese_ogre.png differ
diff --git a/taiga/base/static/img/emojis/jeans.png b/taiga/base/static/img/emojis/jeans.png
new file mode 100644
index 00000000..44916328
Binary files /dev/null and b/taiga/base/static/img/emojis/jeans.png differ
diff --git a/taiga/base/static/img/emojis/joy.png b/taiga/base/static/img/emojis/joy.png
new file mode 100644
index 00000000..4e7742a0
Binary files /dev/null and b/taiga/base/static/img/emojis/joy.png differ
diff --git a/taiga/base/static/img/emojis/joy_cat.png b/taiga/base/static/img/emojis/joy_cat.png
new file mode 100644
index 00000000..3b281f69
Binary files /dev/null and b/taiga/base/static/img/emojis/joy_cat.png differ
diff --git a/taiga/base/static/img/emojis/jp.png b/taiga/base/static/img/emojis/jp.png
new file mode 100644
index 00000000..954b20f2
Binary files /dev/null and b/taiga/base/static/img/emojis/jp.png differ
diff --git a/taiga/base/static/img/emojis/key.png b/taiga/base/static/img/emojis/key.png
new file mode 100644
index 00000000..c85ceae3
Binary files /dev/null and b/taiga/base/static/img/emojis/key.png differ
diff --git a/taiga/base/static/img/emojis/keycap_ten.png b/taiga/base/static/img/emojis/keycap_ten.png
new file mode 100644
index 00000000..5bb744a4
Binary files /dev/null and b/taiga/base/static/img/emojis/keycap_ten.png differ
diff --git a/taiga/base/static/img/emojis/kimono.png b/taiga/base/static/img/emojis/kimono.png
new file mode 100644
index 00000000..d44d66ae
Binary files /dev/null and b/taiga/base/static/img/emojis/kimono.png differ
diff --git a/taiga/base/static/img/emojis/kiss.png b/taiga/base/static/img/emojis/kiss.png
new file mode 100644
index 00000000..b12afaae
Binary files /dev/null and b/taiga/base/static/img/emojis/kiss.png differ
diff --git a/taiga/base/static/img/emojis/kissing.png b/taiga/base/static/img/emojis/kissing.png
new file mode 100644
index 00000000..9b4c4c00
Binary files /dev/null and b/taiga/base/static/img/emojis/kissing.png differ
diff --git a/taiga/base/static/img/emojis/kissing_cat.png b/taiga/base/static/img/emojis/kissing_cat.png
new file mode 100644
index 00000000..69e24f9f
Binary files /dev/null and b/taiga/base/static/img/emojis/kissing_cat.png differ
diff --git a/taiga/base/static/img/emojis/kissing_closed_eyes.png b/taiga/base/static/img/emojis/kissing_closed_eyes.png
new file mode 100644
index 00000000..d1aaf59b
Binary files /dev/null and b/taiga/base/static/img/emojis/kissing_closed_eyes.png differ
diff --git a/taiga/base/static/img/emojis/kissing_face.png b/taiga/base/static/img/emojis/kissing_face.png
new file mode 100644
index 00000000..d1aaf59b
Binary files /dev/null and b/taiga/base/static/img/emojis/kissing_face.png differ
diff --git a/taiga/base/static/img/emojis/kissing_heart.png b/taiga/base/static/img/emojis/kissing_heart.png
new file mode 100644
index 00000000..9a96154c
Binary files /dev/null and b/taiga/base/static/img/emojis/kissing_heart.png differ
diff --git a/taiga/base/static/img/emojis/kissing_smiling_eyes.png b/taiga/base/static/img/emojis/kissing_smiling_eyes.png
new file mode 100644
index 00000000..ffb5d834
Binary files /dev/null and b/taiga/base/static/img/emojis/kissing_smiling_eyes.png differ
diff --git a/taiga/base/static/img/emojis/koala.png b/taiga/base/static/img/emojis/koala.png
new file mode 100644
index 00000000..c2500234
Binary files /dev/null and b/taiga/base/static/img/emojis/koala.png differ
diff --git a/taiga/base/static/img/emojis/koko.png b/taiga/base/static/img/emojis/koko.png
new file mode 100644
index 00000000..65937c9f
Binary files /dev/null and b/taiga/base/static/img/emojis/koko.png differ
diff --git a/taiga/base/static/img/emojis/kr.png b/taiga/base/static/img/emojis/kr.png
new file mode 100644
index 00000000..4dad585e
Binary files /dev/null and b/taiga/base/static/img/emojis/kr.png differ
diff --git a/taiga/base/static/img/emojis/large_blue_circle.png b/taiga/base/static/img/emojis/large_blue_circle.png
new file mode 100644
index 00000000..28518554
Binary files /dev/null and b/taiga/base/static/img/emojis/large_blue_circle.png differ
diff --git a/taiga/base/static/img/emojis/large_blue_diamond.png b/taiga/base/static/img/emojis/large_blue_diamond.png
new file mode 100644
index 00000000..86ced7ae
Binary files /dev/null and b/taiga/base/static/img/emojis/large_blue_diamond.png differ
diff --git a/taiga/base/static/img/emojis/large_orange_diamond.png b/taiga/base/static/img/emojis/large_orange_diamond.png
new file mode 100644
index 00000000..9c509f8a
Binary files /dev/null and b/taiga/base/static/img/emojis/large_orange_diamond.png differ
diff --git a/taiga/base/static/img/emojis/last_quarter_moon.png b/taiga/base/static/img/emojis/last_quarter_moon.png
new file mode 100644
index 00000000..368be3f0
Binary files /dev/null and b/taiga/base/static/img/emojis/last_quarter_moon.png differ
diff --git a/taiga/base/static/img/emojis/last_quarter_moon_with_face.png b/taiga/base/static/img/emojis/last_quarter_moon_with_face.png
new file mode 100644
index 00000000..5a890d72
Binary files /dev/null and b/taiga/base/static/img/emojis/last_quarter_moon_with_face.png differ
diff --git a/taiga/base/static/img/emojis/laughing.png b/taiga/base/static/img/emojis/laughing.png
new file mode 100644
index 00000000..5f0703b3
Binary files /dev/null and b/taiga/base/static/img/emojis/laughing.png differ
diff --git a/taiga/base/static/img/emojis/leaves.png b/taiga/base/static/img/emojis/leaves.png
new file mode 100644
index 00000000..6b94eee7
Binary files /dev/null and b/taiga/base/static/img/emojis/leaves.png differ
diff --git a/taiga/base/static/img/emojis/ledger.png b/taiga/base/static/img/emojis/ledger.png
new file mode 100644
index 00000000..006521de
Binary files /dev/null and b/taiga/base/static/img/emojis/ledger.png differ
diff --git a/taiga/base/static/img/emojis/left_luggage.png b/taiga/base/static/img/emojis/left_luggage.png
new file mode 100644
index 00000000..f88e13a4
Binary files /dev/null and b/taiga/base/static/img/emojis/left_luggage.png differ
diff --git a/taiga/base/static/img/emojis/left_right_arrow.png b/taiga/base/static/img/emojis/left_right_arrow.png
new file mode 100644
index 00000000..e69095a3
Binary files /dev/null and b/taiga/base/static/img/emojis/left_right_arrow.png differ
diff --git a/taiga/base/static/img/emojis/leftwards_arrow_with_hook.png b/taiga/base/static/img/emojis/leftwards_arrow_with_hook.png
new file mode 100644
index 00000000..9df9981f
Binary files /dev/null and b/taiga/base/static/img/emojis/leftwards_arrow_with_hook.png differ
diff --git a/taiga/base/static/img/emojis/lemon.png b/taiga/base/static/img/emojis/lemon.png
new file mode 100644
index 00000000..8b32e5fc
Binary files /dev/null and b/taiga/base/static/img/emojis/lemon.png differ
diff --git a/taiga/base/static/img/emojis/leo.png b/taiga/base/static/img/emojis/leo.png
new file mode 100644
index 00000000..df943ee4
Binary files /dev/null and b/taiga/base/static/img/emojis/leo.png differ
diff --git a/taiga/base/static/img/emojis/leopard.png b/taiga/base/static/img/emojis/leopard.png
new file mode 100644
index 00000000..e5fd37b1
Binary files /dev/null and b/taiga/base/static/img/emojis/leopard.png differ
diff --git a/taiga/base/static/img/emojis/libra.png b/taiga/base/static/img/emojis/libra.png
new file mode 100644
index 00000000..1e31fcbb
Binary files /dev/null and b/taiga/base/static/img/emojis/libra.png differ
diff --git a/taiga/base/static/img/emojis/light_rail.png b/taiga/base/static/img/emojis/light_rail.png
new file mode 100644
index 00000000..67bb5798
Binary files /dev/null and b/taiga/base/static/img/emojis/light_rail.png differ
diff --git a/taiga/base/static/img/emojis/link.png b/taiga/base/static/img/emojis/link.png
new file mode 100644
index 00000000..4ebf1ca5
Binary files /dev/null and b/taiga/base/static/img/emojis/link.png differ
diff --git a/taiga/base/static/img/emojis/lips.png b/taiga/base/static/img/emojis/lips.png
new file mode 100644
index 00000000..bbbdec69
Binary files /dev/null and b/taiga/base/static/img/emojis/lips.png differ
diff --git a/taiga/base/static/img/emojis/lipstick.png b/taiga/base/static/img/emojis/lipstick.png
new file mode 100644
index 00000000..6cd51937
Binary files /dev/null and b/taiga/base/static/img/emojis/lipstick.png differ
diff --git a/taiga/base/static/img/emojis/lock.png b/taiga/base/static/img/emojis/lock.png
new file mode 100644
index 00000000..1ab34274
Binary files /dev/null and b/taiga/base/static/img/emojis/lock.png differ
diff --git a/taiga/base/static/img/emojis/lock_with_ink_pen.png b/taiga/base/static/img/emojis/lock_with_ink_pen.png
new file mode 100644
index 00000000..b559b6dd
Binary files /dev/null and b/taiga/base/static/img/emojis/lock_with_ink_pen.png differ
diff --git a/taiga/base/static/img/emojis/lollipop.png b/taiga/base/static/img/emojis/lollipop.png
new file mode 100644
index 00000000..c6b1f3b1
Binary files /dev/null and b/taiga/base/static/img/emojis/lollipop.png differ
diff --git a/taiga/base/static/img/emojis/loop.png b/taiga/base/static/img/emojis/loop.png
new file mode 100644
index 00000000..9c703423
Binary files /dev/null and b/taiga/base/static/img/emojis/loop.png differ
diff --git a/taiga/base/static/img/emojis/loudspeaker.png b/taiga/base/static/img/emojis/loudspeaker.png
new file mode 100644
index 00000000..54aa6b2b
Binary files /dev/null and b/taiga/base/static/img/emojis/loudspeaker.png differ
diff --git a/taiga/base/static/img/emojis/love_hotel.png b/taiga/base/static/img/emojis/love_hotel.png
new file mode 100644
index 00000000..4bec1023
Binary files /dev/null and b/taiga/base/static/img/emojis/love_hotel.png differ
diff --git a/taiga/base/static/img/emojis/love_letter.png b/taiga/base/static/img/emojis/love_letter.png
new file mode 100644
index 00000000..b599a606
Binary files /dev/null and b/taiga/base/static/img/emojis/love_letter.png differ
diff --git a/taiga/base/static/img/emojis/low_brightness.png b/taiga/base/static/img/emojis/low_brightness.png
new file mode 100644
index 00000000..91dcc0db
Binary files /dev/null and b/taiga/base/static/img/emojis/low_brightness.png differ
diff --git a/taiga/base/static/img/emojis/m.png b/taiga/base/static/img/emojis/m.png
new file mode 100644
index 00000000..2002b774
Binary files /dev/null and b/taiga/base/static/img/emojis/m.png differ
diff --git a/taiga/base/static/img/emojis/mag.png b/taiga/base/static/img/emojis/mag.png
new file mode 100644
index 00000000..ae981d66
Binary files /dev/null and b/taiga/base/static/img/emojis/mag.png differ
diff --git a/taiga/base/static/img/emojis/mag_right.png b/taiga/base/static/img/emojis/mag_right.png
new file mode 100644
index 00000000..bf8cf493
Binary files /dev/null and b/taiga/base/static/img/emojis/mag_right.png differ
diff --git a/taiga/base/static/img/emojis/mahjong.png b/taiga/base/static/img/emojis/mahjong.png
new file mode 100644
index 00000000..0fd6e6d6
Binary files /dev/null and b/taiga/base/static/img/emojis/mahjong.png differ
diff --git a/taiga/base/static/img/emojis/mailbox.png b/taiga/base/static/img/emojis/mailbox.png
new file mode 100644
index 00000000..5291564e
Binary files /dev/null and b/taiga/base/static/img/emojis/mailbox.png differ
diff --git a/taiga/base/static/img/emojis/mailbox_closed.png b/taiga/base/static/img/emojis/mailbox_closed.png
new file mode 100644
index 00000000..d1b07255
Binary files /dev/null and b/taiga/base/static/img/emojis/mailbox_closed.png differ
diff --git a/taiga/base/static/img/emojis/mailbox_with_mail.png b/taiga/base/static/img/emojis/mailbox_with_mail.png
new file mode 100644
index 00000000..7cf01711
Binary files /dev/null and b/taiga/base/static/img/emojis/mailbox_with_mail.png differ
diff --git a/taiga/base/static/img/emojis/mailbox_with_no_mail.png b/taiga/base/static/img/emojis/mailbox_with_no_mail.png
new file mode 100644
index 00000000..b3d41b3c
Binary files /dev/null and b/taiga/base/static/img/emojis/mailbox_with_no_mail.png differ
diff --git a/taiga/base/static/img/emojis/man.png b/taiga/base/static/img/emojis/man.png
new file mode 100644
index 00000000..3829211d
Binary files /dev/null and b/taiga/base/static/img/emojis/man.png differ
diff --git a/taiga/base/static/img/emojis/man_with_gua_pi_mao.png b/taiga/base/static/img/emojis/man_with_gua_pi_mao.png
new file mode 100644
index 00000000..d59ca4dc
Binary files /dev/null and b/taiga/base/static/img/emojis/man_with_gua_pi_mao.png differ
diff --git a/taiga/base/static/img/emojis/man_with_turban.png b/taiga/base/static/img/emojis/man_with_turban.png
new file mode 100644
index 00000000..96d01c63
Binary files /dev/null and b/taiga/base/static/img/emojis/man_with_turban.png differ
diff --git a/taiga/base/static/img/emojis/mans_shoe.png b/taiga/base/static/img/emojis/mans_shoe.png
new file mode 100644
index 00000000..31459aa9
Binary files /dev/null and b/taiga/base/static/img/emojis/mans_shoe.png differ
diff --git a/taiga/base/static/img/emojis/maple_leaf.png b/taiga/base/static/img/emojis/maple_leaf.png
new file mode 100644
index 00000000..48cc9b22
Binary files /dev/null and b/taiga/base/static/img/emojis/maple_leaf.png differ
diff --git a/taiga/base/static/img/emojis/mask.png b/taiga/base/static/img/emojis/mask.png
new file mode 100644
index 00000000..acc4c47c
Binary files /dev/null and b/taiga/base/static/img/emojis/mask.png differ
diff --git a/taiga/base/static/img/emojis/massage.png b/taiga/base/static/img/emojis/massage.png
new file mode 100644
index 00000000..8445b726
Binary files /dev/null and b/taiga/base/static/img/emojis/massage.png differ
diff --git a/taiga/base/static/img/emojis/meat_on_bone.png b/taiga/base/static/img/emojis/meat_on_bone.png
new file mode 100644
index 00000000..689697cb
Binary files /dev/null and b/taiga/base/static/img/emojis/meat_on_bone.png differ
diff --git a/taiga/base/static/img/emojis/mega.png b/taiga/base/static/img/emojis/mega.png
new file mode 100644
index 00000000..c41ef717
Binary files /dev/null and b/taiga/base/static/img/emojis/mega.png differ
diff --git a/taiga/base/static/img/emojis/melon.png b/taiga/base/static/img/emojis/melon.png
new file mode 100644
index 00000000..3dcce4ed
Binary files /dev/null and b/taiga/base/static/img/emojis/melon.png differ
diff --git a/taiga/base/static/img/emojis/memo.png b/taiga/base/static/img/emojis/memo.png
new file mode 100644
index 00000000..e0e7b956
Binary files /dev/null and b/taiga/base/static/img/emojis/memo.png differ
diff --git a/taiga/base/static/img/emojis/mens.png b/taiga/base/static/img/emojis/mens.png
new file mode 100644
index 00000000..1ece8be8
Binary files /dev/null and b/taiga/base/static/img/emojis/mens.png differ
diff --git a/taiga/base/static/img/emojis/metal.png b/taiga/base/static/img/emojis/metal.png
new file mode 100644
index 00000000..bc27d0a0
Binary files /dev/null and b/taiga/base/static/img/emojis/metal.png differ
diff --git a/taiga/base/static/img/emojis/metro.png b/taiga/base/static/img/emojis/metro.png
new file mode 100644
index 00000000..095268c8
Binary files /dev/null and b/taiga/base/static/img/emojis/metro.png differ
diff --git a/taiga/base/static/img/emojis/microphone.png b/taiga/base/static/img/emojis/microphone.png
new file mode 100644
index 00000000..95518a17
Binary files /dev/null and b/taiga/base/static/img/emojis/microphone.png differ
diff --git a/taiga/base/static/img/emojis/microscope.png b/taiga/base/static/img/emojis/microscope.png
new file mode 100644
index 00000000..e2514a18
Binary files /dev/null and b/taiga/base/static/img/emojis/microscope.png differ
diff --git a/taiga/base/static/img/emojis/milky_way.png b/taiga/base/static/img/emojis/milky_way.png
new file mode 100644
index 00000000..7597c5f1
Binary files /dev/null and b/taiga/base/static/img/emojis/milky_way.png differ
diff --git a/taiga/base/static/img/emojis/minibus.png b/taiga/base/static/img/emojis/minibus.png
new file mode 100644
index 00000000..8c3b91c1
Binary files /dev/null and b/taiga/base/static/img/emojis/minibus.png differ
diff --git a/taiga/base/static/img/emojis/minidisc.png b/taiga/base/static/img/emojis/minidisc.png
new file mode 100644
index 00000000..fc885dbe
Binary files /dev/null and b/taiga/base/static/img/emojis/minidisc.png differ
diff --git a/taiga/base/static/img/emojis/mobile_phone_off.png b/taiga/base/static/img/emojis/mobile_phone_off.png
new file mode 100644
index 00000000..d103b4a9
Binary files /dev/null and b/taiga/base/static/img/emojis/mobile_phone_off.png differ
diff --git a/taiga/base/static/img/emojis/money_with_wings.png b/taiga/base/static/img/emojis/money_with_wings.png
new file mode 100644
index 00000000..f3c286f2
Binary files /dev/null and b/taiga/base/static/img/emojis/money_with_wings.png differ
diff --git a/taiga/base/static/img/emojis/moneybag.png b/taiga/base/static/img/emojis/moneybag.png
new file mode 100644
index 00000000..8d6ceb88
Binary files /dev/null and b/taiga/base/static/img/emojis/moneybag.png differ
diff --git a/taiga/base/static/img/emojis/monkey.png b/taiga/base/static/img/emojis/monkey.png
new file mode 100644
index 00000000..6778857e
Binary files /dev/null and b/taiga/base/static/img/emojis/monkey.png differ
diff --git a/taiga/base/static/img/emojis/monkey_face.png b/taiga/base/static/img/emojis/monkey_face.png
new file mode 100644
index 00000000..c6762613
Binary files /dev/null and b/taiga/base/static/img/emojis/monkey_face.png differ
diff --git a/taiga/base/static/img/emojis/monorail.png b/taiga/base/static/img/emojis/monorail.png
new file mode 100644
index 00000000..6fb2b483
Binary files /dev/null and b/taiga/base/static/img/emojis/monorail.png differ
diff --git a/taiga/base/static/img/emojis/moon.png b/taiga/base/static/img/emojis/moon.png
new file mode 100644
index 00000000..53abe6a4
Binary files /dev/null and b/taiga/base/static/img/emojis/moon.png differ
diff --git a/taiga/base/static/img/emojis/mortar_board.png b/taiga/base/static/img/emojis/mortar_board.png
new file mode 100644
index 00000000..4173c9ae
Binary files /dev/null and b/taiga/base/static/img/emojis/mortar_board.png differ
diff --git a/taiga/base/static/img/emojis/mount_fuji.png b/taiga/base/static/img/emojis/mount_fuji.png
new file mode 100644
index 00000000..6b4004c5
Binary files /dev/null and b/taiga/base/static/img/emojis/mount_fuji.png differ
diff --git a/taiga/base/static/img/emojis/mountain_bicyclist.png b/taiga/base/static/img/emojis/mountain_bicyclist.png
new file mode 100644
index 00000000..9a212679
Binary files /dev/null and b/taiga/base/static/img/emojis/mountain_bicyclist.png differ
diff --git a/taiga/base/static/img/emojis/mountain_cableway.png b/taiga/base/static/img/emojis/mountain_cableway.png
new file mode 100644
index 00000000..947fcd85
Binary files /dev/null and b/taiga/base/static/img/emojis/mountain_cableway.png differ
diff --git a/taiga/base/static/img/emojis/mountain_railway.png b/taiga/base/static/img/emojis/mountain_railway.png
new file mode 100644
index 00000000..b252c0cc
Binary files /dev/null and b/taiga/base/static/img/emojis/mountain_railway.png differ
diff --git a/taiga/base/static/img/emojis/mouse.png b/taiga/base/static/img/emojis/mouse.png
new file mode 100644
index 00000000..38cbc079
Binary files /dev/null and b/taiga/base/static/img/emojis/mouse.png differ
diff --git a/taiga/base/static/img/emojis/mouse2.png b/taiga/base/static/img/emojis/mouse2.png
new file mode 100644
index 00000000..45122ed2
Binary files /dev/null and b/taiga/base/static/img/emojis/mouse2.png differ
diff --git a/taiga/base/static/img/emojis/movie_camera.png b/taiga/base/static/img/emojis/movie_camera.png
new file mode 100644
index 00000000..bffa60d9
Binary files /dev/null and b/taiga/base/static/img/emojis/movie_camera.png differ
diff --git a/taiga/base/static/img/emojis/moyai.png b/taiga/base/static/img/emojis/moyai.png
new file mode 100644
index 00000000..e788b256
Binary files /dev/null and b/taiga/base/static/img/emojis/moyai.png differ
diff --git a/taiga/base/static/img/emojis/muscle.png b/taiga/base/static/img/emojis/muscle.png
new file mode 100644
index 00000000..884d289d
Binary files /dev/null and b/taiga/base/static/img/emojis/muscle.png differ
diff --git a/taiga/base/static/img/emojis/mushroom.png b/taiga/base/static/img/emojis/mushroom.png
new file mode 100644
index 00000000..0bed51b2
Binary files /dev/null and b/taiga/base/static/img/emojis/mushroom.png differ
diff --git a/taiga/base/static/img/emojis/musical_keyboard.png b/taiga/base/static/img/emojis/musical_keyboard.png
new file mode 100644
index 00000000..aad745ad
Binary files /dev/null and b/taiga/base/static/img/emojis/musical_keyboard.png differ
diff --git a/taiga/base/static/img/emojis/musical_note.png b/taiga/base/static/img/emojis/musical_note.png
new file mode 100644
index 00000000..a78737de
Binary files /dev/null and b/taiga/base/static/img/emojis/musical_note.png differ
diff --git a/taiga/base/static/img/emojis/musical_score.png b/taiga/base/static/img/emojis/musical_score.png
new file mode 100644
index 00000000..082c2b2a
Binary files /dev/null and b/taiga/base/static/img/emojis/musical_score.png differ
diff --git a/taiga/base/static/img/emojis/mute.png b/taiga/base/static/img/emojis/mute.png
new file mode 100644
index 00000000..5638596f
Binary files /dev/null and b/taiga/base/static/img/emojis/mute.png differ
diff --git a/taiga/base/static/img/emojis/nail_care.png b/taiga/base/static/img/emojis/nail_care.png
new file mode 100644
index 00000000..2734aee7
Binary files /dev/null and b/taiga/base/static/img/emojis/nail_care.png differ
diff --git a/taiga/base/static/img/emojis/name_badge.png b/taiga/base/static/img/emojis/name_badge.png
new file mode 100644
index 00000000..ffa60459
Binary files /dev/null and b/taiga/base/static/img/emojis/name_badge.png differ
diff --git a/taiga/base/static/img/emojis/neckbeard.png b/taiga/base/static/img/emojis/neckbeard.png
new file mode 100644
index 00000000..b52ce29f
Binary files /dev/null and b/taiga/base/static/img/emojis/neckbeard.png differ
diff --git a/taiga/base/static/img/emojis/necktie.png b/taiga/base/static/img/emojis/necktie.png
new file mode 100644
index 00000000..52cd5997
Binary files /dev/null and b/taiga/base/static/img/emojis/necktie.png differ
diff --git a/taiga/base/static/img/emojis/negative_squared_cross_mark.png b/taiga/base/static/img/emojis/negative_squared_cross_mark.png
new file mode 100644
index 00000000..3c2f7e46
Binary files /dev/null and b/taiga/base/static/img/emojis/negative_squared_cross_mark.png differ
diff --git a/taiga/base/static/img/emojis/neutral_face.png b/taiga/base/static/img/emojis/neutral_face.png
new file mode 100644
index 00000000..cad1039f
Binary files /dev/null and b/taiga/base/static/img/emojis/neutral_face.png differ
diff --git a/taiga/base/static/img/emojis/new.png b/taiga/base/static/img/emojis/new.png
new file mode 100644
index 00000000..363a1758
Binary files /dev/null and b/taiga/base/static/img/emojis/new.png differ
diff --git a/taiga/base/static/img/emojis/new_moon.png b/taiga/base/static/img/emojis/new_moon.png
new file mode 100644
index 00000000..93859c36
Binary files /dev/null and b/taiga/base/static/img/emojis/new_moon.png differ
diff --git a/taiga/base/static/img/emojis/new_moon_with_face.png b/taiga/base/static/img/emojis/new_moon_with_face.png
new file mode 100644
index 00000000..3184116d
Binary files /dev/null and b/taiga/base/static/img/emojis/new_moon_with_face.png differ
diff --git a/taiga/base/static/img/emojis/newspaper.png b/taiga/base/static/img/emojis/newspaper.png
new file mode 100644
index 00000000..b181864e
Binary files /dev/null and b/taiga/base/static/img/emojis/newspaper.png differ
diff --git a/taiga/base/static/img/emojis/ng.png b/taiga/base/static/img/emojis/ng.png
new file mode 100644
index 00000000..b1ed5ab0
Binary files /dev/null and b/taiga/base/static/img/emojis/ng.png differ
diff --git a/taiga/base/static/img/emojis/nine.png b/taiga/base/static/img/emojis/nine.png
new file mode 100644
index 00000000..c7de1bc2
Binary files /dev/null and b/taiga/base/static/img/emojis/nine.png differ
diff --git a/taiga/base/static/img/emojis/no_bell.png b/taiga/base/static/img/emojis/no_bell.png
new file mode 100644
index 00000000..f8dec782
Binary files /dev/null and b/taiga/base/static/img/emojis/no_bell.png differ
diff --git a/taiga/base/static/img/emojis/no_bicycles.png b/taiga/base/static/img/emojis/no_bicycles.png
new file mode 100644
index 00000000..f5d714f8
Binary files /dev/null and b/taiga/base/static/img/emojis/no_bicycles.png differ
diff --git a/taiga/base/static/img/emojis/no_entry.png b/taiga/base/static/img/emojis/no_entry.png
new file mode 100644
index 00000000..62dd70f0
Binary files /dev/null and b/taiga/base/static/img/emojis/no_entry.png differ
diff --git a/taiga/base/static/img/emojis/no_entry_sign.png b/taiga/base/static/img/emojis/no_entry_sign.png
new file mode 100644
index 00000000..f2e7374b
Binary files /dev/null and b/taiga/base/static/img/emojis/no_entry_sign.png differ
diff --git a/taiga/base/static/img/emojis/no_good.png b/taiga/base/static/img/emojis/no_good.png
new file mode 100644
index 00000000..6f0e472a
Binary files /dev/null and b/taiga/base/static/img/emojis/no_good.png differ
diff --git a/taiga/base/static/img/emojis/no_mobile_phones.png b/taiga/base/static/img/emojis/no_mobile_phones.png
new file mode 100644
index 00000000..353e6269
Binary files /dev/null and b/taiga/base/static/img/emojis/no_mobile_phones.png differ
diff --git a/taiga/base/static/img/emojis/no_mouth.png b/taiga/base/static/img/emojis/no_mouth.png
new file mode 100644
index 00000000..27897a98
Binary files /dev/null and b/taiga/base/static/img/emojis/no_mouth.png differ
diff --git a/taiga/base/static/img/emojis/no_pedestrians.png b/taiga/base/static/img/emojis/no_pedestrians.png
new file mode 100644
index 00000000..feca9fe8
Binary files /dev/null and b/taiga/base/static/img/emojis/no_pedestrians.png differ
diff --git a/taiga/base/static/img/emojis/no_smoking.png b/taiga/base/static/img/emojis/no_smoking.png
new file mode 100644
index 00000000..7d0d13ea
Binary files /dev/null and b/taiga/base/static/img/emojis/no_smoking.png differ
diff --git a/taiga/base/static/img/emojis/non-potable_water.png b/taiga/base/static/img/emojis/non-potable_water.png
new file mode 100644
index 00000000..430fa60c
Binary files /dev/null and b/taiga/base/static/img/emojis/non-potable_water.png differ
diff --git a/taiga/base/static/img/emojis/nose.png b/taiga/base/static/img/emojis/nose.png
new file mode 100644
index 00000000..567ff49a
Binary files /dev/null and b/taiga/base/static/img/emojis/nose.png differ
diff --git a/taiga/base/static/img/emojis/notebook.png b/taiga/base/static/img/emojis/notebook.png
new file mode 100644
index 00000000..554b4760
Binary files /dev/null and b/taiga/base/static/img/emojis/notebook.png differ
diff --git a/taiga/base/static/img/emojis/notebook_with_decorative_cover.png b/taiga/base/static/img/emojis/notebook_with_decorative_cover.png
new file mode 100644
index 00000000..7c95dae4
Binary files /dev/null and b/taiga/base/static/img/emojis/notebook_with_decorative_cover.png differ
diff --git a/taiga/base/static/img/emojis/notes.png b/taiga/base/static/img/emojis/notes.png
new file mode 100644
index 00000000..5b072615
Binary files /dev/null and b/taiga/base/static/img/emojis/notes.png differ
diff --git a/taiga/base/static/img/emojis/nut_and_bolt.png b/taiga/base/static/img/emojis/nut_and_bolt.png
new file mode 100644
index 00000000..dd0f75a1
Binary files /dev/null and b/taiga/base/static/img/emojis/nut_and_bolt.png differ
diff --git a/taiga/base/static/img/emojis/o.png b/taiga/base/static/img/emojis/o.png
new file mode 100644
index 00000000..2814dd73
Binary files /dev/null and b/taiga/base/static/img/emojis/o.png differ
diff --git a/taiga/base/static/img/emojis/o2.png b/taiga/base/static/img/emojis/o2.png
new file mode 100644
index 00000000..6377cb13
Binary files /dev/null and b/taiga/base/static/img/emojis/o2.png differ
diff --git a/taiga/base/static/img/emojis/ocean.png b/taiga/base/static/img/emojis/ocean.png
new file mode 100644
index 00000000..7b095332
Binary files /dev/null and b/taiga/base/static/img/emojis/ocean.png differ
diff --git a/taiga/base/static/img/emojis/octocat.png b/taiga/base/static/img/emojis/octocat.png
new file mode 100644
index 00000000..bf699257
Binary files /dev/null and b/taiga/base/static/img/emojis/octocat.png differ
diff --git a/taiga/base/static/img/emojis/octopus.png b/taiga/base/static/img/emojis/octopus.png
new file mode 100644
index 00000000..1422bf2a
Binary files /dev/null and b/taiga/base/static/img/emojis/octopus.png differ
diff --git a/taiga/base/static/img/emojis/oden.png b/taiga/base/static/img/emojis/oden.png
new file mode 100644
index 00000000..49f1200c
Binary files /dev/null and b/taiga/base/static/img/emojis/oden.png differ
diff --git a/taiga/base/static/img/emojis/office.png b/taiga/base/static/img/emojis/office.png
new file mode 100644
index 00000000..897cbcc4
Binary files /dev/null and b/taiga/base/static/img/emojis/office.png differ
diff --git a/taiga/base/static/img/emojis/ok.png b/taiga/base/static/img/emojis/ok.png
new file mode 100644
index 00000000..e53905ad
Binary files /dev/null and b/taiga/base/static/img/emojis/ok.png differ
diff --git a/taiga/base/static/img/emojis/ok_hand.png b/taiga/base/static/img/emojis/ok_hand.png
new file mode 100644
index 00000000..aaa5a873
Binary files /dev/null and b/taiga/base/static/img/emojis/ok_hand.png differ
diff --git a/taiga/base/static/img/emojis/ok_woman.png b/taiga/base/static/img/emojis/ok_woman.png
new file mode 100644
index 00000000..83a61949
Binary files /dev/null and b/taiga/base/static/img/emojis/ok_woman.png differ
diff --git a/taiga/base/static/img/emojis/older_man.png b/taiga/base/static/img/emojis/older_man.png
new file mode 100644
index 00000000..723ec0fb
Binary files /dev/null and b/taiga/base/static/img/emojis/older_man.png differ
diff --git a/taiga/base/static/img/emojis/older_woman.png b/taiga/base/static/img/emojis/older_woman.png
new file mode 100644
index 00000000..379069f0
Binary files /dev/null and b/taiga/base/static/img/emojis/older_woman.png differ
diff --git a/taiga/base/static/img/emojis/on.png b/taiga/base/static/img/emojis/on.png
new file mode 100644
index 00000000..667baba5
Binary files /dev/null and b/taiga/base/static/img/emojis/on.png differ
diff --git a/taiga/base/static/img/emojis/oncoming_automobile.png b/taiga/base/static/img/emojis/oncoming_automobile.png
new file mode 100644
index 00000000..9a47ada5
Binary files /dev/null and b/taiga/base/static/img/emojis/oncoming_automobile.png differ
diff --git a/taiga/base/static/img/emojis/oncoming_bus.png b/taiga/base/static/img/emojis/oncoming_bus.png
new file mode 100644
index 00000000..a0be27a7
Binary files /dev/null and b/taiga/base/static/img/emojis/oncoming_bus.png differ
diff --git a/taiga/base/static/img/emojis/oncoming_police_car.png b/taiga/base/static/img/emojis/oncoming_police_car.png
new file mode 100644
index 00000000..9e322b4c
Binary files /dev/null and b/taiga/base/static/img/emojis/oncoming_police_car.png differ
diff --git a/taiga/base/static/img/emojis/oncoming_taxi.png b/taiga/base/static/img/emojis/oncoming_taxi.png
new file mode 100644
index 00000000..3b2fe37c
Binary files /dev/null and b/taiga/base/static/img/emojis/oncoming_taxi.png differ
diff --git a/taiga/base/static/img/emojis/one.png b/taiga/base/static/img/emojis/one.png
new file mode 100644
index 00000000..b95c8fec
Binary files /dev/null and b/taiga/base/static/img/emojis/one.png differ
diff --git a/taiga/base/static/img/emojis/open_file_folder.png b/taiga/base/static/img/emojis/open_file_folder.png
new file mode 100644
index 00000000..efc3943f
Binary files /dev/null and b/taiga/base/static/img/emojis/open_file_folder.png differ
diff --git a/taiga/base/static/img/emojis/open_hands.png b/taiga/base/static/img/emojis/open_hands.png
new file mode 100644
index 00000000..3a99a3c8
Binary files /dev/null and b/taiga/base/static/img/emojis/open_hands.png differ
diff --git a/taiga/base/static/img/emojis/open_mouth.png b/taiga/base/static/img/emojis/open_mouth.png
new file mode 100644
index 00000000..203d4668
Binary files /dev/null and b/taiga/base/static/img/emojis/open_mouth.png differ
diff --git a/taiga/base/static/img/emojis/ophiuchus.png b/taiga/base/static/img/emojis/ophiuchus.png
new file mode 100644
index 00000000..10e6372a
Binary files /dev/null and b/taiga/base/static/img/emojis/ophiuchus.png differ
diff --git a/taiga/base/static/img/emojis/orange_book.png b/taiga/base/static/img/emojis/orange_book.png
new file mode 100644
index 00000000..18fa5f83
Binary files /dev/null and b/taiga/base/static/img/emojis/orange_book.png differ
diff --git a/taiga/base/static/img/emojis/outbox_tray.png b/taiga/base/static/img/emojis/outbox_tray.png
new file mode 100644
index 00000000..50e7788f
Binary files /dev/null and b/taiga/base/static/img/emojis/outbox_tray.png differ
diff --git a/taiga/base/static/img/emojis/ox.png b/taiga/base/static/img/emojis/ox.png
new file mode 100644
index 00000000..901276d8
Binary files /dev/null and b/taiga/base/static/img/emojis/ox.png differ
diff --git a/taiga/base/static/img/emojis/page_facing_up.png b/taiga/base/static/img/emojis/page_facing_up.png
new file mode 100644
index 00000000..87067325
Binary files /dev/null and b/taiga/base/static/img/emojis/page_facing_up.png differ
diff --git a/taiga/base/static/img/emojis/page_with_curl.png b/taiga/base/static/img/emojis/page_with_curl.png
new file mode 100644
index 00000000..9c78559c
Binary files /dev/null and b/taiga/base/static/img/emojis/page_with_curl.png differ
diff --git a/taiga/base/static/img/emojis/pager.png b/taiga/base/static/img/emojis/pager.png
new file mode 100644
index 00000000..514e06fe
Binary files /dev/null and b/taiga/base/static/img/emojis/pager.png differ
diff --git a/taiga/base/static/img/emojis/palm_tree.png b/taiga/base/static/img/emojis/palm_tree.png
new file mode 100644
index 00000000..b0c6728c
Binary files /dev/null and b/taiga/base/static/img/emojis/palm_tree.png differ
diff --git a/taiga/base/static/img/emojis/panda_face.png b/taiga/base/static/img/emojis/panda_face.png
new file mode 100644
index 00000000..f8e350af
Binary files /dev/null and b/taiga/base/static/img/emojis/panda_face.png differ
diff --git a/taiga/base/static/img/emojis/paperclip.png b/taiga/base/static/img/emojis/paperclip.png
new file mode 100644
index 00000000..c58f7879
Binary files /dev/null and b/taiga/base/static/img/emojis/paperclip.png differ
diff --git a/taiga/base/static/img/emojis/parking.png b/taiga/base/static/img/emojis/parking.png
new file mode 100644
index 00000000..7f5244c8
Binary files /dev/null and b/taiga/base/static/img/emojis/parking.png differ
diff --git a/taiga/base/static/img/emojis/part_alternation_mark.png b/taiga/base/static/img/emojis/part_alternation_mark.png
new file mode 100644
index 00000000..51ebc42a
Binary files /dev/null and b/taiga/base/static/img/emojis/part_alternation_mark.png differ
diff --git a/taiga/base/static/img/emojis/partly_sunny.png b/taiga/base/static/img/emojis/partly_sunny.png
new file mode 100644
index 00000000..f64b8619
Binary files /dev/null and b/taiga/base/static/img/emojis/partly_sunny.png differ
diff --git a/taiga/base/static/img/emojis/passport_control.png b/taiga/base/static/img/emojis/passport_control.png
new file mode 100644
index 00000000..be212c09
Binary files /dev/null and b/taiga/base/static/img/emojis/passport_control.png differ
diff --git a/taiga/base/static/img/emojis/paw_prints.png b/taiga/base/static/img/emojis/paw_prints.png
new file mode 100644
index 00000000..bbefe6b0
Binary files /dev/null and b/taiga/base/static/img/emojis/paw_prints.png differ
diff --git a/taiga/base/static/img/emojis/peach.png b/taiga/base/static/img/emojis/peach.png
new file mode 100644
index 00000000..b38ffa12
Binary files /dev/null and b/taiga/base/static/img/emojis/peach.png differ
diff --git a/taiga/base/static/img/emojis/pear.png b/taiga/base/static/img/emojis/pear.png
new file mode 100644
index 00000000..b4bda473
Binary files /dev/null and b/taiga/base/static/img/emojis/pear.png differ
diff --git a/taiga/base/static/img/emojis/pencil.png b/taiga/base/static/img/emojis/pencil.png
new file mode 100644
index 00000000..e0e7b956
Binary files /dev/null and b/taiga/base/static/img/emojis/pencil.png differ
diff --git a/taiga/base/static/img/emojis/pencil2.png b/taiga/base/static/img/emojis/pencil2.png
new file mode 100644
index 00000000..15f056c1
Binary files /dev/null and b/taiga/base/static/img/emojis/pencil2.png differ
diff --git a/taiga/base/static/img/emojis/penguin.png b/taiga/base/static/img/emojis/penguin.png
new file mode 100644
index 00000000..26924685
Binary files /dev/null and b/taiga/base/static/img/emojis/penguin.png differ
diff --git a/taiga/base/static/img/emojis/pensive.png b/taiga/base/static/img/emojis/pensive.png
new file mode 100644
index 00000000..91834a9e
Binary files /dev/null and b/taiga/base/static/img/emojis/pensive.png differ
diff --git a/taiga/base/static/img/emojis/performing_arts.png b/taiga/base/static/img/emojis/performing_arts.png
new file mode 100644
index 00000000..79b62aba
Binary files /dev/null and b/taiga/base/static/img/emojis/performing_arts.png differ
diff --git a/taiga/base/static/img/emojis/persevere.png b/taiga/base/static/img/emojis/persevere.png
new file mode 100644
index 00000000..e6546a5e
Binary files /dev/null and b/taiga/base/static/img/emojis/persevere.png differ
diff --git a/taiga/base/static/img/emojis/person_frowning.png b/taiga/base/static/img/emojis/person_frowning.png
new file mode 100644
index 00000000..0147f35a
Binary files /dev/null and b/taiga/base/static/img/emojis/person_frowning.png differ
diff --git a/taiga/base/static/img/emojis/person_with_blond_hair.png b/taiga/base/static/img/emojis/person_with_blond_hair.png
new file mode 100644
index 00000000..6a39504d
Binary files /dev/null and b/taiga/base/static/img/emojis/person_with_blond_hair.png differ
diff --git a/taiga/base/static/img/emojis/person_with_pouting_face.png b/taiga/base/static/img/emojis/person_with_pouting_face.png
new file mode 100644
index 00000000..2f5dc2ea
Binary files /dev/null and b/taiga/base/static/img/emojis/person_with_pouting_face.png differ
diff --git a/taiga/base/static/img/emojis/phone.png b/taiga/base/static/img/emojis/phone.png
new file mode 100644
index 00000000..ce0bc5df
Binary files /dev/null and b/taiga/base/static/img/emojis/phone.png differ
diff --git a/taiga/base/static/img/emojis/pig.png b/taiga/base/static/img/emojis/pig.png
new file mode 100644
index 00000000..1170a54e
Binary files /dev/null and b/taiga/base/static/img/emojis/pig.png differ
diff --git a/taiga/base/static/img/emojis/pig2.png b/taiga/base/static/img/emojis/pig2.png
new file mode 100644
index 00000000..d041aaf4
Binary files /dev/null and b/taiga/base/static/img/emojis/pig2.png differ
diff --git a/taiga/base/static/img/emojis/pig_nose.png b/taiga/base/static/img/emojis/pig_nose.png
new file mode 100644
index 00000000..6b1a3ed9
Binary files /dev/null and b/taiga/base/static/img/emojis/pig_nose.png differ
diff --git a/taiga/base/static/img/emojis/pill.png b/taiga/base/static/img/emojis/pill.png
new file mode 100644
index 00000000..8bb7d6af
Binary files /dev/null and b/taiga/base/static/img/emojis/pill.png differ
diff --git a/taiga/base/static/img/emojis/pineapple.png b/taiga/base/static/img/emojis/pineapple.png
new file mode 100644
index 00000000..23b8790b
Binary files /dev/null and b/taiga/base/static/img/emojis/pineapple.png differ
diff --git a/taiga/base/static/img/emojis/pisces.png b/taiga/base/static/img/emojis/pisces.png
new file mode 100644
index 00000000..994faa24
Binary files /dev/null and b/taiga/base/static/img/emojis/pisces.png differ
diff --git a/taiga/base/static/img/emojis/pizza.png b/taiga/base/static/img/emojis/pizza.png
new file mode 100644
index 00000000..7748847f
Binary files /dev/null and b/taiga/base/static/img/emojis/pizza.png differ
diff --git a/taiga/base/static/img/emojis/plus1.png b/taiga/base/static/img/emojis/plus1.png
new file mode 100644
index 00000000..be57e612
Binary files /dev/null and b/taiga/base/static/img/emojis/plus1.png differ
diff --git a/taiga/base/static/img/emojis/point_down.png b/taiga/base/static/img/emojis/point_down.png
new file mode 100644
index 00000000..2cdab2c3
Binary files /dev/null and b/taiga/base/static/img/emojis/point_down.png differ
diff --git a/taiga/base/static/img/emojis/point_left.png b/taiga/base/static/img/emojis/point_left.png
new file mode 100644
index 00000000..31e10d21
Binary files /dev/null and b/taiga/base/static/img/emojis/point_left.png differ
diff --git a/taiga/base/static/img/emojis/point_right.png b/taiga/base/static/img/emojis/point_right.png
new file mode 100644
index 00000000..702ca9f7
Binary files /dev/null and b/taiga/base/static/img/emojis/point_right.png differ
diff --git a/taiga/base/static/img/emojis/point_up.png b/taiga/base/static/img/emojis/point_up.png
new file mode 100644
index 00000000..cae59446
Binary files /dev/null and b/taiga/base/static/img/emojis/point_up.png differ
diff --git a/taiga/base/static/img/emojis/point_up_2.png b/taiga/base/static/img/emojis/point_up_2.png
new file mode 100644
index 00000000..91ad1883
Binary files /dev/null and b/taiga/base/static/img/emojis/point_up_2.png differ
diff --git a/taiga/base/static/img/emojis/police_car.png b/taiga/base/static/img/emojis/police_car.png
new file mode 100644
index 00000000..120f17e3
Binary files /dev/null and b/taiga/base/static/img/emojis/police_car.png differ
diff --git a/taiga/base/static/img/emojis/poodle.png b/taiga/base/static/img/emojis/poodle.png
new file mode 100644
index 00000000..334812dd
Binary files /dev/null and b/taiga/base/static/img/emojis/poodle.png differ
diff --git a/taiga/base/static/img/emojis/poop.png b/taiga/base/static/img/emojis/poop.png
new file mode 100644
index 00000000..cbd8d185
Binary files /dev/null and b/taiga/base/static/img/emojis/poop.png differ
diff --git a/taiga/base/static/img/emojis/post_office.png b/taiga/base/static/img/emojis/post_office.png
new file mode 100644
index 00000000..504b4c6d
Binary files /dev/null and b/taiga/base/static/img/emojis/post_office.png differ
diff --git a/taiga/base/static/img/emojis/postal_horn.png b/taiga/base/static/img/emojis/postal_horn.png
new file mode 100644
index 00000000..75f64cd5
Binary files /dev/null and b/taiga/base/static/img/emojis/postal_horn.png differ
diff --git a/taiga/base/static/img/emojis/postbox.png b/taiga/base/static/img/emojis/postbox.png
new file mode 100644
index 00000000..44e441c1
Binary files /dev/null and b/taiga/base/static/img/emojis/postbox.png differ
diff --git a/taiga/base/static/img/emojis/potable_water.png b/taiga/base/static/img/emojis/potable_water.png
new file mode 100644
index 00000000..5ab2446b
Binary files /dev/null and b/taiga/base/static/img/emojis/potable_water.png differ
diff --git a/taiga/base/static/img/emojis/pouch.png b/taiga/base/static/img/emojis/pouch.png
new file mode 100644
index 00000000..9a172784
Binary files /dev/null and b/taiga/base/static/img/emojis/pouch.png differ
diff --git a/taiga/base/static/img/emojis/poultry_leg.png b/taiga/base/static/img/emojis/poultry_leg.png
new file mode 100644
index 00000000..912b2e36
Binary files /dev/null and b/taiga/base/static/img/emojis/poultry_leg.png differ
diff --git a/taiga/base/static/img/emojis/pound.png b/taiga/base/static/img/emojis/pound.png
new file mode 100644
index 00000000..0c9a6133
Binary files /dev/null and b/taiga/base/static/img/emojis/pound.png differ
diff --git a/taiga/base/static/img/emojis/pouting_cat.png b/taiga/base/static/img/emojis/pouting_cat.png
new file mode 100644
index 00000000..b595de7b
Binary files /dev/null and b/taiga/base/static/img/emojis/pouting_cat.png differ
diff --git a/taiga/base/static/img/emojis/pray.png b/taiga/base/static/img/emojis/pray.png
new file mode 100644
index 00000000..c6fb57f8
Binary files /dev/null and b/taiga/base/static/img/emojis/pray.png differ
diff --git a/taiga/base/static/img/emojis/princess.png b/taiga/base/static/img/emojis/princess.png
new file mode 100644
index 00000000..6ffb8005
Binary files /dev/null and b/taiga/base/static/img/emojis/princess.png differ
diff --git a/taiga/base/static/img/emojis/punch.png b/taiga/base/static/img/emojis/punch.png
new file mode 100644
index 00000000..f817ca3f
Binary files /dev/null and b/taiga/base/static/img/emojis/punch.png differ
diff --git a/taiga/base/static/img/emojis/purple_heart.png b/taiga/base/static/img/emojis/purple_heart.png
new file mode 100644
index 00000000..b146cb89
Binary files /dev/null and b/taiga/base/static/img/emojis/purple_heart.png differ
diff --git a/taiga/base/static/img/emojis/purse.png b/taiga/base/static/img/emojis/purse.png
new file mode 100644
index 00000000..28f68779
Binary files /dev/null and b/taiga/base/static/img/emojis/purse.png differ
diff --git a/taiga/base/static/img/emojis/pushpin.png b/taiga/base/static/img/emojis/pushpin.png
new file mode 100644
index 00000000..68b05b07
Binary files /dev/null and b/taiga/base/static/img/emojis/pushpin.png differ
diff --git a/taiga/base/static/img/emojis/put_litter_in_its_place.png b/taiga/base/static/img/emojis/put_litter_in_its_place.png
new file mode 100644
index 00000000..bafb8fb4
Binary files /dev/null and b/taiga/base/static/img/emojis/put_litter_in_its_place.png differ
diff --git a/taiga/base/static/img/emojis/question.png b/taiga/base/static/img/emojis/question.png
new file mode 100644
index 00000000..eeaa3026
Binary files /dev/null and b/taiga/base/static/img/emojis/question.png differ
diff --git a/taiga/base/static/img/emojis/rabbit.png b/taiga/base/static/img/emojis/rabbit.png
new file mode 100644
index 00000000..e85cd6cd
Binary files /dev/null and b/taiga/base/static/img/emojis/rabbit.png differ
diff --git a/taiga/base/static/img/emojis/rabbit2.png b/taiga/base/static/img/emojis/rabbit2.png
new file mode 100644
index 00000000..69cf71ea
Binary files /dev/null and b/taiga/base/static/img/emojis/rabbit2.png differ
diff --git a/taiga/base/static/img/emojis/racehorse.png b/taiga/base/static/img/emojis/racehorse.png
new file mode 100644
index 00000000..0e773c99
Binary files /dev/null and b/taiga/base/static/img/emojis/racehorse.png differ
diff --git a/taiga/base/static/img/emojis/radio.png b/taiga/base/static/img/emojis/radio.png
new file mode 100644
index 00000000..65c5b881
Binary files /dev/null and b/taiga/base/static/img/emojis/radio.png differ
diff --git a/taiga/base/static/img/emojis/radio_button.png b/taiga/base/static/img/emojis/radio_button.png
new file mode 100644
index 00000000..379b0bc5
Binary files /dev/null and b/taiga/base/static/img/emojis/radio_button.png differ
diff --git a/taiga/base/static/img/emojis/rage.png b/taiga/base/static/img/emojis/rage.png
new file mode 100644
index 00000000..3d6468aa
Binary files /dev/null and b/taiga/base/static/img/emojis/rage.png differ
diff --git a/taiga/base/static/img/emojis/rage1.png b/taiga/base/static/img/emojis/rage1.png
new file mode 100644
index 00000000..9ad4d9ee
Binary files /dev/null and b/taiga/base/static/img/emojis/rage1.png differ
diff --git a/taiga/base/static/img/emojis/rage2.png b/taiga/base/static/img/emojis/rage2.png
new file mode 100644
index 00000000..4d8adb2b
Binary files /dev/null and b/taiga/base/static/img/emojis/rage2.png differ
diff --git a/taiga/base/static/img/emojis/rage3.png b/taiga/base/static/img/emojis/rage3.png
new file mode 100644
index 00000000..2061f992
Binary files /dev/null and b/taiga/base/static/img/emojis/rage3.png differ
diff --git a/taiga/base/static/img/emojis/rage4.png b/taiga/base/static/img/emojis/rage4.png
new file mode 100644
index 00000000..769816f2
Binary files /dev/null and b/taiga/base/static/img/emojis/rage4.png differ
diff --git a/taiga/base/static/img/emojis/railway_car.png b/taiga/base/static/img/emojis/railway_car.png
new file mode 100644
index 00000000..48a1c44e
Binary files /dev/null and b/taiga/base/static/img/emojis/railway_car.png differ
diff --git a/taiga/base/static/img/emojis/rainbow.png b/taiga/base/static/img/emojis/rainbow.png
new file mode 100644
index 00000000..21cb89c8
Binary files /dev/null and b/taiga/base/static/img/emojis/rainbow.png differ
diff --git a/taiga/base/static/img/emojis/raised_hand.png b/taiga/base/static/img/emojis/raised_hand.png
new file mode 100644
index 00000000..7537b375
Binary files /dev/null and b/taiga/base/static/img/emojis/raised_hand.png differ
diff --git a/taiga/base/static/img/emojis/raised_hands.png b/taiga/base/static/img/emojis/raised_hands.png
new file mode 100644
index 00000000..47843f0b
Binary files /dev/null and b/taiga/base/static/img/emojis/raised_hands.png differ
diff --git a/taiga/base/static/img/emojis/raising_hand.png b/taiga/base/static/img/emojis/raising_hand.png
new file mode 100644
index 00000000..bd35abc5
Binary files /dev/null and b/taiga/base/static/img/emojis/raising_hand.png differ
diff --git a/taiga/base/static/img/emojis/ram.png b/taiga/base/static/img/emojis/ram.png
new file mode 100644
index 00000000..e6ba49f0
Binary files /dev/null and b/taiga/base/static/img/emojis/ram.png differ
diff --git a/taiga/base/static/img/emojis/ramen.png b/taiga/base/static/img/emojis/ramen.png
new file mode 100644
index 00000000..03a81fa8
Binary files /dev/null and b/taiga/base/static/img/emojis/ramen.png differ
diff --git a/taiga/base/static/img/emojis/rat.png b/taiga/base/static/img/emojis/rat.png
new file mode 100644
index 00000000..30905b34
Binary files /dev/null and b/taiga/base/static/img/emojis/rat.png differ
diff --git a/taiga/base/static/img/emojis/recycle.png b/taiga/base/static/img/emojis/recycle.png
new file mode 100644
index 00000000..4f592910
Binary files /dev/null and b/taiga/base/static/img/emojis/recycle.png differ
diff --git a/taiga/base/static/img/emojis/red_car.png b/taiga/base/static/img/emojis/red_car.png
new file mode 100644
index 00000000..31393f7f
Binary files /dev/null and b/taiga/base/static/img/emojis/red_car.png differ
diff --git a/taiga/base/static/img/emojis/red_circle.png b/taiga/base/static/img/emojis/red_circle.png
new file mode 100644
index 00000000..cafcb6ea
Binary files /dev/null and b/taiga/base/static/img/emojis/red_circle.png differ
diff --git a/taiga/base/static/img/emojis/registered.png b/taiga/base/static/img/emojis/registered.png
new file mode 100644
index 00000000..8eaa0bd8
Binary files /dev/null and b/taiga/base/static/img/emojis/registered.png differ
diff --git a/taiga/base/static/img/emojis/relaxed.png b/taiga/base/static/img/emojis/relaxed.png
new file mode 100644
index 00000000..c69f82dc
Binary files /dev/null and b/taiga/base/static/img/emojis/relaxed.png differ
diff --git a/taiga/base/static/img/emojis/relieved.png b/taiga/base/static/img/emojis/relieved.png
new file mode 100644
index 00000000..cfe42c53
Binary files /dev/null and b/taiga/base/static/img/emojis/relieved.png differ
diff --git a/taiga/base/static/img/emojis/repeat.png b/taiga/base/static/img/emojis/repeat.png
new file mode 100644
index 00000000..e20fdaa8
Binary files /dev/null and b/taiga/base/static/img/emojis/repeat.png differ
diff --git a/taiga/base/static/img/emojis/repeat_one.png b/taiga/base/static/img/emojis/repeat_one.png
new file mode 100644
index 00000000..e192e0e8
Binary files /dev/null and b/taiga/base/static/img/emojis/repeat_one.png differ
diff --git a/taiga/base/static/img/emojis/restroom.png b/taiga/base/static/img/emojis/restroom.png
new file mode 100644
index 00000000..74a0335d
Binary files /dev/null and b/taiga/base/static/img/emojis/restroom.png differ
diff --git a/taiga/base/static/img/emojis/revolving_hearts.png b/taiga/base/static/img/emojis/revolving_hearts.png
new file mode 100644
index 00000000..82506b5a
Binary files /dev/null and b/taiga/base/static/img/emojis/revolving_hearts.png differ
diff --git a/taiga/base/static/img/emojis/rewind.png b/taiga/base/static/img/emojis/rewind.png
new file mode 100644
index 00000000..a699e83b
Binary files /dev/null and b/taiga/base/static/img/emojis/rewind.png differ
diff --git a/taiga/base/static/img/emojis/ribbon.png b/taiga/base/static/img/emojis/ribbon.png
new file mode 100644
index 00000000..bf4e85cb
Binary files /dev/null and b/taiga/base/static/img/emojis/ribbon.png differ
diff --git a/taiga/base/static/img/emojis/rice.png b/taiga/base/static/img/emojis/rice.png
new file mode 100644
index 00000000..4c941d87
Binary files /dev/null and b/taiga/base/static/img/emojis/rice.png differ
diff --git a/taiga/base/static/img/emojis/rice_ball.png b/taiga/base/static/img/emojis/rice_ball.png
new file mode 100644
index 00000000..923ecf54
Binary files /dev/null and b/taiga/base/static/img/emojis/rice_ball.png differ
diff --git a/taiga/base/static/img/emojis/rice_cracker.png b/taiga/base/static/img/emojis/rice_cracker.png
new file mode 100644
index 00000000..cbb5ce7f
Binary files /dev/null and b/taiga/base/static/img/emojis/rice_cracker.png differ
diff --git a/taiga/base/static/img/emojis/rice_scene.png b/taiga/base/static/img/emojis/rice_scene.png
new file mode 100644
index 00000000..edb7b3ab
Binary files /dev/null and b/taiga/base/static/img/emojis/rice_scene.png differ
diff --git a/taiga/base/static/img/emojis/ring.png b/taiga/base/static/img/emojis/ring.png
new file mode 100644
index 00000000..5e0daaa2
Binary files /dev/null and b/taiga/base/static/img/emojis/ring.png differ
diff --git a/taiga/base/static/img/emojis/rocket.png b/taiga/base/static/img/emojis/rocket.png
new file mode 100644
index 00000000..5bfdfa3c
Binary files /dev/null and b/taiga/base/static/img/emojis/rocket.png differ
diff --git a/taiga/base/static/img/emojis/roller_coaster.png b/taiga/base/static/img/emojis/roller_coaster.png
new file mode 100644
index 00000000..9ad1f8d9
Binary files /dev/null and b/taiga/base/static/img/emojis/roller_coaster.png differ
diff --git a/taiga/base/static/img/emojis/rooster.png b/taiga/base/static/img/emojis/rooster.png
new file mode 100644
index 00000000..f57aaa55
Binary files /dev/null and b/taiga/base/static/img/emojis/rooster.png differ
diff --git a/taiga/base/static/img/emojis/rose.png b/taiga/base/static/img/emojis/rose.png
new file mode 100644
index 00000000..2c9eeb00
Binary files /dev/null and b/taiga/base/static/img/emojis/rose.png differ
diff --git a/taiga/base/static/img/emojis/rotating_light.png b/taiga/base/static/img/emojis/rotating_light.png
new file mode 100644
index 00000000..2615880f
Binary files /dev/null and b/taiga/base/static/img/emojis/rotating_light.png differ
diff --git a/taiga/base/static/img/emojis/round_pushpin.png b/taiga/base/static/img/emojis/round_pushpin.png
new file mode 100644
index 00000000..68777d7f
Binary files /dev/null and b/taiga/base/static/img/emojis/round_pushpin.png differ
diff --git a/taiga/base/static/img/emojis/rowboat.png b/taiga/base/static/img/emojis/rowboat.png
new file mode 100644
index 00000000..9179acbd
Binary files /dev/null and b/taiga/base/static/img/emojis/rowboat.png differ
diff --git a/taiga/base/static/img/emojis/ru.png b/taiga/base/static/img/emojis/ru.png
new file mode 100644
index 00000000..55a13282
Binary files /dev/null and b/taiga/base/static/img/emojis/ru.png differ
diff --git a/taiga/base/static/img/emojis/rugby_football.png b/taiga/base/static/img/emojis/rugby_football.png
new file mode 100644
index 00000000..a574841e
Binary files /dev/null and b/taiga/base/static/img/emojis/rugby_football.png differ
diff --git a/taiga/base/static/img/emojis/runner.png b/taiga/base/static/img/emojis/runner.png
new file mode 100644
index 00000000..5a804cc5
Binary files /dev/null and b/taiga/base/static/img/emojis/runner.png differ
diff --git a/taiga/base/static/img/emojis/running.png b/taiga/base/static/img/emojis/running.png
new file mode 100644
index 00000000..5a804cc5
Binary files /dev/null and b/taiga/base/static/img/emojis/running.png differ
diff --git a/taiga/base/static/img/emojis/running_shirt_with_sash.png b/taiga/base/static/img/emojis/running_shirt_with_sash.png
new file mode 100644
index 00000000..8f8d63db
Binary files /dev/null and b/taiga/base/static/img/emojis/running_shirt_with_sash.png differ
diff --git a/taiga/base/static/img/emojis/sa.png b/taiga/base/static/img/emojis/sa.png
new file mode 100644
index 00000000..01d63421
Binary files /dev/null and b/taiga/base/static/img/emojis/sa.png differ
diff --git a/taiga/base/static/img/emojis/sagittarius.png b/taiga/base/static/img/emojis/sagittarius.png
new file mode 100644
index 00000000..ac9a122a
Binary files /dev/null and b/taiga/base/static/img/emojis/sagittarius.png differ
diff --git a/taiga/base/static/img/emojis/sailboat.png b/taiga/base/static/img/emojis/sailboat.png
new file mode 100644
index 00000000..ab65ccc4
Binary files /dev/null and b/taiga/base/static/img/emojis/sailboat.png differ
diff --git a/taiga/base/static/img/emojis/sake.png b/taiga/base/static/img/emojis/sake.png
new file mode 100644
index 00000000..54e05a06
Binary files /dev/null and b/taiga/base/static/img/emojis/sake.png differ
diff --git a/taiga/base/static/img/emojis/sandal.png b/taiga/base/static/img/emojis/sandal.png
new file mode 100644
index 00000000..d5b8f3b0
Binary files /dev/null and b/taiga/base/static/img/emojis/sandal.png differ
diff --git a/taiga/base/static/img/emojis/santa.png b/taiga/base/static/img/emojis/santa.png
new file mode 100644
index 00000000..2155ed7d
Binary files /dev/null and b/taiga/base/static/img/emojis/santa.png differ
diff --git a/taiga/base/static/img/emojis/satellite.png b/taiga/base/static/img/emojis/satellite.png
new file mode 100644
index 00000000..0f9c5285
Binary files /dev/null and b/taiga/base/static/img/emojis/satellite.png differ
diff --git a/taiga/base/static/img/emojis/satisfied.png b/taiga/base/static/img/emojis/satisfied.png
new file mode 100644
index 00000000..5f0703b3
Binary files /dev/null and b/taiga/base/static/img/emojis/satisfied.png differ
diff --git a/taiga/base/static/img/emojis/saxophone.png b/taiga/base/static/img/emojis/saxophone.png
new file mode 100644
index 00000000..70b7f554
Binary files /dev/null and b/taiga/base/static/img/emojis/saxophone.png differ
diff --git a/taiga/base/static/img/emojis/school.png b/taiga/base/static/img/emojis/school.png
new file mode 100644
index 00000000..6f5d062f
Binary files /dev/null and b/taiga/base/static/img/emojis/school.png differ
diff --git a/taiga/base/static/img/emojis/school_satchel.png b/taiga/base/static/img/emojis/school_satchel.png
new file mode 100644
index 00000000..2eb54d4e
Binary files /dev/null and b/taiga/base/static/img/emojis/school_satchel.png differ
diff --git a/taiga/base/static/img/emojis/scissors.png b/taiga/base/static/img/emojis/scissors.png
new file mode 100644
index 00000000..d8178c79
Binary files /dev/null and b/taiga/base/static/img/emojis/scissors.png differ
diff --git a/taiga/base/static/img/emojis/scorpius.png b/taiga/base/static/img/emojis/scorpius.png
new file mode 100644
index 00000000..4285976b
Binary files /dev/null and b/taiga/base/static/img/emojis/scorpius.png differ
diff --git a/taiga/base/static/img/emojis/scream.png b/taiga/base/static/img/emojis/scream.png
new file mode 100644
index 00000000..e565dd14
Binary files /dev/null and b/taiga/base/static/img/emojis/scream.png differ
diff --git a/taiga/base/static/img/emojis/scream_cat.png b/taiga/base/static/img/emojis/scream_cat.png
new file mode 100644
index 00000000..5d9688e4
Binary files /dev/null and b/taiga/base/static/img/emojis/scream_cat.png differ
diff --git a/taiga/base/static/img/emojis/scroll.png b/taiga/base/static/img/emojis/scroll.png
new file mode 100644
index 00000000..82aaf972
Binary files /dev/null and b/taiga/base/static/img/emojis/scroll.png differ
diff --git a/taiga/base/static/img/emojis/seat.png b/taiga/base/static/img/emojis/seat.png
new file mode 100644
index 00000000..652387e0
Binary files /dev/null and b/taiga/base/static/img/emojis/seat.png differ
diff --git a/taiga/base/static/img/emojis/secret.png b/taiga/base/static/img/emojis/secret.png
new file mode 100644
index 00000000..e0cedfa5
Binary files /dev/null and b/taiga/base/static/img/emojis/secret.png differ
diff --git a/taiga/base/static/img/emojis/see_no_evil.png b/taiga/base/static/img/emojis/see_no_evil.png
new file mode 100644
index 00000000..8f287532
Binary files /dev/null and b/taiga/base/static/img/emojis/see_no_evil.png differ
diff --git a/taiga/base/static/img/emojis/seedling.png b/taiga/base/static/img/emojis/seedling.png
new file mode 100644
index 00000000..741f0c75
Binary files /dev/null and b/taiga/base/static/img/emojis/seedling.png differ
diff --git a/taiga/base/static/img/emojis/seven.png b/taiga/base/static/img/emojis/seven.png
new file mode 100644
index 00000000..5be9b6e9
Binary files /dev/null and b/taiga/base/static/img/emojis/seven.png differ
diff --git a/taiga/base/static/img/emojis/shaved_ice.png b/taiga/base/static/img/emojis/shaved_ice.png
new file mode 100644
index 00000000..c19c52c8
Binary files /dev/null and b/taiga/base/static/img/emojis/shaved_ice.png differ
diff --git a/taiga/base/static/img/emojis/sheep.png b/taiga/base/static/img/emojis/sheep.png
new file mode 100644
index 00000000..10e36725
Binary files /dev/null and b/taiga/base/static/img/emojis/sheep.png differ
diff --git a/taiga/base/static/img/emojis/shell.png b/taiga/base/static/img/emojis/shell.png
new file mode 100644
index 00000000..88654d83
Binary files /dev/null and b/taiga/base/static/img/emojis/shell.png differ
diff --git a/taiga/base/static/img/emojis/ship.png b/taiga/base/static/img/emojis/ship.png
new file mode 100644
index 00000000..086ba04d
Binary files /dev/null and b/taiga/base/static/img/emojis/ship.png differ
diff --git a/taiga/base/static/img/emojis/shipit.png b/taiga/base/static/img/emojis/shipit.png
new file mode 100644
index 00000000..452bdeeb
Binary files /dev/null and b/taiga/base/static/img/emojis/shipit.png differ
diff --git a/taiga/base/static/img/emojis/shirt.png b/taiga/base/static/img/emojis/shirt.png
new file mode 100644
index 00000000..d725451a
Binary files /dev/null and b/taiga/base/static/img/emojis/shirt.png differ
diff --git a/taiga/base/static/img/emojis/shit.png b/taiga/base/static/img/emojis/shit.png
new file mode 100644
index 00000000..cbd8d185
Binary files /dev/null and b/taiga/base/static/img/emojis/shit.png differ
diff --git a/taiga/base/static/img/emojis/shoe.png b/taiga/base/static/img/emojis/shoe.png
new file mode 100644
index 00000000..f24be573
Binary files /dev/null and b/taiga/base/static/img/emojis/shoe.png differ
diff --git a/taiga/base/static/img/emojis/shower.png b/taiga/base/static/img/emojis/shower.png
new file mode 100644
index 00000000..3c1fcdd7
Binary files /dev/null and b/taiga/base/static/img/emojis/shower.png differ
diff --git a/taiga/base/static/img/emojis/signal_strength.png b/taiga/base/static/img/emojis/signal_strength.png
new file mode 100644
index 00000000..18781137
Binary files /dev/null and b/taiga/base/static/img/emojis/signal_strength.png differ
diff --git a/taiga/base/static/img/emojis/six.png b/taiga/base/static/img/emojis/six.png
new file mode 100644
index 00000000..cd099b3e
Binary files /dev/null and b/taiga/base/static/img/emojis/six.png differ
diff --git a/taiga/base/static/img/emojis/six_pointed_star.png b/taiga/base/static/img/emojis/six_pointed_star.png
new file mode 100644
index 00000000..2dcdf017
Binary files /dev/null and b/taiga/base/static/img/emojis/six_pointed_star.png differ
diff --git a/taiga/base/static/img/emojis/ski.png b/taiga/base/static/img/emojis/ski.png
new file mode 100644
index 00000000..f7f1b756
Binary files /dev/null and b/taiga/base/static/img/emojis/ski.png differ
diff --git a/taiga/base/static/img/emojis/skull.png b/taiga/base/static/img/emojis/skull.png
new file mode 100644
index 00000000..94858041
Binary files /dev/null and b/taiga/base/static/img/emojis/skull.png differ
diff --git a/taiga/base/static/img/emojis/sleeping.png b/taiga/base/static/img/emojis/sleeping.png
new file mode 100644
index 00000000..98fe02f9
Binary files /dev/null and b/taiga/base/static/img/emojis/sleeping.png differ
diff --git a/taiga/base/static/img/emojis/sleepy.png b/taiga/base/static/img/emojis/sleepy.png
new file mode 100644
index 00000000..c980161b
Binary files /dev/null and b/taiga/base/static/img/emojis/sleepy.png differ
diff --git a/taiga/base/static/img/emojis/slot_machine.png b/taiga/base/static/img/emojis/slot_machine.png
new file mode 100644
index 00000000..eed00662
Binary files /dev/null and b/taiga/base/static/img/emojis/slot_machine.png differ
diff --git a/taiga/base/static/img/emojis/small_blue_diamond.png b/taiga/base/static/img/emojis/small_blue_diamond.png
new file mode 100644
index 00000000..cb75ddc1
Binary files /dev/null and b/taiga/base/static/img/emojis/small_blue_diamond.png differ
diff --git a/taiga/base/static/img/emojis/small_orange_diamond.png b/taiga/base/static/img/emojis/small_orange_diamond.png
new file mode 100644
index 00000000..6fc3e29d
Binary files /dev/null and b/taiga/base/static/img/emojis/small_orange_diamond.png differ
diff --git a/taiga/base/static/img/emojis/small_red_triangle.png b/taiga/base/static/img/emojis/small_red_triangle.png
new file mode 100644
index 00000000..088bb465
Binary files /dev/null and b/taiga/base/static/img/emojis/small_red_triangle.png differ
diff --git a/taiga/base/static/img/emojis/small_red_triangle_down.png b/taiga/base/static/img/emojis/small_red_triangle_down.png
new file mode 100644
index 00000000..4ef9f008
Binary files /dev/null and b/taiga/base/static/img/emojis/small_red_triangle_down.png differ
diff --git a/taiga/base/static/img/emojis/smile.png b/taiga/base/static/img/emojis/smile.png
new file mode 100644
index 00000000..aaa5fd36
Binary files /dev/null and b/taiga/base/static/img/emojis/smile.png differ
diff --git a/taiga/base/static/img/emojis/smile_cat.png b/taiga/base/static/img/emojis/smile_cat.png
new file mode 100644
index 00000000..7e9a474f
Binary files /dev/null and b/taiga/base/static/img/emojis/smile_cat.png differ
diff --git a/taiga/base/static/img/emojis/smiley.png b/taiga/base/static/img/emojis/smiley.png
new file mode 100644
index 00000000..1d46b561
Binary files /dev/null and b/taiga/base/static/img/emojis/smiley.png differ
diff --git a/taiga/base/static/img/emojis/smiley_cat.png b/taiga/base/static/img/emojis/smiley_cat.png
new file mode 100644
index 00000000..b1e37671
Binary files /dev/null and b/taiga/base/static/img/emojis/smiley_cat.png differ
diff --git a/taiga/base/static/img/emojis/smiling_imp.png b/taiga/base/static/img/emojis/smiling_imp.png
new file mode 100644
index 00000000..b19174b6
Binary files /dev/null and b/taiga/base/static/img/emojis/smiling_imp.png differ
diff --git a/taiga/base/static/img/emojis/smirk.png b/taiga/base/static/img/emojis/smirk.png
new file mode 100644
index 00000000..c8c2860b
Binary files /dev/null and b/taiga/base/static/img/emojis/smirk.png differ
diff --git a/taiga/base/static/img/emojis/smirk_cat.png b/taiga/base/static/img/emojis/smirk_cat.png
new file mode 100644
index 00000000..67f18db7
Binary files /dev/null and b/taiga/base/static/img/emojis/smirk_cat.png differ
diff --git a/taiga/base/static/img/emojis/smoking.png b/taiga/base/static/img/emojis/smoking.png
new file mode 100644
index 00000000..c3cbcace
Binary files /dev/null and b/taiga/base/static/img/emojis/smoking.png differ
diff --git a/taiga/base/static/img/emojis/snail.png b/taiga/base/static/img/emojis/snail.png
new file mode 100644
index 00000000..86c289d2
Binary files /dev/null and b/taiga/base/static/img/emojis/snail.png differ
diff --git a/taiga/base/static/img/emojis/snake.png b/taiga/base/static/img/emojis/snake.png
new file mode 100644
index 00000000..00189648
Binary files /dev/null and b/taiga/base/static/img/emojis/snake.png differ
diff --git a/taiga/base/static/img/emojis/snowboarder.png b/taiga/base/static/img/emojis/snowboarder.png
new file mode 100644
index 00000000..1768b72d
Binary files /dev/null and b/taiga/base/static/img/emojis/snowboarder.png differ
diff --git a/taiga/base/static/img/emojis/snowflake.png b/taiga/base/static/img/emojis/snowflake.png
new file mode 100644
index 00000000..80ee0a96
Binary files /dev/null and b/taiga/base/static/img/emojis/snowflake.png differ
diff --git a/taiga/base/static/img/emojis/snowman.png b/taiga/base/static/img/emojis/snowman.png
new file mode 100644
index 00000000..d11a05b8
Binary files /dev/null and b/taiga/base/static/img/emojis/snowman.png differ
diff --git a/taiga/base/static/img/emojis/sob.png b/taiga/base/static/img/emojis/sob.png
new file mode 100644
index 00000000..88f0c5da
Binary files /dev/null and b/taiga/base/static/img/emojis/sob.png differ
diff --git a/taiga/base/static/img/emojis/soccer.png b/taiga/base/static/img/emojis/soccer.png
new file mode 100644
index 00000000..da80057c
Binary files /dev/null and b/taiga/base/static/img/emojis/soccer.png differ
diff --git a/taiga/base/static/img/emojis/soon.png b/taiga/base/static/img/emojis/soon.png
new file mode 100644
index 00000000..fc8703b9
Binary files /dev/null and b/taiga/base/static/img/emojis/soon.png differ
diff --git a/taiga/base/static/img/emojis/sos.png b/taiga/base/static/img/emojis/sos.png
new file mode 100644
index 00000000..cf400854
Binary files /dev/null and b/taiga/base/static/img/emojis/sos.png differ
diff --git a/taiga/base/static/img/emojis/sound.png b/taiga/base/static/img/emojis/sound.png
new file mode 100644
index 00000000..bff0b921
Binary files /dev/null and b/taiga/base/static/img/emojis/sound.png differ
diff --git a/taiga/base/static/img/emojis/space_invader.png b/taiga/base/static/img/emojis/space_invader.png
new file mode 100644
index 00000000..d93fa4c9
Binary files /dev/null and b/taiga/base/static/img/emojis/space_invader.png differ
diff --git a/taiga/base/static/img/emojis/spades.png b/taiga/base/static/img/emojis/spades.png
new file mode 100644
index 00000000..f630a8fb
Binary files /dev/null and b/taiga/base/static/img/emojis/spades.png differ
diff --git a/taiga/base/static/img/emojis/spaghetti.png b/taiga/base/static/img/emojis/spaghetti.png
new file mode 100644
index 00000000..bd555df7
Binary files /dev/null and b/taiga/base/static/img/emojis/spaghetti.png differ
diff --git a/taiga/base/static/img/emojis/sparkler.png b/taiga/base/static/img/emojis/sparkler.png
new file mode 100644
index 00000000..eea06365
Binary files /dev/null and b/taiga/base/static/img/emojis/sparkler.png differ
diff --git a/taiga/base/static/img/emojis/sparkles.png b/taiga/base/static/img/emojis/sparkles.png
new file mode 100644
index 00000000..ece42023
Binary files /dev/null and b/taiga/base/static/img/emojis/sparkles.png differ
diff --git a/taiga/base/static/img/emojis/sparkling_heart.png b/taiga/base/static/img/emojis/sparkling_heart.png
new file mode 100644
index 00000000..b5e8d124
Binary files /dev/null and b/taiga/base/static/img/emojis/sparkling_heart.png differ
diff --git a/taiga/base/static/img/emojis/speak_no_evil.png b/taiga/base/static/img/emojis/speak_no_evil.png
new file mode 100644
index 00000000..d9a2086e
Binary files /dev/null and b/taiga/base/static/img/emojis/speak_no_evil.png differ
diff --git a/taiga/base/static/img/emojis/speaker.png b/taiga/base/static/img/emojis/speaker.png
new file mode 100644
index 00000000..4c9cd48b
Binary files /dev/null and b/taiga/base/static/img/emojis/speaker.png differ
diff --git a/taiga/base/static/img/emojis/speech_balloon.png b/taiga/base/static/img/emojis/speech_balloon.png
new file mode 100644
index 00000000..13b663ec
Binary files /dev/null and b/taiga/base/static/img/emojis/speech_balloon.png differ
diff --git a/taiga/base/static/img/emojis/speedboat.png b/taiga/base/static/img/emojis/speedboat.png
new file mode 100644
index 00000000..68b677eb
Binary files /dev/null and b/taiga/base/static/img/emojis/speedboat.png differ
diff --git a/taiga/base/static/img/emojis/squirrel.png b/taiga/base/static/img/emojis/squirrel.png
new file mode 100644
index 00000000..452bdeeb
Binary files /dev/null and b/taiga/base/static/img/emojis/squirrel.png differ
diff --git a/taiga/base/static/img/emojis/star.png b/taiga/base/static/img/emojis/star.png
new file mode 100644
index 00000000..e1e48b06
Binary files /dev/null and b/taiga/base/static/img/emojis/star.png differ
diff --git a/taiga/base/static/img/emojis/star2.png b/taiga/base/static/img/emojis/star2.png
new file mode 100644
index 00000000..75343a6c
Binary files /dev/null and b/taiga/base/static/img/emojis/star2.png differ
diff --git a/taiga/base/static/img/emojis/stars.png b/taiga/base/static/img/emojis/stars.png
new file mode 100644
index 00000000..ee318114
Binary files /dev/null and b/taiga/base/static/img/emojis/stars.png differ
diff --git a/taiga/base/static/img/emojis/station.png b/taiga/base/static/img/emojis/station.png
new file mode 100644
index 00000000..26eb1336
Binary files /dev/null and b/taiga/base/static/img/emojis/station.png differ
diff --git a/taiga/base/static/img/emojis/statue_of_liberty.png b/taiga/base/static/img/emojis/statue_of_liberty.png
new file mode 100644
index 00000000..bf5395a0
Binary files /dev/null and b/taiga/base/static/img/emojis/statue_of_liberty.png differ
diff --git a/taiga/base/static/img/emojis/steam_locomotive.png b/taiga/base/static/img/emojis/steam_locomotive.png
new file mode 100644
index 00000000..f5224d84
Binary files /dev/null and b/taiga/base/static/img/emojis/steam_locomotive.png differ
diff --git a/taiga/base/static/img/emojis/stew.png b/taiga/base/static/img/emojis/stew.png
new file mode 100644
index 00000000..9d0e58f5
Binary files /dev/null and b/taiga/base/static/img/emojis/stew.png differ
diff --git a/taiga/base/static/img/emojis/straight_ruler.png b/taiga/base/static/img/emojis/straight_ruler.png
new file mode 100644
index 00000000..88bbfb17
Binary files /dev/null and b/taiga/base/static/img/emojis/straight_ruler.png differ
diff --git a/taiga/base/static/img/emojis/strawberry.png b/taiga/base/static/img/emojis/strawberry.png
new file mode 100644
index 00000000..9f746b52
Binary files /dev/null and b/taiga/base/static/img/emojis/strawberry.png differ
diff --git a/taiga/base/static/img/emojis/stuck_out_tongue.png b/taiga/base/static/img/emojis/stuck_out_tongue.png
new file mode 100644
index 00000000..e093225c
Binary files /dev/null and b/taiga/base/static/img/emojis/stuck_out_tongue.png differ
diff --git a/taiga/base/static/img/emojis/stuck_out_tongue_closed_eyes.png b/taiga/base/static/img/emojis/stuck_out_tongue_closed_eyes.png
new file mode 100644
index 00000000..585978b3
Binary files /dev/null and b/taiga/base/static/img/emojis/stuck_out_tongue_closed_eyes.png differ
diff --git a/taiga/base/static/img/emojis/stuck_out_tongue_winking_eye.png b/taiga/base/static/img/emojis/stuck_out_tongue_winking_eye.png
new file mode 100644
index 00000000..2d325fdd
Binary files /dev/null and b/taiga/base/static/img/emojis/stuck_out_tongue_winking_eye.png differ
diff --git a/taiga/base/static/img/emojis/sun_with_face.png b/taiga/base/static/img/emojis/sun_with_face.png
new file mode 100644
index 00000000..d72115b2
Binary files /dev/null and b/taiga/base/static/img/emojis/sun_with_face.png differ
diff --git a/taiga/base/static/img/emojis/sunflower.png b/taiga/base/static/img/emojis/sunflower.png
new file mode 100644
index 00000000..5bdd66e5
Binary files /dev/null and b/taiga/base/static/img/emojis/sunflower.png differ
diff --git a/taiga/base/static/img/emojis/sunglasses.png b/taiga/base/static/img/emojis/sunglasses.png
new file mode 100644
index 00000000..0def8c43
Binary files /dev/null and b/taiga/base/static/img/emojis/sunglasses.png differ
diff --git a/taiga/base/static/img/emojis/sunny.png b/taiga/base/static/img/emojis/sunny.png
new file mode 100644
index 00000000..504eab73
Binary files /dev/null and b/taiga/base/static/img/emojis/sunny.png differ
diff --git a/taiga/base/static/img/emojis/sunrise.png b/taiga/base/static/img/emojis/sunrise.png
new file mode 100644
index 00000000..e4906c7f
Binary files /dev/null and b/taiga/base/static/img/emojis/sunrise.png differ
diff --git a/taiga/base/static/img/emojis/sunrise_over_mountains.png b/taiga/base/static/img/emojis/sunrise_over_mountains.png
new file mode 100644
index 00000000..05e34bb3
Binary files /dev/null and b/taiga/base/static/img/emojis/sunrise_over_mountains.png differ
diff --git a/taiga/base/static/img/emojis/surfer.png b/taiga/base/static/img/emojis/surfer.png
new file mode 100644
index 00000000..237730d1
Binary files /dev/null and b/taiga/base/static/img/emojis/surfer.png differ
diff --git a/taiga/base/static/img/emojis/sushi.png b/taiga/base/static/img/emojis/sushi.png
new file mode 100644
index 00000000..29b29b91
Binary files /dev/null and b/taiga/base/static/img/emojis/sushi.png differ
diff --git a/taiga/base/static/img/emojis/suspect.png b/taiga/base/static/img/emojis/suspect.png
new file mode 100644
index 00000000..ef1e7e3b
Binary files /dev/null and b/taiga/base/static/img/emojis/suspect.png differ
diff --git a/taiga/base/static/img/emojis/suspension_railway.png b/taiga/base/static/img/emojis/suspension_railway.png
new file mode 100644
index 00000000..e18d9f08
Binary files /dev/null and b/taiga/base/static/img/emojis/suspension_railway.png differ
diff --git a/taiga/base/static/img/emojis/sweat.png b/taiga/base/static/img/emojis/sweat.png
new file mode 100644
index 00000000..93cfa91b
Binary files /dev/null and b/taiga/base/static/img/emojis/sweat.png differ
diff --git a/taiga/base/static/img/emojis/sweat_drops.png b/taiga/base/static/img/emojis/sweat_drops.png
new file mode 100644
index 00000000..8e882710
Binary files /dev/null and b/taiga/base/static/img/emojis/sweat_drops.png differ
diff --git a/taiga/base/static/img/emojis/sweat_smile.png b/taiga/base/static/img/emojis/sweat_smile.png
new file mode 100644
index 00000000..85cab920
Binary files /dev/null and b/taiga/base/static/img/emojis/sweat_smile.png differ
diff --git a/taiga/base/static/img/emojis/sweet_potato.png b/taiga/base/static/img/emojis/sweet_potato.png
new file mode 100644
index 00000000..7f8ebb39
Binary files /dev/null and b/taiga/base/static/img/emojis/sweet_potato.png differ
diff --git a/taiga/base/static/img/emojis/swimmer.png b/taiga/base/static/img/emojis/swimmer.png
new file mode 100644
index 00000000..dc1b98ab
Binary files /dev/null and b/taiga/base/static/img/emojis/swimmer.png differ
diff --git a/taiga/base/static/img/emojis/symbols.png b/taiga/base/static/img/emojis/symbols.png
new file mode 100644
index 00000000..f49fda06
Binary files /dev/null and b/taiga/base/static/img/emojis/symbols.png differ
diff --git a/taiga/base/static/img/emojis/syringe.png b/taiga/base/static/img/emojis/syringe.png
new file mode 100644
index 00000000..f2183abb
Binary files /dev/null and b/taiga/base/static/img/emojis/syringe.png differ
diff --git a/taiga/base/static/img/emojis/tada.png b/taiga/base/static/img/emojis/tada.png
new file mode 100644
index 00000000..7c422796
Binary files /dev/null and b/taiga/base/static/img/emojis/tada.png differ
diff --git a/taiga/base/static/img/emojis/tanabata_tree.png b/taiga/base/static/img/emojis/tanabata_tree.png
new file mode 100644
index 00000000..df64983d
Binary files /dev/null and b/taiga/base/static/img/emojis/tanabata_tree.png differ
diff --git a/taiga/base/static/img/emojis/tangerine.png b/taiga/base/static/img/emojis/tangerine.png
new file mode 100644
index 00000000..4c71ea83
Binary files /dev/null and b/taiga/base/static/img/emojis/tangerine.png differ
diff --git a/taiga/base/static/img/emojis/taurus.png b/taiga/base/static/img/emojis/taurus.png
new file mode 100644
index 00000000..b5c22c42
Binary files /dev/null and b/taiga/base/static/img/emojis/taurus.png differ
diff --git a/taiga/base/static/img/emojis/taxi.png b/taiga/base/static/img/emojis/taxi.png
new file mode 100644
index 00000000..467e5e53
Binary files /dev/null and b/taiga/base/static/img/emojis/taxi.png differ
diff --git a/taiga/base/static/img/emojis/tea.png b/taiga/base/static/img/emojis/tea.png
new file mode 100644
index 00000000..1e55c9b5
Binary files /dev/null and b/taiga/base/static/img/emojis/tea.png differ
diff --git a/taiga/base/static/img/emojis/telephone.png b/taiga/base/static/img/emojis/telephone.png
new file mode 100644
index 00000000..ce0bc5df
Binary files /dev/null and b/taiga/base/static/img/emojis/telephone.png differ
diff --git a/taiga/base/static/img/emojis/telephone_receiver.png b/taiga/base/static/img/emojis/telephone_receiver.png
new file mode 100644
index 00000000..a620eb45
Binary files /dev/null and b/taiga/base/static/img/emojis/telephone_receiver.png differ
diff --git a/taiga/base/static/img/emojis/telescope.png b/taiga/base/static/img/emojis/telescope.png
new file mode 100644
index 00000000..da6a45f8
Binary files /dev/null and b/taiga/base/static/img/emojis/telescope.png differ
diff --git a/taiga/base/static/img/emojis/tennis.png b/taiga/base/static/img/emojis/tennis.png
new file mode 100644
index 00000000..e27e7f14
Binary files /dev/null and b/taiga/base/static/img/emojis/tennis.png differ
diff --git a/taiga/base/static/img/emojis/tent.png b/taiga/base/static/img/emojis/tent.png
new file mode 100644
index 00000000..64b7a709
Binary files /dev/null and b/taiga/base/static/img/emojis/tent.png differ
diff --git a/taiga/base/static/img/emojis/thought_balloon.png b/taiga/base/static/img/emojis/thought_balloon.png
new file mode 100644
index 00000000..fc6fd0fc
Binary files /dev/null and b/taiga/base/static/img/emojis/thought_balloon.png differ
diff --git a/taiga/base/static/img/emojis/three.png b/taiga/base/static/img/emojis/three.png
new file mode 100644
index 00000000..514ed48a
Binary files /dev/null and b/taiga/base/static/img/emojis/three.png differ
diff --git a/taiga/base/static/img/emojis/thumbsdown.png b/taiga/base/static/img/emojis/thumbsdown.png
new file mode 100644
index 00000000..32c79443
Binary files /dev/null and b/taiga/base/static/img/emojis/thumbsdown.png differ
diff --git a/taiga/base/static/img/emojis/thumbsup.png b/taiga/base/static/img/emojis/thumbsup.png
new file mode 100644
index 00000000..be57e612
Binary files /dev/null and b/taiga/base/static/img/emojis/thumbsup.png differ
diff --git a/taiga/base/static/img/emojis/ticket.png b/taiga/base/static/img/emojis/ticket.png
new file mode 100644
index 00000000..e98577a4
Binary files /dev/null and b/taiga/base/static/img/emojis/ticket.png differ
diff --git a/taiga/base/static/img/emojis/tiger.png b/taiga/base/static/img/emojis/tiger.png
new file mode 100644
index 00000000..0b29a50e
Binary files /dev/null and b/taiga/base/static/img/emojis/tiger.png differ
diff --git a/taiga/base/static/img/emojis/tiger2.png b/taiga/base/static/img/emojis/tiger2.png
new file mode 100644
index 00000000..4e34d507
Binary files /dev/null and b/taiga/base/static/img/emojis/tiger2.png differ
diff --git a/taiga/base/static/img/emojis/tired_face.png b/taiga/base/static/img/emojis/tired_face.png
new file mode 100644
index 00000000..df0dfce7
Binary files /dev/null and b/taiga/base/static/img/emojis/tired_face.png differ
diff --git a/taiga/base/static/img/emojis/tm.png b/taiga/base/static/img/emojis/tm.png
new file mode 100644
index 00000000..fd01dbf8
Binary files /dev/null and b/taiga/base/static/img/emojis/tm.png differ
diff --git a/taiga/base/static/img/emojis/toilet.png b/taiga/base/static/img/emojis/toilet.png
new file mode 100644
index 00000000..8daa9547
Binary files /dev/null and b/taiga/base/static/img/emojis/toilet.png differ
diff --git a/taiga/base/static/img/emojis/tokyo_tower.png b/taiga/base/static/img/emojis/tokyo_tower.png
new file mode 100644
index 00000000..f0785183
Binary files /dev/null and b/taiga/base/static/img/emojis/tokyo_tower.png differ
diff --git a/taiga/base/static/img/emojis/tomato.png b/taiga/base/static/img/emojis/tomato.png
new file mode 100644
index 00000000..bfb666ff
Binary files /dev/null and b/taiga/base/static/img/emojis/tomato.png differ
diff --git a/taiga/base/static/img/emojis/tongue.png b/taiga/base/static/img/emojis/tongue.png
new file mode 100644
index 00000000..94b8b4b7
Binary files /dev/null and b/taiga/base/static/img/emojis/tongue.png differ
diff --git a/taiga/base/static/img/emojis/top.png b/taiga/base/static/img/emojis/top.png
new file mode 100644
index 00000000..060488dd
Binary files /dev/null and b/taiga/base/static/img/emojis/top.png differ
diff --git a/taiga/base/static/img/emojis/tophat.png b/taiga/base/static/img/emojis/tophat.png
new file mode 100644
index 00000000..12ce7729
Binary files /dev/null and b/taiga/base/static/img/emojis/tophat.png differ
diff --git a/taiga/base/static/img/emojis/tractor.png b/taiga/base/static/img/emojis/tractor.png
new file mode 100644
index 00000000..1eac3e92
Binary files /dev/null and b/taiga/base/static/img/emojis/tractor.png differ
diff --git a/taiga/base/static/img/emojis/traffic_light.png b/taiga/base/static/img/emojis/traffic_light.png
new file mode 100644
index 00000000..c6f289b9
Binary files /dev/null and b/taiga/base/static/img/emojis/traffic_light.png differ
diff --git a/taiga/base/static/img/emojis/train.png b/taiga/base/static/img/emojis/train.png
new file mode 100644
index 00000000..67c6a849
Binary files /dev/null and b/taiga/base/static/img/emojis/train.png differ
diff --git a/taiga/base/static/img/emojis/train2.png b/taiga/base/static/img/emojis/train2.png
new file mode 100644
index 00000000..d94482e1
Binary files /dev/null and b/taiga/base/static/img/emojis/train2.png differ
diff --git a/taiga/base/static/img/emojis/tram.png b/taiga/base/static/img/emojis/tram.png
new file mode 100644
index 00000000..cb58a058
Binary files /dev/null and b/taiga/base/static/img/emojis/tram.png differ
diff --git a/taiga/base/static/img/emojis/triangular_flag_on_post.png b/taiga/base/static/img/emojis/triangular_flag_on_post.png
new file mode 100644
index 00000000..c62b930c
Binary files /dev/null and b/taiga/base/static/img/emojis/triangular_flag_on_post.png differ
diff --git a/taiga/base/static/img/emojis/triangular_ruler.png b/taiga/base/static/img/emojis/triangular_ruler.png
new file mode 100644
index 00000000..18ce44cc
Binary files /dev/null and b/taiga/base/static/img/emojis/triangular_ruler.png differ
diff --git a/taiga/base/static/img/emojis/trident.png b/taiga/base/static/img/emojis/trident.png
new file mode 100644
index 00000000..a9fbcca7
Binary files /dev/null and b/taiga/base/static/img/emojis/trident.png differ
diff --git a/taiga/base/static/img/emojis/triumph.png b/taiga/base/static/img/emojis/triumph.png
new file mode 100644
index 00000000..e333f882
Binary files /dev/null and b/taiga/base/static/img/emojis/triumph.png differ
diff --git a/taiga/base/static/img/emojis/trolleybus.png b/taiga/base/static/img/emojis/trolleybus.png
new file mode 100644
index 00000000..040fe254
Binary files /dev/null and b/taiga/base/static/img/emojis/trolleybus.png differ
diff --git a/taiga/base/static/img/emojis/trollface.png b/taiga/base/static/img/emojis/trollface.png
new file mode 100644
index 00000000..c8ef48b3
Binary files /dev/null and b/taiga/base/static/img/emojis/trollface.png differ
diff --git a/taiga/base/static/img/emojis/trophy.png b/taiga/base/static/img/emojis/trophy.png
new file mode 100644
index 00000000..f2e3d677
Binary files /dev/null and b/taiga/base/static/img/emojis/trophy.png differ
diff --git a/taiga/base/static/img/emojis/tropical_drink.png b/taiga/base/static/img/emojis/tropical_drink.png
new file mode 100644
index 00000000..7ecf2467
Binary files /dev/null and b/taiga/base/static/img/emojis/tropical_drink.png differ
diff --git a/taiga/base/static/img/emojis/tropical_fish.png b/taiga/base/static/img/emojis/tropical_fish.png
new file mode 100644
index 00000000..989efecc
Binary files /dev/null and b/taiga/base/static/img/emojis/tropical_fish.png differ
diff --git a/taiga/base/static/img/emojis/truck.png b/taiga/base/static/img/emojis/truck.png
new file mode 100644
index 00000000..9f730469
Binary files /dev/null and b/taiga/base/static/img/emojis/truck.png differ
diff --git a/taiga/base/static/img/emojis/trumpet.png b/taiga/base/static/img/emojis/trumpet.png
new file mode 100644
index 00000000..4411b6e9
Binary files /dev/null and b/taiga/base/static/img/emojis/trumpet.png differ
diff --git a/taiga/base/static/img/emojis/tshirt.png b/taiga/base/static/img/emojis/tshirt.png
new file mode 100644
index 00000000..d725451a
Binary files /dev/null and b/taiga/base/static/img/emojis/tshirt.png differ
diff --git a/taiga/base/static/img/emojis/tulip.png b/taiga/base/static/img/emojis/tulip.png
new file mode 100644
index 00000000..57707d3a
Binary files /dev/null and b/taiga/base/static/img/emojis/tulip.png differ
diff --git a/taiga/base/static/img/emojis/turtle.png b/taiga/base/static/img/emojis/turtle.png
new file mode 100644
index 00000000..eef5a7c3
Binary files /dev/null and b/taiga/base/static/img/emojis/turtle.png differ
diff --git a/taiga/base/static/img/emojis/tv.png b/taiga/base/static/img/emojis/tv.png
new file mode 100644
index 00000000..9be28a24
Binary files /dev/null and b/taiga/base/static/img/emojis/tv.png differ
diff --git a/taiga/base/static/img/emojis/twisted_rightwards_arrows.png b/taiga/base/static/img/emojis/twisted_rightwards_arrows.png
new file mode 100644
index 00000000..215fe1bd
Binary files /dev/null and b/taiga/base/static/img/emojis/twisted_rightwards_arrows.png differ
diff --git a/taiga/base/static/img/emojis/two.png b/taiga/base/static/img/emojis/two.png
new file mode 100644
index 00000000..81cda08e
Binary files /dev/null and b/taiga/base/static/img/emojis/two.png differ
diff --git a/taiga/base/static/img/emojis/two_hearts.png b/taiga/base/static/img/emojis/two_hearts.png
new file mode 100644
index 00000000..06b07ffc
Binary files /dev/null and b/taiga/base/static/img/emojis/two_hearts.png differ
diff --git a/taiga/base/static/img/emojis/two_men_holding_hands.png b/taiga/base/static/img/emojis/two_men_holding_hands.png
new file mode 100644
index 00000000..3571952f
Binary files /dev/null and b/taiga/base/static/img/emojis/two_men_holding_hands.png differ
diff --git a/taiga/base/static/img/emojis/two_women_holding_hands.png b/taiga/base/static/img/emojis/two_women_holding_hands.png
new file mode 100644
index 00000000..50b18107
Binary files /dev/null and b/taiga/base/static/img/emojis/two_women_holding_hands.png differ
diff --git a/taiga/base/static/img/emojis/u5272.png b/taiga/base/static/img/emojis/u5272.png
new file mode 100644
index 00000000..c8655f0d
Binary files /dev/null and b/taiga/base/static/img/emojis/u5272.png differ
diff --git a/taiga/base/static/img/emojis/u5408.png b/taiga/base/static/img/emojis/u5408.png
new file mode 100644
index 00000000..0372587a
Binary files /dev/null and b/taiga/base/static/img/emojis/u5408.png differ
diff --git a/taiga/base/static/img/emojis/u55b6.png b/taiga/base/static/img/emojis/u55b6.png
new file mode 100644
index 00000000..0ff799e4
Binary files /dev/null and b/taiga/base/static/img/emojis/u55b6.png differ
diff --git a/taiga/base/static/img/emojis/u6307.png b/taiga/base/static/img/emojis/u6307.png
new file mode 100644
index 00000000..8c1943fa
Binary files /dev/null and b/taiga/base/static/img/emojis/u6307.png differ
diff --git a/taiga/base/static/img/emojis/u6708.png b/taiga/base/static/img/emojis/u6708.png
new file mode 100644
index 00000000..749417b7
Binary files /dev/null and b/taiga/base/static/img/emojis/u6708.png differ
diff --git a/taiga/base/static/img/emojis/u6709.png b/taiga/base/static/img/emojis/u6709.png
new file mode 100644
index 00000000..5c7ef0b6
Binary files /dev/null and b/taiga/base/static/img/emojis/u6709.png differ
diff --git a/taiga/base/static/img/emojis/u6e80.png b/taiga/base/static/img/emojis/u6e80.png
new file mode 100644
index 00000000..25b0a3fa
Binary files /dev/null and b/taiga/base/static/img/emojis/u6e80.png differ
diff --git a/taiga/base/static/img/emojis/u7121.png b/taiga/base/static/img/emojis/u7121.png
new file mode 100644
index 00000000..205b28ec
Binary files /dev/null and b/taiga/base/static/img/emojis/u7121.png differ
diff --git a/taiga/base/static/img/emojis/u7533.png b/taiga/base/static/img/emojis/u7533.png
new file mode 100644
index 00000000..46598048
Binary files /dev/null and b/taiga/base/static/img/emojis/u7533.png differ
diff --git a/taiga/base/static/img/emojis/u7981.png b/taiga/base/static/img/emojis/u7981.png
new file mode 100644
index 00000000..ec44c5f8
Binary files /dev/null and b/taiga/base/static/img/emojis/u7981.png differ
diff --git a/taiga/base/static/img/emojis/u7a7a.png b/taiga/base/static/img/emojis/u7a7a.png
new file mode 100644
index 00000000..9c11bc5b
Binary files /dev/null and b/taiga/base/static/img/emojis/u7a7a.png differ
diff --git a/taiga/base/static/img/emojis/uk.png b/taiga/base/static/img/emojis/uk.png
new file mode 100644
index 00000000..02553549
Binary files /dev/null and b/taiga/base/static/img/emojis/uk.png differ
diff --git a/taiga/base/static/img/emojis/umbrella.png b/taiga/base/static/img/emojis/umbrella.png
new file mode 100644
index 00000000..14946f65
Binary files /dev/null and b/taiga/base/static/img/emojis/umbrella.png differ
diff --git a/taiga/base/static/img/emojis/unamused.png b/taiga/base/static/img/emojis/unamused.png
new file mode 100644
index 00000000..4c92ac5f
Binary files /dev/null and b/taiga/base/static/img/emojis/unamused.png differ
diff --git a/taiga/base/static/img/emojis/underage.png b/taiga/base/static/img/emojis/underage.png
new file mode 100644
index 00000000..93e1a8ec
Binary files /dev/null and b/taiga/base/static/img/emojis/underage.png differ
diff --git a/taiga/base/static/img/emojis/unlock.png b/taiga/base/static/img/emojis/unlock.png
new file mode 100644
index 00000000..891aa4ab
Binary files /dev/null and b/taiga/base/static/img/emojis/unlock.png differ
diff --git a/taiga/base/static/img/emojis/up.png b/taiga/base/static/img/emojis/up.png
new file mode 100644
index 00000000..a07225c7
Binary files /dev/null and b/taiga/base/static/img/emojis/up.png differ
diff --git a/taiga/base/static/img/emojis/us.png b/taiga/base/static/img/emojis/us.png
new file mode 100644
index 00000000..e7d07308
Binary files /dev/null and b/taiga/base/static/img/emojis/us.png differ
diff --git a/taiga/base/static/img/emojis/v.png b/taiga/base/static/img/emojis/v.png
new file mode 100644
index 00000000..59478c7a
Binary files /dev/null and b/taiga/base/static/img/emojis/v.png differ
diff --git a/taiga/base/static/img/emojis/vertical_traffic_light.png b/taiga/base/static/img/emojis/vertical_traffic_light.png
new file mode 100644
index 00000000..d2035fd8
Binary files /dev/null and b/taiga/base/static/img/emojis/vertical_traffic_light.png differ
diff --git a/taiga/base/static/img/emojis/vhs.png b/taiga/base/static/img/emojis/vhs.png
new file mode 100644
index 00000000..e43f425f
Binary files /dev/null and b/taiga/base/static/img/emojis/vhs.png differ
diff --git a/taiga/base/static/img/emojis/vibration_mode.png b/taiga/base/static/img/emojis/vibration_mode.png
new file mode 100644
index 00000000..71b0d167
Binary files /dev/null and b/taiga/base/static/img/emojis/vibration_mode.png differ
diff --git a/taiga/base/static/img/emojis/video_camera.png b/taiga/base/static/img/emojis/video_camera.png
new file mode 100644
index 00000000..64b118a4
Binary files /dev/null and b/taiga/base/static/img/emojis/video_camera.png differ
diff --git a/taiga/base/static/img/emojis/video_game.png b/taiga/base/static/img/emojis/video_game.png
new file mode 100644
index 00000000..1a599e7c
Binary files /dev/null and b/taiga/base/static/img/emojis/video_game.png differ
diff --git a/taiga/base/static/img/emojis/violin.png b/taiga/base/static/img/emojis/violin.png
new file mode 100644
index 00000000..83313bb5
Binary files /dev/null and b/taiga/base/static/img/emojis/violin.png differ
diff --git a/taiga/base/static/img/emojis/virgo.png b/taiga/base/static/img/emojis/virgo.png
new file mode 100644
index 00000000..467cd5f9
Binary files /dev/null and b/taiga/base/static/img/emojis/virgo.png differ
diff --git a/taiga/base/static/img/emojis/volcano.png b/taiga/base/static/img/emojis/volcano.png
new file mode 100644
index 00000000..b4e0819e
Binary files /dev/null and b/taiga/base/static/img/emojis/volcano.png differ
diff --git a/taiga/base/static/img/emojis/vs.png b/taiga/base/static/img/emojis/vs.png
new file mode 100644
index 00000000..cdbc3ffa
Binary files /dev/null and b/taiga/base/static/img/emojis/vs.png differ
diff --git a/taiga/base/static/img/emojis/walking.png b/taiga/base/static/img/emojis/walking.png
new file mode 100644
index 00000000..c26b386f
Binary files /dev/null and b/taiga/base/static/img/emojis/walking.png differ
diff --git a/taiga/base/static/img/emojis/waning_crescent_moon.png b/taiga/base/static/img/emojis/waning_crescent_moon.png
new file mode 100644
index 00000000..cbf16b7c
Binary files /dev/null and b/taiga/base/static/img/emojis/waning_crescent_moon.png differ
diff --git a/taiga/base/static/img/emojis/waning_gibbous_moon.png b/taiga/base/static/img/emojis/waning_gibbous_moon.png
new file mode 100644
index 00000000..40b3827d
Binary files /dev/null and b/taiga/base/static/img/emojis/waning_gibbous_moon.png differ
diff --git a/taiga/base/static/img/emojis/warning.png b/taiga/base/static/img/emojis/warning.png
new file mode 100644
index 00000000..69e6ae18
Binary files /dev/null and b/taiga/base/static/img/emojis/warning.png differ
diff --git a/taiga/base/static/img/emojis/watch.png b/taiga/base/static/img/emojis/watch.png
new file mode 100644
index 00000000..f5e05c6b
Binary files /dev/null and b/taiga/base/static/img/emojis/watch.png differ
diff --git a/taiga/base/static/img/emojis/water_buffalo.png b/taiga/base/static/img/emojis/water_buffalo.png
new file mode 100644
index 00000000..176ec139
Binary files /dev/null and b/taiga/base/static/img/emojis/water_buffalo.png differ
diff --git a/taiga/base/static/img/emojis/watermelon.png b/taiga/base/static/img/emojis/watermelon.png
new file mode 100644
index 00000000..79d2db39
Binary files /dev/null and b/taiga/base/static/img/emojis/watermelon.png differ
diff --git a/taiga/base/static/img/emojis/wave.png b/taiga/base/static/img/emojis/wave.png
new file mode 100644
index 00000000..67bd0aff
Binary files /dev/null and b/taiga/base/static/img/emojis/wave.png differ
diff --git a/taiga/base/static/img/emojis/wavy_dash.png b/taiga/base/static/img/emojis/wavy_dash.png
new file mode 100644
index 00000000..7b862a7b
Binary files /dev/null and b/taiga/base/static/img/emojis/wavy_dash.png differ
diff --git a/taiga/base/static/img/emojis/waxing_crescent_moon.png b/taiga/base/static/img/emojis/waxing_crescent_moon.png
new file mode 100644
index 00000000..b7ce6eb5
Binary files /dev/null and b/taiga/base/static/img/emojis/waxing_crescent_moon.png differ
diff --git a/taiga/base/static/img/emojis/waxing_gibbous_moon.png b/taiga/base/static/img/emojis/waxing_gibbous_moon.png
new file mode 100644
index 00000000..761e8b0e
Binary files /dev/null and b/taiga/base/static/img/emojis/waxing_gibbous_moon.png differ
diff --git a/taiga/base/static/img/emojis/wc.png b/taiga/base/static/img/emojis/wc.png
new file mode 100644
index 00000000..c176e0e7
Binary files /dev/null and b/taiga/base/static/img/emojis/wc.png differ
diff --git a/taiga/base/static/img/emojis/weary.png b/taiga/base/static/img/emojis/weary.png
new file mode 100644
index 00000000..507bf293
Binary files /dev/null and b/taiga/base/static/img/emojis/weary.png differ
diff --git a/taiga/base/static/img/emojis/wedding.png b/taiga/base/static/img/emojis/wedding.png
new file mode 100644
index 00000000..96162312
Binary files /dev/null and b/taiga/base/static/img/emojis/wedding.png differ
diff --git a/taiga/base/static/img/emojis/whale.png b/taiga/base/static/img/emojis/whale.png
new file mode 100644
index 00000000..ed017253
Binary files /dev/null and b/taiga/base/static/img/emojis/whale.png differ
diff --git a/taiga/base/static/img/emojis/whale2.png b/taiga/base/static/img/emojis/whale2.png
new file mode 100644
index 00000000..9a7bd620
Binary files /dev/null and b/taiga/base/static/img/emojis/whale2.png differ
diff --git a/taiga/base/static/img/emojis/wheelchair.png b/taiga/base/static/img/emojis/wheelchair.png
new file mode 100644
index 00000000..70896039
Binary files /dev/null and b/taiga/base/static/img/emojis/wheelchair.png differ
diff --git a/taiga/base/static/img/emojis/white_check_mark.png b/taiga/base/static/img/emojis/white_check_mark.png
new file mode 100644
index 00000000..92a3d5db
Binary files /dev/null and b/taiga/base/static/img/emojis/white_check_mark.png differ
diff --git a/taiga/base/static/img/emojis/white_circle.png b/taiga/base/static/img/emojis/white_circle.png
new file mode 100644
index 00000000..5184662b
Binary files /dev/null and b/taiga/base/static/img/emojis/white_circle.png differ
diff --git a/taiga/base/static/img/emojis/white_flower.png b/taiga/base/static/img/emojis/white_flower.png
new file mode 100644
index 00000000..9b73257a
Binary files /dev/null and b/taiga/base/static/img/emojis/white_flower.png differ
diff --git a/taiga/base/static/img/emojis/white_square.png b/taiga/base/static/img/emojis/white_square.png
new file mode 100644
index 00000000..00bcb405
Binary files /dev/null and b/taiga/base/static/img/emojis/white_square.png differ
diff --git a/taiga/base/static/img/emojis/white_square_button.png b/taiga/base/static/img/emojis/white_square_button.png
new file mode 100644
index 00000000..c02751f3
Binary files /dev/null and b/taiga/base/static/img/emojis/white_square_button.png differ
diff --git a/taiga/base/static/img/emojis/wind_chime.png b/taiga/base/static/img/emojis/wind_chime.png
new file mode 100644
index 00000000..4dcab90a
Binary files /dev/null and b/taiga/base/static/img/emojis/wind_chime.png differ
diff --git a/taiga/base/static/img/emojis/wine_glass.png b/taiga/base/static/img/emojis/wine_glass.png
new file mode 100644
index 00000000..f5ee0e73
Binary files /dev/null and b/taiga/base/static/img/emojis/wine_glass.png differ
diff --git a/taiga/base/static/img/emojis/wink.png b/taiga/base/static/img/emojis/wink.png
new file mode 100644
index 00000000..b75959b1
Binary files /dev/null and b/taiga/base/static/img/emojis/wink.png differ
diff --git a/taiga/base/static/img/emojis/wolf.png b/taiga/base/static/img/emojis/wolf.png
new file mode 100644
index 00000000..0e9564ab
Binary files /dev/null and b/taiga/base/static/img/emojis/wolf.png differ
diff --git a/taiga/base/static/img/emojis/woman.png b/taiga/base/static/img/emojis/woman.png
new file mode 100644
index 00000000..3333b504
Binary files /dev/null and b/taiga/base/static/img/emojis/woman.png differ
diff --git a/taiga/base/static/img/emojis/womans_clothes.png b/taiga/base/static/img/emojis/womans_clothes.png
new file mode 100644
index 00000000..03420fdc
Binary files /dev/null and b/taiga/base/static/img/emojis/womans_clothes.png differ
diff --git a/taiga/base/static/img/emojis/womans_hat.png b/taiga/base/static/img/emojis/womans_hat.png
new file mode 100644
index 00000000..2470cb61
Binary files /dev/null and b/taiga/base/static/img/emojis/womans_hat.png differ
diff --git a/taiga/base/static/img/emojis/womens.png b/taiga/base/static/img/emojis/womens.png
new file mode 100644
index 00000000..35fe2dff
Binary files /dev/null and b/taiga/base/static/img/emojis/womens.png differ
diff --git a/taiga/base/static/img/emojis/worried.png b/taiga/base/static/img/emojis/worried.png
new file mode 100644
index 00000000..869755b8
Binary files /dev/null and b/taiga/base/static/img/emojis/worried.png differ
diff --git a/taiga/base/static/img/emojis/wrench.png b/taiga/base/static/img/emojis/wrench.png
new file mode 100644
index 00000000..42220825
Binary files /dev/null and b/taiga/base/static/img/emojis/wrench.png differ
diff --git a/taiga/base/static/img/emojis/x.png b/taiga/base/static/img/emojis/x.png
new file mode 100644
index 00000000..50c8b1d5
Binary files /dev/null and b/taiga/base/static/img/emojis/x.png differ
diff --git a/taiga/base/static/img/emojis/yellow_heart.png b/taiga/base/static/img/emojis/yellow_heart.png
new file mode 100644
index 00000000..47a9449f
Binary files /dev/null and b/taiga/base/static/img/emojis/yellow_heart.png differ
diff --git a/taiga/base/static/img/emojis/yen.png b/taiga/base/static/img/emojis/yen.png
new file mode 100644
index 00000000..a241ab42
Binary files /dev/null and b/taiga/base/static/img/emojis/yen.png differ
diff --git a/taiga/base/static/img/emojis/yum.png b/taiga/base/static/img/emojis/yum.png
new file mode 100644
index 00000000..cb602eee
Binary files /dev/null and b/taiga/base/static/img/emojis/yum.png differ
diff --git a/taiga/base/static/img/emojis/zap.png b/taiga/base/static/img/emojis/zap.png
new file mode 100644
index 00000000..af0a9562
Binary files /dev/null and b/taiga/base/static/img/emojis/zap.png differ
diff --git a/taiga/base/static/img/emojis/zero.png b/taiga/base/static/img/emojis/zero.png
new file mode 100644
index 00000000..f12f2a75
Binary files /dev/null and b/taiga/base/static/img/emojis/zero.png differ
diff --git a/taiga/base/static/img/emojis/zzz.png b/taiga/base/static/img/emojis/zzz.png
new file mode 100644
index 00000000..edb464c6
Binary files /dev/null and b/taiga/base/static/img/emojis/zzz.png differ
diff --git a/taiga/mdrender/__init__.py b/taiga/mdrender/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/taiga/mdrender/gfm/__init__.py b/taiga/mdrender/gfm/__init__.py
new file mode 100644
index 00000000..48f85fde
--- /dev/null
+++ b/taiga/mdrender/gfm/__init__.py
@@ -0,0 +1,17 @@
+# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+from . import autolink
+from . import automail
+from . import hidden_hilite
+from . import semi_sane_lists
+from . import spaced_link
+from . import strikethrough
+
+AutolinkExtension = autolink.AutolinkExtension
+AutomailExtension = automail.AutomailExtension
+HiddenHiliteExtension = hidden_hilite.HiddenHiliteExtension
+SemiSaneListExtension = semi_sane_lists.SemiSaneListExtension
+SpacedLinkExtension = spaced_link.SpacedLinkExtension
+StrikethroughExtension = strikethrough.StrikethroughExtension
diff --git a/taiga/mdrender/gfm/autolink.py b/taiga/mdrender/gfm/autolink.py
new file mode 100644
index 00000000..1dbf2b98
--- /dev/null
+++ b/taiga/mdrender/gfm/autolink.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import re
+import markdown
+
+# We can't re-use the built-in AutolinkPattern because we need to add protocols
+# to links without them.
+class AutolinkPattern(markdown.inlinepatterns.Pattern):
+ def handleMatch(self, m):
+ el = markdown.util.etree.Element("a")
+
+ href = m.group(2)
+ if not re.match('^(ftp|https?)://', href, flags=re.IGNORECASE):
+ href = 'http://%s' % href
+ el.set('href', self.unescape(href))
+
+ el.text = markdown.util.AtomicString(m.group(2))
+ return el
+
+class AutolinkExtension(markdown.Extension):
+ """An extension that turns all URLs into links.
+
+ This is based on the web-only URL regex by John Gruber that's listed on
+ http://daringfireball.net/2010/07/improved_regex_for_matching_urls (which is
+ in the public domain).
+
+ This regex seems to line up pretty closely with GitHub's URL matching. There
+ are only two cases I've found where they differ. In both cases, I've
+ modified the regex slightly to bring it in line with GitHub's parsing:
+
+ * GitHub accepts FTP-protocol URLs.
+ * GitHub only accepts URLs with protocols or "www.", whereas Gruber's regex
+ accepts things like "foo.com/bar".
+ """
+
+ def extendMarkdown(self, md, md_globals):
+ url_re = r'(?i)\b((?:(?:ftp|https?)://|www\d{0,3}[.])(?:[^\s()<>]+|' + \
+ r'\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()' + \
+ r'<>]+\)))*\)|[^\s`!()\[\]{};:' + r"'" + r'".,<>?«»“”‘’]))'
+ autolink = AutolinkPattern(url_re, md)
+ md.inlinePatterns.add('gfm-autolink', autolink, '_end')
diff --git a/taiga/mdrender/gfm/automail.py b/taiga/mdrender/gfm/automail.py
new file mode 100644
index 00000000..f8c65f77
--- /dev/null
+++ b/taiga/mdrender/gfm/automail.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import re
+import markdown
+
+# We can't re-use the built-in AutomailPattern because we need to add mailto:.
+# We also don't care about HTML-encoding the email.
+class AutomailPattern(markdown.inlinepatterns.Pattern):
+ def handleMatch(self, m):
+ el = markdown.util.etree.Element("a")
+ el.set('href', self.unescape('mailto:' + m.group(2)))
+ el.text = markdown.util.AtomicString(m.group(2))
+ return el
+
+class AutomailExtension(markdown.Extension):
+ """An extension that turns all email addresses into links."""
+
+ def extendMarkdown(self, md, md_globals):
+ mail_re = r'\b(?i)([a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]+)\b'
+ automail = AutomailPattern(mail_re, md)
+ md.inlinePatterns.add('gfm-automail', automail, '_end')
diff --git a/taiga/mdrender/gfm/hidden_hilite.py b/taiga/mdrender/gfm/hidden_hilite.py
new file mode 100644
index 00000000..b1fe036c
--- /dev/null
+++ b/taiga/mdrender/gfm/hidden_hilite.py
@@ -0,0 +1,16 @@
+# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+from markdown.extensions.codehilite import CodeHiliteExtension
+
+class HiddenHiliteExtension(CodeHiliteExtension):
+ """A subclass of CodeHiliteExtension that doesn't highlight on its own.
+
+ This just enables the fenced code extension to use syntax highlighting,
+ without adding syntax highlighting or line numbers to any additional code
+ blocks.
+ """
+
+ def extendMarkdown(self, md, md_globals):
+ md.registerExtension(self)
diff --git a/taiga/mdrender/gfm/semi_sane_lists.py b/taiga/mdrender/gfm/semi_sane_lists.py
new file mode 100644
index 00000000..477b8ef7
--- /dev/null
+++ b/taiga/mdrender/gfm/semi_sane_lists.py
@@ -0,0 +1,30 @@
+# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import re
+import markdown
+
+class SemiSaneOListProcessor(markdown.blockprocessors.OListProcessor):
+ SIBLING_TAGS = ['ol']
+
+class SemiSaneUListProcessor(markdown.blockprocessors.UListProcessor):
+ SIBLING_TAGS = ['ul']
+
+class SemiSaneListExtension(markdown.Extension):
+ """An extension that causes lists to be treated the same way GitHub does.
+
+ Like the sane_lists extension, GitHub considers a list to end if it's
+ separated by multiple newlines from another list of a different type. Unlike
+ the sane_lists extension, GitHub will mix list types if they're not
+ separated by multiple newlines.
+
+ Github also recognizes lists that start in the middle of a paragraph. This
+ is currently not supported by this extension, since the Python parser has a
+ deeply-ingrained belief that blocks are always separated by multiple
+ newlines.
+ """
+
+ def extendMarkdown(self, md, md_globals):
+ md.parser.blockprocessors['olist'] = SemiSaneOListProcessor(md.parser)
+ md.parser.blockprocessors['ulist'] = SemiSaneUListProcessor(md.parser)
diff --git a/taiga/mdrender/gfm/spaced_link.py b/taiga/mdrender/gfm/spaced_link.py
new file mode 100644
index 00000000..c0d08d09
--- /dev/null
+++ b/taiga/mdrender/gfm/spaced_link.py
@@ -0,0 +1,41 @@
+# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import markdown
+
+BRK = markdown.inlinepatterns.BRK
+NOIMG = markdown.inlinepatterns.NOIMG
+SPACE = r"(?:\s*(?:\r\n|\r|\n)?\s*)"
+
+SPACED_LINK_RE = markdown.inlinepatterns.LINK_RE.replace(
+ NOIMG + BRK, NOIMG + BRK + SPACE)
+
+SPACED_REFERENCE_RE = markdown.inlinepatterns.REFERENCE_RE.replace(
+ NOIMG + BRK, NOIMG + BRK + SPACE)
+
+SPACED_IMAGE_LINK_RE = markdown.inlinepatterns.IMAGE_LINK_RE.replace(
+ r'\!' + BRK, r'\!' + BRK + SPACE)
+
+SPACED_IMAGE_REFERENCE_RE = markdown.inlinepatterns.IMAGE_REFERENCE_RE.replace(
+ r'\!' + BRK, r'\!' + BRK + SPACE)
+
+class SpacedLinkExtension(markdown.Extension):
+ """An extension that supports links and images with additional whitespace.
+
+ GitHub's Markdown engine allows links and images to have whitespace --
+ including a single newline -- between the first set of brackets and the
+ second (e.g. ``[text] (href)``). Python-Markdown does not, but this
+ extension adds such support.
+ """
+
+ def extendMarkdown(self, md, md_globals):
+ md.inlinePatterns["link"] = \
+ markdown.inlinepatterns.LinkPattern(SPACED_LINK_RE, md)
+ md.inlinePatterns["reference"] = \
+ markdown.inlinepatterns.ReferencePattern(SPACED_REFERENCE_RE, md)
+ md.inlinePatterns["image_link"] = \
+ markdown.inlinepatterns.ImagePattern(SPACED_IMAGE_LINK_RE, md)
+ md.inlinePatterns["image_reference"] = \
+ markdown.inlinepatterns.ImageReferencePattern(
+ SPACED_IMAGE_REFERENCE_RE, md)
diff --git a/taiga/mdrender/gfm/strikethrough.py b/taiga/mdrender/gfm/strikethrough.py
new file mode 100644
index 00000000..eabf87d2
--- /dev/null
+++ b/taiga/mdrender/gfm/strikethrough.py
@@ -0,0 +1,17 @@
+# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import markdown
+
+STRIKE_RE = r'(~{2})(.+?)(~{2})' # ~~strike~~
+
+class StrikethroughExtension(markdown.Extension):
+ """An extension that supports PHP-Markdown style strikethrough.
+
+ For example: ``~~strike~~``.
+ """
+
+ def extendMarkdown(self, md, md_globals):
+ pattern = markdown.inlinepatterns.SimpleTagPattern(STRIKE_RE, 'del')
+ md.inlinePatterns.add('gfm-strikethrough', pattern, '_end')
diff --git a/taiga/mdrender/processors/__init__.py b/taiga/mdrender/processors/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/taiga/mdrender/processors/emoji.py b/taiga/mdrender/processors/emoji.py
new file mode 100644
index 00000000..c12f9eaa
--- /dev/null
+++ b/taiga/mdrender/processors/emoji.py
@@ -0,0 +1,134 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2012, lepture.com
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the author nor the names of its contributors
+# may be used to endorse or promote products derived from this
+# software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import re
+
+
+emoji_url = 'http://localhost:8000/static/img/emojis/'
+emoji_list = [
+ "-1", "0", "1", "109", "2", "3", "4", "5", "6", "7", "8", "8ball", "9",
+ "a", "ab", "airplane", "alien", "ambulance", "angel", "anger", "angry",
+ "apple", "aquarius", "aries", "arrow_backward", "arrow_down",
+ "arrow_forward", "arrow_left", "arrow_lower_left", "arrow_lower_right",
+ "arrow_right", "arrow_up", "arrow_upper_left", "arrow_upper_right",
+ "art", "astonished", "atm", "b", "baby", "baby_chick", "baby_symbol",
+ "balloon", "bamboo", "bank", "barber", "baseball", "basketball", "bath",
+ "bear", "beer", "beers", "beginner", "bell", "bento", "bike", "bikini",
+ "bird", "birthday", "black_square", "blue_car", "blue_heart", "blush",
+ "boar", "boat", "bomb", "book", "boot", "bouquet", "bow", "bowtie",
+ "boy", "bread", "briefcase", "broken_heart", "bug", "bulb",
+ "bullettrain_front", "bullettrain_side", "bus", "busstop", "cactus",
+ "cake", "calling", "camel", "camera", "cancer", "capricorn", "car",
+ "cat", "cd", "chart", "checkered_flag", "cherry_blossom", "chicken",
+ "christmas_tree", "church", "cinema", "city_sunrise", "city_sunset",
+ "clap", "clapper", "clock1", "clock10", "clock11", "clock12", "clock2",
+ "clock3", "clock4", "clock5", "clock6", "clock7", "clock8", "clock9",
+ "closed_umbrella", "cloud", "clubs", "cn", "cocktail", "coffee",
+ "cold_sweat", "computer", "confounded", "congratulations",
+ "construction", "construction_worker", "convenience_store", "cool",
+ "cop", "copyright", "couple", "couple_with_heart", "couplekiss", "cow",
+ "crossed_flags", "crown", "cry", "cupid", "currency_exchange", "curry",
+ "cyclone", "dancer", "dancers", "dango", "dart", "dash", "de",
+ "department_store", "diamonds", "disappointed", "dog", "dolls",
+ "dolphin", "dress", "dvd", "ear", "ear_of_rice", "egg", "eggplant",
+ "egplant", "eight_pointed_black_star", "eight_spoked_asterisk",
+ "elephant", "email", "es", "european_castle", "exclamation", "eyes",
+ "factory", "fallen_leaf", "fast_forward", "fax", "fearful", "feelsgood",
+ "feet", "ferris_wheel", "finnadie", "fire", "fire_engine", "fireworks",
+ "fish", "fist", "flags", "flushed", "football", "fork_and_knife",
+ "fountain", "four_leaf_clover", "fr", "fries", "frog", "fuelpump", "gb",
+ "gem", "gemini", "ghost", "gift", "gift_heart", "girl", "goberserk",
+ "godmode", "golf", "green_heart", "grey_exclamation", "grey_question",
+ "grin", "guardsman", "guitar", "gun", "haircut", "hamburger", "hammer",
+ "hamster", "hand", "handbag", "hankey", "hash", "headphones", "heart",
+ "heart_decoration", "heart_eyes", "heartbeat", "heartpulse", "hearts",
+ "hibiscus", "high_heel", "horse", "hospital", "hotel", "hotsprings",
+ "house", "hurtrealbad", "icecream", "id", "ideograph_advantage", "imp",
+ "information_desk_person", "iphone", "it", "jack_o_lantern",
+ "japanese_castle", "joy", "jp", "key", "kimono", "kiss", "kissing_face",
+ "kissing_heart", "koala", "koko", "kr", "leaves", "leo", "libra", "lips",
+ "lipstick", "lock", "loop", "loudspeaker", "love_hotel", "mag",
+ "mahjong", "mailbox", "man", "man_with_gua_pi_mao", "man_with_turban",
+ "maple_leaf", "mask", "massage", "mega", "memo", "mens", "metal",
+ "metro", "microphone", "minidisc", "mobile_phone_off", "moneybag",
+ "monkey", "monkey_face", "moon", "mortar_board", "mount_fuji", "mouse",
+ "movie_camera", "muscle", "musical_note", "nail_care", "necktie", "new",
+ "no_good", "no_smoking", "nose", "notes", "o", "o2", "ocean", "octocat",
+ "octopus", "oden", "office", "ok", "ok_hand", "ok_woman", "older_man",
+ "older_woman", "open_hands", "ophiuchus", "palm_tree", "parking",
+ "part_alternation_mark", "pencil", "penguin", "pensive", "persevere",
+ "person_with_blond_hair", "phone", "pig", "pill", "pisces", "plus1",
+ "point_down", "point_left", "point_right", "point_up", "point_up_2",
+ "police_car", "poop", "post_office", "postbox", "pray", "princess",
+ "punch", "purple_heart", "question", "rabbit", "racehorse", "radio",
+ "rage", "rage1", "rage2", "rage3", "rage4", "rainbow", "raised_hands",
+ "ramen", "red_car", "red_circle", "registered", "relaxed", "relieved",
+ "restroom", "rewind", "ribbon", "rice", "rice_ball", "rice_cracker",
+ "rice_scene", "ring", "rocket", "roller_coaster", "rose", "ru", "runner",
+ "sa", "sagittarius", "sailboat", "sake", "sandal", "santa", "satellite",
+ "satisfied", "saxophone", "school", "school_satchel", "scissors",
+ "scorpius", "scream", "seat", "secret", "shaved_ice", "sheep", "shell",
+ "ship", "shipit", "shirt", "shit", "shoe", "signal_strength",
+ "six_pointed_star", "ski", "skull", "sleepy", "slot_machine", "smile",
+ "smiley", "smirk", "smoking", "snake", "snowman", "sob", "soccer",
+ "space_invader", "spades", "spaghetti", "sparkler", "sparkles",
+ "speaker", "speedboat", "squirrel", "star", "star2", "stars", "station",
+ "statue_of_liberty", "stew", "strawberry", "sunflower", "sunny",
+ "sunrise", "sunrise_over_mountains", "surfer", "sushi", "suspect",
+ "sweat", "sweat_drops", "swimmer", "syringe", "tada", "tangerine",
+ "taurus", "taxi", "tea", "telephone", "tennis", "tent", "thumbsdown",
+ "thumbsup", "ticket", "tiger", "tm", "toilet", "tokyo_tower", "tomato",
+ "tongue", "top", "tophat", "traffic_light", "train", "trident",
+ "trollface", "trophy", "tropical_fish", "truck", "trumpet", "tshirt",
+ "tulip", "tv", "u5272", "u55b6", "u6307", "u6708", "u6709", "u6e80",
+ "u7121", "u7533", "u7a7a", "umbrella", "unamused", "underage", "unlock",
+ "up", "us", "v", "vhs", "vibration_mode", "virgo", "vs", "walking",
+ "warning", "watermelon", "wave", "wc", "wedding", "whale", "wheelchair",
+ "white_square", "wind_chime", "wink", "wink2", "wolf", "woman",
+ "womans_hat", "womens", "x", "yellow_heart", "zap", "zzz", "+1"
+]
+
+
+def emoji(text):
+ pattern = re.compile(':([a-z0-9\+\-_]+):')
+
+ def make_emoji(m):
+ name = m.group(1)
+ if name not in emoji_list:
+ return ':%s:' % name
+ tpl = ('
')
+ return tpl % {'name': name, 'url': emoji_url}
+
+ text = pattern.sub(make_emoji, text)
+ return text
+
+__all__ = ['emoji']
diff --git a/taiga/mdrender/processors/mentions.py b/taiga/mdrender/processors/mentions.py
new file mode 100644
index 00000000..4d65a527
--- /dev/null
+++ b/taiga/mdrender/processors/mentions.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2012, lepture.com
+# Copyright (c) 2014, taiga.io
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the author nor the names of its contributors
+# may be used to endorse or promote products derived from this
+# software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import re
+
+from taiga.users.models import User
+
+def mentions(text):
+ pattern = re.compile('(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9]+)')
+
+ def make_mention_link(m):
+ name = m.group(1)
+
+ if not User.objects.filter(username=name):
+ return "@{name}".format(name=name)
+
+ tpl = ('[@{name}](/#/profile/{name} "@{name}")')
+ return tpl.format(name=name)
+
+ text = pattern.sub(make_mention_link, text)
+ return text
+
+__all__ = ['mentions']
diff --git a/taiga/mdrender/processors/references.py b/taiga/mdrender/processors/references.py
new file mode 100644
index 00000000..820be9e9
--- /dev/null
+++ b/taiga/mdrender/processors/references.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2012, lepture.com
+# Copyright (c) 2014, taiga.io
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the author nor the names of its contributors
+# may be used to endorse or promote products derived from this
+# software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import re
+
+from taiga.projects.userstories.models import UserStory
+from taiga.projects.issues.models import Issue
+from taiga.projects.tasks.models import Task
+
+
+def references(project, text):
+ pattern = re.compile('(?<=^|(?<=[^a-zA-Z0-9-]))#(us|issue|task)(\d+)')
+
+ def make_reference_link(m):
+ obj_type = m.group(1)
+ obj_ref = m.group(2)
+
+ if obj_type == "us":
+ model = UserStory
+ obj_section = "user-story"
+ elif obj_type == "issue":
+ model = Issue
+ obj_section = "issues"
+ elif obj_type == "task":
+ model = Task
+ obj_section = "tasks"
+
+ instances = model.objects.filter(project_id=project.id, ref=obj_ref)
+ if not instances:
+ return "#{type}{ref}".format(type=obj_type, ref=obj_ref)
+
+ subject = instances[0].subject
+
+ return '[#{type}{ref}](/#/project/{project_slug}/{section}/{ref} "{subject}")'.format(
+ type=obj_type,
+ section=obj_section,
+ ref=obj_ref,
+ project_slug=project.slug,
+ subject=subject
+ )
+
+ text = pattern.sub(make_reference_link, text)
+ return text
+
+__all__ = ['references']
diff --git a/taiga/mdrender/service.py b/taiga/mdrender/service.py
new file mode 100644
index 00000000..a0fda0bd
--- /dev/null
+++ b/taiga/mdrender/service.py
@@ -0,0 +1,58 @@
+import hashlib
+from django.core.cache import cache
+from django.utils.encoding import force_bytes
+from markdown import markdown
+from markdown.extensions.wikilinks import WikiLinkExtension
+from .gfm import (AutolinkExtension, AutomailExtension, HiddenHiliteExtension,
+ SemiSaneListExtension, SpacedLinkExtension,
+ StrikethroughExtension)
+from .processors.emoji import emoji
+from .processors.mentions import mentions
+from .processors.references import references
+
+from fn import F
+
+def cache_by_sha(func):
+ def _decorator(project, text):
+ sha1_hash = hashlib.sha1(force_bytes(text)).hexdigest()
+ key = "{}-{}".format(sha1_hash, project.id)
+
+ # Try to get it from the cache
+ cached = cache.get(key)
+ if cached is not None:
+ return cached
+
+ returned_value = func(text)
+
+ cache.set(key, returned_value, timeout=None)
+ return returned_value
+
+ return _decorator
+
+def _render_markdown(project, text):
+ wikilinks_config = {
+ "base_url": "#/project/{}/wiki/".format(project.slug),
+ "end_url": ""
+ }
+ return markdown(text, extensions=[
+ AutolinkExtension(), AutomailExtension(),
+ SemiSaneListExtension(), SpacedLinkExtension(),
+ StrikethroughExtension(), WikiLinkExtension(wikilinks_config), "extra",
+ "codehilite"
+ ])
+
+def _preprocessors(project, text):
+ pre = F() >> mentions >> F(references, project)
+ return pre(text)
+
+def _postprocessors(project, html):
+ post = F() >> emoji
+ return post(html)
+
+#@cache_by_sha
+def render(project, text):
+ renderer = F() >> F(_preprocessors, project) >> F(_render_markdown, project) >> F(_postprocessors, project)
+
+ return renderer(text)
+
+__all__ = ['render']
diff --git a/taiga/projects/issues/serializers.py b/taiga/projects/issues/serializers.py
index 31c464d5..ec258ba8 100644
--- a/taiga/projects/issues/serializers.py
+++ b/taiga/projects/issues/serializers.py
@@ -19,6 +19,7 @@ from rest_framework import serializers
from taiga.base.serializers import PickleField, NeighborsSerializerMixin
from taiga.projects.attachments.serializers import AttachmentSerializer
from taiga.projects.mixins.notifications import WatcherValidationSerializerMixin
+from taiga.mdrender.service import render as mdrender
from . import models
@@ -34,6 +35,8 @@ class IssueSerializer(WatcherValidationSerializerMixin, serializers.ModelSeriali
comment = serializers.SerializerMethodField("get_comment")
attachments = IssueAttachmentSerializer(many=True, read_only=True)
generated_user_stories = serializers.SerializerMethodField("get_generated_user_stories")
+ blocked_note_html = serializers.SerializerMethodField("get_blocked_note_html")
+ description_html = serializers.SerializerMethodField("get_description_html")
class Meta:
model = models.Issue
@@ -45,6 +48,12 @@ class IssueSerializer(WatcherValidationSerializerMixin, serializers.ModelSeriali
def get_generated_user_stories(self, obj):
return obj.generated_user_stories.values("id", "ref", "subject")
+ def get_blocked_note_html(self, obj):
+ return mdrender(obj.project, obj.blocked_note)
+
+ def get_description_html(self, obj):
+ return mdrender(obj.project, obj.description)
+
class IssueNeighborsSerializer(NeighborsSerializerMixin, IssueSerializer):
diff --git a/taiga/projects/tasks/serializers.py b/taiga/projects/tasks/serializers.py
index fabee54a..1e3d2ea8 100644
--- a/taiga/projects/tasks/serializers.py
+++ b/taiga/projects/tasks/serializers.py
@@ -25,6 +25,8 @@ class TaskSerializer(serializers.ModelSerializer):
tags = PickleField(required=False, default=[])
comment = serializers.SerializerMethodField("get_comment")
milestone_slug = serializers.SerializerMethodField("get_milestone_slug")
+ blocked_note_html = serializers.SerializerMethodField("get_blocked_note_html")
+ description_html = serializers.SerializerMethodField("get_description_html")
class Meta:
model = models.Task
@@ -37,3 +39,9 @@ class TaskSerializer(serializers.ModelSerializer):
return obj.milestone.slug
else:
return None
+
+ def get_blocked_note_html(self, obj):
+ return mdrender(obj.project, obj.blocked_note)
+
+ def get_description_html(self, obj):
+ return mdrender(obj.project, obj.description)
diff --git a/taiga/projects/userstories/serializers.py b/taiga/projects/userstories/serializers.py
index 0db8aef7..8418c6f6 100644
--- a/taiga/projects/userstories/serializers.py
+++ b/taiga/projects/userstories/serializers.py
@@ -19,6 +19,7 @@ from django.db.models import get_model
from rest_framework import serializers
from taiga.base.serializers import PickleField, NeighborsSerializerMixin
+from taiga.mdrender.service import render as mdrender
from . import models
@@ -41,6 +42,8 @@ class UserStorySerializer(serializers.ModelSerializer):
milestone_slug = serializers.SerializerMethodField("get_milestone_slug")
milestone_name = serializers.SerializerMethodField("get_milestone_name")
origin_issue = serializers.SerializerMethodField("get_origin_issue")
+ blocked_note_html = serializers.SerializerMethodField("get_blocked_note_html")
+ description_html = serializers.SerializerMethodField("get_description_html")
class Meta:
model = models.UserStory
@@ -88,6 +91,12 @@ class UserStorySerializer(serializers.ModelSerializer):
}
return None
+ def get_blocked_note_html(self, obj):
+ return mdrender(obj.project, obj.blocked_note)
+
+ def get_description_html(self, obj):
+ return mdrender(obj.project, obj.description)
+
class UserStoryNeighborsSerializer(NeighborsSerializerMixin, UserStorySerializer):
diff --git a/taiga/projects/wiki/serializers.py b/taiga/projects/wiki/serializers.py
index 24272c17..73d13387 100644
--- a/taiga/projects/wiki/serializers.py
+++ b/taiga/projects/wiki/serializers.py
@@ -18,7 +18,14 @@ from rest_framework import serializers
from . import models
+from taiga.mdrender.service import render as mdrender
+
class WikiPageSerializer(serializers.ModelSerializer):
+ html = serializers.SerializerMethodField("get_html")
+
class Meta:
model = models.WikiPage
+
+ def get_html(self, obj):
+ return mdrender(obj.project, obj.content)
diff --git a/tests/unit/test_mdrender.py b/tests/unit/test_mdrender.py
new file mode 100644
index 00000000..7d325200
--- /dev/null
+++ b/tests/unit/test_mdrender.py
@@ -0,0 +1,158 @@
+from unittest import mock
+
+import pytest
+
+import taiga.base
+from taiga.mdrender.processors import emoji
+from taiga.mdrender.processors import mentions
+from taiga.mdrender.processors import references
+
+class DummyClass:
+ pass
+
+def test_proccessor_valid_emoji():
+ result = emoji.emoji(":smile:")
+ assert result == '
'
+
+def test_proccessor_invalid_emoji():
+ result = emoji.emoji(":notvalidemoji:")
+ assert result == ":notvalidemoji:"
+
+def test_proccessor_valid_user_mention():
+ DummyModel = DummyClass()
+ DummyModel.objects = DummyClass()
+ DummyModel.objects.filter = lambda username: ["test"]
+
+ mentions.User = DummyModel
+
+ result = mentions.mentions("**@user1**")
+ assert result == '**[@user1](/#/profile/user1 "@user1")**'
+
+def test_proccessor_invalid_user_mention():
+ DummyModel = DummyClass()
+ DummyModel.objects = DummyClass()
+ DummyModel.objects.filter = lambda username: []
+
+ mentions.User = DummyModel
+
+ result = mentions.mentions("**@notvaliduser**")
+ assert result == '**@notvaliduser**'
+
+
+def test_proccessor_valid_us_reference():
+ class MockModelWithInstance:
+ class objects:
+ def filter(*args, **kwargs):
+ dummy_instance = DummyClass()
+ dummy_instance.subject = "test-subject"
+ return [dummy_instance]
+ UserStoryBack = references.UserStory
+ references.UserStory = MockModelWithInstance
+
+ DummyProject = DummyClass()
+ DummyProject.id = 1
+ DummyProject.slug = "test"
+
+ result = references.references(DummyProject, "**#us1**")
+ assert result == '**[#us1](/#/project/test/user-story/1 "test-subject")**'
+
+ references.UserStory = UserStoryBack
+
+
+def test_proccessor_invalid_us_reference():
+ class MockModelEmpty:
+ class objects:
+ def filter(*args, **kwargs):
+ return []
+
+ DummyProject = DummyClass()
+ DummyProject.id = 1
+ DummyProject.slug = "test"
+
+ UserStoryBack = references.UserStory
+ references.UserStory = MockModelEmpty
+
+ result = references.references(DummyProject, "**#us1**")
+ assert result == "**#us1**"
+
+ references.UserStory = UserStoryBack
+
+def test_proccessor_valid_issue_reference():
+ class MockModelWithInstance:
+ class objects:
+ def filter(*args, **kwargs):
+ dummy_instance = DummyClass()
+ dummy_instance.subject = "test-subject"
+ return [dummy_instance]
+ IssueBack = references.Issue
+ references.Issue = MockModelWithInstance
+
+ DummyProject = DummyClass()
+ DummyProject.id = 1
+ DummyProject.slug = "test"
+
+ result = references.references(DummyProject, "**#issue1**")
+ assert result == '**[#issue1](/#/project/test/issues/1 "test-subject")**'
+
+ references.Issue = IssueBack
+
+
+def test_proccessor_invalid_issue_reference():
+ class MockModelEmpty:
+ class objects:
+ def filter(*args, **kwargs):
+ return []
+
+ DummyProject = DummyClass()
+ DummyProject.id = 1
+ DummyProject.slug = "test"
+
+ IssueBack = references.Issue
+ references.Issue = MockModelEmpty
+
+ result = references.references(DummyProject, "**#issue1**")
+ assert result == "**#issue1**"
+
+ references.Issue = IssueBack
+
+def test_proccessor_valid_task_reference():
+ class MockModelWithInstance:
+ class objects:
+ def filter(*args, **kwargs):
+ dummy_instance = DummyClass()
+ dummy_instance.subject = "test-subject"
+ return [dummy_instance]
+ TaskBack = references.Task
+ references.Task = MockModelWithInstance
+
+ DummyProject = DummyClass()
+ DummyProject.id = 1
+ DummyProject.slug = "test"
+
+ result = references.references(DummyProject, "**#task1**")
+ assert result == '**[#task1](/#/project/test/tasks/1 "test-subject")**'
+
+ references.Task = TaskBack
+
+
+def test_proccessor_invalid_task_reference():
+ class MockModelEmpty:
+ class objects:
+ def filter(*args, **kwargs):
+ return []
+
+ DummyProject = DummyClass()
+ DummyProject.id = 1
+ DummyProject.slug = "test"
+
+ TaskBack = references.Task
+ references.Task = MockModelEmpty
+
+ result = references.references(DummyProject, "**#task1**")
+ assert result == "**#task1**"
+
+ references.Task = TaskBack
+
+def test_proccessor_invalid_type_reference():
+ result = references.references(None, "**#invalid1**")
+ assert result == "**#invalid1**"