diff options
Diffstat (limited to 'app')
2000 files changed, 2375 insertions, 1300 deletions
diff --git a/app/assets/images/emoji/100.png b/app/assets/images/emoji/100.png Binary files differdeleted file mode 100644 index 6903ff0304a..00000000000 --- a/app/assets/images/emoji/100.png +++ /dev/null diff --git a/app/assets/images/emoji/1234.png b/app/assets/images/emoji/1234.png Binary files differdeleted file mode 100644 index 248dc7e55b6..00000000000 --- a/app/assets/images/emoji/1234.png +++ /dev/null diff --git a/app/assets/images/emoji/1F627.png b/app/assets/images/emoji/1F627.png Binary files differdeleted file mode 100644 index f99026a3bc7..00000000000 --- a/app/assets/images/emoji/1F627.png +++ /dev/null diff --git a/app/assets/images/emoji/8ball.png b/app/assets/images/emoji/8ball.png Binary files differdeleted file mode 100644 index 38ca662eded..00000000000 --- a/app/assets/images/emoji/8ball.png +++ /dev/null diff --git a/app/assets/images/emoji/a.png b/app/assets/images/emoji/a.png Binary files differdeleted file mode 100644 index 8603ff05a17..00000000000 --- a/app/assets/images/emoji/a.png +++ /dev/null diff --git a/app/assets/images/emoji/ab.png b/app/assets/images/emoji/ab.png Binary files differdeleted file mode 100644 index d9f2d17dea0..00000000000 --- a/app/assets/images/emoji/ab.png +++ /dev/null diff --git a/app/assets/images/emoji/abc.png b/app/assets/images/emoji/abc.png Binary files differdeleted file mode 100644 index 7688de692a9..00000000000 --- a/app/assets/images/emoji/abc.png +++ /dev/null diff --git a/app/assets/images/emoji/abcd.png b/app/assets/images/emoji/abcd.png Binary files differdeleted file mode 100644 index 0996a870570..00000000000 --- a/app/assets/images/emoji/abcd.png +++ /dev/null diff --git a/app/assets/images/emoji/accept.png b/app/assets/images/emoji/accept.png Binary files differdeleted file mode 100644 index 8afd7ce99cf..00000000000 --- a/app/assets/images/emoji/accept.png +++ /dev/null diff --git a/app/assets/images/emoji/aerial_tramway.png b/app/assets/images/emoji/aerial_tramway.png Binary files differdeleted file mode 100644 index 3eb4b61bf1d..00000000000 --- a/app/assets/images/emoji/aerial_tramway.png +++ /dev/null diff --git a/app/assets/images/emoji/airplane.png b/app/assets/images/emoji/airplane.png Binary files differdeleted file mode 100644 index 268d2ac3c8e..00000000000 --- a/app/assets/images/emoji/airplane.png +++ /dev/null diff --git a/app/assets/images/emoji/airplane_arriving.png b/app/assets/images/emoji/airplane_arriving.png Binary files differdeleted file mode 100644 index d66841962f2..00000000000 --- a/app/assets/images/emoji/airplane_arriving.png +++ /dev/null diff --git a/app/assets/images/emoji/airplane_departure.png b/app/assets/images/emoji/airplane_departure.png Binary files differdeleted file mode 100644 index a5766f9f4ae..00000000000 --- a/app/assets/images/emoji/airplane_departure.png +++ /dev/null diff --git a/app/assets/images/emoji/airplane_small.png b/app/assets/images/emoji/airplane_small.png Binary files differdeleted file mode 100644 index b731b15e3a8..00000000000 --- a/app/assets/images/emoji/airplane_small.png +++ /dev/null diff --git a/app/assets/images/emoji/alarm_clock.png b/app/assets/images/emoji/alarm_clock.png Binary files differdeleted file mode 100644 index cdbc2fbb950..00000000000 --- a/app/assets/images/emoji/alarm_clock.png +++ /dev/null diff --git a/app/assets/images/emoji/alembic.png b/app/assets/images/emoji/alembic.png Binary files differdeleted file mode 100644 index 307a7324249..00000000000 --- a/app/assets/images/emoji/alembic.png +++ /dev/null diff --git a/app/assets/images/emoji/alien.png b/app/assets/images/emoji/alien.png Binary files differdeleted file mode 100644 index 3b90e97433b..00000000000 --- a/app/assets/images/emoji/alien.png +++ /dev/null diff --git a/app/assets/images/emoji/ambulance.png b/app/assets/images/emoji/ambulance.png Binary files differdeleted file mode 100644 index 6fb8076d766..00000000000 --- a/app/assets/images/emoji/ambulance.png +++ /dev/null diff --git a/app/assets/images/emoji/amphora.png b/app/assets/images/emoji/amphora.png Binary files differdeleted file mode 100644 index 96de5056059..00000000000 --- a/app/assets/images/emoji/amphora.png +++ /dev/null diff --git a/app/assets/images/emoji/anchor.png b/app/assets/images/emoji/anchor.png Binary files differdeleted file mode 100644 index b036f70a00b..00000000000 --- a/app/assets/images/emoji/anchor.png +++ /dev/null diff --git a/app/assets/images/emoji/angel.png b/app/assets/images/emoji/angel.png Binary files differdeleted file mode 100644 index 66ea97a3b99..00000000000 --- a/app/assets/images/emoji/angel.png +++ /dev/null diff --git a/app/assets/images/emoji/angel_tone1.png b/app/assets/images/emoji/angel_tone1.png Binary files differdeleted file mode 100644 index 391694dc07e..00000000000 --- a/app/assets/images/emoji/angel_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/angel_tone2.png b/app/assets/images/emoji/angel_tone2.png Binary files differdeleted file mode 100644 index 700cbe6ed2c..00000000000 --- a/app/assets/images/emoji/angel_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/angel_tone3.png b/app/assets/images/emoji/angel_tone3.png Binary files differdeleted file mode 100644 index be597437d25..00000000000 --- a/app/assets/images/emoji/angel_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/angel_tone4.png b/app/assets/images/emoji/angel_tone4.png Binary files differdeleted file mode 100644 index b06d3c853ef..00000000000 --- a/app/assets/images/emoji/angel_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/angel_tone5.png b/app/assets/images/emoji/angel_tone5.png Binary files differdeleted file mode 100644 index 17bd677e334..00000000000 --- a/app/assets/images/emoji/angel_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/anger.png b/app/assets/images/emoji/anger.png Binary files differdeleted file mode 100644 index d63c2e000e4..00000000000 --- a/app/assets/images/emoji/anger.png +++ /dev/null diff --git a/app/assets/images/emoji/anger_right.png b/app/assets/images/emoji/anger_right.png Binary files differdeleted file mode 100644 index f5c97c4d297..00000000000 --- a/app/assets/images/emoji/anger_right.png +++ /dev/null diff --git a/app/assets/images/emoji/angry.png b/app/assets/images/emoji/angry.png Binary files differdeleted file mode 100644 index cfc4a6ecde5..00000000000 --- a/app/assets/images/emoji/angry.png +++ /dev/null diff --git a/app/assets/images/emoji/ant.png b/app/assets/images/emoji/ant.png Binary files differdeleted file mode 100644 index 994127ed6b3..00000000000 --- a/app/assets/images/emoji/ant.png +++ /dev/null diff --git a/app/assets/images/emoji/apple.png b/app/assets/images/emoji/apple.png Binary files differdeleted file mode 100644 index da650c60f62..00000000000 --- a/app/assets/images/emoji/apple.png +++ /dev/null diff --git a/app/assets/images/emoji/aquarius.png b/app/assets/images/emoji/aquarius.png Binary files differdeleted file mode 100644 index 641a4f68889..00000000000 --- a/app/assets/images/emoji/aquarius.png +++ /dev/null diff --git a/app/assets/images/emoji/aries.png b/app/assets/images/emoji/aries.png Binary files differdeleted file mode 100644 index 21a189d0ede..00000000000 --- a/app/assets/images/emoji/aries.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_backward.png b/app/assets/images/emoji/arrow_backward.png Binary files differdeleted file mode 100644 index ee38e3b038e..00000000000 --- a/app/assets/images/emoji/arrow_backward.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_double_down.png b/app/assets/images/emoji/arrow_double_down.png Binary files differdeleted file mode 100644 index 90193bfcb40..00000000000 --- a/app/assets/images/emoji/arrow_double_down.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_double_up.png b/app/assets/images/emoji/arrow_double_up.png Binary files differdeleted file mode 100644 index 13543d5eef2..00000000000 --- a/app/assets/images/emoji/arrow_double_up.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_down.png b/app/assets/images/emoji/arrow_down.png Binary files differdeleted file mode 100644 index b8eefd0b19f..00000000000 --- a/app/assets/images/emoji/arrow_down.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_down_small.png b/app/assets/images/emoji/arrow_down_small.png Binary files differdeleted file mode 100644 index 5870b9a2241..00000000000 --- a/app/assets/images/emoji/arrow_down_small.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_forward.png b/app/assets/images/emoji/arrow_forward.png Binary files differdeleted file mode 100644 index 4e2b682857c..00000000000 --- a/app/assets/images/emoji/arrow_forward.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_heading_down.png b/app/assets/images/emoji/arrow_heading_down.png Binary files differdeleted file mode 100644 index 2d9d24bca80..00000000000 --- a/app/assets/images/emoji/arrow_heading_down.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_heading_up.png b/app/assets/images/emoji/arrow_heading_up.png Binary files differdeleted file mode 100644 index f29bfcfc0de..00000000000 --- a/app/assets/images/emoji/arrow_heading_up.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_left.png b/app/assets/images/emoji/arrow_left.png Binary files differdeleted file mode 100644 index 8c685e0a81b..00000000000 --- a/app/assets/images/emoji/arrow_left.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_lower_left.png b/app/assets/images/emoji/arrow_lower_left.png Binary files differdeleted file mode 100644 index 88b37716078..00000000000 --- a/app/assets/images/emoji/arrow_lower_left.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_lower_right.png b/app/assets/images/emoji/arrow_lower_right.png Binary files differdeleted file mode 100644 index 7e807da7392..00000000000 --- a/app/assets/images/emoji/arrow_lower_right.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_right.png b/app/assets/images/emoji/arrow_right.png Binary files differdeleted file mode 100644 index 4755670b5cc..00000000000 --- a/app/assets/images/emoji/arrow_right.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_right_hook.png b/app/assets/images/emoji/arrow_right_hook.png Binary files differdeleted file mode 100644 index e7258ad3268..00000000000 --- a/app/assets/images/emoji/arrow_right_hook.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_up.png b/app/assets/images/emoji/arrow_up.png Binary files differdeleted file mode 100644 index af8218a87f7..00000000000 --- a/app/assets/images/emoji/arrow_up.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_up_down.png b/app/assets/images/emoji/arrow_up_down.png Binary files differdeleted file mode 100644 index dfa32b97186..00000000000 --- a/app/assets/images/emoji/arrow_up_down.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_up_small.png b/app/assets/images/emoji/arrow_up_small.png Binary files differdeleted file mode 100644 index 20a13dcd5cd..00000000000 --- a/app/assets/images/emoji/arrow_up_small.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_upper_left.png b/app/assets/images/emoji/arrow_upper_left.png Binary files differdeleted file mode 100644 index f38718fbe34..00000000000 --- a/app/assets/images/emoji/arrow_upper_left.png +++ /dev/null diff --git a/app/assets/images/emoji/arrow_upper_right.png b/app/assets/images/emoji/arrow_upper_right.png Binary files differdeleted file mode 100644 index c43e12d0f64..00000000000 --- a/app/assets/images/emoji/arrow_upper_right.png +++ /dev/null diff --git a/app/assets/images/emoji/arrows_clockwise.png b/app/assets/images/emoji/arrows_clockwise.png Binary files differdeleted file mode 100644 index 26e49c38388..00000000000 --- a/app/assets/images/emoji/arrows_clockwise.png +++ /dev/null diff --git a/app/assets/images/emoji/arrows_counterclockwise.png b/app/assets/images/emoji/arrows_counterclockwise.png Binary files differdeleted file mode 100644 index 8d06d8e0912..00000000000 --- a/app/assets/images/emoji/arrows_counterclockwise.png +++ /dev/null diff --git a/app/assets/images/emoji/art.png b/app/assets/images/emoji/art.png Binary files differdeleted file mode 100644 index bd6afe9ff06..00000000000 --- a/app/assets/images/emoji/art.png +++ /dev/null diff --git a/app/assets/images/emoji/articulated_lorry.png b/app/assets/images/emoji/articulated_lorry.png Binary files differdeleted file mode 100644 index c8217317132..00000000000 --- a/app/assets/images/emoji/articulated_lorry.png +++ /dev/null diff --git a/app/assets/images/emoji/asterisk.png b/app/assets/images/emoji/asterisk.png Binary files differdeleted file mode 100644 index 2f8e5113803..00000000000 --- a/app/assets/images/emoji/asterisk.png +++ /dev/null diff --git a/app/assets/images/emoji/astonished.png b/app/assets/images/emoji/astonished.png Binary files differdeleted file mode 100644 index bd0ac55ec8e..00000000000 --- a/app/assets/images/emoji/astonished.png +++ /dev/null diff --git a/app/assets/images/emoji/athletic_shoe.png b/app/assets/images/emoji/athletic_shoe.png Binary files differdeleted file mode 100644 index 423fa07dd5d..00000000000 --- a/app/assets/images/emoji/athletic_shoe.png +++ /dev/null diff --git a/app/assets/images/emoji/atm.png b/app/assets/images/emoji/atm.png Binary files differdeleted file mode 100644 index 4d935307b94..00000000000 --- a/app/assets/images/emoji/atm.png +++ /dev/null diff --git a/app/assets/images/emoji/atom.png b/app/assets/images/emoji/atom.png Binary files differdeleted file mode 100644 index 5f4567aa093..00000000000 --- a/app/assets/images/emoji/atom.png +++ /dev/null diff --git a/app/assets/images/emoji/avocado.png b/app/assets/images/emoji/avocado.png Binary files differdeleted file mode 100644 index 06f0d124aed..00000000000 --- a/app/assets/images/emoji/avocado.png +++ /dev/null diff --git a/app/assets/images/emoji/b.png b/app/assets/images/emoji/b.png Binary files differdeleted file mode 100644 index 25875bc6a14..00000000000 --- a/app/assets/images/emoji/b.png +++ /dev/null diff --git a/app/assets/images/emoji/baby.png b/app/assets/images/emoji/baby.png Binary files differdeleted file mode 100644 index a4af92c63c7..00000000000 --- a/app/assets/images/emoji/baby.png +++ /dev/null diff --git a/app/assets/images/emoji/baby_bottle.png b/app/assets/images/emoji/baby_bottle.png Binary files differdeleted file mode 100644 index 2bd10524180..00000000000 --- a/app/assets/images/emoji/baby_bottle.png +++ /dev/null diff --git a/app/assets/images/emoji/baby_chick.png b/app/assets/images/emoji/baby_chick.png Binary files differdeleted file mode 100644 index dccd96576ea..00000000000 --- a/app/assets/images/emoji/baby_chick.png +++ /dev/null diff --git a/app/assets/images/emoji/baby_symbol.png b/app/assets/images/emoji/baby_symbol.png Binary files differdeleted file mode 100644 index 64a10b71710..00000000000 --- a/app/assets/images/emoji/baby_symbol.png +++ /dev/null diff --git a/app/assets/images/emoji/baby_tone1.png b/app/assets/images/emoji/baby_tone1.png Binary files differdeleted file mode 100644 index d20911d40db..00000000000 --- a/app/assets/images/emoji/baby_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/baby_tone2.png b/app/assets/images/emoji/baby_tone2.png Binary files differdeleted file mode 100644 index b0a9b30ed17..00000000000 --- a/app/assets/images/emoji/baby_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/baby_tone3.png b/app/assets/images/emoji/baby_tone3.png Binary files differdeleted file mode 100644 index 7de5286fac1..00000000000 --- a/app/assets/images/emoji/baby_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/baby_tone4.png b/app/assets/images/emoji/baby_tone4.png Binary files differdeleted file mode 100644 index 9b7a86ac615..00000000000 --- a/app/assets/images/emoji/baby_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/baby_tone5.png b/app/assets/images/emoji/baby_tone5.png Binary files differdeleted file mode 100644 index fe1be34cb88..00000000000 --- a/app/assets/images/emoji/baby_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/back.png b/app/assets/images/emoji/back.png Binary files differdeleted file mode 100644 index d32c5d4f17f..00000000000 --- a/app/assets/images/emoji/back.png +++ /dev/null diff --git a/app/assets/images/emoji/bacon.png b/app/assets/images/emoji/bacon.png Binary files differdeleted file mode 100644 index f38a485fbe4..00000000000 --- a/app/assets/images/emoji/bacon.png +++ /dev/null diff --git a/app/assets/images/emoji/badminton.png b/app/assets/images/emoji/badminton.png Binary files differdeleted file mode 100644 index 7ba15708990..00000000000 --- a/app/assets/images/emoji/badminton.png +++ /dev/null diff --git a/app/assets/images/emoji/baggage_claim.png b/app/assets/images/emoji/baggage_claim.png Binary files differdeleted file mode 100644 index 409b593e78a..00000000000 --- a/app/assets/images/emoji/baggage_claim.png +++ /dev/null diff --git a/app/assets/images/emoji/balloon.png b/app/assets/images/emoji/balloon.png Binary files differdeleted file mode 100644 index 07916fe6df1..00000000000 --- a/app/assets/images/emoji/balloon.png +++ /dev/null diff --git a/app/assets/images/emoji/ballot_box.png b/app/assets/images/emoji/ballot_box.png Binary files differdeleted file mode 100644 index 9b6767aea9e..00000000000 --- a/app/assets/images/emoji/ballot_box.png +++ /dev/null diff --git a/app/assets/images/emoji/ballot_box_with_check.png b/app/assets/images/emoji/ballot_box_with_check.png Binary files differdeleted file mode 100644 index 284d9573847..00000000000 --- a/app/assets/images/emoji/ballot_box_with_check.png +++ /dev/null diff --git a/app/assets/images/emoji/bamboo.png b/app/assets/images/emoji/bamboo.png Binary files differdeleted file mode 100644 index 5d5e0e728a0..00000000000 --- a/app/assets/images/emoji/bamboo.png +++ /dev/null diff --git a/app/assets/images/emoji/banana.png b/app/assets/images/emoji/banana.png Binary files differdeleted file mode 100644 index f4987279580..00000000000 --- a/app/assets/images/emoji/banana.png +++ /dev/null diff --git a/app/assets/images/emoji/bangbang.png b/app/assets/images/emoji/bangbang.png Binary files differdeleted file mode 100644 index 58a9c528fca..00000000000 --- a/app/assets/images/emoji/bangbang.png +++ /dev/null diff --git a/app/assets/images/emoji/bank.png b/app/assets/images/emoji/bank.png Binary files differdeleted file mode 100644 index dffdcef36a1..00000000000 --- a/app/assets/images/emoji/bank.png +++ /dev/null diff --git a/app/assets/images/emoji/bar_chart.png b/app/assets/images/emoji/bar_chart.png Binary files differdeleted file mode 100644 index 53c89455008..00000000000 --- a/app/assets/images/emoji/bar_chart.png +++ /dev/null diff --git a/app/assets/images/emoji/barber.png b/app/assets/images/emoji/barber.png Binary files differdeleted file mode 100644 index 896f4d716cf..00000000000 --- a/app/assets/images/emoji/barber.png +++ /dev/null diff --git a/app/assets/images/emoji/baseball.png b/app/assets/images/emoji/baseball.png Binary files differdeleted file mode 100644 index f8463f1538b..00000000000 --- a/app/assets/images/emoji/baseball.png +++ /dev/null diff --git a/app/assets/images/emoji/basketball.png b/app/assets/images/emoji/basketball.png Binary files differdeleted file mode 100644 index 64c76b79c6d..00000000000 --- a/app/assets/images/emoji/basketball.png +++ /dev/null diff --git a/app/assets/images/emoji/basketball_player.png b/app/assets/images/emoji/basketball_player.png Binary files differdeleted file mode 100644 index 8ce90c5cad6..00000000000 --- a/app/assets/images/emoji/basketball_player.png +++ /dev/null diff --git a/app/assets/images/emoji/basketball_player_tone1.png b/app/assets/images/emoji/basketball_player_tone1.png Binary files differdeleted file mode 100644 index cd12c7ab9bf..00000000000 --- a/app/assets/images/emoji/basketball_player_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/basketball_player_tone2.png b/app/assets/images/emoji/basketball_player_tone2.png Binary files differdeleted file mode 100644 index f892fd596da..00000000000 --- a/app/assets/images/emoji/basketball_player_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/basketball_player_tone3.png b/app/assets/images/emoji/basketball_player_tone3.png Binary files differdeleted file mode 100644 index e109997a91a..00000000000 --- a/app/assets/images/emoji/basketball_player_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/basketball_player_tone4.png b/app/assets/images/emoji/basketball_player_tone4.png Binary files differdeleted file mode 100644 index 3b90b946af4..00000000000 --- a/app/assets/images/emoji/basketball_player_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/basketball_player_tone5.png b/app/assets/images/emoji/basketball_player_tone5.png Binary files differdeleted file mode 100644 index bafed7828a7..00000000000 --- a/app/assets/images/emoji/basketball_player_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/bat.png b/app/assets/images/emoji/bat.png Binary files differdeleted file mode 100644 index 3152c047e00..00000000000 --- a/app/assets/images/emoji/bat.png +++ /dev/null diff --git a/app/assets/images/emoji/bath.png b/app/assets/images/emoji/bath.png Binary files differdeleted file mode 100644 index 43fba5c8a28..00000000000 --- a/app/assets/images/emoji/bath.png +++ /dev/null diff --git a/app/assets/images/emoji/bath_tone1.png b/app/assets/images/emoji/bath_tone1.png Binary files differdeleted file mode 100644 index 2152eabf2f5..00000000000 --- a/app/assets/images/emoji/bath_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/bath_tone2.png b/app/assets/images/emoji/bath_tone2.png Binary files differdeleted file mode 100644 index 2102e6133e3..00000000000 --- a/app/assets/images/emoji/bath_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/bath_tone3.png b/app/assets/images/emoji/bath_tone3.png Binary files differdeleted file mode 100644 index fae66181e9f..00000000000 --- a/app/assets/images/emoji/bath_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/bath_tone4.png b/app/assets/images/emoji/bath_tone4.png Binary files differdeleted file mode 100644 index 1f8959d0d99..00000000000 --- a/app/assets/images/emoji/bath_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/bath_tone5.png b/app/assets/images/emoji/bath_tone5.png Binary files differdeleted file mode 100644 index c8a08e84f25..00000000000 --- a/app/assets/images/emoji/bath_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/bathtub.png b/app/assets/images/emoji/bathtub.png Binary files differdeleted file mode 100644 index 9a5f09361eb..00000000000 --- a/app/assets/images/emoji/bathtub.png +++ /dev/null diff --git a/app/assets/images/emoji/battery.png b/app/assets/images/emoji/battery.png Binary files differdeleted file mode 100644 index f593e2bdb65..00000000000 --- a/app/assets/images/emoji/battery.png +++ /dev/null diff --git a/app/assets/images/emoji/beach.png b/app/assets/images/emoji/beach.png Binary files differdeleted file mode 100644 index 69108c8ea10..00000000000 --- a/app/assets/images/emoji/beach.png +++ /dev/null diff --git a/app/assets/images/emoji/beach_umbrella.png b/app/assets/images/emoji/beach_umbrella.png Binary files differdeleted file mode 100644 index 220a74f8132..00000000000 --- a/app/assets/images/emoji/beach_umbrella.png +++ /dev/null diff --git a/app/assets/images/emoji/bear.png b/app/assets/images/emoji/bear.png Binary files differdeleted file mode 100644 index 272d56bbbcc..00000000000 --- a/app/assets/images/emoji/bear.png +++ /dev/null diff --git a/app/assets/images/emoji/bed.png b/app/assets/images/emoji/bed.png Binary files differdeleted file mode 100644 index 86f964e245d..00000000000 --- a/app/assets/images/emoji/bed.png +++ /dev/null diff --git a/app/assets/images/emoji/bee.png b/app/assets/images/emoji/bee.png Binary files differdeleted file mode 100644 index 46156060096..00000000000 --- a/app/assets/images/emoji/bee.png +++ /dev/null diff --git a/app/assets/images/emoji/beer.png b/app/assets/images/emoji/beer.png Binary files differdeleted file mode 100644 index b6d73dc0b7a..00000000000 --- a/app/assets/images/emoji/beer.png +++ /dev/null diff --git a/app/assets/images/emoji/beers.png b/app/assets/images/emoji/beers.png Binary files differdeleted file mode 100644 index b55deb66b41..00000000000 --- a/app/assets/images/emoji/beers.png +++ /dev/null diff --git a/app/assets/images/emoji/beetle.png b/app/assets/images/emoji/beetle.png Binary files differdeleted file mode 100644 index 3d93174d7fc..00000000000 --- a/app/assets/images/emoji/beetle.png +++ /dev/null diff --git a/app/assets/images/emoji/beginner.png b/app/assets/images/emoji/beginner.png Binary files differdeleted file mode 100644 index bc434fb7cb5..00000000000 --- a/app/assets/images/emoji/beginner.png +++ /dev/null diff --git a/app/assets/images/emoji/bell.png b/app/assets/images/emoji/bell.png Binary files differdeleted file mode 100644 index 5b3b0461999..00000000000 --- a/app/assets/images/emoji/bell.png +++ /dev/null diff --git a/app/assets/images/emoji/bellhop.png b/app/assets/images/emoji/bellhop.png Binary files differdeleted file mode 100644 index 6b3297ceaf7..00000000000 --- a/app/assets/images/emoji/bellhop.png +++ /dev/null diff --git a/app/assets/images/emoji/bento.png b/app/assets/images/emoji/bento.png Binary files differdeleted file mode 100644 index 83d41ca7eb9..00000000000 --- a/app/assets/images/emoji/bento.png +++ /dev/null diff --git a/app/assets/images/emoji/bicyclist.png b/app/assets/images/emoji/bicyclist.png Binary files differdeleted file mode 100644 index 9274da11048..00000000000 --- a/app/assets/images/emoji/bicyclist.png +++ /dev/null diff --git a/app/assets/images/emoji/bicyclist_tone1.png b/app/assets/images/emoji/bicyclist_tone1.png Binary files differdeleted file mode 100644 index decc2f728fe..00000000000 --- a/app/assets/images/emoji/bicyclist_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/bicyclist_tone2.png b/app/assets/images/emoji/bicyclist_tone2.png Binary files differdeleted file mode 100644 index 0067717b80a..00000000000 --- a/app/assets/images/emoji/bicyclist_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/bicyclist_tone3.png b/app/assets/images/emoji/bicyclist_tone3.png Binary files differdeleted file mode 100644 index a4f7b5e2776..00000000000 --- a/app/assets/images/emoji/bicyclist_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/bicyclist_tone4.png b/app/assets/images/emoji/bicyclist_tone4.png Binary files differdeleted file mode 100644 index a3c8a797db4..00000000000 --- a/app/assets/images/emoji/bicyclist_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/bicyclist_tone5.png b/app/assets/images/emoji/bicyclist_tone5.png Binary files differdeleted file mode 100644 index 1606a874051..00000000000 --- a/app/assets/images/emoji/bicyclist_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/bike.png b/app/assets/images/emoji/bike.png Binary files differdeleted file mode 100644 index 556ed70f1a7..00000000000 --- a/app/assets/images/emoji/bike.png +++ /dev/null diff --git a/app/assets/images/emoji/bikini.png b/app/assets/images/emoji/bikini.png Binary files differdeleted file mode 100644 index 77a8a0aae5b..00000000000 --- a/app/assets/images/emoji/bikini.png +++ /dev/null diff --git a/app/assets/images/emoji/biohazard.png b/app/assets/images/emoji/biohazard.png Binary files differdeleted file mode 100644 index 007b4fc2d85..00000000000 --- a/app/assets/images/emoji/biohazard.png +++ /dev/null diff --git a/app/assets/images/emoji/bird.png b/app/assets/images/emoji/bird.png Binary files differdeleted file mode 100644 index e201c22be33..00000000000 --- a/app/assets/images/emoji/bird.png +++ /dev/null diff --git a/app/assets/images/emoji/birthday.png b/app/assets/images/emoji/birthday.png Binary files differdeleted file mode 100644 index 317e9a41949..00000000000 --- a/app/assets/images/emoji/birthday.png +++ /dev/null diff --git a/app/assets/images/emoji/black_circle.png b/app/assets/images/emoji/black_circle.png Binary files differdeleted file mode 100644 index b62b87170e8..00000000000 --- a/app/assets/images/emoji/black_circle.png +++ /dev/null diff --git a/app/assets/images/emoji/black_heart.png b/app/assets/images/emoji/black_heart.png Binary files differdeleted file mode 100644 index b4068c3e6e8..00000000000 --- a/app/assets/images/emoji/black_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/black_joker.png b/app/assets/images/emoji/black_joker.png Binary files differdeleted file mode 100644 index 3d0924b68aa..00000000000 --- a/app/assets/images/emoji/black_joker.png +++ /dev/null diff --git a/app/assets/images/emoji/black_large_square.png b/app/assets/images/emoji/black_large_square.png Binary files differdeleted file mode 100644 index 162f2bb4290..00000000000 --- a/app/assets/images/emoji/black_large_square.png +++ /dev/null diff --git a/app/assets/images/emoji/black_medium_small_square.png b/app/assets/images/emoji/black_medium_small_square.png Binary files differdeleted file mode 100644 index 39765bba610..00000000000 --- a/app/assets/images/emoji/black_medium_small_square.png +++ /dev/null diff --git a/app/assets/images/emoji/black_medium_square.png b/app/assets/images/emoji/black_medium_square.png Binary files differdeleted file mode 100644 index 05a30a6aa2d..00000000000 --- a/app/assets/images/emoji/black_medium_square.png +++ /dev/null diff --git a/app/assets/images/emoji/black_nib.png b/app/assets/images/emoji/black_nib.png Binary files differdeleted file mode 100644 index 872d0ae1598..00000000000 --- a/app/assets/images/emoji/black_nib.png +++ /dev/null diff --git a/app/assets/images/emoji/black_small_square.png b/app/assets/images/emoji/black_small_square.png Binary files differdeleted file mode 100644 index 48595d3e1a9..00000000000 --- a/app/assets/images/emoji/black_small_square.png +++ /dev/null diff --git a/app/assets/images/emoji/black_square_button.png b/app/assets/images/emoji/black_square_button.png Binary files differdeleted file mode 100644 index a78fc2f6b63..00000000000 --- a/app/assets/images/emoji/black_square_button.png +++ /dev/null diff --git a/app/assets/images/emoji/blossom.png b/app/assets/images/emoji/blossom.png Binary files differdeleted file mode 100644 index 4083026c157..00000000000 --- a/app/assets/images/emoji/blossom.png +++ /dev/null diff --git a/app/assets/images/emoji/blowfish.png b/app/assets/images/emoji/blowfish.png Binary files differdeleted file mode 100644 index a10f4f84e35..00000000000 --- a/app/assets/images/emoji/blowfish.png +++ /dev/null diff --git a/app/assets/images/emoji/blue_book.png b/app/assets/images/emoji/blue_book.png Binary files differdeleted file mode 100644 index e1e455401cc..00000000000 --- a/app/assets/images/emoji/blue_book.png +++ /dev/null diff --git a/app/assets/images/emoji/blue_car.png b/app/assets/images/emoji/blue_car.png Binary files differdeleted file mode 100644 index e8ba817d393..00000000000 --- a/app/assets/images/emoji/blue_car.png +++ /dev/null diff --git a/app/assets/images/emoji/blue_heart.png b/app/assets/images/emoji/blue_heart.png Binary files differdeleted file mode 100644 index bdf1287e55e..00000000000 --- a/app/assets/images/emoji/blue_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/blush.png b/app/assets/images/emoji/blush.png Binary files differdeleted file mode 100644 index aac1a424ad4..00000000000 --- a/app/assets/images/emoji/blush.png +++ /dev/null diff --git a/app/assets/images/emoji/boar.png b/app/assets/images/emoji/boar.png Binary files differdeleted file mode 100644 index fead972633c..00000000000 --- a/app/assets/images/emoji/boar.png +++ /dev/null diff --git a/app/assets/images/emoji/bomb.png b/app/assets/images/emoji/bomb.png Binary files differdeleted file mode 100644 index c7f8f81c939..00000000000 --- a/app/assets/images/emoji/bomb.png +++ /dev/null diff --git a/app/assets/images/emoji/book.png b/app/assets/images/emoji/book.png Binary files differdeleted file mode 100644 index 0f4447ed396..00000000000 --- a/app/assets/images/emoji/book.png +++ /dev/null diff --git a/app/assets/images/emoji/bookmark.png b/app/assets/images/emoji/bookmark.png Binary files differdeleted file mode 100644 index bbb444611f0..00000000000 --- a/app/assets/images/emoji/bookmark.png +++ /dev/null diff --git a/app/assets/images/emoji/bookmark_tabs.png b/app/assets/images/emoji/bookmark_tabs.png Binary files differdeleted file mode 100644 index f8d9e01b428..00000000000 --- a/app/assets/images/emoji/bookmark_tabs.png +++ /dev/null diff --git a/app/assets/images/emoji/books.png b/app/assets/images/emoji/books.png Binary files differdeleted file mode 100644 index 59a8bafeb0d..00000000000 --- a/app/assets/images/emoji/books.png +++ /dev/null diff --git a/app/assets/images/emoji/boom.png b/app/assets/images/emoji/boom.png Binary files differdeleted file mode 100644 index 9b0f027b1a8..00000000000 --- a/app/assets/images/emoji/boom.png +++ /dev/null diff --git a/app/assets/images/emoji/boot.png b/app/assets/images/emoji/boot.png Binary files differdeleted file mode 100644 index 11f1065ed07..00000000000 --- a/app/assets/images/emoji/boot.png +++ /dev/null diff --git a/app/assets/images/emoji/bouquet.png b/app/assets/images/emoji/bouquet.png Binary files differdeleted file mode 100644 index 11455af6df4..00000000000 --- a/app/assets/images/emoji/bouquet.png +++ /dev/null diff --git a/app/assets/images/emoji/bow.png b/app/assets/images/emoji/bow.png Binary files differdeleted file mode 100644 index d8f793088dc..00000000000 --- a/app/assets/images/emoji/bow.png +++ /dev/null diff --git a/app/assets/images/emoji/bow_and_arrow.png b/app/assets/images/emoji/bow_and_arrow.png Binary files differdeleted file mode 100644 index 6a538bf475f..00000000000 --- a/app/assets/images/emoji/bow_and_arrow.png +++ /dev/null diff --git a/app/assets/images/emoji/bow_tone1.png b/app/assets/images/emoji/bow_tone1.png Binary files differdeleted file mode 100644 index 87afb7b54cf..00000000000 --- a/app/assets/images/emoji/bow_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/bow_tone2.png b/app/assets/images/emoji/bow_tone2.png Binary files differdeleted file mode 100644 index 3ccf7dc0850..00000000000 --- a/app/assets/images/emoji/bow_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/bow_tone3.png b/app/assets/images/emoji/bow_tone3.png Binary files differdeleted file mode 100644 index 8b9eb64f926..00000000000 --- a/app/assets/images/emoji/bow_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/bow_tone4.png b/app/assets/images/emoji/bow_tone4.png Binary files differdeleted file mode 100644 index 683795ff40d..00000000000 --- a/app/assets/images/emoji/bow_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/bow_tone5.png b/app/assets/images/emoji/bow_tone5.png Binary files differdeleted file mode 100644 index 7969d971752..00000000000 --- a/app/assets/images/emoji/bow_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/bowling.png b/app/assets/images/emoji/bowling.png Binary files differdeleted file mode 100644 index 63add89e53b..00000000000 --- a/app/assets/images/emoji/bowling.png +++ /dev/null diff --git a/app/assets/images/emoji/boxing_glove.png b/app/assets/images/emoji/boxing_glove.png Binary files differdeleted file mode 100644 index 9838f24e51a..00000000000 --- a/app/assets/images/emoji/boxing_glove.png +++ /dev/null diff --git a/app/assets/images/emoji/boy.png b/app/assets/images/emoji/boy.png Binary files differdeleted file mode 100644 index 8ecfb0a4e92..00000000000 --- a/app/assets/images/emoji/boy.png +++ /dev/null diff --git a/app/assets/images/emoji/boy_tone1.png b/app/assets/images/emoji/boy_tone1.png Binary files differdeleted file mode 100644 index 2fc436ea512..00000000000 --- a/app/assets/images/emoji/boy_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/boy_tone2.png b/app/assets/images/emoji/boy_tone2.png Binary files differdeleted file mode 100644 index 09a5f18d360..00000000000 --- a/app/assets/images/emoji/boy_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/boy_tone3.png b/app/assets/images/emoji/boy_tone3.png Binary files differdeleted file mode 100644 index 3cfe675dd3a..00000000000 --- a/app/assets/images/emoji/boy_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/boy_tone4.png b/app/assets/images/emoji/boy_tone4.png Binary files differdeleted file mode 100644 index 780be0ace36..00000000000 --- a/app/assets/images/emoji/boy_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/boy_tone5.png b/app/assets/images/emoji/boy_tone5.png Binary files differdeleted file mode 100644 index f32fe22e35c..00000000000 --- a/app/assets/images/emoji/boy_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/bread.png b/app/assets/images/emoji/bread.png Binary files differdeleted file mode 100644 index 6676510aaa5..00000000000 --- a/app/assets/images/emoji/bread.png +++ /dev/null diff --git a/app/assets/images/emoji/bride_with_veil.png b/app/assets/images/emoji/bride_with_veil.png Binary files differdeleted file mode 100644 index eaf4bd97890..00000000000 --- a/app/assets/images/emoji/bride_with_veil.png +++ /dev/null diff --git a/app/assets/images/emoji/bride_with_veil_tone1.png b/app/assets/images/emoji/bride_with_veil_tone1.png Binary files differdeleted file mode 100644 index c4fb141ae8f..00000000000 --- a/app/assets/images/emoji/bride_with_veil_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/bride_with_veil_tone2.png b/app/assets/images/emoji/bride_with_veil_tone2.png Binary files differdeleted file mode 100644 index c248769fc06..00000000000 --- a/app/assets/images/emoji/bride_with_veil_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/bride_with_veil_tone3.png b/app/assets/images/emoji/bride_with_veil_tone3.png Binary files differdeleted file mode 100644 index 962c0a6eedb..00000000000 --- a/app/assets/images/emoji/bride_with_veil_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/bride_with_veil_tone4.png b/app/assets/images/emoji/bride_with_veil_tone4.png Binary files differdeleted file mode 100644 index 740ca208cd4..00000000000 --- a/app/assets/images/emoji/bride_with_veil_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/bride_with_veil_tone5.png b/app/assets/images/emoji/bride_with_veil_tone5.png Binary files differdeleted file mode 100644 index 5cc5598587d..00000000000 --- a/app/assets/images/emoji/bride_with_veil_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/bridge_at_night.png b/app/assets/images/emoji/bridge_at_night.png Binary files differdeleted file mode 100644 index 1d444e0be65..00000000000 --- a/app/assets/images/emoji/bridge_at_night.png +++ /dev/null diff --git a/app/assets/images/emoji/briefcase.png b/app/assets/images/emoji/briefcase.png Binary files differdeleted file mode 100644 index b9912ba2148..00000000000 --- a/app/assets/images/emoji/briefcase.png +++ /dev/null diff --git a/app/assets/images/emoji/broken_heart.png b/app/assets/images/emoji/broken_heart.png Binary files differdeleted file mode 100644 index 718e26ee122..00000000000 --- a/app/assets/images/emoji/broken_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/bug.png b/app/assets/images/emoji/bug.png Binary files differdeleted file mode 100644 index e64e72f259a..00000000000 --- a/app/assets/images/emoji/bug.png +++ /dev/null diff --git a/app/assets/images/emoji/bulb.png b/app/assets/images/emoji/bulb.png Binary files differdeleted file mode 100644 index 38e32e02d9f..00000000000 --- a/app/assets/images/emoji/bulb.png +++ /dev/null diff --git a/app/assets/images/emoji/bullettrain_front.png b/app/assets/images/emoji/bullettrain_front.png Binary files differdeleted file mode 100644 index 4f698e056fa..00000000000 --- a/app/assets/images/emoji/bullettrain_front.png +++ /dev/null diff --git a/app/assets/images/emoji/bullettrain_side.png b/app/assets/images/emoji/bullettrain_side.png Binary files differdeleted file mode 100644 index ed61c67bf07..00000000000 --- a/app/assets/images/emoji/bullettrain_side.png +++ /dev/null diff --git a/app/assets/images/emoji/burrito.png b/app/assets/images/emoji/burrito.png Binary files differdeleted file mode 100644 index 02bd5601df7..00000000000 --- a/app/assets/images/emoji/burrito.png +++ /dev/null diff --git a/app/assets/images/emoji/bus.png b/app/assets/images/emoji/bus.png Binary files differdeleted file mode 100644 index 641ddc56ca7..00000000000 --- a/app/assets/images/emoji/bus.png +++ /dev/null diff --git a/app/assets/images/emoji/busstop.png b/app/assets/images/emoji/busstop.png Binary files differdeleted file mode 100644 index b2b62208bfd..00000000000 --- a/app/assets/images/emoji/busstop.png +++ /dev/null diff --git a/app/assets/images/emoji/bust_in_silhouette.png b/app/assets/images/emoji/bust_in_silhouette.png Binary files differdeleted file mode 100644 index 123b2cbe1fb..00000000000 --- a/app/assets/images/emoji/bust_in_silhouette.png +++ /dev/null diff --git a/app/assets/images/emoji/busts_in_silhouette.png b/app/assets/images/emoji/busts_in_silhouette.png Binary files differdeleted file mode 100644 index d7656860a1c..00000000000 --- a/app/assets/images/emoji/busts_in_silhouette.png +++ /dev/null diff --git a/app/assets/images/emoji/butterfly.png b/app/assets/images/emoji/butterfly.png Binary files differdeleted file mode 100644 index 5631fe99226..00000000000 --- a/app/assets/images/emoji/butterfly.png +++ /dev/null diff --git a/app/assets/images/emoji/cactus.png b/app/assets/images/emoji/cactus.png Binary files differdeleted file mode 100644 index 9b48ccf3d0c..00000000000 --- a/app/assets/images/emoji/cactus.png +++ /dev/null diff --git a/app/assets/images/emoji/cake.png b/app/assets/images/emoji/cake.png Binary files differdeleted file mode 100644 index 4368177be9a..00000000000 --- a/app/assets/images/emoji/cake.png +++ /dev/null diff --git a/app/assets/images/emoji/calendar.png b/app/assets/images/emoji/calendar.png Binary files differdeleted file mode 100644 index 47353b74447..00000000000 --- a/app/assets/images/emoji/calendar.png +++ /dev/null diff --git a/app/assets/images/emoji/calendar_spiral.png b/app/assets/images/emoji/calendar_spiral.png Binary files differdeleted file mode 100644 index dec8d49bfa8..00000000000 --- a/app/assets/images/emoji/calendar_spiral.png +++ /dev/null diff --git a/app/assets/images/emoji/call_me.png b/app/assets/images/emoji/call_me.png Binary files differdeleted file mode 100644 index a10c59ba711..00000000000 --- a/app/assets/images/emoji/call_me.png +++ /dev/null diff --git a/app/assets/images/emoji/call_me_tone1.png b/app/assets/images/emoji/call_me_tone1.png Binary files differdeleted file mode 100644 index 2c93201181a..00000000000 --- a/app/assets/images/emoji/call_me_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/call_me_tone2.png b/app/assets/images/emoji/call_me_tone2.png Binary files differdeleted file mode 100644 index c39f45a41ed..00000000000 --- a/app/assets/images/emoji/call_me_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/call_me_tone3.png b/app/assets/images/emoji/call_me_tone3.png Binary files differdeleted file mode 100644 index 83a57f63c29..00000000000 --- a/app/assets/images/emoji/call_me_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/call_me_tone4.png b/app/assets/images/emoji/call_me_tone4.png Binary files differdeleted file mode 100644 index 65b3468fe44..00000000000 --- a/app/assets/images/emoji/call_me_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/call_me_tone5.png b/app/assets/images/emoji/call_me_tone5.png Binary files differdeleted file mode 100644 index 94ef68ff3b3..00000000000 --- a/app/assets/images/emoji/call_me_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/calling.png b/app/assets/images/emoji/calling.png Binary files differdeleted file mode 100644 index e2f308f8e46..00000000000 --- a/app/assets/images/emoji/calling.png +++ /dev/null diff --git a/app/assets/images/emoji/camel.png b/app/assets/images/emoji/camel.png Binary files differdeleted file mode 100644 index b421d07a805..00000000000 --- a/app/assets/images/emoji/camel.png +++ /dev/null diff --git a/app/assets/images/emoji/camera.png b/app/assets/images/emoji/camera.png Binary files differdeleted file mode 100644 index 0a3429f72ef..00000000000 --- a/app/assets/images/emoji/camera.png +++ /dev/null diff --git a/app/assets/images/emoji/camera_with_flash.png b/app/assets/images/emoji/camera_with_flash.png Binary files differdeleted file mode 100644 index 27471da2029..00000000000 --- a/app/assets/images/emoji/camera_with_flash.png +++ /dev/null diff --git a/app/assets/images/emoji/camping.png b/app/assets/images/emoji/camping.png Binary files differdeleted file mode 100644 index d589cc1f44b..00000000000 --- a/app/assets/images/emoji/camping.png +++ /dev/null diff --git a/app/assets/images/emoji/cancer.png b/app/assets/images/emoji/cancer.png Binary files differdeleted file mode 100644 index a64af07cb5f..00000000000 --- a/app/assets/images/emoji/cancer.png +++ /dev/null diff --git a/app/assets/images/emoji/candle.png b/app/assets/images/emoji/candle.png Binary files differdeleted file mode 100644 index 0b56444e355..00000000000 --- a/app/assets/images/emoji/candle.png +++ /dev/null diff --git a/app/assets/images/emoji/candy.png b/app/assets/images/emoji/candy.png Binary files differdeleted file mode 100644 index 8c67ace3a35..00000000000 --- a/app/assets/images/emoji/candy.png +++ /dev/null diff --git a/app/assets/images/emoji/canoe.png b/app/assets/images/emoji/canoe.png Binary files differdeleted file mode 100644 index e26cdb9da69..00000000000 --- a/app/assets/images/emoji/canoe.png +++ /dev/null diff --git a/app/assets/images/emoji/capital_abcd.png b/app/assets/images/emoji/capital_abcd.png Binary files differdeleted file mode 100644 index fe9482d2d8a..00000000000 --- a/app/assets/images/emoji/capital_abcd.png +++ /dev/null diff --git a/app/assets/images/emoji/capricorn.png b/app/assets/images/emoji/capricorn.png Binary files differdeleted file mode 100644 index 6293d31d4b1..00000000000 --- a/app/assets/images/emoji/capricorn.png +++ /dev/null diff --git a/app/assets/images/emoji/card_box.png b/app/assets/images/emoji/card_box.png Binary files differdeleted file mode 100644 index f2e764ce59d..00000000000 --- a/app/assets/images/emoji/card_box.png +++ /dev/null diff --git a/app/assets/images/emoji/card_index.png b/app/assets/images/emoji/card_index.png Binary files differdeleted file mode 100644 index 151e11cb3b4..00000000000 --- a/app/assets/images/emoji/card_index.png +++ /dev/null diff --git a/app/assets/images/emoji/carousel_horse.png b/app/assets/images/emoji/carousel_horse.png Binary files differdeleted file mode 100644 index a17074edf05..00000000000 --- a/app/assets/images/emoji/carousel_horse.png +++ /dev/null diff --git a/app/assets/images/emoji/carrot.png b/app/assets/images/emoji/carrot.png Binary files differdeleted file mode 100644 index c68829b58e7..00000000000 --- a/app/assets/images/emoji/carrot.png +++ /dev/null diff --git a/app/assets/images/emoji/cartwheel.png b/app/assets/images/emoji/cartwheel.png Binary files differdeleted file mode 100644 index cbcaa578253..00000000000 --- a/app/assets/images/emoji/cartwheel.png +++ /dev/null diff --git a/app/assets/images/emoji/cartwheel_tone1.png b/app/assets/images/emoji/cartwheel_tone1.png Binary files differdeleted file mode 100644 index db6d65895fb..00000000000 --- a/app/assets/images/emoji/cartwheel_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/cartwheel_tone2.png b/app/assets/images/emoji/cartwheel_tone2.png Binary files differdeleted file mode 100644 index e00ffbc27a8..00000000000 --- a/app/assets/images/emoji/cartwheel_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/cartwheel_tone3.png b/app/assets/images/emoji/cartwheel_tone3.png Binary files differdeleted file mode 100644 index 49321be391f..00000000000 --- a/app/assets/images/emoji/cartwheel_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/cartwheel_tone4.png b/app/assets/images/emoji/cartwheel_tone4.png Binary files differdeleted file mode 100644 index d4562b5e3dd..00000000000 --- a/app/assets/images/emoji/cartwheel_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/cartwheel_tone5.png b/app/assets/images/emoji/cartwheel_tone5.png Binary files differdeleted file mode 100644 index 6e09a870767..00000000000 --- a/app/assets/images/emoji/cartwheel_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/cat.png b/app/assets/images/emoji/cat.png Binary files differdeleted file mode 100644 index efd82c2abf3..00000000000 --- a/app/assets/images/emoji/cat.png +++ /dev/null diff --git a/app/assets/images/emoji/cat2.png b/app/assets/images/emoji/cat2.png Binary files differdeleted file mode 100644 index 46abe8cbc14..00000000000 --- a/app/assets/images/emoji/cat2.png +++ /dev/null diff --git a/app/assets/images/emoji/cd.png b/app/assets/images/emoji/cd.png Binary files differdeleted file mode 100644 index e6b01449cd9..00000000000 --- a/app/assets/images/emoji/cd.png +++ /dev/null diff --git a/app/assets/images/emoji/chains.png b/app/assets/images/emoji/chains.png Binary files differdeleted file mode 100644 index 57f46139a06..00000000000 --- a/app/assets/images/emoji/chains.png +++ /dev/null diff --git a/app/assets/images/emoji/champagne.png b/app/assets/images/emoji/champagne.png Binary files differdeleted file mode 100644 index 285a79a93d0..00000000000 --- a/app/assets/images/emoji/champagne.png +++ /dev/null diff --git a/app/assets/images/emoji/champagne_glass.png b/app/assets/images/emoji/champagne_glass.png Binary files differdeleted file mode 100644 index 31937ae9392..00000000000 --- a/app/assets/images/emoji/champagne_glass.png +++ /dev/null diff --git a/app/assets/images/emoji/chart.png b/app/assets/images/emoji/chart.png Binary files differdeleted file mode 100644 index 9773f03be22..00000000000 --- a/app/assets/images/emoji/chart.png +++ /dev/null diff --git a/app/assets/images/emoji/chart_with_downwards_trend.png b/app/assets/images/emoji/chart_with_downwards_trend.png Binary files differdeleted file mode 100644 index 5222ec72d85..00000000000 --- a/app/assets/images/emoji/chart_with_downwards_trend.png +++ /dev/null diff --git a/app/assets/images/emoji/chart_with_upwards_trend.png b/app/assets/images/emoji/chart_with_upwards_trend.png Binary files differdeleted file mode 100644 index f13cfcf9956..00000000000 --- a/app/assets/images/emoji/chart_with_upwards_trend.png +++ /dev/null diff --git a/app/assets/images/emoji/checkered_flag.png b/app/assets/images/emoji/checkered_flag.png Binary files differdeleted file mode 100644 index 5a71eecb89b..00000000000 --- a/app/assets/images/emoji/checkered_flag.png +++ /dev/null diff --git a/app/assets/images/emoji/cheese.png b/app/assets/images/emoji/cheese.png Binary files differdeleted file mode 100644 index 00e99762286..00000000000 --- a/app/assets/images/emoji/cheese.png +++ /dev/null diff --git a/app/assets/images/emoji/cherries.png b/app/assets/images/emoji/cherries.png Binary files differdeleted file mode 100644 index 9b10cbaac5e..00000000000 --- a/app/assets/images/emoji/cherries.png +++ /dev/null diff --git a/app/assets/images/emoji/cherry_blossom.png b/app/assets/images/emoji/cherry_blossom.png Binary files differdeleted file mode 100644 index 282f3e7bc81..00000000000 --- a/app/assets/images/emoji/cherry_blossom.png +++ /dev/null diff --git a/app/assets/images/emoji/chestnut.png b/app/assets/images/emoji/chestnut.png Binary files differdeleted file mode 100644 index e9fb40468ed..00000000000 --- a/app/assets/images/emoji/chestnut.png +++ /dev/null diff --git a/app/assets/images/emoji/chicken.png b/app/assets/images/emoji/chicken.png Binary files differdeleted file mode 100644 index 9a6992e55ba..00000000000 --- a/app/assets/images/emoji/chicken.png +++ /dev/null diff --git a/app/assets/images/emoji/children_crossing.png b/app/assets/images/emoji/children_crossing.png Binary files differdeleted file mode 100644 index fa4c091c7c3..00000000000 --- a/app/assets/images/emoji/children_crossing.png +++ /dev/null diff --git a/app/assets/images/emoji/chipmunk.png b/app/assets/images/emoji/chipmunk.png Binary files differdeleted file mode 100644 index 2aac560cb22..00000000000 --- a/app/assets/images/emoji/chipmunk.png +++ /dev/null diff --git a/app/assets/images/emoji/chocolate_bar.png b/app/assets/images/emoji/chocolate_bar.png Binary files differdeleted file mode 100644 index 318bbd40ef9..00000000000 --- a/app/assets/images/emoji/chocolate_bar.png +++ /dev/null diff --git a/app/assets/images/emoji/christmas_tree.png b/app/assets/images/emoji/christmas_tree.png Binary files differdeleted file mode 100644 index 4197d37a52b..00000000000 --- a/app/assets/images/emoji/christmas_tree.png +++ /dev/null diff --git a/app/assets/images/emoji/church.png b/app/assets/images/emoji/church.png Binary files differdeleted file mode 100644 index 8242fd272b3..00000000000 --- a/app/assets/images/emoji/church.png +++ /dev/null diff --git a/app/assets/images/emoji/cinema.png b/app/assets/images/emoji/cinema.png Binary files differdeleted file mode 100644 index 65f27b386f2..00000000000 --- a/app/assets/images/emoji/cinema.png +++ /dev/null diff --git a/app/assets/images/emoji/circus_tent.png b/app/assets/images/emoji/circus_tent.png Binary files differdeleted file mode 100644 index b0379775b12..00000000000 --- a/app/assets/images/emoji/circus_tent.png +++ /dev/null diff --git a/app/assets/images/emoji/city_dusk.png b/app/assets/images/emoji/city_dusk.png Binary files differdeleted file mode 100644 index 80cdff7cf5d..00000000000 --- a/app/assets/images/emoji/city_dusk.png +++ /dev/null diff --git a/app/assets/images/emoji/city_sunset.png b/app/assets/images/emoji/city_sunset.png Binary files differdeleted file mode 100644 index 7cded0ba55b..00000000000 --- a/app/assets/images/emoji/city_sunset.png +++ /dev/null diff --git a/app/assets/images/emoji/cityscape.png b/app/assets/images/emoji/cityscape.png Binary files differdeleted file mode 100644 index d7b9844a0b4..00000000000 --- a/app/assets/images/emoji/cityscape.png +++ /dev/null diff --git a/app/assets/images/emoji/cl.png b/app/assets/images/emoji/cl.png Binary files differdeleted file mode 100644 index 8b01b4343e2..00000000000 --- a/app/assets/images/emoji/cl.png +++ /dev/null diff --git a/app/assets/images/emoji/clap.png b/app/assets/images/emoji/clap.png Binary files differdeleted file mode 100644 index b0ffe928920..00000000000 --- a/app/assets/images/emoji/clap.png +++ /dev/null diff --git a/app/assets/images/emoji/clap_tone1.png b/app/assets/images/emoji/clap_tone1.png Binary files differdeleted file mode 100644 index de4bc837b96..00000000000 --- a/app/assets/images/emoji/clap_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/clap_tone2.png b/app/assets/images/emoji/clap_tone2.png Binary files differdeleted file mode 100644 index 1323de775ba..00000000000 --- a/app/assets/images/emoji/clap_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/clap_tone3.png b/app/assets/images/emoji/clap_tone3.png Binary files differdeleted file mode 100644 index d448ca19dde..00000000000 --- a/app/assets/images/emoji/clap_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/clap_tone4.png b/app/assets/images/emoji/clap_tone4.png Binary files differdeleted file mode 100644 index c49f44ee91d..00000000000 --- a/app/assets/images/emoji/clap_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/clap_tone5.png b/app/assets/images/emoji/clap_tone5.png Binary files differdeleted file mode 100644 index 29ee9bdf37c..00000000000 --- a/app/assets/images/emoji/clap_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/clapper.png b/app/assets/images/emoji/clapper.png Binary files differdeleted file mode 100644 index 81390883111..00000000000 --- a/app/assets/images/emoji/clapper.png +++ /dev/null diff --git a/app/assets/images/emoji/classical_building.png b/app/assets/images/emoji/classical_building.png Binary files differdeleted file mode 100644 index de7b559daaf..00000000000 --- a/app/assets/images/emoji/classical_building.png +++ /dev/null diff --git a/app/assets/images/emoji/clipboard.png b/app/assets/images/emoji/clipboard.png Binary files differdeleted file mode 100644 index 7edcfc52509..00000000000 --- a/app/assets/images/emoji/clipboard.png +++ /dev/null diff --git a/app/assets/images/emoji/clock.png b/app/assets/images/emoji/clock.png Binary files differdeleted file mode 100644 index ffdb451e3a8..00000000000 --- a/app/assets/images/emoji/clock.png +++ /dev/null diff --git a/app/assets/images/emoji/clock1.png b/app/assets/images/emoji/clock1.png Binary files differdeleted file mode 100644 index d6e34941f23..00000000000 --- a/app/assets/images/emoji/clock1.png +++ /dev/null diff --git a/app/assets/images/emoji/clock10.png b/app/assets/images/emoji/clock10.png Binary files differdeleted file mode 100644 index e62b245cdbe..00000000000 --- a/app/assets/images/emoji/clock10.png +++ /dev/null diff --git a/app/assets/images/emoji/clock1030.png b/app/assets/images/emoji/clock1030.png Binary files differdeleted file mode 100644 index 0802b3c65b9..00000000000 --- a/app/assets/images/emoji/clock1030.png +++ /dev/null diff --git a/app/assets/images/emoji/clock11.png b/app/assets/images/emoji/clock11.png Binary files differdeleted file mode 100644 index 0983345273b..00000000000 --- a/app/assets/images/emoji/clock11.png +++ /dev/null diff --git a/app/assets/images/emoji/clock1130.png b/app/assets/images/emoji/clock1130.png Binary files differdeleted file mode 100644 index d970d03b809..00000000000 --- a/app/assets/images/emoji/clock1130.png +++ /dev/null diff --git a/app/assets/images/emoji/clock12.png b/app/assets/images/emoji/clock12.png Binary files differdeleted file mode 100644 index e61caa4b3e2..00000000000 --- a/app/assets/images/emoji/clock12.png +++ /dev/null diff --git a/app/assets/images/emoji/clock1230.png b/app/assets/images/emoji/clock1230.png Binary files differdeleted file mode 100644 index f2b1d261721..00000000000 --- a/app/assets/images/emoji/clock1230.png +++ /dev/null diff --git a/app/assets/images/emoji/clock130.png b/app/assets/images/emoji/clock130.png Binary files differdeleted file mode 100644 index 86b7689b84e..00000000000 --- a/app/assets/images/emoji/clock130.png +++ /dev/null diff --git a/app/assets/images/emoji/clock2.png b/app/assets/images/emoji/clock2.png Binary files differdeleted file mode 100644 index a54253d7d57..00000000000 --- a/app/assets/images/emoji/clock2.png +++ /dev/null diff --git a/app/assets/images/emoji/clock230.png b/app/assets/images/emoji/clock230.png Binary files differdeleted file mode 100644 index 7a787e018e6..00000000000 --- a/app/assets/images/emoji/clock230.png +++ /dev/null diff --git a/app/assets/images/emoji/clock3.png b/app/assets/images/emoji/clock3.png Binary files differdeleted file mode 100644 index 27ec4b1f514..00000000000 --- a/app/assets/images/emoji/clock3.png +++ /dev/null diff --git a/app/assets/images/emoji/clock330.png b/app/assets/images/emoji/clock330.png Binary files differdeleted file mode 100644 index c6860395cec..00000000000 --- a/app/assets/images/emoji/clock330.png +++ /dev/null diff --git a/app/assets/images/emoji/clock4.png b/app/assets/images/emoji/clock4.png Binary files differdeleted file mode 100644 index 60a1ef4cc13..00000000000 --- a/app/assets/images/emoji/clock4.png +++ /dev/null diff --git a/app/assets/images/emoji/clock430.png b/app/assets/images/emoji/clock430.png Binary files differdeleted file mode 100644 index 3c05b362122..00000000000 --- a/app/assets/images/emoji/clock430.png +++ /dev/null diff --git a/app/assets/images/emoji/clock5.png b/app/assets/images/emoji/clock5.png Binary files differdeleted file mode 100644 index c9382d1e094..00000000000 --- a/app/assets/images/emoji/clock5.png +++ /dev/null diff --git a/app/assets/images/emoji/clock530.png b/app/assets/images/emoji/clock530.png Binary files differdeleted file mode 100644 index c21fa926db2..00000000000 --- a/app/assets/images/emoji/clock530.png +++ /dev/null diff --git a/app/assets/images/emoji/clock6.png b/app/assets/images/emoji/clock6.png Binary files differdeleted file mode 100644 index 8fd5d3f5bd7..00000000000 --- a/app/assets/images/emoji/clock6.png +++ /dev/null diff --git a/app/assets/images/emoji/clock630.png b/app/assets/images/emoji/clock630.png Binary files differdeleted file mode 100644 index 2aec87fefcf..00000000000 --- a/app/assets/images/emoji/clock630.png +++ /dev/null diff --git a/app/assets/images/emoji/clock7.png b/app/assets/images/emoji/clock7.png Binary files differdeleted file mode 100644 index 8c7084036f2..00000000000 --- a/app/assets/images/emoji/clock7.png +++ /dev/null diff --git a/app/assets/images/emoji/clock730.png b/app/assets/images/emoji/clock730.png Binary files differdeleted file mode 100644 index f7a1135e03f..00000000000 --- a/app/assets/images/emoji/clock730.png +++ /dev/null diff --git a/app/assets/images/emoji/clock8.png b/app/assets/images/emoji/clock8.png Binary files differdeleted file mode 100644 index fcddf722e95..00000000000 --- a/app/assets/images/emoji/clock8.png +++ /dev/null diff --git a/app/assets/images/emoji/clock830.png b/app/assets/images/emoji/clock830.png Binary files differdeleted file mode 100644 index 799b4aebc08..00000000000 --- a/app/assets/images/emoji/clock830.png +++ /dev/null diff --git a/app/assets/images/emoji/clock9.png b/app/assets/images/emoji/clock9.png Binary files differdeleted file mode 100644 index dfbe0117981..00000000000 --- a/app/assets/images/emoji/clock9.png +++ /dev/null diff --git a/app/assets/images/emoji/clock930.png b/app/assets/images/emoji/clock930.png Binary files differdeleted file mode 100644 index 4a2092ee6f0..00000000000 --- a/app/assets/images/emoji/clock930.png +++ /dev/null diff --git a/app/assets/images/emoji/closed_book.png b/app/assets/images/emoji/closed_book.png Binary files differdeleted file mode 100644 index 6395cf2151e..00000000000 --- a/app/assets/images/emoji/closed_book.png +++ /dev/null diff --git a/app/assets/images/emoji/closed_lock_with_key.png b/app/assets/images/emoji/closed_lock_with_key.png Binary files differdeleted file mode 100644 index 1c1cd5d0741..00000000000 --- a/app/assets/images/emoji/closed_lock_with_key.png +++ /dev/null diff --git a/app/assets/images/emoji/closed_umbrella.png b/app/assets/images/emoji/closed_umbrella.png Binary files differdeleted file mode 100644 index ecefba9e446..00000000000 --- a/app/assets/images/emoji/closed_umbrella.png +++ /dev/null diff --git a/app/assets/images/emoji/cloud.png b/app/assets/images/emoji/cloud.png Binary files differdeleted file mode 100644 index 5b4f57f77ba..00000000000 --- a/app/assets/images/emoji/cloud.png +++ /dev/null diff --git a/app/assets/images/emoji/cloud_lightning.png b/app/assets/images/emoji/cloud_lightning.png Binary files differdeleted file mode 100644 index 0831e88aa31..00000000000 --- a/app/assets/images/emoji/cloud_lightning.png +++ /dev/null diff --git a/app/assets/images/emoji/cloud_rain.png b/app/assets/images/emoji/cloud_rain.png Binary files differdeleted file mode 100644 index 385685e0512..00000000000 --- a/app/assets/images/emoji/cloud_rain.png +++ /dev/null diff --git a/app/assets/images/emoji/cloud_snow.png b/app/assets/images/emoji/cloud_snow.png Binary files differdeleted file mode 100644 index 9720384eb99..00000000000 --- a/app/assets/images/emoji/cloud_snow.png +++ /dev/null diff --git a/app/assets/images/emoji/cloud_tornado.png b/app/assets/images/emoji/cloud_tornado.png Binary files differdeleted file mode 100644 index 4821c89da1e..00000000000 --- a/app/assets/images/emoji/cloud_tornado.png +++ /dev/null diff --git a/app/assets/images/emoji/clown.png b/app/assets/images/emoji/clown.png Binary files differdeleted file mode 100644 index 02b7ff70049..00000000000 --- a/app/assets/images/emoji/clown.png +++ /dev/null diff --git a/app/assets/images/emoji/clubs.png b/app/assets/images/emoji/clubs.png Binary files differdeleted file mode 100644 index 4f2abf791ca..00000000000 --- a/app/assets/images/emoji/clubs.png +++ /dev/null diff --git a/app/assets/images/emoji/cocktail.png b/app/assets/images/emoji/cocktail.png Binary files differdeleted file mode 100644 index 2e50c57e98d..00000000000 --- a/app/assets/images/emoji/cocktail.png +++ /dev/null diff --git a/app/assets/images/emoji/coffee.png b/app/assets/images/emoji/coffee.png Binary files differdeleted file mode 100644 index 553061471b1..00000000000 --- a/app/assets/images/emoji/coffee.png +++ /dev/null diff --git a/app/assets/images/emoji/coffin.png b/app/assets/images/emoji/coffin.png Binary files differdeleted file mode 100644 index fb2932aa5f6..00000000000 --- a/app/assets/images/emoji/coffin.png +++ /dev/null diff --git a/app/assets/images/emoji/cold_sweat.png b/app/assets/images/emoji/cold_sweat.png Binary files differdeleted file mode 100644 index 85b2231bbf6..00000000000 --- a/app/assets/images/emoji/cold_sweat.png +++ /dev/null diff --git a/app/assets/images/emoji/comet.png b/app/assets/images/emoji/comet.png Binary files differdeleted file mode 100644 index a99751f79be..00000000000 --- a/app/assets/images/emoji/comet.png +++ /dev/null diff --git a/app/assets/images/emoji/compression.png b/app/assets/images/emoji/compression.png Binary files differdeleted file mode 100644 index d7eda7f362a..00000000000 --- a/app/assets/images/emoji/compression.png +++ /dev/null diff --git a/app/assets/images/emoji/computer.png b/app/assets/images/emoji/computer.png Binary files differdeleted file mode 100644 index c1fee27e3a9..00000000000 --- a/app/assets/images/emoji/computer.png +++ /dev/null diff --git a/app/assets/images/emoji/confetti_ball.png b/app/assets/images/emoji/confetti_ball.png Binary files differdeleted file mode 100644 index ba4fd9b12be..00000000000 --- a/app/assets/images/emoji/confetti_ball.png +++ /dev/null diff --git a/app/assets/images/emoji/confounded.png b/app/assets/images/emoji/confounded.png Binary files differdeleted file mode 100644 index aa4b29e9375..00000000000 --- a/app/assets/images/emoji/confounded.png +++ /dev/null diff --git a/app/assets/images/emoji/confused.png b/app/assets/images/emoji/confused.png Binary files differdeleted file mode 100644 index 502b6bf0e0b..00000000000 --- a/app/assets/images/emoji/confused.png +++ /dev/null diff --git a/app/assets/images/emoji/congratulations.png b/app/assets/images/emoji/congratulations.png Binary files differdeleted file mode 100644 index ba8c89d95ee..00000000000 --- a/app/assets/images/emoji/congratulations.png +++ /dev/null diff --git a/app/assets/images/emoji/construction.png b/app/assets/images/emoji/construction.png Binary files differdeleted file mode 100644 index ef8db5f471c..00000000000 --- a/app/assets/images/emoji/construction.png +++ /dev/null diff --git a/app/assets/images/emoji/construction_site.png b/app/assets/images/emoji/construction_site.png Binary files differdeleted file mode 100644 index 8206a20f63f..00000000000 --- a/app/assets/images/emoji/construction_site.png +++ /dev/null diff --git a/app/assets/images/emoji/construction_worker.png b/app/assets/images/emoji/construction_worker.png Binary files differdeleted file mode 100644 index a9970a89005..00000000000 --- a/app/assets/images/emoji/construction_worker.png +++ /dev/null diff --git a/app/assets/images/emoji/construction_worker_tone1.png b/app/assets/images/emoji/construction_worker_tone1.png Binary files differdeleted file mode 100644 index 2f24a2bab24..00000000000 --- a/app/assets/images/emoji/construction_worker_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/construction_worker_tone2.png b/app/assets/images/emoji/construction_worker_tone2.png Binary files differdeleted file mode 100644 index 93c8fec5a75..00000000000 --- a/app/assets/images/emoji/construction_worker_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/construction_worker_tone3.png b/app/assets/images/emoji/construction_worker_tone3.png Binary files differdeleted file mode 100644 index abc1f2af2e0..00000000000 --- a/app/assets/images/emoji/construction_worker_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/construction_worker_tone4.png b/app/assets/images/emoji/construction_worker_tone4.png Binary files differdeleted file mode 100644 index eed83289aeb..00000000000 --- a/app/assets/images/emoji/construction_worker_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/construction_worker_tone5.png b/app/assets/images/emoji/construction_worker_tone5.png Binary files differdeleted file mode 100644 index acbb220b8bb..00000000000 --- a/app/assets/images/emoji/construction_worker_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/control_knobs.png b/app/assets/images/emoji/control_knobs.png Binary files differdeleted file mode 100644 index 6635ac93b50..00000000000 --- a/app/assets/images/emoji/control_knobs.png +++ /dev/null diff --git a/app/assets/images/emoji/convenience_store.png b/app/assets/images/emoji/convenience_store.png Binary files differdeleted file mode 100644 index 26b53b5669e..00000000000 --- a/app/assets/images/emoji/convenience_store.png +++ /dev/null diff --git a/app/assets/images/emoji/cookie.png b/app/assets/images/emoji/cookie.png Binary files differdeleted file mode 100644 index 1b6bcb1554f..00000000000 --- a/app/assets/images/emoji/cookie.png +++ /dev/null diff --git a/app/assets/images/emoji/cooking.png b/app/assets/images/emoji/cooking.png Binary files differdeleted file mode 100644 index 918c980577a..00000000000 --- a/app/assets/images/emoji/cooking.png +++ /dev/null diff --git a/app/assets/images/emoji/cool.png b/app/assets/images/emoji/cool.png Binary files differdeleted file mode 100644 index 74674978d00..00000000000 --- a/app/assets/images/emoji/cool.png +++ /dev/null diff --git a/app/assets/images/emoji/cop.png b/app/assets/images/emoji/cop.png Binary files differdeleted file mode 100644 index 0b16d7c17b7..00000000000 --- a/app/assets/images/emoji/cop.png +++ /dev/null diff --git a/app/assets/images/emoji/cop_tone1.png b/app/assets/images/emoji/cop_tone1.png Binary files differdeleted file mode 100644 index 6ccba3879dc..00000000000 --- a/app/assets/images/emoji/cop_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/cop_tone2.png b/app/assets/images/emoji/cop_tone2.png Binary files differdeleted file mode 100644 index 7814ea9f52d..00000000000 --- a/app/assets/images/emoji/cop_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/cop_tone3.png b/app/assets/images/emoji/cop_tone3.png Binary files differdeleted file mode 100644 index d78e88ec872..00000000000 --- a/app/assets/images/emoji/cop_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/cop_tone4.png b/app/assets/images/emoji/cop_tone4.png Binary files differdeleted file mode 100644 index 2e13c508315..00000000000 --- a/app/assets/images/emoji/cop_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/cop_tone5.png b/app/assets/images/emoji/cop_tone5.png Binary files differdeleted file mode 100644 index 2980d61cc2e..00000000000 --- a/app/assets/images/emoji/cop_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/copyright.png b/app/assets/images/emoji/copyright.png Binary files differdeleted file mode 100644 index 6b9a6adbfd2..00000000000 --- a/app/assets/images/emoji/copyright.png +++ /dev/null diff --git a/app/assets/images/emoji/corn.png b/app/assets/images/emoji/corn.png Binary files differdeleted file mode 100644 index 36e20127931..00000000000 --- a/app/assets/images/emoji/corn.png +++ /dev/null diff --git a/app/assets/images/emoji/couch.png b/app/assets/images/emoji/couch.png Binary files differdeleted file mode 100644 index 27b19b13bb0..00000000000 --- a/app/assets/images/emoji/couch.png +++ /dev/null diff --git a/app/assets/images/emoji/couple.png b/app/assets/images/emoji/couple.png Binary files differdeleted file mode 100644 index 960323f3c16..00000000000 --- a/app/assets/images/emoji/couple.png +++ /dev/null diff --git a/app/assets/images/emoji/couple_mm.png b/app/assets/images/emoji/couple_mm.png Binary files differdeleted file mode 100644 index 8759fa5db87..00000000000 --- a/app/assets/images/emoji/couple_mm.png +++ /dev/null diff --git a/app/assets/images/emoji/couple_with_heart.png b/app/assets/images/emoji/couple_with_heart.png Binary files differdeleted file mode 100644 index 62111601b36..00000000000 --- a/app/assets/images/emoji/couple_with_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/couple_ww.png b/app/assets/images/emoji/couple_ww.png Binary files differdeleted file mode 100644 index 08fdabcdc5c..00000000000 --- a/app/assets/images/emoji/couple_ww.png +++ /dev/null diff --git a/app/assets/images/emoji/couplekiss.png b/app/assets/images/emoji/couplekiss.png Binary files differdeleted file mode 100644 index 9aa519da9e8..00000000000 --- a/app/assets/images/emoji/couplekiss.png +++ /dev/null diff --git a/app/assets/images/emoji/cow.png b/app/assets/images/emoji/cow.png Binary files differdeleted file mode 100644 index 718a3986d64..00000000000 --- a/app/assets/images/emoji/cow.png +++ /dev/null diff --git a/app/assets/images/emoji/cow2.png b/app/assets/images/emoji/cow2.png Binary files differdeleted file mode 100644 index 4d0ca534ff1..00000000000 --- a/app/assets/images/emoji/cow2.png +++ /dev/null diff --git a/app/assets/images/emoji/cowboy.png b/app/assets/images/emoji/cowboy.png Binary files differdeleted file mode 100644 index 70dd5d0d9d1..00000000000 --- a/app/assets/images/emoji/cowboy.png +++ /dev/null diff --git a/app/assets/images/emoji/crab.png b/app/assets/images/emoji/crab.png Binary files differdeleted file mode 100644 index 19f3047ab61..00000000000 --- a/app/assets/images/emoji/crab.png +++ /dev/null diff --git a/app/assets/images/emoji/crayon.png b/app/assets/images/emoji/crayon.png Binary files differdeleted file mode 100644 index 8d7b427aaa3..00000000000 --- a/app/assets/images/emoji/crayon.png +++ /dev/null diff --git a/app/assets/images/emoji/credit_card.png b/app/assets/images/emoji/credit_card.png Binary files differdeleted file mode 100644 index 372777d5c61..00000000000 --- a/app/assets/images/emoji/credit_card.png +++ /dev/null diff --git a/app/assets/images/emoji/crescent_moon.png b/app/assets/images/emoji/crescent_moon.png Binary files differdeleted file mode 100644 index 765420ecec7..00000000000 --- a/app/assets/images/emoji/crescent_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/cricket.png b/app/assets/images/emoji/cricket.png Binary files differdeleted file mode 100644 index d602294a2cd..00000000000 --- a/app/assets/images/emoji/cricket.png +++ /dev/null diff --git a/app/assets/images/emoji/crocodile.png b/app/assets/images/emoji/crocodile.png Binary files differdeleted file mode 100644 index 3005c46f176..00000000000 --- a/app/assets/images/emoji/crocodile.png +++ /dev/null diff --git a/app/assets/images/emoji/croissant.png b/app/assets/images/emoji/croissant.png Binary files differdeleted file mode 100644 index fb33feb1a38..00000000000 --- a/app/assets/images/emoji/croissant.png +++ /dev/null diff --git a/app/assets/images/emoji/cross.png b/app/assets/images/emoji/cross.png Binary files differdeleted file mode 100644 index 42b10e82257..00000000000 --- a/app/assets/images/emoji/cross.png +++ /dev/null diff --git a/app/assets/images/emoji/crossed_flags.png b/app/assets/images/emoji/crossed_flags.png Binary files differdeleted file mode 100644 index 273bd0f0fe5..00000000000 --- a/app/assets/images/emoji/crossed_flags.png +++ /dev/null diff --git a/app/assets/images/emoji/crossed_swords.png b/app/assets/images/emoji/crossed_swords.png Binary files differdeleted file mode 100644 index 907e9607134..00000000000 --- a/app/assets/images/emoji/crossed_swords.png +++ /dev/null diff --git a/app/assets/images/emoji/crown.png b/app/assets/images/emoji/crown.png Binary files differdeleted file mode 100644 index 93b82d92f04..00000000000 --- a/app/assets/images/emoji/crown.png +++ /dev/null diff --git a/app/assets/images/emoji/cruise_ship.png b/app/assets/images/emoji/cruise_ship.png Binary files differdeleted file mode 100644 index 19d4acbe40c..00000000000 --- a/app/assets/images/emoji/cruise_ship.png +++ /dev/null diff --git a/app/assets/images/emoji/cry.png b/app/assets/images/emoji/cry.png Binary files differdeleted file mode 100644 index b7877f8a173..00000000000 --- a/app/assets/images/emoji/cry.png +++ /dev/null diff --git a/app/assets/images/emoji/crying_cat_face.png b/app/assets/images/emoji/crying_cat_face.png Binary files differdeleted file mode 100644 index b4f49715e00..00000000000 --- a/app/assets/images/emoji/crying_cat_face.png +++ /dev/null diff --git a/app/assets/images/emoji/crystal_ball.png b/app/assets/images/emoji/crystal_ball.png Binary files differdeleted file mode 100644 index 485d5c888f1..00000000000 --- a/app/assets/images/emoji/crystal_ball.png +++ /dev/null diff --git a/app/assets/images/emoji/cucumber.png b/app/assets/images/emoji/cucumber.png Binary files differdeleted file mode 100644 index 500807059d2..00000000000 --- a/app/assets/images/emoji/cucumber.png +++ /dev/null diff --git a/app/assets/images/emoji/cupid.png b/app/assets/images/emoji/cupid.png Binary files differdeleted file mode 100644 index 2df0078ddd1..00000000000 --- a/app/assets/images/emoji/cupid.png +++ /dev/null diff --git a/app/assets/images/emoji/curly_loop.png b/app/assets/images/emoji/curly_loop.png Binary files differdeleted file mode 100644 index 440aa56d50e..00000000000 --- a/app/assets/images/emoji/curly_loop.png +++ /dev/null diff --git a/app/assets/images/emoji/currency_exchange.png b/app/assets/images/emoji/currency_exchange.png Binary files differdeleted file mode 100644 index 4d46c6050e7..00000000000 --- a/app/assets/images/emoji/currency_exchange.png +++ /dev/null diff --git a/app/assets/images/emoji/curry.png b/app/assets/images/emoji/curry.png Binary files differdeleted file mode 100644 index 69657ca8103..00000000000 --- a/app/assets/images/emoji/curry.png +++ /dev/null diff --git a/app/assets/images/emoji/custard.png b/app/assets/images/emoji/custard.png Binary files differdeleted file mode 100644 index fa3df67b8f6..00000000000 --- a/app/assets/images/emoji/custard.png +++ /dev/null diff --git a/app/assets/images/emoji/customs.png b/app/assets/images/emoji/customs.png Binary files differdeleted file mode 100644 index 21b7ce2c69e..00000000000 --- a/app/assets/images/emoji/customs.png +++ /dev/null diff --git a/app/assets/images/emoji/cyclone.png b/app/assets/images/emoji/cyclone.png Binary files differdeleted file mode 100644 index ff00b1afe70..00000000000 --- a/app/assets/images/emoji/cyclone.png +++ /dev/null diff --git a/app/assets/images/emoji/dagger.png b/app/assets/images/emoji/dagger.png Binary files differdeleted file mode 100644 index 66e97b0aa25..00000000000 --- a/app/assets/images/emoji/dagger.png +++ /dev/null diff --git a/app/assets/images/emoji/dancer.png b/app/assets/images/emoji/dancer.png Binary files differdeleted file mode 100644 index 04b166991cb..00000000000 --- a/app/assets/images/emoji/dancer.png +++ /dev/null diff --git a/app/assets/images/emoji/dancer_tone1.png b/app/assets/images/emoji/dancer_tone1.png Binary files differdeleted file mode 100644 index 2c7b11c3a6e..00000000000 --- a/app/assets/images/emoji/dancer_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/dancer_tone2.png b/app/assets/images/emoji/dancer_tone2.png Binary files differdeleted file mode 100644 index cb04b1f907e..00000000000 --- a/app/assets/images/emoji/dancer_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/dancer_tone3.png b/app/assets/images/emoji/dancer_tone3.png Binary files differdeleted file mode 100644 index 98c5bca7b64..00000000000 --- a/app/assets/images/emoji/dancer_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/dancer_tone4.png b/app/assets/images/emoji/dancer_tone4.png Binary files differdeleted file mode 100644 index fdb1e00cbba..00000000000 --- a/app/assets/images/emoji/dancer_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/dancer_tone5.png b/app/assets/images/emoji/dancer_tone5.png Binary files differdeleted file mode 100644 index 0e34e0e23f0..00000000000 --- a/app/assets/images/emoji/dancer_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/dancers.png b/app/assets/images/emoji/dancers.png Binary files differdeleted file mode 100644 index 67e6ffacb76..00000000000 --- a/app/assets/images/emoji/dancers.png +++ /dev/null diff --git a/app/assets/images/emoji/dango.png b/app/assets/images/emoji/dango.png Binary files differdeleted file mode 100644 index f73f37b01c7..00000000000 --- a/app/assets/images/emoji/dango.png +++ /dev/null diff --git a/app/assets/images/emoji/dark_sunglasses.png b/app/assets/images/emoji/dark_sunglasses.png Binary files differdeleted file mode 100644 index b1b6db0acff..00000000000 --- a/app/assets/images/emoji/dark_sunglasses.png +++ /dev/null diff --git a/app/assets/images/emoji/dart.png b/app/assets/images/emoji/dart.png Binary files differdeleted file mode 100644 index f6704aeb8ba..00000000000 --- a/app/assets/images/emoji/dart.png +++ /dev/null diff --git a/app/assets/images/emoji/dash.png b/app/assets/images/emoji/dash.png Binary files differdeleted file mode 100644 index 064b8525c12..00000000000 --- a/app/assets/images/emoji/dash.png +++ /dev/null diff --git a/app/assets/images/emoji/date.png b/app/assets/images/emoji/date.png Binary files differdeleted file mode 100644 index f05b3da97b8..00000000000 --- a/app/assets/images/emoji/date.png +++ /dev/null diff --git a/app/assets/images/emoji/deciduous_tree.png b/app/assets/images/emoji/deciduous_tree.png Binary files differdeleted file mode 100644 index 785fc1c30ea..00000000000 --- a/app/assets/images/emoji/deciduous_tree.png +++ /dev/null diff --git a/app/assets/images/emoji/deer.png b/app/assets/images/emoji/deer.png Binary files differdeleted file mode 100644 index d8698195ff0..00000000000 --- a/app/assets/images/emoji/deer.png +++ /dev/null diff --git a/app/assets/images/emoji/department_store.png b/app/assets/images/emoji/department_store.png Binary files differdeleted file mode 100644 index 58867c7a6e1..00000000000 --- a/app/assets/images/emoji/department_store.png +++ /dev/null diff --git a/app/assets/images/emoji/desert.png b/app/assets/images/emoji/desert.png Binary files differdeleted file mode 100644 index e9966ff8c65..00000000000 --- a/app/assets/images/emoji/desert.png +++ /dev/null diff --git a/app/assets/images/emoji/desktop.png b/app/assets/images/emoji/desktop.png Binary files differdeleted file mode 100644 index 909bd42b5e1..00000000000 --- a/app/assets/images/emoji/desktop.png +++ /dev/null diff --git a/app/assets/images/emoji/diamond_shape_with_a_dot_inside.png b/app/assets/images/emoji/diamond_shape_with_a_dot_inside.png Binary files differdeleted file mode 100644 index 2a22a26d1e2..00000000000 --- a/app/assets/images/emoji/diamond_shape_with_a_dot_inside.png +++ /dev/null diff --git a/app/assets/images/emoji/diamonds.png b/app/assets/images/emoji/diamonds.png Binary files differdeleted file mode 100644 index 1f25f51f97a..00000000000 --- a/app/assets/images/emoji/diamonds.png +++ /dev/null diff --git a/app/assets/images/emoji/disappointed.png b/app/assets/images/emoji/disappointed.png Binary files differdeleted file mode 100644 index efe4e67e23c..00000000000 --- a/app/assets/images/emoji/disappointed.png +++ /dev/null diff --git a/app/assets/images/emoji/disappointed_relieved.png b/app/assets/images/emoji/disappointed_relieved.png Binary files differdeleted file mode 100644 index aef864d2b3d..00000000000 --- a/app/assets/images/emoji/disappointed_relieved.png +++ /dev/null diff --git a/app/assets/images/emoji/dividers.png b/app/assets/images/emoji/dividers.png Binary files differdeleted file mode 100644 index 46a7e403f9d..00000000000 --- a/app/assets/images/emoji/dividers.png +++ /dev/null diff --git a/app/assets/images/emoji/dizzy.png b/app/assets/images/emoji/dizzy.png Binary files differdeleted file mode 100644 index 85f52efad24..00000000000 --- a/app/assets/images/emoji/dizzy.png +++ /dev/null diff --git a/app/assets/images/emoji/dizzy_face.png b/app/assets/images/emoji/dizzy_face.png Binary files differdeleted file mode 100644 index 3120316ab5e..00000000000 --- a/app/assets/images/emoji/dizzy_face.png +++ /dev/null diff --git a/app/assets/images/emoji/do_not_litter.png b/app/assets/images/emoji/do_not_litter.png Binary files differdeleted file mode 100644 index 341d2575f4f..00000000000 --- a/app/assets/images/emoji/do_not_litter.png +++ /dev/null diff --git a/app/assets/images/emoji/dog.png b/app/assets/images/emoji/dog.png Binary files differdeleted file mode 100644 index 281b81d58bd..00000000000 --- a/app/assets/images/emoji/dog.png +++ /dev/null diff --git a/app/assets/images/emoji/dog2.png b/app/assets/images/emoji/dog2.png Binary files differdeleted file mode 100644 index 976143dbdbe..00000000000 --- a/app/assets/images/emoji/dog2.png +++ /dev/null diff --git a/app/assets/images/emoji/dollar.png b/app/assets/images/emoji/dollar.png Binary files differdeleted file mode 100644 index a9904c28293..00000000000 --- a/app/assets/images/emoji/dollar.png +++ /dev/null diff --git a/app/assets/images/emoji/dolls.png b/app/assets/images/emoji/dolls.png Binary files differdeleted file mode 100644 index 10955615110..00000000000 --- a/app/assets/images/emoji/dolls.png +++ /dev/null diff --git a/app/assets/images/emoji/dolphin.png b/app/assets/images/emoji/dolphin.png Binary files differdeleted file mode 100644 index 81434809003..00000000000 --- a/app/assets/images/emoji/dolphin.png +++ /dev/null diff --git a/app/assets/images/emoji/door.png b/app/assets/images/emoji/door.png Binary files differdeleted file mode 100644 index 36ae3e27494..00000000000 --- a/app/assets/images/emoji/door.png +++ /dev/null diff --git a/app/assets/images/emoji/doughnut.png b/app/assets/images/emoji/doughnut.png Binary files differdeleted file mode 100644 index 0ca4cd0bde8..00000000000 --- a/app/assets/images/emoji/doughnut.png +++ /dev/null diff --git a/app/assets/images/emoji/dove.png b/app/assets/images/emoji/dove.png Binary files differdeleted file mode 100644 index 9580c4917d7..00000000000 --- a/app/assets/images/emoji/dove.png +++ /dev/null diff --git a/app/assets/images/emoji/dragon.png b/app/assets/images/emoji/dragon.png Binary files differdeleted file mode 100644 index d6311cf5429..00000000000 --- a/app/assets/images/emoji/dragon.png +++ /dev/null diff --git a/app/assets/images/emoji/dragon_face.png b/app/assets/images/emoji/dragon_face.png Binary files differdeleted file mode 100644 index 3c2720446c6..00000000000 --- a/app/assets/images/emoji/dragon_face.png +++ /dev/null diff --git a/app/assets/images/emoji/dress.png b/app/assets/images/emoji/dress.png Binary files differdeleted file mode 100644 index a697ca5c57d..00000000000 --- a/app/assets/images/emoji/dress.png +++ /dev/null diff --git a/app/assets/images/emoji/dromedary_camel.png b/app/assets/images/emoji/dromedary_camel.png Binary files differdeleted file mode 100644 index 5271637c7c4..00000000000 --- a/app/assets/images/emoji/dromedary_camel.png +++ /dev/null diff --git a/app/assets/images/emoji/drooling_face.png b/app/assets/images/emoji/drooling_face.png Binary files differdeleted file mode 100644 index a5460532597..00000000000 --- a/app/assets/images/emoji/drooling_face.png +++ /dev/null diff --git a/app/assets/images/emoji/droplet.png b/app/assets/images/emoji/droplet.png Binary files differdeleted file mode 100644 index 71241ec3061..00000000000 --- a/app/assets/images/emoji/droplet.png +++ /dev/null diff --git a/app/assets/images/emoji/drum.png b/app/assets/images/emoji/drum.png Binary files differdeleted file mode 100644 index b038727cc99..00000000000 --- a/app/assets/images/emoji/drum.png +++ /dev/null diff --git a/app/assets/images/emoji/duck.png b/app/assets/images/emoji/duck.png Binary files differdeleted file mode 100644 index 74330b77ca3..00000000000 --- a/app/assets/images/emoji/duck.png +++ /dev/null diff --git a/app/assets/images/emoji/dvd.png b/app/assets/images/emoji/dvd.png Binary files differdeleted file mode 100644 index 045a6f7a08d..00000000000 --- a/app/assets/images/emoji/dvd.png +++ /dev/null diff --git a/app/assets/images/emoji/e-mail.png b/app/assets/images/emoji/e-mail.png Binary files differdeleted file mode 100644 index d22e654a20b..00000000000 --- a/app/assets/images/emoji/e-mail.png +++ /dev/null diff --git a/app/assets/images/emoji/eagle.png b/app/assets/images/emoji/eagle.png Binary files differdeleted file mode 100644 index 4f277debeef..00000000000 --- a/app/assets/images/emoji/eagle.png +++ /dev/null diff --git a/app/assets/images/emoji/ear.png b/app/assets/images/emoji/ear.png Binary files differdeleted file mode 100644 index f84f9ff154a..00000000000 --- a/app/assets/images/emoji/ear.png +++ /dev/null diff --git a/app/assets/images/emoji/ear_of_rice.png b/app/assets/images/emoji/ear_of_rice.png Binary files differdeleted file mode 100644 index 3564d9d643a..00000000000 --- a/app/assets/images/emoji/ear_of_rice.png +++ /dev/null diff --git a/app/assets/images/emoji/ear_tone1.png b/app/assets/images/emoji/ear_tone1.png Binary files differdeleted file mode 100644 index d09e1e41996..00000000000 --- a/app/assets/images/emoji/ear_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/ear_tone2.png b/app/assets/images/emoji/ear_tone2.png Binary files differdeleted file mode 100644 index 300d60a9948..00000000000 --- a/app/assets/images/emoji/ear_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/ear_tone3.png b/app/assets/images/emoji/ear_tone3.png Binary files differdeleted file mode 100644 index 2a56eebe445..00000000000 --- a/app/assets/images/emoji/ear_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/ear_tone4.png b/app/assets/images/emoji/ear_tone4.png Binary files differdeleted file mode 100644 index bd270f7763e..00000000000 --- a/app/assets/images/emoji/ear_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/ear_tone5.png b/app/assets/images/emoji/ear_tone5.png Binary files differdeleted file mode 100644 index b96bb441dff..00000000000 --- a/app/assets/images/emoji/ear_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/earth_africa.png b/app/assets/images/emoji/earth_africa.png Binary files differdeleted file mode 100644 index 66c3348c23a..00000000000 --- a/app/assets/images/emoji/earth_africa.png +++ /dev/null diff --git a/app/assets/images/emoji/earth_americas.png b/app/assets/images/emoji/earth_americas.png Binary files differdeleted file mode 100644 index 538c3cddd68..00000000000 --- a/app/assets/images/emoji/earth_americas.png +++ /dev/null diff --git a/app/assets/images/emoji/earth_asia.png b/app/assets/images/emoji/earth_asia.png Binary files differdeleted file mode 100644 index d8df97fec3c..00000000000 --- a/app/assets/images/emoji/earth_asia.png +++ /dev/null diff --git a/app/assets/images/emoji/egg.png b/app/assets/images/emoji/egg.png Binary files differdeleted file mode 100644 index c171974d993..00000000000 --- a/app/assets/images/emoji/egg.png +++ /dev/null diff --git a/app/assets/images/emoji/eggplant.png b/app/assets/images/emoji/eggplant.png Binary files differdeleted file mode 100644 index fafd7c1a14c..00000000000 --- a/app/assets/images/emoji/eggplant.png +++ /dev/null diff --git a/app/assets/images/emoji/eight.png b/app/assets/images/emoji/eight.png Binary files differdeleted file mode 100644 index 8c95874d4c5..00000000000 --- a/app/assets/images/emoji/eight.png +++ /dev/null diff --git a/app/assets/images/emoji/eight_pointed_black_star.png b/app/assets/images/emoji/eight_pointed_black_star.png Binary files differdeleted file mode 100644 index 820179bda50..00000000000 --- a/app/assets/images/emoji/eight_pointed_black_star.png +++ /dev/null diff --git a/app/assets/images/emoji/eight_spoked_asterisk.png b/app/assets/images/emoji/eight_spoked_asterisk.png Binary files differdeleted file mode 100644 index 3307ffa62ee..00000000000 --- a/app/assets/images/emoji/eight_spoked_asterisk.png +++ /dev/null diff --git a/app/assets/images/emoji/eject.png b/app/assets/images/emoji/eject.png Binary files differdeleted file mode 100644 index ec5cfc48973..00000000000 --- a/app/assets/images/emoji/eject.png +++ /dev/null diff --git a/app/assets/images/emoji/electric_plug.png b/app/assets/images/emoji/electric_plug.png Binary files differdeleted file mode 100644 index 31d1eb215b4..00000000000 --- a/app/assets/images/emoji/electric_plug.png +++ /dev/null diff --git a/app/assets/images/emoji/elephant.png b/app/assets/images/emoji/elephant.png Binary files differdeleted file mode 100644 index b8a6d140595..00000000000 --- a/app/assets/images/emoji/elephant.png +++ /dev/null diff --git a/app/assets/images/emoji/end.png b/app/assets/images/emoji/end.png Binary files differdeleted file mode 100644 index ef3ccd5f367..00000000000 --- a/app/assets/images/emoji/end.png +++ /dev/null diff --git a/app/assets/images/emoji/envelope.png b/app/assets/images/emoji/envelope.png Binary files differdeleted file mode 100644 index ec77ac375a4..00000000000 --- a/app/assets/images/emoji/envelope.png +++ /dev/null diff --git a/app/assets/images/emoji/envelope_with_arrow.png b/app/assets/images/emoji/envelope_with_arrow.png Binary files differdeleted file mode 100644 index 7448a6b7673..00000000000 --- a/app/assets/images/emoji/envelope_with_arrow.png +++ /dev/null diff --git a/app/assets/images/emoji/euro.png b/app/assets/images/emoji/euro.png Binary files differdeleted file mode 100644 index a49020820e1..00000000000 --- a/app/assets/images/emoji/euro.png +++ /dev/null diff --git a/app/assets/images/emoji/european_castle.png b/app/assets/images/emoji/european_castle.png Binary files differdeleted file mode 100644 index 888d11332ce..00000000000 --- a/app/assets/images/emoji/european_castle.png +++ /dev/null diff --git a/app/assets/images/emoji/european_post_office.png b/app/assets/images/emoji/european_post_office.png Binary files differdeleted file mode 100644 index 3745aff8dd2..00000000000 --- a/app/assets/images/emoji/european_post_office.png +++ /dev/null diff --git a/app/assets/images/emoji/evergreen_tree.png b/app/assets/images/emoji/evergreen_tree.png Binary files differdeleted file mode 100644 index f679d8dd772..00000000000 --- a/app/assets/images/emoji/evergreen_tree.png +++ /dev/null diff --git a/app/assets/images/emoji/exclamation.png b/app/assets/images/emoji/exclamation.png Binary files differdeleted file mode 100644 index 2c14406422f..00000000000 --- a/app/assets/images/emoji/exclamation.png +++ /dev/null diff --git a/app/assets/images/emoji/expressionless.png b/app/assets/images/emoji/expressionless.png Binary files differdeleted file mode 100644 index 2954017f6c2..00000000000 --- a/app/assets/images/emoji/expressionless.png +++ /dev/null diff --git a/app/assets/images/emoji/eye.png b/app/assets/images/emoji/eye.png Binary files differdeleted file mode 100644 index 9d989cdd375..00000000000 --- a/app/assets/images/emoji/eye.png +++ /dev/null diff --git a/app/assets/images/emoji/eye_in_speech_bubble.png b/app/assets/images/emoji/eye_in_speech_bubble.png Binary files differdeleted file mode 100644 index 21bd22bbcce..00000000000 --- a/app/assets/images/emoji/eye_in_speech_bubble.png +++ /dev/null diff --git a/app/assets/images/emoji/eyeglasses.png b/app/assets/images/emoji/eyeglasses.png Binary files differdeleted file mode 100644 index 865d8274acf..00000000000 --- a/app/assets/images/emoji/eyeglasses.png +++ /dev/null diff --git a/app/assets/images/emoji/eyes.png b/app/assets/images/emoji/eyes.png Binary files differdeleted file mode 100644 index 2102ada7e09..00000000000 --- a/app/assets/images/emoji/eyes.png +++ /dev/null diff --git a/app/assets/images/emoji/face_palm.png b/app/assets/images/emoji/face_palm.png Binary files differdeleted file mode 100644 index defc796cf16..00000000000 --- a/app/assets/images/emoji/face_palm.png +++ /dev/null diff --git a/app/assets/images/emoji/face_palm_tone1.png b/app/assets/images/emoji/face_palm_tone1.png Binary files differdeleted file mode 100644 index 2f4b010bb40..00000000000 --- a/app/assets/images/emoji/face_palm_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/face_palm_tone2.png b/app/assets/images/emoji/face_palm_tone2.png Binary files differdeleted file mode 100644 index 97fb6831687..00000000000 --- a/app/assets/images/emoji/face_palm_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/face_palm_tone3.png b/app/assets/images/emoji/face_palm_tone3.png Binary files differdeleted file mode 100644 index b5b5c1e5306..00000000000 --- a/app/assets/images/emoji/face_palm_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/face_palm_tone4.png b/app/assets/images/emoji/face_palm_tone4.png Binary files differdeleted file mode 100644 index 2840b113483..00000000000 --- a/app/assets/images/emoji/face_palm_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/face_palm_tone5.png b/app/assets/images/emoji/face_palm_tone5.png Binary files differdeleted file mode 100644 index 6f070db98be..00000000000 --- a/app/assets/images/emoji/face_palm_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/factory.png b/app/assets/images/emoji/factory.png Binary files differdeleted file mode 100644 index e1d2ddf4a27..00000000000 --- a/app/assets/images/emoji/factory.png +++ /dev/null diff --git a/app/assets/images/emoji/fallen_leaf.png b/app/assets/images/emoji/fallen_leaf.png Binary files differdeleted file mode 100644 index 0d60e7bdf2d..00000000000 --- a/app/assets/images/emoji/fallen_leaf.png +++ /dev/null diff --git a/app/assets/images/emoji/family.png b/app/assets/images/emoji/family.png Binary files differdeleted file mode 100644 index 26421965791..00000000000 --- a/app/assets/images/emoji/family.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mmb.png b/app/assets/images/emoji/family_mmb.png Binary files differdeleted file mode 100644 index 7a2e4e2c491..00000000000 --- a/app/assets/images/emoji/family_mmb.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mmbb.png b/app/assets/images/emoji/family_mmbb.png Binary files differdeleted file mode 100644 index 81e6c0fc0ee..00000000000 --- a/app/assets/images/emoji/family_mmbb.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mmg.png b/app/assets/images/emoji/family_mmg.png Binary files differdeleted file mode 100644 index 932a85e1fe5..00000000000 --- a/app/assets/images/emoji/family_mmg.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mmgb.png b/app/assets/images/emoji/family_mmgb.png Binary files differdeleted file mode 100644 index 41e35166670..00000000000 --- a/app/assets/images/emoji/family_mmgb.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mmgg.png b/app/assets/images/emoji/family_mmgg.png Binary files differdeleted file mode 100644 index 8e8ccfe6c7f..00000000000 --- a/app/assets/images/emoji/family_mmgg.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mwbb.png b/app/assets/images/emoji/family_mwbb.png Binary files differdeleted file mode 100644 index b544fbe573f..00000000000 --- a/app/assets/images/emoji/family_mwbb.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mwg.png b/app/assets/images/emoji/family_mwg.png Binary files differdeleted file mode 100644 index 71d2681c32a..00000000000 --- a/app/assets/images/emoji/family_mwg.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mwgb.png b/app/assets/images/emoji/family_mwgb.png Binary files differdeleted file mode 100644 index 40dbf1f7a18..00000000000 --- a/app/assets/images/emoji/family_mwgb.png +++ /dev/null diff --git a/app/assets/images/emoji/family_mwgg.png b/app/assets/images/emoji/family_mwgg.png Binary files differdeleted file mode 100644 index bfefa4879cb..00000000000 --- a/app/assets/images/emoji/family_mwgg.png +++ /dev/null diff --git a/app/assets/images/emoji/family_wwb.png b/app/assets/images/emoji/family_wwb.png Binary files differdeleted file mode 100644 index 836feae7c78..00000000000 --- a/app/assets/images/emoji/family_wwb.png +++ /dev/null diff --git a/app/assets/images/emoji/family_wwbb.png b/app/assets/images/emoji/family_wwbb.png Binary files differdeleted file mode 100644 index 6c6ba45e7bb..00000000000 --- a/app/assets/images/emoji/family_wwbb.png +++ /dev/null diff --git a/app/assets/images/emoji/family_wwg.png b/app/assets/images/emoji/family_wwg.png Binary files differdeleted file mode 100644 index 41225c6fa5a..00000000000 --- a/app/assets/images/emoji/family_wwg.png +++ /dev/null diff --git a/app/assets/images/emoji/family_wwgb.png b/app/assets/images/emoji/family_wwgb.png Binary files differdeleted file mode 100644 index 284d29ab5da..00000000000 --- a/app/assets/images/emoji/family_wwgb.png +++ /dev/null diff --git a/app/assets/images/emoji/family_wwgg.png b/app/assets/images/emoji/family_wwgg.png Binary files differdeleted file mode 100644 index d8d3f49b85f..00000000000 --- a/app/assets/images/emoji/family_wwgg.png +++ /dev/null diff --git a/app/assets/images/emoji/fast_forward.png b/app/assets/images/emoji/fast_forward.png Binary files differdeleted file mode 100644 index c406fedfdb1..00000000000 --- a/app/assets/images/emoji/fast_forward.png +++ /dev/null diff --git a/app/assets/images/emoji/fax.png b/app/assets/images/emoji/fax.png Binary files differdeleted file mode 100644 index 6f929e294c2..00000000000 --- a/app/assets/images/emoji/fax.png +++ /dev/null diff --git a/app/assets/images/emoji/fearful.png b/app/assets/images/emoji/fearful.png Binary files differdeleted file mode 100644 index eb8b347cef9..00000000000 --- a/app/assets/images/emoji/fearful.png +++ /dev/null diff --git a/app/assets/images/emoji/feet.png b/app/assets/images/emoji/feet.png Binary files differdeleted file mode 100644 index 5fe568cee93..00000000000 --- a/app/assets/images/emoji/feet.png +++ /dev/null diff --git a/app/assets/images/emoji/fencer.png b/app/assets/images/emoji/fencer.png Binary files differdeleted file mode 100644 index 5288c920eb9..00000000000 --- a/app/assets/images/emoji/fencer.png +++ /dev/null diff --git a/app/assets/images/emoji/ferris_wheel.png b/app/assets/images/emoji/ferris_wheel.png Binary files differdeleted file mode 100644 index 55c8ff0475b..00000000000 --- a/app/assets/images/emoji/ferris_wheel.png +++ /dev/null diff --git a/app/assets/images/emoji/ferry.png b/app/assets/images/emoji/ferry.png Binary files differdeleted file mode 100644 index 41816b3ae34..00000000000 --- a/app/assets/images/emoji/ferry.png +++ /dev/null diff --git a/app/assets/images/emoji/field_hockey.png b/app/assets/images/emoji/field_hockey.png Binary files differdeleted file mode 100644 index 839637716ee..00000000000 --- a/app/assets/images/emoji/field_hockey.png +++ /dev/null diff --git a/app/assets/images/emoji/file_cabinet.png b/app/assets/images/emoji/file_cabinet.png Binary files differdeleted file mode 100644 index fddc65dde96..00000000000 --- a/app/assets/images/emoji/file_cabinet.png +++ /dev/null diff --git a/app/assets/images/emoji/file_folder.png b/app/assets/images/emoji/file_folder.png Binary files differdeleted file mode 100644 index addedaf0870..00000000000 --- a/app/assets/images/emoji/file_folder.png +++ /dev/null diff --git a/app/assets/images/emoji/film_frames.png b/app/assets/images/emoji/film_frames.png Binary files differdeleted file mode 100644 index 30143aedbe6..00000000000 --- a/app/assets/images/emoji/film_frames.png +++ /dev/null diff --git a/app/assets/images/emoji/fingers_crossed.png b/app/assets/images/emoji/fingers_crossed.png Binary files differdeleted file mode 100644 index 4cd18514ea3..00000000000 --- a/app/assets/images/emoji/fingers_crossed.png +++ /dev/null diff --git a/app/assets/images/emoji/fingers_crossed_tone1.png b/app/assets/images/emoji/fingers_crossed_tone1.png Binary files differdeleted file mode 100644 index dd2384a6cd5..00000000000 --- a/app/assets/images/emoji/fingers_crossed_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/fingers_crossed_tone2.png b/app/assets/images/emoji/fingers_crossed_tone2.png Binary files differdeleted file mode 100644 index 6228401befe..00000000000 --- a/app/assets/images/emoji/fingers_crossed_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/fingers_crossed_tone3.png b/app/assets/images/emoji/fingers_crossed_tone3.png Binary files differdeleted file mode 100644 index b1074da15f5..00000000000 --- a/app/assets/images/emoji/fingers_crossed_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/fingers_crossed_tone4.png b/app/assets/images/emoji/fingers_crossed_tone4.png Binary files differdeleted file mode 100644 index 75e05e4d332..00000000000 --- a/app/assets/images/emoji/fingers_crossed_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/fingers_crossed_tone5.png b/app/assets/images/emoji/fingers_crossed_tone5.png Binary files differdeleted file mode 100644 index 761aebdc30f..00000000000 --- a/app/assets/images/emoji/fingers_crossed_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/fire.png b/app/assets/images/emoji/fire.png Binary files differdeleted file mode 100644 index bd3775a460b..00000000000 --- a/app/assets/images/emoji/fire.png +++ /dev/null diff --git a/app/assets/images/emoji/fire_engine.png b/app/assets/images/emoji/fire_engine.png Binary files differdeleted file mode 100644 index 2cd45b7cf7e..00000000000 --- a/app/assets/images/emoji/fire_engine.png +++ /dev/null diff --git a/app/assets/images/emoji/fireworks.png b/app/assets/images/emoji/fireworks.png Binary files differdeleted file mode 100644 index 176c8b58265..00000000000 --- a/app/assets/images/emoji/fireworks.png +++ /dev/null diff --git a/app/assets/images/emoji/first_place.png b/app/assets/images/emoji/first_place.png Binary files differdeleted file mode 100644 index 15612b66492..00000000000 --- a/app/assets/images/emoji/first_place.png +++ /dev/null diff --git a/app/assets/images/emoji/first_quarter_moon.png b/app/assets/images/emoji/first_quarter_moon.png Binary files differdeleted file mode 100644 index 5dccaf72a4f..00000000000 --- a/app/assets/images/emoji/first_quarter_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/first_quarter_moon_with_face.png b/app/assets/images/emoji/first_quarter_moon_with_face.png Binary files differdeleted file mode 100644 index cd8a3d7acd8..00000000000 --- a/app/assets/images/emoji/first_quarter_moon_with_face.png +++ /dev/null diff --git a/app/assets/images/emoji/fish.png b/app/assets/images/emoji/fish.png Binary files differdeleted file mode 100644 index c2d2faaacd4..00000000000 --- a/app/assets/images/emoji/fish.png +++ /dev/null diff --git a/app/assets/images/emoji/fish_cake.png b/app/assets/images/emoji/fish_cake.png Binary files differdeleted file mode 100644 index 157bded65db..00000000000 --- a/app/assets/images/emoji/fish_cake.png +++ /dev/null diff --git a/app/assets/images/emoji/fishing_pole_and_fish.png b/app/assets/images/emoji/fishing_pole_and_fish.png Binary files differdeleted file mode 100644 index dfcdf07eb50..00000000000 --- a/app/assets/images/emoji/fishing_pole_and_fish.png +++ /dev/null diff --git a/app/assets/images/emoji/fist.png b/app/assets/images/emoji/fist.png Binary files differdeleted file mode 100644 index de33592bf98..00000000000 --- a/app/assets/images/emoji/fist.png +++ /dev/null diff --git a/app/assets/images/emoji/fist_tone1.png b/app/assets/images/emoji/fist_tone1.png Binary files differdeleted file mode 100644 index 02809e2dd68..00000000000 --- a/app/assets/images/emoji/fist_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/fist_tone2.png b/app/assets/images/emoji/fist_tone2.png Binary files differdeleted file mode 100644 index 5de34810383..00000000000 --- a/app/assets/images/emoji/fist_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/fist_tone3.png b/app/assets/images/emoji/fist_tone3.png Binary files differdeleted file mode 100644 index 0d5240129b1..00000000000 --- a/app/assets/images/emoji/fist_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/fist_tone4.png b/app/assets/images/emoji/fist_tone4.png Binary files differdeleted file mode 100644 index a95c0dd634b..00000000000 --- a/app/assets/images/emoji/fist_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/fist_tone5.png b/app/assets/images/emoji/fist_tone5.png Binary files differdeleted file mode 100644 index a2f092fd8c7..00000000000 --- a/app/assets/images/emoji/fist_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/five.png b/app/assets/images/emoji/five.png Binary files differdeleted file mode 100644 index d14371f3f27..00000000000 --- a/app/assets/images/emoji/five.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ac.png b/app/assets/images/emoji/flag_ac.png Binary files differdeleted file mode 100644 index 286239920c7..00000000000 --- a/app/assets/images/emoji/flag_ac.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ad.png b/app/assets/images/emoji/flag_ad.png Binary files differdeleted file mode 100644 index 20f4b14e8ad..00000000000 --- a/app/assets/images/emoji/flag_ad.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ae.png b/app/assets/images/emoji/flag_ae.png Binary files differdeleted file mode 100644 index d16ffe4b862..00000000000 --- a/app/assets/images/emoji/flag_ae.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_af.png b/app/assets/images/emoji/flag_af.png Binary files differdeleted file mode 100644 index a51533b554d..00000000000 --- a/app/assets/images/emoji/flag_af.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ag.png b/app/assets/images/emoji/flag_ag.png Binary files differdeleted file mode 100644 index 07f2ce397d0..00000000000 --- a/app/assets/images/emoji/flag_ag.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ai.png b/app/assets/images/emoji/flag_ai.png Binary files differdeleted file mode 100644 index 500b5ab09fb..00000000000 --- a/app/assets/images/emoji/flag_ai.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_al.png b/app/assets/images/emoji/flag_al.png Binary files differdeleted file mode 100644 index 03a20132cc6..00000000000 --- a/app/assets/images/emoji/flag_al.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_am.png b/app/assets/images/emoji/flag_am.png Binary files differdeleted file mode 100644 index 2ad60a273ec..00000000000 --- a/app/assets/images/emoji/flag_am.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ao.png b/app/assets/images/emoji/flag_ao.png Binary files differdeleted file mode 100644 index cb46c31f862..00000000000 --- a/app/assets/images/emoji/flag_ao.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_aq.png b/app/assets/images/emoji/flag_aq.png Binary files differdeleted file mode 100644 index b272021d375..00000000000 --- a/app/assets/images/emoji/flag_aq.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ar.png b/app/assets/images/emoji/flag_ar.png Binary files differdeleted file mode 100644 index 73136caf3b7..00000000000 --- a/app/assets/images/emoji/flag_ar.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_as.png b/app/assets/images/emoji/flag_as.png Binary files differdeleted file mode 100644 index 3db45a0d9f3..00000000000 --- a/app/assets/images/emoji/flag_as.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_at.png b/app/assets/images/emoji/flag_at.png Binary files differdeleted file mode 100644 index c43769dcb19..00000000000 --- a/app/assets/images/emoji/flag_at.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_au.png b/app/assets/images/emoji/flag_au.png Binary files differdeleted file mode 100644 index 7794309c78c..00000000000 --- a/app/assets/images/emoji/flag_au.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_aw.png b/app/assets/images/emoji/flag_aw.png Binary files differdeleted file mode 100644 index 02c840d12c9..00000000000 --- a/app/assets/images/emoji/flag_aw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ax.png b/app/assets/images/emoji/flag_ax.png Binary files differdeleted file mode 100644 index fc5466174bb..00000000000 --- a/app/assets/images/emoji/flag_ax.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_az.png b/app/assets/images/emoji/flag_az.png Binary files differdeleted file mode 100644 index 89d3d15fd9f..00000000000 --- a/app/assets/images/emoji/flag_az.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ba.png b/app/assets/images/emoji/flag_ba.png Binary files differdeleted file mode 100644 index 25fe407e13c..00000000000 --- a/app/assets/images/emoji/flag_ba.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bb.png b/app/assets/images/emoji/flag_bb.png Binary files differdeleted file mode 100644 index bccd8c5c9b0..00000000000 --- a/app/assets/images/emoji/flag_bb.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bd.png b/app/assets/images/emoji/flag_bd.png Binary files differdeleted file mode 100644 index b0597a3149b..00000000000 --- a/app/assets/images/emoji/flag_bd.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_be.png b/app/assets/images/emoji/flag_be.png Binary files differdeleted file mode 100644 index 551f086e3c4..00000000000 --- a/app/assets/images/emoji/flag_be.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bf.png b/app/assets/images/emoji/flag_bf.png Binary files differdeleted file mode 100644 index 444d4829f94..00000000000 --- a/app/assets/images/emoji/flag_bf.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bg.png b/app/assets/images/emoji/flag_bg.png Binary files differdeleted file mode 100644 index 821eee5e170..00000000000 --- a/app/assets/images/emoji/flag_bg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bh.png b/app/assets/images/emoji/flag_bh.png Binary files differdeleted file mode 100644 index f33724249f0..00000000000 --- a/app/assets/images/emoji/flag_bh.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bi.png b/app/assets/images/emoji/flag_bi.png Binary files differdeleted file mode 100644 index ea20ac93211..00000000000 --- a/app/assets/images/emoji/flag_bi.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bj.png b/app/assets/images/emoji/flag_bj.png Binary files differdeleted file mode 100644 index 7cca4f80457..00000000000 --- a/app/assets/images/emoji/flag_bj.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bl.png b/app/assets/images/emoji/flag_bl.png Binary files differdeleted file mode 100644 index 1082e78999f..00000000000 --- a/app/assets/images/emoji/flag_bl.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_black.png b/app/assets/images/emoji/flag_black.png Binary files differdeleted file mode 100644 index 0e28d05d5ac..00000000000 --- a/app/assets/images/emoji/flag_black.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bm.png b/app/assets/images/emoji/flag_bm.png Binary files differdeleted file mode 100644 index ab8cafdac63..00000000000 --- a/app/assets/images/emoji/flag_bm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bn.png b/app/assets/images/emoji/flag_bn.png Binary files differdeleted file mode 100644 index caa9329a896..00000000000 --- a/app/assets/images/emoji/flag_bn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bo.png b/app/assets/images/emoji/flag_bo.png Binary files differdeleted file mode 100644 index 98af62b3da7..00000000000 --- a/app/assets/images/emoji/flag_bo.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bq.png b/app/assets/images/emoji/flag_bq.png Binary files differdeleted file mode 100644 index cb978ef9de9..00000000000 --- a/app/assets/images/emoji/flag_bq.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_br.png b/app/assets/images/emoji/flag_br.png Binary files differdeleted file mode 100644 index b139366a42b..00000000000 --- a/app/assets/images/emoji/flag_br.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bs.png b/app/assets/images/emoji/flag_bs.png Binary files differdeleted file mode 100644 index d36bcd2fb52..00000000000 --- a/app/assets/images/emoji/flag_bs.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bt.png b/app/assets/images/emoji/flag_bt.png Binary files differdeleted file mode 100644 index ed57aa0360e..00000000000 --- a/app/assets/images/emoji/flag_bt.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bv.png b/app/assets/images/emoji/flag_bv.png Binary files differdeleted file mode 100644 index 5884e648228..00000000000 --- a/app/assets/images/emoji/flag_bv.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bw.png b/app/assets/images/emoji/flag_bw.png Binary files differdeleted file mode 100644 index cb12f34739d..00000000000 --- a/app/assets/images/emoji/flag_bw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_by.png b/app/assets/images/emoji/flag_by.png Binary files differdeleted file mode 100644 index 859c05beb13..00000000000 --- a/app/assets/images/emoji/flag_by.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_bz.png b/app/assets/images/emoji/flag_bz.png Binary files differdeleted file mode 100644 index 34761cd03d8..00000000000 --- a/app/assets/images/emoji/flag_bz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ca.png b/app/assets/images/emoji/flag_ca.png Binary files differdeleted file mode 100644 index 7c5b390e85b..00000000000 --- a/app/assets/images/emoji/flag_ca.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cc.png b/app/assets/images/emoji/flag_cc.png Binary files differdeleted file mode 100644 index b6555a23d83..00000000000 --- a/app/assets/images/emoji/flag_cc.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cd.png b/app/assets/images/emoji/flag_cd.png Binary files differdeleted file mode 100644 index fa92009771d..00000000000 --- a/app/assets/images/emoji/flag_cd.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cf.png b/app/assets/images/emoji/flag_cf.png Binary files differdeleted file mode 100644 index b969ae29ea9..00000000000 --- a/app/assets/images/emoji/flag_cf.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cg.png b/app/assets/images/emoji/flag_cg.png Binary files differdeleted file mode 100644 index 3a38a40a95e..00000000000 --- a/app/assets/images/emoji/flag_cg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ch.png b/app/assets/images/emoji/flag_ch.png Binary files differdeleted file mode 100644 index 5ff86b8a3b7..00000000000 --- a/app/assets/images/emoji/flag_ch.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ci.png b/app/assets/images/emoji/flag_ci.png Binary files differdeleted file mode 100644 index e3b4d15c7f1..00000000000 --- a/app/assets/images/emoji/flag_ci.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ck.png b/app/assets/images/emoji/flag_ck.png Binary files differdeleted file mode 100644 index b6b53dbc1c4..00000000000 --- a/app/assets/images/emoji/flag_ck.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cl.png b/app/assets/images/emoji/flag_cl.png Binary files differdeleted file mode 100644 index c9390da5499..00000000000 --- a/app/assets/images/emoji/flag_cl.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cm.png b/app/assets/images/emoji/flag_cm.png Binary files differdeleted file mode 100644 index 2d3f6ec4518..00000000000 --- a/app/assets/images/emoji/flag_cm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cn.png b/app/assets/images/emoji/flag_cn.png Binary files differdeleted file mode 100644 index 0a7f350a6d2..00000000000 --- a/app/assets/images/emoji/flag_cn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_co.png b/app/assets/images/emoji/flag_co.png Binary files differdeleted file mode 100644 index 7e0f5e0dc3c..00000000000 --- a/app/assets/images/emoji/flag_co.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cp.png b/app/assets/images/emoji/flag_cp.png Binary files differdeleted file mode 100644 index 70c761036bd..00000000000 --- a/app/assets/images/emoji/flag_cp.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cr.png b/app/assets/images/emoji/flag_cr.png Binary files differdeleted file mode 100644 index a5fce126515..00000000000 --- a/app/assets/images/emoji/flag_cr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cu.png b/app/assets/images/emoji/flag_cu.png Binary files differdeleted file mode 100644 index 447328f7dfd..00000000000 --- a/app/assets/images/emoji/flag_cu.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cv.png b/app/assets/images/emoji/flag_cv.png Binary files differdeleted file mode 100644 index 43faf4d64d5..00000000000 --- a/app/assets/images/emoji/flag_cv.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cw.png b/app/assets/images/emoji/flag_cw.png Binary files differdeleted file mode 100644 index eb39e8d0078..00000000000 --- a/app/assets/images/emoji/flag_cw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cx.png b/app/assets/images/emoji/flag_cx.png Binary files differdeleted file mode 100644 index 09d21359f3a..00000000000 --- a/app/assets/images/emoji/flag_cx.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cy.png b/app/assets/images/emoji/flag_cy.png Binary files differdeleted file mode 100644 index 154a7aa3176..00000000000 --- a/app/assets/images/emoji/flag_cy.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_cz.png b/app/assets/images/emoji/flag_cz.png Binary files differdeleted file mode 100644 index 9737ca223c7..00000000000 --- a/app/assets/images/emoji/flag_cz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_de.png b/app/assets/images/emoji/flag_de.png Binary files differdeleted file mode 100644 index 98ed76b3bab..00000000000 --- a/app/assets/images/emoji/flag_de.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_dg.png b/app/assets/images/emoji/flag_dg.png Binary files differdeleted file mode 100644 index aae927d14b8..00000000000 --- a/app/assets/images/emoji/flag_dg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_dj.png b/app/assets/images/emoji/flag_dj.png Binary files differdeleted file mode 100644 index 73c2a2acbd9..00000000000 --- a/app/assets/images/emoji/flag_dj.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_dk.png b/app/assets/images/emoji/flag_dk.png Binary files differdeleted file mode 100644 index e5a60b06256..00000000000 --- a/app/assets/images/emoji/flag_dk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_dm.png b/app/assets/images/emoji/flag_dm.png Binary files differdeleted file mode 100644 index 50f8a53981d..00000000000 --- a/app/assets/images/emoji/flag_dm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_do.png b/app/assets/images/emoji/flag_do.png Binary files differdeleted file mode 100644 index 037a45d7c26..00000000000 --- a/app/assets/images/emoji/flag_do.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_dz.png b/app/assets/images/emoji/flag_dz.png Binary files differdeleted file mode 100644 index 24945b10f2d..00000000000 --- a/app/assets/images/emoji/flag_dz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ea.png b/app/assets/images/emoji/flag_ea.png Binary files differdeleted file mode 100644 index 356ff347838..00000000000 --- a/app/assets/images/emoji/flag_ea.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ec.png b/app/assets/images/emoji/flag_ec.png Binary files differdeleted file mode 100644 index 13814594619..00000000000 --- a/app/assets/images/emoji/flag_ec.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ee.png b/app/assets/images/emoji/flag_ee.png Binary files differdeleted file mode 100644 index 84f317e7747..00000000000 --- a/app/assets/images/emoji/flag_ee.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_eg.png b/app/assets/images/emoji/flag_eg.png Binary files differdeleted file mode 100644 index 57786064a95..00000000000 --- a/app/assets/images/emoji/flag_eg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_eh.png b/app/assets/images/emoji/flag_eh.png Binary files differdeleted file mode 100644 index 4d7a76687f6..00000000000 --- a/app/assets/images/emoji/flag_eh.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_er.png b/app/assets/images/emoji/flag_er.png Binary files differdeleted file mode 100644 index 0c3c724c1fb..00000000000 --- a/app/assets/images/emoji/flag_er.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_es.png b/app/assets/images/emoji/flag_es.png Binary files differdeleted file mode 100644 index 3e73597a225..00000000000 --- a/app/assets/images/emoji/flag_es.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_et.png b/app/assets/images/emoji/flag_et.png Binary files differdeleted file mode 100644 index 9560a134c97..00000000000 --- a/app/assets/images/emoji/flag_et.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_eu.png b/app/assets/images/emoji/flag_eu.png Binary files differdeleted file mode 100644 index 0b456cf3330..00000000000 --- a/app/assets/images/emoji/flag_eu.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_fi.png b/app/assets/images/emoji/flag_fi.png Binary files differdeleted file mode 100644 index ebcf58abfc5..00000000000 --- a/app/assets/images/emoji/flag_fi.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_fj.png b/app/assets/images/emoji/flag_fj.png Binary files differdeleted file mode 100644 index 9cc8c37fe37..00000000000 --- a/app/assets/images/emoji/flag_fj.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_fk.png b/app/assets/images/emoji/flag_fk.png Binary files differdeleted file mode 100644 index 61372fd2549..00000000000 --- a/app/assets/images/emoji/flag_fk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_fm.png b/app/assets/images/emoji/flag_fm.png Binary files differdeleted file mode 100644 index 0889825c8e1..00000000000 --- a/app/assets/images/emoji/flag_fm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_fo.png b/app/assets/images/emoji/flag_fo.png Binary files differdeleted file mode 100644 index 9a4431b0831..00000000000 --- a/app/assets/images/emoji/flag_fo.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_fr.png b/app/assets/images/emoji/flag_fr.png Binary files differdeleted file mode 100644 index 62ca19c3fcf..00000000000 --- a/app/assets/images/emoji/flag_fr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ga.png b/app/assets/images/emoji/flag_ga.png Binary files differdeleted file mode 100644 index 2e68e527a3e..00000000000 --- a/app/assets/images/emoji/flag_ga.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gb.png b/app/assets/images/emoji/flag_gb.png Binary files differdeleted file mode 100644 index 3ed10f62347..00000000000 --- a/app/assets/images/emoji/flag_gb.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gd.png b/app/assets/images/emoji/flag_gd.png Binary files differdeleted file mode 100644 index 527aad33807..00000000000 --- a/app/assets/images/emoji/flag_gd.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ge.png b/app/assets/images/emoji/flag_ge.png Binary files differdeleted file mode 100644 index a75d142480d..00000000000 --- a/app/assets/images/emoji/flag_ge.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gf.png b/app/assets/images/emoji/flag_gf.png Binary files differdeleted file mode 100644 index 0cf96f327c0..00000000000 --- a/app/assets/images/emoji/flag_gf.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gg.png b/app/assets/images/emoji/flag_gg.png Binary files differdeleted file mode 100644 index 970002c7f76..00000000000 --- a/app/assets/images/emoji/flag_gg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gh.png b/app/assets/images/emoji/flag_gh.png Binary files differdeleted file mode 100644 index f31b5eb7b45..00000000000 --- a/app/assets/images/emoji/flag_gh.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gi.png b/app/assets/images/emoji/flag_gi.png Binary files differdeleted file mode 100644 index e554a2a1d0c..00000000000 --- a/app/assets/images/emoji/flag_gi.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gl.png b/app/assets/images/emoji/flag_gl.png Binary files differdeleted file mode 100644 index 2e795dd4e33..00000000000 --- a/app/assets/images/emoji/flag_gl.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gm.png b/app/assets/images/emoji/flag_gm.png Binary files differdeleted file mode 100644 index bb69c0975a3..00000000000 --- a/app/assets/images/emoji/flag_gm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gn.png b/app/assets/images/emoji/flag_gn.png Binary files differdeleted file mode 100644 index 1981f61dbf5..00000000000 --- a/app/assets/images/emoji/flag_gn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gp.png b/app/assets/images/emoji/flag_gp.png Binary files differdeleted file mode 100644 index 10e42e672bd..00000000000 --- a/app/assets/images/emoji/flag_gp.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gq.png b/app/assets/images/emoji/flag_gq.png Binary files differdeleted file mode 100644 index 11475e61eeb..00000000000 --- a/app/assets/images/emoji/flag_gq.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gr.png b/app/assets/images/emoji/flag_gr.png Binary files differdeleted file mode 100644 index 0f6bb1b6b94..00000000000 --- a/app/assets/images/emoji/flag_gr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gs.png b/app/assets/images/emoji/flag_gs.png Binary files differdeleted file mode 100644 index 6fc92780453..00000000000 --- a/app/assets/images/emoji/flag_gs.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gt.png b/app/assets/images/emoji/flag_gt.png Binary files differdeleted file mode 100644 index 7213d4139ed..00000000000 --- a/app/assets/images/emoji/flag_gt.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gu.png b/app/assets/images/emoji/flag_gu.png Binary files differdeleted file mode 100644 index 4027549ca3c..00000000000 --- a/app/assets/images/emoji/flag_gu.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gw.png b/app/assets/images/emoji/flag_gw.png Binary files differdeleted file mode 100644 index 6357f6225f4..00000000000 --- a/app/assets/images/emoji/flag_gw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_gy.png b/app/assets/images/emoji/flag_gy.png Binary files differdeleted file mode 100644 index 746e2fb7e44..00000000000 --- a/app/assets/images/emoji/flag_gy.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_hk.png b/app/assets/images/emoji/flag_hk.png Binary files differdeleted file mode 100644 index cf0c7151b56..00000000000 --- a/app/assets/images/emoji/flag_hk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_hm.png b/app/assets/images/emoji/flag_hm.png Binary files differdeleted file mode 100644 index b613509e466..00000000000 --- a/app/assets/images/emoji/flag_hm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_hn.png b/app/assets/images/emoji/flag_hn.png Binary files differdeleted file mode 100644 index 402cdcefdf8..00000000000 --- a/app/assets/images/emoji/flag_hn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_hr.png b/app/assets/images/emoji/flag_hr.png Binary files differdeleted file mode 100644 index 46f4f06b4f2..00000000000 --- a/app/assets/images/emoji/flag_hr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ht.png b/app/assets/images/emoji/flag_ht.png Binary files differdeleted file mode 100644 index d8d0c888498..00000000000 --- a/app/assets/images/emoji/flag_ht.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_hu.png b/app/assets/images/emoji/flag_hu.png Binary files differdeleted file mode 100644 index a898de636a5..00000000000 --- a/app/assets/images/emoji/flag_hu.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ic.png b/app/assets/images/emoji/flag_ic.png Binary files differdeleted file mode 100644 index 69fd990aa95..00000000000 --- a/app/assets/images/emoji/flag_ic.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_id.png b/app/assets/images/emoji/flag_id.png Binary files differdeleted file mode 100644 index 85b4c063a45..00000000000 --- a/app/assets/images/emoji/flag_id.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ie.png b/app/assets/images/emoji/flag_ie.png Binary files differdeleted file mode 100644 index a28295838cc..00000000000 --- a/app/assets/images/emoji/flag_ie.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_il.png b/app/assets/images/emoji/flag_il.png Binary files differdeleted file mode 100644 index 85c410d45fb..00000000000 --- a/app/assets/images/emoji/flag_il.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_im.png b/app/assets/images/emoji/flag_im.png Binary files differdeleted file mode 100644 index 60a2458e38e..00000000000 --- a/app/assets/images/emoji/flag_im.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_in.png b/app/assets/images/emoji/flag_in.png Binary files differdeleted file mode 100644 index feccc8952ce..00000000000 --- a/app/assets/images/emoji/flag_in.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_io.png b/app/assets/images/emoji/flag_io.png Binary files differdeleted file mode 100644 index aae927d14b8..00000000000 --- a/app/assets/images/emoji/flag_io.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_iq.png b/app/assets/images/emoji/flag_iq.png Binary files differdeleted file mode 100644 index 41fd1db6f86..00000000000 --- a/app/assets/images/emoji/flag_iq.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ir.png b/app/assets/images/emoji/flag_ir.png Binary files differdeleted file mode 100644 index ff7aaf62ba6..00000000000 --- a/app/assets/images/emoji/flag_ir.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_is.png b/app/assets/images/emoji/flag_is.png Binary files differdeleted file mode 100644 index ad8d4131dd2..00000000000 --- a/app/assets/images/emoji/flag_is.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_it.png b/app/assets/images/emoji/flag_it.png Binary files differdeleted file mode 100644 index f21563ec533..00000000000 --- a/app/assets/images/emoji/flag_it.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_je.png b/app/assets/images/emoji/flag_je.png Binary files differdeleted file mode 100644 index 198a918f6a4..00000000000 --- a/app/assets/images/emoji/flag_je.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_jm.png b/app/assets/images/emoji/flag_jm.png Binary files differdeleted file mode 100644 index f84e4f9e8db..00000000000 --- a/app/assets/images/emoji/flag_jm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_jo.png b/app/assets/images/emoji/flag_jo.png Binary files differdeleted file mode 100644 index 20bfa147e3e..00000000000 --- a/app/assets/images/emoji/flag_jo.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_jp.png b/app/assets/images/emoji/flag_jp.png Binary files differdeleted file mode 100644 index 8d8838e4708..00000000000 --- a/app/assets/images/emoji/flag_jp.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ke.png b/app/assets/images/emoji/flag_ke.png Binary files differdeleted file mode 100644 index 9e417ab3009..00000000000 --- a/app/assets/images/emoji/flag_ke.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_kg.png b/app/assets/images/emoji/flag_kg.png Binary files differdeleted file mode 100644 index 2f2d848fe58..00000000000 --- a/app/assets/images/emoji/flag_kg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_kh.png b/app/assets/images/emoji/flag_kh.png Binary files differdeleted file mode 100644 index 9a2877dd620..00000000000 --- a/app/assets/images/emoji/flag_kh.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ki.png b/app/assets/images/emoji/flag_ki.png Binary files differdeleted file mode 100644 index 10e507e3245..00000000000 --- a/app/assets/images/emoji/flag_ki.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_km.png b/app/assets/images/emoji/flag_km.png Binary files differdeleted file mode 100644 index bd5a0588e03..00000000000 --- a/app/assets/images/emoji/flag_km.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_kn.png b/app/assets/images/emoji/flag_kn.png Binary files differdeleted file mode 100644 index 776207c9605..00000000000 --- a/app/assets/images/emoji/flag_kn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_kp.png b/app/assets/images/emoji/flag_kp.png Binary files differdeleted file mode 100644 index 6b3fd89eaaa..00000000000 --- a/app/assets/images/emoji/flag_kp.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_kr.png b/app/assets/images/emoji/flag_kr.png Binary files differdeleted file mode 100644 index 833a88116e1..00000000000 --- a/app/assets/images/emoji/flag_kr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_kw.png b/app/assets/images/emoji/flag_kw.png Binary files differdeleted file mode 100644 index 4d19bfa6ca7..00000000000 --- a/app/assets/images/emoji/flag_kw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ky.png b/app/assets/images/emoji/flag_ky.png Binary files differdeleted file mode 100644 index 40daa4da597..00000000000 --- a/app/assets/images/emoji/flag_ky.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_kz.png b/app/assets/images/emoji/flag_kz.png Binary files differdeleted file mode 100644 index 2f97a8fd3c6..00000000000 --- a/app/assets/images/emoji/flag_kz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_la.png b/app/assets/images/emoji/flag_la.png Binary files differdeleted file mode 100644 index 4d4179f34f6..00000000000 --- a/app/assets/images/emoji/flag_la.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_lb.png b/app/assets/images/emoji/flag_lb.png Binary files differdeleted file mode 100644 index 3d594467011..00000000000 --- a/app/assets/images/emoji/flag_lb.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_lc.png b/app/assets/images/emoji/flag_lc.png Binary files differdeleted file mode 100644 index 45547b1e439..00000000000 --- a/app/assets/images/emoji/flag_lc.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_li.png b/app/assets/images/emoji/flag_li.png Binary files differdeleted file mode 100644 index 0eafa6a2215..00000000000 --- a/app/assets/images/emoji/flag_li.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_lk.png b/app/assets/images/emoji/flag_lk.png Binary files differdeleted file mode 100644 index ab4fe10c40c..00000000000 --- a/app/assets/images/emoji/flag_lk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_lr.png b/app/assets/images/emoji/flag_lr.png Binary files differdeleted file mode 100644 index f66f267fea2..00000000000 --- a/app/assets/images/emoji/flag_lr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ls.png b/app/assets/images/emoji/flag_ls.png Binary files differdeleted file mode 100644 index 24745631e3c..00000000000 --- a/app/assets/images/emoji/flag_ls.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_lt.png b/app/assets/images/emoji/flag_lt.png Binary files differdeleted file mode 100644 index d644b56d62a..00000000000 --- a/app/assets/images/emoji/flag_lt.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_lu.png b/app/assets/images/emoji/flag_lu.png Binary files differdeleted file mode 100644 index a2df9c92994..00000000000 --- a/app/assets/images/emoji/flag_lu.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_lv.png b/app/assets/images/emoji/flag_lv.png Binary files differdeleted file mode 100644 index ae680d5f0e3..00000000000 --- a/app/assets/images/emoji/flag_lv.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ly.png b/app/assets/images/emoji/flag_ly.png Binary files differdeleted file mode 100644 index f6e77b0f3ba..00000000000 --- a/app/assets/images/emoji/flag_ly.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ma.png b/app/assets/images/emoji/flag_ma.png Binary files differdeleted file mode 100644 index c4a056722cd..00000000000 --- a/app/assets/images/emoji/flag_ma.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mc.png b/app/assets/images/emoji/flag_mc.png Binary files differdeleted file mode 100644 index d479eab98cb..00000000000 --- a/app/assets/images/emoji/flag_mc.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_md.png b/app/assets/images/emoji/flag_md.png Binary files differdeleted file mode 100644 index a7a72539872..00000000000 --- a/app/assets/images/emoji/flag_md.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_me.png b/app/assets/images/emoji/flag_me.png Binary files differdeleted file mode 100644 index 7c771e7e120..00000000000 --- a/app/assets/images/emoji/flag_me.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mf.png b/app/assets/images/emoji/flag_mf.png Binary files differdeleted file mode 100644 index 70c761036bd..00000000000 --- a/app/assets/images/emoji/flag_mf.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mg.png b/app/assets/images/emoji/flag_mg.png Binary files differdeleted file mode 100644 index 2f3ccdda76f..00000000000 --- a/app/assets/images/emoji/flag_mg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mh.png b/app/assets/images/emoji/flag_mh.png Binary files differdeleted file mode 100644 index 598016481c1..00000000000 --- a/app/assets/images/emoji/flag_mh.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mk.png b/app/assets/images/emoji/flag_mk.png Binary files differdeleted file mode 100644 index 7ba775ee75c..00000000000 --- a/app/assets/images/emoji/flag_mk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ml.png b/app/assets/images/emoji/flag_ml.png Binary files differdeleted file mode 100644 index 68343785468..00000000000 --- a/app/assets/images/emoji/flag_ml.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mm.png b/app/assets/images/emoji/flag_mm.png Binary files differdeleted file mode 100644 index 37dc7d71591..00000000000 --- a/app/assets/images/emoji/flag_mm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mn.png b/app/assets/images/emoji/flag_mn.png Binary files differdeleted file mode 100644 index 1f146bbcd1a..00000000000 --- a/app/assets/images/emoji/flag_mn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mo.png b/app/assets/images/emoji/flag_mo.png Binary files differdeleted file mode 100644 index 7edde31f64b..00000000000 --- a/app/assets/images/emoji/flag_mo.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mp.png b/app/assets/images/emoji/flag_mp.png Binary files differdeleted file mode 100644 index 17ec1c441ed..00000000000 --- a/app/assets/images/emoji/flag_mp.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mq.png b/app/assets/images/emoji/flag_mq.png Binary files differdeleted file mode 100644 index 1e672dc9087..00000000000 --- a/app/assets/images/emoji/flag_mq.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mr.png b/app/assets/images/emoji/flag_mr.png Binary files differdeleted file mode 100644 index f87de46effe..00000000000 --- a/app/assets/images/emoji/flag_mr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ms.png b/app/assets/images/emoji/flag_ms.png Binary files differdeleted file mode 100644 index 480b0d4ebda..00000000000 --- a/app/assets/images/emoji/flag_ms.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mt.png b/app/assets/images/emoji/flag_mt.png Binary files differdeleted file mode 100644 index c9e1dbdce82..00000000000 --- a/app/assets/images/emoji/flag_mt.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mu.png b/app/assets/images/emoji/flag_mu.png Binary files differdeleted file mode 100644 index 55b33cb7c33..00000000000 --- a/app/assets/images/emoji/flag_mu.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mv.png b/app/assets/images/emoji/flag_mv.png Binary files differdeleted file mode 100644 index ce5867126ae..00000000000 --- a/app/assets/images/emoji/flag_mv.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mw.png b/app/assets/images/emoji/flag_mw.png Binary files differdeleted file mode 100644 index 003d8548401..00000000000 --- a/app/assets/images/emoji/flag_mw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mx.png b/app/assets/images/emoji/flag_mx.png Binary files differdeleted file mode 100644 index 42572bcd0ba..00000000000 --- a/app/assets/images/emoji/flag_mx.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_my.png b/app/assets/images/emoji/flag_my.png Binary files differdeleted file mode 100644 index 17526c26742..00000000000 --- a/app/assets/images/emoji/flag_my.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_mz.png b/app/assets/images/emoji/flag_mz.png Binary files differdeleted file mode 100644 index 2352a78e786..00000000000 --- a/app/assets/images/emoji/flag_mz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_na.png b/app/assets/images/emoji/flag_na.png Binary files differdeleted file mode 100644 index ed31c3df04d..00000000000 --- a/app/assets/images/emoji/flag_na.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_nc.png b/app/assets/images/emoji/flag_nc.png Binary files differdeleted file mode 100644 index 90b3afebfa3..00000000000 --- a/app/assets/images/emoji/flag_nc.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ne.png b/app/assets/images/emoji/flag_ne.png Binary files differdeleted file mode 100644 index f98a1173c2a..00000000000 --- a/app/assets/images/emoji/flag_ne.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_nf.png b/app/assets/images/emoji/flag_nf.png Binary files differdeleted file mode 100644 index 9099e767420..00000000000 --- a/app/assets/images/emoji/flag_nf.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ng.png b/app/assets/images/emoji/flag_ng.png Binary files differdeleted file mode 100644 index ea0abeff1a1..00000000000 --- a/app/assets/images/emoji/flag_ng.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ni.png b/app/assets/images/emoji/flag_ni.png Binary files differdeleted file mode 100644 index 772920dfa10..00000000000 --- a/app/assets/images/emoji/flag_ni.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_nl.png b/app/assets/images/emoji/flag_nl.png Binary files differdeleted file mode 100644 index 83a0e817e41..00000000000 --- a/app/assets/images/emoji/flag_nl.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_no.png b/app/assets/images/emoji/flag_no.png Binary files differdeleted file mode 100644 index 99d3142eb7b..00000000000 --- a/app/assets/images/emoji/flag_no.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_np.png b/app/assets/images/emoji/flag_np.png Binary files differdeleted file mode 100644 index 87425a8dfef..00000000000 --- a/app/assets/images/emoji/flag_np.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_nr.png b/app/assets/images/emoji/flag_nr.png Binary files differdeleted file mode 100644 index b3e3a5d5621..00000000000 --- a/app/assets/images/emoji/flag_nr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_nu.png b/app/assets/images/emoji/flag_nu.png Binary files differdeleted file mode 100644 index f03614443ee..00000000000 --- a/app/assets/images/emoji/flag_nu.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_nz.png b/app/assets/images/emoji/flag_nz.png Binary files differdeleted file mode 100644 index a4eeeab9cd9..00000000000 --- a/app/assets/images/emoji/flag_nz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_om.png b/app/assets/images/emoji/flag_om.png Binary files differdeleted file mode 100644 index ea824ba31e7..00000000000 --- a/app/assets/images/emoji/flag_om.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pa.png b/app/assets/images/emoji/flag_pa.png Binary files differdeleted file mode 100644 index c3091d89889..00000000000 --- a/app/assets/images/emoji/flag_pa.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pe.png b/app/assets/images/emoji/flag_pe.png Binary files differdeleted file mode 100644 index 39223aa9dbb..00000000000 --- a/app/assets/images/emoji/flag_pe.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pf.png b/app/assets/images/emoji/flag_pf.png Binary files differdeleted file mode 100644 index 113445f8f6e..00000000000 --- a/app/assets/images/emoji/flag_pf.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pg.png b/app/assets/images/emoji/flag_pg.png Binary files differdeleted file mode 100644 index 825e9dcb762..00000000000 --- a/app/assets/images/emoji/flag_pg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ph.png b/app/assets/images/emoji/flag_ph.png Binary files differdeleted file mode 100644 index 8260e15bd2c..00000000000 --- a/app/assets/images/emoji/flag_ph.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pk.png b/app/assets/images/emoji/flag_pk.png Binary files differdeleted file mode 100644 index a7b6a1c5074..00000000000 --- a/app/assets/images/emoji/flag_pk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pl.png b/app/assets/images/emoji/flag_pl.png Binary files differdeleted file mode 100644 index 19de2edec11..00000000000 --- a/app/assets/images/emoji/flag_pl.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pm.png b/app/assets/images/emoji/flag_pm.png Binary files differdeleted file mode 100644 index 2ca60554193..00000000000 --- a/app/assets/images/emoji/flag_pm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pn.png b/app/assets/images/emoji/flag_pn.png Binary files differdeleted file mode 100644 index f2263b154bc..00000000000 --- a/app/assets/images/emoji/flag_pn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pr.png b/app/assets/images/emoji/flag_pr.png Binary files differdeleted file mode 100644 index d0209cddb79..00000000000 --- a/app/assets/images/emoji/flag_pr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ps.png b/app/assets/images/emoji/flag_ps.png Binary files differdeleted file mode 100644 index 7ccab09778b..00000000000 --- a/app/assets/images/emoji/flag_ps.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pt.png b/app/assets/images/emoji/flag_pt.png Binary files differdeleted file mode 100644 index cc93f27c64b..00000000000 --- a/app/assets/images/emoji/flag_pt.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_pw.png b/app/assets/images/emoji/flag_pw.png Binary files differdeleted file mode 100644 index 154b2f12d3c..00000000000 --- a/app/assets/images/emoji/flag_pw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_py.png b/app/assets/images/emoji/flag_py.png Binary files differdeleted file mode 100644 index 662ad2f6ff1..00000000000 --- a/app/assets/images/emoji/flag_py.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_qa.png b/app/assets/images/emoji/flag_qa.png Binary files differdeleted file mode 100644 index a01d8b05cc7..00000000000 --- a/app/assets/images/emoji/flag_qa.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_re.png b/app/assets/images/emoji/flag_re.png Binary files differdeleted file mode 100644 index 57f2bbe9df8..00000000000 --- a/app/assets/images/emoji/flag_re.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ro.png b/app/assets/images/emoji/flag_ro.png Binary files differdeleted file mode 100644 index 3e48c447706..00000000000 --- a/app/assets/images/emoji/flag_ro.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_rs.png b/app/assets/images/emoji/flag_rs.png Binary files differdeleted file mode 100644 index 9df6c9a5235..00000000000 --- a/app/assets/images/emoji/flag_rs.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ru.png b/app/assets/images/emoji/flag_ru.png Binary files differdeleted file mode 100644 index e50c9db90e7..00000000000 --- a/app/assets/images/emoji/flag_ru.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_rw.png b/app/assets/images/emoji/flag_rw.png Binary files differdeleted file mode 100644 index c238c874e1d..00000000000 --- a/app/assets/images/emoji/flag_rw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sa.png b/app/assets/images/emoji/flag_sa.png Binary files differdeleted file mode 100644 index 4941be7d198..00000000000 --- a/app/assets/images/emoji/flag_sa.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sb.png b/app/assets/images/emoji/flag_sb.png Binary files differdeleted file mode 100644 index 7d8f1ac6130..00000000000 --- a/app/assets/images/emoji/flag_sb.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sc.png b/app/assets/images/emoji/flag_sc.png Binary files differdeleted file mode 100644 index 6ae4d90765e..00000000000 --- a/app/assets/images/emoji/flag_sc.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sd.png b/app/assets/images/emoji/flag_sd.png Binary files differdeleted file mode 100644 index 963be1b36fb..00000000000 --- a/app/assets/images/emoji/flag_sd.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_se.png b/app/assets/images/emoji/flag_se.png Binary files differdeleted file mode 100644 index fc0d0e0ce89..00000000000 --- a/app/assets/images/emoji/flag_se.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sg.png b/app/assets/images/emoji/flag_sg.png Binary files differdeleted file mode 100644 index de3c7737c42..00000000000 --- a/app/assets/images/emoji/flag_sg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sh.png b/app/assets/images/emoji/flag_sh.png Binary files differdeleted file mode 100644 index 40cd9e44e96..00000000000 --- a/app/assets/images/emoji/flag_sh.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_si.png b/app/assets/images/emoji/flag_si.png Binary files differdeleted file mode 100644 index e308999dba2..00000000000 --- a/app/assets/images/emoji/flag_si.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sj.png b/app/assets/images/emoji/flag_sj.png Binary files differdeleted file mode 100644 index 5884e648228..00000000000 --- a/app/assets/images/emoji/flag_sj.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sk.png b/app/assets/images/emoji/flag_sk.png Binary files differdeleted file mode 100644 index 4259d0e1418..00000000000 --- a/app/assets/images/emoji/flag_sk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sl.png b/app/assets/images/emoji/flag_sl.png Binary files differdeleted file mode 100644 index d2cc68830ab..00000000000 --- a/app/assets/images/emoji/flag_sl.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sm.png b/app/assets/images/emoji/flag_sm.png Binary files differdeleted file mode 100644 index 03b8708754e..00000000000 --- a/app/assets/images/emoji/flag_sm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sn.png b/app/assets/images/emoji/flag_sn.png Binary files differdeleted file mode 100644 index 5368bbe93df..00000000000 --- a/app/assets/images/emoji/flag_sn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_so.png b/app/assets/images/emoji/flag_so.png Binary files differdeleted file mode 100644 index 68a0597365a..00000000000 --- a/app/assets/images/emoji/flag_so.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sr.png b/app/assets/images/emoji/flag_sr.png Binary files differdeleted file mode 100644 index d3251327035..00000000000 --- a/app/assets/images/emoji/flag_sr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ss.png b/app/assets/images/emoji/flag_ss.png Binary files differdeleted file mode 100644 index 122977e798f..00000000000 --- a/app/assets/images/emoji/flag_ss.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_st.png b/app/assets/images/emoji/flag_st.png Binary files differdeleted file mode 100644 index f83a863d612..00000000000 --- a/app/assets/images/emoji/flag_st.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sv.png b/app/assets/images/emoji/flag_sv.png Binary files differdeleted file mode 100644 index efb83e2f253..00000000000 --- a/app/assets/images/emoji/flag_sv.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sx.png b/app/assets/images/emoji/flag_sx.png Binary files differdeleted file mode 100644 index 94b760fbedf..00000000000 --- a/app/assets/images/emoji/flag_sx.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sy.png b/app/assets/images/emoji/flag_sy.png Binary files differdeleted file mode 100644 index 09a8ee8f78c..00000000000 --- a/app/assets/images/emoji/flag_sy.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_sz.png b/app/assets/images/emoji/flag_sz.png Binary files differdeleted file mode 100644 index f74e82ea1fd..00000000000 --- a/app/assets/images/emoji/flag_sz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ta.png b/app/assets/images/emoji/flag_ta.png Binary files differdeleted file mode 100644 index b44283e90e2..00000000000 --- a/app/assets/images/emoji/flag_ta.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tc.png b/app/assets/images/emoji/flag_tc.png Binary files differdeleted file mode 100644 index 156b33d1ba6..00000000000 --- a/app/assets/images/emoji/flag_tc.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_td.png b/app/assets/images/emoji/flag_td.png Binary files differdeleted file mode 100644 index ebe7f592828..00000000000 --- a/app/assets/images/emoji/flag_td.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tf.png b/app/assets/images/emoji/flag_tf.png Binary files differdeleted file mode 100644 index a1a3ad68ee2..00000000000 --- a/app/assets/images/emoji/flag_tf.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tg.png b/app/assets/images/emoji/flag_tg.png Binary files differdeleted file mode 100644 index 826b73c9ac5..00000000000 --- a/app/assets/images/emoji/flag_tg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_th.png b/app/assets/images/emoji/flag_th.png Binary files differdeleted file mode 100644 index 93ff542c5a6..00000000000 --- a/app/assets/images/emoji/flag_th.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tj.png b/app/assets/images/emoji/flag_tj.png Binary files differdeleted file mode 100644 index 7a8a0b6190a..00000000000 --- a/app/assets/images/emoji/flag_tj.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tk.png b/app/assets/images/emoji/flag_tk.png Binary files differdeleted file mode 100644 index 2fa5a21b1bb..00000000000 --- a/app/assets/images/emoji/flag_tk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tl.png b/app/assets/images/emoji/flag_tl.png Binary files differdeleted file mode 100644 index 5b120eccc6f..00000000000 --- a/app/assets/images/emoji/flag_tl.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tm.png b/app/assets/images/emoji/flag_tm.png Binary files differdeleted file mode 100644 index c3c4f532302..00000000000 --- a/app/assets/images/emoji/flag_tm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tn.png b/app/assets/images/emoji/flag_tn.png Binary files differdeleted file mode 100644 index 58ef161229f..00000000000 --- a/app/assets/images/emoji/flag_tn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_to.png b/app/assets/images/emoji/flag_to.png Binary files differdeleted file mode 100644 index 1ffa7bb9d19..00000000000 --- a/app/assets/images/emoji/flag_to.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tr.png b/app/assets/images/emoji/flag_tr.png Binary files differdeleted file mode 100644 index 325251fae88..00000000000 --- a/app/assets/images/emoji/flag_tr.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tt.png b/app/assets/images/emoji/flag_tt.png Binary files differdeleted file mode 100644 index ed3bb39a300..00000000000 --- a/app/assets/images/emoji/flag_tt.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tv.png b/app/assets/images/emoji/flag_tv.png Binary files differdeleted file mode 100644 index e82c65c7bb9..00000000000 --- a/app/assets/images/emoji/flag_tv.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tw.png b/app/assets/images/emoji/flag_tw.png Binary files differdeleted file mode 100644 index 3a8f00b5928..00000000000 --- a/app/assets/images/emoji/flag_tw.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_tz.png b/app/assets/images/emoji/flag_tz.png Binary files differdeleted file mode 100644 index 2a020853d4e..00000000000 --- a/app/assets/images/emoji/flag_tz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ua.png b/app/assets/images/emoji/flag_ua.png Binary files differdeleted file mode 100644 index cd84d1bbd36..00000000000 --- a/app/assets/images/emoji/flag_ua.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ug.png b/app/assets/images/emoji/flag_ug.png Binary files differdeleted file mode 100644 index dc97690eb55..00000000000 --- a/app/assets/images/emoji/flag_ug.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_um.png b/app/assets/images/emoji/flag_um.png Binary files differdeleted file mode 100644 index 4a7ee3cdf13..00000000000 --- a/app/assets/images/emoji/flag_um.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_us.png b/app/assets/images/emoji/flag_us.png Binary files differdeleted file mode 100644 index 9f730305860..00000000000 --- a/app/assets/images/emoji/flag_us.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_uy.png b/app/assets/images/emoji/flag_uy.png Binary files differdeleted file mode 100644 index b8002a697a6..00000000000 --- a/app/assets/images/emoji/flag_uy.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_uz.png b/app/assets/images/emoji/flag_uz.png Binary files differdeleted file mode 100644 index d56ca9bc424..00000000000 --- a/app/assets/images/emoji/flag_uz.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_va.png b/app/assets/images/emoji/flag_va.png Binary files differdeleted file mode 100644 index ddaf5e3141b..00000000000 --- a/app/assets/images/emoji/flag_va.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_vc.png b/app/assets/images/emoji/flag_vc.png Binary files differdeleted file mode 100644 index 43703c62a71..00000000000 --- a/app/assets/images/emoji/flag_vc.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ve.png b/app/assets/images/emoji/flag_ve.png Binary files differdeleted file mode 100644 index 1b62796824e..00000000000 --- a/app/assets/images/emoji/flag_ve.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_vg.png b/app/assets/images/emoji/flag_vg.png Binary files differdeleted file mode 100644 index 536f780f1c0..00000000000 --- a/app/assets/images/emoji/flag_vg.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_vi.png b/app/assets/images/emoji/flag_vi.png Binary files differdeleted file mode 100644 index 64102012cfe..00000000000 --- a/app/assets/images/emoji/flag_vi.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_vn.png b/app/assets/images/emoji/flag_vn.png Binary files differdeleted file mode 100644 index 427036046b6..00000000000 --- a/app/assets/images/emoji/flag_vn.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_vu.png b/app/assets/images/emoji/flag_vu.png Binary files differdeleted file mode 100644 index 706eba44070..00000000000 --- a/app/assets/images/emoji/flag_vu.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_wf.png b/app/assets/images/emoji/flag_wf.png Binary files differdeleted file mode 100644 index 70c761036bd..00000000000 --- a/app/assets/images/emoji/flag_wf.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_white.png b/app/assets/images/emoji/flag_white.png Binary files differdeleted file mode 100644 index 86d6e96d5e9..00000000000 --- a/app/assets/images/emoji/flag_white.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ws.png b/app/assets/images/emoji/flag_ws.png Binary files differdeleted file mode 100644 index a1ea0703141..00000000000 --- a/app/assets/images/emoji/flag_ws.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_xk.png b/app/assets/images/emoji/flag_xk.png Binary files differdeleted file mode 100644 index e587a446632..00000000000 --- a/app/assets/images/emoji/flag_xk.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_ye.png b/app/assets/images/emoji/flag_ye.png Binary files differdeleted file mode 100644 index eadfebd5f67..00000000000 --- a/app/assets/images/emoji/flag_ye.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_yt.png b/app/assets/images/emoji/flag_yt.png Binary files differdeleted file mode 100644 index c81fa6d886e..00000000000 --- a/app/assets/images/emoji/flag_yt.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_za.png b/app/assets/images/emoji/flag_za.png Binary files differdeleted file mode 100644 index f397ef5072f..00000000000 --- a/app/assets/images/emoji/flag_za.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_zm.png b/app/assets/images/emoji/flag_zm.png Binary files differdeleted file mode 100644 index 2494a31f662..00000000000 --- a/app/assets/images/emoji/flag_zm.png +++ /dev/null diff --git a/app/assets/images/emoji/flag_zw.png b/app/assets/images/emoji/flag_zw.png Binary files differdeleted file mode 100644 index e09b9652be6..00000000000 --- a/app/assets/images/emoji/flag_zw.png +++ /dev/null diff --git a/app/assets/images/emoji/flags.png b/app/assets/images/emoji/flags.png Binary files differdeleted file mode 100644 index 3b451035a3a..00000000000 --- a/app/assets/images/emoji/flags.png +++ /dev/null diff --git a/app/assets/images/emoji/flashlight.png b/app/assets/images/emoji/flashlight.png Binary files differdeleted file mode 100644 index eee36c25067..00000000000 --- a/app/assets/images/emoji/flashlight.png +++ /dev/null diff --git a/app/assets/images/emoji/fleur-de-lis.png b/app/assets/images/emoji/fleur-de-lis.png Binary files differdeleted file mode 100644 index c9250d27fa7..00000000000 --- a/app/assets/images/emoji/fleur-de-lis.png +++ /dev/null diff --git a/app/assets/images/emoji/floppy_disk.png b/app/assets/images/emoji/floppy_disk.png Binary files differdeleted file mode 100644 index 072a76d3c13..00000000000 --- a/app/assets/images/emoji/floppy_disk.png +++ /dev/null diff --git a/app/assets/images/emoji/flower_playing_cards.png b/app/assets/images/emoji/flower_playing_cards.png Binary files differdeleted file mode 100644 index 6766b044d95..00000000000 --- a/app/assets/images/emoji/flower_playing_cards.png +++ /dev/null diff --git a/app/assets/images/emoji/flushed.png b/app/assets/images/emoji/flushed.png Binary files differdeleted file mode 100644 index 829220bc470..00000000000 --- a/app/assets/images/emoji/flushed.png +++ /dev/null diff --git a/app/assets/images/emoji/fog.png b/app/assets/images/emoji/fog.png Binary files differdeleted file mode 100644 index 4e73c2de272..00000000000 --- a/app/assets/images/emoji/fog.png +++ /dev/null diff --git a/app/assets/images/emoji/foggy.png b/app/assets/images/emoji/foggy.png Binary files differdeleted file mode 100644 index 57702d8d3ac..00000000000 --- a/app/assets/images/emoji/foggy.png +++ /dev/null diff --git a/app/assets/images/emoji/football.png b/app/assets/images/emoji/football.png Binary files differdeleted file mode 100644 index 10366f41fce..00000000000 --- a/app/assets/images/emoji/football.png +++ /dev/null diff --git a/app/assets/images/emoji/footprints.png b/app/assets/images/emoji/footprints.png Binary files differdeleted file mode 100644 index b2673c5a1a8..00000000000 --- a/app/assets/images/emoji/footprints.png +++ /dev/null diff --git a/app/assets/images/emoji/fork_and_knife.png b/app/assets/images/emoji/fork_and_knife.png Binary files differdeleted file mode 100644 index 09f1feaea1c..00000000000 --- a/app/assets/images/emoji/fork_and_knife.png +++ /dev/null diff --git a/app/assets/images/emoji/fork_knife_plate.png b/app/assets/images/emoji/fork_knife_plate.png Binary files differdeleted file mode 100644 index 7411755f708..00000000000 --- a/app/assets/images/emoji/fork_knife_plate.png +++ /dev/null diff --git a/app/assets/images/emoji/fountain.png b/app/assets/images/emoji/fountain.png Binary files differdeleted file mode 100644 index 293f5d91c0f..00000000000 --- a/app/assets/images/emoji/fountain.png +++ /dev/null diff --git a/app/assets/images/emoji/four.png b/app/assets/images/emoji/four.png Binary files differdeleted file mode 100644 index b0e914aac45..00000000000 --- a/app/assets/images/emoji/four.png +++ /dev/null diff --git a/app/assets/images/emoji/four_leaf_clover.png b/app/assets/images/emoji/four_leaf_clover.png Binary files differdeleted file mode 100644 index fdedfcc2b4e..00000000000 --- a/app/assets/images/emoji/four_leaf_clover.png +++ /dev/null diff --git a/app/assets/images/emoji/fox.png b/app/assets/images/emoji/fox.png Binary files differdeleted file mode 100644 index 1ab339bf054..00000000000 --- a/app/assets/images/emoji/fox.png +++ /dev/null diff --git a/app/assets/images/emoji/frame_photo.png b/app/assets/images/emoji/frame_photo.png Binary files differdeleted file mode 100644 index 9fe84607bfd..00000000000 --- a/app/assets/images/emoji/frame_photo.png +++ /dev/null diff --git a/app/assets/images/emoji/free.png b/app/assets/images/emoji/free.png Binary files differdeleted file mode 100644 index b71956eb48a..00000000000 --- a/app/assets/images/emoji/free.png +++ /dev/null diff --git a/app/assets/images/emoji/french_bread.png b/app/assets/images/emoji/french_bread.png Binary files differdeleted file mode 100644 index 4c2c5639822..00000000000 --- a/app/assets/images/emoji/french_bread.png +++ /dev/null diff --git a/app/assets/images/emoji/fried_shrimp.png b/app/assets/images/emoji/fried_shrimp.png Binary files differdeleted file mode 100644 index 752ba7f1398..00000000000 --- a/app/assets/images/emoji/fried_shrimp.png +++ /dev/null diff --git a/app/assets/images/emoji/fries.png b/app/assets/images/emoji/fries.png Binary files differdeleted file mode 100644 index 4e2a4caacef..00000000000 --- a/app/assets/images/emoji/fries.png +++ /dev/null diff --git a/app/assets/images/emoji/frog.png b/app/assets/images/emoji/frog.png Binary files differdeleted file mode 100644 index 8825d1ad577..00000000000 --- a/app/assets/images/emoji/frog.png +++ /dev/null diff --git a/app/assets/images/emoji/frowning.png b/app/assets/images/emoji/frowning.png Binary files differdeleted file mode 100644 index 43ab6b0a1c1..00000000000 --- a/app/assets/images/emoji/frowning.png +++ /dev/null diff --git a/app/assets/images/emoji/frowning2.png b/app/assets/images/emoji/frowning2.png Binary files differdeleted file mode 100644 index 6ae71f233b9..00000000000 --- a/app/assets/images/emoji/frowning2.png +++ /dev/null diff --git a/app/assets/images/emoji/fuelpump.png b/app/assets/images/emoji/fuelpump.png Binary files differdeleted file mode 100644 index 05b18794474..00000000000 --- a/app/assets/images/emoji/fuelpump.png +++ /dev/null diff --git a/app/assets/images/emoji/full_moon.png b/app/assets/images/emoji/full_moon.png Binary files differdeleted file mode 100644 index c9a2d6aa7c9..00000000000 --- a/app/assets/images/emoji/full_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/full_moon_with_face.png b/app/assets/images/emoji/full_moon_with_face.png Binary files differdeleted file mode 100644 index a5c25bbaf64..00000000000 --- a/app/assets/images/emoji/full_moon_with_face.png +++ /dev/null diff --git a/app/assets/images/emoji/game_die.png b/app/assets/images/emoji/game_die.png Binary files differdeleted file mode 100644 index ad3626fe5e5..00000000000 --- a/app/assets/images/emoji/game_die.png +++ /dev/null diff --git a/app/assets/images/emoji/gay_pride_flag.png b/app/assets/images/emoji/gay_pride_flag.png Binary files differdeleted file mode 100644 index 1bec5f2ffd7..00000000000 --- a/app/assets/images/emoji/gay_pride_flag.png +++ /dev/null diff --git a/app/assets/images/emoji/gear.png b/app/assets/images/emoji/gear.png Binary files differdeleted file mode 100644 index 2a1cc2c0ff4..00000000000 --- a/app/assets/images/emoji/gear.png +++ /dev/null diff --git a/app/assets/images/emoji/gem.png b/app/assets/images/emoji/gem.png Binary files differdeleted file mode 100644 index db122d26a19..00000000000 --- a/app/assets/images/emoji/gem.png +++ /dev/null diff --git a/app/assets/images/emoji/gemini.png b/app/assets/images/emoji/gemini.png Binary files differdeleted file mode 100644 index 1a09698cf00..00000000000 --- a/app/assets/images/emoji/gemini.png +++ /dev/null diff --git a/app/assets/images/emoji/ghost.png b/app/assets/images/emoji/ghost.png Binary files differdeleted file mode 100644 index 5650bc0ed18..00000000000 --- a/app/assets/images/emoji/ghost.png +++ /dev/null diff --git a/app/assets/images/emoji/gift.png b/app/assets/images/emoji/gift.png Binary files differdeleted file mode 100644 index 844e2164560..00000000000 --- a/app/assets/images/emoji/gift.png +++ /dev/null diff --git a/app/assets/images/emoji/gift_heart.png b/app/assets/images/emoji/gift_heart.png Binary files differdeleted file mode 100644 index 902ceafe4d1..00000000000 --- a/app/assets/images/emoji/gift_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/girl.png b/app/assets/images/emoji/girl.png Binary files differdeleted file mode 100644 index dc1d4d08b39..00000000000 --- a/app/assets/images/emoji/girl.png +++ /dev/null diff --git a/app/assets/images/emoji/girl_tone1.png b/app/assets/images/emoji/girl_tone1.png Binary files differdeleted file mode 100644 index bb667e88651..00000000000 --- a/app/assets/images/emoji/girl_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/girl_tone2.png b/app/assets/images/emoji/girl_tone2.png Binary files differdeleted file mode 100644 index a59ed4a3f0d..00000000000 --- a/app/assets/images/emoji/girl_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/girl_tone3.png b/app/assets/images/emoji/girl_tone3.png Binary files differdeleted file mode 100644 index 517e7f2a7b0..00000000000 --- a/app/assets/images/emoji/girl_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/girl_tone4.png b/app/assets/images/emoji/girl_tone4.png Binary files differdeleted file mode 100644 index 542d96c8487..00000000000 --- a/app/assets/images/emoji/girl_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/girl_tone5.png b/app/assets/images/emoji/girl_tone5.png Binary files differdeleted file mode 100644 index 66b7c28c2df..00000000000 --- a/app/assets/images/emoji/girl_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/globe_with_meridians.png b/app/assets/images/emoji/globe_with_meridians.png Binary files differdeleted file mode 100644 index 82450c1a4ba..00000000000 --- a/app/assets/images/emoji/globe_with_meridians.png +++ /dev/null diff --git a/app/assets/images/emoji/goal.png b/app/assets/images/emoji/goal.png Binary files differdeleted file mode 100644 index df3a53da0fb..00000000000 --- a/app/assets/images/emoji/goal.png +++ /dev/null diff --git a/app/assets/images/emoji/goat.png b/app/assets/images/emoji/goat.png Binary files differdeleted file mode 100644 index f9d9e38a128..00000000000 --- a/app/assets/images/emoji/goat.png +++ /dev/null diff --git a/app/assets/images/emoji/golf.png b/app/assets/images/emoji/golf.png Binary files differdeleted file mode 100644 index f65a21d8a46..00000000000 --- a/app/assets/images/emoji/golf.png +++ /dev/null diff --git a/app/assets/images/emoji/golfer.png b/app/assets/images/emoji/golfer.png Binary files differdeleted file mode 100644 index 39c552de86d..00000000000 --- a/app/assets/images/emoji/golfer.png +++ /dev/null diff --git a/app/assets/images/emoji/gorilla.png b/app/assets/images/emoji/gorilla.png Binary files differdeleted file mode 100644 index acc51e13622..00000000000 --- a/app/assets/images/emoji/gorilla.png +++ /dev/null diff --git a/app/assets/images/emoji/grapes.png b/app/assets/images/emoji/grapes.png Binary files differdeleted file mode 100644 index 30d22218896..00000000000 --- a/app/assets/images/emoji/grapes.png +++ /dev/null diff --git a/app/assets/images/emoji/green_apple.png b/app/assets/images/emoji/green_apple.png Binary files differdeleted file mode 100644 index 5fd51bd3915..00000000000 --- a/app/assets/images/emoji/green_apple.png +++ /dev/null diff --git a/app/assets/images/emoji/green_book.png b/app/assets/images/emoji/green_book.png Binary files differdeleted file mode 100644 index e5e411cf3b5..00000000000 --- a/app/assets/images/emoji/green_book.png +++ /dev/null diff --git a/app/assets/images/emoji/green_heart.png b/app/assets/images/emoji/green_heart.png Binary files differdeleted file mode 100644 index c52d60a58be..00000000000 --- a/app/assets/images/emoji/green_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/grey_exclamation.png b/app/assets/images/emoji/grey_exclamation.png Binary files differdeleted file mode 100644 index 9b64da8bf7f..00000000000 --- a/app/assets/images/emoji/grey_exclamation.png +++ /dev/null diff --git a/app/assets/images/emoji/grey_question.png b/app/assets/images/emoji/grey_question.png Binary files differdeleted file mode 100644 index 6e7824c75f6..00000000000 --- a/app/assets/images/emoji/grey_question.png +++ /dev/null diff --git a/app/assets/images/emoji/grimacing.png b/app/assets/images/emoji/grimacing.png Binary files differdeleted file mode 100644 index 871b2f071c9..00000000000 --- a/app/assets/images/emoji/grimacing.png +++ /dev/null diff --git a/app/assets/images/emoji/grin.png b/app/assets/images/emoji/grin.png Binary files differdeleted file mode 100644 index 418d94c811b..00000000000 --- a/app/assets/images/emoji/grin.png +++ /dev/null diff --git a/app/assets/images/emoji/grinning.png b/app/assets/images/emoji/grinning.png Binary files differdeleted file mode 100644 index 3e8e0dab78c..00000000000 --- a/app/assets/images/emoji/grinning.png +++ /dev/null diff --git a/app/assets/images/emoji/guardsman.png b/app/assets/images/emoji/guardsman.png Binary files differdeleted file mode 100644 index 8d7ab3c473c..00000000000 --- a/app/assets/images/emoji/guardsman.png +++ /dev/null diff --git a/app/assets/images/emoji/guardsman_tone1.png b/app/assets/images/emoji/guardsman_tone1.png Binary files differdeleted file mode 100644 index cea9ba27468..00000000000 --- a/app/assets/images/emoji/guardsman_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/guardsman_tone2.png b/app/assets/images/emoji/guardsman_tone2.png Binary files differdeleted file mode 100644 index 037464e4028..00000000000 --- a/app/assets/images/emoji/guardsman_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/guardsman_tone3.png b/app/assets/images/emoji/guardsman_tone3.png Binary files differdeleted file mode 100644 index 0f6726fbe87..00000000000 --- a/app/assets/images/emoji/guardsman_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/guardsman_tone4.png b/app/assets/images/emoji/guardsman_tone4.png Binary files differdeleted file mode 100644 index 85fcf9a3b97..00000000000 --- a/app/assets/images/emoji/guardsman_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/guardsman_tone5.png b/app/assets/images/emoji/guardsman_tone5.png Binary files differdeleted file mode 100644 index e5f9ca7d5a2..00000000000 --- a/app/assets/images/emoji/guardsman_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/guitar.png b/app/assets/images/emoji/guitar.png Binary files differdeleted file mode 100644 index 43d752f1e3d..00000000000 --- a/app/assets/images/emoji/guitar.png +++ /dev/null diff --git a/app/assets/images/emoji/gun.png b/app/assets/images/emoji/gun.png Binary files differdeleted file mode 100644 index 89c5c244c7b..00000000000 --- a/app/assets/images/emoji/gun.png +++ /dev/null diff --git a/app/assets/images/emoji/haircut.png b/app/assets/images/emoji/haircut.png Binary files differdeleted file mode 100644 index 91266b12930..00000000000 --- a/app/assets/images/emoji/haircut.png +++ /dev/null diff --git a/app/assets/images/emoji/haircut_tone1.png b/app/assets/images/emoji/haircut_tone1.png Binary files differdeleted file mode 100644 index c743b74abeb..00000000000 --- a/app/assets/images/emoji/haircut_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/haircut_tone2.png b/app/assets/images/emoji/haircut_tone2.png Binary files differdeleted file mode 100644 index f144f8e55ce..00000000000 --- a/app/assets/images/emoji/haircut_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/haircut_tone3.png b/app/assets/images/emoji/haircut_tone3.png Binary files differdeleted file mode 100644 index d5ad19563ac..00000000000 --- a/app/assets/images/emoji/haircut_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/haircut_tone4.png b/app/assets/images/emoji/haircut_tone4.png Binary files differdeleted file mode 100644 index 244fd3af008..00000000000 --- a/app/assets/images/emoji/haircut_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/haircut_tone5.png b/app/assets/images/emoji/haircut_tone5.png Binary files differdeleted file mode 100644 index 20a94a88623..00000000000 --- a/app/assets/images/emoji/haircut_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/hamburger.png b/app/assets/images/emoji/hamburger.png Binary files differdeleted file mode 100644 index 3573b28a1fd..00000000000 --- a/app/assets/images/emoji/hamburger.png +++ /dev/null diff --git a/app/assets/images/emoji/hammer.png b/app/assets/images/emoji/hammer.png Binary files differdeleted file mode 100644 index 00736cce47d..00000000000 --- a/app/assets/images/emoji/hammer.png +++ /dev/null diff --git a/app/assets/images/emoji/hammer_pick.png b/app/assets/images/emoji/hammer_pick.png Binary files differdeleted file mode 100644 index 3bee30ec588..00000000000 --- a/app/assets/images/emoji/hammer_pick.png +++ /dev/null diff --git a/app/assets/images/emoji/hamster.png b/app/assets/images/emoji/hamster.png Binary files differdeleted file mode 100644 index 9a04388e4e7..00000000000 --- a/app/assets/images/emoji/hamster.png +++ /dev/null diff --git a/app/assets/images/emoji/hand_splayed.png b/app/assets/images/emoji/hand_splayed.png Binary files differdeleted file mode 100644 index fb5ae8ebb5a..00000000000 --- a/app/assets/images/emoji/hand_splayed.png +++ /dev/null diff --git a/app/assets/images/emoji/hand_splayed_tone1.png b/app/assets/images/emoji/hand_splayed_tone1.png Binary files differdeleted file mode 100644 index a7888e6bd23..00000000000 --- a/app/assets/images/emoji/hand_splayed_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/hand_splayed_tone2.png b/app/assets/images/emoji/hand_splayed_tone2.png Binary files differdeleted file mode 100644 index cc10fbc272d..00000000000 --- a/app/assets/images/emoji/hand_splayed_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/hand_splayed_tone3.png b/app/assets/images/emoji/hand_splayed_tone3.png Binary files differdeleted file mode 100644 index 707236ae8a4..00000000000 --- a/app/assets/images/emoji/hand_splayed_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/hand_splayed_tone4.png b/app/assets/images/emoji/hand_splayed_tone4.png Binary files differdeleted file mode 100644 index 1430df9c61f..00000000000 --- a/app/assets/images/emoji/hand_splayed_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/hand_splayed_tone5.png b/app/assets/images/emoji/hand_splayed_tone5.png Binary files differdeleted file mode 100644 index 80bec971b6b..00000000000 --- a/app/assets/images/emoji/hand_splayed_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/handbag.png b/app/assets/images/emoji/handbag.png Binary files differdeleted file mode 100644 index cbf75c5d25e..00000000000 --- a/app/assets/images/emoji/handbag.png +++ /dev/null diff --git a/app/assets/images/emoji/handball.png b/app/assets/images/emoji/handball.png Binary files differdeleted file mode 100644 index 1152f1344c7..00000000000 --- a/app/assets/images/emoji/handball.png +++ /dev/null diff --git a/app/assets/images/emoji/handball_tone1.png b/app/assets/images/emoji/handball_tone1.png Binary files differdeleted file mode 100644 index c26cac2df98..00000000000 --- a/app/assets/images/emoji/handball_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/handball_tone2.png b/app/assets/images/emoji/handball_tone2.png Binary files differdeleted file mode 100644 index 7baaf95a9a2..00000000000 --- a/app/assets/images/emoji/handball_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/handball_tone3.png b/app/assets/images/emoji/handball_tone3.png Binary files differdeleted file mode 100644 index 0e3a37c3d40..00000000000 --- a/app/assets/images/emoji/handball_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/handball_tone4.png b/app/assets/images/emoji/handball_tone4.png Binary files differdeleted file mode 100644 index e1233f38266..00000000000 --- a/app/assets/images/emoji/handball_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/handball_tone5.png b/app/assets/images/emoji/handball_tone5.png Binary files differdeleted file mode 100644 index 6b1eb9b64b0..00000000000 --- a/app/assets/images/emoji/handball_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/handshake.png b/app/assets/images/emoji/handshake.png Binary files differdeleted file mode 100644 index c5d35fd8138..00000000000 --- a/app/assets/images/emoji/handshake.png +++ /dev/null diff --git a/app/assets/images/emoji/handshake_tone1.png b/app/assets/images/emoji/handshake_tone1.png Binary files differdeleted file mode 100644 index 8f8fbb9bdca..00000000000 --- a/app/assets/images/emoji/handshake_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/handshake_tone2.png b/app/assets/images/emoji/handshake_tone2.png Binary files differdeleted file mode 100644 index 336a77a6d78..00000000000 --- a/app/assets/images/emoji/handshake_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/handshake_tone3.png b/app/assets/images/emoji/handshake_tone3.png Binary files differdeleted file mode 100644 index 95f62d4fecd..00000000000 --- a/app/assets/images/emoji/handshake_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/handshake_tone4.png b/app/assets/images/emoji/handshake_tone4.png Binary files differdeleted file mode 100644 index 2b0a6433886..00000000000 --- a/app/assets/images/emoji/handshake_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/handshake_tone5.png b/app/assets/images/emoji/handshake_tone5.png Binary files differdeleted file mode 100644 index 40189ee68e4..00000000000 --- a/app/assets/images/emoji/handshake_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/hash.png b/app/assets/images/emoji/hash.png Binary files differdeleted file mode 100644 index 6e26f0070b0..00000000000 --- a/app/assets/images/emoji/hash.png +++ /dev/null diff --git a/app/assets/images/emoji/hatched_chick.png b/app/assets/images/emoji/hatched_chick.png Binary files differdeleted file mode 100644 index 31dfb511e0e..00000000000 --- a/app/assets/images/emoji/hatched_chick.png +++ /dev/null diff --git a/app/assets/images/emoji/hatching_chick.png b/app/assets/images/emoji/hatching_chick.png Binary files differdeleted file mode 100644 index c5b0e8f3bcc..00000000000 --- a/app/assets/images/emoji/hatching_chick.png +++ /dev/null diff --git a/app/assets/images/emoji/head_bandage.png b/app/assets/images/emoji/head_bandage.png Binary files differdeleted file mode 100644 index 0be723085e0..00000000000 --- a/app/assets/images/emoji/head_bandage.png +++ /dev/null diff --git a/app/assets/images/emoji/headphones.png b/app/assets/images/emoji/headphones.png Binary files differdeleted file mode 100644 index e9fd34041d8..00000000000 --- a/app/assets/images/emoji/headphones.png +++ /dev/null diff --git a/app/assets/images/emoji/hear_no_evil.png b/app/assets/images/emoji/hear_no_evil.png Binary files differdeleted file mode 100644 index 74b6be0c6c5..00000000000 --- a/app/assets/images/emoji/hear_no_evil.png +++ /dev/null diff --git a/app/assets/images/emoji/heart.png b/app/assets/images/emoji/heart.png Binary files differdeleted file mode 100644 index 638cb72dc4e..00000000000 --- a/app/assets/images/emoji/heart.png +++ /dev/null diff --git a/app/assets/images/emoji/heart_decoration.png b/app/assets/images/emoji/heart_decoration.png Binary files differdeleted file mode 100644 index 5443f60bc63..00000000000 --- a/app/assets/images/emoji/heart_decoration.png +++ /dev/null diff --git a/app/assets/images/emoji/heart_exclamation.png b/app/assets/images/emoji/heart_exclamation.png Binary files differdeleted file mode 100644 index 91b520be40b..00000000000 --- a/app/assets/images/emoji/heart_exclamation.png +++ /dev/null diff --git a/app/assets/images/emoji/heart_eyes.png b/app/assets/images/emoji/heart_eyes.png Binary files differdeleted file mode 100644 index 73fbee29d4e..00000000000 --- a/app/assets/images/emoji/heart_eyes.png +++ /dev/null diff --git a/app/assets/images/emoji/heart_eyes_cat.png b/app/assets/images/emoji/heart_eyes_cat.png Binary files differdeleted file mode 100644 index bc5a833f9a1..00000000000 --- a/app/assets/images/emoji/heart_eyes_cat.png +++ /dev/null diff --git a/app/assets/images/emoji/heartbeat.png b/app/assets/images/emoji/heartbeat.png Binary files differdeleted file mode 100644 index 0bcf2d1d567..00000000000 --- a/app/assets/images/emoji/heartbeat.png +++ /dev/null diff --git a/app/assets/images/emoji/heartpulse.png b/app/assets/images/emoji/heartpulse.png Binary files differdeleted file mode 100644 index d6e694e972f..00000000000 --- a/app/assets/images/emoji/heartpulse.png +++ /dev/null diff --git a/app/assets/images/emoji/hearts.png b/app/assets/images/emoji/hearts.png Binary files differdeleted file mode 100644 index 393c3ed5267..00000000000 --- a/app/assets/images/emoji/hearts.png +++ /dev/null diff --git a/app/assets/images/emoji/heavy_check_mark.png b/app/assets/images/emoji/heavy_check_mark.png Binary files differdeleted file mode 100644 index 03bd695377e..00000000000 --- a/app/assets/images/emoji/heavy_check_mark.png +++ /dev/null diff --git a/app/assets/images/emoji/heavy_division_sign.png b/app/assets/images/emoji/heavy_division_sign.png Binary files differdeleted file mode 100644 index df32ab21bea..00000000000 --- a/app/assets/images/emoji/heavy_division_sign.png +++ /dev/null diff --git a/app/assets/images/emoji/heavy_dollar_sign.png b/app/assets/images/emoji/heavy_dollar_sign.png Binary files differdeleted file mode 100644 index ef2c2e20590..00000000000 --- a/app/assets/images/emoji/heavy_dollar_sign.png +++ /dev/null diff --git a/app/assets/images/emoji/heavy_minus_sign.png b/app/assets/images/emoji/heavy_minus_sign.png Binary files differdeleted file mode 100644 index 054211caf12..00000000000 --- a/app/assets/images/emoji/heavy_minus_sign.png +++ /dev/null diff --git a/app/assets/images/emoji/heavy_multiplication_x.png b/app/assets/images/emoji/heavy_multiplication_x.png Binary files differdeleted file mode 100644 index e47cc1b685d..00000000000 --- a/app/assets/images/emoji/heavy_multiplication_x.png +++ /dev/null diff --git a/app/assets/images/emoji/heavy_plus_sign.png b/app/assets/images/emoji/heavy_plus_sign.png Binary files differdeleted file mode 100644 index 40799798aaf..00000000000 --- a/app/assets/images/emoji/heavy_plus_sign.png +++ /dev/null diff --git a/app/assets/images/emoji/helicopter.png b/app/assets/images/emoji/helicopter.png Binary files differdeleted file mode 100644 index 7ec5f39a51a..00000000000 --- a/app/assets/images/emoji/helicopter.png +++ /dev/null diff --git a/app/assets/images/emoji/helmet_with_cross.png b/app/assets/images/emoji/helmet_with_cross.png Binary files differdeleted file mode 100644 index 7140a676038..00000000000 --- a/app/assets/images/emoji/helmet_with_cross.png +++ /dev/null diff --git a/app/assets/images/emoji/herb.png b/app/assets/images/emoji/herb.png Binary files differdeleted file mode 100644 index d984d1562bb..00000000000 --- a/app/assets/images/emoji/herb.png +++ /dev/null diff --git a/app/assets/images/emoji/hibiscus.png b/app/assets/images/emoji/hibiscus.png Binary files differdeleted file mode 100644 index 39dd3524233..00000000000 --- a/app/assets/images/emoji/hibiscus.png +++ /dev/null diff --git a/app/assets/images/emoji/high_brightness.png b/app/assets/images/emoji/high_brightness.png Binary files differdeleted file mode 100644 index c41f2d5fd50..00000000000 --- a/app/assets/images/emoji/high_brightness.png +++ /dev/null diff --git a/app/assets/images/emoji/high_heel.png b/app/assets/images/emoji/high_heel.png Binary files differdeleted file mode 100644 index b331cbccc9d..00000000000 --- a/app/assets/images/emoji/high_heel.png +++ /dev/null diff --git a/app/assets/images/emoji/hockey.png b/app/assets/images/emoji/hockey.png Binary files differdeleted file mode 100644 index be94e9cbf73..00000000000 --- a/app/assets/images/emoji/hockey.png +++ /dev/null diff --git a/app/assets/images/emoji/hole.png b/app/assets/images/emoji/hole.png Binary files differdeleted file mode 100644 index 517d2ae0deb..00000000000 --- a/app/assets/images/emoji/hole.png +++ /dev/null diff --git a/app/assets/images/emoji/homes.png b/app/assets/images/emoji/homes.png Binary files differdeleted file mode 100644 index 6ab4a2a2651..00000000000 --- a/app/assets/images/emoji/homes.png +++ /dev/null diff --git a/app/assets/images/emoji/honey_pot.png b/app/assets/images/emoji/honey_pot.png Binary files differdeleted file mode 100644 index 9d8f592955e..00000000000 --- a/app/assets/images/emoji/honey_pot.png +++ /dev/null diff --git a/app/assets/images/emoji/horse.png b/app/assets/images/emoji/horse.png Binary files differdeleted file mode 100644 index 7cb1172f4e4..00000000000 --- a/app/assets/images/emoji/horse.png +++ /dev/null diff --git a/app/assets/images/emoji/horse_racing.png b/app/assets/images/emoji/horse_racing.png Binary files differdeleted file mode 100644 index addf9edac56..00000000000 --- a/app/assets/images/emoji/horse_racing.png +++ /dev/null diff --git a/app/assets/images/emoji/horse_racing_tone1.png b/app/assets/images/emoji/horse_racing_tone1.png Binary files differdeleted file mode 100644 index e9bf4092e98..00000000000 --- a/app/assets/images/emoji/horse_racing_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/horse_racing_tone2.png b/app/assets/images/emoji/horse_racing_tone2.png Binary files differdeleted file mode 100644 index 031bbc3d867..00000000000 --- a/app/assets/images/emoji/horse_racing_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/horse_racing_tone3.png b/app/assets/images/emoji/horse_racing_tone3.png Binary files differdeleted file mode 100644 index b40ef891f9b..00000000000 --- a/app/assets/images/emoji/horse_racing_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/horse_racing_tone4.png b/app/assets/images/emoji/horse_racing_tone4.png Binary files differdeleted file mode 100644 index e286cb85065..00000000000 --- a/app/assets/images/emoji/horse_racing_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/horse_racing_tone5.png b/app/assets/images/emoji/horse_racing_tone5.png Binary files differdeleted file mode 100644 index 453c51c6007..00000000000 --- a/app/assets/images/emoji/horse_racing_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/hospital.png b/app/assets/images/emoji/hospital.png Binary files differdeleted file mode 100644 index 1cbce4ae767..00000000000 --- a/app/assets/images/emoji/hospital.png +++ /dev/null diff --git a/app/assets/images/emoji/hot_pepper.png b/app/assets/images/emoji/hot_pepper.png Binary files differdeleted file mode 100644 index 266675bd577..00000000000 --- a/app/assets/images/emoji/hot_pepper.png +++ /dev/null diff --git a/app/assets/images/emoji/hotdog.png b/app/assets/images/emoji/hotdog.png Binary files differdeleted file mode 100644 index 3c3354d94cb..00000000000 --- a/app/assets/images/emoji/hotdog.png +++ /dev/null diff --git a/app/assets/images/emoji/hotel.png b/app/assets/images/emoji/hotel.png Binary files differdeleted file mode 100644 index ea8f4c4979a..00000000000 --- a/app/assets/images/emoji/hotel.png +++ /dev/null diff --git a/app/assets/images/emoji/hotsprings.png b/app/assets/images/emoji/hotsprings.png Binary files differdeleted file mode 100644 index 3d9df2d9475..00000000000 --- a/app/assets/images/emoji/hotsprings.png +++ /dev/null diff --git a/app/assets/images/emoji/hourglass.png b/app/assets/images/emoji/hourglass.png Binary files differdeleted file mode 100644 index a5db2d1d3f4..00000000000 --- a/app/assets/images/emoji/hourglass.png +++ /dev/null diff --git a/app/assets/images/emoji/hourglass_flowing_sand.png b/app/assets/images/emoji/hourglass_flowing_sand.png Binary files differdeleted file mode 100644 index b93b15ed6d8..00000000000 --- a/app/assets/images/emoji/hourglass_flowing_sand.png +++ /dev/null diff --git a/app/assets/images/emoji/house.png b/app/assets/images/emoji/house.png Binary files differdeleted file mode 100644 index 01c98a0ba92..00000000000 --- a/app/assets/images/emoji/house.png +++ /dev/null diff --git a/app/assets/images/emoji/house_abandoned.png b/app/assets/images/emoji/house_abandoned.png Binary files differdeleted file mode 100644 index c55e81de990..00000000000 --- a/app/assets/images/emoji/house_abandoned.png +++ /dev/null diff --git a/app/assets/images/emoji/house_with_garden.png b/app/assets/images/emoji/house_with_garden.png Binary files differdeleted file mode 100644 index 0aae41598ef..00000000000 --- a/app/assets/images/emoji/house_with_garden.png +++ /dev/null diff --git a/app/assets/images/emoji/hugging.png b/app/assets/images/emoji/hugging.png Binary files differdeleted file mode 100644 index 5bba6dc6d51..00000000000 --- a/app/assets/images/emoji/hugging.png +++ /dev/null diff --git a/app/assets/images/emoji/hushed.png b/app/assets/images/emoji/hushed.png Binary files differdeleted file mode 100644 index cad0e23132e..00000000000 --- a/app/assets/images/emoji/hushed.png +++ /dev/null diff --git a/app/assets/images/emoji/ice_cream.png b/app/assets/images/emoji/ice_cream.png Binary files differdeleted file mode 100644 index 94267b9c434..00000000000 --- a/app/assets/images/emoji/ice_cream.png +++ /dev/null diff --git a/app/assets/images/emoji/ice_skate.png b/app/assets/images/emoji/ice_skate.png Binary files differdeleted file mode 100644 index 8c449b0c039..00000000000 --- a/app/assets/images/emoji/ice_skate.png +++ /dev/null diff --git a/app/assets/images/emoji/icecream.png b/app/assets/images/emoji/icecream.png Binary files differdeleted file mode 100644 index 8f6546e31a5..00000000000 --- a/app/assets/images/emoji/icecream.png +++ /dev/null diff --git a/app/assets/images/emoji/id.png b/app/assets/images/emoji/id.png Binary files differdeleted file mode 100644 index 5bf69bf7ba8..00000000000 --- a/app/assets/images/emoji/id.png +++ /dev/null diff --git a/app/assets/images/emoji/ideograph_advantage.png b/app/assets/images/emoji/ideograph_advantage.png Binary files differdeleted file mode 100644 index 0c0d589caf0..00000000000 --- a/app/assets/images/emoji/ideograph_advantage.png +++ /dev/null diff --git a/app/assets/images/emoji/imp.png b/app/assets/images/emoji/imp.png Binary files differdeleted file mode 100644 index 9f9a9605539..00000000000 --- a/app/assets/images/emoji/imp.png +++ /dev/null diff --git a/app/assets/images/emoji/inbox_tray.png b/app/assets/images/emoji/inbox_tray.png Binary files differdeleted file mode 100644 index 41a6be2b0ee..00000000000 --- a/app/assets/images/emoji/inbox_tray.png +++ /dev/null diff --git a/app/assets/images/emoji/incoming_envelope.png b/app/assets/images/emoji/incoming_envelope.png Binary files differdeleted file mode 100644 index fd22e88182e..00000000000 --- a/app/assets/images/emoji/incoming_envelope.png +++ /dev/null diff --git a/app/assets/images/emoji/information_desk_person.png b/app/assets/images/emoji/information_desk_person.png Binary files differdeleted file mode 100644 index 55fc6294d25..00000000000 --- a/app/assets/images/emoji/information_desk_person.png +++ /dev/null diff --git a/app/assets/images/emoji/information_desk_person_tone1.png b/app/assets/images/emoji/information_desk_person_tone1.png Binary files differdeleted file mode 100644 index 3d9e2247940..00000000000 --- a/app/assets/images/emoji/information_desk_person_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/information_desk_person_tone2.png b/app/assets/images/emoji/information_desk_person_tone2.png Binary files differdeleted file mode 100644 index 879e8b7966d..00000000000 --- a/app/assets/images/emoji/information_desk_person_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/information_desk_person_tone3.png b/app/assets/images/emoji/information_desk_person_tone3.png Binary files differdeleted file mode 100644 index 307514eab67..00000000000 --- a/app/assets/images/emoji/information_desk_person_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/information_desk_person_tone4.png b/app/assets/images/emoji/information_desk_person_tone4.png Binary files differdeleted file mode 100644 index 297395dcb3f..00000000000 --- a/app/assets/images/emoji/information_desk_person_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/information_desk_person_tone5.png b/app/assets/images/emoji/information_desk_person_tone5.png Binary files differdeleted file mode 100644 index 26f8f22b28b..00000000000 --- a/app/assets/images/emoji/information_desk_person_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/information_source.png b/app/assets/images/emoji/information_source.png Binary files differdeleted file mode 100644 index 871f2db9314..00000000000 --- a/app/assets/images/emoji/information_source.png +++ /dev/null diff --git a/app/assets/images/emoji/innocent.png b/app/assets/images/emoji/innocent.png Binary files differdeleted file mode 100644 index 57f5151124f..00000000000 --- a/app/assets/images/emoji/innocent.png +++ /dev/null diff --git a/app/assets/images/emoji/interrobang.png b/app/assets/images/emoji/interrobang.png Binary files differdeleted file mode 100644 index 509813e9bb2..00000000000 --- a/app/assets/images/emoji/interrobang.png +++ /dev/null diff --git a/app/assets/images/emoji/iphone.png b/app/assets/images/emoji/iphone.png Binary files differdeleted file mode 100644 index fd377acf872..00000000000 --- a/app/assets/images/emoji/iphone.png +++ /dev/null diff --git a/app/assets/images/emoji/island.png b/app/assets/images/emoji/island.png Binary files differdeleted file mode 100644 index 7fd834389b7..00000000000 --- a/app/assets/images/emoji/island.png +++ /dev/null diff --git a/app/assets/images/emoji/izakaya_lantern.png b/app/assets/images/emoji/izakaya_lantern.png Binary files differdeleted file mode 100644 index dfd933f6f36..00000000000 --- a/app/assets/images/emoji/izakaya_lantern.png +++ /dev/null diff --git a/app/assets/images/emoji/jack_o_lantern.png b/app/assets/images/emoji/jack_o_lantern.png Binary files differdeleted file mode 100644 index 44c3fc0aec9..00000000000 --- a/app/assets/images/emoji/jack_o_lantern.png +++ /dev/null diff --git a/app/assets/images/emoji/japan.png b/app/assets/images/emoji/japan.png Binary files differdeleted file mode 100644 index d86d0a59e12..00000000000 --- a/app/assets/images/emoji/japan.png +++ /dev/null diff --git a/app/assets/images/emoji/japanese_castle.png b/app/assets/images/emoji/japanese_castle.png Binary files differdeleted file mode 100644 index 64b4e33a1ae..00000000000 --- a/app/assets/images/emoji/japanese_castle.png +++ /dev/null diff --git a/app/assets/images/emoji/japanese_goblin.png b/app/assets/images/emoji/japanese_goblin.png Binary files differdeleted file mode 100644 index 515c6a2250e..00000000000 --- a/app/assets/images/emoji/japanese_goblin.png +++ /dev/null diff --git a/app/assets/images/emoji/japanese_ogre.png b/app/assets/images/emoji/japanese_ogre.png Binary files differdeleted file mode 100644 index fe8670fdaf1..00000000000 --- a/app/assets/images/emoji/japanese_ogre.png +++ /dev/null diff --git a/app/assets/images/emoji/jeans.png b/app/assets/images/emoji/jeans.png Binary files differdeleted file mode 100644 index 2a6869d674c..00000000000 --- a/app/assets/images/emoji/jeans.png +++ /dev/null diff --git a/app/assets/images/emoji/joy.png b/app/assets/images/emoji/joy.png Binary files differdeleted file mode 100644 index 0ba3b1859d8..00000000000 --- a/app/assets/images/emoji/joy.png +++ /dev/null diff --git a/app/assets/images/emoji/joy_cat.png b/app/assets/images/emoji/joy_cat.png Binary files differdeleted file mode 100644 index aac353179aa..00000000000 --- a/app/assets/images/emoji/joy_cat.png +++ /dev/null diff --git a/app/assets/images/emoji/joystick.png b/app/assets/images/emoji/joystick.png Binary files differdeleted file mode 100644 index 1ee1905434e..00000000000 --- a/app/assets/images/emoji/joystick.png +++ /dev/null diff --git a/app/assets/images/emoji/juggling.png b/app/assets/images/emoji/juggling.png Binary files differdeleted file mode 100644 index a37f6224a42..00000000000 --- a/app/assets/images/emoji/juggling.png +++ /dev/null diff --git a/app/assets/images/emoji/juggling_tone1.png b/app/assets/images/emoji/juggling_tone1.png Binary files differdeleted file mode 100644 index c18eda40031..00000000000 --- a/app/assets/images/emoji/juggling_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/juggling_tone2.png b/app/assets/images/emoji/juggling_tone2.png Binary files differdeleted file mode 100644 index de3b7a555b6..00000000000 --- a/app/assets/images/emoji/juggling_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/juggling_tone3.png b/app/assets/images/emoji/juggling_tone3.png Binary files differdeleted file mode 100644 index 74ab6d85458..00000000000 --- a/app/assets/images/emoji/juggling_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/juggling_tone4.png b/app/assets/images/emoji/juggling_tone4.png Binary files differdeleted file mode 100644 index 1c57823203f..00000000000 --- a/app/assets/images/emoji/juggling_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/juggling_tone5.png b/app/assets/images/emoji/juggling_tone5.png Binary files differdeleted file mode 100644 index c343d6ee98a..00000000000 --- a/app/assets/images/emoji/juggling_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/kaaba.png b/app/assets/images/emoji/kaaba.png Binary files differdeleted file mode 100644 index 1778c1138e4..00000000000 --- a/app/assets/images/emoji/kaaba.png +++ /dev/null diff --git a/app/assets/images/emoji/key.png b/app/assets/images/emoji/key.png Binary files differdeleted file mode 100644 index 319cd1b884c..00000000000 --- a/app/assets/images/emoji/key.png +++ /dev/null diff --git a/app/assets/images/emoji/key2.png b/app/assets/images/emoji/key2.png Binary files differdeleted file mode 100644 index e11d706c6c8..00000000000 --- a/app/assets/images/emoji/key2.png +++ /dev/null diff --git a/app/assets/images/emoji/keyboard.png b/app/assets/images/emoji/keyboard.png Binary files differdeleted file mode 100644 index 75027cb9af7..00000000000 --- a/app/assets/images/emoji/keyboard.png +++ /dev/null diff --git a/app/assets/images/emoji/kimono.png b/app/assets/images/emoji/kimono.png Binary files differdeleted file mode 100644 index abe851115d1..00000000000 --- a/app/assets/images/emoji/kimono.png +++ /dev/null diff --git a/app/assets/images/emoji/kiss.png b/app/assets/images/emoji/kiss.png Binary files differdeleted file mode 100644 index 85e6dcfc4e8..00000000000 --- a/app/assets/images/emoji/kiss.png +++ /dev/null diff --git a/app/assets/images/emoji/kiss_mm.png b/app/assets/images/emoji/kiss_mm.png Binary files differdeleted file mode 100644 index a9a0edae17c..00000000000 --- a/app/assets/images/emoji/kiss_mm.png +++ /dev/null diff --git a/app/assets/images/emoji/kiss_ww.png b/app/assets/images/emoji/kiss_ww.png Binary files differdeleted file mode 100644 index fdac73cbb1d..00000000000 --- a/app/assets/images/emoji/kiss_ww.png +++ /dev/null diff --git a/app/assets/images/emoji/kissing.png b/app/assets/images/emoji/kissing.png Binary files differdeleted file mode 100644 index 39d325fd8e3..00000000000 --- a/app/assets/images/emoji/kissing.png +++ /dev/null diff --git a/app/assets/images/emoji/kissing_cat.png b/app/assets/images/emoji/kissing_cat.png Binary files differdeleted file mode 100644 index 6e0bcc77540..00000000000 --- a/app/assets/images/emoji/kissing_cat.png +++ /dev/null diff --git a/app/assets/images/emoji/kissing_closed_eyes.png b/app/assets/images/emoji/kissing_closed_eyes.png Binary files differdeleted file mode 100644 index b684d7d4d6c..00000000000 --- a/app/assets/images/emoji/kissing_closed_eyes.png +++ /dev/null diff --git a/app/assets/images/emoji/kissing_heart.png b/app/assets/images/emoji/kissing_heart.png Binary files differdeleted file mode 100644 index 0ff808fd614..00000000000 --- a/app/assets/images/emoji/kissing_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/kissing_smiling_eyes.png b/app/assets/images/emoji/kissing_smiling_eyes.png Binary files differdeleted file mode 100644 index e181f17099d..00000000000 --- a/app/assets/images/emoji/kissing_smiling_eyes.png +++ /dev/null diff --git a/app/assets/images/emoji/kiwi.png b/app/assets/images/emoji/kiwi.png Binary files differdeleted file mode 100644 index dfbd8258074..00000000000 --- a/app/assets/images/emoji/kiwi.png +++ /dev/null diff --git a/app/assets/images/emoji/knife.png b/app/assets/images/emoji/knife.png Binary files differdeleted file mode 100644 index 1acb9f3077b..00000000000 --- a/app/assets/images/emoji/knife.png +++ /dev/null diff --git a/app/assets/images/emoji/koala.png b/app/assets/images/emoji/koala.png Binary files differdeleted file mode 100644 index a0aa437a98c..00000000000 --- a/app/assets/images/emoji/koala.png +++ /dev/null diff --git a/app/assets/images/emoji/koko.png b/app/assets/images/emoji/koko.png Binary files differdeleted file mode 100644 index 6450eb44d90..00000000000 --- a/app/assets/images/emoji/koko.png +++ /dev/null diff --git a/app/assets/images/emoji/label.png b/app/assets/images/emoji/label.png Binary files differdeleted file mode 100644 index d41c9b4f1e1..00000000000 --- a/app/assets/images/emoji/label.png +++ /dev/null diff --git a/app/assets/images/emoji/large_blue_circle.png b/app/assets/images/emoji/large_blue_circle.png Binary files differdeleted file mode 100644 index 84078ef3127..00000000000 --- a/app/assets/images/emoji/large_blue_circle.png +++ /dev/null diff --git a/app/assets/images/emoji/large_blue_diamond.png b/app/assets/images/emoji/large_blue_diamond.png Binary files differdeleted file mode 100644 index 416a58bd5a8..00000000000 --- a/app/assets/images/emoji/large_blue_diamond.png +++ /dev/null diff --git a/app/assets/images/emoji/large_orange_diamond.png b/app/assets/images/emoji/large_orange_diamond.png Binary files differdeleted file mode 100644 index 73ff0ac36c8..00000000000 --- a/app/assets/images/emoji/large_orange_diamond.png +++ /dev/null diff --git a/app/assets/images/emoji/last_quarter_moon.png b/app/assets/images/emoji/last_quarter_moon.png Binary files differdeleted file mode 100644 index 0842a0dd408..00000000000 --- a/app/assets/images/emoji/last_quarter_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/last_quarter_moon_with_face.png b/app/assets/images/emoji/last_quarter_moon_with_face.png Binary files differdeleted file mode 100644 index 94099343c5d..00000000000 --- a/app/assets/images/emoji/last_quarter_moon_with_face.png +++ /dev/null diff --git a/app/assets/images/emoji/laughing.png b/app/assets/images/emoji/laughing.png Binary files differdeleted file mode 100644 index d94e9505ba1..00000000000 --- a/app/assets/images/emoji/laughing.png +++ /dev/null diff --git a/app/assets/images/emoji/leaves.png b/app/assets/images/emoji/leaves.png Binary files differdeleted file mode 100644 index 1e43e1af820..00000000000 --- a/app/assets/images/emoji/leaves.png +++ /dev/null diff --git a/app/assets/images/emoji/ledger.png b/app/assets/images/emoji/ledger.png Binary files differdeleted file mode 100644 index 13e7561a4bd..00000000000 --- a/app/assets/images/emoji/ledger.png +++ /dev/null diff --git a/app/assets/images/emoji/left_facing_fist.png b/app/assets/images/emoji/left_facing_fist.png Binary files differdeleted file mode 100644 index a9d9fd8d59c..00000000000 --- a/app/assets/images/emoji/left_facing_fist.png +++ /dev/null diff --git a/app/assets/images/emoji/left_facing_fist_tone1.png b/app/assets/images/emoji/left_facing_fist_tone1.png Binary files differdeleted file mode 100644 index 1262a6b4b69..00000000000 --- a/app/assets/images/emoji/left_facing_fist_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/left_facing_fist_tone2.png b/app/assets/images/emoji/left_facing_fist_tone2.png Binary files differdeleted file mode 100644 index 40bf70b82b2..00000000000 --- a/app/assets/images/emoji/left_facing_fist_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/left_facing_fist_tone3.png b/app/assets/images/emoji/left_facing_fist_tone3.png Binary files differdeleted file mode 100644 index 93f58145111..00000000000 --- a/app/assets/images/emoji/left_facing_fist_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/left_facing_fist_tone4.png b/app/assets/images/emoji/left_facing_fist_tone4.png Binary files differdeleted file mode 100644 index d82b5ec91f0..00000000000 --- a/app/assets/images/emoji/left_facing_fist_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/left_facing_fist_tone5.png b/app/assets/images/emoji/left_facing_fist_tone5.png Binary files differdeleted file mode 100644 index 09ae4cd492b..00000000000 --- a/app/assets/images/emoji/left_facing_fist_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/left_luggage.png b/app/assets/images/emoji/left_luggage.png Binary files differdeleted file mode 100644 index 887b23f3f25..00000000000 --- a/app/assets/images/emoji/left_luggage.png +++ /dev/null diff --git a/app/assets/images/emoji/left_right_arrow.png b/app/assets/images/emoji/left_right_arrow.png Binary files differdeleted file mode 100644 index 7937f24f2ac..00000000000 --- a/app/assets/images/emoji/left_right_arrow.png +++ /dev/null diff --git a/app/assets/images/emoji/leftwards_arrow_with_hook.png b/app/assets/images/emoji/leftwards_arrow_with_hook.png Binary files differdeleted file mode 100644 index ba45c2ad9e9..00000000000 --- a/app/assets/images/emoji/leftwards_arrow_with_hook.png +++ /dev/null diff --git a/app/assets/images/emoji/lemon.png b/app/assets/images/emoji/lemon.png Binary files differdeleted file mode 100644 index 9a7d95ca220..00000000000 --- a/app/assets/images/emoji/lemon.png +++ /dev/null diff --git a/app/assets/images/emoji/leo.png b/app/assets/images/emoji/leo.png Binary files differdeleted file mode 100644 index 30158d34de9..00000000000 --- a/app/assets/images/emoji/leo.png +++ /dev/null diff --git a/app/assets/images/emoji/leopard.png b/app/assets/images/emoji/leopard.png Binary files differdeleted file mode 100644 index 8aac3d49448..00000000000 --- a/app/assets/images/emoji/leopard.png +++ /dev/null diff --git a/app/assets/images/emoji/level_slider.png b/app/assets/images/emoji/level_slider.png Binary files differdeleted file mode 100644 index 720a3b34119..00000000000 --- a/app/assets/images/emoji/level_slider.png +++ /dev/null diff --git a/app/assets/images/emoji/levitate.png b/app/assets/images/emoji/levitate.png Binary files differdeleted file mode 100644 index 3dc315a3d91..00000000000 --- a/app/assets/images/emoji/levitate.png +++ /dev/null diff --git a/app/assets/images/emoji/libra.png b/app/assets/images/emoji/libra.png Binary files differdeleted file mode 100644 index 8fd133a357c..00000000000 --- a/app/assets/images/emoji/libra.png +++ /dev/null diff --git a/app/assets/images/emoji/lifter.png b/app/assets/images/emoji/lifter.png Binary files differdeleted file mode 100644 index afdeaa476af..00000000000 --- a/app/assets/images/emoji/lifter.png +++ /dev/null diff --git a/app/assets/images/emoji/lifter_tone1.png b/app/assets/images/emoji/lifter_tone1.png Binary files differdeleted file mode 100644 index febaad123ec..00000000000 --- a/app/assets/images/emoji/lifter_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/lifter_tone2.png b/app/assets/images/emoji/lifter_tone2.png Binary files differdeleted file mode 100644 index 27ae794a18e..00000000000 --- a/app/assets/images/emoji/lifter_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/lifter_tone3.png b/app/assets/images/emoji/lifter_tone3.png Binary files differdeleted file mode 100644 index 45c4c22c709..00000000000 --- a/app/assets/images/emoji/lifter_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/lifter_tone4.png b/app/assets/images/emoji/lifter_tone4.png Binary files differdeleted file mode 100644 index 67dd21d2464..00000000000 --- a/app/assets/images/emoji/lifter_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/lifter_tone5.png b/app/assets/images/emoji/lifter_tone5.png Binary files differdeleted file mode 100644 index fa0152038b6..00000000000 --- a/app/assets/images/emoji/lifter_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/light_rail.png b/app/assets/images/emoji/light_rail.png Binary files differdeleted file mode 100644 index a64829f5078..00000000000 --- a/app/assets/images/emoji/light_rail.png +++ /dev/null diff --git a/app/assets/images/emoji/link.png b/app/assets/images/emoji/link.png Binary files differdeleted file mode 100644 index ae20f0f8eec..00000000000 --- a/app/assets/images/emoji/link.png +++ /dev/null diff --git a/app/assets/images/emoji/lion_face.png b/app/assets/images/emoji/lion_face.png Binary files differdeleted file mode 100644 index 5062ab47ecf..00000000000 --- a/app/assets/images/emoji/lion_face.png +++ /dev/null diff --git a/app/assets/images/emoji/lips.png b/app/assets/images/emoji/lips.png Binary files differdeleted file mode 100644 index 35f3cc2006f..00000000000 --- a/app/assets/images/emoji/lips.png +++ /dev/null diff --git a/app/assets/images/emoji/lipstick.png b/app/assets/images/emoji/lipstick.png Binary files differdeleted file mode 100644 index 61a0c084c99..00000000000 --- a/app/assets/images/emoji/lipstick.png +++ /dev/null diff --git a/app/assets/images/emoji/lizard.png b/app/assets/images/emoji/lizard.png Binary files differdeleted file mode 100644 index 8363876050e..00000000000 --- a/app/assets/images/emoji/lizard.png +++ /dev/null diff --git a/app/assets/images/emoji/lock.png b/app/assets/images/emoji/lock.png Binary files differdeleted file mode 100644 index 5a739c46644..00000000000 --- a/app/assets/images/emoji/lock.png +++ /dev/null diff --git a/app/assets/images/emoji/lock_with_ink_pen.png b/app/assets/images/emoji/lock_with_ink_pen.png Binary files differdeleted file mode 100644 index 19a07d162fb..00000000000 --- a/app/assets/images/emoji/lock_with_ink_pen.png +++ /dev/null diff --git a/app/assets/images/emoji/lollipop.png b/app/assets/images/emoji/lollipop.png Binary files differdeleted file mode 100644 index ad76d7bf916..00000000000 --- a/app/assets/images/emoji/lollipop.png +++ /dev/null diff --git a/app/assets/images/emoji/loop.png b/app/assets/images/emoji/loop.png Binary files differdeleted file mode 100644 index 0b82c8fe315..00000000000 --- a/app/assets/images/emoji/loop.png +++ /dev/null diff --git a/app/assets/images/emoji/loud_sound.png b/app/assets/images/emoji/loud_sound.png Binary files differdeleted file mode 100644 index 8370033a539..00000000000 --- a/app/assets/images/emoji/loud_sound.png +++ /dev/null diff --git a/app/assets/images/emoji/loudspeaker.png b/app/assets/images/emoji/loudspeaker.png Binary files differdeleted file mode 100644 index 5fd76a95b82..00000000000 --- a/app/assets/images/emoji/loudspeaker.png +++ /dev/null diff --git a/app/assets/images/emoji/love_hotel.png b/app/assets/images/emoji/love_hotel.png Binary files differdeleted file mode 100644 index 5e136be6f8b..00000000000 --- a/app/assets/images/emoji/love_hotel.png +++ /dev/null diff --git a/app/assets/images/emoji/love_letter.png b/app/assets/images/emoji/love_letter.png Binary files differdeleted file mode 100644 index 3c3c767e784..00000000000 --- a/app/assets/images/emoji/love_letter.png +++ /dev/null diff --git a/app/assets/images/emoji/low_brightness.png b/app/assets/images/emoji/low_brightness.png Binary files differdeleted file mode 100644 index 543011d3961..00000000000 --- a/app/assets/images/emoji/low_brightness.png +++ /dev/null diff --git a/app/assets/images/emoji/lying_face.png b/app/assets/images/emoji/lying_face.png Binary files differdeleted file mode 100644 index 02827e2628b..00000000000 --- a/app/assets/images/emoji/lying_face.png +++ /dev/null diff --git a/app/assets/images/emoji/m.png b/app/assets/images/emoji/m.png Binary files differdeleted file mode 100644 index 8a3506fc1d7..00000000000 --- a/app/assets/images/emoji/m.png +++ /dev/null diff --git a/app/assets/images/emoji/mag.png b/app/assets/images/emoji/mag.png Binary files differdeleted file mode 100644 index 55487156ac6..00000000000 --- a/app/assets/images/emoji/mag.png +++ /dev/null diff --git a/app/assets/images/emoji/mag_right.png b/app/assets/images/emoji/mag_right.png Binary files differdeleted file mode 100644 index 0f4b1bca876..00000000000 --- a/app/assets/images/emoji/mag_right.png +++ /dev/null diff --git a/app/assets/images/emoji/mahjong.png b/app/assets/images/emoji/mahjong.png Binary files differdeleted file mode 100644 index 66fd32025b2..00000000000 --- a/app/assets/images/emoji/mahjong.png +++ /dev/null diff --git a/app/assets/images/emoji/mailbox.png b/app/assets/images/emoji/mailbox.png Binary files differdeleted file mode 100644 index ef5174e40dd..00000000000 --- a/app/assets/images/emoji/mailbox.png +++ /dev/null diff --git a/app/assets/images/emoji/mailbox_closed.png b/app/assets/images/emoji/mailbox_closed.png Binary files differdeleted file mode 100644 index ddc705db0d8..00000000000 --- a/app/assets/images/emoji/mailbox_closed.png +++ /dev/null diff --git a/app/assets/images/emoji/mailbox_with_mail.png b/app/assets/images/emoji/mailbox_with_mail.png Binary files differdeleted file mode 100644 index 5460616a5b1..00000000000 --- a/app/assets/images/emoji/mailbox_with_mail.png +++ /dev/null diff --git a/app/assets/images/emoji/mailbox_with_no_mail.png b/app/assets/images/emoji/mailbox_with_no_mail.png Binary files differdeleted file mode 100644 index f9aeee6b15a..00000000000 --- a/app/assets/images/emoji/mailbox_with_no_mail.png +++ /dev/null diff --git a/app/assets/images/emoji/man.png b/app/assets/images/emoji/man.png Binary files differdeleted file mode 100644 index 857a02e5146..00000000000 --- a/app/assets/images/emoji/man.png +++ /dev/null diff --git a/app/assets/images/emoji/man_dancing.png b/app/assets/images/emoji/man_dancing.png Binary files differdeleted file mode 100644 index ccff3bede5a..00000000000 --- a/app/assets/images/emoji/man_dancing.png +++ /dev/null diff --git a/app/assets/images/emoji/man_dancing_tone1.png b/app/assets/images/emoji/man_dancing_tone1.png Binary files differdeleted file mode 100644 index e0b9f82d905..00000000000 --- a/app/assets/images/emoji/man_dancing_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/man_dancing_tone2.png b/app/assets/images/emoji/man_dancing_tone2.png Binary files differdeleted file mode 100644 index a5beed56e2e..00000000000 --- a/app/assets/images/emoji/man_dancing_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/man_dancing_tone3.png b/app/assets/images/emoji/man_dancing_tone3.png Binary files differdeleted file mode 100644 index 2fa20180a6e..00000000000 --- a/app/assets/images/emoji/man_dancing_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/man_dancing_tone4.png b/app/assets/images/emoji/man_dancing_tone4.png Binary files differdeleted file mode 100644 index bd3528c83ba..00000000000 --- a/app/assets/images/emoji/man_dancing_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/man_dancing_tone5.png b/app/assets/images/emoji/man_dancing_tone5.png Binary files differdeleted file mode 100644 index 41fd4f880c9..00000000000 --- a/app/assets/images/emoji/man_dancing_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/man_in_tuxedo.png b/app/assets/images/emoji/man_in_tuxedo.png Binary files differdeleted file mode 100644 index 5f7e9303f89..00000000000 --- a/app/assets/images/emoji/man_in_tuxedo.png +++ /dev/null diff --git a/app/assets/images/emoji/man_in_tuxedo_tone1.png b/app/assets/images/emoji/man_in_tuxedo_tone1.png Binary files differdeleted file mode 100644 index 7b6b3acd99b..00000000000 --- a/app/assets/images/emoji/man_in_tuxedo_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/man_in_tuxedo_tone2.png b/app/assets/images/emoji/man_in_tuxedo_tone2.png Binary files differdeleted file mode 100644 index 7975191b360..00000000000 --- a/app/assets/images/emoji/man_in_tuxedo_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/man_in_tuxedo_tone3.png b/app/assets/images/emoji/man_in_tuxedo_tone3.png Binary files differdeleted file mode 100644 index a2816f600ae..00000000000 --- a/app/assets/images/emoji/man_in_tuxedo_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/man_in_tuxedo_tone4.png b/app/assets/images/emoji/man_in_tuxedo_tone4.png Binary files differdeleted file mode 100644 index ea8291760f9..00000000000 --- a/app/assets/images/emoji/man_in_tuxedo_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/man_in_tuxedo_tone5.png b/app/assets/images/emoji/man_in_tuxedo_tone5.png Binary files differdeleted file mode 100644 index c743e05fc5e..00000000000 --- a/app/assets/images/emoji/man_in_tuxedo_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/man_tone1.png b/app/assets/images/emoji/man_tone1.png Binary files differdeleted file mode 100644 index bb86e963a80..00000000000 --- a/app/assets/images/emoji/man_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/man_tone2.png b/app/assets/images/emoji/man_tone2.png Binary files differdeleted file mode 100644 index fdeeaff46f5..00000000000 --- a/app/assets/images/emoji/man_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/man_tone3.png b/app/assets/images/emoji/man_tone3.png Binary files differdeleted file mode 100644 index 7ae0b5df9cf..00000000000 --- a/app/assets/images/emoji/man_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/man_tone4.png b/app/assets/images/emoji/man_tone4.png Binary files differdeleted file mode 100644 index db14cde99b8..00000000000 --- a/app/assets/images/emoji/man_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/man_tone5.png b/app/assets/images/emoji/man_tone5.png Binary files differdeleted file mode 100644 index 7c67a70529c..00000000000 --- a/app/assets/images/emoji/man_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_gua_pi_mao.png b/app/assets/images/emoji/man_with_gua_pi_mao.png Binary files differdeleted file mode 100644 index 7841e13608d..00000000000 --- a/app/assets/images/emoji/man_with_gua_pi_mao.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_gua_pi_mao_tone1.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone1.png Binary files differdeleted file mode 100644 index 5b7b3def19c..00000000000 --- a/app/assets/images/emoji/man_with_gua_pi_mao_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_gua_pi_mao_tone2.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone2.png Binary files differdeleted file mode 100644 index c8b9cf87f4b..00000000000 --- a/app/assets/images/emoji/man_with_gua_pi_mao_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_gua_pi_mao_tone3.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone3.png Binary files differdeleted file mode 100644 index effdd0c4c84..00000000000 --- a/app/assets/images/emoji/man_with_gua_pi_mao_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_gua_pi_mao_tone4.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone4.png Binary files differdeleted file mode 100644 index f885ff46fa1..00000000000 --- a/app/assets/images/emoji/man_with_gua_pi_mao_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_gua_pi_mao_tone5.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone5.png Binary files differdeleted file mode 100644 index a6d55ca1380..00000000000 --- a/app/assets/images/emoji/man_with_gua_pi_mao_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_turban.png b/app/assets/images/emoji/man_with_turban.png Binary files differdeleted file mode 100644 index 51cf047f966..00000000000 --- a/app/assets/images/emoji/man_with_turban.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_turban_tone1.png b/app/assets/images/emoji/man_with_turban_tone1.png Binary files differdeleted file mode 100644 index 1e12ee4b231..00000000000 --- a/app/assets/images/emoji/man_with_turban_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_turban_tone2.png b/app/assets/images/emoji/man_with_turban_tone2.png Binary files differdeleted file mode 100644 index 37de4cceb23..00000000000 --- a/app/assets/images/emoji/man_with_turban_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_turban_tone3.png b/app/assets/images/emoji/man_with_turban_tone3.png Binary files differdeleted file mode 100644 index f607afd3450..00000000000 --- a/app/assets/images/emoji/man_with_turban_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_turban_tone4.png b/app/assets/images/emoji/man_with_turban_tone4.png Binary files differdeleted file mode 100644 index c05695888af..00000000000 --- a/app/assets/images/emoji/man_with_turban_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/man_with_turban_tone5.png b/app/assets/images/emoji/man_with_turban_tone5.png Binary files differdeleted file mode 100644 index 4b4ff64720b..00000000000 --- a/app/assets/images/emoji/man_with_turban_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/mans_shoe.png b/app/assets/images/emoji/mans_shoe.png Binary files differdeleted file mode 100644 index 4bf7541032c..00000000000 --- a/app/assets/images/emoji/mans_shoe.png +++ /dev/null diff --git a/app/assets/images/emoji/map.png b/app/assets/images/emoji/map.png Binary files differdeleted file mode 100644 index 15efe32c798..00000000000 --- a/app/assets/images/emoji/map.png +++ /dev/null diff --git a/app/assets/images/emoji/maple_leaf.png b/app/assets/images/emoji/maple_leaf.png Binary files differdeleted file mode 100644 index c49acea67f7..00000000000 --- a/app/assets/images/emoji/maple_leaf.png +++ /dev/null diff --git a/app/assets/images/emoji/martial_arts_uniform.png b/app/assets/images/emoji/martial_arts_uniform.png Binary files differdeleted file mode 100644 index 8d6114761f6..00000000000 --- a/app/assets/images/emoji/martial_arts_uniform.png +++ /dev/null diff --git a/app/assets/images/emoji/mask.png b/app/assets/images/emoji/mask.png Binary files differdeleted file mode 100644 index 1e800acd1c0..00000000000 --- a/app/assets/images/emoji/mask.png +++ /dev/null diff --git a/app/assets/images/emoji/massage.png b/app/assets/images/emoji/massage.png Binary files differdeleted file mode 100644 index b91d845e374..00000000000 --- a/app/assets/images/emoji/massage.png +++ /dev/null diff --git a/app/assets/images/emoji/massage_tone1.png b/app/assets/images/emoji/massage_tone1.png Binary files differdeleted file mode 100644 index e0f415d3186..00000000000 --- a/app/assets/images/emoji/massage_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/massage_tone2.png b/app/assets/images/emoji/massage_tone2.png Binary files differdeleted file mode 100644 index 0bb244a270b..00000000000 --- a/app/assets/images/emoji/massage_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/massage_tone3.png b/app/assets/images/emoji/massage_tone3.png Binary files differdeleted file mode 100644 index a117ee81a22..00000000000 --- a/app/assets/images/emoji/massage_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/massage_tone4.png b/app/assets/images/emoji/massage_tone4.png Binary files differdeleted file mode 100644 index 6f42ab017f4..00000000000 --- a/app/assets/images/emoji/massage_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/massage_tone5.png b/app/assets/images/emoji/massage_tone5.png Binary files differdeleted file mode 100644 index 6a388c0d0b5..00000000000 --- a/app/assets/images/emoji/massage_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/meat_on_bone.png b/app/assets/images/emoji/meat_on_bone.png Binary files differdeleted file mode 100644 index b20a59d1690..00000000000 --- a/app/assets/images/emoji/meat_on_bone.png +++ /dev/null diff --git a/app/assets/images/emoji/medal.png b/app/assets/images/emoji/medal.png Binary files differdeleted file mode 100644 index b85896b14da..00000000000 --- a/app/assets/images/emoji/medal.png +++ /dev/null diff --git a/app/assets/images/emoji/mega.png b/app/assets/images/emoji/mega.png Binary files differdeleted file mode 100644 index 4e6735188e3..00000000000 --- a/app/assets/images/emoji/mega.png +++ /dev/null diff --git a/app/assets/images/emoji/melon.png b/app/assets/images/emoji/melon.png Binary files differdeleted file mode 100644 index c01232d419d..00000000000 --- a/app/assets/images/emoji/melon.png +++ /dev/null diff --git a/app/assets/images/emoji/menorah.png b/app/assets/images/emoji/menorah.png Binary files differdeleted file mode 100644 index b4297362869..00000000000 --- a/app/assets/images/emoji/menorah.png +++ /dev/null diff --git a/app/assets/images/emoji/mens.png b/app/assets/images/emoji/mens.png Binary files differdeleted file mode 100644 index f5a1e1ba0cd..00000000000 --- a/app/assets/images/emoji/mens.png +++ /dev/null diff --git a/app/assets/images/emoji/metal.png b/app/assets/images/emoji/metal.png Binary files differdeleted file mode 100644 index 4aa6e7e0a44..00000000000 --- a/app/assets/images/emoji/metal.png +++ /dev/null diff --git a/app/assets/images/emoji/metal_tone1.png b/app/assets/images/emoji/metal_tone1.png Binary files differdeleted file mode 100644 index c080d2addbd..00000000000 --- a/app/assets/images/emoji/metal_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/metal_tone2.png b/app/assets/images/emoji/metal_tone2.png Binary files differdeleted file mode 100644 index 12313529bcf..00000000000 --- a/app/assets/images/emoji/metal_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/metal_tone3.png b/app/assets/images/emoji/metal_tone3.png Binary files differdeleted file mode 100644 index ca9be6ae67b..00000000000 --- a/app/assets/images/emoji/metal_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/metal_tone4.png b/app/assets/images/emoji/metal_tone4.png Binary files differdeleted file mode 100644 index abe28cbf890..00000000000 --- a/app/assets/images/emoji/metal_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/metal_tone5.png b/app/assets/images/emoji/metal_tone5.png Binary files differdeleted file mode 100644 index 0c6b5dd34ed..00000000000 --- a/app/assets/images/emoji/metal_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/metro.png b/app/assets/images/emoji/metro.png Binary files differdeleted file mode 100644 index 1de8f0551f3..00000000000 --- a/app/assets/images/emoji/metro.png +++ /dev/null diff --git a/app/assets/images/emoji/microphone.png b/app/assets/images/emoji/microphone.png Binary files differdeleted file mode 100644 index d4e6b0def25..00000000000 --- a/app/assets/images/emoji/microphone.png +++ /dev/null diff --git a/app/assets/images/emoji/microphone2.png b/app/assets/images/emoji/microphone2.png Binary files differdeleted file mode 100644 index cd9167654ff..00000000000 --- a/app/assets/images/emoji/microphone2.png +++ /dev/null diff --git a/app/assets/images/emoji/microscope.png b/app/assets/images/emoji/microscope.png Binary files differdeleted file mode 100644 index 90f5acf6a78..00000000000 --- a/app/assets/images/emoji/microscope.png +++ /dev/null diff --git a/app/assets/images/emoji/middle_finger.png b/app/assets/images/emoji/middle_finger.png Binary files differdeleted file mode 100644 index 697f7a25eb2..00000000000 --- a/app/assets/images/emoji/middle_finger.png +++ /dev/null diff --git a/app/assets/images/emoji/middle_finger_tone1.png b/app/assets/images/emoji/middle_finger_tone1.png Binary files differdeleted file mode 100644 index 61ef12a1548..00000000000 --- a/app/assets/images/emoji/middle_finger_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/middle_finger_tone2.png b/app/assets/images/emoji/middle_finger_tone2.png Binary files differdeleted file mode 100644 index c31a69be9af..00000000000 --- a/app/assets/images/emoji/middle_finger_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/middle_finger_tone3.png b/app/assets/images/emoji/middle_finger_tone3.png Binary files differdeleted file mode 100644 index 73ac216ce63..00000000000 --- a/app/assets/images/emoji/middle_finger_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/middle_finger_tone4.png b/app/assets/images/emoji/middle_finger_tone4.png Binary files differdeleted file mode 100644 index 80b8ab7706d..00000000000 --- a/app/assets/images/emoji/middle_finger_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/middle_finger_tone5.png b/app/assets/images/emoji/middle_finger_tone5.png Binary files differdeleted file mode 100644 index a8826b196e8..00000000000 --- a/app/assets/images/emoji/middle_finger_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/military_medal.png b/app/assets/images/emoji/military_medal.png Binary files differdeleted file mode 100644 index ecd3fb03584..00000000000 --- a/app/assets/images/emoji/military_medal.png +++ /dev/null diff --git a/app/assets/images/emoji/milk.png b/app/assets/images/emoji/milk.png Binary files differdeleted file mode 100644 index e4fcf2e64f3..00000000000 --- a/app/assets/images/emoji/milk.png +++ /dev/null diff --git a/app/assets/images/emoji/milky_way.png b/app/assets/images/emoji/milky_way.png Binary files differdeleted file mode 100644 index b2b8ac59c5e..00000000000 --- a/app/assets/images/emoji/milky_way.png +++ /dev/null diff --git a/app/assets/images/emoji/minibus.png b/app/assets/images/emoji/minibus.png Binary files differdeleted file mode 100644 index c60dd8f47ab..00000000000 --- a/app/assets/images/emoji/minibus.png +++ /dev/null diff --git a/app/assets/images/emoji/minidisc.png b/app/assets/images/emoji/minidisc.png Binary files differdeleted file mode 100644 index 9fa94cfbe74..00000000000 --- a/app/assets/images/emoji/minidisc.png +++ /dev/null diff --git a/app/assets/images/emoji/mobile_phone_off.png b/app/assets/images/emoji/mobile_phone_off.png Binary files differdeleted file mode 100644 index 8b661ec1c94..00000000000 --- a/app/assets/images/emoji/mobile_phone_off.png +++ /dev/null diff --git a/app/assets/images/emoji/money_mouth.png b/app/assets/images/emoji/money_mouth.png Binary files differdeleted file mode 100644 index 75fd1e90cb0..00000000000 --- a/app/assets/images/emoji/money_mouth.png +++ /dev/null diff --git a/app/assets/images/emoji/money_with_wings.png b/app/assets/images/emoji/money_with_wings.png Binary files differdeleted file mode 100644 index f022b04b3c2..00000000000 --- a/app/assets/images/emoji/money_with_wings.png +++ /dev/null diff --git a/app/assets/images/emoji/moneybag.png b/app/assets/images/emoji/moneybag.png Binary files differdeleted file mode 100644 index b9296be0902..00000000000 --- a/app/assets/images/emoji/moneybag.png +++ /dev/null diff --git a/app/assets/images/emoji/monkey.png b/app/assets/images/emoji/monkey.png Binary files differdeleted file mode 100644 index 9fae29448e3..00000000000 --- a/app/assets/images/emoji/monkey.png +++ /dev/null diff --git a/app/assets/images/emoji/monkey_face.png b/app/assets/images/emoji/monkey_face.png Binary files differdeleted file mode 100644 index 7cab9b91a82..00000000000 --- a/app/assets/images/emoji/monkey_face.png +++ /dev/null diff --git a/app/assets/images/emoji/monorail.png b/app/assets/images/emoji/monorail.png Binary files differdeleted file mode 100644 index 11eb1f574bf..00000000000 --- a/app/assets/images/emoji/monorail.png +++ /dev/null diff --git a/app/assets/images/emoji/mortar_board.png b/app/assets/images/emoji/mortar_board.png Binary files differdeleted file mode 100644 index 8b17ddd9d00..00000000000 --- a/app/assets/images/emoji/mortar_board.png +++ /dev/null diff --git a/app/assets/images/emoji/mosque.png b/app/assets/images/emoji/mosque.png Binary files differdeleted file mode 100644 index ef770b26d96..00000000000 --- a/app/assets/images/emoji/mosque.png +++ /dev/null diff --git a/app/assets/images/emoji/motor_scooter.png b/app/assets/images/emoji/motor_scooter.png Binary files differdeleted file mode 100644 index c5afa72d807..00000000000 --- a/app/assets/images/emoji/motor_scooter.png +++ /dev/null diff --git a/app/assets/images/emoji/motorboat.png b/app/assets/images/emoji/motorboat.png Binary files differdeleted file mode 100644 index 0506db1a40f..00000000000 --- a/app/assets/images/emoji/motorboat.png +++ /dev/null diff --git a/app/assets/images/emoji/motorcycle.png b/app/assets/images/emoji/motorcycle.png Binary files differdeleted file mode 100644 index 3d1d567e8ec..00000000000 --- a/app/assets/images/emoji/motorcycle.png +++ /dev/null diff --git a/app/assets/images/emoji/motorway.png b/app/assets/images/emoji/motorway.png Binary files differdeleted file mode 100644 index 8c3d3d03e3f..00000000000 --- a/app/assets/images/emoji/motorway.png +++ /dev/null diff --git a/app/assets/images/emoji/mount_fuji.png b/app/assets/images/emoji/mount_fuji.png Binary files differdeleted file mode 100644 index 88a54752458..00000000000 --- a/app/assets/images/emoji/mount_fuji.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain.png b/app/assets/images/emoji/mountain.png Binary files differdeleted file mode 100644 index 6722ebdd294..00000000000 --- a/app/assets/images/emoji/mountain.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_bicyclist.png b/app/assets/images/emoji/mountain_bicyclist.png Binary files differdeleted file mode 100644 index 41d3dc3ac6f..00000000000 --- a/app/assets/images/emoji/mountain_bicyclist.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_bicyclist_tone1.png b/app/assets/images/emoji/mountain_bicyclist_tone1.png Binary files differdeleted file mode 100644 index e9f1daf5e40..00000000000 --- a/app/assets/images/emoji/mountain_bicyclist_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_bicyclist_tone2.png b/app/assets/images/emoji/mountain_bicyclist_tone2.png Binary files differdeleted file mode 100644 index 555b9e29d4d..00000000000 --- a/app/assets/images/emoji/mountain_bicyclist_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_bicyclist_tone3.png b/app/assets/images/emoji/mountain_bicyclist_tone3.png Binary files differdeleted file mode 100644 index 7df5508ec8c..00000000000 --- a/app/assets/images/emoji/mountain_bicyclist_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_bicyclist_tone4.png b/app/assets/images/emoji/mountain_bicyclist_tone4.png Binary files differdeleted file mode 100644 index f94b3450697..00000000000 --- a/app/assets/images/emoji/mountain_bicyclist_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_bicyclist_tone5.png b/app/assets/images/emoji/mountain_bicyclist_tone5.png Binary files differdeleted file mode 100644 index 16a45861e1f..00000000000 --- a/app/assets/images/emoji/mountain_bicyclist_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_cableway.png b/app/assets/images/emoji/mountain_cableway.png Binary files differdeleted file mode 100644 index 1dea73ca53b..00000000000 --- a/app/assets/images/emoji/mountain_cableway.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_railway.png b/app/assets/images/emoji/mountain_railway.png Binary files differdeleted file mode 100644 index ade2218e469..00000000000 --- a/app/assets/images/emoji/mountain_railway.png +++ /dev/null diff --git a/app/assets/images/emoji/mountain_snow.png b/app/assets/images/emoji/mountain_snow.png Binary files differdeleted file mode 100644 index 76e1cfd8313..00000000000 --- a/app/assets/images/emoji/mountain_snow.png +++ /dev/null diff --git a/app/assets/images/emoji/mouse.png b/app/assets/images/emoji/mouse.png Binary files differdeleted file mode 100644 index 50afcd3262e..00000000000 --- a/app/assets/images/emoji/mouse.png +++ /dev/null diff --git a/app/assets/images/emoji/mouse2.png b/app/assets/images/emoji/mouse2.png Binary files differdeleted file mode 100644 index 20fb041f09f..00000000000 --- a/app/assets/images/emoji/mouse2.png +++ /dev/null diff --git a/app/assets/images/emoji/mouse_three_button.png b/app/assets/images/emoji/mouse_three_button.png Binary files differdeleted file mode 100644 index e84e96ff6e8..00000000000 --- a/app/assets/images/emoji/mouse_three_button.png +++ /dev/null diff --git a/app/assets/images/emoji/movie_camera.png b/app/assets/images/emoji/movie_camera.png Binary files differdeleted file mode 100644 index 4e73b130155..00000000000 --- a/app/assets/images/emoji/movie_camera.png +++ /dev/null diff --git a/app/assets/images/emoji/moyai.png b/app/assets/images/emoji/moyai.png Binary files differdeleted file mode 100644 index e6a7779c45b..00000000000 --- a/app/assets/images/emoji/moyai.png +++ /dev/null diff --git a/app/assets/images/emoji/mrs_claus.png b/app/assets/images/emoji/mrs_claus.png Binary files differdeleted file mode 100644 index 9cf2458df1a..00000000000 --- a/app/assets/images/emoji/mrs_claus.png +++ /dev/null diff --git a/app/assets/images/emoji/mrs_claus_tone1.png b/app/assets/images/emoji/mrs_claus_tone1.png Binary files differdeleted file mode 100644 index d8a695d7035..00000000000 --- a/app/assets/images/emoji/mrs_claus_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/mrs_claus_tone2.png b/app/assets/images/emoji/mrs_claus_tone2.png Binary files differdeleted file mode 100644 index 0e17e8c51f3..00000000000 --- a/app/assets/images/emoji/mrs_claus_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/mrs_claus_tone3.png b/app/assets/images/emoji/mrs_claus_tone3.png Binary files differdeleted file mode 100644 index c3ee4d1dfae..00000000000 --- a/app/assets/images/emoji/mrs_claus_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/mrs_claus_tone4.png b/app/assets/images/emoji/mrs_claus_tone4.png Binary files differdeleted file mode 100644 index 68a556da2fe..00000000000 --- a/app/assets/images/emoji/mrs_claus_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/mrs_claus_tone5.png b/app/assets/images/emoji/mrs_claus_tone5.png Binary files differdeleted file mode 100644 index ccab3c40ff2..00000000000 --- a/app/assets/images/emoji/mrs_claus_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/muscle.png b/app/assets/images/emoji/muscle.png Binary files differdeleted file mode 100644 index 7e67c1880f7..00000000000 --- a/app/assets/images/emoji/muscle.png +++ /dev/null diff --git a/app/assets/images/emoji/muscle_tone1.png b/app/assets/images/emoji/muscle_tone1.png Binary files differdeleted file mode 100644 index 1522942ce51..00000000000 --- a/app/assets/images/emoji/muscle_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/muscle_tone2.png b/app/assets/images/emoji/muscle_tone2.png Binary files differdeleted file mode 100644 index 569c6e832ca..00000000000 --- a/app/assets/images/emoji/muscle_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/muscle_tone3.png b/app/assets/images/emoji/muscle_tone3.png Binary files differdeleted file mode 100644 index 0a76b00fa89..00000000000 --- a/app/assets/images/emoji/muscle_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/muscle_tone4.png b/app/assets/images/emoji/muscle_tone4.png Binary files differdeleted file mode 100644 index f0cf31328e0..00000000000 --- a/app/assets/images/emoji/muscle_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/muscle_tone5.png b/app/assets/images/emoji/muscle_tone5.png Binary files differdeleted file mode 100644 index 4fda92460e8..00000000000 --- a/app/assets/images/emoji/muscle_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/mushroom.png b/app/assets/images/emoji/mushroom.png Binary files differdeleted file mode 100644 index dd85742ba2c..00000000000 --- a/app/assets/images/emoji/mushroom.png +++ /dev/null diff --git a/app/assets/images/emoji/musical_keyboard.png b/app/assets/images/emoji/musical_keyboard.png Binary files differdeleted file mode 100644 index 442b7456842..00000000000 --- a/app/assets/images/emoji/musical_keyboard.png +++ /dev/null diff --git a/app/assets/images/emoji/musical_note.png b/app/assets/images/emoji/musical_note.png Binary files differdeleted file mode 100644 index 06691ef61bb..00000000000 --- a/app/assets/images/emoji/musical_note.png +++ /dev/null diff --git a/app/assets/images/emoji/musical_score.png b/app/assets/images/emoji/musical_score.png Binary files differdeleted file mode 100644 index 47dc05a8ef5..00000000000 --- a/app/assets/images/emoji/musical_score.png +++ /dev/null diff --git a/app/assets/images/emoji/mute.png b/app/assets/images/emoji/mute.png Binary files differdeleted file mode 100644 index 7c1788e5075..00000000000 --- a/app/assets/images/emoji/mute.png +++ /dev/null diff --git a/app/assets/images/emoji/nail_care.png b/app/assets/images/emoji/nail_care.png Binary files differdeleted file mode 100644 index aa52af7050d..00000000000 --- a/app/assets/images/emoji/nail_care.png +++ /dev/null diff --git a/app/assets/images/emoji/nail_care_tone1.png b/app/assets/images/emoji/nail_care_tone1.png Binary files differdeleted file mode 100644 index 26e883dd244..00000000000 --- a/app/assets/images/emoji/nail_care_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/nail_care_tone2.png b/app/assets/images/emoji/nail_care_tone2.png Binary files differdeleted file mode 100644 index 61257b47ea3..00000000000 --- a/app/assets/images/emoji/nail_care_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/nail_care_tone3.png b/app/assets/images/emoji/nail_care_tone3.png Binary files differdeleted file mode 100644 index 29871b05f62..00000000000 --- a/app/assets/images/emoji/nail_care_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/nail_care_tone4.png b/app/assets/images/emoji/nail_care_tone4.png Binary files differdeleted file mode 100644 index 2881de0b17d..00000000000 --- a/app/assets/images/emoji/nail_care_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/nail_care_tone5.png b/app/assets/images/emoji/nail_care_tone5.png Binary files differdeleted file mode 100644 index a0b7c0a45a6..00000000000 --- a/app/assets/images/emoji/nail_care_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/name_badge.png b/app/assets/images/emoji/name_badge.png Binary files differdeleted file mode 100644 index ec5ee213e20..00000000000 --- a/app/assets/images/emoji/name_badge.png +++ /dev/null diff --git a/app/assets/images/emoji/nauseated_face.png b/app/assets/images/emoji/nauseated_face.png Binary files differdeleted file mode 100644 index a566c109c28..00000000000 --- a/app/assets/images/emoji/nauseated_face.png +++ /dev/null diff --git a/app/assets/images/emoji/necktie.png b/app/assets/images/emoji/necktie.png Binary files differdeleted file mode 100644 index 1804e7f3ff3..00000000000 --- a/app/assets/images/emoji/necktie.png +++ /dev/null diff --git a/app/assets/images/emoji/negative_squared_cross_mark.png b/app/assets/images/emoji/negative_squared_cross_mark.png Binary files differdeleted file mode 100644 index dae487f1f98..00000000000 --- a/app/assets/images/emoji/negative_squared_cross_mark.png +++ /dev/null diff --git a/app/assets/images/emoji/nerd.png b/app/assets/images/emoji/nerd.png Binary files differdeleted file mode 100644 index 7820bd581dc..00000000000 --- a/app/assets/images/emoji/nerd.png +++ /dev/null diff --git a/app/assets/images/emoji/neutral_face.png b/app/assets/images/emoji/neutral_face.png Binary files differdeleted file mode 100644 index 065d193afe4..00000000000 --- a/app/assets/images/emoji/neutral_face.png +++ /dev/null diff --git a/app/assets/images/emoji/new.png b/app/assets/images/emoji/new.png Binary files differdeleted file mode 100644 index b4f85488d1a..00000000000 --- a/app/assets/images/emoji/new.png +++ /dev/null diff --git a/app/assets/images/emoji/new_moon.png b/app/assets/images/emoji/new_moon.png Binary files differdeleted file mode 100644 index ecff72caa42..00000000000 --- a/app/assets/images/emoji/new_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/new_moon_with_face.png b/app/assets/images/emoji/new_moon_with_face.png Binary files differdeleted file mode 100644 index 150dd12400c..00000000000 --- a/app/assets/images/emoji/new_moon_with_face.png +++ /dev/null diff --git a/app/assets/images/emoji/newspaper.png b/app/assets/images/emoji/newspaper.png Binary files differdeleted file mode 100644 index 2aa8f060bde..00000000000 --- a/app/assets/images/emoji/newspaper.png +++ /dev/null diff --git a/app/assets/images/emoji/newspaper2.png b/app/assets/images/emoji/newspaper2.png Binary files differdeleted file mode 100644 index f64748df2b2..00000000000 --- a/app/assets/images/emoji/newspaper2.png +++ /dev/null diff --git a/app/assets/images/emoji/ng.png b/app/assets/images/emoji/ng.png Binary files differdeleted file mode 100644 index ee8d20f5ebc..00000000000 --- a/app/assets/images/emoji/ng.png +++ /dev/null diff --git a/app/assets/images/emoji/night_with_stars.png b/app/assets/images/emoji/night_with_stars.png Binary files differdeleted file mode 100644 index ca2018f456d..00000000000 --- a/app/assets/images/emoji/night_with_stars.png +++ /dev/null diff --git a/app/assets/images/emoji/nine.png b/app/assets/images/emoji/nine.png Binary files differdeleted file mode 100644 index 9fce3d1eca9..00000000000 --- a/app/assets/images/emoji/nine.png +++ /dev/null diff --git a/app/assets/images/emoji/no_bell.png b/app/assets/images/emoji/no_bell.png Binary files differdeleted file mode 100644 index 15cb38dd1e7..00000000000 --- a/app/assets/images/emoji/no_bell.png +++ /dev/null diff --git a/app/assets/images/emoji/no_bicycles.png b/app/assets/images/emoji/no_bicycles.png Binary files differdeleted file mode 100644 index 19c85421ce9..00000000000 --- a/app/assets/images/emoji/no_bicycles.png +++ /dev/null diff --git a/app/assets/images/emoji/no_entry.png b/app/assets/images/emoji/no_entry.png Binary files differdeleted file mode 100644 index 476800fc5c6..00000000000 --- a/app/assets/images/emoji/no_entry.png +++ /dev/null diff --git a/app/assets/images/emoji/no_entry_sign.png b/app/assets/images/emoji/no_entry_sign.png Binary files differdeleted file mode 100644 index d2efd65e74b..00000000000 --- a/app/assets/images/emoji/no_entry_sign.png +++ /dev/null diff --git a/app/assets/images/emoji/no_good.png b/app/assets/images/emoji/no_good.png Binary files differdeleted file mode 100644 index ed577100322..00000000000 --- a/app/assets/images/emoji/no_good.png +++ /dev/null diff --git a/app/assets/images/emoji/no_good_tone1.png b/app/assets/images/emoji/no_good_tone1.png Binary files differdeleted file mode 100644 index 5c1a3cbb884..00000000000 --- a/app/assets/images/emoji/no_good_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/no_good_tone2.png b/app/assets/images/emoji/no_good_tone2.png Binary files differdeleted file mode 100644 index 80d8021f8fe..00000000000 --- a/app/assets/images/emoji/no_good_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/no_good_tone3.png b/app/assets/images/emoji/no_good_tone3.png Binary files differdeleted file mode 100644 index 635e6a00815..00000000000 --- a/app/assets/images/emoji/no_good_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/no_good_tone4.png b/app/assets/images/emoji/no_good_tone4.png Binary files differdeleted file mode 100644 index b96e412a374..00000000000 --- a/app/assets/images/emoji/no_good_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/no_good_tone5.png b/app/assets/images/emoji/no_good_tone5.png Binary files differdeleted file mode 100644 index 9a7084afa0a..00000000000 --- a/app/assets/images/emoji/no_good_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/no_mobile_phones.png b/app/assets/images/emoji/no_mobile_phones.png Binary files differdeleted file mode 100644 index 7b1ae6ea579..00000000000 --- a/app/assets/images/emoji/no_mobile_phones.png +++ /dev/null diff --git a/app/assets/images/emoji/no_mouth.png b/app/assets/images/emoji/no_mouth.png Binary files differdeleted file mode 100644 index b642f6c1172..00000000000 --- a/app/assets/images/emoji/no_mouth.png +++ /dev/null diff --git a/app/assets/images/emoji/no_pedestrians.png b/app/assets/images/emoji/no_pedestrians.png Binary files differdeleted file mode 100644 index 286aa577a23..00000000000 --- a/app/assets/images/emoji/no_pedestrians.png +++ /dev/null diff --git a/app/assets/images/emoji/no_smoking.png b/app/assets/images/emoji/no_smoking.png Binary files differdeleted file mode 100644 index 586b8d29d05..00000000000 --- a/app/assets/images/emoji/no_smoking.png +++ /dev/null diff --git a/app/assets/images/emoji/non-potable_water.png b/app/assets/images/emoji/non-potable_water.png Binary files differdeleted file mode 100644 index 827d4193f4e..00000000000 --- a/app/assets/images/emoji/non-potable_water.png +++ /dev/null diff --git a/app/assets/images/emoji/nose.png b/app/assets/images/emoji/nose.png Binary files differdeleted file mode 100644 index 2f04ac5f98f..00000000000 --- a/app/assets/images/emoji/nose.png +++ /dev/null diff --git a/app/assets/images/emoji/nose_tone1.png b/app/assets/images/emoji/nose_tone1.png Binary files differdeleted file mode 100644 index 8008d17506e..00000000000 --- a/app/assets/images/emoji/nose_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/nose_tone2.png b/app/assets/images/emoji/nose_tone2.png Binary files differdeleted file mode 100644 index ac17f26e827..00000000000 --- a/app/assets/images/emoji/nose_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/nose_tone3.png b/app/assets/images/emoji/nose_tone3.png Binary files differdeleted file mode 100644 index d8b6cbe0f8e..00000000000 --- a/app/assets/images/emoji/nose_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/nose_tone4.png b/app/assets/images/emoji/nose_tone4.png Binary files differdeleted file mode 100644 index 004b2631e2e..00000000000 --- a/app/assets/images/emoji/nose_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/nose_tone5.png b/app/assets/images/emoji/nose_tone5.png Binary files differdeleted file mode 100644 index 7b33821f6c9..00000000000 --- a/app/assets/images/emoji/nose_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/notebook.png b/app/assets/images/emoji/notebook.png Binary files differdeleted file mode 100644 index f6c28b4915d..00000000000 --- a/app/assets/images/emoji/notebook.png +++ /dev/null diff --git a/app/assets/images/emoji/notebook_with_decorative_cover.png b/app/assets/images/emoji/notebook_with_decorative_cover.png Binary files differdeleted file mode 100644 index 03f566b6d2c..00000000000 --- a/app/assets/images/emoji/notebook_with_decorative_cover.png +++ /dev/null diff --git a/app/assets/images/emoji/notepad_spiral.png b/app/assets/images/emoji/notepad_spiral.png Binary files differdeleted file mode 100644 index 85faa10d8ea..00000000000 --- a/app/assets/images/emoji/notepad_spiral.png +++ /dev/null diff --git a/app/assets/images/emoji/notes.png b/app/assets/images/emoji/notes.png Binary files differdeleted file mode 100644 index 57d499aa181..00000000000 --- a/app/assets/images/emoji/notes.png +++ /dev/null diff --git a/app/assets/images/emoji/nut_and_bolt.png b/app/assets/images/emoji/nut_and_bolt.png Binary files differdeleted file mode 100644 index 4b9ae155319..00000000000 --- a/app/assets/images/emoji/nut_and_bolt.png +++ /dev/null diff --git a/app/assets/images/emoji/o.png b/app/assets/images/emoji/o.png Binary files differdeleted file mode 100644 index 3fe75ce4675..00000000000 --- a/app/assets/images/emoji/o.png +++ /dev/null diff --git a/app/assets/images/emoji/o2.png b/app/assets/images/emoji/o2.png Binary files differdeleted file mode 100644 index 73278ba194a..00000000000 --- a/app/assets/images/emoji/o2.png +++ /dev/null diff --git a/app/assets/images/emoji/ocean.png b/app/assets/images/emoji/ocean.png Binary files differdeleted file mode 100644 index 45ff1e87703..00000000000 --- a/app/assets/images/emoji/ocean.png +++ /dev/null diff --git a/app/assets/images/emoji/octagonal_sign.png b/app/assets/images/emoji/octagonal_sign.png Binary files differdeleted file mode 100644 index 5ed61004045..00000000000 --- a/app/assets/images/emoji/octagonal_sign.png +++ /dev/null diff --git a/app/assets/images/emoji/octopus.png b/app/assets/images/emoji/octopus.png Binary files differdeleted file mode 100644 index 72c84074aac..00000000000 --- a/app/assets/images/emoji/octopus.png +++ /dev/null diff --git a/app/assets/images/emoji/oden.png b/app/assets/images/emoji/oden.png Binary files differdeleted file mode 100644 index d38a849fece..00000000000 --- a/app/assets/images/emoji/oden.png +++ /dev/null diff --git a/app/assets/images/emoji/office.png b/app/assets/images/emoji/office.png Binary files differdeleted file mode 100644 index 7eee927d1b0..00000000000 --- a/app/assets/images/emoji/office.png +++ /dev/null diff --git a/app/assets/images/emoji/oil.png b/app/assets/images/emoji/oil.png Binary files differdeleted file mode 100644 index c4c4d42da8b..00000000000 --- a/app/assets/images/emoji/oil.png +++ /dev/null diff --git a/app/assets/images/emoji/ok.png b/app/assets/images/emoji/ok.png Binary files differdeleted file mode 100644 index d0d775532ff..00000000000 --- a/app/assets/images/emoji/ok.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_hand.png b/app/assets/images/emoji/ok_hand.png Binary files differdeleted file mode 100644 index 028d69b0de3..00000000000 --- a/app/assets/images/emoji/ok_hand.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_hand_tone1.png b/app/assets/images/emoji/ok_hand_tone1.png Binary files differdeleted file mode 100644 index cecf7b2ab5a..00000000000 --- a/app/assets/images/emoji/ok_hand_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_hand_tone2.png b/app/assets/images/emoji/ok_hand_tone2.png Binary files differdeleted file mode 100644 index c19239bcd3d..00000000000 --- a/app/assets/images/emoji/ok_hand_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_hand_tone3.png b/app/assets/images/emoji/ok_hand_tone3.png Binary files differdeleted file mode 100644 index 94b65b03ecd..00000000000 --- a/app/assets/images/emoji/ok_hand_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_hand_tone4.png b/app/assets/images/emoji/ok_hand_tone4.png Binary files differdeleted file mode 100644 index 03d26f08e6a..00000000000 --- a/app/assets/images/emoji/ok_hand_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_hand_tone5.png b/app/assets/images/emoji/ok_hand_tone5.png Binary files differdeleted file mode 100644 index d4b24086364..00000000000 --- a/app/assets/images/emoji/ok_hand_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_woman.png b/app/assets/images/emoji/ok_woman.png Binary files differdeleted file mode 100644 index 90a2c7469c4..00000000000 --- a/app/assets/images/emoji/ok_woman.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_woman_tone1.png b/app/assets/images/emoji/ok_woman_tone1.png Binary files differdeleted file mode 100644 index c99543e785b..00000000000 --- a/app/assets/images/emoji/ok_woman_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_woman_tone2.png b/app/assets/images/emoji/ok_woman_tone2.png Binary files differdeleted file mode 100644 index ad5fae813db..00000000000 --- a/app/assets/images/emoji/ok_woman_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_woman_tone3.png b/app/assets/images/emoji/ok_woman_tone3.png Binary files differdeleted file mode 100644 index 51bf4fab406..00000000000 --- a/app/assets/images/emoji/ok_woman_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_woman_tone4.png b/app/assets/images/emoji/ok_woman_tone4.png Binary files differdeleted file mode 100644 index ee3f9dc640a..00000000000 --- a/app/assets/images/emoji/ok_woman_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/ok_woman_tone5.png b/app/assets/images/emoji/ok_woman_tone5.png Binary files differdeleted file mode 100644 index 62a9d9237f7..00000000000 --- a/app/assets/images/emoji/ok_woman_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/older_man.png b/app/assets/images/emoji/older_man.png Binary files differdeleted file mode 100644 index 4ace4e6f308..00000000000 --- a/app/assets/images/emoji/older_man.png +++ /dev/null diff --git a/app/assets/images/emoji/older_man_tone1.png b/app/assets/images/emoji/older_man_tone1.png Binary files differdeleted file mode 100644 index ab459baace8..00000000000 --- a/app/assets/images/emoji/older_man_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/older_man_tone2.png b/app/assets/images/emoji/older_man_tone2.png Binary files differdeleted file mode 100644 index f4dfc7694ea..00000000000 --- a/app/assets/images/emoji/older_man_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/older_man_tone3.png b/app/assets/images/emoji/older_man_tone3.png Binary files differdeleted file mode 100644 index 5ffd11792f4..00000000000 --- a/app/assets/images/emoji/older_man_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/older_man_tone4.png b/app/assets/images/emoji/older_man_tone4.png Binary files differdeleted file mode 100644 index b350a764bfd..00000000000 --- a/app/assets/images/emoji/older_man_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/older_man_tone5.png b/app/assets/images/emoji/older_man_tone5.png Binary files differdeleted file mode 100644 index 05fe24a1708..00000000000 --- a/app/assets/images/emoji/older_man_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/older_woman.png b/app/assets/images/emoji/older_woman.png Binary files differdeleted file mode 100644 index 52dc4987143..00000000000 --- a/app/assets/images/emoji/older_woman.png +++ /dev/null diff --git a/app/assets/images/emoji/older_woman_tone1.png b/app/assets/images/emoji/older_woman_tone1.png Binary files differdeleted file mode 100644 index b49e821402c..00000000000 --- a/app/assets/images/emoji/older_woman_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/older_woman_tone2.png b/app/assets/images/emoji/older_woman_tone2.png Binary files differdeleted file mode 100644 index e86bf5ab3b7..00000000000 --- a/app/assets/images/emoji/older_woman_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/older_woman_tone3.png b/app/assets/images/emoji/older_woman_tone3.png Binary files differdeleted file mode 100644 index 83fc14b0874..00000000000 --- a/app/assets/images/emoji/older_woman_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/older_woman_tone4.png b/app/assets/images/emoji/older_woman_tone4.png Binary files differdeleted file mode 100644 index e4aa8a424d4..00000000000 --- a/app/assets/images/emoji/older_woman_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/older_woman_tone5.png b/app/assets/images/emoji/older_woman_tone5.png Binary files differdeleted file mode 100644 index 4009012bb0a..00000000000 --- a/app/assets/images/emoji/older_woman_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/om_symbol.png b/app/assets/images/emoji/om_symbol.png Binary files differdeleted file mode 100644 index a35c63c459c..00000000000 --- a/app/assets/images/emoji/om_symbol.png +++ /dev/null diff --git a/app/assets/images/emoji/on.png b/app/assets/images/emoji/on.png Binary files differdeleted file mode 100644 index a0c371ae21e..00000000000 --- a/app/assets/images/emoji/on.png +++ /dev/null diff --git a/app/assets/images/emoji/oncoming_automobile.png b/app/assets/images/emoji/oncoming_automobile.png Binary files differdeleted file mode 100644 index 3c7e1d52e63..00000000000 --- a/app/assets/images/emoji/oncoming_automobile.png +++ /dev/null diff --git a/app/assets/images/emoji/oncoming_bus.png b/app/assets/images/emoji/oncoming_bus.png Binary files differdeleted file mode 100644 index ad91e256c7f..00000000000 --- a/app/assets/images/emoji/oncoming_bus.png +++ /dev/null diff --git a/app/assets/images/emoji/oncoming_police_car.png b/app/assets/images/emoji/oncoming_police_car.png Binary files differdeleted file mode 100644 index c9109c85b5d..00000000000 --- a/app/assets/images/emoji/oncoming_police_car.png +++ /dev/null diff --git a/app/assets/images/emoji/oncoming_taxi.png b/app/assets/images/emoji/oncoming_taxi.png Binary files differdeleted file mode 100644 index fea14e45846..00000000000 --- a/app/assets/images/emoji/oncoming_taxi.png +++ /dev/null diff --git a/app/assets/images/emoji/one.png b/app/assets/images/emoji/one.png Binary files differdeleted file mode 100644 index e6d84b80128..00000000000 --- a/app/assets/images/emoji/one.png +++ /dev/null diff --git a/app/assets/images/emoji/open_file_folder.png b/app/assets/images/emoji/open_file_folder.png Binary files differdeleted file mode 100644 index 3993b09222f..00000000000 --- a/app/assets/images/emoji/open_file_folder.png +++ /dev/null diff --git a/app/assets/images/emoji/open_hands.png b/app/assets/images/emoji/open_hands.png Binary files differdeleted file mode 100644 index 1cf75c9101e..00000000000 --- a/app/assets/images/emoji/open_hands.png +++ /dev/null diff --git a/app/assets/images/emoji/open_hands_tone1.png b/app/assets/images/emoji/open_hands_tone1.png Binary files differdeleted file mode 100644 index 352d2614f11..00000000000 --- a/app/assets/images/emoji/open_hands_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/open_hands_tone2.png b/app/assets/images/emoji/open_hands_tone2.png Binary files differdeleted file mode 100644 index 70824a50c73..00000000000 --- a/app/assets/images/emoji/open_hands_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/open_hands_tone3.png b/app/assets/images/emoji/open_hands_tone3.png Binary files differdeleted file mode 100644 index d7d136bd3db..00000000000 --- a/app/assets/images/emoji/open_hands_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/open_hands_tone4.png b/app/assets/images/emoji/open_hands_tone4.png Binary files differdeleted file mode 100644 index df4eaa711e7..00000000000 --- a/app/assets/images/emoji/open_hands_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/open_hands_tone5.png b/app/assets/images/emoji/open_hands_tone5.png Binary files differdeleted file mode 100644 index 7dc04eaebd8..00000000000 --- a/app/assets/images/emoji/open_hands_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/open_mouth.png b/app/assets/images/emoji/open_mouth.png Binary files differdeleted file mode 100644 index a62cd27e148..00000000000 --- a/app/assets/images/emoji/open_mouth.png +++ /dev/null diff --git a/app/assets/images/emoji/ophiuchus.png b/app/assets/images/emoji/ophiuchus.png Binary files differdeleted file mode 100644 index 0a780a700da..00000000000 --- a/app/assets/images/emoji/ophiuchus.png +++ /dev/null diff --git a/app/assets/images/emoji/orange_book.png b/app/assets/images/emoji/orange_book.png Binary files differdeleted file mode 100644 index ab40e6ae6a2..00000000000 --- a/app/assets/images/emoji/orange_book.png +++ /dev/null diff --git a/app/assets/images/emoji/orthodox_cross.png b/app/assets/images/emoji/orthodox_cross.png Binary files differdeleted file mode 100644 index 0530e33a4d4..00000000000 --- a/app/assets/images/emoji/orthodox_cross.png +++ /dev/null diff --git a/app/assets/images/emoji/outbox_tray.png b/app/assets/images/emoji/outbox_tray.png Binary files differdeleted file mode 100644 index 46493ed5b2c..00000000000 --- a/app/assets/images/emoji/outbox_tray.png +++ /dev/null diff --git a/app/assets/images/emoji/owl.png b/app/assets/images/emoji/owl.png Binary files differdeleted file mode 100644 index fa6815480c3..00000000000 --- a/app/assets/images/emoji/owl.png +++ /dev/null diff --git a/app/assets/images/emoji/ox.png b/app/assets/images/emoji/ox.png Binary files differdeleted file mode 100644 index badf5708f2f..00000000000 --- a/app/assets/images/emoji/ox.png +++ /dev/null diff --git a/app/assets/images/emoji/package.png b/app/assets/images/emoji/package.png Binary files differdeleted file mode 100644 index 85431756ad8..00000000000 --- a/app/assets/images/emoji/package.png +++ /dev/null diff --git a/app/assets/images/emoji/page_facing_up.png b/app/assets/images/emoji/page_facing_up.png Binary files differdeleted file mode 100644 index ba4ed757e01..00000000000 --- a/app/assets/images/emoji/page_facing_up.png +++ /dev/null diff --git a/app/assets/images/emoji/page_with_curl.png b/app/assets/images/emoji/page_with_curl.png Binary files differdeleted file mode 100644 index 06355319c74..00000000000 --- a/app/assets/images/emoji/page_with_curl.png +++ /dev/null diff --git a/app/assets/images/emoji/pager.png b/app/assets/images/emoji/pager.png Binary files differdeleted file mode 100644 index b24b99306a2..00000000000 --- a/app/assets/images/emoji/pager.png +++ /dev/null diff --git a/app/assets/images/emoji/paintbrush.png b/app/assets/images/emoji/paintbrush.png Binary files differdeleted file mode 100644 index 28bffbaa3c9..00000000000 --- a/app/assets/images/emoji/paintbrush.png +++ /dev/null diff --git a/app/assets/images/emoji/palm_tree.png b/app/assets/images/emoji/palm_tree.png Binary files differdeleted file mode 100644 index 4bbb10f4f19..00000000000 --- a/app/assets/images/emoji/palm_tree.png +++ /dev/null diff --git a/app/assets/images/emoji/pancakes.png b/app/assets/images/emoji/pancakes.png Binary files differdeleted file mode 100644 index 6223d1a28e9..00000000000 --- a/app/assets/images/emoji/pancakes.png +++ /dev/null diff --git a/app/assets/images/emoji/panda_face.png b/app/assets/images/emoji/panda_face.png Binary files differdeleted file mode 100644 index 978382775ce..00000000000 --- a/app/assets/images/emoji/panda_face.png +++ /dev/null diff --git a/app/assets/images/emoji/paperclip.png b/app/assets/images/emoji/paperclip.png Binary files differdeleted file mode 100644 index 8cd8d4f8750..00000000000 --- a/app/assets/images/emoji/paperclip.png +++ /dev/null diff --git a/app/assets/images/emoji/paperclips.png b/app/assets/images/emoji/paperclips.png Binary files differdeleted file mode 100644 index 76021e8c705..00000000000 --- a/app/assets/images/emoji/paperclips.png +++ /dev/null diff --git a/app/assets/images/emoji/park.png b/app/assets/images/emoji/park.png Binary files differdeleted file mode 100644 index 63ec7016301..00000000000 --- a/app/assets/images/emoji/park.png +++ /dev/null diff --git a/app/assets/images/emoji/parking.png b/app/assets/images/emoji/parking.png Binary files differdeleted file mode 100644 index 7be7dac27e8..00000000000 --- a/app/assets/images/emoji/parking.png +++ /dev/null diff --git a/app/assets/images/emoji/part_alternation_mark.png b/app/assets/images/emoji/part_alternation_mark.png Binary files differdeleted file mode 100644 index 70453d41528..00000000000 --- a/app/assets/images/emoji/part_alternation_mark.png +++ /dev/null diff --git a/app/assets/images/emoji/partly_sunny.png b/app/assets/images/emoji/partly_sunny.png Binary files differdeleted file mode 100644 index a55e59c344c..00000000000 --- a/app/assets/images/emoji/partly_sunny.png +++ /dev/null diff --git a/app/assets/images/emoji/passport_control.png b/app/assets/images/emoji/passport_control.png Binary files differdeleted file mode 100644 index 079e34ee4d4..00000000000 --- a/app/assets/images/emoji/passport_control.png +++ /dev/null diff --git a/app/assets/images/emoji/pause_button.png b/app/assets/images/emoji/pause_button.png Binary files differdeleted file mode 100644 index 4f07e7ebfd7..00000000000 --- a/app/assets/images/emoji/pause_button.png +++ /dev/null diff --git a/app/assets/images/emoji/peace.png b/app/assets/images/emoji/peace.png Binary files differdeleted file mode 100644 index 86033faf477..00000000000 --- a/app/assets/images/emoji/peace.png +++ /dev/null diff --git a/app/assets/images/emoji/peach.png b/app/assets/images/emoji/peach.png Binary files differdeleted file mode 100644 index 9ab57cbb758..00000000000 --- a/app/assets/images/emoji/peach.png +++ /dev/null diff --git a/app/assets/images/emoji/peanuts.png b/app/assets/images/emoji/peanuts.png Binary files differdeleted file mode 100644 index b64fadad010..00000000000 --- a/app/assets/images/emoji/peanuts.png +++ /dev/null diff --git a/app/assets/images/emoji/pear.png b/app/assets/images/emoji/pear.png Binary files differdeleted file mode 100644 index 3869f718bcf..00000000000 --- a/app/assets/images/emoji/pear.png +++ /dev/null diff --git a/app/assets/images/emoji/pen_ballpoint.png b/app/assets/images/emoji/pen_ballpoint.png Binary files differdeleted file mode 100644 index 6ef7a342433..00000000000 --- a/app/assets/images/emoji/pen_ballpoint.png +++ /dev/null diff --git a/app/assets/images/emoji/pen_fountain.png b/app/assets/images/emoji/pen_fountain.png Binary files differdeleted file mode 100644 index 3ca4bd2c231..00000000000 --- a/app/assets/images/emoji/pen_fountain.png +++ /dev/null diff --git a/app/assets/images/emoji/pencil.png b/app/assets/images/emoji/pencil.png Binary files differdeleted file mode 100644 index edc6155e168..00000000000 --- a/app/assets/images/emoji/pencil.png +++ /dev/null diff --git a/app/assets/images/emoji/pencil2.png b/app/assets/images/emoji/pencil2.png Binary files differdeleted file mode 100644 index 3833d590fa2..00000000000 --- a/app/assets/images/emoji/pencil2.png +++ /dev/null diff --git a/app/assets/images/emoji/penguin.png b/app/assets/images/emoji/penguin.png Binary files differdeleted file mode 100644 index c0064fb9734..00000000000 --- a/app/assets/images/emoji/penguin.png +++ /dev/null diff --git a/app/assets/images/emoji/pensive.png b/app/assets/images/emoji/pensive.png Binary files differdeleted file mode 100644 index 490fb566954..00000000000 --- a/app/assets/images/emoji/pensive.png +++ /dev/null diff --git a/app/assets/images/emoji/performing_arts.png b/app/assets/images/emoji/performing_arts.png Binary files differdeleted file mode 100644 index 685441fdaa1..00000000000 --- a/app/assets/images/emoji/performing_arts.png +++ /dev/null diff --git a/app/assets/images/emoji/persevere.png b/app/assets/images/emoji/persevere.png Binary files differdeleted file mode 100644 index 646a05fe908..00000000000 --- a/app/assets/images/emoji/persevere.png +++ /dev/null diff --git a/app/assets/images/emoji/person_frowning.png b/app/assets/images/emoji/person_frowning.png Binary files differdeleted file mode 100644 index 579324959a1..00000000000 --- a/app/assets/images/emoji/person_frowning.png +++ /dev/null diff --git a/app/assets/images/emoji/person_frowning_tone1.png b/app/assets/images/emoji/person_frowning_tone1.png Binary files differdeleted file mode 100644 index 21d3bb43923..00000000000 --- a/app/assets/images/emoji/person_frowning_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/person_frowning_tone2.png b/app/assets/images/emoji/person_frowning_tone2.png Binary files differdeleted file mode 100644 index 973f5fc8382..00000000000 --- a/app/assets/images/emoji/person_frowning_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/person_frowning_tone3.png b/app/assets/images/emoji/person_frowning_tone3.png Binary files differdeleted file mode 100644 index 41fbcc78816..00000000000 --- a/app/assets/images/emoji/person_frowning_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/person_frowning_tone4.png b/app/assets/images/emoji/person_frowning_tone4.png Binary files differdeleted file mode 100644 index 5a37c741030..00000000000 --- a/app/assets/images/emoji/person_frowning_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/person_frowning_tone5.png b/app/assets/images/emoji/person_frowning_tone5.png Binary files differdeleted file mode 100644 index e08141f3efe..00000000000 --- a/app/assets/images/emoji/person_frowning_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_blond_hair.png b/app/assets/images/emoji/person_with_blond_hair.png Binary files differdeleted file mode 100644 index ad6f01a7dda..00000000000 --- a/app/assets/images/emoji/person_with_blond_hair.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_blond_hair_tone1.png b/app/assets/images/emoji/person_with_blond_hair_tone1.png Binary files differdeleted file mode 100644 index 7d18ef24445..00000000000 --- a/app/assets/images/emoji/person_with_blond_hair_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_blond_hair_tone2.png b/app/assets/images/emoji/person_with_blond_hair_tone2.png Binary files differdeleted file mode 100644 index dae1307315c..00000000000 --- a/app/assets/images/emoji/person_with_blond_hair_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_blond_hair_tone3.png b/app/assets/images/emoji/person_with_blond_hair_tone3.png Binary files differdeleted file mode 100644 index 684677e8e5a..00000000000 --- a/app/assets/images/emoji/person_with_blond_hair_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_blond_hair_tone4.png b/app/assets/images/emoji/person_with_blond_hair_tone4.png Binary files differdeleted file mode 100644 index 012be0b51f8..00000000000 --- a/app/assets/images/emoji/person_with_blond_hair_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_blond_hair_tone5.png b/app/assets/images/emoji/person_with_blond_hair_tone5.png Binary files differdeleted file mode 100644 index d4ecc4cf44b..00000000000 --- a/app/assets/images/emoji/person_with_blond_hair_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_pouting_face.png b/app/assets/images/emoji/person_with_pouting_face.png Binary files differdeleted file mode 100644 index 10eb0571078..00000000000 --- a/app/assets/images/emoji/person_with_pouting_face.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_pouting_face_tone1.png b/app/assets/images/emoji/person_with_pouting_face_tone1.png Binary files differdeleted file mode 100644 index 57e826b75a4..00000000000 --- a/app/assets/images/emoji/person_with_pouting_face_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_pouting_face_tone2.png b/app/assets/images/emoji/person_with_pouting_face_tone2.png Binary files differdeleted file mode 100644 index 3f317c0c25f..00000000000 --- a/app/assets/images/emoji/person_with_pouting_face_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_pouting_face_tone3.png b/app/assets/images/emoji/person_with_pouting_face_tone3.png Binary files differdeleted file mode 100644 index d2fbb6c20bf..00000000000 --- a/app/assets/images/emoji/person_with_pouting_face_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_pouting_face_tone4.png b/app/assets/images/emoji/person_with_pouting_face_tone4.png Binary files differdeleted file mode 100644 index 643ceb4a5c5..00000000000 --- a/app/assets/images/emoji/person_with_pouting_face_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/person_with_pouting_face_tone5.png b/app/assets/images/emoji/person_with_pouting_face_tone5.png Binary files differdeleted file mode 100644 index b2eb6859c32..00000000000 --- a/app/assets/images/emoji/person_with_pouting_face_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/pick.png b/app/assets/images/emoji/pick.png Binary files differdeleted file mode 100644 index 6370fe6d791..00000000000 --- a/app/assets/images/emoji/pick.png +++ /dev/null diff --git a/app/assets/images/emoji/pig.png b/app/assets/images/emoji/pig.png Binary files differdeleted file mode 100644 index afe05ca1676..00000000000 --- a/app/assets/images/emoji/pig.png +++ /dev/null diff --git a/app/assets/images/emoji/pig2.png b/app/assets/images/emoji/pig2.png Binary files differdeleted file mode 100644 index 5f31c1a2d75..00000000000 --- a/app/assets/images/emoji/pig2.png +++ /dev/null diff --git a/app/assets/images/emoji/pig_nose.png b/app/assets/images/emoji/pig_nose.png Binary files differdeleted file mode 100644 index 3610ae4a910..00000000000 --- a/app/assets/images/emoji/pig_nose.png +++ /dev/null diff --git a/app/assets/images/emoji/pill.png b/app/assets/images/emoji/pill.png Binary files differdeleted file mode 100644 index 1d4530e77a3..00000000000 --- a/app/assets/images/emoji/pill.png +++ /dev/null diff --git a/app/assets/images/emoji/pineapple.png b/app/assets/images/emoji/pineapple.png Binary files differdeleted file mode 100644 index c89a1606462..00000000000 --- a/app/assets/images/emoji/pineapple.png +++ /dev/null diff --git a/app/assets/images/emoji/ping_pong.png b/app/assets/images/emoji/ping_pong.png Binary files differdeleted file mode 100644 index ff3c51727d1..00000000000 --- a/app/assets/images/emoji/ping_pong.png +++ /dev/null diff --git a/app/assets/images/emoji/pisces.png b/app/assets/images/emoji/pisces.png Binary files differdeleted file mode 100644 index 7f6f646a95c..00000000000 --- a/app/assets/images/emoji/pisces.png +++ /dev/null diff --git a/app/assets/images/emoji/pizza.png b/app/assets/images/emoji/pizza.png Binary files differdeleted file mode 100644 index e07365cb398..00000000000 --- a/app/assets/images/emoji/pizza.png +++ /dev/null diff --git a/app/assets/images/emoji/place_of_worship.png b/app/assets/images/emoji/place_of_worship.png Binary files differdeleted file mode 100644 index 207d59cce85..00000000000 --- a/app/assets/images/emoji/place_of_worship.png +++ /dev/null diff --git a/app/assets/images/emoji/play_pause.png b/app/assets/images/emoji/play_pause.png Binary files differdeleted file mode 100644 index a9f857139ac..00000000000 --- a/app/assets/images/emoji/play_pause.png +++ /dev/null diff --git a/app/assets/images/emoji/point_down.png b/app/assets/images/emoji/point_down.png Binary files differdeleted file mode 100644 index 00d3d13ab5c..00000000000 --- a/app/assets/images/emoji/point_down.png +++ /dev/null diff --git a/app/assets/images/emoji/point_down_tone1.png b/app/assets/images/emoji/point_down_tone1.png Binary files differdeleted file mode 100644 index 140f157d8c7..00000000000 --- a/app/assets/images/emoji/point_down_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/point_down_tone2.png b/app/assets/images/emoji/point_down_tone2.png Binary files differdeleted file mode 100644 index d518544f7fa..00000000000 --- a/app/assets/images/emoji/point_down_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/point_down_tone3.png b/app/assets/images/emoji/point_down_tone3.png Binary files differdeleted file mode 100644 index 018b688b8b7..00000000000 --- a/app/assets/images/emoji/point_down_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/point_down_tone4.png b/app/assets/images/emoji/point_down_tone4.png Binary files differdeleted file mode 100644 index 98845bf6f72..00000000000 --- a/app/assets/images/emoji/point_down_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/point_down_tone5.png b/app/assets/images/emoji/point_down_tone5.png Binary files differdeleted file mode 100644 index 9a9b039a9fc..00000000000 --- a/app/assets/images/emoji/point_down_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/point_left.png b/app/assets/images/emoji/point_left.png Binary files differdeleted file mode 100644 index 599fa2e3cf1..00000000000 --- a/app/assets/images/emoji/point_left.png +++ /dev/null diff --git a/app/assets/images/emoji/point_left_tone1.png b/app/assets/images/emoji/point_left_tone1.png Binary files differdeleted file mode 100644 index 88e2c306076..00000000000 --- a/app/assets/images/emoji/point_left_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/point_left_tone2.png b/app/assets/images/emoji/point_left_tone2.png Binary files differdeleted file mode 100644 index d3c89d87c5f..00000000000 --- a/app/assets/images/emoji/point_left_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/point_left_tone3.png b/app/assets/images/emoji/point_left_tone3.png Binary files differdeleted file mode 100644 index b23b9167358..00000000000 --- a/app/assets/images/emoji/point_left_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/point_left_tone4.png b/app/assets/images/emoji/point_left_tone4.png Binary files differdeleted file mode 100644 index 3093f325c27..00000000000 --- a/app/assets/images/emoji/point_left_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/point_left_tone5.png b/app/assets/images/emoji/point_left_tone5.png Binary files differdeleted file mode 100644 index 2b4cbfa120c..00000000000 --- a/app/assets/images/emoji/point_left_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/point_right.png b/app/assets/images/emoji/point_right.png Binary files differdeleted file mode 100644 index 93a3cd34aa5..00000000000 --- a/app/assets/images/emoji/point_right.png +++ /dev/null diff --git a/app/assets/images/emoji/point_right_tone1.png b/app/assets/images/emoji/point_right_tone1.png Binary files differdeleted file mode 100644 index 4a28c6bbc89..00000000000 --- a/app/assets/images/emoji/point_right_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/point_right_tone2.png b/app/assets/images/emoji/point_right_tone2.png Binary files differdeleted file mode 100644 index 7cb13231733..00000000000 --- a/app/assets/images/emoji/point_right_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/point_right_tone3.png b/app/assets/images/emoji/point_right_tone3.png Binary files differdeleted file mode 100644 index 5514807d71a..00000000000 --- a/app/assets/images/emoji/point_right_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/point_right_tone4.png b/app/assets/images/emoji/point_right_tone4.png Binary files differdeleted file mode 100644 index b8541d6440d..00000000000 --- a/app/assets/images/emoji/point_right_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/point_right_tone5.png b/app/assets/images/emoji/point_right_tone5.png Binary files differdeleted file mode 100644 index 1b7aab07bb1..00000000000 --- a/app/assets/images/emoji/point_right_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up.png b/app/assets/images/emoji/point_up.png Binary files differdeleted file mode 100644 index f4978ff0f00..00000000000 --- a/app/assets/images/emoji/point_up.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_2.png b/app/assets/images/emoji/point_up_2.png Binary files differdeleted file mode 100644 index bc496dfeae4..00000000000 --- a/app/assets/images/emoji/point_up_2.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_2_tone1.png b/app/assets/images/emoji/point_up_2_tone1.png Binary files differdeleted file mode 100644 index a12a7e78430..00000000000 --- a/app/assets/images/emoji/point_up_2_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_2_tone2.png b/app/assets/images/emoji/point_up_2_tone2.png Binary files differdeleted file mode 100644 index cdff40ceab0..00000000000 --- a/app/assets/images/emoji/point_up_2_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_2_tone3.png b/app/assets/images/emoji/point_up_2_tone3.png Binary files differdeleted file mode 100644 index a07ce9e5ae8..00000000000 --- a/app/assets/images/emoji/point_up_2_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_2_tone4.png b/app/assets/images/emoji/point_up_2_tone4.png Binary files differdeleted file mode 100644 index 4f86c88ba42..00000000000 --- a/app/assets/images/emoji/point_up_2_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_2_tone5.png b/app/assets/images/emoji/point_up_2_tone5.png Binary files differdeleted file mode 100644 index ed1b26c35d3..00000000000 --- a/app/assets/images/emoji/point_up_2_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_tone1.png b/app/assets/images/emoji/point_up_tone1.png Binary files differdeleted file mode 100644 index 6a9db21d64c..00000000000 --- a/app/assets/images/emoji/point_up_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_tone2.png b/app/assets/images/emoji/point_up_tone2.png Binary files differdeleted file mode 100644 index 15aa9ea0e05..00000000000 --- a/app/assets/images/emoji/point_up_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_tone3.png b/app/assets/images/emoji/point_up_tone3.png Binary files differdeleted file mode 100644 index 652b73a9c5d..00000000000 --- a/app/assets/images/emoji/point_up_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_tone4.png b/app/assets/images/emoji/point_up_tone4.png Binary files differdeleted file mode 100644 index 692bad926e9..00000000000 --- a/app/assets/images/emoji/point_up_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/point_up_tone5.png b/app/assets/images/emoji/point_up_tone5.png Binary files differdeleted file mode 100644 index 1e1b10fb71c..00000000000 --- a/app/assets/images/emoji/point_up_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/police_car.png b/app/assets/images/emoji/police_car.png Binary files differdeleted file mode 100644 index 3da4253de7e..00000000000 --- a/app/assets/images/emoji/police_car.png +++ /dev/null diff --git a/app/assets/images/emoji/poodle.png b/app/assets/images/emoji/poodle.png Binary files differdeleted file mode 100644 index 8ec39e396af..00000000000 --- a/app/assets/images/emoji/poodle.png +++ /dev/null diff --git a/app/assets/images/emoji/poop.png b/app/assets/images/emoji/poop.png Binary files differdeleted file mode 100644 index 10b15e72d56..00000000000 --- a/app/assets/images/emoji/poop.png +++ /dev/null diff --git a/app/assets/images/emoji/popcorn.png b/app/assets/images/emoji/popcorn.png Binary files differdeleted file mode 100644 index 36853e381d4..00000000000 --- a/app/assets/images/emoji/popcorn.png +++ /dev/null diff --git a/app/assets/images/emoji/post_office.png b/app/assets/images/emoji/post_office.png Binary files differdeleted file mode 100644 index a23848f9aa0..00000000000 --- a/app/assets/images/emoji/post_office.png +++ /dev/null diff --git a/app/assets/images/emoji/postal_horn.png b/app/assets/images/emoji/postal_horn.png Binary files differdeleted file mode 100644 index c173b8dbd67..00000000000 --- a/app/assets/images/emoji/postal_horn.png +++ /dev/null diff --git a/app/assets/images/emoji/postbox.png b/app/assets/images/emoji/postbox.png Binary files differdeleted file mode 100644 index 07c9c4ab3d6..00000000000 --- a/app/assets/images/emoji/postbox.png +++ /dev/null diff --git a/app/assets/images/emoji/potable_water.png b/app/assets/images/emoji/potable_water.png Binary files differdeleted file mode 100644 index 2c610049459..00000000000 --- a/app/assets/images/emoji/potable_water.png +++ /dev/null diff --git a/app/assets/images/emoji/potato.png b/app/assets/images/emoji/potato.png Binary files differdeleted file mode 100644 index 70350ca2c0a..00000000000 --- a/app/assets/images/emoji/potato.png +++ /dev/null diff --git a/app/assets/images/emoji/pouch.png b/app/assets/images/emoji/pouch.png Binary files differdeleted file mode 100644 index 8795c6c66ff..00000000000 --- a/app/assets/images/emoji/pouch.png +++ /dev/null diff --git a/app/assets/images/emoji/poultry_leg.png b/app/assets/images/emoji/poultry_leg.png Binary files differdeleted file mode 100644 index eea4a53a2f9..00000000000 --- a/app/assets/images/emoji/poultry_leg.png +++ /dev/null diff --git a/app/assets/images/emoji/pound.png b/app/assets/images/emoji/pound.png Binary files differdeleted file mode 100644 index a0d4c4099e9..00000000000 --- a/app/assets/images/emoji/pound.png +++ /dev/null diff --git a/app/assets/images/emoji/pouting_cat.png b/app/assets/images/emoji/pouting_cat.png Binary files differdeleted file mode 100644 index 41ddfeab42b..00000000000 --- a/app/assets/images/emoji/pouting_cat.png +++ /dev/null diff --git a/app/assets/images/emoji/pray.png b/app/assets/images/emoji/pray.png Binary files differdeleted file mode 100644 index 8347f2435be..00000000000 --- a/app/assets/images/emoji/pray.png +++ /dev/null diff --git a/app/assets/images/emoji/pray_tone1.png b/app/assets/images/emoji/pray_tone1.png Binary files differdeleted file mode 100644 index 060ef257172..00000000000 --- a/app/assets/images/emoji/pray_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/pray_tone2.png b/app/assets/images/emoji/pray_tone2.png Binary files differdeleted file mode 100644 index 56dc607c07a..00000000000 --- a/app/assets/images/emoji/pray_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/pray_tone3.png b/app/assets/images/emoji/pray_tone3.png Binary files differdeleted file mode 100644 index 0f33b862008..00000000000 --- a/app/assets/images/emoji/pray_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/pray_tone4.png b/app/assets/images/emoji/pray_tone4.png Binary files differdeleted file mode 100644 index 2ea8dc11657..00000000000 --- a/app/assets/images/emoji/pray_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/pray_tone5.png b/app/assets/images/emoji/pray_tone5.png Binary files differdeleted file mode 100644 index 2128a6c4703..00000000000 --- a/app/assets/images/emoji/pray_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/prayer_beads.png b/app/assets/images/emoji/prayer_beads.png Binary files differdeleted file mode 100644 index a4b6dfcc62e..00000000000 --- a/app/assets/images/emoji/prayer_beads.png +++ /dev/null diff --git a/app/assets/images/emoji/pregnant_woman.png b/app/assets/images/emoji/pregnant_woman.png Binary files differdeleted file mode 100644 index 084e83a414a..00000000000 --- a/app/assets/images/emoji/pregnant_woman.png +++ /dev/null diff --git a/app/assets/images/emoji/pregnant_woman_tone1.png b/app/assets/images/emoji/pregnant_woman_tone1.png Binary files differdeleted file mode 100644 index a78703b33aa..00000000000 --- a/app/assets/images/emoji/pregnant_woman_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/pregnant_woman_tone2.png b/app/assets/images/emoji/pregnant_woman_tone2.png Binary files differdeleted file mode 100644 index 0068c6c4a77..00000000000 --- a/app/assets/images/emoji/pregnant_woman_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/pregnant_woman_tone3.png b/app/assets/images/emoji/pregnant_woman_tone3.png Binary files differdeleted file mode 100644 index 3206296b684..00000000000 --- a/app/assets/images/emoji/pregnant_woman_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/pregnant_woman_tone4.png b/app/assets/images/emoji/pregnant_woman_tone4.png Binary files differdeleted file mode 100644 index 120fda5cd8c..00000000000 --- a/app/assets/images/emoji/pregnant_woman_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/pregnant_woman_tone5.png b/app/assets/images/emoji/pregnant_woman_tone5.png Binary files differdeleted file mode 100644 index 569bfdf05ce..00000000000 --- a/app/assets/images/emoji/pregnant_woman_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/prince.png b/app/assets/images/emoji/prince.png Binary files differdeleted file mode 100644 index 38d69344c84..00000000000 --- a/app/assets/images/emoji/prince.png +++ /dev/null diff --git a/app/assets/images/emoji/prince_tone1.png b/app/assets/images/emoji/prince_tone1.png Binary files differdeleted file mode 100644 index 849930c8887..00000000000 --- a/app/assets/images/emoji/prince_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/prince_tone2.png b/app/assets/images/emoji/prince_tone2.png Binary files differdeleted file mode 100644 index 23d8b3b1285..00000000000 --- a/app/assets/images/emoji/prince_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/prince_tone3.png b/app/assets/images/emoji/prince_tone3.png Binary files differdeleted file mode 100644 index db6dfff0647..00000000000 --- a/app/assets/images/emoji/prince_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/prince_tone4.png b/app/assets/images/emoji/prince_tone4.png Binary files differdeleted file mode 100644 index 8e10f8be6a8..00000000000 --- a/app/assets/images/emoji/prince_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/prince_tone5.png b/app/assets/images/emoji/prince_tone5.png Binary files differdeleted file mode 100644 index 138d4ea7048..00000000000 --- a/app/assets/images/emoji/prince_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/princess.png b/app/assets/images/emoji/princess.png Binary files differdeleted file mode 100644 index 879e9fa8c5d..00000000000 --- a/app/assets/images/emoji/princess.png +++ /dev/null diff --git a/app/assets/images/emoji/princess_tone1.png b/app/assets/images/emoji/princess_tone1.png Binary files differdeleted file mode 100644 index c28078cdc36..00000000000 --- a/app/assets/images/emoji/princess_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/princess_tone2.png b/app/assets/images/emoji/princess_tone2.png Binary files differdeleted file mode 100644 index dcd20e6ecd4..00000000000 --- a/app/assets/images/emoji/princess_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/princess_tone3.png b/app/assets/images/emoji/princess_tone3.png Binary files differdeleted file mode 100644 index cde6f315c56..00000000000 --- a/app/assets/images/emoji/princess_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/princess_tone4.png b/app/assets/images/emoji/princess_tone4.png Binary files differdeleted file mode 100644 index c71e69caaef..00000000000 --- a/app/assets/images/emoji/princess_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/princess_tone5.png b/app/assets/images/emoji/princess_tone5.png Binary files differdeleted file mode 100644 index 063e2645910..00000000000 --- a/app/assets/images/emoji/princess_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/printer.png b/app/assets/images/emoji/printer.png Binary files differdeleted file mode 100644 index 027c830f0fe..00000000000 --- a/app/assets/images/emoji/printer.png +++ /dev/null diff --git a/app/assets/images/emoji/projector.png b/app/assets/images/emoji/projector.png Binary files differdeleted file mode 100644 index ce9ab0daa28..00000000000 --- a/app/assets/images/emoji/projector.png +++ /dev/null diff --git a/app/assets/images/emoji/punch.png b/app/assets/images/emoji/punch.png Binary files differdeleted file mode 100644 index b14ca5f5211..00000000000 --- a/app/assets/images/emoji/punch.png +++ /dev/null diff --git a/app/assets/images/emoji/punch_tone1.png b/app/assets/images/emoji/punch_tone1.png Binary files differdeleted file mode 100644 index 93c7d17fb47..00000000000 --- a/app/assets/images/emoji/punch_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/punch_tone2.png b/app/assets/images/emoji/punch_tone2.png Binary files differdeleted file mode 100644 index c0a1af6e10a..00000000000 --- a/app/assets/images/emoji/punch_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/punch_tone3.png b/app/assets/images/emoji/punch_tone3.png Binary files differdeleted file mode 100644 index 1458b021201..00000000000 --- a/app/assets/images/emoji/punch_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/punch_tone4.png b/app/assets/images/emoji/punch_tone4.png Binary files differdeleted file mode 100644 index c1466bfcdef..00000000000 --- a/app/assets/images/emoji/punch_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/punch_tone5.png b/app/assets/images/emoji/punch_tone5.png Binary files differdeleted file mode 100644 index 00b4ddb8953..00000000000 --- a/app/assets/images/emoji/punch_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/purple_heart.png b/app/assets/images/emoji/purple_heart.png Binary files differdeleted file mode 100644 index 95c53a9ade6..00000000000 --- a/app/assets/images/emoji/purple_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/purse.png b/app/assets/images/emoji/purse.png Binary files differdeleted file mode 100644 index 981346193c5..00000000000 --- a/app/assets/images/emoji/purse.png +++ /dev/null diff --git a/app/assets/images/emoji/pushpin.png b/app/assets/images/emoji/pushpin.png Binary files differdeleted file mode 100644 index 57e07d7f4cc..00000000000 --- a/app/assets/images/emoji/pushpin.png +++ /dev/null diff --git a/app/assets/images/emoji/put_litter_in_its_place.png b/app/assets/images/emoji/put_litter_in_its_place.png Binary files differdeleted file mode 100644 index 82a84f9a375..00000000000 --- a/app/assets/images/emoji/put_litter_in_its_place.png +++ /dev/null diff --git a/app/assets/images/emoji/question.png b/app/assets/images/emoji/question.png Binary files differdeleted file mode 100644 index 5a58f3458aa..00000000000 --- a/app/assets/images/emoji/question.png +++ /dev/null diff --git a/app/assets/images/emoji/rabbit.png b/app/assets/images/emoji/rabbit.png Binary files differdeleted file mode 100644 index ea75ab0426e..00000000000 --- a/app/assets/images/emoji/rabbit.png +++ /dev/null diff --git a/app/assets/images/emoji/rabbit2.png b/app/assets/images/emoji/rabbit2.png Binary files differdeleted file mode 100644 index 2c8a29c642f..00000000000 --- a/app/assets/images/emoji/rabbit2.png +++ /dev/null diff --git a/app/assets/images/emoji/race_car.png b/app/assets/images/emoji/race_car.png Binary files differdeleted file mode 100644 index fe3f045f446..00000000000 --- a/app/assets/images/emoji/race_car.png +++ /dev/null diff --git a/app/assets/images/emoji/racehorse.png b/app/assets/images/emoji/racehorse.png Binary files differdeleted file mode 100644 index b3e73cc8903..00000000000 --- a/app/assets/images/emoji/racehorse.png +++ /dev/null diff --git a/app/assets/images/emoji/radio.png b/app/assets/images/emoji/radio.png Binary files differdeleted file mode 100644 index dec381fa242..00000000000 --- a/app/assets/images/emoji/radio.png +++ /dev/null diff --git a/app/assets/images/emoji/radio_button.png b/app/assets/images/emoji/radio_button.png Binary files differdeleted file mode 100644 index 3a23449d917..00000000000 --- a/app/assets/images/emoji/radio_button.png +++ /dev/null diff --git a/app/assets/images/emoji/radioactive.png b/app/assets/images/emoji/radioactive.png Binary files differdeleted file mode 100644 index 3b46199fe37..00000000000 --- a/app/assets/images/emoji/radioactive.png +++ /dev/null diff --git a/app/assets/images/emoji/rage.png b/app/assets/images/emoji/rage.png Binary files differdeleted file mode 100644 index 9d739bd40ad..00000000000 --- a/app/assets/images/emoji/rage.png +++ /dev/null diff --git a/app/assets/images/emoji/railway_car.png b/app/assets/images/emoji/railway_car.png Binary files differdeleted file mode 100644 index a9acbf13008..00000000000 --- a/app/assets/images/emoji/railway_car.png +++ /dev/null diff --git a/app/assets/images/emoji/railway_track.png b/app/assets/images/emoji/railway_track.png Binary files differdeleted file mode 100644 index e1a7a0d1430..00000000000 --- a/app/assets/images/emoji/railway_track.png +++ /dev/null diff --git a/app/assets/images/emoji/rainbow.png b/app/assets/images/emoji/rainbow.png Binary files differdeleted file mode 100644 index 154735d7147..00000000000 --- a/app/assets/images/emoji/rainbow.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_back_of_hand.png b/app/assets/images/emoji/raised_back_of_hand.png Binary files differdeleted file mode 100644 index 479234294b4..00000000000 --- a/app/assets/images/emoji/raised_back_of_hand.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_back_of_hand_tone1.png b/app/assets/images/emoji/raised_back_of_hand_tone1.png Binary files differdeleted file mode 100644 index 813d28499b5..00000000000 --- a/app/assets/images/emoji/raised_back_of_hand_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_back_of_hand_tone2.png b/app/assets/images/emoji/raised_back_of_hand_tone2.png Binary files differdeleted file mode 100644 index 192ff795e37..00000000000 --- a/app/assets/images/emoji/raised_back_of_hand_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_back_of_hand_tone3.png b/app/assets/images/emoji/raised_back_of_hand_tone3.png Binary files differdeleted file mode 100644 index 61a727abe6b..00000000000 --- a/app/assets/images/emoji/raised_back_of_hand_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_back_of_hand_tone4.png b/app/assets/images/emoji/raised_back_of_hand_tone4.png Binary files differdeleted file mode 100644 index 2e83da511f5..00000000000 --- a/app/assets/images/emoji/raised_back_of_hand_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_back_of_hand_tone5.png b/app/assets/images/emoji/raised_back_of_hand_tone5.png Binary files differdeleted file mode 100644 index d7a5b95a02c..00000000000 --- a/app/assets/images/emoji/raised_back_of_hand_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hand.png b/app/assets/images/emoji/raised_hand.png Binary files differdeleted file mode 100644 index 6b2954315d1..00000000000 --- a/app/assets/images/emoji/raised_hand.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hand_tone1.png b/app/assets/images/emoji/raised_hand_tone1.png Binary files differdeleted file mode 100644 index 3b752902c07..00000000000 --- a/app/assets/images/emoji/raised_hand_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hand_tone2.png b/app/assets/images/emoji/raised_hand_tone2.png Binary files differdeleted file mode 100644 index 44e2a514c60..00000000000 --- a/app/assets/images/emoji/raised_hand_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hand_tone3.png b/app/assets/images/emoji/raised_hand_tone3.png Binary files differdeleted file mode 100644 index 5bb62a7528a..00000000000 --- a/app/assets/images/emoji/raised_hand_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hand_tone4.png b/app/assets/images/emoji/raised_hand_tone4.png Binary files differdeleted file mode 100644 index c7f8c9ec270..00000000000 --- a/app/assets/images/emoji/raised_hand_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hand_tone5.png b/app/assets/images/emoji/raised_hand_tone5.png Binary files differdeleted file mode 100644 index c601b58a73e..00000000000 --- a/app/assets/images/emoji/raised_hand_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hands.png b/app/assets/images/emoji/raised_hands.png Binary files differdeleted file mode 100644 index c0155f728e7..00000000000 --- a/app/assets/images/emoji/raised_hands.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hands_tone1.png b/app/assets/images/emoji/raised_hands_tone1.png Binary files differdeleted file mode 100644 index 1168b8236b6..00000000000 --- a/app/assets/images/emoji/raised_hands_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hands_tone2.png b/app/assets/images/emoji/raised_hands_tone2.png Binary files differdeleted file mode 100644 index 322de622903..00000000000 --- a/app/assets/images/emoji/raised_hands_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hands_tone3.png b/app/assets/images/emoji/raised_hands_tone3.png Binary files differdeleted file mode 100644 index 2aa24e05ae1..00000000000 --- a/app/assets/images/emoji/raised_hands_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hands_tone4.png b/app/assets/images/emoji/raised_hands_tone4.png Binary files differdeleted file mode 100644 index f31bf0db992..00000000000 --- a/app/assets/images/emoji/raised_hands_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/raised_hands_tone5.png b/app/assets/images/emoji/raised_hands_tone5.png Binary files differdeleted file mode 100644 index 5e95067f98b..00000000000 --- a/app/assets/images/emoji/raised_hands_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/raising_hand.png b/app/assets/images/emoji/raising_hand.png Binary files differdeleted file mode 100644 index 2880708c0cc..00000000000 --- a/app/assets/images/emoji/raising_hand.png +++ /dev/null diff --git a/app/assets/images/emoji/raising_hand_tone1.png b/app/assets/images/emoji/raising_hand_tone1.png Binary files differdeleted file mode 100644 index 1c90e3e2689..00000000000 --- a/app/assets/images/emoji/raising_hand_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/raising_hand_tone2.png b/app/assets/images/emoji/raising_hand_tone2.png Binary files differdeleted file mode 100644 index 82c3ef2bfc5..00000000000 --- a/app/assets/images/emoji/raising_hand_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/raising_hand_tone3.png b/app/assets/images/emoji/raising_hand_tone3.png Binary files differdeleted file mode 100644 index 1b1da2aa0ca..00000000000 --- a/app/assets/images/emoji/raising_hand_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/raising_hand_tone4.png b/app/assets/images/emoji/raising_hand_tone4.png Binary files differdeleted file mode 100644 index e453855c01f..00000000000 --- a/app/assets/images/emoji/raising_hand_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/raising_hand_tone5.png b/app/assets/images/emoji/raising_hand_tone5.png Binary files differdeleted file mode 100644 index b86200fd844..00000000000 --- a/app/assets/images/emoji/raising_hand_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/ram.png b/app/assets/images/emoji/ram.png Binary files differdeleted file mode 100644 index 52a44464c9b..00000000000 --- a/app/assets/images/emoji/ram.png +++ /dev/null diff --git a/app/assets/images/emoji/ramen.png b/app/assets/images/emoji/ramen.png Binary files differdeleted file mode 100644 index c1cb7cd7384..00000000000 --- a/app/assets/images/emoji/ramen.png +++ /dev/null diff --git a/app/assets/images/emoji/rat.png b/app/assets/images/emoji/rat.png Binary files differdeleted file mode 100644 index 86219144f10..00000000000 --- a/app/assets/images/emoji/rat.png +++ /dev/null diff --git a/app/assets/images/emoji/record_button.png b/app/assets/images/emoji/record_button.png Binary files differdeleted file mode 100644 index ada52830fce..00000000000 --- a/app/assets/images/emoji/record_button.png +++ /dev/null diff --git a/app/assets/images/emoji/recycle.png b/app/assets/images/emoji/recycle.png Binary files differdeleted file mode 100644 index 9221f095c37..00000000000 --- a/app/assets/images/emoji/recycle.png +++ /dev/null diff --git a/app/assets/images/emoji/red_car.png b/app/assets/images/emoji/red_car.png Binary files differdeleted file mode 100644 index b3e6a774dea..00000000000 --- a/app/assets/images/emoji/red_car.png +++ /dev/null diff --git a/app/assets/images/emoji/red_circle.png b/app/assets/images/emoji/red_circle.png Binary files differdeleted file mode 100644 index 4bef930d92f..00000000000 --- a/app/assets/images/emoji/red_circle.png +++ /dev/null diff --git a/app/assets/images/emoji/registered.png b/app/assets/images/emoji/registered.png Binary files differdeleted file mode 100644 index 53ef9f2d4e6..00000000000 --- a/app/assets/images/emoji/registered.png +++ /dev/null diff --git a/app/assets/images/emoji/relaxed.png b/app/assets/images/emoji/relaxed.png Binary files differdeleted file mode 100644 index e9e53c03d45..00000000000 --- a/app/assets/images/emoji/relaxed.png +++ /dev/null diff --git a/app/assets/images/emoji/relieved.png b/app/assets/images/emoji/relieved.png Binary files differdeleted file mode 100644 index 715ad0bf53f..00000000000 --- a/app/assets/images/emoji/relieved.png +++ /dev/null diff --git a/app/assets/images/emoji/reminder_ribbon.png b/app/assets/images/emoji/reminder_ribbon.png Binary files differdeleted file mode 100644 index 3988bbd094c..00000000000 --- a/app/assets/images/emoji/reminder_ribbon.png +++ /dev/null diff --git a/app/assets/images/emoji/repeat.png b/app/assets/images/emoji/repeat.png Binary files differdeleted file mode 100644 index 540ce4e0fba..00000000000 --- a/app/assets/images/emoji/repeat.png +++ /dev/null diff --git a/app/assets/images/emoji/repeat_one.png b/app/assets/images/emoji/repeat_one.png Binary files differdeleted file mode 100644 index 9567e83337f..00000000000 --- a/app/assets/images/emoji/repeat_one.png +++ /dev/null diff --git a/app/assets/images/emoji/restroom.png b/app/assets/images/emoji/restroom.png Binary files differdeleted file mode 100644 index 9588e0f0ef7..00000000000 --- a/app/assets/images/emoji/restroom.png +++ /dev/null diff --git a/app/assets/images/emoji/revolving_hearts.png b/app/assets/images/emoji/revolving_hearts.png Binary files differdeleted file mode 100644 index 7b9d1948f73..00000000000 --- a/app/assets/images/emoji/revolving_hearts.png +++ /dev/null diff --git a/app/assets/images/emoji/rewind.png b/app/assets/images/emoji/rewind.png Binary files differdeleted file mode 100644 index e22e2bd3da5..00000000000 --- a/app/assets/images/emoji/rewind.png +++ /dev/null diff --git a/app/assets/images/emoji/rhino.png b/app/assets/images/emoji/rhino.png Binary files differdeleted file mode 100644 index 12f4e0d9d9b..00000000000 --- a/app/assets/images/emoji/rhino.png +++ /dev/null diff --git a/app/assets/images/emoji/ribbon.png b/app/assets/images/emoji/ribbon.png Binary files differdeleted file mode 100644 index 0f253c3d8c8..00000000000 --- a/app/assets/images/emoji/ribbon.png +++ /dev/null diff --git a/app/assets/images/emoji/rice.png b/app/assets/images/emoji/rice.png Binary files differdeleted file mode 100644 index 6e3ac7956b1..00000000000 --- a/app/assets/images/emoji/rice.png +++ /dev/null diff --git a/app/assets/images/emoji/rice_ball.png b/app/assets/images/emoji/rice_ball.png Binary files differdeleted file mode 100644 index d3d8ee25cb8..00000000000 --- a/app/assets/images/emoji/rice_ball.png +++ /dev/null diff --git a/app/assets/images/emoji/rice_cracker.png b/app/assets/images/emoji/rice_cracker.png Binary files differdeleted file mode 100644 index 7fbd08e4ff9..00000000000 --- a/app/assets/images/emoji/rice_cracker.png +++ /dev/null diff --git a/app/assets/images/emoji/rice_scene.png b/app/assets/images/emoji/rice_scene.png Binary files differdeleted file mode 100644 index 1a28426592a..00000000000 --- a/app/assets/images/emoji/rice_scene.png +++ /dev/null diff --git a/app/assets/images/emoji/right_facing_fist.png b/app/assets/images/emoji/right_facing_fist.png Binary files differdeleted file mode 100644 index 754ed066d2c..00000000000 --- a/app/assets/images/emoji/right_facing_fist.png +++ /dev/null diff --git a/app/assets/images/emoji/right_facing_fist_tone1.png b/app/assets/images/emoji/right_facing_fist_tone1.png Binary files differdeleted file mode 100644 index 33ded2f61a6..00000000000 --- a/app/assets/images/emoji/right_facing_fist_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/right_facing_fist_tone2.png b/app/assets/images/emoji/right_facing_fist_tone2.png Binary files differdeleted file mode 100644 index 88054e335c7..00000000000 --- a/app/assets/images/emoji/right_facing_fist_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/right_facing_fist_tone3.png b/app/assets/images/emoji/right_facing_fist_tone3.png Binary files differdeleted file mode 100644 index 84b9f5da7f7..00000000000 --- a/app/assets/images/emoji/right_facing_fist_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/right_facing_fist_tone4.png b/app/assets/images/emoji/right_facing_fist_tone4.png Binary files differdeleted file mode 100644 index e741cfea68b..00000000000 --- a/app/assets/images/emoji/right_facing_fist_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/right_facing_fist_tone5.png b/app/assets/images/emoji/right_facing_fist_tone5.png Binary files differdeleted file mode 100644 index cf66d760c1f..00000000000 --- a/app/assets/images/emoji/right_facing_fist_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/ring.png b/app/assets/images/emoji/ring.png Binary files differdeleted file mode 100644 index 87d227adb74..00000000000 --- a/app/assets/images/emoji/ring.png +++ /dev/null diff --git a/app/assets/images/emoji/robot.png b/app/assets/images/emoji/robot.png Binary files differdeleted file mode 100644 index 7cc62612c6a..00000000000 --- a/app/assets/images/emoji/robot.png +++ /dev/null diff --git a/app/assets/images/emoji/rocket.png b/app/assets/images/emoji/rocket.png Binary files differdeleted file mode 100644 index 0d8da089a37..00000000000 --- a/app/assets/images/emoji/rocket.png +++ /dev/null diff --git a/app/assets/images/emoji/rofl.png b/app/assets/images/emoji/rofl.png Binary files differdeleted file mode 100644 index b1736fedfeb..00000000000 --- a/app/assets/images/emoji/rofl.png +++ /dev/null diff --git a/app/assets/images/emoji/roller_coaster.png b/app/assets/images/emoji/roller_coaster.png Binary files differdeleted file mode 100644 index 5b849e071e8..00000000000 --- a/app/assets/images/emoji/roller_coaster.png +++ /dev/null diff --git a/app/assets/images/emoji/rolling_eyes.png b/app/assets/images/emoji/rolling_eyes.png Binary files differdeleted file mode 100644 index 2f77b9fc3b9..00000000000 --- a/app/assets/images/emoji/rolling_eyes.png +++ /dev/null diff --git a/app/assets/images/emoji/rooster.png b/app/assets/images/emoji/rooster.png Binary files differdeleted file mode 100644 index bbf2bbff97a..00000000000 --- a/app/assets/images/emoji/rooster.png +++ /dev/null diff --git a/app/assets/images/emoji/rose.png b/app/assets/images/emoji/rose.png Binary files differdeleted file mode 100644 index 52c286d31ce..00000000000 --- a/app/assets/images/emoji/rose.png +++ /dev/null diff --git a/app/assets/images/emoji/rosette.png b/app/assets/images/emoji/rosette.png Binary files differdeleted file mode 100644 index 8030e494bcf..00000000000 --- a/app/assets/images/emoji/rosette.png +++ /dev/null diff --git a/app/assets/images/emoji/rotating_light.png b/app/assets/images/emoji/rotating_light.png Binary files differdeleted file mode 100644 index cad66b0afef..00000000000 --- a/app/assets/images/emoji/rotating_light.png +++ /dev/null diff --git a/app/assets/images/emoji/round_pushpin.png b/app/assets/images/emoji/round_pushpin.png Binary files differdeleted file mode 100644 index 28b9d72866e..00000000000 --- a/app/assets/images/emoji/round_pushpin.png +++ /dev/null diff --git a/app/assets/images/emoji/rowboat.png b/app/assets/images/emoji/rowboat.png Binary files differdeleted file mode 100644 index dd4dfc095d9..00000000000 --- a/app/assets/images/emoji/rowboat.png +++ /dev/null diff --git a/app/assets/images/emoji/rowboat_tone1.png b/app/assets/images/emoji/rowboat_tone1.png Binary files differdeleted file mode 100644 index 5e5d18548cb..00000000000 --- a/app/assets/images/emoji/rowboat_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/rowboat_tone2.png b/app/assets/images/emoji/rowboat_tone2.png Binary files differdeleted file mode 100644 index 9b123ef8871..00000000000 --- a/app/assets/images/emoji/rowboat_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/rowboat_tone3.png b/app/assets/images/emoji/rowboat_tone3.png Binary files differdeleted file mode 100644 index 8ebd89a55f5..00000000000 --- a/app/assets/images/emoji/rowboat_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/rowboat_tone4.png b/app/assets/images/emoji/rowboat_tone4.png Binary files differdeleted file mode 100644 index 2b0d04f8725..00000000000 --- a/app/assets/images/emoji/rowboat_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/rowboat_tone5.png b/app/assets/images/emoji/rowboat_tone5.png Binary files differdeleted file mode 100644 index b346f2dfc84..00000000000 --- a/app/assets/images/emoji/rowboat_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/rugby_football.png b/app/assets/images/emoji/rugby_football.png Binary files differdeleted file mode 100644 index b1872273436..00000000000 --- a/app/assets/images/emoji/rugby_football.png +++ /dev/null diff --git a/app/assets/images/emoji/runner.png b/app/assets/images/emoji/runner.png Binary files differdeleted file mode 100644 index e914915976a..00000000000 --- a/app/assets/images/emoji/runner.png +++ /dev/null diff --git a/app/assets/images/emoji/runner_tone1.png b/app/assets/images/emoji/runner_tone1.png Binary files differdeleted file mode 100644 index 9355239a52d..00000000000 --- a/app/assets/images/emoji/runner_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/runner_tone2.png b/app/assets/images/emoji/runner_tone2.png Binary files differdeleted file mode 100644 index 6112fd5c376..00000000000 --- a/app/assets/images/emoji/runner_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/runner_tone3.png b/app/assets/images/emoji/runner_tone3.png Binary files differdeleted file mode 100644 index 625ec708f48..00000000000 --- a/app/assets/images/emoji/runner_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/runner_tone4.png b/app/assets/images/emoji/runner_tone4.png Binary files differdeleted file mode 100644 index 242f1b56337..00000000000 --- a/app/assets/images/emoji/runner_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/runner_tone5.png b/app/assets/images/emoji/runner_tone5.png Binary files differdeleted file mode 100644 index 2976c6f019f..00000000000 --- a/app/assets/images/emoji/runner_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/running_shirt_with_sash.png b/app/assets/images/emoji/running_shirt_with_sash.png Binary files differdeleted file mode 100644 index 6d83c06b803..00000000000 --- a/app/assets/images/emoji/running_shirt_with_sash.png +++ /dev/null diff --git a/app/assets/images/emoji/sa.png b/app/assets/images/emoji/sa.png Binary files differdeleted file mode 100644 index 900f9633247..00000000000 --- a/app/assets/images/emoji/sa.png +++ /dev/null diff --git a/app/assets/images/emoji/sagittarius.png b/app/assets/images/emoji/sagittarius.png Binary files differdeleted file mode 100644 index f8d94ff2923..00000000000 --- a/app/assets/images/emoji/sagittarius.png +++ /dev/null diff --git a/app/assets/images/emoji/sailboat.png b/app/assets/images/emoji/sailboat.png Binary files differdeleted file mode 100644 index 772ef11da5d..00000000000 --- a/app/assets/images/emoji/sailboat.png +++ /dev/null diff --git a/app/assets/images/emoji/sake.png b/app/assets/images/emoji/sake.png Binary files differdeleted file mode 100644 index 2933f5672c4..00000000000 --- a/app/assets/images/emoji/sake.png +++ /dev/null diff --git a/app/assets/images/emoji/salad.png b/app/assets/images/emoji/salad.png Binary files differdeleted file mode 100644 index c89f9341158..00000000000 --- a/app/assets/images/emoji/salad.png +++ /dev/null diff --git a/app/assets/images/emoji/sandal.png b/app/assets/images/emoji/sandal.png Binary files differdeleted file mode 100644 index 9d9f5122b7a..00000000000 --- a/app/assets/images/emoji/sandal.png +++ /dev/null diff --git a/app/assets/images/emoji/santa.png b/app/assets/images/emoji/santa.png Binary files differdeleted file mode 100644 index bc83ab80d52..00000000000 --- a/app/assets/images/emoji/santa.png +++ /dev/null diff --git a/app/assets/images/emoji/santa_tone1.png b/app/assets/images/emoji/santa_tone1.png Binary files differdeleted file mode 100644 index 5233ffb7174..00000000000 --- a/app/assets/images/emoji/santa_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/santa_tone2.png b/app/assets/images/emoji/santa_tone2.png Binary files differdeleted file mode 100644 index 4e845438197..00000000000 --- a/app/assets/images/emoji/santa_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/santa_tone3.png b/app/assets/images/emoji/santa_tone3.png Binary files differdeleted file mode 100644 index 7fc4f33b60f..00000000000 --- a/app/assets/images/emoji/santa_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/santa_tone4.png b/app/assets/images/emoji/santa_tone4.png Binary files differdeleted file mode 100644 index d1d5a15132d..00000000000 --- a/app/assets/images/emoji/santa_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/santa_tone5.png b/app/assets/images/emoji/santa_tone5.png Binary files differdeleted file mode 100644 index 4d697a01f24..00000000000 --- a/app/assets/images/emoji/santa_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/satellite.png b/app/assets/images/emoji/satellite.png Binary files differdeleted file mode 100644 index db0372795f4..00000000000 --- a/app/assets/images/emoji/satellite.png +++ /dev/null diff --git a/app/assets/images/emoji/satellite_orbital.png b/app/assets/images/emoji/satellite_orbital.png Binary files differdeleted file mode 100644 index 4ba55d6e297..00000000000 --- a/app/assets/images/emoji/satellite_orbital.png +++ /dev/null diff --git a/app/assets/images/emoji/saxophone.png b/app/assets/images/emoji/saxophone.png Binary files differdeleted file mode 100644 index a392faec291..00000000000 --- a/app/assets/images/emoji/saxophone.png +++ /dev/null diff --git a/app/assets/images/emoji/scales.png b/app/assets/images/emoji/scales.png Binary files differdeleted file mode 100644 index 0757eda1684..00000000000 --- a/app/assets/images/emoji/scales.png +++ /dev/null diff --git a/app/assets/images/emoji/school.png b/app/assets/images/emoji/school.png Binary files differdeleted file mode 100644 index 269759534f0..00000000000 --- a/app/assets/images/emoji/school.png +++ /dev/null diff --git a/app/assets/images/emoji/school_satchel.png b/app/assets/images/emoji/school_satchel.png Binary files differdeleted file mode 100644 index 9997c86e7dc..00000000000 --- a/app/assets/images/emoji/school_satchel.png +++ /dev/null diff --git a/app/assets/images/emoji/scissors.png b/app/assets/images/emoji/scissors.png Binary files differdeleted file mode 100644 index 270571c8cdd..00000000000 --- a/app/assets/images/emoji/scissors.png +++ /dev/null diff --git a/app/assets/images/emoji/scooter.png b/app/assets/images/emoji/scooter.png Binary files differdeleted file mode 100644 index 4ab7ef59cd2..00000000000 --- a/app/assets/images/emoji/scooter.png +++ /dev/null diff --git a/app/assets/images/emoji/scorpion.png b/app/assets/images/emoji/scorpion.png Binary files differdeleted file mode 100644 index 449a6b281c9..00000000000 --- a/app/assets/images/emoji/scorpion.png +++ /dev/null diff --git a/app/assets/images/emoji/scorpius.png b/app/assets/images/emoji/scorpius.png Binary files differdeleted file mode 100644 index c31a9920455..00000000000 --- a/app/assets/images/emoji/scorpius.png +++ /dev/null diff --git a/app/assets/images/emoji/scream.png b/app/assets/images/emoji/scream.png Binary files differdeleted file mode 100644 index c3bea9f2510..00000000000 --- a/app/assets/images/emoji/scream.png +++ /dev/null diff --git a/app/assets/images/emoji/scream_cat.png b/app/assets/images/emoji/scream_cat.png Binary files differdeleted file mode 100644 index 15803ad8e6e..00000000000 --- a/app/assets/images/emoji/scream_cat.png +++ /dev/null diff --git a/app/assets/images/emoji/scroll.png b/app/assets/images/emoji/scroll.png Binary files differdeleted file mode 100644 index 50ee5dcd4b9..00000000000 --- a/app/assets/images/emoji/scroll.png +++ /dev/null diff --git a/app/assets/images/emoji/seat.png b/app/assets/images/emoji/seat.png Binary files differdeleted file mode 100644 index a6d72d95adb..00000000000 --- a/app/assets/images/emoji/seat.png +++ /dev/null diff --git a/app/assets/images/emoji/second_place.png b/app/assets/images/emoji/second_place.png Binary files differdeleted file mode 100644 index 17b011268b6..00000000000 --- a/app/assets/images/emoji/second_place.png +++ /dev/null diff --git a/app/assets/images/emoji/secret.png b/app/assets/images/emoji/secret.png Binary files differdeleted file mode 100644 index 5fd72608e60..00000000000 --- a/app/assets/images/emoji/secret.png +++ /dev/null diff --git a/app/assets/images/emoji/see_no_evil.png b/app/assets/images/emoji/see_no_evil.png Binary files differdeleted file mode 100644 index 5187e474531..00000000000 --- a/app/assets/images/emoji/see_no_evil.png +++ /dev/null diff --git a/app/assets/images/emoji/seedling.png b/app/assets/images/emoji/seedling.png Binary files differdeleted file mode 100644 index ae0948bcfd6..00000000000 --- a/app/assets/images/emoji/seedling.png +++ /dev/null diff --git a/app/assets/images/emoji/selfie.png b/app/assets/images/emoji/selfie.png Binary files differdeleted file mode 100644 index 6a1ba75c7e3..00000000000 --- a/app/assets/images/emoji/selfie.png +++ /dev/null diff --git a/app/assets/images/emoji/selfie_tone1.png b/app/assets/images/emoji/selfie_tone1.png Binary files differdeleted file mode 100644 index 290e075b56f..00000000000 --- a/app/assets/images/emoji/selfie_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/selfie_tone2.png b/app/assets/images/emoji/selfie_tone2.png Binary files differdeleted file mode 100644 index fcd9595b643..00000000000 --- a/app/assets/images/emoji/selfie_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/selfie_tone3.png b/app/assets/images/emoji/selfie_tone3.png Binary files differdeleted file mode 100644 index f3a22fdf435..00000000000 --- a/app/assets/images/emoji/selfie_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/selfie_tone4.png b/app/assets/images/emoji/selfie_tone4.png Binary files differdeleted file mode 100644 index cdecf6d9f4e..00000000000 --- a/app/assets/images/emoji/selfie_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/selfie_tone5.png b/app/assets/images/emoji/selfie_tone5.png Binary files differdeleted file mode 100644 index 86acbb6c202..00000000000 --- a/app/assets/images/emoji/selfie_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/seven.png b/app/assets/images/emoji/seven.png Binary files differdeleted file mode 100644 index 9b3476ae7c7..00000000000 --- a/app/assets/images/emoji/seven.png +++ /dev/null diff --git a/app/assets/images/emoji/shallow_pan_of_food.png b/app/assets/images/emoji/shallow_pan_of_food.png Binary files differdeleted file mode 100644 index 663a1006acd..00000000000 --- a/app/assets/images/emoji/shallow_pan_of_food.png +++ /dev/null diff --git a/app/assets/images/emoji/shamrock.png b/app/assets/images/emoji/shamrock.png Binary files differdeleted file mode 100644 index f202aecfe6f..00000000000 --- a/app/assets/images/emoji/shamrock.png +++ /dev/null diff --git a/app/assets/images/emoji/shark.png b/app/assets/images/emoji/shark.png Binary files differdeleted file mode 100644 index c75076d57d8..00000000000 --- a/app/assets/images/emoji/shark.png +++ /dev/null diff --git a/app/assets/images/emoji/shaved_ice.png b/app/assets/images/emoji/shaved_ice.png Binary files differdeleted file mode 100644 index 36dfb53ca93..00000000000 --- a/app/assets/images/emoji/shaved_ice.png +++ /dev/null diff --git a/app/assets/images/emoji/sheep.png b/app/assets/images/emoji/sheep.png Binary files differdeleted file mode 100644 index 102b8a52b28..00000000000 --- a/app/assets/images/emoji/sheep.png +++ /dev/null diff --git a/app/assets/images/emoji/shell.png b/app/assets/images/emoji/shell.png Binary files differdeleted file mode 100644 index 55721629f62..00000000000 --- a/app/assets/images/emoji/shell.png +++ /dev/null diff --git a/app/assets/images/emoji/shield.png b/app/assets/images/emoji/shield.png Binary files differdeleted file mode 100644 index 610bf033ce0..00000000000 --- a/app/assets/images/emoji/shield.png +++ /dev/null diff --git a/app/assets/images/emoji/shinto_shrine.png b/app/assets/images/emoji/shinto_shrine.png Binary files differdeleted file mode 100644 index 5a344975bf3..00000000000 --- a/app/assets/images/emoji/shinto_shrine.png +++ /dev/null diff --git a/app/assets/images/emoji/ship.png b/app/assets/images/emoji/ship.png Binary files differdeleted file mode 100644 index 62d54f7d6c9..00000000000 --- a/app/assets/images/emoji/ship.png +++ /dev/null diff --git a/app/assets/images/emoji/shirt.png b/app/assets/images/emoji/shirt.png Binary files differdeleted file mode 100644 index af08dec8b59..00000000000 --- a/app/assets/images/emoji/shirt.png +++ /dev/null diff --git a/app/assets/images/emoji/shopping_bags.png b/app/assets/images/emoji/shopping_bags.png Binary files differdeleted file mode 100644 index 99f2a2b13ac..00000000000 --- a/app/assets/images/emoji/shopping_bags.png +++ /dev/null diff --git a/app/assets/images/emoji/shopping_cart.png b/app/assets/images/emoji/shopping_cart.png Binary files differdeleted file mode 100644 index 1086fe6e456..00000000000 --- a/app/assets/images/emoji/shopping_cart.png +++ /dev/null diff --git a/app/assets/images/emoji/shower.png b/app/assets/images/emoji/shower.png Binary files differdeleted file mode 100644 index 156776a2e52..00000000000 --- a/app/assets/images/emoji/shower.png +++ /dev/null diff --git a/app/assets/images/emoji/shrimp.png b/app/assets/images/emoji/shrimp.png Binary files differdeleted file mode 100644 index 49eff28a71e..00000000000 --- a/app/assets/images/emoji/shrimp.png +++ /dev/null diff --git a/app/assets/images/emoji/shrug.png b/app/assets/images/emoji/shrug.png Binary files differdeleted file mode 100644 index 76e63bfac77..00000000000 --- a/app/assets/images/emoji/shrug.png +++ /dev/null diff --git a/app/assets/images/emoji/shrug_tone1.png b/app/assets/images/emoji/shrug_tone1.png Binary files differdeleted file mode 100644 index 1c895e64468..00000000000 --- a/app/assets/images/emoji/shrug_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/shrug_tone2.png b/app/assets/images/emoji/shrug_tone2.png Binary files differdeleted file mode 100644 index 4e3ca8f8bac..00000000000 --- a/app/assets/images/emoji/shrug_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/shrug_tone3.png b/app/assets/images/emoji/shrug_tone3.png Binary files differdeleted file mode 100644 index d1b16a19bb5..00000000000 --- a/app/assets/images/emoji/shrug_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/shrug_tone4.png b/app/assets/images/emoji/shrug_tone4.png Binary files differdeleted file mode 100644 index 5fbef3f2255..00000000000 --- a/app/assets/images/emoji/shrug_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/shrug_tone5.png b/app/assets/images/emoji/shrug_tone5.png Binary files differdeleted file mode 100644 index 4af2e28bc5c..00000000000 --- a/app/assets/images/emoji/shrug_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/signal_strength.png b/app/assets/images/emoji/signal_strength.png Binary files differdeleted file mode 100644 index ee2b5a4b519..00000000000 --- a/app/assets/images/emoji/signal_strength.png +++ /dev/null diff --git a/app/assets/images/emoji/six.png b/app/assets/images/emoji/six.png Binary files differdeleted file mode 100644 index 371b3acef2c..00000000000 --- a/app/assets/images/emoji/six.png +++ /dev/null diff --git a/app/assets/images/emoji/six_pointed_star.png b/app/assets/images/emoji/six_pointed_star.png Binary files differdeleted file mode 100644 index 2eb1707458b..00000000000 --- a/app/assets/images/emoji/six_pointed_star.png +++ /dev/null diff --git a/app/assets/images/emoji/ski.png b/app/assets/images/emoji/ski.png Binary files differdeleted file mode 100644 index 4a2d2c12306..00000000000 --- a/app/assets/images/emoji/ski.png +++ /dev/null diff --git a/app/assets/images/emoji/skier.png b/app/assets/images/emoji/skier.png Binary files differdeleted file mode 100644 index 2eb3bdce2af..00000000000 --- a/app/assets/images/emoji/skier.png +++ /dev/null diff --git a/app/assets/images/emoji/skull.png b/app/assets/images/emoji/skull.png Binary files differdeleted file mode 100644 index 26abb17296a..00000000000 --- a/app/assets/images/emoji/skull.png +++ /dev/null diff --git a/app/assets/images/emoji/skull_crossbones.png b/app/assets/images/emoji/skull_crossbones.png Binary files differdeleted file mode 100644 index b459df9227a..00000000000 --- a/app/assets/images/emoji/skull_crossbones.png +++ /dev/null diff --git a/app/assets/images/emoji/sleeping.png b/app/assets/images/emoji/sleeping.png Binary files differdeleted file mode 100644 index 9ecf600d6d8..00000000000 --- a/app/assets/images/emoji/sleeping.png +++ /dev/null diff --git a/app/assets/images/emoji/sleeping_accommodation.png b/app/assets/images/emoji/sleeping_accommodation.png Binary files differdeleted file mode 100644 index c739e7fb69b..00000000000 --- a/app/assets/images/emoji/sleeping_accommodation.png +++ /dev/null diff --git a/app/assets/images/emoji/sleepy.png b/app/assets/images/emoji/sleepy.png Binary files differdeleted file mode 100644 index 836b4107717..00000000000 --- a/app/assets/images/emoji/sleepy.png +++ /dev/null diff --git a/app/assets/images/emoji/slight_frown.png b/app/assets/images/emoji/slight_frown.png Binary files differdeleted file mode 100644 index b2f1d983d36..00000000000 --- a/app/assets/images/emoji/slight_frown.png +++ /dev/null diff --git a/app/assets/images/emoji/slight_smile.png b/app/assets/images/emoji/slight_smile.png Binary files differdeleted file mode 100644 index ddd7d65dd3d..00000000000 --- a/app/assets/images/emoji/slight_smile.png +++ /dev/null diff --git a/app/assets/images/emoji/slot_machine.png b/app/assets/images/emoji/slot_machine.png Binary files differdeleted file mode 100644 index ee71b6c268c..00000000000 --- a/app/assets/images/emoji/slot_machine.png +++ /dev/null diff --git a/app/assets/images/emoji/small_blue_diamond.png b/app/assets/images/emoji/small_blue_diamond.png Binary files differdeleted file mode 100644 index b86b5bc4db3..00000000000 --- a/app/assets/images/emoji/small_blue_diamond.png +++ /dev/null diff --git a/app/assets/images/emoji/small_orange_diamond.png b/app/assets/images/emoji/small_orange_diamond.png Binary files differdeleted file mode 100644 index e1c6ed9b2f8..00000000000 --- a/app/assets/images/emoji/small_orange_diamond.png +++ /dev/null diff --git a/app/assets/images/emoji/small_red_triangle.png b/app/assets/images/emoji/small_red_triangle.png Binary files differdeleted file mode 100644 index 785887c195a..00000000000 --- a/app/assets/images/emoji/small_red_triangle.png +++ /dev/null diff --git a/app/assets/images/emoji/small_red_triangle_down.png b/app/assets/images/emoji/small_red_triangle_down.png Binary files differdeleted file mode 100644 index a83beff1914..00000000000 --- a/app/assets/images/emoji/small_red_triangle_down.png +++ /dev/null diff --git a/app/assets/images/emoji/smile.png b/app/assets/images/emoji/smile.png Binary files differdeleted file mode 100644 index aa47ffe978c..00000000000 --- a/app/assets/images/emoji/smile.png +++ /dev/null diff --git a/app/assets/images/emoji/smile_cat.png b/app/assets/images/emoji/smile_cat.png Binary files differdeleted file mode 100644 index 6f25f11dd3a..00000000000 --- a/app/assets/images/emoji/smile_cat.png +++ /dev/null diff --git a/app/assets/images/emoji/smiley.png b/app/assets/images/emoji/smiley.png Binary files differdeleted file mode 100644 index 30957a65968..00000000000 --- a/app/assets/images/emoji/smiley.png +++ /dev/null diff --git a/app/assets/images/emoji/smiley_cat.png b/app/assets/images/emoji/smiley_cat.png Binary files differdeleted file mode 100644 index 163b57a3427..00000000000 --- a/app/assets/images/emoji/smiley_cat.png +++ /dev/null diff --git a/app/assets/images/emoji/smiling_imp.png b/app/assets/images/emoji/smiling_imp.png Binary files differdeleted file mode 100644 index cc2c5f1ec72..00000000000 --- a/app/assets/images/emoji/smiling_imp.png +++ /dev/null diff --git a/app/assets/images/emoji/smirk.png b/app/assets/images/emoji/smirk.png Binary files differdeleted file mode 100644 index 87852109988..00000000000 --- a/app/assets/images/emoji/smirk.png +++ /dev/null diff --git a/app/assets/images/emoji/smirk_cat.png b/app/assets/images/emoji/smirk_cat.png Binary files differdeleted file mode 100644 index 9ac5954c199..00000000000 --- a/app/assets/images/emoji/smirk_cat.png +++ /dev/null diff --git a/app/assets/images/emoji/smoking.png b/app/assets/images/emoji/smoking.png Binary files differdeleted file mode 100644 index 910f648c8f9..00000000000 --- a/app/assets/images/emoji/smoking.png +++ /dev/null diff --git a/app/assets/images/emoji/snail.png b/app/assets/images/emoji/snail.png Binary files differdeleted file mode 100644 index f4ea071e2d3..00000000000 --- a/app/assets/images/emoji/snail.png +++ /dev/null diff --git a/app/assets/images/emoji/snake.png b/app/assets/images/emoji/snake.png Binary files differdeleted file mode 100644 index d0278a28d8c..00000000000 --- a/app/assets/images/emoji/snake.png +++ /dev/null diff --git a/app/assets/images/emoji/sneezing_face.png b/app/assets/images/emoji/sneezing_face.png Binary files differdeleted file mode 100644 index ccf07d4b64d..00000000000 --- a/app/assets/images/emoji/sneezing_face.png +++ /dev/null diff --git a/app/assets/images/emoji/snowboarder.png b/app/assets/images/emoji/snowboarder.png Binary files differdeleted file mode 100644 index 6361c0f2c9d..00000000000 --- a/app/assets/images/emoji/snowboarder.png +++ /dev/null diff --git a/app/assets/images/emoji/snowflake.png b/app/assets/images/emoji/snowflake.png Binary files differdeleted file mode 100644 index db319a77ec6..00000000000 --- a/app/assets/images/emoji/snowflake.png +++ /dev/null diff --git a/app/assets/images/emoji/snowman.png b/app/assets/images/emoji/snowman.png Binary files differdeleted file mode 100644 index 20c177c2aff..00000000000 --- a/app/assets/images/emoji/snowman.png +++ /dev/null diff --git a/app/assets/images/emoji/snowman2.png b/app/assets/images/emoji/snowman2.png Binary files differdeleted file mode 100644 index 896f28502af..00000000000 --- a/app/assets/images/emoji/snowman2.png +++ /dev/null diff --git a/app/assets/images/emoji/sob.png b/app/assets/images/emoji/sob.png Binary files differdeleted file mode 100644 index 52e3517a1ee..00000000000 --- a/app/assets/images/emoji/sob.png +++ /dev/null diff --git a/app/assets/images/emoji/soccer.png b/app/assets/images/emoji/soccer.png Binary files differdeleted file mode 100644 index 28cfa218d6d..00000000000 --- a/app/assets/images/emoji/soccer.png +++ /dev/null diff --git a/app/assets/images/emoji/soon.png b/app/assets/images/emoji/soon.png Binary files differdeleted file mode 100644 index 8cdfd86690d..00000000000 --- a/app/assets/images/emoji/soon.png +++ /dev/null diff --git a/app/assets/images/emoji/sos.png b/app/assets/images/emoji/sos.png Binary files differdeleted file mode 100644 index d7d8c9953e4..00000000000 --- a/app/assets/images/emoji/sos.png +++ /dev/null diff --git a/app/assets/images/emoji/sound.png b/app/assets/images/emoji/sound.png Binary files differdeleted file mode 100644 index e75ddca53ba..00000000000 --- a/app/assets/images/emoji/sound.png +++ /dev/null diff --git a/app/assets/images/emoji/space_invader.png b/app/assets/images/emoji/space_invader.png Binary files differdeleted file mode 100644 index 2e73f5f32e5..00000000000 --- a/app/assets/images/emoji/space_invader.png +++ /dev/null diff --git a/app/assets/images/emoji/spades.png b/app/assets/images/emoji/spades.png Binary files differdeleted file mode 100644 index f822f184cb0..00000000000 --- a/app/assets/images/emoji/spades.png +++ /dev/null diff --git a/app/assets/images/emoji/spaghetti.png b/app/assets/images/emoji/spaghetti.png Binary files differdeleted file mode 100644 index 89c24a321f1..00000000000 --- a/app/assets/images/emoji/spaghetti.png +++ /dev/null diff --git a/app/assets/images/emoji/sparkle.png b/app/assets/images/emoji/sparkle.png Binary files differdeleted file mode 100644 index 6aa7b6ec9cf..00000000000 --- a/app/assets/images/emoji/sparkle.png +++ /dev/null diff --git a/app/assets/images/emoji/sparkler.png b/app/assets/images/emoji/sparkler.png Binary files differdeleted file mode 100644 index 30339cd6e09..00000000000 --- a/app/assets/images/emoji/sparkler.png +++ /dev/null diff --git a/app/assets/images/emoji/sparkles.png b/app/assets/images/emoji/sparkles.png Binary files differdeleted file mode 100644 index 169bc10b023..00000000000 --- a/app/assets/images/emoji/sparkles.png +++ /dev/null diff --git a/app/assets/images/emoji/sparkling_heart.png b/app/assets/images/emoji/sparkling_heart.png Binary files differdeleted file mode 100644 index 6709269454e..00000000000 --- a/app/assets/images/emoji/sparkling_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/speak_no_evil.png b/app/assets/images/emoji/speak_no_evil.png Binary files differdeleted file mode 100644 index 9d9e07c974b..00000000000 --- a/app/assets/images/emoji/speak_no_evil.png +++ /dev/null diff --git a/app/assets/images/emoji/speaker.png b/app/assets/images/emoji/speaker.png Binary files differdeleted file mode 100644 index 7bcffb8fc43..00000000000 --- a/app/assets/images/emoji/speaker.png +++ /dev/null diff --git a/app/assets/images/emoji/speaking_head.png b/app/assets/images/emoji/speaking_head.png Binary files differdeleted file mode 100644 index 2df93aaae09..00000000000 --- a/app/assets/images/emoji/speaking_head.png +++ /dev/null diff --git a/app/assets/images/emoji/speech_balloon.png b/app/assets/images/emoji/speech_balloon.png Binary files differdeleted file mode 100644 index a34ef741733..00000000000 --- a/app/assets/images/emoji/speech_balloon.png +++ /dev/null diff --git a/app/assets/images/emoji/speech_left.png b/app/assets/images/emoji/speech_left.png Binary files differdeleted file mode 100644 index 00c05959bcd..00000000000 --- a/app/assets/images/emoji/speech_left.png +++ /dev/null diff --git a/app/assets/images/emoji/speedboat.png b/app/assets/images/emoji/speedboat.png Binary files differdeleted file mode 100644 index 74059d12de1..00000000000 --- a/app/assets/images/emoji/speedboat.png +++ /dev/null diff --git a/app/assets/images/emoji/spider.png b/app/assets/images/emoji/spider.png Binary files differdeleted file mode 100644 index 3849fa90b94..00000000000 --- a/app/assets/images/emoji/spider.png +++ /dev/null diff --git a/app/assets/images/emoji/spider_web.png b/app/assets/images/emoji/spider_web.png Binary files differdeleted file mode 100644 index ba448ee7fba..00000000000 --- a/app/assets/images/emoji/spider_web.png +++ /dev/null diff --git a/app/assets/images/emoji/spoon.png b/app/assets/images/emoji/spoon.png Binary files differdeleted file mode 100644 index 3c4da766aee..00000000000 --- a/app/assets/images/emoji/spoon.png +++ /dev/null diff --git a/app/assets/images/emoji/spy.png b/app/assets/images/emoji/spy.png Binary files differdeleted file mode 100644 index a729e9584d6..00000000000 --- a/app/assets/images/emoji/spy.png +++ /dev/null diff --git a/app/assets/images/emoji/spy_tone1.png b/app/assets/images/emoji/spy_tone1.png Binary files differdeleted file mode 100644 index 2d1c022caee..00000000000 --- a/app/assets/images/emoji/spy_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/spy_tone2.png b/app/assets/images/emoji/spy_tone2.png Binary files differdeleted file mode 100644 index 548b9c26f5d..00000000000 --- a/app/assets/images/emoji/spy_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/spy_tone3.png b/app/assets/images/emoji/spy_tone3.png Binary files differdeleted file mode 100644 index b023f4b18e1..00000000000 --- a/app/assets/images/emoji/spy_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/spy_tone4.png b/app/assets/images/emoji/spy_tone4.png Binary files differdeleted file mode 100644 index d8300af492d..00000000000 --- a/app/assets/images/emoji/spy_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/spy_tone5.png b/app/assets/images/emoji/spy_tone5.png Binary files differdeleted file mode 100644 index ca1462595fa..00000000000 --- a/app/assets/images/emoji/spy_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/squid.png b/app/assets/images/emoji/squid.png Binary files differdeleted file mode 100644 index d2af223f0cb..00000000000 --- a/app/assets/images/emoji/squid.png +++ /dev/null diff --git a/app/assets/images/emoji/stadium.png b/app/assets/images/emoji/stadium.png Binary files differdeleted file mode 100644 index 00cd6db5e29..00000000000 --- a/app/assets/images/emoji/stadium.png +++ /dev/null diff --git a/app/assets/images/emoji/star.png b/app/assets/images/emoji/star.png Binary files differdeleted file mode 100644 index c930947076e..00000000000 --- a/app/assets/images/emoji/star.png +++ /dev/null diff --git a/app/assets/images/emoji/star2.png b/app/assets/images/emoji/star2.png Binary files differdeleted file mode 100644 index 2f5cba592db..00000000000 --- a/app/assets/images/emoji/star2.png +++ /dev/null diff --git a/app/assets/images/emoji/star_and_crescent.png b/app/assets/images/emoji/star_and_crescent.png Binary files differdeleted file mode 100644 index e182636457d..00000000000 --- a/app/assets/images/emoji/star_and_crescent.png +++ /dev/null diff --git a/app/assets/images/emoji/star_of_david.png b/app/assets/images/emoji/star_of_david.png Binary files differdeleted file mode 100644 index fc59d0dde24..00000000000 --- a/app/assets/images/emoji/star_of_david.png +++ /dev/null diff --git a/app/assets/images/emoji/stars.png b/app/assets/images/emoji/stars.png Binary files differdeleted file mode 100644 index aa45384d1c6..00000000000 --- a/app/assets/images/emoji/stars.png +++ /dev/null diff --git a/app/assets/images/emoji/station.png b/app/assets/images/emoji/station.png Binary files differdeleted file mode 100644 index 5c26fee529c..00000000000 --- a/app/assets/images/emoji/station.png +++ /dev/null diff --git a/app/assets/images/emoji/statue_of_liberty.png b/app/assets/images/emoji/statue_of_liberty.png Binary files differdeleted file mode 100644 index 05df8289b59..00000000000 --- a/app/assets/images/emoji/statue_of_liberty.png +++ /dev/null diff --git a/app/assets/images/emoji/steam_locomotive.png b/app/assets/images/emoji/steam_locomotive.png Binary files differdeleted file mode 100644 index 9ac0d999c4c..00000000000 --- a/app/assets/images/emoji/steam_locomotive.png +++ /dev/null diff --git a/app/assets/images/emoji/stew.png b/app/assets/images/emoji/stew.png Binary files differdeleted file mode 100644 index 6b3f010c17a..00000000000 --- a/app/assets/images/emoji/stew.png +++ /dev/null diff --git a/app/assets/images/emoji/stop_button.png b/app/assets/images/emoji/stop_button.png Binary files differdeleted file mode 100644 index cfa99988ac2..00000000000 --- a/app/assets/images/emoji/stop_button.png +++ /dev/null diff --git a/app/assets/images/emoji/stopwatch.png b/app/assets/images/emoji/stopwatch.png Binary files differdeleted file mode 100644 index 8fae1c9a898..00000000000 --- a/app/assets/images/emoji/stopwatch.png +++ /dev/null diff --git a/app/assets/images/emoji/straight_ruler.png b/app/assets/images/emoji/straight_ruler.png Binary files differdeleted file mode 100644 index 1017b7433a1..00000000000 --- a/app/assets/images/emoji/straight_ruler.png +++ /dev/null diff --git a/app/assets/images/emoji/strawberry.png b/app/assets/images/emoji/strawberry.png Binary files differdeleted file mode 100644 index 7bb86f0b29c..00000000000 --- a/app/assets/images/emoji/strawberry.png +++ /dev/null diff --git a/app/assets/images/emoji/stuck_out_tongue.png b/app/assets/images/emoji/stuck_out_tongue.png Binary files differdeleted file mode 100644 index 25757341f96..00000000000 --- a/app/assets/images/emoji/stuck_out_tongue.png +++ /dev/null diff --git a/app/assets/images/emoji/stuck_out_tongue_closed_eyes.png b/app/assets/images/emoji/stuck_out_tongue_closed_eyes.png Binary files differdeleted file mode 100644 index 5c0401e9b1d..00000000000 --- a/app/assets/images/emoji/stuck_out_tongue_closed_eyes.png +++ /dev/null diff --git a/app/assets/images/emoji/stuck_out_tongue_winking_eye.png b/app/assets/images/emoji/stuck_out_tongue_winking_eye.png Binary files differdeleted file mode 100644 index 4817eaa3dc6..00000000000 --- a/app/assets/images/emoji/stuck_out_tongue_winking_eye.png +++ /dev/null diff --git a/app/assets/images/emoji/stuffed_flatbread.png b/app/assets/images/emoji/stuffed_flatbread.png Binary files differdeleted file mode 100644 index a2e10df40a5..00000000000 --- a/app/assets/images/emoji/stuffed_flatbread.png +++ /dev/null diff --git a/app/assets/images/emoji/sun_with_face.png b/app/assets/images/emoji/sun_with_face.png Binary files differdeleted file mode 100644 index 14a4ea971db..00000000000 --- a/app/assets/images/emoji/sun_with_face.png +++ /dev/null diff --git a/app/assets/images/emoji/sunflower.png b/app/assets/images/emoji/sunflower.png Binary files differdeleted file mode 100644 index 08cc07761ea..00000000000 --- a/app/assets/images/emoji/sunflower.png +++ /dev/null diff --git a/app/assets/images/emoji/sunglasses.png b/app/assets/images/emoji/sunglasses.png Binary files differdeleted file mode 100644 index 20011735110..00000000000 --- a/app/assets/images/emoji/sunglasses.png +++ /dev/null diff --git a/app/assets/images/emoji/sunny.png b/app/assets/images/emoji/sunny.png Binary files differdeleted file mode 100644 index fd521ae31a7..00000000000 --- a/app/assets/images/emoji/sunny.png +++ /dev/null diff --git a/app/assets/images/emoji/sunrise.png b/app/assets/images/emoji/sunrise.png Binary files differdeleted file mode 100644 index 4ad36003c20..00000000000 --- a/app/assets/images/emoji/sunrise.png +++ /dev/null diff --git a/app/assets/images/emoji/sunrise_over_mountains.png b/app/assets/images/emoji/sunrise_over_mountains.png Binary files differdeleted file mode 100644 index 2b99307344d..00000000000 --- a/app/assets/images/emoji/sunrise_over_mountains.png +++ /dev/null diff --git a/app/assets/images/emoji/surfer.png b/app/assets/images/emoji/surfer.png Binary files differdeleted file mode 100644 index 3ab017adf4b..00000000000 --- a/app/assets/images/emoji/surfer.png +++ /dev/null diff --git a/app/assets/images/emoji/surfer_tone1.png b/app/assets/images/emoji/surfer_tone1.png Binary files differdeleted file mode 100644 index b5faaa524cc..00000000000 --- a/app/assets/images/emoji/surfer_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/surfer_tone2.png b/app/assets/images/emoji/surfer_tone2.png Binary files differdeleted file mode 100644 index 6d92e412ff1..00000000000 --- a/app/assets/images/emoji/surfer_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/surfer_tone3.png b/app/assets/images/emoji/surfer_tone3.png Binary files differdeleted file mode 100644 index f05ef59496e..00000000000 --- a/app/assets/images/emoji/surfer_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/surfer_tone4.png b/app/assets/images/emoji/surfer_tone4.png Binary files differdeleted file mode 100644 index 35e143d19dc..00000000000 --- a/app/assets/images/emoji/surfer_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/surfer_tone5.png b/app/assets/images/emoji/surfer_tone5.png Binary files differdeleted file mode 100644 index 38917658eac..00000000000 --- a/app/assets/images/emoji/surfer_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/sushi.png b/app/assets/images/emoji/sushi.png Binary files differdeleted file mode 100644 index f171fd2f7a1..00000000000 --- a/app/assets/images/emoji/sushi.png +++ /dev/null diff --git a/app/assets/images/emoji/suspension_railway.png b/app/assets/images/emoji/suspension_railway.png Binary files differdeleted file mode 100644 index a59d5f48c24..00000000000 --- a/app/assets/images/emoji/suspension_railway.png +++ /dev/null diff --git a/app/assets/images/emoji/sweat.png b/app/assets/images/emoji/sweat.png Binary files differdeleted file mode 100644 index f0dae7b7893..00000000000 --- a/app/assets/images/emoji/sweat.png +++ /dev/null diff --git a/app/assets/images/emoji/sweat_drops.png b/app/assets/images/emoji/sweat_drops.png Binary files differdeleted file mode 100644 index 4106117ebc8..00000000000 --- a/app/assets/images/emoji/sweat_drops.png +++ /dev/null diff --git a/app/assets/images/emoji/sweat_smile.png b/app/assets/images/emoji/sweat_smile.png Binary files differdeleted file mode 100644 index cb18d9c899b..00000000000 --- a/app/assets/images/emoji/sweat_smile.png +++ /dev/null diff --git a/app/assets/images/emoji/sweet_potato.png b/app/assets/images/emoji/sweet_potato.png Binary files differdeleted file mode 100644 index 92a425f2e20..00000000000 --- a/app/assets/images/emoji/sweet_potato.png +++ /dev/null diff --git a/app/assets/images/emoji/swimmer.png b/app/assets/images/emoji/swimmer.png Binary files differdeleted file mode 100644 index 55b4d72f9a7..00000000000 --- a/app/assets/images/emoji/swimmer.png +++ /dev/null diff --git a/app/assets/images/emoji/swimmer_tone1.png b/app/assets/images/emoji/swimmer_tone1.png Binary files differdeleted file mode 100644 index 38441c9ca9a..00000000000 --- a/app/assets/images/emoji/swimmer_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/swimmer_tone2.png b/app/assets/images/emoji/swimmer_tone2.png Binary files differdeleted file mode 100644 index b0d43112444..00000000000 --- a/app/assets/images/emoji/swimmer_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/swimmer_tone3.png b/app/assets/images/emoji/swimmer_tone3.png Binary files differdeleted file mode 100644 index 211e77e2aa0..00000000000 --- a/app/assets/images/emoji/swimmer_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/swimmer_tone4.png b/app/assets/images/emoji/swimmer_tone4.png Binary files differdeleted file mode 100644 index f34c34db9d2..00000000000 --- a/app/assets/images/emoji/swimmer_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/swimmer_tone5.png b/app/assets/images/emoji/swimmer_tone5.png Binary files differdeleted file mode 100644 index 3e9231ff868..00000000000 --- a/app/assets/images/emoji/swimmer_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/symbols.png b/app/assets/images/emoji/symbols.png Binary files differdeleted file mode 100644 index ac2fc1f358f..00000000000 --- a/app/assets/images/emoji/symbols.png +++ /dev/null diff --git a/app/assets/images/emoji/synagogue.png b/app/assets/images/emoji/synagogue.png Binary files differdeleted file mode 100644 index ee347904c80..00000000000 --- a/app/assets/images/emoji/synagogue.png +++ /dev/null diff --git a/app/assets/images/emoji/syringe.png b/app/assets/images/emoji/syringe.png Binary files differdeleted file mode 100644 index 71c1a9528d5..00000000000 --- a/app/assets/images/emoji/syringe.png +++ /dev/null diff --git a/app/assets/images/emoji/taco.png b/app/assets/images/emoji/taco.png Binary files differdeleted file mode 100644 index 10e847a4619..00000000000 --- a/app/assets/images/emoji/taco.png +++ /dev/null diff --git a/app/assets/images/emoji/tada.png b/app/assets/images/emoji/tada.png Binary files differdeleted file mode 100644 index 0244d60f269..00000000000 --- a/app/assets/images/emoji/tada.png +++ /dev/null diff --git a/app/assets/images/emoji/tanabata_tree.png b/app/assets/images/emoji/tanabata_tree.png Binary files differdeleted file mode 100644 index 46fcb3a1aac..00000000000 --- a/app/assets/images/emoji/tanabata_tree.png +++ /dev/null diff --git a/app/assets/images/emoji/tangerine.png b/app/assets/images/emoji/tangerine.png Binary files differdeleted file mode 100644 index ab14e5378db..00000000000 --- a/app/assets/images/emoji/tangerine.png +++ /dev/null diff --git a/app/assets/images/emoji/taurus.png b/app/assets/images/emoji/taurus.png Binary files differdeleted file mode 100644 index b2a370df42b..00000000000 --- a/app/assets/images/emoji/taurus.png +++ /dev/null diff --git a/app/assets/images/emoji/taxi.png b/app/assets/images/emoji/taxi.png Binary files differdeleted file mode 100644 index 55f4cc84797..00000000000 --- a/app/assets/images/emoji/taxi.png +++ /dev/null diff --git a/app/assets/images/emoji/tea.png b/app/assets/images/emoji/tea.png Binary files differdeleted file mode 100644 index b53b98f0c45..00000000000 --- a/app/assets/images/emoji/tea.png +++ /dev/null diff --git a/app/assets/images/emoji/telephone.png b/app/assets/images/emoji/telephone.png Binary files differdeleted file mode 100644 index a1e69f566bc..00000000000 --- a/app/assets/images/emoji/telephone.png +++ /dev/null diff --git a/app/assets/images/emoji/telephone_receiver.png b/app/assets/images/emoji/telephone_receiver.png Binary files differdeleted file mode 100644 index 69388316c35..00000000000 --- a/app/assets/images/emoji/telephone_receiver.png +++ /dev/null diff --git a/app/assets/images/emoji/telescope.png b/app/assets/images/emoji/telescope.png Binary files differdeleted file mode 100644 index d63154614b5..00000000000 --- a/app/assets/images/emoji/telescope.png +++ /dev/null diff --git a/app/assets/images/emoji/ten.png b/app/assets/images/emoji/ten.png Binary files differdeleted file mode 100644 index 782d4004962..00000000000 --- a/app/assets/images/emoji/ten.png +++ /dev/null diff --git a/app/assets/images/emoji/tennis.png b/app/assets/images/emoji/tennis.png Binary files differdeleted file mode 100644 index 7e68ba8f301..00000000000 --- a/app/assets/images/emoji/tennis.png +++ /dev/null diff --git a/app/assets/images/emoji/tent.png b/app/assets/images/emoji/tent.png Binary files differdeleted file mode 100644 index 3fddcfc56eb..00000000000 --- a/app/assets/images/emoji/tent.png +++ /dev/null diff --git a/app/assets/images/emoji/thermometer.png b/app/assets/images/emoji/thermometer.png Binary files differdeleted file mode 100644 index b1147392426..00000000000 --- a/app/assets/images/emoji/thermometer.png +++ /dev/null diff --git a/app/assets/images/emoji/thermometer_face.png b/app/assets/images/emoji/thermometer_face.png Binary files differdeleted file mode 100644 index 8fc57387563..00000000000 --- a/app/assets/images/emoji/thermometer_face.png +++ /dev/null diff --git a/app/assets/images/emoji/thinking.png b/app/assets/images/emoji/thinking.png Binary files differdeleted file mode 100644 index c18f6fd14ad..00000000000 --- a/app/assets/images/emoji/thinking.png +++ /dev/null diff --git a/app/assets/images/emoji/third_place.png b/app/assets/images/emoji/third_place.png Binary files differdeleted file mode 100644 index 636e04a5950..00000000000 --- a/app/assets/images/emoji/third_place.png +++ /dev/null diff --git a/app/assets/images/emoji/thought_balloon.png b/app/assets/images/emoji/thought_balloon.png Binary files differdeleted file mode 100644 index 72fe8fa7022..00000000000 --- a/app/assets/images/emoji/thought_balloon.png +++ /dev/null diff --git a/app/assets/images/emoji/three.png b/app/assets/images/emoji/three.png Binary files differdeleted file mode 100644 index dbaa6183e72..00000000000 --- a/app/assets/images/emoji/three.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsdown.png b/app/assets/images/emoji/thumbsdown.png Binary files differdeleted file mode 100644 index b63da2f20a8..00000000000 --- a/app/assets/images/emoji/thumbsdown.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsdown_tone1.png b/app/assets/images/emoji/thumbsdown_tone1.png Binary files differdeleted file mode 100644 index a1631af8e92..00000000000 --- a/app/assets/images/emoji/thumbsdown_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsdown_tone2.png b/app/assets/images/emoji/thumbsdown_tone2.png Binary files differdeleted file mode 100644 index 85fff82d595..00000000000 --- a/app/assets/images/emoji/thumbsdown_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsdown_tone3.png b/app/assets/images/emoji/thumbsdown_tone3.png Binary files differdeleted file mode 100644 index eeba3be80fd..00000000000 --- a/app/assets/images/emoji/thumbsdown_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsdown_tone4.png b/app/assets/images/emoji/thumbsdown_tone4.png Binary files differdeleted file mode 100644 index 1addafdaed0..00000000000 --- a/app/assets/images/emoji/thumbsdown_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsdown_tone5.png b/app/assets/images/emoji/thumbsdown_tone5.png Binary files differdeleted file mode 100644 index 37ec07b5721..00000000000 --- a/app/assets/images/emoji/thumbsdown_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsup.png b/app/assets/images/emoji/thumbsup.png Binary files differdeleted file mode 100644 index f9e6f13a34f..00000000000 --- a/app/assets/images/emoji/thumbsup.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsup_tone1.png b/app/assets/images/emoji/thumbsup_tone1.png Binary files differdeleted file mode 100644 index 39684cd5cc7..00000000000 --- a/app/assets/images/emoji/thumbsup_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsup_tone2.png b/app/assets/images/emoji/thumbsup_tone2.png Binary files differdeleted file mode 100644 index a9b59723573..00000000000 --- a/app/assets/images/emoji/thumbsup_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsup_tone3.png b/app/assets/images/emoji/thumbsup_tone3.png Binary files differdeleted file mode 100644 index c5e29167015..00000000000 --- a/app/assets/images/emoji/thumbsup_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsup_tone4.png b/app/assets/images/emoji/thumbsup_tone4.png Binary files differdeleted file mode 100644 index 5bf4857a884..00000000000 --- a/app/assets/images/emoji/thumbsup_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/thumbsup_tone5.png b/app/assets/images/emoji/thumbsup_tone5.png Binary files differdeleted file mode 100644 index d829f787c61..00000000000 --- a/app/assets/images/emoji/thumbsup_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/thunder_cloud_rain.png b/app/assets/images/emoji/thunder_cloud_rain.png Binary files differdeleted file mode 100644 index 31a26a1b6ee..00000000000 --- a/app/assets/images/emoji/thunder_cloud_rain.png +++ /dev/null diff --git a/app/assets/images/emoji/ticket.png b/app/assets/images/emoji/ticket.png Binary files differdeleted file mode 100644 index 605936bb6b3..00000000000 --- a/app/assets/images/emoji/ticket.png +++ /dev/null diff --git a/app/assets/images/emoji/tickets.png b/app/assets/images/emoji/tickets.png Binary files differdeleted file mode 100644 index e510f4a7a50..00000000000 --- a/app/assets/images/emoji/tickets.png +++ /dev/null diff --git a/app/assets/images/emoji/tiger.png b/app/assets/images/emoji/tiger.png Binary files differdeleted file mode 100644 index a4d3ef086d4..00000000000 --- a/app/assets/images/emoji/tiger.png +++ /dev/null diff --git a/app/assets/images/emoji/tiger2.png b/app/assets/images/emoji/tiger2.png Binary files differdeleted file mode 100644 index 871a8b74d56..00000000000 --- a/app/assets/images/emoji/tiger2.png +++ /dev/null diff --git a/app/assets/images/emoji/timer.png b/app/assets/images/emoji/timer.png Binary files differdeleted file mode 100644 index 8a3be574c24..00000000000 --- a/app/assets/images/emoji/timer.png +++ /dev/null diff --git a/app/assets/images/emoji/tired_face.png b/app/assets/images/emoji/tired_face.png Binary files differdeleted file mode 100644 index 4e01eff5b23..00000000000 --- a/app/assets/images/emoji/tired_face.png +++ /dev/null diff --git a/app/assets/images/emoji/tm.png b/app/assets/images/emoji/tm.png Binary files differdeleted file mode 100644 index 7a0c44a2c2b..00000000000 --- a/app/assets/images/emoji/tm.png +++ /dev/null diff --git a/app/assets/images/emoji/toilet.png b/app/assets/images/emoji/toilet.png Binary files differdeleted file mode 100644 index 1392f761835..00000000000 --- a/app/assets/images/emoji/toilet.png +++ /dev/null diff --git a/app/assets/images/emoji/tokyo_tower.png b/app/assets/images/emoji/tokyo_tower.png Binary files differdeleted file mode 100644 index 37df7fc65b1..00000000000 --- a/app/assets/images/emoji/tokyo_tower.png +++ /dev/null diff --git a/app/assets/images/emoji/tomato.png b/app/assets/images/emoji/tomato.png Binary files differdeleted file mode 100644 index 497da8f6b22..00000000000 --- a/app/assets/images/emoji/tomato.png +++ /dev/null diff --git a/app/assets/images/emoji/tone1.png b/app/assets/images/emoji/tone1.png Binary files differdeleted file mode 100644 index c395f3d0d68..00000000000 --- a/app/assets/images/emoji/tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/tone2.png b/app/assets/images/emoji/tone2.png Binary files differdeleted file mode 100644 index 080847431c1..00000000000 --- a/app/assets/images/emoji/tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/tone3.png b/app/assets/images/emoji/tone3.png Binary files differdeleted file mode 100644 index 482dd403475..00000000000 --- a/app/assets/images/emoji/tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/tone4.png b/app/assets/images/emoji/tone4.png Binary files differdeleted file mode 100644 index 5cae8bb20b0..00000000000 --- a/app/assets/images/emoji/tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/tone5.png b/app/assets/images/emoji/tone5.png Binary files differdeleted file mode 100644 index 49d1a8c3a64..00000000000 --- a/app/assets/images/emoji/tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/tongue.png b/app/assets/images/emoji/tongue.png Binary files differdeleted file mode 100644 index 70ce9c1225f..00000000000 --- a/app/assets/images/emoji/tongue.png +++ /dev/null diff --git a/app/assets/images/emoji/tools.png b/app/assets/images/emoji/tools.png Binary files differdeleted file mode 100644 index 3c6049273a9..00000000000 --- a/app/assets/images/emoji/tools.png +++ /dev/null diff --git a/app/assets/images/emoji/top.png b/app/assets/images/emoji/top.png Binary files differdeleted file mode 100644 index 49dea8c08b5..00000000000 --- a/app/assets/images/emoji/top.png +++ /dev/null diff --git a/app/assets/images/emoji/tophat.png b/app/assets/images/emoji/tophat.png Binary files differdeleted file mode 100644 index 131b657b109..00000000000 --- a/app/assets/images/emoji/tophat.png +++ /dev/null diff --git a/app/assets/images/emoji/track_next.png b/app/assets/images/emoji/track_next.png Binary files differdeleted file mode 100644 index f8880d33bab..00000000000 --- a/app/assets/images/emoji/track_next.png +++ /dev/null diff --git a/app/assets/images/emoji/track_previous.png b/app/assets/images/emoji/track_previous.png Binary files differdeleted file mode 100644 index 1ffd0566cfc..00000000000 --- a/app/assets/images/emoji/track_previous.png +++ /dev/null diff --git a/app/assets/images/emoji/trackball.png b/app/assets/images/emoji/trackball.png Binary files differdeleted file mode 100644 index 3bea84ad7ce..00000000000 --- a/app/assets/images/emoji/trackball.png +++ /dev/null diff --git a/app/assets/images/emoji/tractor.png b/app/assets/images/emoji/tractor.png Binary files differdeleted file mode 100644 index c1bf8cae44f..00000000000 --- a/app/assets/images/emoji/tractor.png +++ /dev/null diff --git a/app/assets/images/emoji/traffic_light.png b/app/assets/images/emoji/traffic_light.png Binary files differdeleted file mode 100644 index 6b312285b00..00000000000 --- a/app/assets/images/emoji/traffic_light.png +++ /dev/null diff --git a/app/assets/images/emoji/train.png b/app/assets/images/emoji/train.png Binary files differdeleted file mode 100644 index 3c80321f7e8..00000000000 --- a/app/assets/images/emoji/train.png +++ /dev/null diff --git a/app/assets/images/emoji/train2.png b/app/assets/images/emoji/train2.png Binary files differdeleted file mode 100644 index 367c7bc5d39..00000000000 --- a/app/assets/images/emoji/train2.png +++ /dev/null diff --git a/app/assets/images/emoji/tram.png b/app/assets/images/emoji/tram.png Binary files differdeleted file mode 100644 index b6f0e69038f..00000000000 --- a/app/assets/images/emoji/tram.png +++ /dev/null diff --git a/app/assets/images/emoji/triangular_flag_on_post.png b/app/assets/images/emoji/triangular_flag_on_post.png Binary files differdeleted file mode 100644 index c12d8b06886..00000000000 --- a/app/assets/images/emoji/triangular_flag_on_post.png +++ /dev/null diff --git a/app/assets/images/emoji/triangular_ruler.png b/app/assets/images/emoji/triangular_ruler.png Binary files differdeleted file mode 100644 index 77dee9ee843..00000000000 --- a/app/assets/images/emoji/triangular_ruler.png +++ /dev/null diff --git a/app/assets/images/emoji/trident.png b/app/assets/images/emoji/trident.png Binary files differdeleted file mode 100644 index 777a1dad121..00000000000 --- a/app/assets/images/emoji/trident.png +++ /dev/null diff --git a/app/assets/images/emoji/triumph.png b/app/assets/images/emoji/triumph.png Binary files differdeleted file mode 100644 index 0be7a501969..00000000000 --- a/app/assets/images/emoji/triumph.png +++ /dev/null diff --git a/app/assets/images/emoji/trolleybus.png b/app/assets/images/emoji/trolleybus.png Binary files differdeleted file mode 100644 index 139a9931b52..00000000000 --- a/app/assets/images/emoji/trolleybus.png +++ /dev/null diff --git a/app/assets/images/emoji/trophy.png b/app/assets/images/emoji/trophy.png Binary files differdeleted file mode 100644 index ac2895c1896..00000000000 --- a/app/assets/images/emoji/trophy.png +++ /dev/null diff --git a/app/assets/images/emoji/tropical_drink.png b/app/assets/images/emoji/tropical_drink.png Binary files differdeleted file mode 100644 index cd714f81b36..00000000000 --- a/app/assets/images/emoji/tropical_drink.png +++ /dev/null diff --git a/app/assets/images/emoji/tropical_fish.png b/app/assets/images/emoji/tropical_fish.png Binary files differdeleted file mode 100644 index 252105235a6..00000000000 --- a/app/assets/images/emoji/tropical_fish.png +++ /dev/null diff --git a/app/assets/images/emoji/truck.png b/app/assets/images/emoji/truck.png Binary files differdeleted file mode 100644 index 130de047f8b..00000000000 --- a/app/assets/images/emoji/truck.png +++ /dev/null diff --git a/app/assets/images/emoji/trumpet.png b/app/assets/images/emoji/trumpet.png Binary files differdeleted file mode 100644 index 864ccbcd04a..00000000000 --- a/app/assets/images/emoji/trumpet.png +++ /dev/null diff --git a/app/assets/images/emoji/tulip.png b/app/assets/images/emoji/tulip.png Binary files differdeleted file mode 100644 index f799d75c182..00000000000 --- a/app/assets/images/emoji/tulip.png +++ /dev/null diff --git a/app/assets/images/emoji/tumbler_glass.png b/app/assets/images/emoji/tumbler_glass.png Binary files differdeleted file mode 100644 index 7bf09229879..00000000000 --- a/app/assets/images/emoji/tumbler_glass.png +++ /dev/null diff --git a/app/assets/images/emoji/turkey.png b/app/assets/images/emoji/turkey.png Binary files differdeleted file mode 100644 index 344af94c9ec..00000000000 --- a/app/assets/images/emoji/turkey.png +++ /dev/null diff --git a/app/assets/images/emoji/turtle.png b/app/assets/images/emoji/turtle.png Binary files differdeleted file mode 100644 index c22f7519fe8..00000000000 --- a/app/assets/images/emoji/turtle.png +++ /dev/null diff --git a/app/assets/images/emoji/tv.png b/app/assets/images/emoji/tv.png Binary files differdeleted file mode 100644 index 999f1fb5c6d..00000000000 --- a/app/assets/images/emoji/tv.png +++ /dev/null diff --git a/app/assets/images/emoji/twisted_rightwards_arrows.png b/app/assets/images/emoji/twisted_rightwards_arrows.png Binary files differdeleted file mode 100644 index 5904badde65..00000000000 --- a/app/assets/images/emoji/twisted_rightwards_arrows.png +++ /dev/null diff --git a/app/assets/images/emoji/two.png b/app/assets/images/emoji/two.png Binary files differdeleted file mode 100644 index 927339c9bff..00000000000 --- a/app/assets/images/emoji/two.png +++ /dev/null diff --git a/app/assets/images/emoji/two_hearts.png b/app/assets/images/emoji/two_hearts.png Binary files differdeleted file mode 100644 index 4d8c3386042..00000000000 --- a/app/assets/images/emoji/two_hearts.png +++ /dev/null diff --git a/app/assets/images/emoji/two_men_holding_hands.png b/app/assets/images/emoji/two_men_holding_hands.png Binary files differdeleted file mode 100644 index a511fda822a..00000000000 --- a/app/assets/images/emoji/two_men_holding_hands.png +++ /dev/null diff --git a/app/assets/images/emoji/two_women_holding_hands.png b/app/assets/images/emoji/two_women_holding_hands.png Binary files differdeleted file mode 100644 index b077cd3e40f..00000000000 --- a/app/assets/images/emoji/two_women_holding_hands.png +++ /dev/null diff --git a/app/assets/images/emoji/u5272.png b/app/assets/images/emoji/u5272.png Binary files differdeleted file mode 100644 index c4f837fe684..00000000000 --- a/app/assets/images/emoji/u5272.png +++ /dev/null diff --git a/app/assets/images/emoji/u5408.png b/app/assets/images/emoji/u5408.png Binary files differdeleted file mode 100644 index 8375ad9d9af..00000000000 --- a/app/assets/images/emoji/u5408.png +++ /dev/null diff --git a/app/assets/images/emoji/u55b6.png b/app/assets/images/emoji/u55b6.png Binary files differdeleted file mode 100644 index d21cb30eaf3..00000000000 --- a/app/assets/images/emoji/u55b6.png +++ /dev/null diff --git a/app/assets/images/emoji/u6307.png b/app/assets/images/emoji/u6307.png Binary files differdeleted file mode 100644 index 078e23e4ff3..00000000000 --- a/app/assets/images/emoji/u6307.png +++ /dev/null diff --git a/app/assets/images/emoji/u6708.png b/app/assets/images/emoji/u6708.png Binary files differdeleted file mode 100644 index c41bd36a26a..00000000000 --- a/app/assets/images/emoji/u6708.png +++ /dev/null diff --git a/app/assets/images/emoji/u6709.png b/app/assets/images/emoji/u6709.png Binary files differdeleted file mode 100644 index a4510de41c0..00000000000 --- a/app/assets/images/emoji/u6709.png +++ /dev/null diff --git a/app/assets/images/emoji/u6e80.png b/app/assets/images/emoji/u6e80.png Binary files differdeleted file mode 100644 index f9dea8b8833..00000000000 --- a/app/assets/images/emoji/u6e80.png +++ /dev/null diff --git a/app/assets/images/emoji/u7121.png b/app/assets/images/emoji/u7121.png Binary files differdeleted file mode 100644 index d3a19b420de..00000000000 --- a/app/assets/images/emoji/u7121.png +++ /dev/null diff --git a/app/assets/images/emoji/u7533.png b/app/assets/images/emoji/u7533.png Binary files differdeleted file mode 100644 index 6b7af0ee222..00000000000 --- a/app/assets/images/emoji/u7533.png +++ /dev/null diff --git a/app/assets/images/emoji/u7981.png b/app/assets/images/emoji/u7981.png Binary files differdeleted file mode 100644 index 4c704e03433..00000000000 --- a/app/assets/images/emoji/u7981.png +++ /dev/null diff --git a/app/assets/images/emoji/u7a7a.png b/app/assets/images/emoji/u7a7a.png Binary files differdeleted file mode 100644 index 47966c1ea93..00000000000 --- a/app/assets/images/emoji/u7a7a.png +++ /dev/null diff --git a/app/assets/images/emoji/umbrella.png b/app/assets/images/emoji/umbrella.png Binary files differdeleted file mode 100644 index 5b35b7ff6a4..00000000000 --- a/app/assets/images/emoji/umbrella.png +++ /dev/null diff --git a/app/assets/images/emoji/umbrella2.png b/app/assets/images/emoji/umbrella2.png Binary files differdeleted file mode 100644 index 97fe859e74f..00000000000 --- a/app/assets/images/emoji/umbrella2.png +++ /dev/null diff --git a/app/assets/images/emoji/unamused.png b/app/assets/images/emoji/unamused.png Binary files differdeleted file mode 100644 index 25e3677f2eb..00000000000 --- a/app/assets/images/emoji/unamused.png +++ /dev/null diff --git a/app/assets/images/emoji/underage.png b/app/assets/images/emoji/underage.png Binary files differdeleted file mode 100644 index 6dfe6da51e2..00000000000 --- a/app/assets/images/emoji/underage.png +++ /dev/null diff --git a/app/assets/images/emoji/unicorn.png b/app/assets/images/emoji/unicorn.png Binary files differdeleted file mode 100644 index 05a97969f7e..00000000000 --- a/app/assets/images/emoji/unicorn.png +++ /dev/null diff --git a/app/assets/images/emoji/unlock.png b/app/assets/images/emoji/unlock.png Binary files differdeleted file mode 100644 index 4a74a693911..00000000000 --- a/app/assets/images/emoji/unlock.png +++ /dev/null diff --git a/app/assets/images/emoji/up.png b/app/assets/images/emoji/up.png Binary files differdeleted file mode 100644 index 0d42142ba04..00000000000 --- a/app/assets/images/emoji/up.png +++ /dev/null diff --git a/app/assets/images/emoji/upside_down.png b/app/assets/images/emoji/upside_down.png Binary files differdeleted file mode 100644 index 128f31c9828..00000000000 --- a/app/assets/images/emoji/upside_down.png +++ /dev/null diff --git a/app/assets/images/emoji/urn.png b/app/assets/images/emoji/urn.png Binary files differdeleted file mode 100644 index 6b5b3503438..00000000000 --- a/app/assets/images/emoji/urn.png +++ /dev/null diff --git a/app/assets/images/emoji/v.png b/app/assets/images/emoji/v.png Binary files differdeleted file mode 100644 index 70c5516ffee..00000000000 --- a/app/assets/images/emoji/v.png +++ /dev/null diff --git a/app/assets/images/emoji/v_tone1.png b/app/assets/images/emoji/v_tone1.png Binary files differdeleted file mode 100644 index 6ac54a745f4..00000000000 --- a/app/assets/images/emoji/v_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/v_tone2.png b/app/assets/images/emoji/v_tone2.png Binary files differdeleted file mode 100644 index 6dd9669866d..00000000000 --- a/app/assets/images/emoji/v_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/v_tone3.png b/app/assets/images/emoji/v_tone3.png Binary files differdeleted file mode 100644 index a615e53f02f..00000000000 --- a/app/assets/images/emoji/v_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/v_tone4.png b/app/assets/images/emoji/v_tone4.png Binary files differdeleted file mode 100644 index 33a34bd5a78..00000000000 --- a/app/assets/images/emoji/v_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/v_tone5.png b/app/assets/images/emoji/v_tone5.png Binary files differdeleted file mode 100644 index 45ad14b6c9c..00000000000 --- a/app/assets/images/emoji/v_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/vertical_traffic_light.png b/app/assets/images/emoji/vertical_traffic_light.png Binary files differdeleted file mode 100644 index 8085973eecf..00000000000 --- a/app/assets/images/emoji/vertical_traffic_light.png +++ /dev/null diff --git a/app/assets/images/emoji/vhs.png b/app/assets/images/emoji/vhs.png Binary files differdeleted file mode 100644 index b9eb78ecd92..00000000000 --- a/app/assets/images/emoji/vhs.png +++ /dev/null diff --git a/app/assets/images/emoji/vibration_mode.png b/app/assets/images/emoji/vibration_mode.png Binary files differdeleted file mode 100644 index cc46510e48e..00000000000 --- a/app/assets/images/emoji/vibration_mode.png +++ /dev/null diff --git a/app/assets/images/emoji/video_camera.png b/app/assets/images/emoji/video_camera.png Binary files differdeleted file mode 100644 index 85b300d425c..00000000000 --- a/app/assets/images/emoji/video_camera.png +++ /dev/null diff --git a/app/assets/images/emoji/video_game.png b/app/assets/images/emoji/video_game.png Binary files differdeleted file mode 100644 index 316a9106a55..00000000000 --- a/app/assets/images/emoji/video_game.png +++ /dev/null diff --git a/app/assets/images/emoji/violin.png b/app/assets/images/emoji/violin.png Binary files differdeleted file mode 100644 index e1e76cce242..00000000000 --- a/app/assets/images/emoji/violin.png +++ /dev/null diff --git a/app/assets/images/emoji/virgo.png b/app/assets/images/emoji/virgo.png Binary files differdeleted file mode 100644 index a6b56c2cb5e..00000000000 --- a/app/assets/images/emoji/virgo.png +++ /dev/null diff --git a/app/assets/images/emoji/volcano.png b/app/assets/images/emoji/volcano.png Binary files differdeleted file mode 100644 index 931d569294c..00000000000 --- a/app/assets/images/emoji/volcano.png +++ /dev/null diff --git a/app/assets/images/emoji/volleyball.png b/app/assets/images/emoji/volleyball.png Binary files differdeleted file mode 100644 index 7a0e49d4b07..00000000000 --- a/app/assets/images/emoji/volleyball.png +++ /dev/null diff --git a/app/assets/images/emoji/vs.png b/app/assets/images/emoji/vs.png Binary files differdeleted file mode 100644 index e1180f4a464..00000000000 --- a/app/assets/images/emoji/vs.png +++ /dev/null diff --git a/app/assets/images/emoji/vulcan.png b/app/assets/images/emoji/vulcan.png Binary files differdeleted file mode 100644 index 54728bcaf5c..00000000000 --- a/app/assets/images/emoji/vulcan.png +++ /dev/null diff --git a/app/assets/images/emoji/vulcan_tone1.png b/app/assets/images/emoji/vulcan_tone1.png Binary files differdeleted file mode 100644 index 8aff5d8fa16..00000000000 --- a/app/assets/images/emoji/vulcan_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/vulcan_tone2.png b/app/assets/images/emoji/vulcan_tone2.png Binary files differdeleted file mode 100644 index 82b7ad519b4..00000000000 --- a/app/assets/images/emoji/vulcan_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/vulcan_tone3.png b/app/assets/images/emoji/vulcan_tone3.png Binary files differdeleted file mode 100644 index d1400e1dd28..00000000000 --- a/app/assets/images/emoji/vulcan_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/vulcan_tone4.png b/app/assets/images/emoji/vulcan_tone4.png Binary files differdeleted file mode 100644 index 47e2b280148..00000000000 --- a/app/assets/images/emoji/vulcan_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/vulcan_tone5.png b/app/assets/images/emoji/vulcan_tone5.png Binary files differdeleted file mode 100644 index 60b5c6077be..00000000000 --- a/app/assets/images/emoji/vulcan_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/walking.png b/app/assets/images/emoji/walking.png Binary files differdeleted file mode 100644 index 06dc169a3fd..00000000000 --- a/app/assets/images/emoji/walking.png +++ /dev/null diff --git a/app/assets/images/emoji/walking_tone1.png b/app/assets/images/emoji/walking_tone1.png Binary files differdeleted file mode 100644 index 4e391b45a0b..00000000000 --- a/app/assets/images/emoji/walking_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/walking_tone2.png b/app/assets/images/emoji/walking_tone2.png Binary files differdeleted file mode 100644 index 31f94a1bce1..00000000000 --- a/app/assets/images/emoji/walking_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/walking_tone3.png b/app/assets/images/emoji/walking_tone3.png Binary files differdeleted file mode 100644 index f7ed8e39c2e..00000000000 --- a/app/assets/images/emoji/walking_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/walking_tone4.png b/app/assets/images/emoji/walking_tone4.png Binary files differdeleted file mode 100644 index e58dc04c7b2..00000000000 --- a/app/assets/images/emoji/walking_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/walking_tone5.png b/app/assets/images/emoji/walking_tone5.png Binary files differdeleted file mode 100644 index ba4e1b58fcb..00000000000 --- a/app/assets/images/emoji/walking_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/waning_crescent_moon.png b/app/assets/images/emoji/waning_crescent_moon.png Binary files differdeleted file mode 100644 index cf68706b871..00000000000 --- a/app/assets/images/emoji/waning_crescent_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/waning_gibbous_moon.png b/app/assets/images/emoji/waning_gibbous_moon.png Binary files differdeleted file mode 100644 index 24e16266119..00000000000 --- a/app/assets/images/emoji/waning_gibbous_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/warning.png b/app/assets/images/emoji/warning.png Binary files differdeleted file mode 100644 index 35691c2ed97..00000000000 --- a/app/assets/images/emoji/warning.png +++ /dev/null diff --git a/app/assets/images/emoji/wastebasket.png b/app/assets/images/emoji/wastebasket.png Binary files differdeleted file mode 100644 index 2b3c484b498..00000000000 --- a/app/assets/images/emoji/wastebasket.png +++ /dev/null diff --git a/app/assets/images/emoji/watch.png b/app/assets/images/emoji/watch.png Binary files differdeleted file mode 100644 index 64819bc6e21..00000000000 --- a/app/assets/images/emoji/watch.png +++ /dev/null diff --git a/app/assets/images/emoji/water_buffalo.png b/app/assets/images/emoji/water_buffalo.png Binary files differdeleted file mode 100644 index 80446615caf..00000000000 --- a/app/assets/images/emoji/water_buffalo.png +++ /dev/null diff --git a/app/assets/images/emoji/water_polo.png b/app/assets/images/emoji/water_polo.png Binary files differdeleted file mode 100644 index cb44576780d..00000000000 --- a/app/assets/images/emoji/water_polo.png +++ /dev/null diff --git a/app/assets/images/emoji/water_polo_tone1.png b/app/assets/images/emoji/water_polo_tone1.png Binary files differdeleted file mode 100644 index bed1a908d6a..00000000000 --- a/app/assets/images/emoji/water_polo_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/water_polo_tone2.png b/app/assets/images/emoji/water_polo_tone2.png Binary files differdeleted file mode 100644 index ec5a43b4d4a..00000000000 --- a/app/assets/images/emoji/water_polo_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/water_polo_tone3.png b/app/assets/images/emoji/water_polo_tone3.png Binary files differdeleted file mode 100644 index b081a4a5a96..00000000000 --- a/app/assets/images/emoji/water_polo_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/water_polo_tone4.png b/app/assets/images/emoji/water_polo_tone4.png Binary files differdeleted file mode 100644 index 82cfbc3b0c7..00000000000 --- a/app/assets/images/emoji/water_polo_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/water_polo_tone5.png b/app/assets/images/emoji/water_polo_tone5.png Binary files differdeleted file mode 100644 index bd3366eb06c..00000000000 --- a/app/assets/images/emoji/water_polo_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/watermelon.png b/app/assets/images/emoji/watermelon.png Binary files differdeleted file mode 100644 index 0761488b4c9..00000000000 --- a/app/assets/images/emoji/watermelon.png +++ /dev/null diff --git a/app/assets/images/emoji/wave.png b/app/assets/images/emoji/wave.png Binary files differdeleted file mode 100644 index e0cd79b45f5..00000000000 --- a/app/assets/images/emoji/wave.png +++ /dev/null diff --git a/app/assets/images/emoji/wave_tone1.png b/app/assets/images/emoji/wave_tone1.png Binary files differdeleted file mode 100644 index 6b2b34b106e..00000000000 --- a/app/assets/images/emoji/wave_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/wave_tone2.png b/app/assets/images/emoji/wave_tone2.png Binary files differdeleted file mode 100644 index b857119732e..00000000000 --- a/app/assets/images/emoji/wave_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/wave_tone3.png b/app/assets/images/emoji/wave_tone3.png Binary files differdeleted file mode 100644 index 6283b670f43..00000000000 --- a/app/assets/images/emoji/wave_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/wave_tone4.png b/app/assets/images/emoji/wave_tone4.png Binary files differdeleted file mode 100644 index fe6b2baa747..00000000000 --- a/app/assets/images/emoji/wave_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/wave_tone5.png b/app/assets/images/emoji/wave_tone5.png Binary files differdeleted file mode 100644 index 4bd168ebb78..00000000000 --- a/app/assets/images/emoji/wave_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/wavy_dash.png b/app/assets/images/emoji/wavy_dash.png Binary files differdeleted file mode 100644 index 001c8d6e47d..00000000000 --- a/app/assets/images/emoji/wavy_dash.png +++ /dev/null diff --git a/app/assets/images/emoji/waxing_crescent_moon.png b/app/assets/images/emoji/waxing_crescent_moon.png Binary files differdeleted file mode 100644 index 687125173d9..00000000000 --- a/app/assets/images/emoji/waxing_crescent_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/waxing_gibbous_moon.png b/app/assets/images/emoji/waxing_gibbous_moon.png Binary files differdeleted file mode 100644 index 3a808156318..00000000000 --- a/app/assets/images/emoji/waxing_gibbous_moon.png +++ /dev/null diff --git a/app/assets/images/emoji/wc.png b/app/assets/images/emoji/wc.png Binary files differdeleted file mode 100644 index aa433e84ba6..00000000000 --- a/app/assets/images/emoji/wc.png +++ /dev/null diff --git a/app/assets/images/emoji/weary.png b/app/assets/images/emoji/weary.png Binary files differdeleted file mode 100644 index 98bfbd24a16..00000000000 --- a/app/assets/images/emoji/weary.png +++ /dev/null diff --git a/app/assets/images/emoji/wedding.png b/app/assets/images/emoji/wedding.png Binary files differdeleted file mode 100644 index d0d8aa0bfae..00000000000 --- a/app/assets/images/emoji/wedding.png +++ /dev/null diff --git a/app/assets/images/emoji/whale.png b/app/assets/images/emoji/whale.png Binary files differdeleted file mode 100644 index 9f19b44257c..00000000000 --- a/app/assets/images/emoji/whale.png +++ /dev/null diff --git a/app/assets/images/emoji/whale2.png b/app/assets/images/emoji/whale2.png Binary files differdeleted file mode 100644 index 0df9d3c73a4..00000000000 --- a/app/assets/images/emoji/whale2.png +++ /dev/null diff --git a/app/assets/images/emoji/wheel_of_dharma.png b/app/assets/images/emoji/wheel_of_dharma.png Binary files differdeleted file mode 100644 index 3666db0016b..00000000000 --- a/app/assets/images/emoji/wheel_of_dharma.png +++ /dev/null diff --git a/app/assets/images/emoji/wheelchair.png b/app/assets/images/emoji/wheelchair.png Binary files differdeleted file mode 100644 index 4e5b2698eac..00000000000 --- a/app/assets/images/emoji/wheelchair.png +++ /dev/null diff --git a/app/assets/images/emoji/white_check_mark.png b/app/assets/images/emoji/white_check_mark.png Binary files differdeleted file mode 100644 index e55f087e544..00000000000 --- a/app/assets/images/emoji/white_check_mark.png +++ /dev/null diff --git a/app/assets/images/emoji/white_circle.png b/app/assets/images/emoji/white_circle.png Binary files differdeleted file mode 100644 index c19e15684dd..00000000000 --- a/app/assets/images/emoji/white_circle.png +++ /dev/null diff --git a/app/assets/images/emoji/white_flower.png b/app/assets/images/emoji/white_flower.png Binary files differdeleted file mode 100644 index d6af8b60077..00000000000 --- a/app/assets/images/emoji/white_flower.png +++ /dev/null diff --git a/app/assets/images/emoji/white_large_square.png b/app/assets/images/emoji/white_large_square.png Binary files differdeleted file mode 100644 index 6f06c1c79de..00000000000 --- a/app/assets/images/emoji/white_large_square.png +++ /dev/null diff --git a/app/assets/images/emoji/white_medium_small_square.png b/app/assets/images/emoji/white_medium_small_square.png Binary files differdeleted file mode 100644 index ae874126750..00000000000 --- a/app/assets/images/emoji/white_medium_small_square.png +++ /dev/null diff --git a/app/assets/images/emoji/white_medium_square.png b/app/assets/images/emoji/white_medium_square.png Binary files differdeleted file mode 100644 index 8daacf57059..00000000000 --- a/app/assets/images/emoji/white_medium_square.png +++ /dev/null diff --git a/app/assets/images/emoji/white_small_square.png b/app/assets/images/emoji/white_small_square.png Binary files differdeleted file mode 100644 index d7ebdb0c0ed..00000000000 --- a/app/assets/images/emoji/white_small_square.png +++ /dev/null diff --git a/app/assets/images/emoji/white_square_button.png b/app/assets/images/emoji/white_square_button.png Binary files differdeleted file mode 100644 index 934b1cedfd2..00000000000 --- a/app/assets/images/emoji/white_square_button.png +++ /dev/null diff --git a/app/assets/images/emoji/white_sun_cloud.png b/app/assets/images/emoji/white_sun_cloud.png Binary files differdeleted file mode 100644 index 0a4cc100269..00000000000 --- a/app/assets/images/emoji/white_sun_cloud.png +++ /dev/null diff --git a/app/assets/images/emoji/white_sun_rain_cloud.png b/app/assets/images/emoji/white_sun_rain_cloud.png Binary files differdeleted file mode 100644 index 491f9ca4839..00000000000 --- a/app/assets/images/emoji/white_sun_rain_cloud.png +++ /dev/null diff --git a/app/assets/images/emoji/white_sun_small_cloud.png b/app/assets/images/emoji/white_sun_small_cloud.png Binary files differdeleted file mode 100644 index cead0bfa521..00000000000 --- a/app/assets/images/emoji/white_sun_small_cloud.png +++ /dev/null diff --git a/app/assets/images/emoji/wilted_rose.png b/app/assets/images/emoji/wilted_rose.png Binary files differdeleted file mode 100644 index 62412b143ae..00000000000 --- a/app/assets/images/emoji/wilted_rose.png +++ /dev/null diff --git a/app/assets/images/emoji/wind_blowing_face.png b/app/assets/images/emoji/wind_blowing_face.png Binary files differdeleted file mode 100644 index df81b652eb6..00000000000 --- a/app/assets/images/emoji/wind_blowing_face.png +++ /dev/null diff --git a/app/assets/images/emoji/wind_chime.png b/app/assets/images/emoji/wind_chime.png Binary files differdeleted file mode 100644 index 3c9ef3a95f6..00000000000 --- a/app/assets/images/emoji/wind_chime.png +++ /dev/null diff --git a/app/assets/images/emoji/wine_glass.png b/app/assets/images/emoji/wine_glass.png Binary files differdeleted file mode 100644 index 3cc98689192..00000000000 --- a/app/assets/images/emoji/wine_glass.png +++ /dev/null diff --git a/app/assets/images/emoji/wink.png b/app/assets/images/emoji/wink.png Binary files differdeleted file mode 100644 index 7ea7810a37d..00000000000 --- a/app/assets/images/emoji/wink.png +++ /dev/null diff --git a/app/assets/images/emoji/wolf.png b/app/assets/images/emoji/wolf.png Binary files differdeleted file mode 100644 index ba7220f2de9..00000000000 --- a/app/assets/images/emoji/wolf.png +++ /dev/null diff --git a/app/assets/images/emoji/woman.png b/app/assets/images/emoji/woman.png Binary files differdeleted file mode 100644 index ece440e7a61..00000000000 --- a/app/assets/images/emoji/woman.png +++ /dev/null diff --git a/app/assets/images/emoji/woman_tone1.png b/app/assets/images/emoji/woman_tone1.png Binary files differdeleted file mode 100644 index ff089b8889b..00000000000 --- a/app/assets/images/emoji/woman_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/woman_tone2.png b/app/assets/images/emoji/woman_tone2.png Binary files differdeleted file mode 100644 index 0719c378016..00000000000 --- a/app/assets/images/emoji/woman_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/woman_tone3.png b/app/assets/images/emoji/woman_tone3.png Binary files differdeleted file mode 100644 index 5672e2fd52d..00000000000 --- a/app/assets/images/emoji/woman_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/woman_tone4.png b/app/assets/images/emoji/woman_tone4.png Binary files differdeleted file mode 100644 index 5754aab558b..00000000000 --- a/app/assets/images/emoji/woman_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/woman_tone5.png b/app/assets/images/emoji/woman_tone5.png Binary files differdeleted file mode 100644 index fc252af3a39..00000000000 --- a/app/assets/images/emoji/woman_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/womans_clothes.png b/app/assets/images/emoji/womans_clothes.png Binary files differdeleted file mode 100644 index 01410dc8107..00000000000 --- a/app/assets/images/emoji/womans_clothes.png +++ /dev/null diff --git a/app/assets/images/emoji/womans_hat.png b/app/assets/images/emoji/womans_hat.png Binary files differdeleted file mode 100644 index b837b6a2e47..00000000000 --- a/app/assets/images/emoji/womans_hat.png +++ /dev/null diff --git a/app/assets/images/emoji/womens.png b/app/assets/images/emoji/womens.png Binary files differdeleted file mode 100644 index d4ecc22e7b3..00000000000 --- a/app/assets/images/emoji/womens.png +++ /dev/null diff --git a/app/assets/images/emoji/worried.png b/app/assets/images/emoji/worried.png Binary files differdeleted file mode 100644 index 7074afcf5b7..00000000000 --- a/app/assets/images/emoji/worried.png +++ /dev/null diff --git a/app/assets/images/emoji/wrench.png b/app/assets/images/emoji/wrench.png Binary files differdeleted file mode 100644 index c16b7439697..00000000000 --- a/app/assets/images/emoji/wrench.png +++ /dev/null diff --git a/app/assets/images/emoji/wrestlers.png b/app/assets/images/emoji/wrestlers.png Binary files differdeleted file mode 100644 index 71e67cfad85..00000000000 --- a/app/assets/images/emoji/wrestlers.png +++ /dev/null diff --git a/app/assets/images/emoji/wrestlers_tone1.png b/app/assets/images/emoji/wrestlers_tone1.png Binary files differdeleted file mode 100644 index 379070fd03b..00000000000 --- a/app/assets/images/emoji/wrestlers_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/wrestlers_tone2.png b/app/assets/images/emoji/wrestlers_tone2.png Binary files differdeleted file mode 100644 index 6863ea9209d..00000000000 --- a/app/assets/images/emoji/wrestlers_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/wrestlers_tone3.png b/app/assets/images/emoji/wrestlers_tone3.png Binary files differdeleted file mode 100644 index b7e62910127..00000000000 --- a/app/assets/images/emoji/wrestlers_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/wrestlers_tone4.png b/app/assets/images/emoji/wrestlers_tone4.png Binary files differdeleted file mode 100644 index 750f9589233..00000000000 --- a/app/assets/images/emoji/wrestlers_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/wrestlers_tone5.png b/app/assets/images/emoji/wrestlers_tone5.png Binary files differdeleted file mode 100644 index 36ab9bb3f42..00000000000 --- a/app/assets/images/emoji/wrestlers_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/writing_hand.png b/app/assets/images/emoji/writing_hand.png Binary files differdeleted file mode 100644 index 85639f8ac40..00000000000 --- a/app/assets/images/emoji/writing_hand.png +++ /dev/null diff --git a/app/assets/images/emoji/writing_hand_tone1.png b/app/assets/images/emoji/writing_hand_tone1.png Binary files differdeleted file mode 100644 index 7923d8ebb17..00000000000 --- a/app/assets/images/emoji/writing_hand_tone1.png +++ /dev/null diff --git a/app/assets/images/emoji/writing_hand_tone2.png b/app/assets/images/emoji/writing_hand_tone2.png Binary files differdeleted file mode 100644 index bcb304e15d2..00000000000 --- a/app/assets/images/emoji/writing_hand_tone2.png +++ /dev/null diff --git a/app/assets/images/emoji/writing_hand_tone3.png b/app/assets/images/emoji/writing_hand_tone3.png Binary files differdeleted file mode 100644 index fd885fd2d90..00000000000 --- a/app/assets/images/emoji/writing_hand_tone3.png +++ /dev/null diff --git a/app/assets/images/emoji/writing_hand_tone4.png b/app/assets/images/emoji/writing_hand_tone4.png Binary files differdeleted file mode 100644 index d065b8c64ab..00000000000 --- a/app/assets/images/emoji/writing_hand_tone4.png +++ /dev/null diff --git a/app/assets/images/emoji/writing_hand_tone5.png b/app/assets/images/emoji/writing_hand_tone5.png Binary files differdeleted file mode 100644 index a44b3dd757c..00000000000 --- a/app/assets/images/emoji/writing_hand_tone5.png +++ /dev/null diff --git a/app/assets/images/emoji/x.png b/app/assets/images/emoji/x.png Binary files differdeleted file mode 100644 index 9f9ed0f7ad2..00000000000 --- a/app/assets/images/emoji/x.png +++ /dev/null diff --git a/app/assets/images/emoji/yellow_heart.png b/app/assets/images/emoji/yellow_heart.png Binary files differdeleted file mode 100644 index 7901a9d0103..00000000000 --- a/app/assets/images/emoji/yellow_heart.png +++ /dev/null diff --git a/app/assets/images/emoji/yen.png b/app/assets/images/emoji/yen.png Binary files differdeleted file mode 100644 index 63ee4799d66..00000000000 --- a/app/assets/images/emoji/yen.png +++ /dev/null diff --git a/app/assets/images/emoji/yin_yang.png b/app/assets/images/emoji/yin_yang.png Binary files differdeleted file mode 100644 index f2900f6338f..00000000000 --- a/app/assets/images/emoji/yin_yang.png +++ /dev/null diff --git a/app/assets/images/emoji/yum.png b/app/assets/images/emoji/yum.png Binary files differdeleted file mode 100644 index 2df15753ca1..00000000000 --- a/app/assets/images/emoji/yum.png +++ /dev/null diff --git a/app/assets/images/emoji/zap.png b/app/assets/images/emoji/zap.png Binary files differdeleted file mode 100644 index 47e68e48e49..00000000000 --- a/app/assets/images/emoji/zap.png +++ /dev/null diff --git a/app/assets/images/emoji/zero.png b/app/assets/images/emoji/zero.png Binary files differdeleted file mode 100644 index 13aca83e018..00000000000 --- a/app/assets/images/emoji/zero.png +++ /dev/null diff --git a/app/assets/images/emoji/zipper_mouth.png b/app/assets/images/emoji/zipper_mouth.png Binary files differdeleted file mode 100644 index f8ced2502a7..00000000000 --- a/app/assets/images/emoji/zipper_mouth.png +++ /dev/null diff --git a/app/assets/images/emoji/zzz.png b/app/assets/images/emoji/zzz.png Binary files differdeleted file mode 100644 index 9bc72b4469f..00000000000 --- a/app/assets/images/emoji/zzz.png +++ /dev/null diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index 85eb08cc97d..8754c253881 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -12,6 +12,7 @@ const Api = { projectsPath: '/api/:version/projects.json', projectPath: '/api/:version/projects/:id', projectLabelsPath: '/:namespace_path/:project_path/labels', + projectMergeRequestsPath: '/api/:version/projects/:id/merge_requests', projectMergeRequestPath: '/api/:version/projects/:id/merge_requests/:mrid', projectMergeRequestChangesPath: '/api/:version/projects/:id/merge_requests/:mrid/changes', projectMergeRequestVersionsPath: '/api/:version/projects/:id/merge_requests/:mrid/versions', @@ -111,6 +112,22 @@ const Api = { return axios.get(url); }, + /** + * Get all Merge Requests for a project, eventually filtering based on + * supplied parameters + * @param projectPath + * @param params + * @returns {Promise} + */ + projectMergeRequests(projectPath, params = {}) { + const url = Api.buildUrl(Api.projectMergeRequestsPath).replace( + ':id', + encodeURIComponent(projectPath), + ); + + return axios.get(url, { params }); + }, + // Return Merge Request for project projectMergeRequest(projectPath, mergeRequestId, params = {}) { const url = Api.buildUrl(Api.projectMergeRequestPath) diff --git a/app/assets/javascripts/awards_handler.js b/app/assets/javascripts/awards_handler.js index 73ce3e760ab..aeb88715c11 100644 --- a/app/assets/javascripts/awards_handler.js +++ b/app/assets/javascripts/awards_handler.js @@ -615,10 +615,18 @@ export class AwardsHandler { let awardsHandlerPromise = null; export default function loadAwardsHandler(reload = false) { if (!awardsHandlerPromise || reload) { - awardsHandlerPromise = import(/* webpackChunkName: 'emoji' */ './emoji').then(Emoji => { - const awardsHandler = new AwardsHandler(Emoji); - awardsHandler.bindEvents(); - return awardsHandler; + awardsHandlerPromise = new Promise((resolve, reject) => { + import(/* webpackChunkName: 'emoji' */ './emoji') + .then(Emoji => { + Emoji.initEmojiMap() + .then(() => { + const awardsHandler = new AwardsHandler(Emoji); + awardsHandler.bindEvents(); + resolve(awardsHandler); + }) + .catch(() => reject); + }) + .catch(() => reject); }); } return awardsHandlerPromise; diff --git a/app/assets/javascripts/behaviors/gl_emoji.js b/app/assets/javascripts/behaviors/gl_emoji.js index d1d75658181..9034563d9b3 100644 --- a/app/assets/javascripts/behaviors/gl_emoji.js +++ b/app/assets/javascripts/behaviors/gl_emoji.js @@ -1,47 +1,74 @@ import 'document-register-element'; import isEmojiUnicodeSupported from '../emoji/support'; +import { initEmojiMap, getEmojiInfo, emojiFallbackImageSrc, emojiImageTag } from '../emoji'; class GlEmoji extends HTMLElement { constructor() { super(); - const emojiUnicode = this.textContent.trim(); - const { name, unicodeVersion, fallbackSrc, fallbackSpriteClass } = this.dataset; - - const isEmojiUnicode = - this.childNodes && - Array.prototype.every.call(this.childNodes, childNode => childNode.nodeType === 3); - const hasImageFallback = fallbackSrc && fallbackSrc.length > 0; - const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0; - - if (emojiUnicode && isEmojiUnicode && !isEmojiUnicodeSupported(emojiUnicode, unicodeVersion)) { - // CSS sprite fallback takes precedence over image fallback - if (hasCssSpriteFalback) { - if (!gon.emoji_sprites_css_added && gon.emoji_sprites_css_path) { - const emojiSpriteLinkTag = document.createElement('link'); - emojiSpriteLinkTag.setAttribute('rel', 'stylesheet'); - emojiSpriteLinkTag.setAttribute('href', gon.emoji_sprites_css_path); - document.head.appendChild(emojiSpriteLinkTag); - gon.emoji_sprites_css_added = true; - } - // IE 11 doesn't like adding multiple at once :( - this.classList.add('emoji-icon'); - this.classList.add(fallbackSpriteClass); - } else { - import(/* webpackChunkName: 'emoji' */ '../emoji') - .then(({ emojiImageTag, emojiFallbackImageSrc }) => { - if (hasImageFallback) { - this.innerHTML = emojiImageTag(name, fallbackSrc); + let emojiUnicode = this.textContent.trim(); + const { fallbackSpriteClass, fallbackSrc, forceFallback } = this.dataset; + let { name, unicodeVersion } = this.dataset; + + initEmojiMap() + .then(() => { + if (!unicodeVersion) { + const emojiInfo = getEmojiInfo(name); + + if (emojiInfo) { + if (name !== emojiInfo.name) { + ({ name } = emojiInfo); + this.dataset.name = emojiInfo.name; + } + unicodeVersion = emojiInfo.u; + this.dataset.uni = unicodeVersion; + + if (forceFallback === 'true' && !fallbackSpriteClass) { + this.innerHTML = emojiImageTag(name, emojiFallbackImageSrc(name)); } else { - const src = emojiFallbackImageSrc(name); - this.innerHTML = emojiImageTag(name, src); + emojiUnicode = emojiInfo.e; + this.innerHTML = emojiInfo.e; } - }) - .catch(() => { - // do nothing - }); - } - } + + this.title = emojiInfo.d; + } + } + + const isEmojiUnicode = + this.childNodes && + Array.prototype.every.call(this.childNodes, childNode => childNode.nodeType === 3); + const hasImageFallback = fallbackSrc && fallbackSrc.length > 0; + const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0; + + if ( + emojiUnicode && + isEmojiUnicode && + !isEmojiUnicodeSupported(emojiUnicode, unicodeVersion) + ) { + // CSS sprite fallback takes precedence over image fallback + if (hasCssSpriteFalback) { + if (!gon.emoji_sprites_css_added && gon.emoji_sprites_css_path) { + const emojiSpriteLinkTag = document.createElement('link'); + emojiSpriteLinkTag.setAttribute('rel', 'stylesheet'); + emojiSpriteLinkTag.setAttribute('href', gon.emoji_sprites_css_path); + document.head.appendChild(emojiSpriteLinkTag); + gon.emoji_sprites_css_added = true; + } + // IE 11 doesn't like adding multiple at once :( + this.classList.add('emoji-icon'); + this.classList.add(fallbackSpriteClass); + } else if (hasImageFallback) { + this.innerHTML = emojiImageTag(name, fallbackSrc); + } else { + const src = emojiFallbackImageSrc(name); + this.innerHTML = emojiImageTag(name, src); + } + } + }) + .catch(error => { + // Only reject is already handled in initEmojiMap + throw error; + }); } } diff --git a/app/assets/javascripts/behaviors/markdown/copy_as_gfm.js b/app/assets/javascripts/behaviors/markdown/copy_as_gfm.js index 9482a9f166d..58cf057b2c2 100644 --- a/app/assets/javascripts/behaviors/markdown/copy_as_gfm.js +++ b/app/assets/javascripts/behaviors/markdown/copy_as_gfm.js @@ -173,7 +173,9 @@ export class CopyAsGFM { wrapEl.appendChild(node.cloneNode(true)); const doc = DOMParser.fromSchema(schema.default).parse(wrapEl); - const res = markdownSerializer.default.serialize(doc); + const res = markdownSerializer.default.serialize(doc, { + tightLists: true, + }); return res; }) .catch(() => {}); diff --git a/app/assets/javascripts/behaviors/markdown/render_mermaid.js b/app/assets/javascripts/behaviors/markdown/render_mermaid.js index 35380ca49fb..798114b4b0b 100644 --- a/app/assets/javascripts/behaviors/markdown/render_mermaid.js +++ b/app/assets/javascripts/behaviors/markdown/render_mermaid.js @@ -1,4 +1,5 @@ import flash from '~/flash'; +import { sprintf, __ } from '../../locale'; // Renders diagrams and flowcharts from text using Mermaid in any element with the // `js-render-mermaid` class. @@ -14,6 +15,9 @@ import flash from '~/flash'; // </pre> // +// This is an arbitary number; Can be iterated upon when suitable. +const MAX_CHAR_LIMIT = 5000; + export default function renderMermaid($els) { if (!$els.length) return; @@ -34,6 +38,21 @@ export default function renderMermaid($els) { $els.each((i, el) => { const source = el.textContent; + /** + * Restrict the rendering to a certain amount of character to + * prevent mermaidjs from hanging up the entire thread and + * causing a DoS. + */ + if (source && source.length > MAX_CHAR_LIMIT) { + el.textContent = sprintf( + __( + 'Cannot render the image. Maximum character count (%{charLimit}) has been exceeded.', + ), + { charLimit: MAX_CHAR_LIMIT }, + ); + return; + } + // Remove any extra spans added by the backend syntax highlighting. Object.assign(el, { textContent: source }); diff --git a/app/assets/javascripts/boards/components/issue_due_date.vue b/app/assets/javascripts/boards/components/issue_due_date.vue index 9c4c6632976..9bc66978198 100644 --- a/app/assets/javascripts/boards/components/issue_due_date.vue +++ b/app/assets/javascripts/boards/components/issue_due_date.vue @@ -53,7 +53,7 @@ export default { } else if (timeDifference === -1) { return __('Yesterday'); } else if (timeDifference > 0 && timeDifference < 7) { - return dateFormat(issueDueDate, 'dddd', true); + return dateFormat(issueDueDate, 'dddd'); } return standardDateFormat; diff --git a/app/assets/javascripts/boards/index.js b/app/assets/javascripts/boards/index.js index f88e9b55988..c4c5fedc615 100644 --- a/app/assets/javascripts/boards/index.js +++ b/app/assets/javascripts/boards/index.js @@ -58,6 +58,7 @@ export default () => { state: boardsStore.state, loading: true, boardsEndpoint: $boardApp.dataset.boardsEndpoint, + recentBoardsEndpoint: $boardApp.dataset.recentBoardsEndpoint, listsEndpoint: $boardApp.dataset.listsEndpoint, boardId: $boardApp.dataset.boardId, disabled: parseBoolean($boardApp.dataset.disabled), @@ -75,6 +76,7 @@ export default () => { created() { gl.boardService = new BoardService({ boardsEndpoint: this.boardsEndpoint, + recentBoardsEndpoint: this.recentBoardsEndpoint, listsEndpoint: this.listsEndpoint, bulkUpdatePath: this.bulkUpdatePath, boardId: this.boardId, diff --git a/app/assets/javascripts/boards/services/board_service.js b/app/assets/javascripts/boards/services/board_service.js index 3de6eb056c2..7d463f17ab1 100644 --- a/app/assets/javascripts/boards/services/board_service.js +++ b/app/assets/javascripts/boards/services/board_service.js @@ -2,12 +2,13 @@ import axios from '../../lib/utils/axios_utils'; import { mergeUrlParams } from '../../lib/utils/url_utility'; export default class BoardService { - constructor({ boardsEndpoint, listsEndpoint, bulkUpdatePath, boardId }) { + constructor({ boardsEndpoint, listsEndpoint, bulkUpdatePath, boardId, recentBoardsEndpoint }) { this.boardsEndpoint = boardsEndpoint; this.boardId = boardId; this.listsEndpoint = listsEndpoint; this.listsEndpointGenerate = `${listsEndpoint}/generate.json`; this.bulkUpdatePath = bulkUpdatePath; + this.recentBoardsEndpoint = `${recentBoardsEndpoint}.json`; } generateBoardsPath(id) { diff --git a/app/assets/javascripts/clusters/clusters_bundle.js b/app/assets/javascripts/clusters/clusters_bundle.js index 1667d027a84..388f674f643 100644 --- a/app/assets/javascripts/clusters/clusters_bundle.js +++ b/app/assets/javascripts/clusters/clusters_bundle.js @@ -121,8 +121,7 @@ export default class Clusters { static initDismissableCallout() { const callout = document.querySelector('.js-cluster-security-warning'); - - if (callout) new PersistentUserCallout(callout); // eslint-disable-line no-new + PersistentUserCallout.factory(callout); } addListeners() { diff --git a/app/assets/javascripts/contextual_sidebar.js b/app/assets/javascripts/contextual_sidebar.js index 50efecb3475..67fcdd082a2 100644 --- a/app/assets/javascripts/contextual_sidebar.js +++ b/app/assets/javascripts/contextual_sidebar.js @@ -4,6 +4,10 @@ import _ from 'underscore'; import bp from './breakpoints'; import { parseBoolean } from '~/lib/utils/common_utils'; +// NOTE: at 1200px nav sidebar should not overlap the content +// https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/24555#note_134136110 +const NAV_SIDEBAR_BREAKPOINT = 1200; + export default class ContextualSidebar { constructor() { this.initDomElements(); @@ -26,44 +30,54 @@ export default class ContextualSidebar { bindEvents() { if (!this.$sidebar.length) return; - document.addEventListener('click', e => { - if ( - !e.target.closest('.nav-sidebar') && - (bp.getBreakpointSize() === 'sm' || bp.getBreakpointSize() === 'md') - ) { - this.toggleCollapsedSidebar(true, true); - } - }); this.$openSidebar.on('click', () => this.toggleSidebarNav(true)); this.$closeSidebar.on('click', () => this.toggleSidebarNav(false)); this.$overlay.on('click', () => this.toggleSidebarNav(false)); this.$sidebarToggle.on('click', () => { - const value = !this.$sidebar.hasClass('sidebar-collapsed-desktop'); - this.toggleCollapsedSidebar(value, true); + if (!ContextualSidebar.isDesktopBreakpoint()) { + this.toggleSidebarNav(!this.$sidebar.hasClass('sidebar-expanded-mobile')); + } else { + const value = !this.$sidebar.hasClass('sidebar-collapsed-desktop'); + this.toggleCollapsedSidebar(value, true); + } }); $(window).on('resize', () => _.debounce(this.render(), 100)); } + // TODO: use the breakpoints from breakpoints.js once they have been updated for bootstrap 4 + // See documentation: https://design.gitlab.com/regions/navigation#contextual-navigation + static isDesktopBreakpoint = () => bp.windowWidth() >= NAV_SIDEBAR_BREAKPOINT; static setCollapsedCookie(value) { - if (bp.getBreakpointSize() !== 'lg') { + if (!ContextualSidebar.isDesktopBreakpoint()) { return; } Cookies.set('sidebar_collapsed', value, { expires: 365 * 10 }); } toggleSidebarNav(show) { - this.$sidebar.toggleClass('sidebar-expanded-mobile', show); - this.$overlay.toggleClass('mobile-nav-open', show); + const breakpoint = bp.getBreakpointSize(); + const dbp = ContextualSidebar.isDesktopBreakpoint(); + + this.$sidebar.toggleClass('sidebar-expanded-mobile', !dbp ? show : false); + this.$overlay.toggleClass( + 'mobile-nav-open', + breakpoint === 'xs' || breakpoint === 'sm' ? show : false, + ); this.$sidebar.removeClass('sidebar-collapsed-desktop'); } toggleCollapsedSidebar(collapsed, saveCookie) { const breakpoint = bp.getBreakpointSize(); + const dbp = ContextualSidebar.isDesktopBreakpoint(); if (this.$sidebar.length) { this.$sidebar.toggleClass('sidebar-collapsed-desktop', collapsed); - this.$page.toggleClass('page-with-icon-sidebar', breakpoint === 'sm' ? true : collapsed); + this.$sidebar.toggleClass('sidebar-expanded-mobile', !dbp ? !collapsed : false); + this.$page.toggleClass( + 'page-with-icon-sidebar', + breakpoint === 'xs' || breakpoint === 'sm' ? true : collapsed, + ); } if (saveCookie) { @@ -84,13 +98,11 @@ export default class ContextualSidebar { render() { if (!this.$sidebar.length) return; - const breakpoint = bp.getBreakpointSize(); - - if (breakpoint === 'sm' || breakpoint === 'md') { - this.toggleCollapsedSidebar(true, false); - } else if (breakpoint === 'lg') { + if (!ContextualSidebar.isDesktopBreakpoint()) { + this.toggleSidebarNav(false); + } else { const collapse = parseBoolean(Cookies.get('sidebar_collapsed')); - this.toggleCollapsedSidebar(collapse, false); + this.toggleCollapsedSidebar(collapse, true); } } } diff --git a/app/assets/javascripts/diffs/components/diff_file_header.vue b/app/assets/javascripts/diffs/components/diff_file_header.vue index 4d33ad23f39..a5125c3d077 100644 --- a/app/assets/javascripts/diffs/components/diff_file_header.vue +++ b/app/assets/javascripts/diffs/components/diff_file_header.vue @@ -5,7 +5,7 @@ import { polyfillSticky } from '~/lib/utils/sticky'; import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import Icon from '~/vue_shared/components/icon.vue'; import FileIcon from '~/vue_shared/components/file_icon.vue'; -import { GlTooltipDirective } from '@gitlab/ui'; +import { GlButton, GlTooltipDirective, GlTooltip, GlLoadingIcon } from '@gitlab/ui'; import { truncateSha } from '~/lib/utils/text_utility'; import { __, s__, sprintf } from '~/locale'; import { diffViewerModes } from '~/ide/constants'; @@ -14,6 +14,9 @@ import DiffStats from './diff_stats.vue'; export default { components: { + GlTooltip, + GlLoadingIcon, + GlButton, ClipboardButton, EditButton, Icon, @@ -125,12 +128,15 @@ export default { isModeChanged() { return this.diffFile.viewer.name === diffViewerModes.mode_changed; }, + showExpandDiffToFullFileEnabled() { + return gon.features.expandDiffFullFile && !this.diffFile.is_fully_expanded; + }, }, mounted() { polyfillSticky(this.$refs.header); }, methods: { - ...mapActions('diffs', ['toggleFileDiscussions']), + ...mapActions('diffs', ['toggleFileDiscussions', 'toggleFullDiff']), handleToggleFile(e, checkTarget) { if ( !checkTarget || @@ -240,12 +246,30 @@ export default { v-html="viewReplacedFileButtonText" > </a> - <a + <gl-tooltip :target="() => $refs.viewButton" placement="bottom"> + <span v-html="viewFileButtonText"></span> + </gl-tooltip> + <gl-button + ref="viewButton" :href="diffFile.view_path" - class="btn view-file js-view-file-button" - v-html="viewFileButtonText" + target="blank" + class="view-file js-view-file-button" > - </a> + <icon name="external-link" /> + </gl-button> + <gl-button + v-if="showExpandDiffToFullFileEnabled" + class="expand-file js-expand-file" + @click="toggleFullDiff(diffFile.file_path)" + > + <template v-if="diffFile.isShowingFullFile"> + {{ s__('MRDiff|Show changes only') }} + </template> + <template v-else> + {{ s__('MRDiff|Show full file') }} + </template> + <gl-loading-icon v-if="diffFile.isLoadingFullFile" inline /> + </gl-button> <a v-if="diffFile.external_url" diff --git a/app/assets/javascripts/diffs/components/edit_button.vue b/app/assets/javascripts/diffs/components/edit_button.vue index 803f23b9170..f0cc5de4b33 100644 --- a/app/assets/javascripts/diffs/components/edit_button.vue +++ b/app/assets/javascripts/diffs/components/edit_button.vue @@ -1,5 +1,15 @@ <script> +import { GlTooltipDirective, GlButton } from '@gitlab/ui'; +import Icon from '~/vue_shared/components/icon.vue'; + export default { + components: { + GlButton, + Icon, + }, + directives: { + GlTooltip: GlTooltipDirective, + }, props: { editPath: { type: String, @@ -27,5 +37,13 @@ export default { </script> <template> - <a :href="editPath" class="btn btn-default js-edit-blob" @click="handleEditClick"> Edit </a> + <gl-button + v-gl-tooltip.bottom + :href="editPath" + :title="__('Edit file')" + class="js-edit-blob" + @click.native="handleEditClick" + > + <icon name="pencil" /> + </gl-button> </template> diff --git a/app/assets/javascripts/diffs/components/inline_diff_view.vue b/app/assets/javascripts/diffs/components/inline_diff_view.vue index e781397214d..8c76a555b62 100644 --- a/app/assets/javascripts/diffs/components/inline_diff_view.vue +++ b/app/assets/javascripts/diffs/components/inline_diff_view.vue @@ -1,5 +1,6 @@ <script> import { mapGetters } from 'vuex'; +import draftCommentsMixin from 'ee_else_ce/diffs/mixins/draft_comments'; import inlineDiffTableRow from './inline_diff_table_row.vue'; import inlineDiffCommentRow from './inline_diff_comment_row.vue'; @@ -7,7 +8,10 @@ export default { components: { inlineDiffCommentRow, inlineDiffTableRow, + InlineDraftCommentRow: () => + import('ee_component/batch_comments/components/inline_draft_comment_row.vue'), }, + mixins: [draftCommentsMixin], props: { diffFile: { type: Object, @@ -54,6 +58,11 @@ export default { :line="line" :help-page-path="helpPagePath" /> + <inline-draft-comment-row + v-if="shouldRenderDraftRow(diffFile.file_hash, line)" + :key="`draft_${index}`" + :draft="draftForLine(diffFile.file_hash, line)" + /> </template> </tbody> </table> diff --git a/app/assets/javascripts/diffs/components/parallel_diff_view.vue b/app/assets/javascripts/diffs/components/parallel_diff_view.vue index 1bf693380db..93e754fa896 100644 --- a/app/assets/javascripts/diffs/components/parallel_diff_view.vue +++ b/app/assets/javascripts/diffs/components/parallel_diff_view.vue @@ -1,5 +1,6 @@ <script> import { mapGetters } from 'vuex'; +import draftCommentsMixin from 'ee_else_ce/diffs/mixins/draft_comments'; import parallelDiffTableRow from './parallel_diff_table_row.vue'; import parallelDiffCommentRow from './parallel_diff_comment_row.vue'; @@ -7,7 +8,10 @@ export default { components: { parallelDiffTableRow, parallelDiffCommentRow, + ParallelDraftCommentRow: () => + import('ee_component/batch_comments/components/parallel_draft_comment_row.vue'), }, + mixins: [draftCommentsMixin], props: { diffFile: { type: Object, @@ -56,6 +60,12 @@ export default { :line-index="index" :help-page-path="helpPagePath" /> + <parallel-draft-comment-row + v-if="shouldRenderParallelDraftRow(diffFile.file_hash, line)" + :key="`drafts-${index}`" + :line="line" + :diff-file-content-sha="diffFile.file_hash" + /> </template> </tbody> </table> diff --git a/app/assets/javascripts/diffs/constants.js b/app/assets/javascripts/diffs/constants.js index 7002655ea49..6f380fe6ece 100644 --- a/app/assets/javascripts/diffs/constants.js +++ b/app/assets/javascripts/diffs/constants.js @@ -42,3 +42,8 @@ export const INITIAL_TREE_WIDTH = 320; export const MIN_TREE_WIDTH = 240; export const MAX_TREE_WIDTH = 400; export const TREE_HIDE_STATS_WIDTH = 260; + +export const OLD_LINE_KEY = 'old_line'; +export const NEW_LINE_KEY = 'new_line'; +export const TYPE_KEY = 'type'; +export const LEFT_LINE_KEY = 'left'; diff --git a/app/assets/javascripts/diffs/mixins/draft_comments.js b/app/assets/javascripts/diffs/mixins/draft_comments.js new file mode 100644 index 00000000000..cfa722b27f1 --- /dev/null +++ b/app/assets/javascripts/diffs/mixins/draft_comments.js @@ -0,0 +1,7 @@ +export default { + computed: { + shouldRenderDraftRow: () => () => false, + shouldRenderParallelDraftRow: () => () => false, + draftForLine: () => () => ({}), + }, +}; diff --git a/app/assets/javascripts/diffs/store/actions.js b/app/assets/javascripts/diffs/store/actions.js index c40775c3259..57ddc923a3e 100644 --- a/app/assets/javascripts/diffs/store/actions.js +++ b/app/assets/javascripts/diffs/store/actions.js @@ -309,5 +309,40 @@ export const cacheTreeListWidth = (_, size) => { localStorage.setItem(TREE_LIST_WIDTH_STORAGE_KEY, size); }; +export const requestFullDiff = ({ commit }, filePath) => commit(types.REQUEST_FULL_DIFF, filePath); +export const receiveFullDiffSucess = ({ commit }, { filePath, data }) => + commit(types.RECEIVE_FULL_DIFF_SUCCESS, { filePath, data }); +export const receiveFullDiffError = ({ commit }, filePath) => { + commit(types.RECEIVE_FULL_DIFF_ERROR, filePath); + createFlash(s__('MergeRequest|Error loading full diff. Please try again.')); +}; + +export const fetchFullDiff = ({ dispatch }, file) => + axios + .get(file.context_lines_path, { + params: { + full: true, + from_merge_request: true, + }, + }) + .then(({ data }) => dispatch('receiveFullDiffSucess', { filePath: file.file_path, data })) + .then(() => scrollToElement(`#${file.file_hash}`)) + .catch(() => dispatch('receiveFullDiffError', file.file_path)); + +export const toggleFullDiff = ({ dispatch, getters, state }, filePath) => { + const file = state.diffFiles.find(f => f.file_path === filePath); + + dispatch('requestFullDiff', filePath); + + if (file.isShowingFullFile) { + dispatch('loadCollapsedDiff', file) + .then(() => dispatch('assignDiscussionsToDiff', getters.getDiffFileDiscussions(file))) + .then(() => scrollToElement(`#${file.file_hash}`)) + .catch(() => dispatch('receiveFullDiffError', filePath)); + } else { + dispatch('fetchFullDiff', file); + } +}; + // prevent babel-plugin-rewire from generating an invalid default during karma tests export default () => {}; diff --git a/app/assets/javascripts/diffs/store/mutation_types.js b/app/assets/javascripts/diffs/store/mutation_types.js index 71ad108ce88..b441b1de451 100644 --- a/app/assets/javascripts/diffs/store/mutation_types.js +++ b/app/assets/javascripts/diffs/store/mutation_types.js @@ -23,3 +23,7 @@ export const SET_TREE_DATA = 'SET_TREE_DATA'; export const SET_RENDER_TREE_LIST = 'SET_RENDER_TREE_LIST'; export const SET_SHOW_WHITESPACE = 'SET_SHOW_WHITESPACE'; export const TOGGLE_FILE_FINDER_VISIBLE = 'TOGGLE_FILE_FINDER_VISIBLE'; + +export const REQUEST_FULL_DIFF = 'REQUEST_FULL_DIFF'; +export const RECEIVE_FULL_DIFF_SUCCESS = 'RECEIVE_FULL_DIFF_SUCCESS'; +export const RECEIVE_FULL_DIFF_ERROR = 'RECEIVE_FULL_DIFF_ERROR'; diff --git a/app/assets/javascripts/diffs/store/mutations.js b/app/assets/javascripts/diffs/store/mutations.js index 5a27388863c..45187d93fef 100644 --- a/app/assets/javascripts/diffs/store/mutations.js +++ b/app/assets/javascripts/diffs/store/mutations.js @@ -6,8 +6,10 @@ import { addContextLines, prepareDiffData, isDiscussionApplicableToLine, + convertExpandLines, } from './utils'; import * as types from './mutation_types'; +import { OLD_LINE_KEY, NEW_LINE_KEY, TYPE_KEY, LEFT_LINE_KEY } from '../constants'; export default { [types.SET_BASE_CONFIG](state, options) { @@ -248,4 +250,54 @@ export default { [types.TOGGLE_FILE_FINDER_VISIBLE](state, visible) { state.fileFinderVisible = visible; }, + [types.REQUEST_FULL_DIFF](state, filePath) { + const file = findDiffFile(state.diffFiles, filePath, 'file_path'); + + file.isLoadingFullFile = true; + }, + [types.RECEIVE_FULL_DIFF_ERROR](state, filePath) { + const file = findDiffFile(state.diffFiles, filePath, 'file_path'); + + file.isLoadingFullFile = false; + }, + [types.RECEIVE_FULL_DIFF_SUCCESS](state, { filePath, data }) { + const file = findDiffFile(state.diffFiles, filePath, 'file_path'); + + file.isShowingFullFile = true; + file.isLoadingFullFile = false; + + file.highlighted_diff_lines = convertExpandLines({ + diffLines: file.highlighted_diff_lines, + typeKey: [TYPE_KEY], + oldLineKey: [OLD_LINE_KEY], + newLineKey: [NEW_LINE_KEY], + data, + mapLine: ({ line, oldLine, newLine }) => ({ + ...line, + old_line: oldLine, + new_line: newLine, + line_code: `${file.file_hash}_${oldLine}_${newLine}`, + }), + }); + + file.parallel_diff_lines = convertExpandLines({ + diffLines: file.parallel_diff_lines, + typeKey: [LEFT_LINE_KEY, TYPE_KEY], + oldLineKey: [LEFT_LINE_KEY, OLD_LINE_KEY], + newLineKey: [LEFT_LINE_KEY, NEW_LINE_KEY], + data, + mapLine: ({ line, oldLine, newLine }) => ({ + left: { + ...line, + old_line: oldLine, + line_code: `${file.file_hash}_${oldLine}_${newLine}`, + }, + right: { + ...line, + new_line: newLine, + line_code: `${file.file_hash}_${newLine}_${oldLine}`, + }, + }), + }); + }, }; diff --git a/app/assets/javascripts/diffs/store/utils.js b/app/assets/javascripts/diffs/store/utils.js index 247d1e65fea..27a79369a24 100644 --- a/app/assets/javascripts/diffs/store/utils.js +++ b/app/assets/javascripts/diffs/store/utils.js @@ -15,8 +15,8 @@ import { TREE_TYPE, } from '../constants'; -export function findDiffFile(files, hash) { - return files.filter(file => file.file_hash === hash)[0]; +export function findDiffFile(files, match, matchKey = 'file_hash') { + return files.find(file => file[matchKey] === match); } export const getReversePosition = linePosition => { @@ -250,6 +250,8 @@ export function prepareDiffData(diffData) { renderIt: showingLines < LINES_TO_BE_RENDERED_DIRECTLY, collapsed: file.viewer.name === diffViewerModes.text && showingLines > MAX_LINES_TO_BE_RENDERED, + isShowingFullFile: false, + isLoadingFullFile: false, discussions: [], }); } @@ -411,3 +413,37 @@ export const getDiffMode = diffFile => { diffModes.replaced ); }; + +export const convertExpandLines = ({ + diffLines, + data, + typeKey, + oldLineKey, + newLineKey, + mapLine, +}) => { + const dataLength = data.length; + + return diffLines.reduce((acc, line, i) => { + if (_.property(typeKey)(line) === 'match') { + const beforeLine = diffLines[i - 1]; + const afterLine = diffLines[i + 1]; + const beforeLineIndex = _.property(newLineKey)(beforeLine) || 0; + const afterLineIndex = _.property(newLineKey)(afterLine) - 1 || dataLength; + + acc.push( + ...data.slice(beforeLineIndex, afterLineIndex).map((l, index) => ({ + ...mapLine({ + line: { ...l, hasForm: false, discussions: [] }, + oldLine: (_.property(oldLineKey)(beforeLine) || 0) + index + 1, + newLine: (_.property(newLineKey)(beforeLine) || 0) + index + 1, + }), + })), + ); + } else { + acc.push(line); + } + + return acc; + }, []); +}; diff --git a/app/assets/javascripts/emoji/index.js b/app/assets/javascripts/emoji/index.js index cd8dff40b88..36542315c4c 100644 --- a/app/assets/javascripts/emoji/index.js +++ b/app/assets/javascripts/emoji/index.js @@ -1,13 +1,58 @@ import _ from 'underscore'; -import emojiMap from 'emojis/digests.json'; +import createFlash from '~/flash'; +import { s__ } from '~/locale'; import emojiAliases from 'emojis/aliases.json'; +import axios from '../lib/utils/axios_utils'; -export const validEmojiNames = [...Object.keys(emojiMap), ...Object.keys(emojiAliases)]; +import AccessorUtilities from '../lib/utils/accessor'; + +let emojiMap = null; +let validEmojiNames = null; + +export const EMOJI_VERSION = '1'; +const EMOJI_VERSION_LOCALSTORAGE = `EMOJIS_${EMOJI_VERSION}`; + +const isLocalStorageAvailable = AccessorUtilities.isLocalStorageAccessSafe(); + +export function initEmojiMap() { + return new Promise((resolve, reject) => { + if (emojiMap) { + resolve(emojiMap); + } else if (isLocalStorageAvailable && window.localStorage.getItem(EMOJI_VERSION_LOCALSTORAGE)) { + emojiMap = JSON.parse(window.localStorage.getItem(EMOJI_VERSION_LOCALSTORAGE)); + validEmojiNames = [...Object.keys(emojiMap), ...Object.keys(emojiAliases)]; + resolve(emojiMap); + } else { + // We load the JSON from server + axios + .get( + `${gon.asset_host || ''}${gon.relative_url_root || + ''}/-/emojis/${EMOJI_VERSION}/emojis.json`, + ) + .then(({ data }) => { + emojiMap = data; + validEmojiNames = [...Object.keys(emojiMap), ...Object.keys(emojiAliases)]; + resolve(emojiMap); + if (isLocalStorageAvailable) { + window.localStorage.setItem(EMOJI_VERSION_LOCALSTORAGE, JSON.stringify(emojiMap)); + } + }) + .catch(err => { + createFlash(s__('Emojis|Something went wrong while loading emojis.')); + reject(err); + }); + } + }); +} export function normalizeEmojiName(name) { return Object.prototype.hasOwnProperty.call(emojiAliases, name) ? emojiAliases[name] : name; } +export function getValidEmojiNames() { + return validEmojiNames; +} + export function isEmojiNameValid(name) { return validEmojiNames.indexOf(name) >= 0; } @@ -36,8 +81,8 @@ export function getEmojiCategoryMap() { }; Object.keys(emojiMap).forEach(name => { const emoji = emojiMap[name]; - if (emojiCategoryMap[emoji.category]) { - emojiCategoryMap[emoji.category].push(name); + if (emojiCategoryMap[emoji.c]) { + emojiCategoryMap[emoji.c].push(name); } }); } @@ -58,8 +103,9 @@ export function getEmojiInfo(query) { } export function emojiFallbackImageSrc(inputName) { - const { name, digest } = getEmojiInfo(inputName); - return `${gon.asset_host || ''}${gon.relative_url_root || ''}/assets/emoji/${name}-${digest}.png`; + const { name } = getEmojiInfo(inputName); + return `${gon.asset_host || ''}${gon.relative_url_root || + ''}/-/emojis/${EMOJI_VERSION}/${name}.png`; } export function emojiImageTag(name, src) { @@ -68,9 +114,8 @@ export function emojiImageTag(name, src) { export function glEmojiTag(inputName, options) { const opts = { sprite: false, forceFallback: false, ...options }; - const { name, ...emojiInfo } = getEmojiInfo(inputName); + const name = normalizeEmojiName(inputName); - const fallbackImageSrc = emojiFallbackImageSrc(name); const fallbackSpriteClass = `emoji-${name}`; const classList = []; @@ -79,24 +124,19 @@ export function glEmojiTag(inputName, options) { classList.push(fallbackSpriteClass); } const classAttribute = classList.length > 0 ? `class="${classList.join(' ')}"` : ''; + const fallbackSpriteAttribute = opts.sprite ? `data-fallback-sprite-class="${fallbackSpriteClass}"` : ''; - let contents = emojiInfo.moji; - if (opts.forceFallback && !opts.sprite) { - contents = emojiImageTag(name, fallbackImageSrc); - } + const forceFallbackAttribute = opts.forceFallback ? 'data-force-fallback="true"' : ''; return ` <gl-emoji ${classAttribute} data-name="${name}" - data-fallback-src="${fallbackImageSrc}" ${fallbackSpriteAttribute} - data-unicode-version="${emojiInfo.unicodeVersion}" - title="${emojiInfo.description}" + ${forceFallbackAttribute} > - ${contents} </gl-emoji> `; } diff --git a/app/assets/javascripts/emoji/support/index.js b/app/assets/javascripts/emoji/support/index.js index 1f7852dd487..ed9bfb8bc78 100644 --- a/app/assets/javascripts/emoji/support/index.js +++ b/app/assets/javascripts/emoji/support/index.js @@ -5,6 +5,9 @@ import getUnicodeSupportMap from './unicode_support_map'; let browserUnicodeSupportMap; export default function isEmojiUnicodeSupportedByBrowser(emojiUnicode, unicodeVersion) { + // Our Spec browser would fail producing emoji maps + if (/\bHeadlessChrome\//.test(navigator.userAgent)) return true; + browserUnicodeSupportMap = browserUnicodeSupportMap || getUnicodeSupportMap(); return isEmojiUnicodeSupported(browserUnicodeSupportMap, emojiUnicode, unicodeVersion); } diff --git a/app/assets/javascripts/environments/components/confirm_rollback_modal.vue b/app/assets/javascripts/environments/components/confirm_rollback_modal.vue new file mode 100644 index 00000000000..a8ee3f4ac10 --- /dev/null +++ b/app/assets/javascripts/environments/components/confirm_rollback_modal.vue @@ -0,0 +1,108 @@ +<script> +/** + * Render modal to confirm rollback/redeploy. + */ + +import _ from 'underscore'; +import { GlModal } from '@gitlab/ui'; +import { s__, sprintf } from '~/locale'; + +import eventHub from '../event_hub'; + +export default { + name: 'ConfirmRollbackModal', + + components: { + GlModal, + }, + + props: { + environment: { + type: Object, + required: true, + }, + }, + + computed: { + modalTitle() { + const title = this.environment.isLastDeployment + ? s__('Environments|Re-deploy environment %{name}?') + : s__('Environments|Rollback environment %{name}?'); + + return sprintf(title, { + name: _.escape(this.environment.name), + }); + }, + + commitShortSha() { + const { last_deployment } = this.environment; + return this.commitData(last_deployment, 'short_id'); + }, + + commitUrl() { + const { last_deployment } = this.environment; + return this.commitData(last_deployment, 'commit_path'); + }, + + commitTitle() { + const { last_deployment } = this.environment; + return this.commitData(last_deployment, 'title'); + }, + + modalText() { + const linkStart = `<a class="commit-sha" href="${_.escape(this.commitUrl)}">`; + const commitId = _.escape(this.commitShortSha); + const linkEnd = '</a>'; + const name = _.escape(this.name); + const body = this.environment.isLastDeployment + ? s__( + 'Environments|This action will relaunch the job for commit %{linkStart}%{commitId}%{linkEnd}, putting the environment in a previous version. Are you sure you want to continue?', + ) + : s__( + 'Environments|This action will run the job defined by %{name} for commit %{linkStart}%{commitId}%{linkEnd} putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?', + ); + return sprintf( + body, + { + commitId, + linkStart, + linkEnd, + name, + }, + false, + ); + }, + + modalActionText() { + return this.environment.isLastDeployment + ? s__('Environments|Re-deploy') + : s__('Environments|Rollback'); + }, + }, + + methods: { + onOk() { + eventHub.$emit('rollbackEnvironment', this.environment); + }, + + commitData(lastDeployment, key) { + if (lastDeployment && lastDeployment.commit) { + return lastDeployment.commit[key]; + } + + return ''; + }, + }, +}; +</script> +<template> + <gl-modal + :title="modalTitle" + modal-id="confirm-rollback-modal" + :ok-title="modalActionText" + ok-variant="danger" + @ok="onOk" + > + <p v-html="modalText"></p> + </gl-modal> +</template> diff --git a/app/assets/javascripts/environments/components/environment_item.vue b/app/assets/javascripts/environments/components/environment_item.vue index 503c1b38f71..1e89dce69cb 100644 --- a/app/assets/javascripts/environments/components/environment_item.vue +++ b/app/assets/javascripts/environments/components/environment_item.vue @@ -3,7 +3,6 @@ import Timeago from 'timeago.js'; import _ from 'underscore'; import { GlTooltipDirective } from '@gitlab/ui'; import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue'; -import { humanize } from '~/lib/utils/text_utility'; import Icon from '~/vue_shared/components/icon.vue'; import ActionsComponent from './environment_actions.vue'; import ExternalUrlComponent from './environment_external_url.vue'; @@ -156,7 +155,7 @@ export default { const combinedActions = (manualActions || []).concat(scheduledActions || []); return combinedActions.map(action => ({ ...action, - name: humanize(action.name), + name: action.name, })); }, @@ -556,6 +555,7 @@ export default { <rollback-component v-if="canRetry" + :environment="model" :is-last-deployment="isLastDeployment" :retry-url="retryUrl" /> diff --git a/app/assets/javascripts/environments/components/environment_rollback.vue b/app/assets/javascripts/environments/components/environment_rollback.vue index 50c86af057c..266cdc42518 100644 --- a/app/assets/javascripts/environments/components/environment_rollback.vue +++ b/app/assets/javascripts/environments/components/environment_rollback.vue @@ -5,29 +5,38 @@ * * Makes a post request when the button is clicked. */ +import { GlTooltipDirective, GlLoadingIcon, GlModalDirective, GlButton } from '@gitlab/ui'; import { s__ } from '~/locale'; -import { GlTooltipDirective, GlLoadingIcon } from '@gitlab/ui'; import Icon from '~/vue_shared/components/icon.vue'; +import ConfirmRollbackModal from './confirm_rollback_modal.vue'; import eventHub from '../event_hub'; export default { components: { Icon, GlLoadingIcon, + GlButton, + ConfirmRollbackModal, }, directives: { GlTooltip: GlTooltipDirective, + GlModal: GlModalDirective, }, props: { - retryUrl: { - type: String, - default: '', - }, - isLastDeployment: { type: Boolean, default: true, }, + + environment: { + type: Object, + required: true, + }, + + retryUrl: { + type: String, + required: true, + }, }, data() { return { @@ -45,23 +54,31 @@ export default { methods: { onClick() { - this.isLoading = true; - - eventHub.$emit('postAction', { endpoint: this.retryUrl }); + eventHub.$emit('requestRollbackEnvironment', { + ...this.environment, + retryUrl: this.retryUrl, + isLastDeployment: this.isLastDeployment, + }); + eventHub.$on('rollbackEnvironment', environment => { + if (environment.id === this.environment.id) { + this.isLoading = true; + } + }); }, }, }; </script> <template> - <button + <gl-button v-gl-tooltip + v-gl-modal.confirm-rollback-modal + variant="secondary" :disabled="isLoading" :title="title" - type="button" - class="btn d-none d-sm-none d-md-block" + class="d-none d-md-block" @click="onClick" > <icon v-if="isLastDeployment" name="repeat" /> <icon v-else name="redo" /> <gl-loading-icon v-if="isLoading" /> - </button> + </gl-button> </template> diff --git a/app/assets/javascripts/environments/components/environments_app.vue b/app/assets/javascripts/environments/components/environments_app.vue index aa2417d3194..6e55c3f901a 100644 --- a/app/assets/javascripts/environments/components/environments_app.vue +++ b/app/assets/javascripts/environments/components/environments_app.vue @@ -6,11 +6,13 @@ import eventHub from '../event_hub'; import environmentsMixin from '../mixins/environments_mixin'; import CIPaginationMixin from '../../vue_shared/mixins/ci_pagination_api_mixin'; import StopEnvironmentModal from './stop_environment_modal.vue'; +import ConfirmRollbackModal from './confirm_rollback_modal.vue'; export default { components: { emptyState, StopEnvironmentModal, + ConfirmRollbackModal, }, mixins: [CIPaginationMixin, environmentsMixin], @@ -87,6 +89,7 @@ export default { <template> <div :class="cssContainerClass"> <stop-environment-modal :environment="environmentInStopModal" /> + <confirm-rollback-modal :environment="environmentInRollbackModal" /> <div class="top-area"> <tabs :tabs="tabs" scope="environments" @onChangeTab="onChangeTab" /> diff --git a/app/assets/javascripts/environments/mixins/environments_mixin.js b/app/assets/javascripts/environments/mixins/environments_mixin.js index 9d83840c87c..71b6b578196 100644 --- a/app/assets/javascripts/environments/mixins/environments_mixin.js +++ b/app/assets/javascripts/environments/mixins/environments_mixin.js @@ -36,6 +36,7 @@ export default { page: getParameterByName('page') || '1', requestData: {}, environmentInStopModal: {}, + environmentInRollbackModal: {}, }; }, @@ -116,6 +117,10 @@ export default { this.environmentInStopModal = environment; }, + updateRollbackModal(environment) { + this.environmentInRollbackModal = environment; + }, + stopEnvironment(environment) { const endpoint = environment.stop_path; const errorMessage = s__( @@ -123,6 +128,16 @@ export default { ); this.postAction({ endpoint, errorMessage }); }, + + rollbackEnvironment(environment) { + const { retryUrl, isLastDeployment } = environment; + const errorMessage = isLastDeployment + ? s__('Environments|An error occurred while re-deploying the environment, please try again') + : s__( + 'Environments|An error occurred while rolling back the environment, please try again', + ); + this.postAction({ endpoint: retryUrl, errorMessage }); + }, }, computed: { @@ -181,11 +196,17 @@ export default { eventHub.$on('postAction', this.postAction); eventHub.$on('requestStopEnvironment', this.updateStopModal); eventHub.$on('stopEnvironment', this.stopEnvironment); + + eventHub.$on('requestRollbackEnvironment', this.updateRollbackModal); + eventHub.$on('rollbackEnvironment', this.rollbackEnvironment); }, beforeDestroy() { eventHub.$off('postAction', this.postAction); eventHub.$off('requestStopEnvironment', this.updateStopModal); eventHub.$off('stopEnvironment', this.stopEnvironment); + + eventHub.$off('requestRollbackEnvironment', this.updateRollbackModal); + eventHub.$off('rollbackEnvironment', this.rollbackEnvironment); }, }; diff --git a/app/assets/javascripts/error_tracking/components/error_tracking_list.vue b/app/assets/javascripts/error_tracking/components/error_tracking_list.vue index 6981afe1ead..43ae54133af 100644 --- a/app/assets/javascripts/error_tracking/components/error_tracking_list.vue +++ b/app/assets/javascripts/error_tracking/components/error_tracking_list.vue @@ -48,7 +48,7 @@ export default { } }, methods: { - ...mapActions(['startPolling']), + ...mapActions(['startPolling', 'restartPolling']), }, }; </script> @@ -56,19 +56,17 @@ export default { <template> <div> <div v-if="errorTrackingEnabled"> - <div v-if="loading" class="py-3"><gl-loading-icon :size="3" /></div> + <div v-if="loading" class="py-3"> + <gl-loading-icon :size="3" /> + </div> <div v-else> <div class="d-flex justify-content-end"> - <gl-button class="my-3 ml-auto" variant="primary" :href="externalUrl" target="_blank" - >View in Sentry <icon name="external-link" /> + <gl-button class="my-3 ml-auto" variant="primary" :href="externalUrl" target="_blank"> + {{ __('View in Sentry') }} + <icon name="external-link" /> </gl-button> </div> - <gl-table - :items="errors" - :fields="$options.fields" - :show-empty="true" - :empty-text="__('No errors to display')" - > + <gl-table :items="errors" :fields="$options.fields" :show-empty="true"> <template slot="HEAD_events" slot-scope="data"> <div class="text-right">{{ data.label }}</div> </template> @@ -102,6 +100,14 @@ export default { <time-ago :time="errors.item.lastSeen" class="text-secondary" /> </div> </template> + <template slot="empty"> + <div ref="empty"> + {{ __('No errors to display.') }} + <gl-link class="js-try-again" @click="restartPolling"> + {{ __('Check again') }} + </gl-link> + </div> + </template> </gl-table> </div> </div> diff --git a/app/assets/javascripts/error_tracking/store/actions.js b/app/assets/javascripts/error_tracking/store/actions.js index 11aec312368..d42e4f145dc 100644 --- a/app/assets/javascripts/error_tracking/store/actions.js +++ b/app/assets/javascripts/error_tracking/store/actions.js @@ -6,7 +6,7 @@ import { __, sprintf } from '~/locale'; let eTagPoll; -export function startPolling({ commit }, endpoint) { +export function startPolling({ commit, dispatch }, endpoint) { eTagPoll = new Poll({ resource: Service, method: 'getErrorList', @@ -18,6 +18,7 @@ export function startPolling({ commit }, endpoint) { commit(types.SET_ERRORS, data.errors); commit(types.SET_EXTERNAL_URL, data.external_url); commit(types.SET_LOADING, false); + dispatch('stopPolling'); }, errorCallback: response => { let errorMessage = ''; @@ -36,4 +37,16 @@ export function startPolling({ commit }, endpoint) { eTagPoll.makeRequest(); } +export const stopPolling = () => { + if (eTagPoll) eTagPoll.stop(); +}; + +export function restartPolling({ commit }) { + commit(types.SET_ERRORS, []); + commit(types.SET_EXTERNAL_URL, ''); + commit(types.SET_LOADING, true); + + if (eTagPoll) eTagPoll.restart(); +} + export default () => {}; diff --git a/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js b/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js new file mode 100644 index 00000000000..54ea936252e --- /dev/null +++ b/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js @@ -0,0 +1,16 @@ +export default IssuableTokenKeys => { + const wipToken = { + key: 'wip', + type: 'string', + param: '', + symbol: '', + icon: 'admin', + tag: 'Yes or No', + lowercaseValueOnSubmit: true, + uppercaseTokenName: true, + capitalizeTokenValue: true, + }; + + IssuableTokenKeys.tokenKeys.push(wipToken); + IssuableTokenKeys.tokenKeysWithAlternative.push(wipToken); +}; diff --git a/app/assets/javascripts/filtered_search/available_dropdown_mappings.js b/app/assets/javascripts/filtered_search/available_dropdown_mappings.js new file mode 100644 index 00000000000..e2f9c03ee65 --- /dev/null +++ b/app/assets/javascripts/filtered_search/available_dropdown_mappings.js @@ -0,0 +1,133 @@ +import DropdownHint from './dropdown_hint'; +import DropdownUser from './dropdown_user'; +import DropdownNonUser from './dropdown_non_user'; +import DropdownEmoji from './dropdown_emoji'; +import NullDropdown from './null_dropdown'; +import DropdownAjaxFilter from './dropdown_ajax_filter'; +import DropdownUtils from './dropdown_utils'; + +export default class AvailableDropdownMappings { + constructor(container, baseEndpoint, groupsOnly, includeAncestorGroups, includeDescendantGroups) { + this.container = container; + this.baseEndpoint = baseEndpoint; + this.groupsOnly = groupsOnly; + this.includeAncestorGroups = includeAncestorGroups; + this.includeDescendantGroups = includeDescendantGroups; + } + + getAllowedMappings(supportedTokens) { + return this.buildMappings(supportedTokens, this.getMappings()); + } + + buildMappings(supportedTokens, availableMappings) { + const allowedMappings = { + hint: { + reference: null, + gl: DropdownHint, + element: this.container.querySelector('#js-dropdown-hint'), + }, + }; + + supportedTokens.forEach(type => { + if (availableMappings[type]) { + allowedMappings[type] = availableMappings[type]; + } + }); + + return allowedMappings; + } + + getMappings() { + return { + author: { + reference: null, + gl: DropdownUser, + element: this.container.querySelector('#js-dropdown-author'), + }, + assignee: { + reference: null, + gl: DropdownUser, + element: this.container.querySelector('#js-dropdown-assignee'), + }, + milestone: { + reference: null, + gl: DropdownNonUser, + extraArguments: { + endpoint: this.getMilestoneEndpoint(), + symbol: '%', + }, + element: this.container.querySelector('#js-dropdown-milestone'), + }, + label: { + reference: null, + gl: DropdownNonUser, + extraArguments: { + endpoint: this.getLabelsEndpoint(), + symbol: '~', + preprocessing: DropdownUtils.duplicateLabelPreprocessing, + }, + element: this.container.querySelector('#js-dropdown-label'), + }, + 'my-reaction': { + reference: null, + gl: DropdownEmoji, + element: this.container.querySelector('#js-dropdown-my-reaction'), + }, + wip: { + reference: null, + gl: DropdownNonUser, + element: this.container.querySelector('#js-dropdown-wip'), + }, + confidential: { + reference: null, + gl: DropdownNonUser, + element: this.container.querySelector('#js-dropdown-confidential'), + }, + status: { + reference: null, + gl: NullDropdown, + element: this.container.querySelector('#js-dropdown-admin-runner-status'), + }, + type: { + reference: null, + gl: NullDropdown, + element: this.container.querySelector('#js-dropdown-admin-runner-type'), + }, + tag: { + reference: null, + gl: DropdownAjaxFilter, + extraArguments: { + endpoint: this.getRunnerTagsEndpoint(), + symbol: '~', + }, + element: this.container.querySelector('#js-dropdown-runner-tag'), + }, + }; + } + + getMilestoneEndpoint() { + return `${this.baseEndpoint}/milestones.json`; + } + + getLabelsEndpoint() { + let endpoint = `${this.baseEndpoint}/labels.json?`; + + if (this.groupsOnly) { + endpoint = `${endpoint}only_group_labels=true&`; + } + + if (this.includeAncestorGroups) { + endpoint = `${endpoint}include_ancestor_groups=true&`; + } + + if (this.includeDescendantGroups) { + endpoint = `${endpoint}include_descendant_groups=true`; + } + + return endpoint; + } + + getRunnerTagsEndpoint() { + return `${this.baseEndpoint}/admin/runners/tag_list.json`; + } +} diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js index 57847d4ad9f..cb0a84b490b 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js @@ -1,14 +1,9 @@ +import AvailableDropdownMappings from 'ee_else_ce/filtered_search/available_dropdown_mappings'; import _ from 'underscore'; import DropLab from '~/droplab/drop_lab'; import FilteredSearchContainer from './container'; import FilteredSearchTokenKeys from './filtered_search_token_keys'; import DropdownUtils from './dropdown_utils'; -import DropdownHint from './dropdown_hint'; -import DropdownEmoji from './dropdown_emoji'; -import DropdownNonUser from './dropdown_non_user'; -import DropdownUser from './dropdown_user'; -import DropdownAjaxFilter from './dropdown_ajax_filter'; -import NullDropdown from './null_dropdown'; import FilteredSearchVisualTokens from './filtered_search_visual_tokens'; export default class FilteredSearchDropdownManager { @@ -50,114 +45,15 @@ export default class FilteredSearchDropdownManager { setupMapping() { const supportedTokens = this.filteredSearchTokenKeys.getKeys(); - const allowedMappings = { - hint: { - reference: null, - gl: DropdownHint, - element: this.container.querySelector('#js-dropdown-hint'), - }, - }; - const availableMappings = { - author: { - reference: null, - gl: DropdownUser, - element: this.container.querySelector('#js-dropdown-author'), - }, - assignee: { - reference: null, - gl: DropdownUser, - element: this.container.querySelector('#js-dropdown-assignee'), - }, - milestone: { - reference: null, - gl: DropdownNonUser, - extraArguments: { - endpoint: this.getMilestoneEndpoint(), - symbol: '%', - }, - element: this.container.querySelector('#js-dropdown-milestone'), - }, - label: { - reference: null, - gl: DropdownNonUser, - extraArguments: { - endpoint: this.getLabelsEndpoint(), - symbol: '~', - preprocessing: DropdownUtils.duplicateLabelPreprocessing, - }, - element: this.container.querySelector('#js-dropdown-label'), - }, - 'my-reaction': { - reference: null, - gl: DropdownEmoji, - element: this.container.querySelector('#js-dropdown-my-reaction'), - }, - wip: { - reference: null, - gl: DropdownNonUser, - element: this.container.querySelector('#js-dropdown-wip'), - }, - confidential: { - reference: null, - gl: DropdownNonUser, - element: this.container.querySelector('#js-dropdown-confidential'), - }, - status: { - reference: null, - gl: NullDropdown, - element: this.container.querySelector('#js-dropdown-admin-runner-status'), - }, - type: { - reference: null, - gl: NullDropdown, - element: this.container.querySelector('#js-dropdown-admin-runner-type'), - }, - tag: { - reference: null, - gl: DropdownAjaxFilter, - extraArguments: { - endpoint: this.getRunnerTagsEndpoint(), - symbol: '~', - }, - element: this.container.querySelector('#js-dropdown-runner-tag'), - }, - }; - - supportedTokens.forEach(type => { - if (availableMappings[type]) { - allowedMappings[type] = availableMappings[type]; - } - }); - - this.mapping = allowedMappings; - } - - getMilestoneEndpoint() { - const endpoint = `${this.baseEndpoint}/milestones.json`; - - return endpoint; - } - - getLabelsEndpoint() { - let endpoint = `${this.baseEndpoint}/labels.json?`; - - if (this.groupsOnly) { - endpoint = `${endpoint}only_group_labels=true&`; - } - - if (this.includeAncestorGroups) { - endpoint = `${endpoint}include_ancestor_groups=true&`; - } - - if (this.includeDescendantGroups) { - endpoint = `${endpoint}include_descendant_groups=true`; - } - - return endpoint; - } + const availableMappings = new AvailableDropdownMappings( + this.container, + this.baseEndpoint, + this.groupsOnly, + this.includeAncestorGroups, + this.includeDescendantGroups, + ); - getRunnerTagsEndpoint() { - return `${this.baseEndpoint}/admin/runners/tag_list.json`; + this.mapping = availableMappings.getAllowedMappings(supportedTokens); } static addWordToInput(tokenName, tokenValue = '', clicked = false, options = {}) { diff --git a/app/assets/javascripts/filtered_search/filtered_search_token_keys.js b/app/assets/javascripts/filtered_search/filtered_search_token_keys.js index 48534bdf815..11ed85504ec 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_token_keys.js +++ b/app/assets/javascripts/filtered_search/filtered_search_token_keys.js @@ -88,21 +88,4 @@ export default class FilteredSearchTokenKeys { this.tokenKeys.push(confidentialToken); this.tokenKeysWithAlternative.push(confidentialToken); } - - addExtraTokensForMergeRequests() { - const wipToken = { - key: 'wip', - type: 'string', - param: '', - symbol: '', - icon: 'admin', - tag: 'Yes or No', - lowercaseValueOnSubmit: true, - uppercaseTokenName: true, - capitalizeTokenValue: true, - }; - - this.tokenKeys.push(wipToken); - this.tokenKeysWithAlternative.push(wipToken); - } } diff --git a/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js b/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js index 5090b0bdc3c..7746908714e 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js +++ b/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js @@ -1,10 +1,6 @@ -import _ from 'underscore'; -import AjaxCache from '~/lib/utils/ajax_cache'; +import VisualTokenValue from 'ee_else_ce/filtered_search/visual_token_value'; import { objectToQueryString } from '~/lib/utils/common_utils'; -import Flash from '../flash'; import FilteredSearchContainer from './container'; -import UsersCache from '../lib/utils/users_cache'; -import DropdownUtils from './dropdown_utils'; export default class FilteredSearchVisualTokens { static getLastVisualTokenBeforeInput() { @@ -20,21 +16,6 @@ export default class FilteredSearchVisualTokens { }; } - /** - * Returns a computed API endpoint - * and query string composed of values from endpointQueryParams - * @param {String} endpoint - * @param {String} endpointQueryParams - */ - static getEndpointWithQueryParams(endpoint, endpointQueryParams) { - if (!endpointQueryParams) { - return endpoint; - } - - const queryString = objectToQueryString(JSON.parse(endpointQueryParams)); - return `${endpoint}?${queryString}`; - } - static unselectTokens() { const otherTokens = FilteredSearchContainer.container.querySelectorAll( '.js-visual-token .selectable.selected', @@ -76,114 +57,15 @@ export default class FilteredSearchVisualTokens { `; } - static setTokenStyle(tokenContainer, backgroundColor, textColor) { - const token = tokenContainer; - - token.style.backgroundColor = backgroundColor; - token.style.color = textColor; - - if (textColor === '#FFFFFF') { - const removeToken = token.querySelector('.remove-token'); - removeToken.classList.add('inverted'); - } - - return token; - } - - static updateLabelTokenColor(tokenValueContainer, tokenValue) { - const filteredSearchInput = FilteredSearchContainer.container.querySelector('.filtered-search'); - const { baseEndpoint } = filteredSearchInput.dataset; - const labelsEndpoint = FilteredSearchVisualTokens.getEndpointWithQueryParams( - `${baseEndpoint}/labels.json`, - filteredSearchInput.dataset.endpointQueryParams, - ); - - return AjaxCache.retrieve(labelsEndpoint) - .then(labels => { - const matchingLabel = (labels || []).find( - label => `~${DropdownUtils.getEscapedText(label.title)}` === tokenValue, - ); - - if (!matchingLabel) { - return; - } - - FilteredSearchVisualTokens.setTokenStyle( - tokenValueContainer, - matchingLabel.color, - matchingLabel.text_color, - ); - }) - .catch(() => new Flash('An error occurred while fetching label colors.')); - } - - static updateUserTokenAppearance(tokenValueContainer, tokenValueElement, tokenValue) { - const username = tokenValue.replace(/^@/, ''); - return ( - UsersCache.retrieve(username) - .then(user => { - if (!user) { - return; - } - - /* eslint-disable no-param-reassign */ - tokenValueContainer.dataset.originalValue = tokenValue; - tokenValueElement.innerHTML = ` - <img class="avatar s20" src="${user.avatar_url}" alt=""> - ${_.escape(user.name)} - `; - /* eslint-enable no-param-reassign */ - }) - // ignore error and leave username in the search bar - .catch(() => {}) - ); - } - - static updateEmojiTokenAppearance(tokenValueContainer, tokenValueElement, tokenValue) { - const container = tokenValueContainer; - const element = tokenValueElement; - - return ( - import(/* webpackChunkName: 'emoji' */ '../emoji') - .then(Emoji => { - if (!Emoji.isEmojiNameValid(tokenValue)) { - return; - } - - container.dataset.originalValue = tokenValue; - element.innerHTML = Emoji.glEmojiTag(tokenValue); - }) - // ignore error and leave emoji name in the search bar - .catch(() => {}) - ); - } - static renderVisualTokenValue(parentElement, tokenName, tokenValue) { + const tokenType = tokenName.toLowerCase(); const tokenValueContainer = parentElement.querySelector('.value-container'); const tokenValueElement = tokenValueContainer.querySelector('.value'); tokenValueElement.innerText = tokenValue; - if (['none', 'any'].includes(tokenValue.toLowerCase())) { - return; - } + const visualTokenValue = new VisualTokenValue(tokenValue, tokenType); - const tokenType = tokenName.toLowerCase(); - - if (tokenType === 'label') { - FilteredSearchVisualTokens.updateLabelTokenColor(tokenValueContainer, tokenValue); - } else if (tokenType === 'author' || tokenType === 'assignee') { - FilteredSearchVisualTokens.updateUserTokenAppearance( - tokenValueContainer, - tokenValueElement, - tokenValue, - ); - } else if (tokenType === 'my-reaction') { - FilteredSearchVisualTokens.updateEmojiTokenAppearance( - tokenValueContainer, - tokenValueElement, - tokenValue, - ); - } + visualTokenValue.render(tokenValueContainer, tokenValueElement); } static addVisualTokenElement(name, value, options = {}) { @@ -318,6 +200,21 @@ export default class FilteredSearchVisualTokens { } } + /** + * Returns a computed API endpoint + * and query string composed of values from endpointQueryParams + * @param {String} endpoint + * @param {String} endpointQueryParams + */ + static getEndpointWithQueryParams(endpoint, endpointQueryParams) { + if (!endpointQueryParams) { + return endpoint; + } + + const queryString = objectToQueryString(JSON.parse(endpointQueryParams)); + return `${endpoint}?${queryString}`; + } + static editToken(token) { const input = FilteredSearchContainer.container.querySelector('.filtered-search'); diff --git a/app/assets/javascripts/filtered_search/visual_token_value.js b/app/assets/javascripts/filtered_search/visual_token_value.js new file mode 100644 index 00000000000..7f6f41c18f7 --- /dev/null +++ b/app/assets/javascripts/filtered_search/visual_token_value.js @@ -0,0 +1,125 @@ +import _ from 'underscore'; +import FilteredSearchContainer from '~/filtered_search/container'; +import FilteredSearchVisualTokens from '~/filtered_search/filtered_search_visual_tokens'; +import AjaxCache from '~/lib/utils/ajax_cache'; +import DropdownUtils from '~/filtered_search/dropdown_utils'; +import Flash from '~/flash'; +import UsersCache from '~/lib/utils/users_cache'; + +export default class VisualTokenValue { + constructor(tokenValue, tokenType) { + this.tokenValue = tokenValue; + this.tokenType = tokenType; + } + + render(tokenValueContainer, tokenValueElement) { + const { tokenType } = this; + + if (['none', 'any'].includes(tokenType)) { + return; + } + + if (tokenType === 'label') { + this.updateLabelTokenColor(tokenValueContainer); + } else if (tokenType === 'author' || tokenType === 'assignee') { + this.updateUserTokenAppearance(tokenValueContainer, tokenValueElement); + } else if (tokenType === 'my-reaction') { + this.updateEmojiTokenAppearance(tokenValueContainer, tokenValueElement); + } + } + + updateUserTokenAppearance(tokenValueContainer, tokenValueElement) { + const { tokenValue } = this; + const username = this.tokenValue.replace(/^@/, ''); + + return ( + UsersCache.retrieve(username) + .then(user => { + if (!user) { + return; + } + + /* eslint-disable no-param-reassign */ + tokenValueContainer.dataset.originalValue = tokenValue; + tokenValueElement.innerHTML = ` + <img class="avatar s20" src="${user.avatar_url}" alt=""> + ${_.escape(user.name)} + `; + /* eslint-enable no-param-reassign */ + }) + // ignore error and leave username in the search bar + .catch(() => {}) + ); + } + + updateLabelTokenColor(tokenValueContainer) { + const { tokenValue } = this; + const filteredSearchInput = FilteredSearchContainer.container.querySelector('.filtered-search'); + const { baseEndpoint } = filteredSearchInput.dataset; + const labelsEndpoint = FilteredSearchVisualTokens.getEndpointWithQueryParams( + `${baseEndpoint}/labels.json`, + filteredSearchInput.dataset.endpointQueryParams, + ); + + return AjaxCache.retrieve(labelsEndpoint) + .then(labels => { + const matchingLabel = (labels || []).find( + label => `~${DropdownUtils.getEscapedText(label.title)}` === tokenValue, + ); + + if (!matchingLabel) { + return; + } + + VisualTokenValue.setTokenStyle( + tokenValueContainer, + matchingLabel.color, + matchingLabel.text_color, + ); + }) + .catch(() => new Flash('An error occurred while fetching label colors.')); + } + + static setTokenStyle(tokenValueContainer, backgroundColor, textColor) { + const token = tokenValueContainer; + + token.style.backgroundColor = backgroundColor; + token.style.color = textColor; + + if (textColor === '#FFFFFF') { + const removeToken = token.querySelector('.remove-token'); + removeToken.classList.add('inverted'); + } + + return token; + } + + updateEmojiTokenAppearance(tokenValueContainer, tokenValueElement) { + const container = tokenValueContainer; + const element = tokenValueElement; + const value = this.tokenValue; + + return ( + import(/* webpackChunkName: 'emoji' */ '../emoji') + .then(Emoji => { + Emoji.initEmojiMap() + .then(() => { + if (!Emoji.isEmojiNameValid(value)) { + return; + } + + container.dataset.originalValue = value; + element.innerHTML = Emoji.glEmojiTag(value); + }) + // ignore error and leave emoji name in the search bar + .catch(err => { + throw err; + }); + }) + // ignore error and leave emoji name in the search bar + .catch(importError => { + throw importError; + }) + ); + } +} diff --git a/app/assets/javascripts/gfm_auto_complete.js b/app/assets/javascripts/gfm_auto_complete.js index c81e754df4c..50ea13edf63 100644 --- a/app/assets/javascripts/gfm_auto_complete.js +++ b/app/assets/javascripts/gfm_auto_complete.js @@ -487,9 +487,15 @@ class GfmAutoComplete { this.loadData($input, at, this.cachedData[at]); } else if (GfmAutoComplete.atTypeMap[at] === 'emojis') { import(/* webpackChunkName: 'emoji' */ './emoji') - .then(({ validEmojiNames, glEmojiTag }) => { - this.loadData($input, at, validEmojiNames); - GfmAutoComplete.glEmojiTag = glEmojiTag; + .then(({ initEmojiMap, getValidEmojiNames, glEmojiTag }) => { + initEmojiMap() + .then(() => { + this.loadData($input, at, getValidEmojiNames()); + GfmAutoComplete.glEmojiTag = glEmojiTag; + }) + .catch(() => { + this.isLoadingData[at] = false; + }); }) .catch(() => { this.isLoadingData[at] = false; diff --git a/app/assets/javascripts/ide/components/new_dropdown/index.vue b/app/assets/javascripts/ide/components/new_dropdown/index.vue index d7a7b1b4d78..593a9162a06 100644 --- a/app/assets/javascripts/ide/components/new_dropdown/index.vue +++ b/app/assets/javascripts/ide/components/new_dropdown/index.vue @@ -1,7 +1,6 @@ <script> import { mapActions } from 'vuex'; import icon from '~/vue_shared/components/icon.vue'; -import newModal from './modal.vue'; import upload from './upload.vue'; import ItemButton from './button.vue'; import { modalTypes } from '../../constants'; @@ -9,7 +8,6 @@ import { modalTypes } from '../../constants'; export default { components: { icon, - newModal, upload, ItemButton, }, diff --git a/app/assets/javascripts/ide/components/new_dropdown/modal.vue b/app/assets/javascripts/ide/components/new_dropdown/modal.vue index c9c4e9e86f8..ba6bbdfef4b 100644 --- a/app/assets/javascripts/ide/components/new_dropdown/modal.vue +++ b/app/assets/javascripts/ide/components/new_dropdown/modal.vue @@ -1,6 +1,7 @@ <script> import $ from 'jquery'; -import { __ } from '~/locale'; +import flash from '~/flash'; +import { __, sprintf, s__ } from '~/locale'; import { mapActions, mapState, mapGetters } from 'vuex'; import GlModal from '~/vue_shared/components/gl_modal.vue'; import { modalTypes } from '../../constants'; @@ -15,15 +16,17 @@ export default { }; }, computed: { - ...mapState(['entryModal']), + ...mapState(['entries', 'entryModal']), ...mapGetters('fileTemplates', ['templateTypes']), entryName: { get() { + const entryPath = this.entryModal.entry.path; + if (this.entryModal.type === modalTypes.rename) { - return this.name || this.entryModal.entry.name; + return this.name || entryPath; } - return this.name || (this.entryModal.path !== '' ? `${this.entryModal.path}/` : ''); + return this.name || (entryPath ? `${entryPath}/` : ''); }, set(val) { this.name = val; @@ -62,10 +65,40 @@ export default { ...mapActions(['createTempEntry', 'renameEntry']), submitForm() { if (this.entryModal.type === modalTypes.rename) { - this.renameEntry({ - path: this.entryModal.entry.path, - name: this.entryName, - }); + if (this.entries[this.entryName] && !this.entries[this.entryName].deleted) { + flash( + sprintf(s__('The name %{entryName} is already taken in this directory.'), { + entryName: this.entryName, + }), + 'alert', + document, + null, + false, + true, + ); + } else { + let parentPath = this.entryName.split('/'); + const entryName = parentPath.pop(); + parentPath = parentPath.join('/'); + + const createPromise = + parentPath && !this.entries[parentPath] + ? this.createTempEntry({ name: parentPath, type: 'tree' }) + : Promise.resolve(); + + createPromise + .then(() => + this.renameEntry({ + path: this.entryModal.entry.path, + name: entryName, + entryPath: null, + parentPath, + }), + ) + .catch(() => + flash(__('Error creating a new path'), 'alert', document, null, false, true), + ); + } } else { this.createTempEntry({ name: this.name, @@ -82,7 +115,14 @@ export default { $('#ide-new-entry').modal('toggle'); }, focusInput() { + const name = this.entries[this.entryName] ? this.entries[this.entryName].name : null; + const inputValue = this.$refs.fieldName.value; + this.$refs.fieldName.focus(); + + if (name) { + this.$refs.fieldName.setSelectionRange(inputValue.indexOf(name), inputValue.length); + } }, closedModal() { this.name = ''; diff --git a/app/assets/javascripts/ide/lib/files.js b/app/assets/javascripts/ide/lib/files.js new file mode 100644 index 00000000000..5dfba8fe531 --- /dev/null +++ b/app/assets/javascripts/ide/lib/files.js @@ -0,0 +1,113 @@ +import { viewerInformationForPath } from '~/vue_shared/components/content_viewer/lib/viewer_utils'; +import { decorateData, sortTree } from '../stores/utils'; + +export const splitParent = path => { + const idx = path.lastIndexOf('/'); + + return { + parent: idx >= 0 ? path.substring(0, idx) : null, + name: idx >= 0 ? path.substring(idx + 1) : path, + }; +}; + +/** + * Create file objects from a list of file paths. + */ +export const decorateFiles = ({ + data, + projectId, + branchId, + tempFile = false, + content = '', + base64 = false, +}) => { + const treeList = []; + const entries = {}; + + // These mutable variable references end up being exported and used by `createTempEntry` + let file; + let parentPath; + + const insertParent = path => { + if (!path) { + return null; + } else if (entries[path]) { + return entries[path]; + } + + const { parent, name } = splitParent(path); + const parentFolder = parent && insertParent(parent); + parentPath = parentFolder && parentFolder.path; + + const tree = decorateData({ + projectId, + branchId, + id: path, + name, + path, + url: `/${projectId}/tree/${branchId}/-/${path}/`, + type: 'tree', + parentTreeUrl: parentFolder ? parentFolder.url : `/${projectId}/tree/${branchId}/`, + tempFile, + changed: tempFile, + opened: tempFile, + parentPath, + }); + + Object.assign(entries, { + [path]: tree, + }); + + if (parentFolder) { + parentFolder.tree.push(tree); + } else { + treeList.push(tree); + } + + return tree; + }; + + data.forEach(path => { + const { parent, name } = splitParent(path); + + const fileFolder = parent && insertParent(parent); + + if (name) { + parentPath = fileFolder && fileFolder.path; + + file = decorateData({ + projectId, + branchId, + id: path, + name, + path, + url: `/${projectId}/blob/${branchId}/-/${path}`, + type: 'blob', + parentTreeUrl: fileFolder ? fileFolder.url : `/${projectId}/blob/${branchId}`, + tempFile, + changed: tempFile, + content, + base64, + previewMode: viewerInformationForPath(name), + parentPath, + }); + + Object.assign(entries, { + [path]: file, + }); + + if (fileFolder) { + fileFolder.tree.push(file); + } else { + treeList.push(file); + } + } + }); + + return { + entries, + treeList: sortTree(treeList), + file, + parentPath, + }; +}; diff --git a/app/assets/javascripts/ide/services/index.js b/app/assets/javascripts/ide/services/index.js index 13449592e62..ba33b6826d6 100644 --- a/app/assets/javascripts/ide/services/index.js +++ b/app/assets/javascripts/ide/services/index.js @@ -40,6 +40,9 @@ export default { getProjectData(namespace, project) { return Api.project(`${namespace}/${project}`); }, + getProjectMergeRequests(projectId, params = {}) { + return Api.projectMergeRequests(projectId, params); + }, getProjectMergeRequestData(projectId, mergeRequestId, params = {}) { return Api.projectMergeRequest(projectId, mergeRequestId, params); }, diff --git a/app/assets/javascripts/ide/stores/actions.js b/app/assets/javascripts/ide/stores/actions.js index e10a132ab4b..7b660bda081 100644 --- a/app/assets/javascripts/ide/stores/actions.js +++ b/app/assets/javascripts/ide/stores/actions.js @@ -3,7 +3,7 @@ import Vue from 'vue'; import { visitUrl } from '~/lib/utils/url_utility'; import flash from '~/flash'; import * as types from './mutation_types'; -import FilesDecoratorWorker from './workers/files_decorator_worker'; +import { decorateFiles } from '../lib/files'; import { stageKeys } from '../constants'; export const redirectToUrl = (_, url) => visitUrl(url); @@ -56,7 +56,6 @@ export const createTempEntry = ( { name, type, content = '', base64 = false }, ) => new Promise(resolve => { - const worker = new FilesDecoratorWorker(); const fullName = name.slice(-1) !== '/' && type === 'tree' ? `${name}/` : name; if (state.entries[name]) { @@ -74,31 +73,7 @@ export const createTempEntry = ( return null; } - worker.addEventListener('message', ({ data }) => { - const { file, parentPath } = data; - - worker.terminate(); - - commit(types.CREATE_TMP_ENTRY, { - data, - projectId: state.currentProjectId, - branchId: state.currentBranchId, - }); - - if (type === 'blob') { - commit(types.TOGGLE_FILE_OPEN, file.path); - commit(types.ADD_FILE_TO_CHANGED, file.path); - dispatch('setFileActive', file.path); - } - - if (parentPath && !state.entries[parentPath].opened) { - commit(types.TOGGLE_TREE_OPEN, parentPath); - } - - resolve(file); - }); - - worker.postMessage({ + const data = decorateFiles({ data: [fullName], projectId: state.currentProjectId, branchId: state.currentBranchId, @@ -107,6 +82,25 @@ export const createTempEntry = ( base64, content, }); + const { file, parentPath } = data; + + commit(types.CREATE_TMP_ENTRY, { + data, + projectId: state.currentProjectId, + branchId: state.currentBranchId, + }); + + if (type === 'blob') { + commit(types.TOGGLE_FILE_OPEN, file.path); + commit(types.ADD_FILE_TO_CHANGED, file.path); + dispatch('setFileActive', file.path); + } + + if (parentPath && !state.entries[parentPath].opened) { + commit(types.TOGGLE_TREE_OPEN, parentPath); + } + + resolve(file); return null; }); @@ -215,15 +209,27 @@ export const deleteEntry = ({ commit, dispatch, state }, path) => { export const resetOpenFiles = ({ commit }) => commit(types.RESET_OPEN_FILES); -export const renameEntry = ({ dispatch, commit, state }, { path, name, entryPath = null }) => { +export const renameEntry = ( + { dispatch, commit, state }, + { path, name, entryPath = null, parentPath }, +) => { const entry = state.entries[entryPath || path]; - commit(types.RENAME_ENTRY, { path, name, entryPath }); + commit(types.RENAME_ENTRY, { path, name, entryPath, parentPath }); if (entry.type === 'tree') { - state.entries[entryPath || path].tree.forEach(f => - dispatch('renameEntry', { path, name, entryPath: f.path }), - ); + const slashedParentPath = parentPath ? `${parentPath}/` : ''; + const targetEntry = entryPath ? entryPath.split('/').pop() : name; + const newParentPath = `${slashedParentPath}${targetEntry}`; + + state.entries[entryPath || path].tree.forEach(f => { + dispatch('renameEntry', { + path, + name, + entryPath: f.path, + parentPath: newParentPath, + }); + }); } if (!entryPath && !entry.tempFile) { diff --git a/app/assets/javascripts/ide/stores/actions/merge_request.js b/app/assets/javascripts/ide/stores/actions/merge_request.js index 18c24369996..362ced248a1 100644 --- a/app/assets/javascripts/ide/stores/actions/merge_request.js +++ b/app/assets/javascripts/ide/stores/actions/merge_request.js @@ -4,6 +4,38 @@ import service from '../../services'; import * as types from '../mutation_types'; import { activityBarViews } from '../../constants'; +export const getMergeRequestsForBranch = ({ commit }, { projectId, branchId } = {}) => + service + .getProjectMergeRequests(`${projectId}`, { + source_branch: branchId, + order_by: 'created_at', + per_page: 1, + }) + .then(({ data }) => { + if (data.length > 0) { + const currentMR = data[0]; + + commit(types.SET_MERGE_REQUEST, { + projectPath: projectId, + mergeRequestId: currentMR.iid, + mergeRequest: currentMR, + }); + + commit(types.SET_CURRENT_MERGE_REQUEST, `${currentMR.iid}`); + } + }) + .catch(e => { + flash( + __(`Error fetching merge requests for ${branchId}`), + 'alert', + document, + null, + false, + true, + ); + throw e; + }); + export const getMergeRequestData = ( { commit, dispatch, state }, { projectId, mergeRequestId, targetProjectId = null, force = false } = {}, diff --git a/app/assets/javascripts/ide/stores/actions/project.js b/app/assets/javascripts/ide/stores/actions/project.js index b65f631c99c..06ed5c0b572 100644 --- a/app/assets/javascripts/ide/stores/actions/project.js +++ b/app/assets/javascripts/ide/stores/actions/project.js @@ -136,17 +136,24 @@ export const openBranch = ({ dispatch, state }, { projectId, branchId, basePath return dispatch('getFiles', { projectId, branchId, - }).then(() => { - if (basePath) { - const path = basePath.slice(-1) === '/' ? basePath.slice(0, -1) : basePath; - const treeEntryKey = Object.keys(state.entries).find( - key => key === path && !state.entries[key].pending, - ); - const treeEntry = state.entries[treeEntryKey]; + }) + .then(() => { + if (basePath) { + const path = basePath.slice(-1) === '/' ? basePath.slice(0, -1) : basePath; + const treeEntryKey = Object.keys(state.entries).find( + key => key === path && !state.entries[key].pending, + ); + const treeEntry = state.entries[treeEntryKey]; - if (treeEntry) { - dispatch('handleTreeEntryAction', treeEntry); + if (treeEntry) { + dispatch('handleTreeEntryAction', treeEntry); + } } - } - }); + }) + .then(() => { + dispatch('getMergeRequestsForBranch', { + projectId, + branchId, + }); + }); }; diff --git a/app/assets/javascripts/ide/stores/actions/tree.js b/app/assets/javascripts/ide/stores/actions/tree.js index de5f6050074..3d83e4a9ba5 100644 --- a/app/assets/javascripts/ide/stores/actions/tree.js +++ b/app/assets/javascripts/ide/stores/actions/tree.js @@ -1,7 +1,8 @@ +import _ from 'underscore'; import { __ } from '../../../locale'; import service from '../../services'; import * as types from '../mutation_types'; -import FilesDecoratorWorker from '../workers/files_decorator_worker'; +import { decorateFiles } from '../../lib/files'; export const toggleTreeOpen = ({ commit }, path) => { commit(types.TOGGLE_TREE_OPEN, path); @@ -32,6 +33,19 @@ export const handleTreeEntryAction = ({ commit, dispatch }, row) => { dispatch('showTreeEntry', row.path); }; +export const setDirectoryData = ({ state, commit }, { projectId, branchId, treeList }) => { + const selectedTree = state.trees[`${projectId}/${branchId}`]; + + commit(types.SET_DIRECTORY_DATA, { + treePath: `${projectId}/${branchId}`, + data: treeList, + }); + commit(types.TOGGLE_LOADING, { + entry: selectedTree, + forceValue: false, + }); +}; + export const getFiles = ({ state, commit, dispatch }, { projectId, branchId } = {}) => new Promise((resolve, reject) => { if ( @@ -45,31 +59,19 @@ export const getFiles = ({ state, commit, dispatch }, { projectId, branchId } = service .getFiles(selectedProject.web_url, branchId) .then(({ data }) => { - const worker = new FilesDecoratorWorker(); - worker.addEventListener('message', e => { - const { entries, treeList } = e.data; - const selectedTree = state.trees[`${projectId}/${branchId}`]; - - commit(types.SET_ENTRIES, entries); - commit(types.SET_DIRECTORY_DATA, { - treePath: `${projectId}/${branchId}`, - data: treeList, - }); - commit(types.TOGGLE_LOADING, { - entry: selectedTree, - forceValue: false, - }); - - worker.terminate(); - - resolve(); - }); - - worker.postMessage({ + const { entries, treeList } = decorateFiles({ data, projectId, branchId, }); + + commit(types.SET_ENTRIES, entries); + + // Defer setting the directory data because this triggers some intense rendering. + // The entries is all we need to load the file editor. + _.defer(() => dispatch('setDirectoryData', { projectId, branchId, treeList })); + + resolve(); }) .catch(e => { if (e.response.status === 404) { diff --git a/app/assets/javascripts/ide/stores/mutations.js b/app/assets/javascripts/ide/stores/mutations.js index 78cdfda74f0..9b9f4b21f1c 100644 --- a/app/assets/javascripts/ide/stores/mutations.js +++ b/app/assets/javascripts/ide/stores/mutations.js @@ -206,19 +206,17 @@ export default { } } }, - [types.RENAME_ENTRY](state, { path, name, entryPath = null }) { + [types.RENAME_ENTRY](state, { path, name, entryPath = null, parentPath }) { const oldEntry = state.entries[entryPath || path]; - const nameRegex = - !entryPath && oldEntry.type === 'blob' - ? new RegExp(`${oldEntry.name}$`) - : new RegExp(`^${path}`); - const newPath = oldEntry.path.replace(nameRegex, name); - const parentPath = oldEntry.parentPath ? oldEntry.parentPath.replace(nameRegex, name) : ''; + const slashedParentPath = parentPath ? `${parentPath}/` : ''; + const newPath = entryPath + ? `${slashedParentPath}${oldEntry.name}` + : `${slashedParentPath}${name}`; state.entries[newPath] = { ...oldEntry, id: newPath, - key: `${name}-${oldEntry.type}-${oldEntry.id}`, + key: `${newPath}-${oldEntry.type}-${oldEntry.id}`, path: newPath, name: entryPath ? oldEntry.name : name, tempFile: true, @@ -228,6 +226,7 @@ export default { parentPath, raw: '', }; + oldEntry.moved = true; oldEntry.movedPath = newPath; @@ -256,6 +255,7 @@ export default { Vue.delete(state.entries, oldEntry.path); } }, + ...projectMutations, ...mergeRequestMutation, ...fileMutations, diff --git a/app/assets/javascripts/ide/stores/utils.js b/app/assets/javascripts/ide/stores/utils.js index 0ede76fd1e0..0b2a18e9c8a 100644 --- a/app/assets/javascripts/ide/stores/utils.js +++ b/app/assets/javascripts/ide/stores/utils.js @@ -75,8 +75,7 @@ export const decorateData = entity => { parentPath = '', } = entity; - return { - ...dataStructure(), + return Object.assign(dataStructure(), { id, projectId, branchId, @@ -97,7 +96,7 @@ export const decorateData = entity => { file_lock, html, parentPath, - }; + }); }; export const findEntry = (tree, type, name, prop = 'name') => diff --git a/app/assets/javascripts/ide/stores/workers/files_decorator_worker.js b/app/assets/javascripts/ide/stores/workers/files_decorator_worker.js deleted file mode 100644 index fa35c215880..00000000000 --- a/app/assets/javascripts/ide/stores/workers/files_decorator_worker.js +++ /dev/null @@ -1,100 +0,0 @@ -import { viewerInformationForPath } from '~/vue_shared/components/content_viewer/lib/viewer_utils'; -import { decorateData, sortTree } from '../utils'; - -// eslint-disable-next-line no-restricted-globals -self.addEventListener('message', e => { - const { data, projectId, branchId, tempFile = false, content = '', base64 = false } = e.data; - - const treeList = []; - let file; - let parentPath; - const entries = data.reduce((acc, path) => { - const pathSplit = path.split('/'); - const blobName = pathSplit.pop().trim(); - - if (pathSplit.length > 0) { - pathSplit.reduce((pathAcc, folderName) => { - const parentFolder = acc[pathAcc[pathAcc.length - 1]]; - const folderPath = `${parentFolder ? `${parentFolder.path}/` : ''}${folderName}`; - const foundEntry = acc[folderPath]; - - if (!foundEntry) { - parentPath = parentFolder ? parentFolder.path : null; - - const tree = decorateData({ - projectId, - branchId, - id: folderPath, - name: folderName, - path: folderPath, - url: `/${projectId}/tree/${branchId}/-/${folderPath}/`, - type: 'tree', - parentTreeUrl: parentFolder ? parentFolder.url : `/${projectId}/tree/${branchId}/`, - tempFile, - changed: tempFile, - opened: tempFile, - parentPath, - }); - - Object.assign(acc, { - [folderPath]: tree, - }); - - if (parentFolder) { - parentFolder.tree.push(tree); - } else { - treeList.push(tree); - } - - pathAcc.push(tree.path); - } else { - pathAcc.push(foundEntry.path); - } - - return pathAcc; - }, []); - } - - if (blobName !== '') { - const fileFolder = acc[pathSplit.join('/')]; - parentPath = fileFolder ? fileFolder.path : null; - - file = decorateData({ - projectId, - branchId, - id: path, - name: blobName, - path, - url: `/${projectId}/blob/${branchId}/-/${path}`, - type: 'blob', - parentTreeUrl: fileFolder ? fileFolder.url : `/${projectId}/blob/${branchId}`, - tempFile, - changed: tempFile, - content, - base64, - previewMode: viewerInformationForPath(blobName), - parentPath, - }); - - Object.assign(acc, { - [path]: file, - }); - - if (fileFolder) { - fileFolder.tree.push(file); - } else { - treeList.push(file); - } - } - - return acc; - }, {}); - - // eslint-disable-next-line no-restricted-globals - self.postMessage({ - entries, - treeList: sortTree(treeList), - file, - parentPath, - }); -}); diff --git a/app/assets/javascripts/import_projects/index.js b/app/assets/javascripts/import_projects/index.js index 5c77484aee1..2d99d716609 100644 --- a/app/assets/javascripts/import_projects/index.js +++ b/app/assets/javascripts/import_projects/index.js @@ -3,7 +3,7 @@ import { mapActions } from 'vuex'; import Translate from '../vue_shared/translate'; import ImportProjectsTable from './components/import_projects_table.vue'; import { parseBoolean } from '../lib/utils/common_utils'; -import store from './store'; +import createStore from './store'; Vue.use(Translate); @@ -20,6 +20,7 @@ export default function mountImportProjectsTable(mountElement) { ciCdOnly, } = mountElement.dataset; + const store = createStore(); return new Vue({ el: mountElement, store, diff --git a/app/assets/javascripts/import_projects/store/index.js b/app/assets/javascripts/import_projects/store/index.js index 6ac9bfd8189..f666e2ebf33 100644 --- a/app/assets/javascripts/import_projects/store/index.js +++ b/app/assets/javascripts/import_projects/store/index.js @@ -7,9 +7,10 @@ import mutations from './mutations'; Vue.use(Vuex); -export default new Vuex.Store({ - state: state(), - actions, - mutations, - getters, -}); +export default () => + new Vuex.Store({ + state: state(), + actions, + mutations, + getters, + }); diff --git a/app/assets/javascripts/jobs/components/job_app.vue b/app/assets/javascripts/jobs/components/job_app.vue index d473d6a482d..dbadd224251 100644 --- a/app/assets/javascripts/jobs/components/job_app.vue +++ b/app/assets/javascripts/jobs/components/job_app.vue @@ -34,6 +34,7 @@ export default { StuckBlock, Sidebar, GlLoadingIcon, + SharedRunner: () => import('ee_component/jobs/components/shared_runner_limit_block.vue'), }, mixins: [delayedJobMixin], props: { @@ -84,6 +85,7 @@ export default { 'shouldRenderCalloutMessage', 'shouldRenderTriggeredLabel', 'hasEnvironment', + 'shouldRenderSharedRunnerLimitWarning', 'hasTrace', 'emptyStateIllustration', 'isScrollingDown', @@ -221,6 +223,14 @@ export default { :runners-path="runnerSettingsUrl" /> + <shared-runner + v-if="shouldRenderSharedRunnerLimitWarning" + class="js-shared-runner-limit" + :quota-used="job.runners.quota.used" + :quota-limit="job.runners.quota.limit" + :runners-path="runnerHelpUrl" + /> + <environments-block v-if="hasEnvironment" class="js-job-environment" diff --git a/app/assets/javascripts/jobs/store/getters.js b/app/assets/javascripts/jobs/store/getters.js index 98911717381..73c1cbc3a99 100644 --- a/app/assets/javascripts/jobs/store/getters.js +++ b/app/assets/javascripts/jobs/store/getters.js @@ -28,6 +28,17 @@ export const emptyStateIllustration = state => export const emptyStateAction = state => (state.job && state.job.status && state.job.status.action) || null; +/** + * Shared runners limit is only rendered when + * used quota is bigger or equal than the limit + * + * @returns {Boolean} + */ +export const shouldRenderSharedRunnerLimitWarning = state => + !_.isEmpty(state.job.runners) && + !_.isEmpty(state.job.runners.quota) && + state.job.runners.quota.used >= state.job.runners.quota.limit; + export const isScrollingDown = state => isScrolledToBottom() && !state.isTraceComplete; export const hasRunnersForProject = state => diff --git a/app/assets/javascripts/lib/utils/http_status.js b/app/assets/javascripts/lib/utils/http_status.js index 14c02218990..37ad1676f7a 100644 --- a/app/assets/javascripts/lib/utils/http_status.js +++ b/app/assets/javascripts/lib/utils/http_status.js @@ -16,6 +16,7 @@ const httpStatusCodes = { IM_USED: 226, MULTIPLE_CHOICES: 300, BAD_REQUEST: 400, + UNAUTHORIZED: 401, FORBIDDEN: 403, NOT_FOUND: 404, UNPROCESSABLE_ENTITY: 422, diff --git a/app/assets/javascripts/monitoring/components/charts/area.vue b/app/assets/javascripts/monitoring/components/charts/area.vue index 9e031b03579..41783d311ef 100644 --- a/app/assets/javascripts/monitoring/components/charts/area.vue +++ b/app/assets/javascripts/monitoring/components/charts/area.vue @@ -4,6 +4,7 @@ import dateFormat from 'dateformat'; import { debounceByAnimationFrame } from '~/lib/utils/common_utils'; import { getSvgIconPathContent } from '~/lib/utils/icon_utils'; import Icon from '~/vue_shared/components/icon.vue'; +import { chartHeight, graphTypes, lineTypes } from '../../constants'; let debouncedResize; @@ -19,7 +20,6 @@ export default { required: true, validator(data) { return ( - data.queries && Array.isArray(data.queries) && data.queries.filter(query => { if (Array.isArray(query.result)) { @@ -51,21 +51,44 @@ export default { return { tooltip: { title: '', - content: '', + content: [], isDeployment: false, sha: '', }, width: 0, - height: 0, - scatterSymbol: undefined, + height: chartHeight, + svgs: {}, + primaryColor: null, }; }, computed: { chartData() { - return this.graphData.queries.reduce((accumulator, query) => { - accumulator[query.unit] = query.result.reduce((acc, res) => acc.concat(res.values), []); - return accumulator; - }, {}); + return this.graphData.queries.map(query => { + const { appearance } = query; + const lineType = + appearance && appearance.line && appearance.line.type + ? appearance.line.type + : lineTypes.default; + const lineColor = lineType === lineTypes.threshold ? this.primaryColor : undefined; + + return { + name: this.formatLegendLabel(query), + data: this.concatenateResults(query.result), + lineStyle: { + type: lineType, + color: lineColor, + }, + itemStyle: { + color: lineColor, + }, + areaStyle: { + opacity: + appearance && appearance.area && typeof appearance.area.opacity === 'number' + ? appearance.area.opacity + : undefined, + }, + }; + }); }, chartOptions() { return { @@ -78,28 +101,25 @@ export default { axisPointer: { snap: true, }, - nameTextStyle: { - padding: [18, 0, 0, 0], - }, }, yAxis: { name: this.yAxisLabel, axisLabel: { formatter: value => value.toFixed(3), }, - nameTextStyle: { - padding: [0, 0, 36, 0], - }, - }, - legend: { - formatter: this.xAxisLabel, }, series: this.scatterSeries, + dataZoom: this.dataZoomConfig, }; }, + dataZoomConfig() { + const handleIcon = this.svgs['scroll-handle']; + + return handleIcon ? { handleIcon } : {}; + }, earliestDatapoint() { - return Object.values(this.chartData).reduce((acc, data) => { - const [[timestamp]] = data.sort(([a], [b]) => { + return this.chartData.reduce((acc, series) => { + const [[timestamp]] = series.data.sort(([a], [b]) => { if (a < b) { return -1; } @@ -129,15 +149,15 @@ export default { }, scatterSeries() { return { - type: 'scatter', + type: graphTypes.deploymentData, data: this.recentDeployments.map(deployment => [deployment.createdAt, 0]), - symbol: this.scatterSymbol, + symbol: this.svgs.rocket, symbolSize: 14, + itemStyle: { + color: this.primaryColor, + }, }; }, - xAxisLabel() { - return this.graphData.queries.map(query => query.label).join(', '); - }, yAxisLabel() { return `${this.graphData.y_label}`; }, @@ -151,35 +171,54 @@ export default { created() { debouncedResize = debounceByAnimationFrame(this.onResize); window.addEventListener('resize', debouncedResize); - this.getScatterSymbol(); + this.setSvg('rocket'); + this.setSvg('scroll-handle'); }, methods: { + concatenateResults(results) { + return results.reduce((acc, result) => acc.concat(result.values), []); + }, + formatLegendLabel(query) { + return `${query.label}`; + }, formatTooltipText(params) { - const [seriesData] = params.seriesData; - this.tooltip.isDeployment = seriesData.componentSubType === 'scatter'; this.tooltip.title = dateFormat(params.value, 'dd mmm yyyy, h:MMTT'); - if (this.tooltip.isDeployment) { - const [deploy] = this.recentDeployments.filter( - deployment => deployment.createdAt === seriesData.value[0], - ); - this.tooltip.sha = deploy.sha.substring(0, 8); - } else { - this.tooltip.content = `${this.yAxisLabel} ${seriesData.value[1].toFixed(3)}`; - } + this.tooltip.content = []; + params.seriesData.forEach(seriesData => { + if (seriesData.componentSubType === graphTypes.deploymentData) { + this.tooltip.isDeployment = true; + const [deploy] = this.recentDeployments.filter( + deployment => deployment.createdAt === seriesData.value[0], + ); + this.tooltip.sha = deploy.sha.substring(0, 8); + } else { + const { seriesName } = seriesData; + // seriesData.value contains the chart's [x, y] value pair + // seriesData.value[1] is threfore the chart y value + const value = seriesData.value[1].toFixed(3); + + this.tooltip.content.push({ + name: seriesName, + value, + }); + } + }); }, - getScatterSymbol() { - getSvgIconPathContent('rocket') + setSvg(name) { + getSvgIconPathContent(name) .then(path => { if (path) { - this.scatterSymbol = `path://${path}`; + this.$set(this.svgs, name, `path://${path}`); } }) .catch(() => {}); }, + onChartUpdated(chart) { + [this.primaryColor] = chart.getOption().color; + }, onResize() { - const { width, height } = this.$refs.areaChart.$el.getBoundingClientRect(); + const { width } = this.$refs.areaChart.$el.getBoundingClientRect(); this.width = width; - this.height = height; }, }, }; @@ -200,6 +239,7 @@ export default { :thresholds="alertData" :width="width" :height="height" + @updated="onChartUpdated" > <template slot="tooltipTitle"> <div v-if="tooltip.isDeployment"> @@ -213,7 +253,13 @@ export default { {{ tooltip.sha }} </div> <template v-else> - {{ tooltip.content }} + <div + v-for="(content, key) in tooltip.content" + :key="key" + class="d-flex justify-content-between" + > + {{ content.name }} {{ content.value }} + </div> </template> </template> </gl-area-chart> diff --git a/app/assets/javascripts/monitoring/constants.js b/app/assets/javascripts/monitoring/constants.js new file mode 100644 index 00000000000..869173b6572 --- /dev/null +++ b/app/assets/javascripts/monitoring/constants.js @@ -0,0 +1,10 @@ +export const chartHeight = 300; + +export const graphTypes = { + deploymentData: 'scatter', +}; + +export const lineTypes = { + default: 'solid', + threshold: 'dashed', +}; diff --git a/app/assets/javascripts/mr_notes/index.js b/app/assets/javascripts/mr_notes/index.js index 9e99aa4f724..8eccba07c38 100644 --- a/app/assets/javascripts/mr_notes/index.js +++ b/app/assets/javascripts/mr_notes/index.js @@ -1,11 +1,9 @@ -import $ from 'jquery'; import Vue from 'vue'; -import { mapActions, mapState, mapGetters } from 'vuex'; +import store from 'ee_else_ce/mr_notes/stores'; +import initNotesApp from './init_notes'; import initDiffsApp from '../diffs'; -import notesApp from '../notes/components/notes_app.vue'; import discussionCounter from '../notes/components/discussion_counter.vue'; import initDiscussionFilters from '../notes/discussion_filters'; -import store from './stores'; import MergeRequest from '../merge_request'; import { resetServiceWorkersPublicPath } from '../lib/utils/webpack'; @@ -18,68 +16,7 @@ export default function initMrNotes() { action: mrShowNode.dataset.mrAction, }); - // eslint-disable-next-line no-new - new Vue({ - el: '#js-vue-mr-discussions', - name: 'MergeRequestDiscussions', - components: { - notesApp, - }, - store, - data() { - const notesDataset = document.getElementById('js-vue-mr-discussions').dataset; - const noteableData = JSON.parse(notesDataset.noteableData); - noteableData.noteableType = notesDataset.noteableType; - noteableData.targetType = notesDataset.targetType; - - return { - noteableData, - currentUserData: JSON.parse(notesDataset.currentUserData), - notesData: JSON.parse(notesDataset.notesData), - helpPagePath: notesDataset.helpPagePath, - }; - }, - computed: { - ...mapGetters(['discussionTabCounter']), - ...mapState({ - activeTab: state => state.page.activeTab, - }), - }, - watch: { - discussionTabCounter() { - this.updateDiscussionTabCounter(); - }, - }, - created() { - this.setActiveTab(window.mrTabs.getCurrentAction()); - }, - mounted() { - this.notesCountBadge = $('.issuable-details').find('.notes-tab .badge'); - $(document).on('visibilitychange', this.updateDiscussionTabCounter); - window.mrTabs.eventHub.$on('MergeRequestTabChange', this.setActiveTab); - }, - beforeDestroy() { - $(document).off('visibilitychange', this.updateDiscussionTabCounter); - window.mrTabs.eventHub.$off('MergeRequestTabChange', this.setActiveTab); - }, - methods: { - ...mapActions(['setActiveTab']), - updateDiscussionTabCounter() { - this.notesCountBadge.text(this.discussionTabCounter); - }, - }, - render(createElement) { - return createElement('notes-app', { - props: { - noteableData: this.noteableData, - notesData: this.notesData, - userData: this.currentUserData, - shouldShow: this.activeTab === 'show', - helpPagePath: this.helpPagePath, - }, - }); - }, - }); + initNotesApp(); // eslint-disable-next-line no-new new Vue({ diff --git a/app/assets/javascripts/mr_notes/init_notes.js b/app/assets/javascripts/mr_notes/init_notes.js new file mode 100644 index 00000000000..842a209a545 --- /dev/null +++ b/app/assets/javascripts/mr_notes/init_notes.js @@ -0,0 +1,70 @@ +import $ from 'jquery'; +import Vue from 'vue'; +import { mapActions, mapState, mapGetters } from 'vuex'; +import store from 'ee_else_ce/mr_notes/stores'; +import notesApp from '../notes/components/notes_app.vue'; + +export default () => { + // eslint-disable-next-line no-new + new Vue({ + el: '#js-vue-mr-discussions', + name: 'MergeRequestDiscussions', + components: { + notesApp, + }, + store, + data() { + const notesDataset = document.getElementById('js-vue-mr-discussions').dataset; + const noteableData = JSON.parse(notesDataset.noteableData); + noteableData.noteableType = notesDataset.noteableType; + noteableData.targetType = notesDataset.targetType; + + return { + noteableData, + currentUserData: JSON.parse(notesDataset.currentUserData), + notesData: JSON.parse(notesDataset.notesData), + helpPagePath: notesDataset.helpPagePath, + }; + }, + computed: { + ...mapGetters(['discussionTabCounter']), + ...mapState({ + activeTab: state => state.page.activeTab, + }), + }, + watch: { + discussionTabCounter() { + this.updateDiscussionTabCounter(); + }, + }, + created() { + this.setActiveTab(window.mrTabs.getCurrentAction()); + }, + mounted() { + this.notesCountBadge = $('.issuable-details').find('.notes-tab .badge'); + $(document).on('visibilitychange', this.updateDiscussionTabCounter); + window.mrTabs.eventHub.$on('MergeRequestTabChange', this.setActiveTab); + }, + beforeDestroy() { + $(document).off('visibilitychange', this.updateDiscussionTabCounter); + window.mrTabs.eventHub.$off('MergeRequestTabChange', this.setActiveTab); + }, + methods: { + ...mapActions(['setActiveTab']), + updateDiscussionTabCounter() { + this.notesCountBadge.text(this.discussionTabCounter); + }, + }, + render(createElement) { + return createElement('notes-app', { + props: { + noteableData: this.noteableData, + notesData: this.notesData, + userData: this.currentUserData, + shouldShow: this.activeTab === 'show', + helpPagePath: this.helpPagePath, + }, + }); + }, + }); +}; diff --git a/app/assets/javascripts/notes/stores/mutations.js b/app/assets/javascripts/notes/stores/mutations.js index ae6f8b7790a..fa44ef2d057 100644 --- a/app/assets/javascripts/notes/stores/mutations.js +++ b/app/assets/javascripts/notes/stores/mutations.js @@ -193,6 +193,10 @@ export default { const noteObj = utils.findNoteObjectById(state.discussions, note.discussion_id); if (noteObj.individual_note) { + if (note.type === constants.DISCUSSION_NOTE) { + noteObj.individual_note = false; + } + noteObj.notes.splice(0, 1, note); } else { const comment = utils.findNoteObjectById(noteObj.notes, note.id); diff --git a/app/assets/javascripts/pages/dashboard/merge_requests/index.js b/app/assets/javascripts/pages/dashboard/merge_requests/index.js index 260484726f3..ff758fcb4fe 100644 --- a/app/assets/javascripts/pages/dashboard/merge_requests/index.js +++ b/app/assets/javascripts/pages/dashboard/merge_requests/index.js @@ -1,10 +1,11 @@ import projectSelect from '~/project_select'; import initFilteredSearch from '~/pages/search/init_filtered_search'; +import addExtraTokensForMergeRequests from 'ee_else_ce/filtered_search/add_extra_tokens_for_merge_requests'; import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys'; import { FILTERED_SEARCH } from '~/pages/constants'; document.addEventListener('DOMContentLoaded', () => { - IssuableFilteredSearchTokenKeys.addExtraTokensForMergeRequests(); + addExtraTokensForMergeRequests(IssuableFilteredSearchTokenKeys); initFilteredSearch({ page: FILTERED_SEARCH.MERGE_REQUESTS, diff --git a/app/assets/javascripts/pages/groups/clusters/index/index.js b/app/assets/javascripts/pages/groups/clusters/index/index.js index 21efc4f6d00..30d519d0e37 100644 --- a/app/assets/javascripts/pages/groups/clusters/index/index.js +++ b/app/assets/javascripts/pages/groups/clusters/index/index.js @@ -2,6 +2,5 @@ import PersistentUserCallout from '~/persistent_user_callout'; document.addEventListener('DOMContentLoaded', () => { const callout = document.querySelector('.gcp-signup-offer'); - - if (callout) new PersistentUserCallout(callout); // eslint-disable-line no-new + PersistentUserCallout.factory(callout); }); diff --git a/app/assets/javascripts/pages/groups/index.js b/app/assets/javascripts/pages/groups/index.js index a63a0dbc6b1..451be6497de 100644 --- a/app/assets/javascripts/pages/groups/index.js +++ b/app/assets/javascripts/pages/groups/index.js @@ -3,8 +3,7 @@ import initGkeDropdowns from '~/projects/gke_cluster_dropdowns'; function initGcpSignupCallout() { const callout = document.querySelector('.gcp-signup-offer'); - - if (callout) new PersistentUserCallout(callout); // eslint-disable-line no-new + PersistentUserCallout.factory(callout); } document.addEventListener('DOMContentLoaded', () => { diff --git a/app/assets/javascripts/pages/groups/merge_requests/index.js b/app/assets/javascripts/pages/groups/merge_requests/index.js index 339ce67438a..12a26fd88fa 100644 --- a/app/assets/javascripts/pages/groups/merge_requests/index.js +++ b/app/assets/javascripts/pages/groups/merge_requests/index.js @@ -1,10 +1,11 @@ import projectSelect from '~/project_select'; import initFilteredSearch from '~/pages/search/init_filtered_search'; import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys'; +import addExtraTokensForMergeRequests from 'ee_else_ce/filtered_search/add_extra_tokens_for_merge_requests'; import { FILTERED_SEARCH } from '~/pages/constants'; document.addEventListener('DOMContentLoaded', () => { - IssuableFilteredSearchTokenKeys.addExtraTokensForMergeRequests(); + addExtraTokensForMergeRequests(IssuableFilteredSearchTokenKeys); initFilteredSearch({ page: FILTERED_SEARCH.MERGE_REQUESTS, diff --git a/app/assets/javascripts/pages/profiles/show/index.js b/app/assets/javascripts/pages/profiles/show/index.js index 0dd0d5336fc..c9d3bbc8c39 100644 --- a/app/assets/javascripts/pages/profiles/show/index.js +++ b/app/assets/javascripts/pages/profiles/show/index.js @@ -56,30 +56,34 @@ document.addEventListener('DOMContentLoaded', () => { import(/* webpackChunkName: 'emoji' */ '~/emoji') .then(Emoji => { - const emojiMenu = new EmojiMenu( - Emoji, - toggleEmojiMenuButtonSelector, - 'js-status-emoji-menu', - selectEmojiCallback, - ); - emojiMenu.bindEvents(); + Emoji.initEmojiMap() + .then(() => { + const emojiMenu = new EmojiMenu( + Emoji, + toggleEmojiMenuButtonSelector, + 'js-status-emoji-menu', + selectEmojiCallback, + ); + emojiMenu.bindEvents(); - const defaultEmojiTag = Emoji.glEmojiTag(defaultStatusEmoji); - statusMessageField.addEventListener('input', () => { - const hasStatusMessage = statusMessageField.value.trim() !== ''; - const statusEmoji = findStatusEmoji(); - if (hasStatusMessage && statusEmoji) { - return; - } + const defaultEmojiTag = Emoji.glEmojiTag(defaultStatusEmoji); + statusMessageField.addEventListener('input', () => { + const hasStatusMessage = statusMessageField.value.trim() !== ''; + const statusEmoji = findStatusEmoji(); + if (hasStatusMessage && statusEmoji) { + return; + } - if (hasStatusMessage) { - toggleNoEmojiPlaceholder(false); - toggleEmojiMenuButton.innerHTML += defaultEmojiTag; - } else if (statusEmoji.dataset.name === defaultStatusEmoji) { - toggleNoEmojiPlaceholder(true); - removeStatusEmoji(); - } - }); + if (hasStatusMessage) { + toggleNoEmojiPlaceholder(false); + toggleEmojiMenuButton.innerHTML += defaultEmojiTag; + } else if (statusEmoji.dataset.name === defaultStatusEmoji) { + toggleNoEmojiPlaceholder(true); + removeStatusEmoji(); + } + }); + }) + .catch(() => createFlash('Failed to load emoji list.')); }) .catch(() => createFlash('Failed to load emoji list.')); }); diff --git a/app/assets/javascripts/pages/projects/clusters/index/index.js b/app/assets/javascripts/pages/projects/clusters/index/index.js index 21efc4f6d00..30d519d0e37 100644 --- a/app/assets/javascripts/pages/projects/clusters/index/index.js +++ b/app/assets/javascripts/pages/projects/clusters/index/index.js @@ -2,6 +2,5 @@ import PersistentUserCallout from '~/persistent_user_callout'; document.addEventListener('DOMContentLoaded', () => { const callout = document.querySelector('.gcp-signup-offer'); - - if (callout) new PersistentUserCallout(callout); // eslint-disable-line no-new + PersistentUserCallout.factory(callout); }); diff --git a/app/assets/javascripts/pages/projects/index.js b/app/assets/javascripts/pages/projects/index.js index b0345b4e50d..d4bd02c14e9 100644 --- a/app/assets/javascripts/pages/projects/index.js +++ b/app/assets/javascripts/pages/projects/index.js @@ -13,7 +13,7 @@ document.addEventListener('DOMContentLoaded', () => { if (newClusterViews.indexOf(page) > -1) { const callout = document.querySelector('.gcp-signup-offer'); - if (callout) new PersistentUserCallout(callout); // eslint-disable-line no-new + PersistentUserCallout.factory(callout); initGkeDropdowns(); } diff --git a/app/assets/javascripts/pages/projects/issues/edit/index.js b/app/assets/javascripts/pages/projects/issues/edit/index.js index ffc84dc106b..aecc6484b26 100644 --- a/app/assets/javascripts/pages/projects/issues/edit/index.js +++ b/app/assets/javascripts/pages/projects/issues/edit/index.js @@ -1,3 +1,3 @@ -import initForm from '../form'; +import initForm from 'ee_else_ce/pages/projects/issues/form'; document.addEventListener('DOMContentLoaded', initForm); diff --git a/app/assets/javascripts/pages/projects/issues/form.js b/app/assets/javascripts/pages/projects/issues/form.js index f99023ad8e7..941c4552579 100644 --- a/app/assets/javascripts/pages/projects/issues/form.js +++ b/app/assets/javascripts/pages/projects/issues/form.js @@ -2,7 +2,7 @@ import $ from 'jquery'; import GLForm from '~/gl_form'; -import IssuableForm from '~/issuable_form'; +import IssuableForm from 'ee_else_ce/issuable_form'; import LabelsSelect from '~/labels_select'; import MilestoneSelect from '~/milestone_select'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation'; diff --git a/app/assets/javascripts/pages/projects/issues/new/index.js b/app/assets/javascripts/pages/projects/issues/new/index.js index ffc84dc106b..aecc6484b26 100644 --- a/app/assets/javascripts/pages/projects/issues/new/index.js +++ b/app/assets/javascripts/pages/projects/issues/new/index.js @@ -1,3 +1,3 @@ -import initForm from '../form'; +import initForm from 'ee_else_ce/pages/projects/issues/form'; document.addEventListener('DOMContentLoaded', initForm); diff --git a/app/assets/javascripts/pages/projects/merge_requests/index/index.js b/app/assets/javascripts/pages/projects/merge_requests/index/index.js index ec39db12e74..0bcca22e40f 100644 --- a/app/assets/javascripts/pages/projects/merge_requests/index/index.js +++ b/app/assets/javascripts/pages/projects/merge_requests/index/index.js @@ -2,12 +2,13 @@ import IssuableIndex from '~/issuable_index'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation'; import UsersSelect from '~/users_select'; import initFilteredSearch from '~/pages/search/init_filtered_search'; +import addExtraTokensForMergeRequests from 'ee_else_ce/filtered_search/add_extra_tokens_for_merge_requests'; import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys'; import { FILTERED_SEARCH } from '~/pages/constants'; import { ISSUABLE_INDEX } from '~/pages/projects/constants'; document.addEventListener('DOMContentLoaded', () => { - IssuableFilteredSearchTokenKeys.addExtraTokensForMergeRequests(); + addExtraTokensForMergeRequests(IssuableFilteredSearchTokenKeys); initFilteredSearch({ page: FILTERED_SEARCH.MERGE_REQUESTS, diff --git a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js index e3971618da5..8f0dc8554e2 100644 --- a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js +++ b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js @@ -4,7 +4,7 @@ import $ from 'jquery'; import Diff from '~/diff'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation'; import GLForm from '~/gl_form'; -import IssuableForm from '~/issuable_form'; +import IssuableForm from 'ee_else_ce/issuable_form'; import LabelsSelect from '~/labels_select'; import MilestoneSelect from '~/milestone_select'; import IssuableTemplateSelectors from '~/templates/issuable_template_selectors'; diff --git a/app/assets/javascripts/pages/users/activity_calendar.js b/app/assets/javascripts/pages/users/activity_calendar.js index afa099d0e0b..61204c37307 100644 --- a/app/assets/javascripts/pages/users/activity_calendar.js +++ b/app/assets/javascripts/pages/users/activity_calendar.js @@ -10,6 +10,12 @@ import { __ } from '~/locale'; const d3 = { select, scaleLinear, scaleThreshold }; +const firstDayOfWeekChoices = Object.freeze({ + sunday: 0, + monday: 1, + saturday: 6, +}); + const LOADING_HTML = ` <div class="text-center"> <i class="fa fa-spinner fa-spin user-calendar-activities-loading"></i> @@ -49,7 +55,7 @@ export default class ActivityCalendar { timestamps, calendarActivitiesPath, utcOffset = 0, - firstDayOfWeek = 0, + firstDayOfWeek = firstDayOfWeekChoices.sunday, monthsAgo = 12, ) { this.calendarActivitiesPath = calendarActivitiesPath; @@ -206,11 +212,16 @@ export default class ActivityCalendar { }, ]; - if (this.firstDayOfWeek === 1) { + if (this.firstDayOfWeek === firstDayOfWeekChoices.monday) { days.push({ text: 'S', y: 29 + this.dayYPos(7), }); + } else if (this.firstDayOfWeek === firstDayOfWeekChoices.saturday) { + days.push({ + text: 'S', + y: 29 + this.dayYPos(6), + }); } this.svg diff --git a/app/assets/javascripts/persistent_user_callout.js b/app/assets/javascripts/persistent_user_callout.js index 1e34e74a152..4a08e158f6b 100644 --- a/app/assets/javascripts/persistent_user_callout.js +++ b/app/assets/javascripts/persistent_user_callout.js @@ -31,4 +31,12 @@ export default class PersistentUserCallout { Flash(__('An error occurred while dismissing the alert. Refresh the page and try again.')); }); } + + static factory(container) { + if (!container) { + return undefined; + } + + return new PersistentUserCallout(container); + } } diff --git a/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue b/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue index 7f86741ed29..e9ed05e30cd 100644 --- a/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue +++ b/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue @@ -66,19 +66,23 @@ export default { import(/* webpackChunkName: 'emoji' */ '~/emoji') .then(Emoji => { - if (this.emoji) { - this.emojiTag = Emoji.glEmojiTag(this.emoji); - } - this.noEmoji = this.emoji === ''; - this.defaultEmojiTag = Emoji.glEmojiTag('speech_balloon'); + Emoji.initEmojiMap() + .then(() => { + if (this.emoji) { + this.emojiTag = Emoji.glEmojiTag(this.emoji); + } + this.noEmoji = this.emoji === ''; + this.defaultEmojiTag = Emoji.glEmojiTag('speech_balloon'); - this.emojiMenu = new EmojiMenuInModal( - Emoji, - toggleEmojiMenuButtonSelector, - emojiMenuClass, - this.setEmoji, - this.$refs.userStatusForm, - ); + this.emojiMenu = new EmojiMenuInModal( + Emoji, + toggleEmojiMenuButtonSelector, + emojiMenuClass, + this.setEmoji, + this.$refs.userStatusForm, + ); + }) + .catch(() => createFlash(__('Failed to load emoji list.'))); }) .catch(() => createFlash(__('Failed to load emoji list.'))); }, diff --git a/app/assets/javascripts/users_select.js b/app/assets/javascripts/users_select.js index 4017630d6ef..8c71615dff2 100644 --- a/app/assets/javascripts/users_select.js +++ b/app/assets/javascripts/users_select.js @@ -93,23 +93,22 @@ function UsersSelect(currentUser, els, options = {}) { } // Save current selected user to the DOM - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = $dropdown.data('fieldName'); - - const currentUserInfo = $dropdown.data('currentUserInfo'); - - if (currentUserInfo) { - input.value = currentUserInfo.id; - input.dataset.meta = _.escape(currentUserInfo.name); - } else if (_this.currentUser) { - input.value = _this.currentUser.id; - } + const currentUserInfo = $dropdown.data('currentUserInfo') || {}; + const currentUser = _this.currentUser || {}; + const fieldName = $dropdown.data('fieldName'); + const userName = currentUserInfo.name; + const userId = currentUserInfo.id || currentUser.id; + + const inputHtmlString = _.template(` + <input type="hidden" name="<%- fieldName %>" + data-meta="<%- userName %>" + value="<%- userId %>" /> + `)({ fieldName, userName, userId }); if ($selectbox) { - $dropdown.parent().before(input); + $dropdown.parent().before(inputHtmlString); } else { - $dropdown.after(input); + $dropdown.after(inputHtmlString); } }; diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue index 3b9fc2661ef..50ab7ead582 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue @@ -135,7 +135,7 @@ export default { <span class="dropdown"> <button type="button" - class="btn dropdown-toggle" + class="btn dropdown-toggle qa-dropdown-toggle" data-toggle="dropdown" aria-label="Download as" aria-haspopup="true" @@ -145,12 +145,20 @@ export default { </button> <ul class="dropdown-menu dropdown-menu-right"> <li> - <a :href="mr.emailPatchesPath" class="js-download-email-patches" download> + <a + :href="mr.emailPatchesPath" + class="js-download-email-patches qa-download-email-patches" + download + > {{ s__('mrWidget|Email patches') }} </a> </li> <li> - <a :href="mr.plainDiffPath" class="js-download-plain-diff" download> + <a + :href="mr.plainDiffPath" + class="js-download-plain-diff qa-download-plain-diff" + download + > {{ s__('mrWidget|Plain diff') }} </a> </li> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue index f11cf21b0ca..9e63aa00341 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue @@ -5,6 +5,7 @@ import PipelineStage from '~/pipelines/components/stage.vue'; import CiIcon from '~/vue_shared/components/ci_icon.vue'; import Icon from '~/vue_shared/components/icon.vue'; import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate.vue'; +import mrWidgetPipelineMixin from 'ee_else_ce/vue_merge_request_widget/mixins/mr_widget_pipeline'; export default { name: 'MRWidgetPipeline', @@ -13,7 +14,10 @@ export default { CiIcon, Icon, TooltipOnTruncate, + LinkedPipelinesMiniList: () => + import('ee_component/vue_shared/components/linked_pipelines_mini_list.vue'), }, + mixins: [mrWidgetPipelineMixin], props: { pipeline: { type: Object, @@ -82,8 +86,7 @@ export default { <div v-if="hasPipeline || hasCIError" class="ci-widget media"> <template v-if="hasCIError"> <div - class="add-border ci-status-icon ci-status-icon-failed ci-error - js-ci-error append-right-default" + class="add-border ci-status-icon ci-status-icon-failed ci-error js-ci-error append-right-default" > <icon :size="32" name="status_failed_borderless" /> </div> @@ -101,16 +104,13 @@ export default { <a :href="pipeline.path" class="pipeline-id font-weight-normal pipeline-number" >#{{ pipeline.id }}</a > - {{ pipeline.details.status.label }} - <template v-if="hasCommitInfo"> for <a :href="pipeline.commit.commit_path" class="commit-sha js-commit-link font-weight-normal" - > - {{ pipeline.commit.short_id }}</a + >{{ pipeline.commit.short_id }}</a > on <tooltip-on-truncate @@ -126,15 +126,22 @@ export default { </div> <div> <span class="mr-widget-pipeline-graph"> - <span v-if="hasStages" class="stage-cell"> - <div - v-for="(stage, i) in pipeline.details.stages" - :key="i" - class="stage-container dropdown js-mini-pipeline-graph mr-widget-pipeline-stages" - > - <pipeline-stage :stage="stage" /> - </div> + <span class="stage-cell"> + <linked-pipelines-mini-list v-if="triggeredBy.length" :triggered-by="triggeredBy" /> + <template v-if="hasStages"> + <div + v-for="(stage, i) in pipeline.details.stages" + :key="i" + :class="{ + 'has-downstream': hasDownstream(i), + }" + class="stage-container dropdown js-mini-pipeline-graph mr-widget-pipeline-stages" + > + <pipeline-stage :stage="stage" /> + </div> + </template> </span> + <linked-pipelines-mini-list v-if="triggered.length" :triggered="triggered" /> </span> </div> </div> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/commit_message_dropdown.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/commit_message_dropdown.vue index b3c1c0e329d..b6722de5277 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/commit_message_dropdown.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/commit_message_dropdown.vue @@ -20,7 +20,6 @@ export default { <div> <gl-dropdown right - no-caret text="Use an existing commit message" variant="link" class="mr-commit-dropdown" diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue index ce4207864ea..9b4e80ee3a3 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue @@ -329,7 +329,7 @@ export default { > <ul class="border-top content-list commits-list flex-list"> <commit-edit - v-if="squashBeforeMerge" + v-if="squashBeforeMerge && shouldShowSquashBeforeMerge" v-model="squashCommitMessage" :label="__('Squash commit message')" input-id="squash-message-edit" diff --git a/app/assets/javascripts/vue_merge_request_widget/mixins/mr_widget_pipeline.js b/app/assets/javascripts/vue_merge_request_widget/mixins/mr_widget_pipeline.js new file mode 100644 index 00000000000..96e8bb45e34 --- /dev/null +++ b/app/assets/javascripts/vue_merge_request_widget/mixins/mr_widget_pipeline.js @@ -0,0 +1,15 @@ +export default { + computed: { + triggered() { + return []; + }, + triggeredBy() { + return []; + }, + }, + methods: { + hasDownstream() { + return false; + }, + }, +}; diff --git a/app/assets/javascripts/vue_shared/components/ci_icon.vue b/app/assets/javascripts/vue_shared/components/ci_icon.vue index 2f498c4fa2a..e6f0a1c69cd 100644 --- a/app/assets/javascripts/vue_shared/components/ci_icon.vue +++ b/app/assets/javascripts/vue_shared/components/ci_icon.vue @@ -21,6 +21,7 @@ import Icon from '../../vue_shared/components/icon.vue'; * - Jobs table * - Jobs show view header * - Jobs show view sidebar + * - Linked pipelines */ const validSizes = [8, 12, 16, 18, 24, 32, 48, 72]; diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index d0e33dfc853..aad5150c0b5 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -404,6 +404,7 @@ img.emoji { .flex-grow { flex-grow: 1; } .flex-no-shrink { flex-shrink: 0; } .ws-initial { white-space: initial; } +.ws-normal { white-space: normal; } .overflow-auto { overflow: auto; } .d-flex-center { diff --git a/app/assets/stylesheets/framework/contextual_sidebar.scss b/app/assets/stylesheets/framework/contextual_sidebar.scss index 8b6a7017c47..3238b01c6c0 100644 --- a/app/assets/stylesheets/framework/contextual_sidebar.scss +++ b/app/assets/stylesheets/framework/contextual_sidebar.scss @@ -5,7 +5,7 @@ padding-left: $contextual-sidebar-collapsed-width; } - @include media-breakpoint-up(lg) { + @include media-breakpoint-up(xl) { padding-left: $contextual-sidebar-width; } @@ -15,7 +15,7 @@ } .page-with-icon-sidebar { - @include media-breakpoint-up(sm) { + @include media-breakpoint-up(md) { padding-left: $contextual-sidebar-collapsed-width; } } @@ -71,6 +71,44 @@ } } +@mixin collapse-contextual-sidebar-content { + .context-header { + height: 60px; + width: $contextual-sidebar-collapsed-width; + + a { + padding: 10px 4px; + } + } + + .sidebar-top-level-items > li { + .sidebar-sub-level-items { + &:not(.flyout-list) { + display: none; + } + } + } + + .nav-icon-container { + margin-right: 0; + } + + .toggle-sidebar-button { + padding: 16px; + width: $contextual-sidebar-collapsed-width - 1px; + + .collapse-text, + .icon-angle-double-left { + display: none; + } + + .icon-angle-double-right { + display: block; + margin: 0; + } + } +} + .nav-sidebar { transition: width $sidebar-transition-duration, left $sidebar-transition-duration; position: fixed; @@ -89,7 +127,7 @@ } } - &.sidebar-collapsed-desktop { + @mixin collapse-contextual-sidebar { width: $contextual-sidebar-collapsed-width; .nav-sidebar-inner-scroll { @@ -115,6 +153,10 @@ } } + &.sidebar-collapsed-desktop { + @include collapse-contextual-sidebar; + } + &.sidebar-expanded-mobile { left: 0; } @@ -150,7 +192,7 @@ } } - @include media-breakpoint-down(xs) { + @include media-breakpoint-down(sm) { left: (-$contextual-sidebar-width); } @@ -167,16 +209,19 @@ height: 16px; width: 16px; } + + @media (min-width: map-get($grid-breakpoints, md)) and (max-width: map-get($grid-breakpoints, xl) - 1px) { + &:not(.sidebar-expanded-mobile) { + @include collapse-contextual-sidebar; + @include collapse-contextual-sidebar-content; + } + } } .nav-sidebar-inner-scroll { height: 100%; width: 100%; overflow: auto; - - @include media-breakpoint-up(sm) { - overflow: hidden; - } } .with-performance-bar .nav-sidebar { @@ -346,53 +391,13 @@ } } -.toggle-sidebar-button { - @include media-breakpoint-down(xs) { - display: none; - } -} - .collapse-text { white-space: nowrap; overflow: hidden; } .sidebar-collapsed-desktop { - .context-header { - height: 60px; - width: $contextual-sidebar-collapsed-width; - - a { - padding: 10px 4px; - } - } - - .sidebar-top-level-items > li { - .sidebar-sub-level-items { - &:not(.flyout-list) { - display: none; - } - } - } - - .nav-icon-container { - margin-right: 0; - } - - .toggle-sidebar-button { - padding: 16px; - width: $contextual-sidebar-collapsed-width - 1px; - - .collapse-text, - .icon-angle-double-left { - display: none; - } - - .icon-angle-double-right { - display: block; - margin: 0; - } - } + @include collapse-contextual-sidebar-content; } .fly-out-top-item { @@ -428,16 +433,14 @@ color: $gl-text-color-secondary; } - @include media-breakpoint-down(xs) { + @include media-breakpoint-down(sm) { display: flex; align-items: center; i { font-size: 18px; } - } - @include media-breakpoint-down(xs) { + .breadcrumbs-links { padding-left: $gl-padding; border-left: 1px solid $gl-text-color-quaternary; @@ -445,21 +448,25 @@ } } -@include media-breakpoint-down(xs) { +@include media-breakpoint-down(sm) { .close-nav-button { display: flex; } -} -.mobile-overlay { - display: none; + .toggle-sidebar-button { + display: none; + } - &.mobile-nav-open { - display: block; - position: fixed; - background-color: $black-transparent; - height: 100%; - width: 100%; - z-index: 300; + .mobile-overlay { + display: none; + + &.mobile-nav-open { + display: block; + position: fixed; + background-color: $black-transparent; + height: 100%; + width: 100%; + z-index: 300; + } } } diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss index fda7b6d5467..ba3b0906e28 100644 --- a/app/assets/stylesheets/framework/mixins.scss +++ b/app/assets/stylesheets/framework/mixins.scss @@ -26,16 +26,11 @@ */ @mixin markdown-table { width: auto; - display: inline-block; + display: block; overflow-x: auto; border: 0; border-color: $gl-gray-100; - @supports (width: fit-content) { - display: block; - width: fit-content; - } - tr { th { border-bottom: solid 2px $gl-gray-100; diff --git a/app/assets/stylesheets/framework/tables.scss b/app/assets/stylesheets/framework/tables.scss index 295a5b5ee7a..ba406bac50b 100644 --- a/app/assets/stylesheets/framework/tables.scss +++ b/app/assets/stylesheets/framework/tables.scss @@ -161,4 +161,3 @@ table { border-top: 0; } } - diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index 1639e73a66a..0333b9445c5 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -343,6 +343,7 @@ $regular-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-San $dropdown-width: 300px; $dropdown-min-height: 40px; $dropdown-max-height: 312px; +$dropdown-max-height-lg: 445px; $dropdown-vertical-offset: 4px; $dropdown-empty-row-bg: rgba(#000, 0.04); $dropdown-shadow-color: rgba(#000, 0.1); diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index 0dbbe9e4c25..e50db5310a6 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -53,6 +53,10 @@ background-color: $gray-normal; } + a { + color: $gray-700; + } + svg { vertical-align: middle; top: -1px; diff --git a/app/assets/stylesheets/pages/issuable.scss b/app/assets/stylesheets/pages/issuable.scss index 3796ef47c32..623fa485ba6 100644 --- a/app/assets/stylesheets/pages/issuable.scss +++ b/app/assets/stylesheets/pages/issuable.scss @@ -22,6 +22,7 @@ .detail-page-header, .page-content-header, .commit-box, + .info-well, .commit-ci-menu, .files-changed-inner, .limited-header-width, diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss index acc562f0769..2b6319ddd4f 100644 --- a/app/assets/stylesheets/pages/pipelines.scss +++ b/app/assets/stylesheets/pages/pipelines.scss @@ -341,13 +341,15 @@ &.builds .ci-table tr { height: 71px; } -} -.build-failures { - th { - border-top: 0; + .ci-table { + thead th { + border-top: 0; + } } +} +.build-failures { .build-state { padding: 20px 2px; diff --git a/app/assets/stylesheets/pages/settings.scss b/app/assets/stylesheets/pages/settings.scss index 811cc310a8f..4f9d96da4bd 100644 --- a/app/assets/stylesheets/pages/settings.scss +++ b/app/assets/stylesheets/pages/settings.scss @@ -316,8 +316,4 @@ .push-pull-table { margin-top: 1em; - - .mirror-action-buttons { - padding-right: 0; - } } diff --git a/app/controllers/concerns/continue_params.rb b/app/controllers/concerns/continue_params.rb index f0e6adf4dec..54c0510497f 100644 --- a/app/controllers/concerns/continue_params.rb +++ b/app/controllers/concerns/continue_params.rb @@ -6,7 +6,7 @@ module ContinueParams def continue_params continue_params = params[:continue] - return nil unless continue_params + return unless continue_params continue_params = continue_params.permit(:to, :notice, :notice_now) continue_params[:to] = safe_redirect_path(continue_params[:to]) diff --git a/app/controllers/concerns/issuable_actions.rb b/app/controllers/concerns/issuable_actions.rb index cd3fa641e89..05d88429cfe 100644 --- a/app/controllers/concerns/issuable_actions.rb +++ b/app/controllers/concerns/issuable_actions.rb @@ -8,7 +8,7 @@ module IssuableActions before_action :authorize_destroy_issuable!, only: :destroy before_action :authorize_admin_issuable!, only: :bulk_update before_action only: :show do - push_frontend_feature_flag(:reply_to_individual_notes) + push_frontend_feature_flag(:reply_to_individual_notes, default_enabled: true) end end diff --git a/app/controllers/concerns/milestone_actions.rb b/app/controllers/concerns/milestone_actions.rb index eccbe35577b..c0c0160a827 100644 --- a/app/controllers/concerns/milestone_actions.rb +++ b/app/controllers/concerns/milestone_actions.rb @@ -8,7 +8,7 @@ module MilestoneActions format.html { redirect_to milestone_redirect_path } format.json do render json: tabs_json("shared/milestones/_merge_requests_tab", { - merge_requests: @milestone.sorted_merge_requests, # rubocop:disable Gitlab/ModuleWithInstanceVariables + merge_requests: @milestone.sorted_merge_requests(current_user), # rubocop:disable Gitlab/ModuleWithInstanceVariables show_project_name: true }) end diff --git a/app/controllers/concerns/renders_notes.rb b/app/controllers/concerns/renders_notes.rb index ce36da6b715..18015b1de88 100644 --- a/app/controllers/concerns/renders_notes.rb +++ b/app/controllers/concerns/renders_notes.rb @@ -16,7 +16,7 @@ module RendersNotes private def preload_max_access_for_authors(notes, project) - return nil unless project + return unless project user_ids = notes.map(&:author_id) project.team.max_member_access_for_user_ids(user_ids) diff --git a/app/controllers/google_api/authorizations_controller.rb b/app/controllers/google_api/authorizations_controller.rb index dd9f5af61b3..ed0995e7ffd 100644 --- a/app/controllers/google_api/authorizations_controller.rb +++ b/app/controllers/google_api/authorizations_controller.rb @@ -2,6 +2,10 @@ module GoogleApi class AuthorizationsController < ApplicationController + include Gitlab::Utils::StrongMemoize + + before_action :validate_session_key! + def callback token, expires_at = GoogleApi::CloudPlatform::Client .new(nil, callback_google_api_auth_url) @@ -11,21 +15,27 @@ module GoogleApi session[GoogleApi::CloudPlatform::Client.session_key_for_expires_at] = expires_at.to_s - state_redirect_uri = redirect_uri_from_session_key(params[:state]) - - if state_redirect_uri - redirect_to state_redirect_uri - else - redirect_to root_path - end + redirect_to redirect_uri_from_session end private - def redirect_uri_from_session_key(state) - key = GoogleApi::CloudPlatform::Client - .session_key_for_redirect_uri(params[:state]) - session[key] if key + def validate_session_key! + access_denied! unless redirect_uri_from_session.present? + end + + def redirect_uri_from_session + strong_memoize(:redirect_uri_from_session) do + if params[:state].present? + session[session_key_for_redirect_uri(params[:state])] + else + nil + end + end + end + + def session_key_for_redirect_uri(state) + GoogleApi::CloudPlatform::Client.session_key_for_redirect_uri(state) end end end diff --git a/app/controllers/graphql_controller.rb b/app/controllers/graphql_controller.rb index 3ef03bc9622..e147d32be2e 100644 --- a/app/controllers/graphql_controller.rb +++ b/app/controllers/graphql_controller.rb @@ -3,9 +3,16 @@ class GraphqlController < ApplicationController # Unauthenticated users have access to the API for public data skip_before_action :authenticate_user! - prepend_before_action(only: [:execute]) { authenticate_sessionless_user!(:api) } + + # Allow missing CSRF tokens, this would mean that if a CSRF is invalid or missing, + # the user won't be authenticated but can proceed as an anonymous user. + # + # If a CSRF is valid, the user is authenticated. This makes it easier to play + # around in GraphiQL. + protect_from_forgery with: :null_session, only: :execute before_action :check_graphql_feature_flag! + before_action(only: [:execute]) { authenticate_sessionless_user!(:api) } def execute variables = Gitlab::Graphql::Variables.new(params[:variables]).to_h diff --git a/app/controllers/profiles/active_sessions_controller.rb b/app/controllers/profiles/active_sessions_controller.rb index efe7ede5efa..c473023cacb 100644 --- a/app/controllers/profiles/active_sessions_controller.rb +++ b/app/controllers/profiles/active_sessions_controller.rb @@ -2,15 +2,6 @@ class Profiles::ActiveSessionsController < Profiles::ApplicationController def index - @sessions = ActiveSession.list(current_user) - end - - def destroy - ActiveSession.destroy(current_user, params[:id]) - - respond_to do |format| - format.html { redirect_to profile_active_sessions_url, status: :found } - format.js { head :ok } - end + @sessions = ActiveSession.list(current_user).reject(&:is_impersonated) end end diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index e0677ce3fbc..6504fd6c08a 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -17,7 +17,7 @@ class Projects::ApplicationController < ApplicationController def project return @project if @project - return nil unless params[:project_id] || params[:id] + return unless params[:project_id] || params[:id] path = File.join(params[:namespace_id], params[:project_id] || params[:id]) auth_proc = ->(project) { !project.pending_delete? } diff --git a/app/controllers/projects/autocomplete_sources_controller.rb b/app/controllers/projects/autocomplete_sources_controller.rb index 9c130af8394..0e3f13045ce 100644 --- a/app/controllers/projects/autocomplete_sources_controller.rb +++ b/app/controllers/projects/autocomplete_sources_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Projects::AutocompleteSourcesController < Projects::ApplicationController + before_action :authorize_read_milestone!, only: :milestones + def members render json: ::Projects::ParticipantsService.new(@project, current_user).execute(target) end diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index 77672e7d9fc..0a33856a8d3 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -90,65 +90,21 @@ class Projects::BlobController < Projects::ApplicationController def diff apply_diff_view_cookie! - @blob.load_all_data! - @lines = @blob.present.highlight.lines - - @form = UnfoldForm.new(params.to_unsafe_h) - - @lines = @lines[@form.since - 1..@form.to - 1].map(&:html_safe) - - if @form.bottom? - @match_line = '' - else - lines_length = @lines.length - 1 - line = [@form.since, lines_length].join(',') - @match_line = "@@ -#{line}+#{line} @@" - end + @form = Blobs::UnfoldPresenter.new(blob, params.to_unsafe_h) - # We can keep only 'render_diff_lines' from this conditional when + # keep only json rendering when # https://gitlab.com/gitlab-org/gitlab-ce/issues/44988 is done if rendered_for_merge_request? - render_diff_lines + render json: DiffLineSerializer.new.represent(@form.diff_lines) else + @lines = @form.lines + @match_line = @form.match_line_text render layout: false end end private - # Converts a String array to Gitlab::Diff::Line array - def render_diff_lines - @lines.map! do |line| - # These are marked as context lines but are loaded from blobs. - # We also have context lines loaded from diffs in other places. - diff_line = Gitlab::Diff::Line.new(line, nil, nil, nil, nil) - diff_line.rich_text = line - diff_line - end - - add_match_line - - render json: DiffLineSerializer.new.represent(@lines) - end - - def add_match_line - return unless @form.unfold? - - if @form.bottom? && @form.to < @blob.lines.size - old_pos = @form.to - @form.offset - new_pos = @form.to - elsif @form.since != 1 - old_pos = new_pos = @form.since - end - - # Match line is not needed when it reaches the top limit or bottom limit of the file. - return unless new_pos - - @match_line = Gitlab::Diff::Line.new(@match_line, 'match', nil, old_pos, new_pos) - - @form.bottom? ? @lines.push(@match_line) : @lines.unshift(@match_line) - end - def blob @blob ||= @repository.blob_at(@commit.id, @path) @@ -231,6 +187,8 @@ class Projects::BlobController < Projects::ApplicationController end def validate_diff_params + return if params[:full] + if [:since, :to, :offset].any? { |key| params[key].blank? } head :ok end diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb index b13c0ae3967..939a09d4fd2 100644 --- a/app/controllers/projects/commit_controller.rb +++ b/app/controllers/projects/commit_controller.rb @@ -65,7 +65,11 @@ class Projects::CommitController < Projects::ApplicationController # rubocop: enable CodeReuse/ActiveRecord def merge_requests - @merge_requests = @commit.merge_requests.map do |mr| + @merge_requests = MergeRequestsFinder.new( + current_user, + project_id: @project.id, + commit_sha: @commit.sha + ).execute.map do |mr| { iid: mr.iid, path: merge_request_path(mr), title: mr.title } end diff --git a/app/controllers/projects/group_links_controller.rb b/app/controllers/projects/group_links_controller.rb index 7c713c19762..bc942ba9288 100644 --- a/app/controllers/projects/group_links_controller.rb +++ b/app/controllers/projects/group_links_controller.rb @@ -13,9 +13,10 @@ class Projects::GroupLinksController < Projects::ApplicationController group = Group.find(params[:link_group_id]) if params[:link_group_id].present? if group - return render_404 unless can?(current_user, :read_group, group) + result = Projects::GroupLinks::CreateService.new(project, current_user, group_link_create_params).execute(group) + return render_404 if result[:http_status] == 404 - Projects::GroupLinks::CreateService.new(project, current_user, group_link_create_params).execute(group) + flash[:alert] = result[:message] if result[:http_status] == 409 else flash[:alert] = 'Please select a group.' end diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb index 518d41bd3fb..456d2c34768 100644 --- a/app/controllers/projects/merge_requests/diffs_controller.rb +++ b/app/controllers/projects/merge_requests/diffs_controller.rb @@ -46,8 +46,8 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic # rubocop: disable CodeReuse/ActiveRecord def commit - return nil unless commit_id = params[:commit_id].presence - return nil unless @merge_request.all_commits.exists?(sha: commit_id) + return unless commit_id = params[:commit_id].presence + return unless @merge_request.all_commits.exists?(sha: commit_id) @commit ||= @project.commit(commit_id) end diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 46a44841c31..2903f7d705b 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -18,6 +18,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo before_action only: [:show] do push_frontend_feature_flag(:diff_tree_filtering, default_enabled: true) + push_frontend_feature_flag(:expand_diff_full_file) end def index diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 519e7439205..568c6e2a852 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -28,13 +28,13 @@ class UploadsController < ApplicationController end def find_model - return nil unless params[:id] + return unless params[:id] upload_model_class.find(params[:id]) end def authorize_access! - return nil unless model + return unless model authorized = case model @@ -54,7 +54,7 @@ class UploadsController < ApplicationController end def authorize_create_access! - return nil unless model + return unless model # for now we support only personal snippets comments authorized = can?(current_user, :comment_personal_snippet, model) diff --git a/app/finders/merge_requests_finder.rb b/app/finders/merge_requests_finder.rb index b645011a3c5..93bee3f1488 100644 --- a/app/finders/merge_requests_finder.rb +++ b/app/finders/merge_requests_finder.rb @@ -37,13 +37,20 @@ class MergeRequestsFinder < IssuableFinder end def filter_items(_items) - items = by_source_branch(super) + items = by_commit(super) + items = by_source_branch(items) items = by_wip(items) by_target_branch(items) end private + def by_commit(items) + return items unless params[:commit_sha].presence + + items.by_commit_sha(params[:commit_sha]) + end + def source_branch @source_branch ||= params[:source_branch].presence end diff --git a/app/finders/snippets_finder.rb b/app/finders/snippets_finder.rb index d3774746cb8..bf29f15642d 100644 --- a/app/finders/snippets_finder.rb +++ b/app/finders/snippets_finder.rb @@ -69,6 +69,8 @@ class SnippetsFinder < UnionFinder base.with_optional_visibility(visibility_from_scope).fresh end + private + # Produces a query that retrieves snippets from multiple projects. # # The resulting query will, depending on the user's permissions, include the diff --git a/app/graphql/resolvers/metadata_resolver.rb b/app/graphql/resolvers/metadata_resolver.rb new file mode 100644 index 00000000000..3a79e6434fb --- /dev/null +++ b/app/graphql/resolvers/metadata_resolver.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Resolvers + class MetadataResolver < BaseResolver + type Types::MetadataType, null: false + + def resolve(**args) + { version: Gitlab::VERSION, revision: Gitlab.revision } + end + end +end diff --git a/app/graphql/types/metadata_type.rb b/app/graphql/types/metadata_type.rb new file mode 100644 index 00000000000..2d8bad0614b --- /dev/null +++ b/app/graphql/types/metadata_type.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module Types + class MetadataType < ::Types::BaseObject + graphql_name 'Metadata' + + field :version, GraphQL::STRING_TYPE, null: false + field :revision, GraphQL::STRING_TYPE, null: false + end +end diff --git a/app/graphql/types/project_type.rb b/app/graphql/types/project_type.rb index 3ef0cc5020c..b96c2f3afb2 100644 --- a/app/graphql/types/project_type.rb +++ b/app/graphql/types/project_type.rb @@ -16,7 +16,6 @@ module Types field :description, GraphQL::STRING_TYPE, null: true - field :default_branch, GraphQL::STRING_TYPE, null: true field :tag_list, GraphQL::STRING_TYPE, null: true field :ssh_url_to_repo, GraphQL::STRING_TYPE, null: true @@ -59,7 +58,6 @@ module Types end field :import_status, GraphQL::STRING_TYPE, null: true - field :ci_config_path, GraphQL::STRING_TYPE, null: true field :only_allow_merge_if_pipeline_succeeds, GraphQL::BOOLEAN_TYPE, null: true field :request_access_enabled, GraphQL::BOOLEAN_TYPE, null: true diff --git a/app/graphql/types/query_type.rb b/app/graphql/types/query_type.rb index 954bcc0a5a3..472fe5d6ec2 100644 --- a/app/graphql/types/query_type.rb +++ b/app/graphql/types/query_type.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Types - class QueryType < BaseObject + class QueryType < ::Types::BaseObject graphql_name 'Query' field :project, Types::ProjectType, @@ -10,6 +10,14 @@ module Types description: "Find a project", authorize: :read_project + field :metadata, Types::MetadataType, + null: true, + resolver: Resolvers::MetadataResolver, + description: 'Metadata about GitLab' do |*args| + + authorize :read_instance_metadata + end + field :echo, GraphQL::STRING_TYPE, null: false, function: Functions::Echo.new end end diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb index 923a06a0512..355b91a8661 100644 --- a/app/helpers/ci_status_helper.rb +++ b/app/helpers/ci_status_helper.rb @@ -100,17 +100,6 @@ module CiStatusHelper "pipeline-status/#{pipeline_status.sha}-#{pipeline_status.status}" end - def render_project_pipeline_status(pipeline_status, tooltip_placement: 'left') - project = pipeline_status.project - path = pipelines_project_commit_path(project, pipeline_status.sha, ref: pipeline_status.ref) - - render_status_with_link( - 'commit', - pipeline_status.status, - path, - tooltip_placement: tooltip_placement) - end - def render_commit_status(commit, ref: nil, tooltip_placement: 'left') project = commit.project path = pipelines_project_commit_path(project, commit, ref: ref) @@ -123,12 +112,6 @@ module CiStatusHelper icon_size: 24) end - def render_pipeline_status(pipeline, tooltip_placement: 'left') - project = pipeline.project - path = project_pipeline_path(project, pipeline) - render_status_with_link('pipeline', pipeline.status, path, tooltip_placement: tooltip_placement) - end - def render_status_with_link(type, status, path = nil, tooltip_placement: 'left', cssclass: '', container: 'body', icon_size: 16) klass = "ci-status-link ci-status-icon-#{status.dasherize} #{cssclass}" title = "#{type.titleize}: #{ci_label_for_status(status)}" diff --git a/app/helpers/markup_helper.rb b/app/helpers/markup_helper.rb index 66f4b7b3f30..d83c69603a9 100644 --- a/app/helpers/markup_helper.rb +++ b/app/helpers/markup_helper.rb @@ -74,7 +74,7 @@ module MarkupHelper # the tag contents are truncated without removing the closing tag. def first_line_in_markdown(object, attribute, max_chars = nil, options = {}) md = markdown_field(object, attribute, options) - return nil unless md.present? + return unless md.present? tags = %w(a gl-emoji b pre code p span) tags << 'img' if options[:allow_images] diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index 23d7aa427bb..991ca42c445 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -29,7 +29,7 @@ module MergeRequestsHelper def ci_build_details_path(merge_request) build_url = merge_request.source_project.ci_service.build_page(merge_request.diff_head_sha, merge_request.source_branch) - return nil unless build_url + return unless build_url parsed_url = URI.parse(build_url) @@ -92,7 +92,7 @@ module MergeRequestsHelper end def version_index(merge_request_diff) - return nil if @merge_request_diffs.empty? + return if @merge_request_diffs.empty? @merge_request_diffs.size - @merge_request_diffs.index(merge_request_diff) end @@ -149,7 +149,7 @@ module MergeRequestsHelper def merge_request_source_project_for_project(project = @project) unless can?(current_user, :create_merge_request_in, project) - return nil + return end if can?(current_user, :create_merge_request_from, project) diff --git a/app/helpers/notes_helper.rb b/app/helpers/notes_helper.rb index aaf38cbfe70..a50137bea3d 100644 --- a/app/helpers/notes_helper.rb +++ b/app/helpers/notes_helper.rb @@ -122,7 +122,7 @@ module NotesHelper end def new_form_url - return nil unless @snippet.is_a?(PersonalSnippet) + return unless @snippet.is_a?(PersonalSnippet) snippet_notes_path(@snippet) end diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb index eed529f93db..766508b6609 100644 --- a/app/helpers/preferences_helper.rb +++ b/app/helpers/preferences_helper.rb @@ -46,7 +46,8 @@ module PreferencesHelper def first_day_of_week_choices [ [_('Sunday'), 0], - [_('Monday'), 1] + [_('Monday'), 1], + [_('Saturday'), 6] ] end diff --git a/app/mailers/emails/issues.rb b/app/mailers/emails/issues.rb index 654ae211310..d2e334fb856 100644 --- a/app/mailers/emails/issues.rb +++ b/app/mailers/emails/issues.rb @@ -74,6 +74,7 @@ module Emails @new_issue = new_issue @new_project = new_issue.project + @can_access_project = recipient.can?(:read_project, @new_project) mail_answer_thread(issue, issue_thread_options(updated_by_user.id, recipient.id, reason)) end diff --git a/app/mailers/emails/pipelines.rb b/app/mailers/emails/pipelines.rb index 31e183640ad..fb57c0da34d 100644 --- a/app/mailers/emails/pipelines.rb +++ b/app/mailers/emails/pipelines.rb @@ -15,7 +15,7 @@ module Emails def pipeline_mail(pipeline, recipients, status) @project = pipeline.project @pipeline = pipeline - @merge_request = pipeline.merge_requests.first + @merge_request = pipeline.merge_requests_as_head_pipeline.first add_headers # We use bcc here because we don't want to generate this emails for a diff --git a/app/models/active_session.rb b/app/models/active_session.rb index 0d9c6a4a1f0..1e01f1d17e6 100644 --- a/app/models/active_session.rb +++ b/app/models/active_session.rb @@ -5,7 +5,8 @@ class ActiveSession attr_accessor :created_at, :updated_at, :session_id, :ip_address, - :browser, :os, :device_name, :device_type + :browser, :os, :device_name, :device_type, + :is_impersonated def current?(session) return false if session_id.nil? || session.id.nil? @@ -31,7 +32,8 @@ class ActiveSession device_type: client.device_type, created_at: user.current_sign_in_at || timestamp, updated_at: timestamp, - session_id: session_id + session_id: session_id, + is_impersonated: request.session[:impersonator_id].present? ) redis.pipelined do diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index daadf9427ba..c5035797621 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -7,7 +7,7 @@ class ApplicationSetting < ActiveRecord::Base include IgnorableColumn include ChronicDurationAttribute - add_authentication_token_field :runners_registration_token, encrypted: true, fallback: true + add_authentication_token_field :runners_registration_token, encrypted: -> { Feature.enabled?(:application_settings_tokens_optional_encryption) ? :optional : :required } add_authentication_token_field :health_check_access_token DOMAIN_LIST_SEPARATOR = %r{\s*[,;]\s* # comma or semicolon, optionally surrounded by whitespace diff --git a/app/models/ci/bridge.rb b/app/models/ci/bridge.rb index 5450d40ea95..0d8d7d95791 100644 --- a/app/models/ci/bridge.rb +++ b/app/models/ci/bridge.rb @@ -3,14 +3,18 @@ module Ci class Bridge < CommitStatus include Ci::Processable + include Ci::Contextable include Importable include AfterCommitQueue + include HasRef include Gitlab::Utils::StrongMemoize belongs_to :project belongs_to :trigger_request validates :ref, presence: true + delegate :merge_request_event?, to: :pipeline + def self.retry(bridge, current_user) raise NotImplementedError end @@ -37,11 +41,11 @@ module Ci false end - def expanded_environment_name + def runnable? + false end - def predefined_variables - raise NotImplementedError + def expanded_environment_name end def execute_hooks diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 65962fba14d..a64c6051f95 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -5,6 +5,7 @@ module Ci prepend ArtifactMigratable include Ci::Processable include Ci::Metadatable + include Ci::Contextable include TokenAuthenticatable include AfterCommitQueue include ObjectStorage::BackgroundMove @@ -137,7 +138,7 @@ module Ci acts_as_taggable - add_authentication_token_field :token, encrypted: true, fallback: true + add_authentication_token_field :token, encrypted: :optional before_save :update_artifacts_size, if: :artifacts_file_changed? before_save :ensure_token @@ -289,6 +290,10 @@ module Ci self.name == 'pages' end + def runnable? + true + end + def archived? return true if degenerated? @@ -398,46 +403,6 @@ module Ci options&.dig(:environment, :on_stop) end - # A slugified version of the build ref, suitable for inclusion in URLs and - # domain names. Rules: - # - # * Lowercased - # * Anything not matching [a-z0-9-] is replaced with a - - # * Maximum length is 63 bytes - # * First/Last Character is not a hyphen - def ref_slug - Gitlab::Utils.slugify(ref.to_s) - end - - ## - # Variables in the environment name scope. - # - def scoped_variables(environment: expanded_environment_name) - Gitlab::Ci::Variables::Collection.new.tap do |variables| - variables.concat(predefined_variables) - variables.concat(project.predefined_variables) - variables.concat(pipeline.predefined_variables) - variables.concat(runner.predefined_variables) if runner - variables.concat(project.deployment_variables(environment: environment)) if environment - variables.concat(yaml_variables) - variables.concat(user_variables) - variables.concat(secret_group_variables) - variables.concat(secret_project_variables(environment: environment)) - variables.concat(trigger_request.user_variables) if trigger_request - variables.concat(pipeline.variables) - variables.concat(pipeline.pipeline_schedule.job_variables) if pipeline.pipeline_schedule - end - end - - ## - # Variables that do not depend on the environment name. - # - def simple_variables - strong_memoize(:simple_variables) do - scoped_variables(environment: nil).to_runner_variables - end - end - ## # All variables, including persisted environment variables. # @@ -451,12 +416,46 @@ module Ci end end - ## - # Regular Ruby hash of scoped variables, without duplicates that are - # possible to be present in an array of hashes returned from `variables`. - # - def scoped_variables_hash - scoped_variables.to_hash + CI_REGISTRY_USER = 'gitlab-ci-token'.freeze + + def persisted_variables + Gitlab::Ci::Variables::Collection.new.tap do |variables| + break variables unless persisted? + + variables + .concat(pipeline.persisted_variables) + .append(key: 'CI_JOB_ID', value: id.to_s) + .append(key: 'CI_JOB_URL', value: Gitlab::Routing.url_helpers.project_job_url(project, self)) + .append(key: 'CI_JOB_TOKEN', value: token.to_s, public: false) + .append(key: 'CI_BUILD_ID', value: id.to_s) + .append(key: 'CI_BUILD_TOKEN', value: token.to_s, public: false) + .append(key: 'CI_REGISTRY_USER', value: CI_REGISTRY_USER) + .append(key: 'CI_REGISTRY_PASSWORD', value: token.to_s, public: false) + .append(key: 'CI_REPOSITORY_URL', value: repo_url.to_s, public: false) + .concat(deploy_token_variables) + end + end + + def persisted_environment_variables + Gitlab::Ci::Variables::Collection.new.tap do |variables| + break variables unless persisted? && persisted_environment.present? + + variables.concat(persisted_environment.predefined_variables) + + # Here we're passing unexpanded environment_url for runner to expand, + # and we need to make sure that CI_ENVIRONMENT_NAME and + # CI_ENVIRONMENT_SLUG so on are available for the URL be expanded. + variables.append(key: 'CI_ENVIRONMENT_URL', value: environment_url) if environment_url + end + end + + def deploy_token_variables + Gitlab::Ci::Variables::Collection.new.tap do |variables| + break variables unless gitlab_deploy_token + + variables.append(key: 'CI_DEPLOY_USER', value: gitlab_deploy_token.username) + variables.append(key: 'CI_DEPLOY_PASSWORD', value: gitlab_deploy_token.token, public: false) + end end def features @@ -634,27 +633,6 @@ module Ci super || project.try(:build_coverage_regex) end - def user_variables - Gitlab::Ci::Variables::Collection.new.tap do |variables| - break variables if user.blank? - - variables.append(key: 'GITLAB_USER_ID', value: user.id.to_s) - variables.append(key: 'GITLAB_USER_EMAIL', value: user.email) - variables.append(key: 'GITLAB_USER_LOGIN', value: user.username) - variables.append(key: 'GITLAB_USER_NAME', value: user.name) - end - end - - def secret_group_variables - return [] unless project.group - - project.group.ci_variables_for(git_ref, project) - end - - def secret_project_variables(environment: persisted_environment) - project.ci_variables_for(ref: git_ref, environment: environment) - end - def steps [Gitlab::Ci::Build::Step.from_commands(self), Gitlab::Ci::Build::Step.from_after_script(self)].compact @@ -757,7 +735,7 @@ module Ci # Virtual deployment status depending on the environment status. def deployment_status - return nil unless starts_environment? + return unless starts_environment? if success? return successful_deployment_status @@ -814,89 +792,6 @@ module Ci @unscoped_project ||= Project.unscoped.find_by(id: project_id) end - CI_REGISTRY_USER = 'gitlab-ci-token'.freeze - - def persisted_variables - Gitlab::Ci::Variables::Collection.new.tap do |variables| - break variables unless persisted? - - variables - .concat(pipeline.persisted_variables) - .append(key: 'CI_JOB_ID', value: id.to_s) - .append(key: 'CI_JOB_URL', value: Gitlab::Routing.url_helpers.project_job_url(project, self)) - .append(key: 'CI_JOB_TOKEN', value: token.to_s, public: false) - .append(key: 'CI_BUILD_ID', value: id.to_s) - .append(key: 'CI_BUILD_TOKEN', value: token.to_s, public: false) - .append(key: 'CI_REGISTRY_USER', value: CI_REGISTRY_USER) - .append(key: 'CI_REGISTRY_PASSWORD', value: token.to_s, public: false) - .append(key: 'CI_REPOSITORY_URL', value: repo_url.to_s, public: false) - .concat(deploy_token_variables) - end - end - - def predefined_variables # rubocop:disable Metrics/AbcSize - Gitlab::Ci::Variables::Collection.new.tap do |variables| - variables.append(key: 'CI', value: 'true') - variables.append(key: 'GITLAB_CI', value: 'true') - variables.append(key: 'GITLAB_FEATURES', value: project.licensed_features.join(',')) - variables.append(key: 'CI_SERVER_NAME', value: 'GitLab') - variables.append(key: 'CI_SERVER_VERSION', value: Gitlab::VERSION) - variables.append(key: 'CI_SERVER_VERSION_MAJOR', value: Gitlab.version_info.major.to_s) - variables.append(key: 'CI_SERVER_VERSION_MINOR', value: Gitlab.version_info.minor.to_s) - variables.append(key: 'CI_SERVER_VERSION_PATCH', value: Gitlab.version_info.patch.to_s) - variables.append(key: 'CI_SERVER_REVISION', value: Gitlab.revision) - variables.append(key: 'CI_JOB_NAME', value: name) - variables.append(key: 'CI_JOB_STAGE', value: stage) - variables.append(key: 'CI_COMMIT_SHA', value: sha) - variables.append(key: 'CI_COMMIT_SHORT_SHA', value: short_sha) - variables.append(key: 'CI_COMMIT_BEFORE_SHA', value: before_sha) - variables.append(key: 'CI_COMMIT_REF_NAME', value: ref) - variables.append(key: 'CI_COMMIT_REF_SLUG', value: ref_slug) - variables.append(key: "CI_COMMIT_TAG", value: ref) if tag? - variables.append(key: "CI_PIPELINE_TRIGGERED", value: 'true') if trigger_request - variables.append(key: "CI_JOB_MANUAL", value: 'true') if action? - variables.append(key: "CI_NODE_INDEX", value: self.options[:instance].to_s) if self.options&.include?(:instance) - variables.append(key: "CI_NODE_TOTAL", value: (self.options&.dig(:parallel) || 1).to_s) - variables.concat(legacy_variables) - end - end - - def legacy_variables - Gitlab::Ci::Variables::Collection.new.tap do |variables| - variables.append(key: 'CI_BUILD_REF', value: sha) - variables.append(key: 'CI_BUILD_BEFORE_SHA', value: before_sha) - variables.append(key: 'CI_BUILD_REF_NAME', value: ref) - variables.append(key: 'CI_BUILD_REF_SLUG', value: ref_slug) - variables.append(key: 'CI_BUILD_NAME', value: name) - variables.append(key: 'CI_BUILD_STAGE', value: stage) - variables.append(key: "CI_BUILD_TAG", value: ref) if tag? - variables.append(key: "CI_BUILD_TRIGGERED", value: 'true') if trigger_request - variables.append(key: "CI_BUILD_MANUAL", value: 'true') if action? - end - end - - def persisted_environment_variables - Gitlab::Ci::Variables::Collection.new.tap do |variables| - break variables unless persisted? && persisted_environment.present? - - variables.concat(persisted_environment.predefined_variables) - - # Here we're passing unexpanded environment_url for runner to expand, - # and we need to make sure that CI_ENVIRONMENT_NAME and - # CI_ENVIRONMENT_SLUG so on are available for the URL be expanded. - variables.append(key: 'CI_ENVIRONMENT_URL', value: environment_url) if environment_url - end - end - - def deploy_token_variables - Gitlab::Ci::Variables::Collection.new.tap do |variables| - break variables unless gitlab_deploy_token - - variables.append(key: 'CI_DEPLOY_USER', value: gitlab_deploy_token.username) - variables.append(key: 'CI_DEPLOY_PASSWORD', value: gitlab_deploy_token.token, public: false) - end - end - def environment_url options&.dig(:environment, :url) || persisted_environment&.external_url end diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index 317f965da1c..ca9725f7a04 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -39,7 +39,7 @@ module Ci # Merge requests for which the current pipeline is running against # the merge request's latest commit. - has_many :merge_requests, foreign_key: "head_pipeline_id" + has_many :merge_requests_as_head_pipeline, foreign_key: "head_pipeline_id", class_name: 'MergeRequest' has_many :pending_builds, -> { pending }, foreign_key: :commit_id, class_name: 'Ci::Build' has_many :retryable_builds, -> { latest.failed_or_canceled.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Build' diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index d82e11bbb89..ce26ee168ef 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -10,7 +10,7 @@ module Ci include FromUnion include TokenAuthenticatable - add_authentication_token_field :token, encrypted: true, migrating: true + add_authentication_token_field :token, encrypted: -> { Feature.enabled?(:ci_runners_tokens_optional_encryption) ? :optional : :required } enum access_level: { not_protected: 0, diff --git a/app/models/clusters/platforms/kubernetes.rb b/app/models/clusters/platforms/kubernetes.rb index 46d0898014e..814fc591408 100644 --- a/app/models/clusters/platforms/kubernetes.rb +++ b/app/models/clusters/platforms/kubernetes.rb @@ -41,7 +41,7 @@ module Clusters validate :no_namespace, unless: :allow_user_defined_namespace? # We expect to be `active?` only when enabled and cluster is created (the api_url is assigned) - validates :api_url, url: true, presence: true + validates :api_url, public_url: true, presence: true validates :token, presence: true validates :ca_cert, certificate: true, allow_blank: true, if: :ca_cert_changed? diff --git a/app/models/commit_range.rb b/app/models/commit_range.rb index 094747ee48d..920b1d092dd 100644 --- a/app/models/commit_range.rb +++ b/app/models/commit_range.rb @@ -134,25 +134,25 @@ class CommitRange end def sha_from - return nil unless @commit_from + return unless @commit_from @commit_from.id end def sha_to - return nil unless @commit_to + return unless @commit_to @commit_to.id end def sha_start - return nil unless sha_from + return unless sha_from exclude_start? ? sha_from + '^' : sha_from end def commit_start - return nil unless sha_start + return unless sha_start if exclude_start? @commit_start ||= project.commit(sha_start) diff --git a/app/models/concerns/blob_language_from_git_attributes.rb b/app/models/concerns/blob_language_from_git_attributes.rb index 70213d22147..56e1276a220 100644 --- a/app/models/concerns/blob_language_from_git_attributes.rb +++ b/app/models/concerns/blob_language_from_git_attributes.rb @@ -5,7 +5,7 @@ module BlobLanguageFromGitAttributes extend ActiveSupport::Concern def language_from_gitattributes - return nil unless project + return unless project repository = project.repository repository.gitattribute(path, 'gitlab-language') diff --git a/app/models/concerns/ci/contextable.rb b/app/models/concerns/ci/contextable.rb new file mode 100644 index 00000000000..4986a42dbd2 --- /dev/null +++ b/app/models/concerns/ci/contextable.rb @@ -0,0 +1,108 @@ +# frozen_string_literal: true + +module Ci + ## + # This module implements methods that provide context in form of + # essential CI/CD variables that can be used by a build / bridge job. + # + module Contextable + ## + # Variables in the environment name scope. + # + def scoped_variables(environment: expanded_environment_name) + Gitlab::Ci::Variables::Collection.new.tap do |variables| + variables.concat(predefined_variables) + variables.concat(project.predefined_variables) + variables.concat(pipeline.predefined_variables) + variables.concat(runner.predefined_variables) if runnable? && runner + variables.concat(project.deployment_variables(environment: environment)) if environment + variables.concat(yaml_variables) + variables.concat(user_variables) + variables.concat(secret_group_variables) + variables.concat(secret_project_variables(environment: environment)) + variables.concat(trigger_request.user_variables) if trigger_request + variables.concat(pipeline.variables) + variables.concat(pipeline.pipeline_schedule.job_variables) if pipeline.pipeline_schedule + end + end + + ## + # Regular Ruby hash of scoped variables, without duplicates that are + # possible to be present in an array of hashes returned from `variables`. + # + def scoped_variables_hash + scoped_variables.to_hash + end + + ## + # Variables that do not depend on the environment name. + # + def simple_variables + strong_memoize(:simple_variables) do + scoped_variables(environment: nil).to_runner_variables + end + end + + def user_variables + Gitlab::Ci::Variables::Collection.new.tap do |variables| + break variables if user.blank? + + variables.append(key: 'GITLAB_USER_ID', value: user.id.to_s) + variables.append(key: 'GITLAB_USER_EMAIL', value: user.email) + variables.append(key: 'GITLAB_USER_LOGIN', value: user.username) + variables.append(key: 'GITLAB_USER_NAME', value: user.name) + end + end + + def predefined_variables # rubocop:disable Metrics/AbcSize + Gitlab::Ci::Variables::Collection.new.tap do |variables| + variables.append(key: 'CI', value: 'true') + variables.append(key: 'GITLAB_CI', value: 'true') + variables.append(key: 'GITLAB_FEATURES', value: project.licensed_features.join(',')) + variables.append(key: 'CI_SERVER_NAME', value: 'GitLab') + variables.append(key: 'CI_SERVER_VERSION', value: Gitlab::VERSION) + variables.append(key: 'CI_SERVER_VERSION_MAJOR', value: Gitlab.version_info.major.to_s) + variables.append(key: 'CI_SERVER_VERSION_MINOR', value: Gitlab.version_info.minor.to_s) + variables.append(key: 'CI_SERVER_VERSION_PATCH', value: Gitlab.version_info.patch.to_s) + variables.append(key: 'CI_SERVER_REVISION', value: Gitlab.revision) + variables.append(key: 'CI_JOB_NAME', value: name) + variables.append(key: 'CI_JOB_STAGE', value: stage) + variables.append(key: 'CI_COMMIT_SHA', value: sha) + variables.append(key: 'CI_COMMIT_SHORT_SHA', value: short_sha) + variables.append(key: 'CI_COMMIT_BEFORE_SHA', value: before_sha) + variables.append(key: 'CI_COMMIT_REF_NAME', value: ref) + variables.append(key: 'CI_COMMIT_REF_SLUG', value: ref_slug) + variables.append(key: "CI_COMMIT_TAG", value: ref) if tag? + variables.append(key: "CI_PIPELINE_TRIGGERED", value: 'true') if trigger_request + variables.append(key: "CI_JOB_MANUAL", value: 'true') if action? + variables.append(key: "CI_NODE_INDEX", value: self.options[:instance].to_s) if self.options&.include?(:instance) + variables.append(key: "CI_NODE_TOTAL", value: (self.options&.dig(:parallel) || 1).to_s) + variables.concat(legacy_variables) + end + end + + def legacy_variables + Gitlab::Ci::Variables::Collection.new.tap do |variables| + variables.append(key: 'CI_BUILD_REF', value: sha) + variables.append(key: 'CI_BUILD_BEFORE_SHA', value: before_sha) + variables.append(key: 'CI_BUILD_REF_NAME', value: ref) + variables.append(key: 'CI_BUILD_REF_SLUG', value: ref_slug) + variables.append(key: 'CI_BUILD_NAME', value: name) + variables.append(key: 'CI_BUILD_STAGE', value: stage) + variables.append(key: "CI_BUILD_TAG", value: ref) if tag? + variables.append(key: "CI_BUILD_TRIGGERED", value: 'true') if trigger_request + variables.append(key: "CI_BUILD_MANUAL", value: 'true') if action? + end + end + + def secret_group_variables + return [] unless project.group + + project.group.ci_variables_for(git_ref, project) + end + + def secret_project_variables(environment: persisted_environment) + project.ci_variables_for(ref: git_ref, environment: environment) + end + end +end diff --git a/app/models/concerns/ci/processable.rb b/app/models/concerns/ci/processable.rb index 1c78b1413a8..268fa8ec692 100644 --- a/app/models/concerns/ci/processable.rb +++ b/app/models/concerns/ci/processable.rb @@ -23,5 +23,9 @@ module Ci def expanded_environment_name raise NotImplementedError end + + def scoped_variables_hash + raise NotImplementedError + end end end diff --git a/app/models/concerns/feature_gate.rb b/app/models/concerns/feature_gate.rb index 3f84de54ad5..bb095f113e2 100644 --- a/app/models/concerns/feature_gate.rb +++ b/app/models/concerns/feature_gate.rb @@ -2,7 +2,7 @@ module FeatureGate def flipper_id - return nil if new_record? + return if new_record? "#{self.class.name}:#{id}" end diff --git a/app/models/concerns/has_ref.rb b/app/models/concerns/has_ref.rb index e0a48a930cb..413cd36dcaa 100644 --- a/app/models/concerns/has_ref.rb +++ b/app/models/concerns/has_ref.rb @@ -14,4 +14,15 @@ module HasRef Gitlab::Git::TAG_REF_PREFIX + ref.to_s end end + + # A slugified version of the build ref, suitable for inclusion in URLs and + # domain names. Rules: + # + # * Lowercased + # * Anything not matching [a-z0-9-] is replaced with a - + # * Maximum length is 63 bytes + # * First/Last Character is not a hyphen + def ref_slug + Gitlab::Utils.slugify(ref.to_s) + end end diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 670103bc3f3..c7ad182ab82 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -75,6 +75,7 @@ module Issuable validates :author, presence: true validates :title, presence: true, length: { maximum: 255 } + validate :milestone_is_valid scope :authored, ->(user) { where(author_id: user) } scope :recent, -> { reorder(id: :desc) } @@ -118,6 +119,16 @@ module Issuable def has_multiple_assignees? assignees.count > 1 end + + def milestone_available? + project_id == milestone&.project_id || project.ancestors_upto.compact.include?(milestone&.group) + end + + private + + def milestone_is_valid + errors.add(:milestone_id, message: "is invalid") if milestone_id.present? && !milestone_available? + end end class_methods do diff --git a/app/models/concerns/milestoneish.rb b/app/models/concerns/milestoneish.rb index 055ffe04646..e65bbb8ca07 100644 --- a/app/models/concerns/milestoneish.rb +++ b/app/models/concerns/milestoneish.rb @@ -46,12 +46,31 @@ module Milestoneish end end + def issue_participants_visible_by_user(user) + User.joins(:issue_assignees) + .where('issue_assignees.issue_id' => issues_visible_to_user(user).select(:id)) + .distinct + end + + def issue_labels_visible_by_user(user) + Label.joins(:label_links) + .where('label_links.target_id' => issues_visible_to_user(user).select(:id), 'label_links.target_type' => 'Issue') + .distinct + end + def sorted_issues(user) issues_visible_to_user(user).preload_associations.sort_by_attribute('label_priority') end - def sorted_merge_requests - merge_requests.sort_by_attribute('label_priority') + def sorted_merge_requests(user) + merge_requests_visible_to_user(user).sort_by_attribute('label_priority') + end + + def merge_requests_visible_to_user(user) + memoize_per_user(user, :merge_requests_visible_to_user) do + MergeRequestsFinder.new(user, issues_finder_params) + .execute.where(milestone_id: milestoneish_id) + end end def upcoming? diff --git a/app/models/concerns/mirror_authentication.rb b/app/models/concerns/mirror_authentication.rb index e3e1a0441f8..948094221e5 100644 --- a/app/models/concerns/mirror_authentication.rb +++ b/app/models/concerns/mirror_authentication.rb @@ -79,7 +79,7 @@ module MirrorAuthentication end def ssh_public_key - return nil if ssh_private_key.blank? + return if ssh_private_key.blank? comment = "git@#{::Gitlab.config.gitlab.host}" ::SSHKey.new(ssh_private_key, comment: comment).ssh_public_key diff --git a/app/models/concerns/reactive_caching.rb b/app/models/concerns/reactive_caching.rb index de77ca3e963..d2ead7130e5 100644 --- a/app/models/concerns/reactive_caching.rb +++ b/app/models/concerns/reactive_caching.rb @@ -69,7 +69,7 @@ module ReactiveCaching def with_reactive_cache(*args, &blk) unless within_reactive_cache_lifetime?(*args) refresh_reactive_cache!(*args) - return nil + return end keep_alive_reactive_cache!(*args) diff --git a/app/models/concerns/token_authenticatable_strategies/base.rb b/app/models/concerns/token_authenticatable_strategies/base.rb index 01fb194281a..df14e6e4754 100644 --- a/app/models/concerns/token_authenticatable_strategies/base.rb +++ b/app/models/concerns/token_authenticatable_strategies/base.rb @@ -39,22 +39,6 @@ module TokenAuthenticatableStrategies instance.save! if Gitlab::Database.read_write? end - def fallback? - unless options[:fallback].in?([true, false, nil]) - raise ArgumentError, 'fallback: needs to be a boolean value!' - end - - options[:fallback] == true - end - - def migrating? - unless options[:migrating].in?([true, false, nil]) - raise ArgumentError, 'migrating: needs to be a boolean value!' - end - - options[:migrating] == true - end - def self.fabricate(model, field, options) if options[:digest] && options[:encrypted] raise ArgumentError, 'Incompatible options set!' diff --git a/app/models/concerns/token_authenticatable_strategies/encrypted.rb b/app/models/concerns/token_authenticatable_strategies/encrypted.rb index 152491aa6e9..2c7fa2c5b3c 100644 --- a/app/models/concerns/token_authenticatable_strategies/encrypted.rb +++ b/app/models/concerns/token_authenticatable_strategies/encrypted.rb @@ -2,28 +2,18 @@ module TokenAuthenticatableStrategies class Encrypted < Base - def initialize(*) - super - - if migrating? && fallback? - raise ArgumentError, '`fallback` and `migrating` options are not compatible!' - end - end - def find_token_authenticatable(token, unscoped = false) return if token.blank? - if fully_encrypted? - return find_by_encrypted_token(token, unscoped) - end - - if fallback? + if required? + find_by_encrypted_token(token, unscoped) + elsif optional? find_by_encrypted_token(token, unscoped) || find_by_plaintext_token(token, unscoped) elsif migrating? find_by_plaintext_token(token, unscoped) else - raise ArgumentError, 'Unknown encryption phase!' + raise ArgumentError, "Unknown encryption strategy: #{encrypted_strategy}!" end end @@ -41,8 +31,8 @@ module TokenAuthenticatableStrategies return super if instance.has_attribute?(encrypted_field) - if fully_encrypted? - raise ArgumentError, 'Using encrypted strategy when encrypted field is missing!' + if required? + raise ArgumentError, 'Using required encryption strategy when encrypted field is missing!' else insecure_strategy.ensure_token(instance) end @@ -53,8 +43,7 @@ module TokenAuthenticatableStrategies encrypted_token = instance.read_attribute(encrypted_field) token = Gitlab::CryptoHelper.aes256_gcm_decrypt(encrypted_token) - - token || (insecure_strategy.get_token(instance) if fallback?) + token || (insecure_strategy.get_token(instance) if optional?) end def set_token(instance, token) @@ -62,16 +51,35 @@ module TokenAuthenticatableStrategies instance[encrypted_field] = Gitlab::CryptoHelper.aes256_gcm_encrypt(token) instance[token_field] = token if migrating? - instance[token_field] = nil if fallback? + instance[token_field] = nil if optional? token end - def fully_encrypted? - !migrating? && !fallback? + def required? + encrypted_strategy == :required + end + + def migrating? + encrypted_strategy == :migrating + end + + def optional? + encrypted_strategy == :optional end protected + def encrypted_strategy + value = options[:encrypted] + value = value.call if value.is_a?(Proc) + + unless value.in?([:required, :optional, :migrating]) + raise ArgumentError, 'encrypted: needs to be a :required, :optional or :migrating!' + end + + value + end + def find_by_plaintext_token(token, unscoped) insecure_strategy.find_token_authenticatable(token, unscoped) end @@ -89,7 +97,7 @@ module TokenAuthenticatableStrategies def token_set?(instance) raw_token = instance.read_attribute(encrypted_field) - unless fully_encrypted? + unless required? raw_token ||= insecure_strategy.get_token(instance) end diff --git a/app/models/environment.rb b/app/models/environment.rb index 87bdb52b58b..3d909cc8e5c 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -119,7 +119,7 @@ class Environment < ActiveRecord::Base def first_deployment_for(commit_sha) ref = project.repository.ref_name_for_sha(ref_path, commit_sha) - return nil unless ref + return unless ref deployment_iid = ref.split('/').last deployments.find_by(iid: deployment_iid) @@ -130,7 +130,7 @@ class Environment < ActiveRecord::Base end def formatted_external_url - return nil unless external_url + return unless external_url external_url.gsub(%r{\A.*?://}, '') end diff --git a/app/models/group.rb b/app/models/group.rb index 52f503404af..495bfe04499 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -56,7 +56,7 @@ class Group < Namespace validates :two_factor_grace_period, presence: true, numericality: { greater_than_or_equal_to: 0 } - add_authentication_token_field :runners_token, encrypted: true, migrating: true + add_authentication_token_field :runners_token, encrypted: -> { Feature.enabled?(:groups_tokens_optional_encryption) ? :optional : :required } after_create :post_create_hook after_destroy :post_destroy_hook diff --git a/app/models/individual_note_discussion.rb b/app/models/individual_note_discussion.rb index b4a661ae5b4..3b6b68a9c5f 100644 --- a/app/models/individual_note_discussion.rb +++ b/app/models/individual_note_discussion.rb @@ -14,7 +14,7 @@ class IndividualNoteDiscussion < Discussion end def can_convert_to_discussion? - noteable.supports_replying_to_individual_notes? && Feature.enabled?(:reply_to_individual_notes) + noteable.supports_replying_to_individual_notes? && Feature.enabled?(:reply_to_individual_notes, default_enabled: true) end def convert_to_discussion!(save: false) diff --git a/app/models/issue.rb b/app/models/issue.rb index 071ad50fddc..deab53d25e7 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -64,6 +64,7 @@ class Issue < ActiveRecord::Base scope :order_closest_future_date, -> { reorder('CASE WHEN issues.due_date >= CURRENT_DATE THEN 0 ELSE 1 END ASC, ABS(CURRENT_DATE - issues.due_date) ASC') } scope :preload_associations, -> { preload(:labels, project: :namespace) } + scope :with_api_entity_associations, -> { preload(:timelogs, :assignees, :author, :notes, :labels, project: [:route, { namespace: :route }] ) } scope :public_only, -> { where(confidential: false) } scope :confidential_only, -> { where(confidential: true) } diff --git a/app/models/label_note.rb b/app/models/label_note.rb index 680952cf421..d6814f4a948 100644 --- a/app/models/label_note.rb +++ b/app/models/label_note.rb @@ -81,7 +81,7 @@ class LabelNote < Note deleted = label_refs.count - existing_refs.count deleted_str = deleted == 0 ? nil : "#{deleted} deleted" - return nil unless refs_str || deleted_str + return unless refs_str || deleted_str label_list_str = [refs_str, deleted_str].compact.join(' + ') suffix = 'label'.pluralize(deleted > 0 ? deleted : existing_refs.count) diff --git a/app/models/legacy_diff_note.rb b/app/models/legacy_diff_note.rb index 00dec6bb92b..e2c75bc7ee9 100644 --- a/app/models/legacy_diff_note.rb +++ b/app/models/legacy_diff_note.rb @@ -73,7 +73,7 @@ class LegacyDiffNote < Note private def find_diff - return nil unless noteable + return unless noteable return @diff if defined?(@diff) @diff = noteable.raw_diffs(Commit.max_diff_options).find do |d| diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 1468ae1c34a..acf80addc6a 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -71,7 +71,7 @@ class MergeRequest < ActiveRecord::Base serialize :merge_params, Hash # rubocop:disable Cop/ActiveRecordSerialize - after_create :ensure_merge_request_diff, unless: :importing? + after_create :ensure_merge_request_diff after_update :clear_memoized_shas after_update :reload_diff_if_branch_changed after_save :ensure_metrics @@ -184,11 +184,21 @@ class MergeRequest < ActiveRecord::Base scope :assigned, -> { where("assignee_id IS NOT NULL") } scope :unassigned, -> { where("assignee_id IS NULL") } scope :assigned_to, ->(u) { where(assignee_id: u.id)} + scope :with_api_entity_associations, -> { + preload(:author, :assignee, :notes, :labels, :milestone, :timelogs, + latest_merge_request_diff: [:merge_request_diff_commits], + metrics: [:latest_closed_by, :merged_by], + target_project: [:route, { namespace: :route }], + source_project: [:route, { namespace: :route }]) + } participant :assignee after_save :keep_around_commit + alias_attribute :project, :target_project + alias_attribute :project_id, :target_project_id + def self.reference_prefix '!' end @@ -847,10 +857,6 @@ class MergeRequest < ActiveRecord::Base target_project != source_project end - def project - target_project - end - # If the merge request closes any issues, save this information in the # `MergeRequestsClosingIssues` model. This is a performance optimization. # Calculating this information for a number of merge requests requires @@ -1154,35 +1160,16 @@ class MergeRequest < ActiveRecord::Base Gitlab::Ci::Variables::Collection.new.tap do |variables| variables.append(key: 'CI_MERGE_REQUEST_ID', value: id.to_s) variables.append(key: 'CI_MERGE_REQUEST_IID', value: iid.to_s) - - variables.append(key: 'CI_MERGE_REQUEST_REF_PATH', - value: ref_path.to_s) - - variables.append(key: 'CI_MERGE_REQUEST_PROJECT_ID', - value: project.id.to_s) - - variables.append(key: 'CI_MERGE_REQUEST_PROJECT_PATH', - value: project.full_path) - - variables.append(key: 'CI_MERGE_REQUEST_PROJECT_URL', - value: project.web_url) - - variables.append(key: 'CI_MERGE_REQUEST_TARGET_BRANCH_NAME', - value: target_branch.to_s) - - if source_project - variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_ID', - value: source_project.id.to_s) - - variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_PATH', - value: source_project.full_path) - - variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_URL', - value: source_project.web_url) - - variables.append(key: 'CI_MERGE_REQUEST_SOURCE_BRANCH_NAME', - value: source_branch.to_s) - end + variables.append(key: 'CI_MERGE_REQUEST_REF_PATH', value: ref_path.to_s) + variables.append(key: 'CI_MERGE_REQUEST_PROJECT_ID', value: project.id.to_s) + variables.append(key: 'CI_MERGE_REQUEST_PROJECT_PATH', value: project.full_path) + variables.append(key: 'CI_MERGE_REQUEST_PROJECT_URL', value: project.web_url) + variables.append(key: 'CI_MERGE_REQUEST_TARGET_BRANCH_NAME', value: target_branch.to_s) + variables.append(key: 'CI_MERGE_REQUEST_TITLE', value: title) + variables.append(key: 'CI_MERGE_REQUEST_ASSIGNEES', value: assignee.username) if assignee + variables.append(key: 'CI_MERGE_REQUEST_MILESTONE', value: milestone.title) if milestone + variables.append(key: 'CI_MERGE_REQUEST_LABELS', value: label_names.join(',')) if labels.present? + variables.concat(source_project_variables) end end @@ -1389,4 +1376,15 @@ class MergeRequest < ActiveRecord::Base source_project&.ci_pipelines &.latest_for_merge_request(self, source_branch, diff_head_sha) end + + def source_project_variables + Gitlab::Ci::Variables::Collection.new.tap do |variables| + break variables unless source_project + + variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_ID', value: source_project.id.to_s) + variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_PATH', value: source_project.full_path) + variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_URL', value: source_project.web_url) + variables.append(key: 'CI_MERGE_REQUEST_SOURCE_BRANCH_NAME', value: source_branch.to_s) + end + end end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index e286a4e57f2..351a662ae83 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -22,6 +22,8 @@ class MergeRequestDiff < ActiveRecord::Base has_many :merge_request_diff_commits, -> { order(:merge_request_diff_id, :relative_order) } + validates :base_commit_sha, :head_commit_sha, :start_commit_sha, sha: true + state_machine :state, initial: :empty do event :clean do transition any => :without_files diff --git a/app/models/namespace.rb b/app/models/namespace.rb index f7592532c5b..a5c479bdc0c 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -149,7 +149,7 @@ class Namespace < ApplicationRecord end def find_fork_of(project) - return nil unless project.fork_network + return unless project.fork_network if Gitlab::SafeRequestStore.active? forks_in_namespace = Gitlab::SafeRequestStore.fetch("namespaces:#{id}:forked_projects") do diff --git a/app/models/notification_recipient.rb b/app/models/notification_recipient.rb index 481c1d963c6..793cce191fa 100644 --- a/app/models/notification_recipient.rb +++ b/app/models/notification_recipient.rb @@ -119,7 +119,7 @@ class NotificationRecipient private def read_ability - return nil if @skip_read_ability + return if @skip_read_ability return @read_ability if instance_variable_defined?(:@read_ability) @read_ability = @@ -136,7 +136,7 @@ class NotificationRecipient end def default_project - return nil if @target.nil? + return if @target.nil? return @target if @target.is_a?(Project) return @target.project if @target.respond_to?(:project) end diff --git a/app/models/project.rb b/app/models/project.rb index 00592c108db..4cc13f372c1 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -85,7 +85,7 @@ class Project < ActiveRecord::Base default_value_for :snippets_enabled, gitlab_config_features.snippets default_value_for :only_allow_merge_if_all_discussions_are_resolved, false - add_authentication_token_field :runners_token, encrypted: true, migrating: true + add_authentication_token_field :runners_token, encrypted: -> { Feature.enabled?(:projects_tokens_optional_encryption) ? :optional : :required } before_validation :mark_remote_mirrors_for_removal, if: -> { RemoteMirror.table_exists? } @@ -1230,7 +1230,7 @@ class Project < ActiveRecord::Base end def fork_source - return nil unless forked? + return unless forked? forked_from_project || fork_network&.root_project end @@ -1679,7 +1679,7 @@ class Project < ActiveRecord::Base end def export_path - return nil unless namespace.present? || hashed_storage?(:repository) + return unless namespace.present? || hashed_storage?(:repository) import_export_shared.archive_path end diff --git a/app/models/project_feature.rb b/app/models/project_feature.rb index f700090a493..e6787236c4e 100644 --- a/app/models/project_feature.rb +++ b/app/models/project_feature.rb @@ -76,7 +76,7 @@ class ProjectFeature < ActiveRecord::Base # This feature might not be behind a feature flag at all, so default to true return false unless ::Feature.enabled?(feature, user, default_enabled: true) - get_permission(user, access_level(feature)) + get_permission(user, feature) end def access_level(feature) @@ -134,12 +134,12 @@ class ProjectFeature < ActiveRecord::Base (FEATURES - %i(pages)).each {|f| validator.call("#{f}_access_level")} end - def get_permission(user, level) - case level + def get_permission(user, feature) + case access_level(feature) when DISABLED false when PRIVATE - user && (project.team.member?(user) || user.full_private_access?) + team_access?(user, feature) when ENABLED true when PUBLIC @@ -148,4 +148,11 @@ class ProjectFeature < ActiveRecord::Base true end end + + def team_access?(user, feature) + return unless user + return true if user.full_private_access? + + project.team.member?(user, ProjectFeature.required_minimum_access_level(feature)) + end end diff --git a/app/models/project_services/campfire_service.rb b/app/models/project_services/campfire_service.rb index 1d7877a1fb5..ad26e42a21b 100644 --- a/app/models/project_services/campfire_service.rb +++ b/app/models/project_services/campfire_service.rb @@ -57,7 +57,7 @@ class CampfireService < Service # https://github.com/basecamp/campfire-api/blob/master/sections/messages.md#create-message def speak(room_name, message, auth) room = rooms(auth).find { |r| r["name"] == room_name } - return nil unless room + return unless room path = "/room/#{room["id"]}/speak.json" body = { diff --git a/app/models/project_services/irker_service.rb b/app/models/project_services/irker_service.rb index 83fd9a34438..fb76bc89c98 100644 --- a/app/models/project_services/irker_service.rb +++ b/app/models/project_services/irker_service.rb @@ -112,7 +112,7 @@ class IrkerService < Service end def consider_uri(uri) - return nil if uri.scheme.nil? + return if uri.scheme.nil? # Authorize both irc://domain.com/#chan and irc://domain.com/chan if uri.is_a?(URI) && uri.scheme[/^ircs?\z/] && !uri.path.nil? diff --git a/app/models/project_services/prometheus_service.rb b/app/models/project_services/prometheus_service.rb index 60cb2d380d5..c68a9d923c8 100644 --- a/app/models/project_services/prometheus_service.rb +++ b/app/models/project_services/prometheus_service.rb @@ -71,7 +71,7 @@ class PrometheusService < MonitoringService end def prometheus_client - RestClient::Resource.new(api_url, max_redirects: 0) if api_url && manual_configuration? && active? + RestClient::Resource.new(api_url, max_redirects: 0) if should_return_client? end def prometheus_available? @@ -83,6 +83,10 @@ class PrometheusService < MonitoringService private + def should_return_client? + api_url && manual_configuration? && active? && valid? + end + def synchronize_service_state self.active = prometheus_available? || manual_configuration? diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb index d075440b147..597431be65a 100644 --- a/app/models/protected_branch.rb +++ b/app/models/protected_branch.rb @@ -18,13 +18,23 @@ class ProtectedBranch < ActiveRecord::Base def self.protected?(project, ref_name) return true if project.empty_repo? && default_branch_protected? - refs = project.protected_branches.select(:name) + self.matching(ref_name, protected_refs: protected_refs(project)).present? + end - self.matching(ref_name, protected_refs: refs).present? + def self.any_protected?(project, ref_names) + protected_refs(project).any? do |protected_ref| + ref_names.any? do |ref_name| + protected_ref.matches?(ref_name) + end + end end def self.default_branch_protected? Gitlab::CurrentSettings.default_branch_protection == Gitlab::Access::PROTECTION_FULL || Gitlab::CurrentSettings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_MERGE end + + def self.protected_refs(project) + project.protected_branches.select(:name) + end end diff --git a/app/models/repository.rb b/app/models/repository.rb index cd761a29618..851175a61b7 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -79,7 +79,7 @@ class Repository end def raw_repository - return nil unless full_path + return unless full_path @raw_repository ||= initialize_raw_repository end @@ -103,7 +103,7 @@ class Repository end def commit(ref = nil) - return nil unless exists? + return unless exists? return ref if ref.is_a?(::Commit) find_commit(ref || root_ref) diff --git a/app/models/ssh_host_key.rb b/app/models/ssh_host_key.rb index fd23cc9ac87..b6fb39ee81f 100644 --- a/app/models/ssh_host_key.rb +++ b/app/models/ssh_host_key.rb @@ -27,7 +27,7 @@ class SshHostKey def self.find_by(opts = {}) opts = HashWithIndifferentAccess.new(opts) - return nil unless opts.key?(:id) + return unless opts.key?(:id) project_id, url = opts[:id].split(':', 2) project = Project.find_by(id: project_id) diff --git a/app/models/todo.rb b/app/models/todo.rb index d9b86d941b6..2b0dee875a3 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -31,7 +31,13 @@ class Todo < ActiveRecord::Base belongs_to :note belongs_to :project belongs_to :group - belongs_to :target, polymorphic: true, touch: true # rubocop:disable Cop/PolymorphicAssociations + belongs_to :target, -> { + if self.klass.respond_to?(:with_api_entity_associations) + self.with_api_entity_associations + else + self + end + }, polymorphic: true, touch: true # rubocop:disable Cop/PolymorphicAssociations belongs_to :user delegate :name, :email, to: :author, prefix: true, allow_nil: true @@ -52,6 +58,7 @@ class Todo < ActiveRecord::Base scope :for_type, -> (type) { where(target_type: type) } scope :for_target, -> (id) { where(target_id: id) } scope :for_commit, -> (id) { where(commit_id: id) } + scope :with_api_entity_associations, -> { preload(:target, :author, :note, group: :route, project: [:route, { namespace: :route }]) } state_machine :state, initial: :pending do event :done do diff --git a/app/models/user.rb b/app/models/user.rb index ee51c35d576..778c9e631bd 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -470,7 +470,7 @@ class User < ApplicationRecord end def by_login(login) - return nil unless login + return unless login if login.include?('@'.freeze) unscoped.iwhere(email: login).take diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index b1d6d461928..64daba81dcf 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -132,7 +132,7 @@ class WikiPage # The GitLab Commit instance for this page. def version - return nil unless persisted? + return unless persisted? @version ||= @page.version end diff --git a/app/policies/global_policy.rb b/app/policies/global_policy.rb index 16c58730878..d412a591fdc 100644 --- a/app/policies/global_policy.rb +++ b/app/policies/global_policy.rb @@ -68,6 +68,10 @@ class GlobalPolicy < BasePolicy enable :read_users_list end + rule { ~anonymous }.policy do + enable :read_instance_metadata + end + rule { admin }.policy do enable :read_custom_attribute enable :update_custom_attribute diff --git a/app/policies/group_policy.rb b/app/policies/group_policy.rb index 298769c0eb8..e74e5f008d7 100644 --- a/app/policies/group_policy.rb +++ b/app/policies/group_policy.rb @@ -53,7 +53,6 @@ class GroupPolicy < BasePolicy rule { admin }.enable :read_group rule { has_projects }.policy do - enable :read_group enable :read_list enable :read_label end diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb index 533782104ac..cf257ed47c8 100644 --- a/app/policies/project_policy.rb +++ b/app/policies/project_policy.rb @@ -278,6 +278,7 @@ class ProjectPolicy < BasePolicy enable :admin_cluster enable :create_environment_terminal enable :destroy_release + enable :destroy_artifacts enable :daily_statistics end @@ -300,6 +301,8 @@ class ProjectPolicy < BasePolicy rule { issues_disabled }.policy do prevent(*create_read_update_admin_destroy(:issue)) + prevent(*create_read_update_admin_destroy(:board)) + prevent(*create_read_update_admin_destroy(:list)) end rule { merge_requests_disabled | repository_disabled }.policy do @@ -463,7 +466,7 @@ class ProjectPolicy < BasePolicy when ProjectFeature::DISABLED false when ProjectFeature::PRIVATE - guest? || admin? + admin? || team_access_level >= ProjectFeature.required_minimum_access_level(feature) else true end diff --git a/app/presenters/blobs/unfold_presenter.rb b/app/presenters/blobs/unfold_presenter.rb new file mode 100644 index 00000000000..7b13db3bb74 --- /dev/null +++ b/app/presenters/blobs/unfold_presenter.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +require 'gt_one_coercion' + +module Blobs + class UnfoldPresenter < BlobPresenter + include Virtus.model + include Gitlab::Utils::StrongMemoize + + attribute :full, Boolean, default: false + attribute :since, GtOneCoercion + attribute :to, GtOneCoercion + attribute :bottom, Boolean + attribute :unfold, Boolean, default: true + attribute :offset, Integer + attribute :indent, Integer, default: 0 + + def initialize(blob, params) + @subject = blob + @all_lines = highlight.lines + super(params) + + if full? + self.attributes = { since: 1, to: @all_lines.size, bottom: false, unfold: false, offset: 0, indent: 0 } + end + end + + # Converts a String array to Gitlab::Diff::Line array, with match line added + def diff_lines + diff_lines = lines.map do |line| + Gitlab::Diff::Line.new(line, nil, nil, nil, nil, rich_text: line) + end + + add_match_line(diff_lines) + + diff_lines + end + + def lines + strong_memoize(:lines) do + lines = @all_lines + lines = lines[since - 1..to - 1] unless full? + lines.map(&:html_safe) + end + end + + def match_line_text + return '' if bottom? + + lines_length = lines.length - 1 + line = [since, lines_length].join(',') + "@@ -#{line}+#{line} @@" + end + + private + + def add_match_line(diff_lines) + return unless unfold? + + if bottom? && to < @all_lines.size + old_pos = to - offset + new_pos = to + elsif since != 1 + old_pos = new_pos = since + end + + # Match line is not needed when it reaches the top limit or bottom limit of the file. + return unless new_pos + + match_line = Gitlab::Diff::Line.new(match_line_text, 'match', nil, old_pos, new_pos) + + bottom? ? diff_lines.push(match_line) : diff_lines.unshift(match_line) + end + end +end diff --git a/app/presenters/merge_request_presenter.rb b/app/presenters/merge_request_presenter.rb index c59e73f824c..af164858408 100644 --- a/app/presenters/merge_request_presenter.rb +++ b/app/presenters/merge_request_presenter.rb @@ -98,6 +98,12 @@ class MergeRequestPresenter < Gitlab::View::Presenter::Delegated end end + def target_branch_path + if target_branch_exists? + project_branch_path(project, target_branch) + end + end + def source_branch_path if source_branch_exists? project_branch_path(source_project, source_branch) diff --git a/app/serializers/concerns/user_status_tooltip.rb b/app/serializers/concerns/user_status_tooltip.rb index aa6e67e3351..633b117d392 100644 --- a/app/serializers/concerns/user_status_tooltip.rb +++ b/app/serializers/concerns/user_status_tooltip.rb @@ -11,7 +11,7 @@ module UserStatusTooltip expose :user_status_if_loaded, as: :status_tooltip_html def user_status_if_loaded - return nil unless object.association(:status).loaded? + return unless object.association(:status).loaded? user_status(object) end diff --git a/app/serializers/diff_file_entity.rb b/app/serializers/diff_file_entity.rb index 01ee7af37ed..13711070a46 100644 --- a/app/serializers/diff_file_entity.rb +++ b/app/serializers/diff_file_entity.rb @@ -7,7 +7,7 @@ class DiffFileEntity < DiffFileBaseEntity expose :added_lines expose :removed_lines - expose :load_collapsed_diff_url, if: -> (diff_file, options) { diff_file.viewer.collapsed? && options[:merge_request] } do |diff_file| + expose :load_collapsed_diff_url, if: -> (diff_file, options) { options[:merge_request] } do |diff_file| merge_request = options[:merge_request] project = merge_request.target_project @@ -57,6 +57,10 @@ class DiffFileEntity < DiffFileBaseEntity diff_file.diff_lines_for_serializer end + expose :is_fully_expanded, if: -> (diff_file, _) { Feature.enabled?(:expand_diff_full_file) && diff_file.text? } do |diff_file| + diff_file.fully_expanded? + end + # Used for parallel diffs expose :parallel_diff_lines, using: DiffLineParallelEntity, if: -> (diff_file, _) { diff_file.text? } end diff --git a/app/serializers/merge_request_for_pipeline_entity.rb b/app/serializers/merge_request_for_pipeline_entity.rb new file mode 100644 index 00000000000..7779ddfd65a --- /dev/null +++ b/app/serializers/merge_request_for_pipeline_entity.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class MergeRequestForPipelineEntity < Grape::Entity + include RequestAwareEntity + + expose :iid + + expose :path do |merge_request| + project_merge_request_path(merge_request.project, merge_request) + end + + expose :title + expose :source_branch + expose :source_branch_path + expose :target_branch + expose :target_branch_path +end diff --git a/app/serializers/pipeline_entity.rb b/app/serializers/pipeline_entity.rb index c2990cb5159..5ac1e590d39 100644 --- a/app/serializers/pipeline_entity.rb +++ b/app/serializers/pipeline_entity.rb @@ -28,6 +28,7 @@ class PipelineEntity < Grape::Entity expose :can_retry?, as: :retryable expose :can_cancel?, as: :cancelable expose :failure_reason?, as: :failure_reason + expose :detached_merge_request_pipeline?, as: :detached end expose :details do @@ -36,6 +37,10 @@ class PipelineEntity < Grape::Entity expose :finished_at end + expose :merge_request, if: -> (*) { has_presentable_merge_request? }, with: MergeRequestForPipelineEntity do |pipeline| + pipeline.merge_request.present(current_user: request.current_user) + end + expose :ref do expose :name do |pipeline| pipeline.ref @@ -81,6 +86,11 @@ class PipelineEntity < Grape::Entity pipeline.cancelable? end + def has_presentable_merge_request? + pipeline.triggered_by_merge_request? && + can?(request.current_user, :read_merge_request, pipeline.merge_request) + end + def detailed_status pipeline.detailed_status(request.current_user) end diff --git a/app/serializers/pipeline_serializer.rb b/app/serializers/pipeline_serializer.rb index 7451433a841..dbbeca9431d 100644 --- a/app/serializers/pipeline_serializer.rb +++ b/app/serializers/pipeline_serializer.rb @@ -15,6 +15,7 @@ class PipelineSerializer < BaseSerializer :manual_actions, :scheduled_actions, :artifacts, + :merge_request, { pending_builds: :project, project: [:route, { namespace: :route }], diff --git a/app/services/application_settings/update_service.rb b/app/services/application_settings/update_service.rb index 2e4643ed668..9146eb96533 100644 --- a/app/services/application_settings/update_service.rb +++ b/app/services/application_settings/update_service.rb @@ -38,7 +38,7 @@ module ApplicationSettings def performance_bar_allowed_group_id performance_bar_enabled = !params.key?(:performance_bar_enabled) || params.delete(:performance_bar_enabled) group_full_path = params.delete(:performance_bar_allowed_group_path) - return nil unless Gitlab::Utils.to_boolean(performance_bar_enabled) + return unless Gitlab::Utils.to_boolean(performance_bar_enabled) Group.find_by_full_path(group_full_path)&.id if group_full_path.present? end diff --git a/app/services/boards/visits/latest_service.rb b/app/services/boards/visits/latest_service.rb index d8de08c5844..d13e25b4f12 100644 --- a/app/services/boards/visits/latest_service.rb +++ b/app/services/boards/visits/latest_service.rb @@ -4,7 +4,7 @@ module Boards module Visits class LatestService < Boards::BaseService def execute - return nil unless current_user + return unless current_user recent_visit_model.latest(current_user, parent, count: params[:count]) end diff --git a/app/services/commits/create_service.rb b/app/services/commits/create_service.rb index a3b87c20761..bb34a3d3352 100644 --- a/app/services/commits/create_service.rb +++ b/app/services/commits/create_service.rb @@ -11,6 +11,7 @@ module Commits @start_project = params[:start_project] || @project @start_branch = params[:start_branch] @branch_name = params[:branch_name] + @force = params[:force] || false end def execute @@ -42,6 +43,10 @@ module Commits @start_branch != @branch_name || @start_project != @project end + def force? + !!@force + end + def validate! validate_permissions! validate_on_branch! @@ -65,13 +70,13 @@ module Commits end def validate_branch_existence! - if !project.empty_repo? && different_branch? && repository.branch_exists?(@branch_name) + if !project.empty_repo? && different_branch? && repository.branch_exists?(@branch_name) && !force? raise_error("A branch called '#{@branch_name}' already exists. Switch to that branch in order to make changes") end end def validate_new_branch_name! - result = ValidateNewBranchService.new(project, current_user).execute(@branch_name) + result = ValidateNewBranchService.new(project, current_user).execute(@branch_name, force: force?) if result[:status] == :error raise_error("Something went wrong when we tried to create '#{@branch_name}' for you: #{result[:message]}") diff --git a/app/services/files/multi_service.rb b/app/services/files/multi_service.rb index 927634c2159..c1bc26c330a 100644 --- a/app/services/files/multi_service.rb +++ b/app/services/files/multi_service.rb @@ -46,7 +46,8 @@ module Files author_email: @author_email, author_name: @author_name, start_project: @start_project, - start_branch_name: @start_branch + start_branch_name: @start_branch, + force: force? ) rescue ArgumentError => e raise_error(e) diff --git a/app/services/groups/nested_create_service.rb b/app/services/groups/nested_create_service.rb index f01f5656296..01bd685712b 100644 --- a/app/services/groups/nested_create_service.rb +++ b/app/services/groups/nested_create_service.rb @@ -12,7 +12,7 @@ module Groups end def execute - return nil unless group_path + return unless group_path if namespace = namespace_or_group(group_path) return namespace diff --git a/app/services/groups/transfer_service.rb b/app/services/groups/transfer_service.rb index f64e327416a..94185605ab9 100644 --- a/app/services/groups/transfer_service.rb +++ b/app/services/groups/transfer_service.rb @@ -35,7 +35,10 @@ module Groups def proceed_to_transfer Group.transaction do update_group_attributes + ensure_ownership end + + true end def ensure_allowed_transfer @@ -95,6 +98,13 @@ module Groups end # rubocop: enable CodeReuse/ActiveRecord + def ensure_ownership + return if @new_parent_group + return unless @group.owners.empty? + + @group.add_owner(current_user) + end + def raise_transfer_error(message) raise TransferError, ERROR_MESSAGES[message] end diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb index ef991eaf234..f35ad2a9d8b 100644 --- a/app/services/issuable_base_service.rb +++ b/app/services/issuable_base_service.rb @@ -89,7 +89,7 @@ class IssuableBaseService < BaseService return unless labels - params[:label_ids] = labels.split(",").map do |label_name| + params[:label_ids] = labels.map do |label_name| label = Labels::FindOrCreateService.new( current_user, parent, @@ -387,4 +387,10 @@ class IssuableBaseService < BaseService def parent project end + + # we need to check this because milestone from milestone_id param is displayed on "new" page + # where private project milestone could leak without this check + def ensure_milestone_available(issuable) + issuable.milestone_id = nil unless issuable.milestone_available? + end end diff --git a/app/services/issues/build_service.rb b/app/services/issues/build_service.rb index 3fb2c2b3007..61615ac2058 100644 --- a/app/services/issues/build_service.rb +++ b/app/services/issues/build_service.rb @@ -6,7 +6,9 @@ module Issues def execute filter_resolve_discussion_params - @issue = project.issues.new(issue_params) + @issue = project.issues.new(issue_params).tap do |issue| + ensure_milestone_available(issue) + end end def issue_params_with_info_from_discussions diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index 48419da98ad..109c964e577 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -19,6 +19,7 @@ module MergeRequests merge_request.target_project = find_target_project merge_request.target_branch = find_target_branch merge_request.can_be_created = projects_and_branches_valid? + ensure_milestone_available(merge_request) # compare branches only if branches are valid, otherwise # compare_branches may raise an error diff --git a/app/services/merge_requests/merge_to_ref_service.rb b/app/services/merge_requests/merge_to_ref_service.rb index 586652ae44e..69cc441f1bb 100644 --- a/app/services/merge_requests/merge_to_ref_service.rb +++ b/app/services/merge_requests/merge_to_ref_service.rb @@ -20,7 +20,12 @@ module MergeRequests raise_error('Conflicts detected during merge') unless commit_id - success(commit_id: commit_id) + commit = project.commit(commit_id) + target_id, source_id = commit.parent_ids + + success(commit_id: commit.id, + target_id: target_id, + source_id: source_id) rescue MergeError => error error(error.message) end @@ -38,12 +43,8 @@ module MergeRequests error = if Feature.disabled?(:merge_to_tmp_merge_ref_path, project) 'Feature is not enabled' - elsif !merge_method_supported? - "#{project.human_merge_method} to #{target_ref} is currently not supported." elsif !hooks_validation_pass?(merge_request) hooks_validation_error(merge_request) - elsif @merge_request.should_be_rebased? - 'Fast-forward merge is not possible. Please update your source branch.' elsif !@merge_request.mergeable_to_ref? "Merge request is not mergeable to #{target_ref}" elsif !source @@ -68,9 +69,5 @@ module MergeRequests rescue Gitlab::Git::PreReceiveError => error raise MergeError, error.message end - - def merge_method_supported? - [:merge, :rebase_merge].include?(project.merge_method) - end end end diff --git a/app/services/projects/download_service.rb b/app/services/projects/download_service.rb index dd297c9ba43..aba175eb79b 100644 --- a/app/services/projects/download_service.rb +++ b/app/services/projects/download_service.rb @@ -11,7 +11,7 @@ module Projects end def execute - return nil unless valid_url?(@url) + return unless valid_url?(@url) uploader = FileUploader.new(@project) uploader.download!(@url) diff --git a/app/services/projects/group_links/create_service.rb b/app/services/projects/group_links/create_service.rb index 1392775f805..e3d5bea0852 100644 --- a/app/services/projects/group_links/create_service.rb +++ b/app/services/projects/group_links/create_service.rb @@ -4,13 +4,19 @@ module Projects module GroupLinks class CreateService < BaseService def execute(group) - return false unless group + return error('Not Found', 404) unless group && can?(current_user, :read_namespace, group) - project.project_group_links.create( + link = project.project_group_links.new( group: group, group_access: params[:link_group_access], expires_at: params[:expires_at] ) + + if link.save + success(link: link) + else + error(link.errors.full_messages.to_sentence, 409) + end end end end diff --git a/app/services/push_event_payload_service.rb b/app/services/push_event_payload_service.rb index bb1259787af..fe366ac225b 100644 --- a/app/services/push_event_payload_service.rb +++ b/app/services/push_event_payload_service.rb @@ -46,7 +46,7 @@ class PushEventPayloadService def commit_title commit = @push_data.fetch(:commits).last - return nil unless commit && commit[:message] + return unless commit && commit[:message] raw_msg = commit[:message] diff --git a/app/services/upload_service.rb b/app/services/upload_service.rb index 41ca95b3b6f..403944557a2 100644 --- a/app/services/upload_service.rb +++ b/app/services/upload_service.rb @@ -6,7 +6,7 @@ class UploadService end def execute - return nil unless @file && @file.size <= max_attachment_size + return unless @file && @file.size <= max_attachment_size uploader = @uploader_class.new(@model, nil, @uploader_context) uploader.store!(@file) diff --git a/app/services/validate_new_branch_service.rb b/app/services/validate_new_branch_service.rb index c19e2ec2043..3f4a59e5cee 100644 --- a/app/services/validate_new_branch_service.rb +++ b/app/services/validate_new_branch_service.rb @@ -3,14 +3,14 @@ require_relative 'base_service' class ValidateNewBranchService < BaseService - def execute(branch_name) + def execute(branch_name, force: false) valid_branch = Gitlab::GitRefValidator.validate(branch_name) unless valid_branch return error('Branch name is invalid') end - if project.repository.branch_exists?(branch_name) + if project.repository.branch_exists?(branch_name) && !force return error('Branch already exists') end diff --git a/app/uploaders/file_mover.rb b/app/uploaders/file_mover.rb index a7f8615e9ba..236b7ed2b3d 100644 --- a/app/uploaders/file_mover.rb +++ b/app/uploaders/file_mover.rb @@ -11,6 +11,8 @@ class FileMover end def execute + return unless valid? + move if update_markdown @@ -21,6 +23,12 @@ class FileMover private + def valid? + Pathname.new(temp_file_path).realpath.to_path.start_with?( + (Pathname(temp_file_uploader.root) + temp_file_uploader.base_dir).to_path + ) + end + def move FileUtils.mkdir_p(File.dirname(file_path)) FileUtils.move(temp_file_path, file_path) diff --git a/app/validators/sha_validator.rb b/app/validators/sha_validator.rb new file mode 100644 index 00000000000..085fca4d65d --- /dev/null +++ b/app/validators/sha_validator.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class ShaValidator < ActiveModel::EachValidator + def validate_each(record, attribute, value) + return if value.blank? || value.match(/\A\h{40}\z/) + + record.errors.add(attribute, 'is not a valid SHA') + end +end diff --git a/app/views/ci/status/_icon.html.haml b/app/views/ci/status/_icon.html.haml new file mode 100644 index 00000000000..f38bdb2e5ed --- /dev/null +++ b/app/views/ci/status/_icon.html.haml @@ -0,0 +1,16 @@ +- status = local_assigns.fetch(:status) +- size = local_assigns.fetch(:size, 16) +- type = local_assigns.fetch(:type, 'pipeline') +- tooltip_placement = local_assigns.fetch(:tooltip_placement, "left") +- path = local_assigns.fetch(:path, status.has_details? ? status.details_path : nil) +- css_classes = "ci-status-link ci-status-icon ci-status-icon-#{status.group} has-tooltip" +- title = s_("PipelineStatusTooltip|Pipeline: %{ci_status}") % {ci_status: status.label} +- if type == 'commit' + - title = s_("PipelineStatusTooltip|Commit: %{ci_status}") % {ci_status: status.label} + +- if path + = link_to path, class: css_classes, title: title, data: { placement: tooltip_placement } do + = sprite_icon(status.icon, size: size) +- else + %span{ class: css_classes, title: title, data: { placement: tooltip_placement } } + = sprite_icon(status.icon, size: size) diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml index 39d0f620283..2f635757902 100644 --- a/app/views/groups/edit.html.haml +++ b/app/views/groups/edit.html.haml @@ -25,6 +25,8 @@ .settings-content = render 'groups/settings/permissions' += render_if_exists 'groups/insights', expanded: expanded + %section.settings.no-animate#js-badge-settings{ class: ('expanded' if expanded) } .settings-header %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only{ role: 'button' } diff --git a/app/views/notify/issue_moved_email.html.haml b/app/views/notify/issue_moved_email.html.haml index 472c31e9a5e..b766cb1a523 100644 --- a/app/views/notify/issue_moved_email.html.haml +++ b/app/views/notify/issue_moved_email.html.haml @@ -1,6 +1,9 @@ %p Issue was moved to another project. -%p - New issue: - = link_to project_issue_url(@new_project, @new_issue) do - = @new_issue.title +- if @can_access_project + %p + New issue: + = link_to project_issue_url(@new_project, @new_issue) do + = @new_issue.title +- else + You don't have access to the project. diff --git a/app/views/notify/issue_moved_email.text.erb b/app/views/notify/issue_moved_email.text.erb index 66ede43635b..985e689aa9d 100644 --- a/app/views/notify/issue_moved_email.text.erb +++ b/app/views/notify/issue_moved_email.text.erb @@ -1,4 +1,8 @@ Issue was moved to another project. +<% if @can_access_project %> New issue location: <%= project_issue_url(@new_project, @new_issue) %> +<% else %> +You don't have access to the project. +<% end %> diff --git a/app/views/profiles/active_sessions/_active_session.html.haml b/app/views/profiles/active_sessions/_active_session.html.haml index 23ef31a0c85..2bf514d72a5 100644 --- a/app/views/profiles/active_sessions/_active_session.html.haml +++ b/app/views/profiles/active_sessions/_active_session.html.haml @@ -23,9 +23,3 @@ %strong Signed in on = l(active_session.created_at, format: :short) - - - unless is_current_session - .float-right - = link_to profile_active_session_path(active_session.session_id), data: { confirm: 'Are you sure? The device will be signed out of GitLab.' }, method: :delete, class: "btn btn-danger prepend-left-10" do - %span.sr-only Revoke - Revoke diff --git a/app/views/projects/blob/viewers/_dependency_manager.html.haml b/app/views/projects/blob/viewers/_dependency_manager.html.haml index 87aa7c1dbf8..5970d41fdab 100644 --- a/app/views/projects/blob/viewers/_dependency_manager.html.haml +++ b/app/views/projects/blob/viewers/_dependency_manager.html.haml @@ -3,9 +3,4 @@ This project manages its dependencies using %strong= viewer.manager_name - - if viewer.package_name - and defines a #{viewer.package_type} named - %strong< - = link_to_if viewer.package_url.present?, viewer.package_name, viewer.package_url, target: '_blank', rel: 'noopener noreferrer' - = link_to 'Learn more', viewer.manager_url, target: '_blank', rel: 'noopener noreferrer' diff --git a/app/views/projects/buttons/_clone.html.haml b/app/views/projects/buttons/_clone.html.haml index 159d9e44e17..09f05b30433 100644 --- a/app/views/projects/buttons/_clone.html.haml +++ b/app/views/projects/buttons/_clone.html.haml @@ -7,7 +7,7 @@ = sprite_icon("arrow-down", css_class: "icon") %ul.p-3.dropdown-menu.dropdown-menu-right.dropdown-menu-large.dropdown-menu-selectable.clone-options-dropdown.qa-clone-options - if ssh_enabled? - %li.pb-2 + %li %label.label-bold = _('Clone with SSH') .input-group @@ -16,7 +16,7 @@ = clipboard_button(target: '#ssh_project_clone', title: _("Copy URL to clipboard"), class: "input-group-text btn-default btn-clipboard") = render_if_exists 'projects/buttons/geo' - if http_enabled? - %li + %li.pt-2 %label.label-bold = _('Clone with %{http_label}') % { http_label: gitlab_config.protocol.upcase } .input-group @@ -24,5 +24,6 @@ .input-group-append = clipboard_button(target: '#http_project_clone', title: _("Copy URL to clipboard"), class: "input-group-text btn-default btn-clipboard") = render_if_exists 'projects/buttons/geo' + = render_if_exists 'projects/buttons/kerberos_clone_field' = render_if_exists 'shared/geo_info_modal', project: project diff --git a/app/views/projects/deployments/_actions.haml b/app/views/projects/deployments/_actions.haml index f4c91377ecb..e45c5be76de 100644 --- a/app/views/projects/deployments/_actions.haml +++ b/app/views/projects/deployments/_actions.haml @@ -11,4 +11,4 @@ - next unless can?(current_user, :update_build, action) %li = link_to [:play, @project.namespace.becomes(Namespace), @project, action], method: :post, rel: 'nofollow', class: 'btn' do - %span= action.name.humanize + %span= action.name diff --git a/app/views/projects/deployments/_confirm_rollback_modal.html.haml b/app/views/projects/deployments/_confirm_rollback_modal.html.haml new file mode 100644 index 00000000000..ff40e404e5f --- /dev/null +++ b/app/views/projects/deployments/_confirm_rollback_modal.html.haml @@ -0,0 +1,23 @@ +- commit_sha = link_to deployment.short_sha, project_commit_path(@project, deployment.sha), class: "commit-sha has-tooltip", title: h(deployment.commit_title) +.modal.ws-normal.fade{ tabindex: -1, id: "confirm-rollback-modal-#{deployment.id}" } + .modal-dialog + .modal-content + .modal-header + %h4.modal-title.d-flex.mw-100 + - if deployment.last? + = s_("Environments|Re-deploy environment %{environment_name}?") % {environment_name: @environment.name} + - else + = s_("Environments|Rollback environment %{environment_name}?") % {environment_name: @environment.name} + .modal-body + - if deployment.last? + %p= s_('Environments|This action will relaunch the job for commit %{commit_id}, putting the environment in a previous version. Are you sure you want to continue?').html_safe % {commit_id: commit_sha} + - else + %p + = s_('Environments|This action will run the job defined by staging for commit %{commit_id}, putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?').html_safe % {commit_id: commit_sha} + .modal-footer + = button_tag _('Cancel'), type: 'button', class: 'btn btn-cancel', data: { dismiss: 'modal' } + = link_to [:retry, @project.namespace.becomes(Namespace), @project, deployment.deployable], method: :post, class: 'btn btn-danger' do + - if deployment.last? + = s_('Environments|Re-deploy') + - else + = s_('Environments|Rollback') diff --git a/app/views/projects/deployments/_rollback.haml b/app/views/projects/deployments/_rollback.haml index 1bd538a08ff..d6bf8d564de 100644 --- a/app/views/projects/deployments/_rollback.haml +++ b/app/views/projects/deployments/_rollback.haml @@ -1,7 +1,8 @@ - if can?(current_user, :create_deployment, deployment) - tooltip = deployment.last? ? s_('Environments|Re-deploy to environment') : s_('Environments|Rollback environment') - = link_to [:retry, @project.namespace.becomes(Namespace), @project, deployment.deployable], method: :post, class: 'btn btn-build has-tooltip', title: tooltip do + = button_tag class: 'btn btn-default btn-build has-tooltip', type: 'button', data: { toggle: 'modal', target: "#confirm-rollback-modal-#{deployment.id}" }, title: tooltip do - if deployment.last? = sprite_icon('repeat') - else = sprite_icon('redo') + = render 'projects/deployments/confirm_rollback_modal', deployment: deployment diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index 1a489bfa275..a6a8ca489a9 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -1,17 +1,15 @@ -- breadcrumb_title "General Settings" -- page_title "General" +- breadcrumb_title _("General Settings") +- page_title _("General") - @content_class = "limit-container-width" unless fluid_layout - expanded = Rails.env.test? .project-edit-container %section.settings.general-settings.no-animate#js-general-project-settings{ class: ('expanded' if expanded) } .settings-header - %h4 - General project - %button.btn.js-settings-toggle{ type: 'button' } - = expanded ? 'Collapse' : 'Expand' - %p - Update your project name, description, avatar, and other general settings. + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only= _('Naming, tags, avatar') + %button.btn.js-settings-toggle{ type: 'button' }= expanded ? _('Collapse') : _('Expand') + %p= _('Update your project name, tags, description and avatar.') + .settings-content .project-edit-errors = form_for [@project.namespace.becomes(Namespace), @project], remote: true, html: { multipart: true, class: "edit-project" }, authenticity_token: true do |f| @@ -63,12 +61,10 @@ %section.settings.sharing-permissions.no-animate#js-shared-permissions{ class: ('expanded' if expanded) } .settings-header - %h4 - Permissions - %button.btn.js-settings-toggle{ type: 'button' } - = expanded ? 'Collapse' : 'Expand' - %p - Enable or disable certain project features and choose access levels. + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only= _('Visibility, project features, permissions') + %button.btn.js-settings-toggle{ type: 'button' }= expanded ? _('Collapse') : _('Expand') + %p= _('Choose visibility level, enable/disable project features (issues, repository, wiki, snippets) and set permissions.') + .settings-content = form_for [@project.namespace.becomes(Namespace), @project], remote: true, html: { multipart: true, class: "sharing-permissions-form" }, authenticity_token: true do |f| %input{ name: 'update_section', type: 'hidden', value: 'js-shared-permissions' } @@ -81,12 +77,10 @@ %section.qa-merge-request-settings.settings.merge-requests-feature.no-animate#js-merge-request-settings{ class: [('expanded' if expanded), ('hidden' if @project.project_feature.send(:merge_requests_access_level) == 0)] } .settings-header - %h4 - Merge request - %button.btn.js-settings-toggle{ type: 'button' } - = expanded ? 'Collapse' : 'Expand' - %p - Customize your merge request restrictions. + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only= _('Merge requests') + %button.btn.js-settings-toggle{ type: 'button' }= expanded ? _('Collapse') : _('Expand') + %p= _('Choose your merge method, set up a default merge request description template.') + .settings-content = render_if_exists 'shared/promotions/promote_mr_features' @@ -97,11 +91,10 @@ = render_if_exists 'projects/merge_request_approvals_settings', expanded: expanded - = render_if_exists 'projects/service_desk_settings' %section.settings.no-animate{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = s_('ProjectSettings|Badges') %button.btn.js-settings-toggle{ type: 'button' } = expanded ? 'Collapse' : 'Expand' @@ -111,16 +104,15 @@ .settings-content = render 'shared/badges/badge_settings' + = render_if_exists 'projects/service_desk_settings' = render 'export', project: @project %section.qa-advanced-settings.settings.advanced-settings.no-animate#js-project-advanced-settings{ class: ('expanded' if expanded) } .settings-header - %h4 - Advanced - %button.btn.js-settings-toggle{ type: 'button' } - = expanded ? 'Collapse' : 'Expand' - %p - Perform advanced options such as housekeeping, archiving, renaming, transferring, or removing your project. + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only= _('Advanced') + %button.btn.js-settings-toggle{ type: 'button' }= expanded ? _('Collapse') : _('Expand') + %p= _('Housekeeping, export, path, transfer, remove, archive.') + .settings-content .sub-section %h4 Housekeeping diff --git a/app/views/projects/issues/_merge_requests.html.haml b/app/views/projects/issues/_merge_requests.html.haml index 310e339ac8d..6a66c2e57cc 100644 --- a/app/views/projects/issues/_merge_requests.html.haml +++ b/app/views/projects/issues/_merge_requests.html.haml @@ -27,7 +27,7 @@ = merge_request.to_reference %span.mr-ci-status.flex-md-grow-1.justify-content-end.d-flex.ml-md-2 - if merge_request.can_read_pipeline? - = render_pipeline_status(merge_request.head_pipeline, tooltip_placement: 'bottom') + = render 'ci/status/icon', status: merge_request.head_pipeline.detailed_status(current_user), tooltip_placement: 'bottom' - elsif has_any_head_pipeline = icon('blank fw') diff --git a/app/views/projects/issues/_related_branches.html.haml b/app/views/projects/issues/_related_branches.html.haml index ffdd96870ef..6da4956a036 100644 --- a/app/views/projects/issues/_related_branches.html.haml +++ b/app/views/projects/issues/_related_branches.html.haml @@ -8,7 +8,7 @@ - pipeline = @project.pipeline_for(branch, target.sha) if target - if can?(current_user, :read_pipeline, pipeline) %span.related-branch-ci-status - = render_pipeline_status(pipeline) + = render 'ci/status/icon', status: pipeline.detailed_status(current_user) %span.related-branch-info %strong = link_to branch, project_compare_path(@project, from: @project.default_branch, to: branch), class: "ref-name" diff --git a/app/views/projects/merge_requests/_merge_request.html.haml b/app/views/projects/merge_requests/_merge_request.html.haml index 90916191d97..b8e0b66e277 100644 --- a/app/views/projects/merge_requests/_merge_request.html.haml +++ b/app/views/projects/merge_requests/_merge_request.html.haml @@ -48,7 +48,7 @@ CLOSED - if can?(current_user, :read_pipeline, merge_request.head_pipeline) %li.issuable-pipeline-status.d-none.d-sm-inline-block - = render_pipeline_status(merge_request.head_pipeline) + = render 'ci/status/icon', status: merge_request.head_pipeline.detailed_status(current_user) - if merge_request.open? && merge_request.broken? %li.issuable-pipeline-broken.d-none.d-sm-inline-block = link_to merge_request_path(merge_request), class: "has-tooltip", title: _('Cannot be merged automatically') do diff --git a/app/views/projects/merge_requests/_merge_requests.html.haml b/app/views/projects/merge_requests/_merge_requests.html.haml index bd6f1c05949..57fbd360d46 100644 --- a/app/views/projects/merge_requests/_merge_requests.html.haml +++ b/app/views/projects/merge_requests/_merge_requests.html.haml @@ -1,5 +1,5 @@ %ul.content-list.mr-list.issuable-list - - if @merge_requests.exists? + - if @merge_requests.present? = render @merge_requests - else = render 'shared/empty_states/merge_requests' diff --git a/app/views/projects/mirrors/_mirror_repos.html.haml b/app/views/projects/mirrors/_mirror_repos.html.haml index 21b105e6f80..c031815200b 100644 --- a/app/views/projects/mirrors/_mirror_repos.html.haml +++ b/app/views/projects/mirrors/_mirror_repos.html.haml @@ -57,7 +57,7 @@ %td - if mirror.last_error.present? .badge.mirror-error-badge{ data: { toggle: 'tooltip', html: 'true' }, title: html_escape(mirror.last_error.try(:strip)) }= _('Error') - %td.mirror-action-buttons + %td .btn-group.mirror-actions-group.pull-right{ role: 'group' } - if mirror.ssh_key_auth? = clipboard_button(text: mirror.ssh_public_key, class: 'btn btn-default', title: _('Copy SSH public key')) diff --git a/app/views/projects/protected_branches/shared/_index.html.haml b/app/views/projects/protected_branches/shared/_index.html.haml index 539b184e5c2..4997770321e 100644 --- a/app/views/projects/protected_branches/shared/_index.html.haml +++ b/app/views/projects/protected_branches/shared/_index.html.haml @@ -12,7 +12,7 @@ %p By default, protected branches are designed to: %ul - %li prevent their creation, if not already created, from everybody except Maintainers + %li prevent their creation, if not already created, from everybody except users who are allowed to merge %li prevent pushes from everybody except Maintainers %li prevent <strong>anyone</strong> from force pushing to the branch %li prevent <strong>anyone</strong> from deleting the branch diff --git a/app/views/shared/_mobile_clone_panel.html.haml b/app/views/shared/_mobile_clone_panel.html.haml index 6e2527bd1a1..1e6b6f7c79b 100644 --- a/app/views/shared/_mobile_clone_panel.html.haml +++ b/app/views/shared/_mobile_clone_panel.html.haml @@ -13,3 +13,4 @@ - if http_enabled? %li = dropdown_item_with_description(http_copy_label, project.http_url_to_repo, href: project.http_url_to_repo, data: { clone_type: 'http' }) + = render_if_exists 'shared/mobile_kerberos_clone' diff --git a/app/views/shared/issuable/_search_bar.html.haml b/app/views/shared/issuable/_search_bar.html.haml index bdba47ed14d..f43be304e6b 100644 --- a/app/views/shared/issuable/_search_bar.html.haml +++ b/app/views/shared/issuable/_search_bar.html.haml @@ -71,6 +71,7 @@ = render 'shared/issuable/user_dropdown_item', user: User.new(username: '{{username}}', name: '{{name}}'), avatar: { lazy: true, url: '{{avatar_url}}' } + = render_if_exists 'shared/issuable/approver_dropdown' #js-dropdown-milestone.filtered-search-input-dropdown-menu.dropdown-menu %ul{ data: { dropdown: true } } %li.filter-dropdown-item{ data: { value: 'None' } } diff --git a/app/views/shared/milestones/_milestone.html.haml b/app/views/shared/milestones/_milestone.html.haml index 40b8374848e..e75f0a184ea 100644 --- a/app/views/shared/milestones/_milestone.html.haml +++ b/app/views/shared/milestones/_milestone.html.haml @@ -32,7 +32,7 @@ = milestone_progress_bar(milestone) = link_to pluralize(milestone.total_issues_count(current_user), 'Issue'), issues_path · - = link_to pluralize(milestone.merge_requests.size, 'Merge Request'), merge_requests_path + = link_to pluralize(milestone.merge_requests_visible_to_user(current_user).size, 'Merge Request'), merge_requests_path .float-lg-right.light #{milestone.percent_complete(current_user)}% complete .col-sm-2 .milestone-actions.d-flex.justify-content-sm-start.justify-content-md-end diff --git a/app/views/shared/milestones/_tabs.html.haml b/app/views/shared/milestones/_tabs.html.haml index 55460acab8f..b877f66c71e 100644 --- a/app/views/shared/milestones/_tabs.html.haml +++ b/app/views/shared/milestones/_tabs.html.haml @@ -12,7 +12,7 @@ %li.nav-item = link_to '#tab-merge-requests', class: 'nav-link', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_tab_path(milestone) do Merge Requests - %span.badge.badge-pill= milestone.merge_requests.size + %span.badge.badge-pill= milestone.merge_requests_visible_to_user(current_user).size - else %li.nav-item = link_to '#tab-merge-requests', class: 'nav-link active', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_tab_path(milestone) do @@ -21,11 +21,11 @@ %li.nav-item = link_to '#tab-participants', class: 'nav-link', 'data-toggle' => 'tab', 'data-endpoint': milestone_participants_tab_path(milestone) do Participants - %span.badge.badge-pill= milestone.participants.count + %span.badge.badge-pill= milestone.issue_participants_visible_by_user(current_user).count %li.nav-item = link_to '#tab-labels', class: 'nav-link', 'data-toggle' => 'tab', 'data-endpoint': milestone_labels_tab_path(milestone) do Labels - %span.badge.badge-pill= milestone.labels.count + %span.badge.badge-pill= milestone.issue_labels_visible_by_user(current_user).count - issues = milestone.sorted_issues(current_user) - show_project_name = local_assigns.fetch(:show_project_name, false) diff --git a/app/views/shared/projects/_project.html.haml b/app/views/shared/projects/_project.html.haml index f1a87faa7ac..d2b1be29eb9 100644 --- a/app/views/shared/projects/_project.html.haml +++ b/app/views/shared/projects/_project.html.haml @@ -85,7 +85,8 @@ = sprite_icon('issues', size: 14, css_class: 'append-right-4') = number_with_delimiter(project.open_issues_count) - if pipeline_status && can?(current_user, :read_cross_project) && project.pipeline_status.has_status? && can?(current_user, :read_build, project) + - pipeline_path = pipelines_project_commit_path(project.pipeline_status.project, project.pipeline_status.sha, ref: project.pipeline_status.ref) %span.icon-wrapper.pipeline-status - = render_project_pipeline_status(project.pipeline_status, tooltip_placement: 'top') + = render 'ci/status/icon', status: project.commit.last_pipeline.detailed_status(current_user), type: 'commit', tooltip_placement: 'top', path: pipeline_path .updated-note %span Updated #{updated_tooltip} diff --git a/app/workers/pipeline_metrics_worker.rb b/app/workers/pipeline_metrics_worker.rb index c2fbfd2b3a5..0ddad43b8d5 100644 --- a/app/workers/pipeline_metrics_worker.rb +++ b/app/workers/pipeline_metrics_worker.rb @@ -30,6 +30,6 @@ class PipelineMetricsWorker # rubocop: enable CodeReuse/ActiveRecord def merge_requests(pipeline) - pipeline.merge_requests.map(&:id) + pipeline.merge_requests_as_head_pipeline.map(&:id) end end |