summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Denisov <1101.debian@gmail.com>2012-09-07 09:39:34 +0300
committerAlex Denisov <1101.debian@gmail.com>2012-09-07 09:39:34 +0300
commited4fbcf6b004bacfe9ad3c99296d543921c477ed (patch)
tree61d45559d8e3a628d41b72e5aa512770ef50a8cb
parent38b17e4e063506b499ddebdff275d1d11e2f97b6 (diff)
parent5cb9e7eedc24c418bbb3bce2f48a7c585f9cb439 (diff)
downloadgitlab-ce-ed4fbcf6b004bacfe9ad3c99296d543921c477ed.tar.gz
Merge branch 'master' into fix_project_access_notification
-rw-r--r--.gitignore2
-rw-r--r--.travis.yml2
-rw-r--r--Gemfile.lock2
-rwxr-xr-xapp/assets/images/emoji/+1.pngbin0 -> 5135 bytes
-rwxr-xr-xapp/assets/images/emoji/-1.pngbin0 -> 5070 bytes
-rwxr-xr-xapp/assets/images/emoji/100.pngbin0 -> 3302 bytes
-rwxr-xr-xapp/assets/images/emoji/109.pngbin0 -> 3698 bytes
-rwxr-xr-xapp/assets/images/emoji/1234.pngbin0 -> 4751 bytes
-rwxr-xr-xapp/assets/images/emoji/8ball.pngbin0 -> 4141 bytes
-rwxr-xr-xapp/assets/images/emoji/a.pngbin0 -> 3154 bytes
-rwxr-xr-xapp/assets/images/emoji/ab.pngbin0 -> 3859 bytes
-rwxr-xr-xapp/assets/images/emoji/abc.pngbin0 -> 4247 bytes
-rwxr-xr-xapp/assets/images/emoji/abcd.pngbin0 -> 4471 bytes
-rwxr-xr-xapp/assets/images/emoji/accept.pngbin0 -> 4729 bytes
-rwxr-xr-xapp/assets/images/emoji/aerial_tramway.pngbin0 -> 3489 bytes
-rwxr-xr-xapp/assets/images/emoji/airplane.pngbin0 -> 4740 bytes
-rwxr-xr-xapp/assets/images/emoji/alarm_clock.pngbin0 -> 7062 bytes
-rwxr-xr-xapp/assets/images/emoji/alien.pngbin0 -> 5457 bytes
-rwxr-xr-xapp/assets/images/emoji/ambulance.pngbin0 -> 3708 bytes
-rwxr-xr-xapp/assets/images/emoji/anchor.pngbin0 -> 4479 bytes
-rwxr-xr-xapp/assets/images/emoji/angel.pngbin0 -> 6672 bytes
-rwxr-xr-xapp/assets/images/emoji/anger.pngbin0 -> 3079 bytes
-rwxr-xr-xapp/assets/images/emoji/angry.pngbin0 -> 5037 bytes
-rwxr-xr-xapp/assets/images/emoji/ant.pngbin0 -> 2851 bytes
-rwxr-xr-xapp/assets/images/emoji/apple.pngbin0 -> 5630 bytes
-rwxr-xr-xapp/assets/images/emoji/aquarius.pngbin0 -> 5096 bytes
-rwxr-xr-xapp/assets/images/emoji/aries.pngbin0 -> 4345 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_backward.pngbin0 -> 3180 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_double_down.pngbin0 -> 3179 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_double_up.pngbin0 -> 3613 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_down.pngbin0 -> 3006 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_down_small.pngbin0 -> 2934 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_forward.pngbin0 -> 3201 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_heading_down.pngbin0 -> 3521 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_heading_up.pngbin0 -> 3520 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_left.pngbin0 -> 3041 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_lower_left.pngbin0 -> 3342 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_lower_right.pngbin0 -> 3334 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_right.pngbin0 -> 3022 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_right_hook.pngbin0 -> 3712 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_up.pngbin0 -> 3073 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_up_down.pngbin0 -> 3544 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_up_small.pngbin0 -> 3198 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_upper_left.pngbin0 -> 3228 bytes
-rwxr-xr-xapp/assets/images/emoji/arrow_upper_right.pngbin0 -> 3235 bytes
-rwxr-xr-xapp/assets/images/emoji/arrows_clockwise.pngbin0 -> 1399 bytes
-rwxr-xr-xapp/assets/images/emoji/arrows_counterclockwise.pngbin0 -> 4823 bytes
-rwxr-xr-xapp/assets/images/emoji/art.pngbin0 -> 6744 bytes
-rwxr-xr-xapp/assets/images/emoji/articulated_lorry.pngbin0 -> 2938 bytes
-rwxr-xr-xapp/assets/images/emoji/astonished.pngbin0 -> 6043 bytes
-rwxr-xr-xapp/assets/images/emoji/atm.pngbin0 -> 4072 bytes
-rwxr-xr-xapp/assets/images/emoji/b.pngbin0 -> 3025 bytes
-rwxr-xr-xapp/assets/images/emoji/baby.pngbin0 -> 5921 bytes
-rwxr-xr-xapp/assets/images/emoji/baby_bottle.pngbin0 -> 4461 bytes
-rwxr-xr-xapp/assets/images/emoji/baby_chick.pngbin0 -> 3961 bytes
-rwxr-xr-xapp/assets/images/emoji/baby_symbol.pngbin0 -> 2967 bytes
-rwxr-xr-xapp/assets/images/emoji/baggage_claim.pngbin0 -> 3502 bytes
-rwxr-xr-xapp/assets/images/emoji/balloon.pngbin0 -> 2300 bytes
-rwxr-xr-xapp/assets/images/emoji/ballot_box_with_check.pngbin0 -> 1829 bytes
-rwxr-xr-xapp/assets/images/emoji/bamboo.pngbin0 -> 4672 bytes
-rwxr-xr-xapp/assets/images/emoji/banana.pngbin0 -> 3915 bytes
-rwxr-xr-xapp/assets/images/emoji/bangbang.pngbin0 -> 1387 bytes
-rwxr-xr-xapp/assets/images/emoji/bank.pngbin0 -> 5583 bytes
-rwxr-xr-xapp/assets/images/emoji/bar_chart.pngbin0 -> 2460 bytes
-rwxr-xr-xapp/assets/images/emoji/barber.pngbin0 -> 4252 bytes
-rwxr-xr-xapp/assets/images/emoji/baseball.pngbin0 -> 6032 bytes
-rwxr-xr-xapp/assets/images/emoji/basketball.pngbin0 -> 6386 bytes
-rwxr-xr-xapp/assets/images/emoji/bath.pngbin0 -> 3210 bytes
-rwxr-xr-xapp/assets/images/emoji/bathtub.pngbin0 -> 2784 bytes
-rwxr-xr-xapp/assets/images/emoji/battery.pngbin0 -> 3812 bytes
-rwxr-xr-xapp/assets/images/emoji/bear.pngbin0 -> 5561 bytes
-rwxr-xr-xapp/assets/images/emoji/beer.pngbin0 -> 6097 bytes
-rwxr-xr-xapp/assets/images/emoji/beers.pngbin0 -> 6591 bytes
-rwxr-xr-xapp/assets/images/emoji/beetle.pngbin0 -> 5255 bytes
-rwxr-xr-xapp/assets/images/emoji/beginner.pngbin0 -> 2761 bytes
-rwxr-xr-xapp/assets/images/emoji/bell.pngbin0 -> 4859 bytes
-rwxr-xr-xapp/assets/images/emoji/bento.pngbin0 -> 5732 bytes
-rwxr-xr-xapp/assets/images/emoji/bicyclist.pngbin0 -> 6484 bytes
-rwxr-xr-xapp/assets/images/emoji/bike.pngbin0 -> 4722 bytes
-rwxr-xr-xapp/assets/images/emoji/bikini.pngbin0 -> 3890 bytes
-rwxr-xr-xapp/assets/images/emoji/bird.pngbin0 -> 4878 bytes
-rwxr-xr-xapp/assets/images/emoji/birthday.pngbin0 -> 5404 bytes
-rwxr-xr-xapp/assets/images/emoji/black_circle.pngbin0 -> 2369 bytes
-rwxr-xr-xapp/assets/images/emoji/black_joker.pngbin0 -> 3877 bytes
-rwxr-xr-xapp/assets/images/emoji/black_nib.pngbin0 -> 2352 bytes
-rwxr-xr-xapp/assets/images/emoji/black_square.pngbin0 -> 1332 bytes
-rwxr-xr-xapp/assets/images/emoji/blossom.pngbin0 -> 4232 bytes
-rwxr-xr-xapp/assets/images/emoji/blowfish.pngbin0 -> 3751 bytes
-rwxr-xr-xapp/assets/images/emoji/blue_book.pngbin0 -> 5092 bytes
-rwxr-xr-xapp/assets/images/emoji/blue_car.pngbin0 -> 4081 bytes
-rwxr-xr-xapp/assets/images/emoji/blue_heart.pngbin0 -> 4094 bytes
-rwxr-xr-xapp/assets/images/emoji/blush.pngbin0 -> 5188 bytes
-rwxr-xr-xapp/assets/images/emoji/boar.pngbin0 -> 4840 bytes
-rwxr-xr-xapp/assets/images/emoji/boat.pngbin0 -> 3833 bytes
-rwxr-xr-xapp/assets/images/emoji/bomb.pngbin0 -> 5208 bytes
-rwxr-xr-xapp/assets/images/emoji/book.pngbin0 -> 6050 bytes
-rwxr-xr-xapp/assets/images/emoji/bookmark.pngbin0 -> 4696 bytes
-rwxr-xr-xapp/assets/images/emoji/bookmark_tabs.pngbin0 -> 3162 bytes
-rwxr-xr-xapp/assets/images/emoji/books.pngbin0 -> 6539 bytes
-rwxr-xr-xapp/assets/images/emoji/boot.pngbin0 -> 3327 bytes
-rwxr-xr-xapp/assets/images/emoji/bouquet.pngbin0 -> 6915 bytes
-rwxr-xr-xapp/assets/images/emoji/bow.pngbin0 -> 5143 bytes
-rwxr-xr-xapp/assets/images/emoji/bowling.pngbin0 -> 4184 bytes
-rwxr-xr-xapp/assets/images/emoji/bowtie.pngbin0 -> 6478 bytes
-rwxr-xr-xapp/assets/images/emoji/boy.pngbin0 -> 5946 bytes
-rwxr-xr-xapp/assets/images/emoji/bread.pngbin0 -> 6214 bytes
-rwxr-xr-xapp/assets/images/emoji/bride_with_veil.pngbin0 -> 8515 bytes
-rwxr-xr-xapp/assets/images/emoji/bridge_at_night.pngbin0 -> 5137 bytes
-rwxr-xr-xapp/assets/images/emoji/briefcase.pngbin0 -> 2698 bytes
-rwxr-xr-xapp/assets/images/emoji/broken_heart.pngbin0 -> 4118 bytes
-rwxr-xr-xapp/assets/images/emoji/bug.pngbin0 -> 5945 bytes
-rwxr-xr-xapp/assets/images/emoji/bulb.pngbin0 -> 4490 bytes
-rwxr-xr-xapp/assets/images/emoji/bullettrain_front.pngbin0 -> 4992 bytes
-rwxr-xr-xapp/assets/images/emoji/bullettrain_side.pngbin0 -> 3842 bytes
-rwxr-xr-xapp/assets/images/emoji/bus.pngbin0 -> 4065 bytes
-rwxr-xr-xapp/assets/images/emoji/busstop.pngbin0 -> 1676 bytes
-rwxr-xr-xapp/assets/images/emoji/bust_in_silhouette.pngbin0 -> 2007 bytes
-rwxr-xr-xapp/assets/images/emoji/busts_in_silhouette.pngbin0 -> 3021 bytes
-rwxr-xr-xapp/assets/images/emoji/cactus.pngbin0 -> 4509 bytes
-rwxr-xr-xapp/assets/images/emoji/cake.pngbin0 -> 6129 bytes
-rwxr-xr-xapp/assets/images/emoji/calendar.pngbin0 -> 2920 bytes
-rwxr-xr-xapp/assets/images/emoji/calling.pngbin0 -> 4037 bytes
-rwxr-xr-xapp/assets/images/emoji/camel.pngbin0 -> 4485 bytes
-rwxr-xr-xapp/assets/images/emoji/camera.pngbin0 -> 4661 bytes
-rwxr-xr-xapp/assets/images/emoji/cancer.pngbin0 -> 5384 bytes
-rwxr-xr-xapp/assets/images/emoji/candy.pngbin0 -> 4502 bytes
-rwxr-xr-xapp/assets/images/emoji/capital_abcd.pngbin0 -> 5136 bytes
-rwxr-xr-xapp/assets/images/emoji/capricorn.pngbin0 -> 4670 bytes
-rwxr-xr-xapp/assets/images/emoji/car.pngbin0 -> 4278 bytes
-rwxr-xr-xapp/assets/images/emoji/card_index.pngbin0 -> 3749 bytes
-rwxr-xr-xapp/assets/images/emoji/carousel_horse.pngbin0 -> 5893 bytes
-rwxr-xr-xapp/assets/images/emoji/cat.pngbin0 -> 5987 bytes
-rwxr-xr-xapp/assets/images/emoji/cat2.pngbin0 -> 5723 bytes
-rwxr-xr-xapp/assets/images/emoji/cd.pngbin0 -> 6718 bytes
-rwxr-xr-xapp/assets/images/emoji/chart.pngbin0 -> 4331 bytes
-rwxr-xr-xapp/assets/images/emoji/chart_with_downwards_trend.pngbin0 -> 2910 bytes
-rwxr-xr-xapp/assets/images/emoji/chart_with_upwards_trend.pngbin0 -> 2939 bytes
-rwxr-xr-xapp/assets/images/emoji/checkered_flag.pngbin0 -> 1675 bytes
-rwxr-xr-xapp/assets/images/emoji/cherries.pngbin0 -> 5604 bytes
-rwxr-xr-xapp/assets/images/emoji/cherry_blossom.pngbin0 -> 7174 bytes
-rwxr-xr-xapp/assets/images/emoji/chestnut.pngbin0 -> 5875 bytes
-rwxr-xr-xapp/assets/images/emoji/chicken.pngbin0 -> 3988 bytes
-rwxr-xr-xapp/assets/images/emoji/children_crossing.pngbin0 -> 3460 bytes
-rwxr-xr-xapp/assets/images/emoji/chocolate_bar.pngbin0 -> 5249 bytes
-rwxr-xr-xapp/assets/images/emoji/christmas_tree.pngbin0 -> 4721 bytes
-rwxr-xr-xapp/assets/images/emoji/church.pngbin0 -> 4653 bytes
-rwxr-xr-xapp/assets/images/emoji/cinema.pngbin0 -> 3573 bytes
-rwxr-xr-xapp/assets/images/emoji/circus_tent.pngbin0 -> 4683 bytes
-rwxr-xr-xapp/assets/images/emoji/city_sunrise.pngbin0 -> 4312 bytes
-rwxr-xr-xapp/assets/images/emoji/city_sunset.pngbin0 -> 3841 bytes
-rwxr-xr-xapp/assets/images/emoji/cl.pngbin0 -> 3493 bytes
-rwxr-xr-xapp/assets/images/emoji/clap.pngbin0 -> 7110 bytes
-rwxr-xr-xapp/assets/images/emoji/clapper.pngbin0 -> 4192 bytes
-rwxr-xr-xapp/assets/images/emoji/clipboard.pngbin0 -> 4663 bytes
-rwxr-xr-xapp/assets/images/emoji/clock1.pngbin0 -> 2590 bytes
-rwxr-xr-xapp/assets/images/emoji/clock10.pngbin0 -> 2590 bytes
-rwxr-xr-xapp/assets/images/emoji/clock1030.pngbin0 -> 2864 bytes
-rwxr-xr-xapp/assets/images/emoji/clock11.pngbin0 -> 2587 bytes
-rwxr-xr-xapp/assets/images/emoji/clock1130.pngbin0 -> 2854 bytes
-rwxr-xr-xapp/assets/images/emoji/clock12.pngbin0 -> 2504 bytes
-rwxr-xr-xapp/assets/images/emoji/clock1230.pngbin0 -> 2797 bytes
-rwxr-xr-xapp/assets/images/emoji/clock130.pngbin0 -> 2842 bytes
-rwxr-xr-xapp/assets/images/emoji/clock2.pngbin0 -> 2595 bytes
-rwxr-xr-xapp/assets/images/emoji/clock230.pngbin0 -> 2853 bytes
-rwxr-xr-xapp/assets/images/emoji/clock3.pngbin0 -> 2492 bytes
-rwxr-xr-xapp/assets/images/emoji/clock330.pngbin0 -> 2739 bytes
-rwxr-xr-xapp/assets/images/emoji/clock4.pngbin0 -> 2619 bytes
-rwxr-xr-xapp/assets/images/emoji/clock430.pngbin0 -> 2847 bytes
-rwxr-xr-xapp/assets/images/emoji/clock5.pngbin0 -> 2624 bytes
-rwxr-xr-xapp/assets/images/emoji/clock530.pngbin0 -> 2832 bytes
-rwxr-xr-xapp/assets/images/emoji/clock6.pngbin0 -> 2577 bytes
-rwxr-xr-xapp/assets/images/emoji/clock630.pngbin0 -> 2730 bytes
-rwxr-xr-xapp/assets/images/emoji/clock7.pngbin0 -> 2615 bytes
-rwxr-xr-xapp/assets/images/emoji/clock730.pngbin0 -> 2820 bytes
-rwxr-xr-xapp/assets/images/emoji/clock8.pngbin0 -> 2603 bytes
-rwxr-xr-xapp/assets/images/emoji/clock830.pngbin0 -> 2847 bytes
-rwxr-xr-xapp/assets/images/emoji/clock9.pngbin0 -> 2486 bytes
-rwxr-xr-xapp/assets/images/emoji/clock930.pngbin0 -> 2746 bytes
-rwxr-xr-xapp/assets/images/emoji/closed_book.pngbin0 -> 4847 bytes
-rwxr-xr-xapp/assets/images/emoji/closed_lock_with_key.pngbin0 -> 5701 bytes
-rwxr-xr-xapp/assets/images/emoji/closed_umbrella.pngbin0 -> 3868 bytes
-rwxr-xr-xapp/assets/images/emoji/cloud.pngbin0 -> 3860 bytes
-rwxr-xr-xapp/assets/images/emoji/clubs.pngbin0 -> 1685 bytes
-rwxr-xr-xapp/assets/images/emoji/cn.pngbin0 -> 3634 bytes
-rwxr-xr-xapp/assets/images/emoji/cocktail.pngbin0 -> 2949 bytes
-rwxr-xr-xapp/assets/images/emoji/coffee.pngbin0 -> 4306 bytes
-rwxr-xr-xapp/assets/images/emoji/cold_sweat.pngbin0 -> 5972 bytes
-rwxr-xr-xapp/assets/images/emoji/collision.pngbin0 -> 3781 bytes
-rwxr-xr-xapp/assets/images/emoji/computer.pngbin0 -> 1705 bytes
-rwxr-xr-xapp/assets/images/emoji/confetti_ball.pngbin0 -> 5521 bytes
-rwxr-xr-xapp/assets/images/emoji/confounded.pngbin0 -> 5857 bytes
-rwxr-xr-xapp/assets/images/emoji/congratulations.pngbin0 -> 4883 bytes
-rwxr-xr-xapp/assets/images/emoji/construction.pngbin0 -> 3700 bytes
-rwxr-xr-xapp/assets/images/emoji/construction_worker.pngbin0 -> 6193 bytes
-rwxr-xr-xapp/assets/images/emoji/convenience_store.pngbin0 -> 4073 bytes
-rwxr-xr-xapp/assets/images/emoji/cookie.pngbin0 -> 8149 bytes
-rwxr-xr-xapp/assets/images/emoji/cool.pngbin0 -> 4182 bytes
-rwxr-xr-xapp/assets/images/emoji/cop.pngbin0 -> 7141 bytes
-rwxr-xr-xapp/assets/images/emoji/copyright.pngbin0 -> 1579 bytes
-rwxr-xr-xapp/assets/images/emoji/corn.pngbin0 -> 6694 bytes
-rwxr-xr-xapp/assets/images/emoji/couple.pngbin0 -> 7615 bytes
-rwxr-xr-xapp/assets/images/emoji/couple_with_heart.pngbin0 -> 7370 bytes
-rwxr-xr-xapp/assets/images/emoji/couplekiss.pngbin0 -> 7219 bytes
-rwxr-xr-xapp/assets/images/emoji/cow.pngbin0 -> 5745 bytes
-rwxr-xr-xapp/assets/images/emoji/cow2.pngbin0 -> 5303 bytes
-rwxr-xr-xapp/assets/images/emoji/credit_card.pngbin0 -> 2648 bytes
-rwxr-xr-xapp/assets/images/emoji/crocodile.pngbin0 -> 6125 bytes
-rwxr-xr-xapp/assets/images/emoji/crossed_flags.pngbin0 -> 4015 bytes
-rwxr-xr-xapp/assets/images/emoji/crown.pngbin0 -> 5655 bytes
-rwxr-xr-xapp/assets/images/emoji/cry.pngbin0 -> 5699 bytes
-rwxr-xr-xapp/assets/images/emoji/crying_cat_face.pngbin0 -> 6682 bytes
-rwxr-xr-xapp/assets/images/emoji/crystal_ball.pngbin0 -> 6236 bytes
-rwxr-xr-xapp/assets/images/emoji/cupid.pngbin0 -> 5413 bytes
-rwxr-xr-xapp/assets/images/emoji/curly_loop.pngbin0 -> 1264 bytes
-rwxr-xr-xapp/assets/images/emoji/currency_exchange.pngbin0 -> 1959 bytes
-rwxr-xr-xapp/assets/images/emoji/curry.pngbin0 -> 5336 bytes
-rwxr-xr-xapp/assets/images/emoji/custard.pngbin0 -> 5810 bytes
-rwxr-xr-xapp/assets/images/emoji/customs.pngbin0 -> 3899 bytes
-rwxr-xr-xapp/assets/images/emoji/cyclone.pngbin0 -> 4890 bytes
-rwxr-xr-xapp/assets/images/emoji/dancer.pngbin0 -> 3737 bytes
-rwxr-xr-xapp/assets/images/emoji/dancers.pngbin0 -> 7918 bytes
-rwxr-xr-xapp/assets/images/emoji/dango.pngbin0 -> 4449 bytes
-rwxr-xr-xapp/assets/images/emoji/dart.pngbin0 -> 5462 bytes
-rwxr-xr-xapp/assets/images/emoji/dash.pngbin0 -> 5448 bytes
-rwxr-xr-xapp/assets/images/emoji/date.pngbin0 -> 2977 bytes
-rwxr-xr-xapp/assets/images/emoji/de.pngbin0 -> 2640 bytes
-rwxr-xr-xapp/assets/images/emoji/deciduous_tree.pngbin0 -> 7374 bytes
-rwxr-xr-xapp/assets/images/emoji/department_store.pngbin0 -> 5159 bytes
-rwxr-xr-xapp/assets/images/emoji/diamond_shape_with_a_dot_inside.pngbin0 -> 5698 bytes
-rwxr-xr-xapp/assets/images/emoji/diamonds.pngbin0 -> 2785 bytes
-rwxr-xr-xapp/assets/images/emoji/disappointed.pngbin0 -> 4764 bytes
-rwxr-xr-xapp/assets/images/emoji/dizzy.pngbin0 -> 3044 bytes
-rwxr-xr-xapp/assets/images/emoji/dizzy_face.pngbin0 -> 6278 bytes
-rwxr-xr-xapp/assets/images/emoji/do_not_litter.pngbin0 -> 5277 bytes
-rwxr-xr-xapp/assets/images/emoji/dog.pngbin0 -> 5945 bytes
-rwxr-xr-xapp/assets/images/emoji/dog2.pngbin0 -> 5931 bytes
-rwxr-xr-xapp/assets/images/emoji/dollar.pngbin0 -> 4622 bytes
-rwxr-xr-xapp/assets/images/emoji/dolls.pngbin0 -> 7138 bytes
-rwxr-xr-xapp/assets/images/emoji/dolphin.pngbin0 -> 4343 bytes
-rwxr-xr-xapp/assets/images/emoji/door.pngbin0 -> 3310 bytes
-rwxr-xr-xapp/assets/images/emoji/doughnut.pngbin0 -> 5209 bytes
-rwxr-xr-xapp/assets/images/emoji/dragon.pngbin0 -> 7828 bytes
-rwxr-xr-xapp/assets/images/emoji/dragon_face.pngbin0 -> 6737 bytes
-rwxr-xr-xapp/assets/images/emoji/dress.pngbin0 -> 3631 bytes
-rwxr-xr-xapp/assets/images/emoji/dromedary_camel.pngbin0 -> 5139 bytes
-rwxr-xr-xapp/assets/images/emoji/droplet.pngbin0 -> 3278 bytes
-rwxr-xr-xapp/assets/images/emoji/dvd.pngbin0 -> 6993 bytes
-rwxr-xr-xapp/assets/images/emoji/e-mail.pngbin0 -> 2128 bytes
-rwxr-xr-xapp/assets/images/emoji/ear.pngbin0 -> 4335 bytes
-rwxr-xr-xapp/assets/images/emoji/ear_of_rice.pngbin0 -> 4758 bytes
-rwxr-xr-xapp/assets/images/emoji/earth_africa.pngbin0 -> 7164 bytes
-rwxr-xr-xapp/assets/images/emoji/earth_americas.pngbin0 -> 7039 bytes
-rwxr-xr-xapp/assets/images/emoji/earth_asia.pngbin0 -> 7303 bytes
-rwxr-xr-xapp/assets/images/emoji/egg.pngbin0 -> 5211 bytes
-rwxr-xr-xapp/assets/images/emoji/eggplant.pngbin0 -> 4672 bytes
-rwxr-xr-xapp/assets/images/emoji/eight.pngbin0 -> 3844 bytes
-rwxr-xr-xapp/assets/images/emoji/eight_pointed_black_star.pngbin0 -> 3289 bytes
-rwxr-xr-xapp/assets/images/emoji/eight_spoked_asterisk.pngbin0 -> 4012 bytes
-rwxr-xr-xapp/assets/images/emoji/electric_plug.pngbin0 -> 2819 bytes
-rwxr-xr-xapp/assets/images/emoji/elephant.pngbin0 -> 5086 bytes
-rwxr-xr-xapp/assets/images/emoji/email.pngbin0 -> 2697 bytes
-rwxr-xr-xapp/assets/images/emoji/end.pngbin0 -> 1475 bytes
-rwxr-xr-xapp/assets/images/emoji/envelope.pngbin0 -> 1655 bytes
-rwxr-xr-xapp/assets/images/emoji/es.pngbin0 -> 4302 bytes
-rwxr-xr-xapp/assets/images/emoji/euro.pngbin0 -> 3942 bytes
-rwxr-xr-xapp/assets/images/emoji/european_castle.pngbin0 -> 5427 bytes
-rwxr-xr-xapp/assets/images/emoji/european_post_office.pngbin0 -> 4816 bytes
-rwxr-xr-xapp/assets/images/emoji/evergreen_tree.pngbin0 -> 4924 bytes
-rwxr-xr-xapp/assets/images/emoji/exclamation.pngbin0 -> 1175 bytes
-rwxr-xr-xapp/assets/images/emoji/eyeglasses.pngbin0 -> 4929 bytes
-rwxr-xr-xapp/assets/images/emoji/eyes.pngbin0 -> 4398 bytes
-rwxr-xr-xapp/assets/images/emoji/facepunch.pngbin0 -> 4873 bytes
-rwxr-xr-xapp/assets/images/emoji/factory.pngbin0 -> 5558 bytes
-rwxr-xr-xapp/assets/images/emoji/fallen_leaf.pngbin0 -> 4890 bytes
-rwxr-xr-xapp/assets/images/emoji/family.pngbin0 -> 7211 bytes
-rwxr-xr-xapp/assets/images/emoji/fast_forward.pngbin0 -> 3105 bytes
-rwxr-xr-xapp/assets/images/emoji/fax.pngbin0 -> 4650 bytes
-rwxr-xr-xapp/assets/images/emoji/fearful.pngbin0 -> 5600 bytes
-rwxr-xr-xapp/assets/images/emoji/feelsgood.pngbin0 -> 1150 bytes
-rwxr-xr-xapp/assets/images/emoji/feet.pngbin0 -> 1529 bytes
-rwxr-xr-xapp/assets/images/emoji/ferris_wheel.pngbin0 -> 6213 bytes
-rwxr-xr-xapp/assets/images/emoji/file_folder.pngbin0 -> 4013 bytes
-rwxr-xr-xapp/assets/images/emoji/finnadie.pngbin0 -> 1186 bytes
-rwxr-xr-xapp/assets/images/emoji/fire.pngbin0 -> 3886 bytes
-rwxr-xr-xapp/assets/images/emoji/fire_engine.pngbin0 -> 4862 bytes
-rwxr-xr-xapp/assets/images/emoji/fireworks.pngbin0 -> 6269 bytes
-rwxr-xr-xapp/assets/images/emoji/first_quarter_moon.pngbin0 -> 5967 bytes
-rwxr-xr-xapp/assets/images/emoji/first_quarter_moon_with_face.pngbin0 -> 4280 bytes
-rwxr-xr-xapp/assets/images/emoji/fish.pngbin0 -> 4721 bytes
-rwxr-xr-xapp/assets/images/emoji/fish_cake.pngbin0 -> 5818 bytes
-rwxr-xr-xapp/assets/images/emoji/fishing_pole_and_fish.pngbin0 -> 4470 bytes
-rwxr-xr-xapp/assets/images/emoji/fist.pngbin0 -> 5880 bytes
-rwxr-xr-xapp/assets/images/emoji/five.pngbin0 -> 3593 bytes
-rwxr-xr-xapp/assets/images/emoji/flags.pngbin0 -> 6124 bytes
-rwxr-xr-xapp/assets/images/emoji/flashlight.pngbin0 -> 5024 bytes
-rwxr-xr-xapp/assets/images/emoji/floppy_disk.pngbin0 -> 3215 bytes
-rwxr-xr-xapp/assets/images/emoji/flower_playing_cards.pngbin0 -> 3434 bytes
-rwxr-xr-xapp/assets/images/emoji/flushed.pngbin0 -> 5845 bytes
-rwxr-xr-xapp/assets/images/emoji/foggy.pngbin0 -> 4623 bytes
-rwxr-xr-xapp/assets/images/emoji/football.pngbin0 -> 6712 bytes
-rwxr-xr-xapp/assets/images/emoji/fork_and_knife.pngbin0 -> 3608 bytes
-rwxr-xr-xapp/assets/images/emoji/fountain.pngbin0 -> 5087 bytes
-rwxr-xr-xapp/assets/images/emoji/four.pngbin0 -> 3176 bytes
-rwxr-xr-xapp/assets/images/emoji/four_leaf_clover.pngbin0 -> 5995 bytes
-rwxr-xr-xapp/assets/images/emoji/fr.pngbin0 -> 3398 bytes
-rwxr-xr-xapp/assets/images/emoji/free.pngbin0 -> 3605 bytes
-rwxr-xr-xapp/assets/images/emoji/fried_shrimp.pngbin0 -> 7550 bytes
-rwxr-xr-xapp/assets/images/emoji/fries.pngbin0 -> 6405 bytes
-rwxr-xr-xapp/assets/images/emoji/frog.pngbin0 -> 4823 bytes
-rwxr-xr-xapp/assets/images/emoji/fuelpump.pngbin0 -> 4296 bytes
-rwxr-xr-xapp/assets/images/emoji/full_moon.pngbin0 -> 6458 bytes
-rwxr-xr-xapp/assets/images/emoji/full_moon_with_face.pngbin0 -> 7224 bytes
-rwxr-xr-xapp/assets/images/emoji/game_die.pngbin0 -> 2957 bytes
-rwxr-xr-xapp/assets/images/emoji/gb.pngbin0 -> 5894 bytes
-rwxr-xr-xapp/assets/images/emoji/gem.pngbin0 -> 4855 bytes
-rwxr-xr-xapp/assets/images/emoji/gemini.pngbin0 -> 4296 bytes
-rwxr-xr-xapp/assets/images/emoji/ghost.pngbin0 -> 4513 bytes
-rwxr-xr-xapp/assets/images/emoji/gift.pngbin0 -> 6712 bytes
-rwxr-xr-xapp/assets/images/emoji/gift_heart.pngbin0 -> 6013 bytes
-rwxr-xr-xapp/assets/images/emoji/girl.pngbin0 -> 6314 bytes
-rwxr-xr-xapp/assets/images/emoji/globe_with_meridians.pngbin0 -> 5837 bytes
-rwxr-xr-xapp/assets/images/emoji/goat.pngbin0 -> 4889 bytes
-rwxr-xr-xapp/assets/images/emoji/goberserk.pngbin0 -> 1334 bytes
-rwxr-xr-xapp/assets/images/emoji/godmode.pngbin0 -> 1042 bytes
-rwxr-xr-xapp/assets/images/emoji/golf.pngbin0 -> 3548 bytes
-rwxr-xr-xapp/assets/images/emoji/grapes.pngbin0 -> 5423 bytes
-rwxr-xr-xapp/assets/images/emoji/green_apple.pngbin0 -> 6205 bytes
-rwxr-xr-xapp/assets/images/emoji/green_book.pngbin0 -> 5090 bytes
-rwxr-xr-xapp/assets/images/emoji/green_heart.pngbin0 -> 4432 bytes
-rwxr-xr-xapp/assets/images/emoji/grey_exclamation.pngbin0 -> 1142 bytes
-rwxr-xr-xapp/assets/images/emoji/grey_question.pngbin0 -> 1057 bytes
-rwxr-xr-xapp/assets/images/emoji/grin.pngbin0 -> 5721 bytes
-rwxr-xr-xapp/assets/images/emoji/guardsman.pngbin0 -> 3587 bytes
-rwxr-xr-xapp/assets/images/emoji/guitar.pngbin0 -> 4382 bytes
-rwxr-xr-xapp/assets/images/emoji/gun.pngbin0 -> 3161 bytes
-rwxr-xr-xapp/assets/images/emoji/haircut.pngbin0 -> 7100 bytes
-rwxr-xr-xapp/assets/images/emoji/hamburger.pngbin0 -> 5706 bytes
-rwxr-xr-xapp/assets/images/emoji/hammer.pngbin0 -> 3670 bytes
-rwxr-xr-xapp/assets/images/emoji/hamster.pngbin0 -> 7221 bytes
-rwxr-xr-xapp/assets/images/emoji/hand.pngbin0 -> 4161 bytes
-rwxr-xr-xapp/assets/images/emoji/handbag.pngbin0 -> 5449 bytes
-rwxr-xr-xapp/assets/images/emoji/hankey.pngbin0 -> 4754 bytes
-rwxr-xr-xapp/assets/images/emoji/hash.pngbin0 -> 3742 bytes
-rwxr-xr-xapp/assets/images/emoji/hatched_chick.pngbin0 -> 5646 bytes
-rwxr-xr-xapp/assets/images/emoji/hatching_chick.pngbin0 -> 5928 bytes
-rwxr-xr-xapp/assets/images/emoji/headphones.pngbin0 -> 1910 bytes
-rwxr-xr-xapp/assets/images/emoji/hear_no_evil.pngbin0 -> 6550 bytes
-rwxr-xr-xapp/assets/images/emoji/heart.pngbin0 -> 3302 bytes
-rwxr-xr-xapp/assets/images/emoji/heart_decoration.pngbin0 -> 3507 bytes
-rwxr-xr-xapp/assets/images/emoji/heart_eyes.pngbin0 -> 5758 bytes
-rwxr-xr-xapp/assets/images/emoji/heart_eyes_cat.pngbin0 -> 6176 bytes
-rwxr-xr-xapp/assets/images/emoji/heartbeat.pngbin0 -> 4052 bytes
-rwxr-xr-xapp/assets/images/emoji/heartpulse.pngbin0 -> 6269 bytes
-rwxr-xr-xapp/assets/images/emoji/hearts.pngbin0 -> 2925 bytes
-rwxr-xr-xapp/assets/images/emoji/heavy_check_mark.pngbin0 -> 1103 bytes
-rwxr-xr-xapp/assets/images/emoji/heavy_division_sign.pngbin0 -> 340 bytes
-rwxr-xr-xapp/assets/images/emoji/heavy_dollar_sign.pngbin0 -> 1416 bytes
-rwxr-xr-xapp/assets/images/emoji/heavy_exclamation_mark.pngbin0 -> 1315 bytes
-rwxr-xr-xapp/assets/images/emoji/heavy_minus_sign.pngbin0 -> 197 bytes
-rwxr-xr-xapp/assets/images/emoji/heavy_multiplication_x.pngbin0 -> 591 bytes
-rwxr-xr-xapp/assets/images/emoji/heavy_plus_sign.pngbin0 -> 315 bytes
-rwxr-xr-xapp/assets/images/emoji/helicopter.pngbin0 -> 4100 bytes
-rwxr-xr-xapp/assets/images/emoji/herb.pngbin0 -> 5889 bytes
-rwxr-xr-xapp/assets/images/emoji/hibiscus.pngbin0 -> 8322 bytes
-rwxr-xr-xapp/assets/images/emoji/high_brightness.pngbin0 -> 4060 bytes
-rwxr-xr-xapp/assets/images/emoji/high_heel.pngbin0 -> 4557 bytes
-rwxr-xr-xapp/assets/images/emoji/hocho.pngbin0 -> 2506 bytes
-rwxr-xr-xapp/assets/images/emoji/honey_pot.pngbin0 -> 5830 bytes
-rwxr-xr-xapp/assets/images/emoji/honeybee.pngbin0 -> 5851 bytes
-rwxr-xr-xapp/assets/images/emoji/horse.pngbin0 -> 4582 bytes
-rwxr-xr-xapp/assets/images/emoji/horse_racing.pngbin0 -> 5905 bytes
-rwxr-xr-xapp/assets/images/emoji/hospital.pngbin0 -> 4887 bytes
-rwxr-xr-xapp/assets/images/emoji/hotel.pngbin0 -> 5123 bytes
-rwxr-xr-xapp/assets/images/emoji/hotsprings.pngbin0 -> 3538 bytes
-rwxr-xr-xapp/assets/images/emoji/hourglass.pngbin0 -> 4492 bytes
-rwxr-xr-xapp/assets/images/emoji/house.pngbin0 -> 3510 bytes
-rwxr-xr-xapp/assets/images/emoji/hurtrealbad.pngbin0 -> 1456 bytes
-rwxr-xr-xapp/assets/images/emoji/ice_cream.pngbin0 -> 5469 bytes
-rwxr-xr-xapp/assets/images/emoji/icecream.pngbin0 -> 4603 bytes
-rwxr-xr-xapp/assets/images/emoji/id.pngbin0 -> 3905 bytes
-rwxr-xr-xapp/assets/images/emoji/ideograph_advantage.pngbin0 -> 3095 bytes
-rwxr-xr-xapp/assets/images/emoji/imp.pngbin0 -> 6631 bytes
-rwxr-xr-xapp/assets/images/emoji/inbox_tray.pngbin0 -> 3700 bytes
-rwxr-xr-xapp/assets/images/emoji/incoming_envelope.pngbin0 -> 2206 bytes
-rwxr-xr-xapp/assets/images/emoji/information_desk_person.pngbin0 -> 6605 bytes
-rwxr-xr-xapp/assets/images/emoji/information_source.pngbin0 -> 3670 bytes
-rwxr-xr-xapp/assets/images/emoji/innocent.pngbin0 -> 7000 bytes
-rwxr-xr-xapp/assets/images/emoji/interrobang.pngbin0 -> 2875 bytes
-rwxr-xr-xapp/assets/images/emoji/iphone.pngbin0 -> 3499 bytes
-rwxr-xr-xapp/assets/images/emoji/it.pngbin0 -> 3495 bytes
-rwxr-xr-xapp/assets/images/emoji/izakaya_lantern.pngbin0 -> 4064 bytes
-rwxr-xr-xapp/assets/images/emoji/jack_o_lantern.pngbin0 -> 5633 bytes
-rwxr-xr-xapp/assets/images/emoji/japan.pngbin0 -> 4085 bytes
-rwxr-xr-xapp/assets/images/emoji/japanese_castle.pngbin0 -> 4939 bytes
-rwxr-xr-xapp/assets/images/emoji/japanese_goblin.pngbin0 -> 5159 bytes
-rwxr-xr-xapp/assets/images/emoji/japanese_ogre.pngbin0 -> 7147 bytes
-rwxr-xr-xapp/assets/images/emoji/jeans.pngbin0 -> 3470 bytes
-rwxr-xr-xapp/assets/images/emoji/joy.pngbin0 -> 6339 bytes
-rwxr-xr-xapp/assets/images/emoji/joy_cat.pngbin0 -> 7190 bytes
-rwxr-xr-xapp/assets/images/emoji/jp.pngbin0 -> 2827 bytes
-rwxr-xr-xapp/assets/images/emoji/key.pngbin0 -> 3452 bytes
-rwxr-xr-xapp/assets/images/emoji/keycap_ten.pngbin0 -> 4095 bytes
-rwxr-xr-xapp/assets/images/emoji/kimono.pngbin0 -> 4938 bytes
-rwxr-xr-xapp/assets/images/emoji/kiss.pngbin0 -> 6276 bytes
-rwxr-xr-xapp/assets/images/emoji/kissing_cat.pngbin0 -> 6801 bytes
-rwxr-xr-xapp/assets/images/emoji/kissing_face.pngbin0 -> 5563 bytes
-rwxr-xr-xapp/assets/images/emoji/kissing_heart.pngbin0 -> 5767 bytes
-rwxr-xr-xapp/assets/images/emoji/koala.pngbin0 -> 5687 bytes
-rwxr-xr-xapp/assets/images/emoji/koko.pngbin0 -> 2854 bytes
-rwxr-xr-xapp/assets/images/emoji/kr.pngbin0 -> 5105 bytes
-rwxr-xr-xapp/assets/images/emoji/large_blue_circle.pngbin0 -> 4637 bytes
-rwxr-xr-xapp/assets/images/emoji/large_blue_diamond.pngbin0 -> 3790 bytes
-rwxr-xr-xapp/assets/images/emoji/large_orange_diamond.pngbin0 -> 3899 bytes
-rwxr-xr-xapp/assets/images/emoji/last_quarter_moon.pngbin0 -> 6176 bytes
-rwxr-xr-xapp/assets/images/emoji/last_quarter_moon_with_face.pngbin0 -> 4328 bytes
-rwxr-xr-xapp/assets/images/emoji/laughing.pngbin0 -> 6347 bytes
-rwxr-xr-xapp/assets/images/emoji/leaves.pngbin0 -> 5571 bytes
-rwxr-xr-xapp/assets/images/emoji/ledger.pngbin0 -> 5921 bytes
-rwxr-xr-xapp/assets/images/emoji/left_luggage.pngbin0 -> 4025 bytes
-rwxr-xr-xapp/assets/images/emoji/left_right_arrow.pngbin0 -> 3413 bytes
-rwxr-xr-xapp/assets/images/emoji/leftwards_arrow_with_hook.pngbin0 -> 3775 bytes
-rwxr-xr-xapp/assets/images/emoji/lemon.pngbin0 -> 6055 bytes
-rwxr-xr-xapp/assets/images/emoji/leo.pngbin0 -> 4913 bytes
-rwxr-xr-xapp/assets/images/emoji/leopard.pngbin0 -> 5384 bytes
-rwxr-xr-xapp/assets/images/emoji/libra.pngbin0 -> 4229 bytes
-rwxr-xr-xapp/assets/images/emoji/light_rail.pngbin0 -> 3792 bytes
-rwxr-xr-xapp/assets/images/emoji/link.pngbin0 -> 2652 bytes
-rwxr-xr-xapp/assets/images/emoji/lips.pngbin0 -> 3738 bytes
-rwxr-xr-xapp/assets/images/emoji/lipstick.pngbin0 -> 3384 bytes
-rwxr-xr-xapp/assets/images/emoji/lock.pngbin0 -> 3676 bytes
-rwxr-xr-xapp/assets/images/emoji/lock_with_ink_pen.pngbin0 -> 4967 bytes
-rwxr-xr-xapp/assets/images/emoji/lollipop.pngbin0 -> 5771 bytes
-rwxr-xr-xapp/assets/images/emoji/loop.pngbin0 -> 3417 bytes
-rwxr-xr-xapp/assets/images/emoji/loudspeaker.pngbin0 -> 6001 bytes
-rwxr-xr-xapp/assets/images/emoji/love_hotel.pngbin0 -> 5941 bytes
-rwxr-xr-xapp/assets/images/emoji/love_letter.pngbin0 -> 2467 bytes
-rwxr-xr-xapp/assets/images/emoji/low_brightness.pngbin0 -> 2498 bytes
-rwxr-xr-xapp/assets/images/emoji/m.pngbin0 -> 4737 bytes
-rwxr-xr-xapp/assets/images/emoji/mag.pngbin0 -> 3040 bytes
-rwxr-xr-xapp/assets/images/emoji/mag_right.pngbin0 -> 3629 bytes
-rwxr-xr-xapp/assets/images/emoji/mahjong.pngbin0 -> 3309 bytes
-rwxr-xr-xapp/assets/images/emoji/mailbox.pngbin0 -> 4196 bytes
-rwxr-xr-xapp/assets/images/emoji/mailbox_closed.pngbin0 -> 4360 bytes
-rwxr-xr-xapp/assets/images/emoji/mailbox_with_mail.pngbin0 -> 4581 bytes
-rwxr-xr-xapp/assets/images/emoji/mailbox_with_no_mail.pngbin0 -> 3101 bytes
-rwxr-xr-xapp/assets/images/emoji/man.pngbin0 -> 6023 bytes
-rwxr-xr-xapp/assets/images/emoji/man_with_gua_pi_mao.pngbin0 -> 5324 bytes
-rwxr-xr-xapp/assets/images/emoji/man_with_turban.pngbin0 -> 6528 bytes
-rwxr-xr-xapp/assets/images/emoji/mans_shoe.pngbin0 -> 4749 bytes
-rwxr-xr-xapp/assets/images/emoji/maple_leaf.pngbin0 -> 4450 bytes
-rwxr-xr-xapp/assets/images/emoji/mask.pngbin0 -> 5235 bytes
-rwxr-xr-xapp/assets/images/emoji/massage.pngbin0 -> 6036 bytes
-rwxr-xr-xapp/assets/images/emoji/meat_on_bone.pngbin0 -> 5534 bytes
-rwxr-xr-xapp/assets/images/emoji/mega.pngbin0 -> 4680 bytes
-rwxr-xr-xapp/assets/images/emoji/melon.pngbin0 -> 8233 bytes
-rwxr-xr-xapp/assets/images/emoji/memo.pngbin0 -> 4945 bytes
-rwxr-xr-xapp/assets/images/emoji/mens.pngbin0 -> 3368 bytes
-rwxr-xr-xapp/assets/images/emoji/metal.pngbin0 -> 3098 bytes
-rwxr-xr-xapp/assets/images/emoji/metro.pngbin0 -> 3402 bytes
-rwxr-xr-xapp/assets/images/emoji/microphone.pngbin0 -> 3680 bytes
-rwxr-xr-xapp/assets/images/emoji/microscope.pngbin0 -> 4141 bytes
-rwxr-xr-xapp/assets/images/emoji/milky_way.pngbin0 -> 5878 bytes
-rwxr-xr-xapp/assets/images/emoji/minibus.pngbin0 -> 3113 bytes
-rwxr-xr-xapp/assets/images/emoji/minidisc.pngbin0 -> 5594 bytes
-rwxr-xr-xapp/assets/images/emoji/mobile_phone_off.pngbin0 -> 3521 bytes
-rwxr-xr-xapp/assets/images/emoji/money_with_wings.pngbin0 -> 7586 bytes
-rwxr-xr-xapp/assets/images/emoji/moneybag.pngbin0 -> 5500 bytes
-rwxr-xr-xapp/assets/images/emoji/monkey.pngbin0 -> 4973 bytes
-rwxr-xr-xapp/assets/images/emoji/monkey_face.pngbin0 -> 5348 bytes
-rwxr-xr-xapp/assets/images/emoji/monorail.pngbin0 -> 4311 bytes
-rwxr-xr-xapp/assets/images/emoji/moon.pngbin0 -> 3541 bytes
-rwxr-xr-xapp/assets/images/emoji/mortar_board.pngbin0 -> 4165 bytes
-rwxr-xr-xapp/assets/images/emoji/mount_fuji.pngbin0 -> 5004 bytes
-rwxr-xr-xapp/assets/images/emoji/mountain_bicyclist.pngbin0 -> 9511 bytes
-rwxr-xr-xapp/assets/images/emoji/mountain_cableway.pngbin0 -> 4405 bytes
-rwxr-xr-xapp/assets/images/emoji/mountain_railway.pngbin0 -> 7448 bytes
-rwxr-xr-xapp/assets/images/emoji/mouse.pngbin0 -> 6625 bytes
-rwxr-xr-xapp/assets/images/emoji/mouse2.pngbin0 -> 4087 bytes
-rwxr-xr-xapp/assets/images/emoji/movie_camera.pngbin0 -> 4081 bytes
-rwxr-xr-xapp/assets/images/emoji/moyai.pngbin0 -> 2166 bytes
-rwxr-xr-xapp/assets/images/emoji/muscle.pngbin0 -> 4672 bytes
-rwxr-xr-xapp/assets/images/emoji/mushroom.pngbin0 -> 4887 bytes
-rwxr-xr-xapp/assets/images/emoji/musical_keyboard.pngbin0 -> 1944 bytes
-rwxr-xr-xapp/assets/images/emoji/musical_note.pngbin0 -> 3188 bytes
-rwxr-xr-xapp/assets/images/emoji/musical_score.pngbin0 -> 1576 bytes
-rwxr-xr-xapp/assets/images/emoji/mute.pngbin0 -> 6635 bytes
-rwxr-xr-xapp/assets/images/emoji/nail_care.pngbin0 -> 5814 bytes
-rwxr-xr-xapp/assets/images/emoji/name_badge.pngbin0 -> 3985 bytes
-rwxr-xr-xapp/assets/images/emoji/neckbeard.pngbin0 -> 6421 bytes
-rwxr-xr-xapp/assets/images/emoji/necktie.pngbin0 -> 6116 bytes
-rwxr-xr-xapp/assets/images/emoji/negative_squared_cross_mark.pngbin0 -> 3853 bytes
-rwxr-xr-xapp/assets/images/emoji/neutral_face.pngbin0 -> 4843 bytes
-rwxr-xr-xapp/assets/images/emoji/new.pngbin0 -> 3927 bytes
-rwxr-xr-xapp/assets/images/emoji/new_moon.pngbin0 -> 5371 bytes
-rwxr-xr-xapp/assets/images/emoji/new_moon_with_face.pngbin0 -> 6750 bytes
-rwxr-xr-xapp/assets/images/emoji/newspaper.pngbin0 -> 5198 bytes
-rwxr-xr-xapp/assets/images/emoji/ng.pngbin0 -> 4201 bytes
-rwxr-xr-xapp/assets/images/emoji/nine.pngbin0 -> 3776 bytes
-rwxr-xr-xapp/assets/images/emoji/no_bell.pngbin0 -> 5944 bytes
-rwxr-xr-xapp/assets/images/emoji/no_bicycles.pngbin0 -> 5661 bytes
-rwxr-xr-xapp/assets/images/emoji/no_entry.pngbin0 -> 3514 bytes
-rwxr-xr-xapp/assets/images/emoji/no_entry_sign.pngbin0 -> 3288 bytes
-rwxr-xr-xapp/assets/images/emoji/no_good.pngbin0 -> 7034 bytes
-rwxr-xr-xapp/assets/images/emoji/no_mobile_phones.pngbin0 -> 5083 bytes
-rwxr-xr-xapp/assets/images/emoji/no_mouth.pngbin0 -> 4732 bytes
-rwxr-xr-xapp/assets/images/emoji/no_pedestrians.pngbin0 -> 5487 bytes
-rwxr-xr-xapp/assets/images/emoji/no_smoking.pngbin0 -> 4212 bytes
-rwxr-xr-xapp/assets/images/emoji/non-potable_water.pngbin0 -> 5202 bytes
-rwxr-xr-xapp/assets/images/emoji/nose.pngbin0 -> 3703 bytes
-rwxr-xr-xapp/assets/images/emoji/notebook.pngbin0 -> 6036 bytes
-rwxr-xr-xapp/assets/images/emoji/notebook_with_decorative_cover.pngbin0 -> 5329 bytes
-rwxr-xr-xapp/assets/images/emoji/notes.pngbin0 -> 1536 bytes
-rwxr-xr-xapp/assets/images/emoji/nut_and_bolt.pngbin0 -> 2169 bytes
-rwxr-xr-xapp/assets/images/emoji/o.pngbin0 -> 2542 bytes
-rwxr-xr-xapp/assets/images/emoji/o2.pngbin0 -> 3498 bytes
-rwxr-xr-xapp/assets/images/emoji/ocean.pngbin0 -> 5777 bytes
-rwxr-xr-xapp/assets/images/emoji/octocat.pngbin0 -> 3933 bytes
-rwxr-xr-xapp/assets/images/emoji/octopus.pngbin0 -> 5779 bytes
-rwxr-xr-xapp/assets/images/emoji/oden.pngbin0 -> 5543 bytes
-rwxr-xr-xapp/assets/images/emoji/office.pngbin0 -> 5162 bytes
-rwxr-xr-xapp/assets/images/emoji/ok.pngbin0 -> 4158 bytes
-rwxr-xr-xapp/assets/images/emoji/ok_hand.pngbin0 -> 4598 bytes
-rwxr-xr-xapp/assets/images/emoji/ok_woman.pngbin0 -> 7527 bytes
-rwxr-xr-xapp/assets/images/emoji/older_man.pngbin0 -> 6733 bytes
-rwxr-xr-xapp/assets/images/emoji/older_woman.pngbin0 -> 5977 bytes
-rwxr-xr-xapp/assets/images/emoji/on.pngbin0 -> 1806 bytes
-rwxr-xr-xapp/assets/images/emoji/oncoming_automobile.pngbin0 -> 7469 bytes
-rwxr-xr-xapp/assets/images/emoji/oncoming_bus.pngbin0 -> 5305 bytes
-rwxr-xr-xapp/assets/images/emoji/oncoming_police_car.pngbin0 -> 5683 bytes
-rwxr-xr-xapp/assets/images/emoji/oncoming_taxi.pngbin0 -> 6287 bytes
-rwxr-xr-xapp/assets/images/emoji/one.pngbin0 -> 2825 bytes
-rwxr-xr-xapp/assets/images/emoji/open_file_folder.pngbin0 -> 4292 bytes
-rwxr-xr-xapp/assets/images/emoji/open_hands.pngbin0 -> 4951 bytes
-rwxr-xr-xapp/assets/images/emoji/ophiuchus.pngbin0 -> 4434 bytes
-rwxr-xr-xapp/assets/images/emoji/orange_book.pngbin0 -> 5085 bytes
-rwxr-xr-xapp/assets/images/emoji/outbox_tray.pngbin0 -> 3683 bytes
-rwxr-xr-xapp/assets/images/emoji/ox.pngbin0 -> 6079 bytes
-rwxr-xr-xapp/assets/images/emoji/page_facing_up.pngbin0 -> 2183 bytes
-rwxr-xr-xapp/assets/images/emoji/page_with_curl.pngbin0 -> 3729 bytes
-rwxr-xr-xapp/assets/images/emoji/pager.pngbin0 -> 4022 bytes
-rwxr-xr-xapp/assets/images/emoji/palm_tree.pngbin0 -> 3664 bytes
-rwxr-xr-xapp/assets/images/emoji/panda_face.pngbin0 -> 4814 bytes
-rwxr-xr-xapp/assets/images/emoji/paperclip.pngbin0 -> 2558 bytes
-rwxr-xr-xapp/assets/images/emoji/parking.pngbin0 -> 3083 bytes
-rwxr-xr-xapp/assets/images/emoji/part_alternation_mark.pngbin0 -> 2685 bytes
-rwxr-xr-xapp/assets/images/emoji/partly_sunny.pngbin0 -> 5181 bytes
-rwxr-xr-xapp/assets/images/emoji/passport_control.pngbin0 -> 4018 bytes
-rwxr-xr-xapp/assets/images/emoji/paw_prints.pngbin0 -> 2471 bytes
-rwxr-xr-xapp/assets/images/emoji/peach.pngbin0 -> 5920 bytes
-rwxr-xr-xapp/assets/images/emoji/pear.pngbin0 -> 6936 bytes
-rwxr-xr-xapp/assets/images/emoji/pencil.pngbin0 -> 4945 bytes
-rwxr-xr-xapp/assets/images/emoji/pencil2.pngbin0 -> 4450 bytes
-rwxr-xr-xapp/assets/images/emoji/penguin.pngbin0 -> 4746 bytes
-rwxr-xr-xapp/assets/images/emoji/pensive.pngbin0 -> 5062 bytes
-rwxr-xr-xapp/assets/images/emoji/performing_arts.pngbin0 -> 6287 bytes
-rwxr-xr-xapp/assets/images/emoji/persevere.pngbin0 -> 5519 bytes
-rwxr-xr-xapp/assets/images/emoji/person_frowning.pngbin0 -> 4826 bytes
-rwxr-xr-xapp/assets/images/emoji/person_with_blond_hair.pngbin0 -> 6622 bytes
-rwxr-xr-xapp/assets/images/emoji/person_with_pouting_face.pngbin0 -> 5428 bytes
-rwxr-xr-xapp/assets/images/emoji/phone.pngbin0 -> 5495 bytes
-rwxr-xr-xapp/assets/images/emoji/pig.pngbin0 -> 5996 bytes
-rwxr-xr-xapp/assets/images/emoji/pig2.pngbin0 -> 4797 bytes
-rwxr-xr-xapp/assets/images/emoji/pig_nose.pngbin0 -> 4761 bytes
-rwxr-xr-xapp/assets/images/emoji/pill.pngbin0 -> 5022 bytes
-rwxr-xr-xapp/assets/images/emoji/pineapple.pngbin0 -> 5634 bytes
-rwxr-xr-xapp/assets/images/emoji/pisces.pngbin0 -> 4458 bytes
-rwxr-xr-xapp/assets/images/emoji/pizza.pngbin0 -> 5273 bytes
-rwxr-xr-xapp/assets/images/emoji/plus1.pngbin0 -> 5075 bytes
-rwxr-xr-xapp/assets/images/emoji/point_down.pngbin0 -> 3225 bytes
-rwxr-xr-xapp/assets/images/emoji/point_left.pngbin0 -> 3085 bytes
-rwxr-xr-xapp/assets/images/emoji/point_right.pngbin0 -> 3079 bytes
-rwxr-xr-xapp/assets/images/emoji/point_up.pngbin0 -> 3431 bytes
-rwxr-xr-xapp/assets/images/emoji/point_up_2.pngbin0 -> 3181 bytes
-rwxr-xr-xapp/assets/images/emoji/police_car.pngbin0 -> 3349 bytes
-rwxr-xr-xapp/assets/images/emoji/poodle.pngbin0 -> 6852 bytes
-rwxr-xr-xapp/assets/images/emoji/poop.pngbin0 -> 4754 bytes
-rwxr-xr-xapp/assets/images/emoji/post_office.pngbin0 -> 5136 bytes
-rwxr-xr-xapp/assets/images/emoji/postal_horn.pngbin0 -> 4819 bytes
-rwxr-xr-xapp/assets/images/emoji/postbox.pngbin0 -> 3388 bytes
-rwxr-xr-xapp/assets/images/emoji/potable_water.pngbin0 -> 3934 bytes
-rwxr-xr-xapp/assets/images/emoji/pouch.pngbin0 -> 4691 bytes
-rwxr-xr-xapp/assets/images/emoji/poultry_leg.pngbin0 -> 4200 bytes
-rwxr-xr-xapp/assets/images/emoji/pound.pngbin0 -> 4235 bytes
-rwxr-xr-xapp/assets/images/emoji/pouting_cat.pngbin0 -> 4918 bytes
-rwxr-xr-xapp/assets/images/emoji/pray.pngbin0 -> 6203 bytes
-rwxr-xr-xapp/assets/images/emoji/princess.pngbin0 -> 7920 bytes
-rwxr-xr-xapp/assets/images/emoji/punch.pngbin0 -> 4833 bytes
-rwxr-xr-xapp/assets/images/emoji/purple_heart.pngbin0 -> 4295 bytes
-rwxr-xr-xapp/assets/images/emoji/purse.pngbin0 -> 5033 bytes
-rwxr-xr-xapp/assets/images/emoji/pushpin.pngbin0 -> 3793 bytes
-rwxr-xr-xapp/assets/images/emoji/put_litter_in_its_place.pngbin0 -> 4091 bytes
-rwxr-xr-xapp/assets/images/emoji/question.pngbin0 -> 1711 bytes
-rwxr-xr-xapp/assets/images/emoji/rabbit.pngbin0 -> 5677 bytes
-rwxr-xr-xapp/assets/images/emoji/rabbit2.pngbin0 -> 4517 bytes
-rwxr-xr-xapp/assets/images/emoji/racehorse.pngbin0 -> 4735 bytes
-rwxr-xr-xapp/assets/images/emoji/radio.pngbin0 -> 6150 bytes
-rwxr-xr-xapp/assets/images/emoji/radio_button.pngbin0 -> 2198 bytes
-rwxr-xr-xapp/assets/images/emoji/rage.pngbin0 -> 5410 bytes
-rwxr-xr-xapp/assets/images/emoji/rage1.pngbin0 -> 1086 bytes
-rwxr-xr-xapp/assets/images/emoji/rage2.pngbin0 -> 1098 bytes
-rwxr-xr-xapp/assets/images/emoji/rage3.pngbin0 -> 1119 bytes
-rwxr-xr-xapp/assets/images/emoji/rage4.pngbin0 -> 1270 bytes
-rwxr-xr-xapp/assets/images/emoji/railway_car.pngbin0 -> 3648 bytes
-rwxr-xr-xapp/assets/images/emoji/rainbow.pngbin0 -> 5314 bytes
-rwxr-xr-xapp/assets/images/emoji/raised_hand.pngbin0 -> 6177 bytes
-rwxr-xr-xapp/assets/images/emoji/raised_hands.pngbin0 -> 5375 bytes
-rwxr-xr-xapp/assets/images/emoji/ram.pngbin0 -> 6531 bytes
-rwxr-xr-xapp/assets/images/emoji/ramen.pngbin0 -> 6574 bytes
-rwxr-xr-xapp/assets/images/emoji/rat.pngbin0 -> 5441 bytes
-rwxr-xr-xapp/assets/images/emoji/recycle.pngbin0 -> 3704 bytes
-rwxr-xr-xapp/assets/images/emoji/red_car.pngbin0 -> 4278 bytes
-rwxr-xr-xapp/assets/images/emoji/red_circle.pngbin0 -> 3946 bytes
-rwxr-xr-xapp/assets/images/emoji/registered.pngbin0 -> 1613 bytes
-rwxr-xr-xapp/assets/images/emoji/relaxed.pngbin0 -> 5455 bytes
-rwxr-xr-xapp/assets/images/emoji/relieved.pngbin0 -> 5648 bytes
-rwxr-xr-xapp/assets/images/emoji/repeat.pngbin0 -> 4009 bytes
-rwxr-xr-xapp/assets/images/emoji/repeat_one.pngbin0 -> 4287 bytes
-rwxr-xr-xapp/assets/images/emoji/restroom.pngbin0 -> 4142 bytes
-rwxr-xr-xapp/assets/images/emoji/revolving_hearts.pngbin0 -> 5472 bytes
-rwxr-xr-xapp/assets/images/emoji/rewind.pngbin0 -> 3056 bytes
-rwxr-xr-xapp/assets/images/emoji/ribbon.pngbin0 -> 5581 bytes
-rwxr-xr-xapp/assets/images/emoji/rice.pngbin0 -> 4645 bytes
-rwxr-xr-xapp/assets/images/emoji/rice_ball.pngbin0 -> 5408 bytes
-rwxr-xr-xapp/assets/images/emoji/rice_cracker.pngbin0 -> 7787 bytes
-rwxr-xr-xapp/assets/images/emoji/rice_scene.pngbin0 -> 6261 bytes
-rwxr-xr-xapp/assets/images/emoji/ring.pngbin0 -> 5232 bytes
-rwxr-xr-xapp/assets/images/emoji/rocket.pngbin0 -> 5388 bytes
-rwxr-xr-xapp/assets/images/emoji/roller_coaster.pngbin0 -> 5148 bytes
-rwxr-xr-xapp/assets/images/emoji/rooster.pngbin0 -> 6168 bytes
-rwxr-xr-xapp/assets/images/emoji/rose.pngbin0 -> 4202 bytes
-rwxr-xr-xapp/assets/images/emoji/rotating_light.pngbin0 -> 6620 bytes
-rwxr-xr-xapp/assets/images/emoji/round_pushpin.pngbin0 -> 1936 bytes
-rwxr-xr-xapp/assets/images/emoji/rowboat.pngbin0 -> 5433 bytes
-rwxr-xr-xapp/assets/images/emoji/ru.pngbin0 -> 3920 bytes
-rwxr-xr-xapp/assets/images/emoji/rugby_football.pngbin0 -> 7781 bytes
-rwxr-xr-xapp/assets/images/emoji/runner.pngbin0 -> 3137 bytes
-rwxr-xr-xapp/assets/images/emoji/running.pngbin0 -> 3214 bytes
-rwxr-xr-xapp/assets/images/emoji/running_shirt_with_sash.pngbin0 -> 5701 bytes
-rwxr-xr-xapp/assets/images/emoji/sa.pngbin0 -> 3556 bytes
-rwxr-xr-xapp/assets/images/emoji/sagittarius.pngbin0 -> 4505 bytes
-rwxr-xr-xapp/assets/images/emoji/sailboat.pngbin0 -> 3833 bytes
-rwxr-xr-xapp/assets/images/emoji/sake.pngbin0 -> 5073 bytes
-rwxr-xr-xapp/assets/images/emoji/sandal.pngbin0 -> 3974 bytes
-rwxr-xr-xapp/assets/images/emoji/santa.pngbin0 -> 6271 bytes
-rwxr-xr-xapp/assets/images/emoji/satellite.pngbin0 -> 4867 bytes
-rwxr-xr-xapp/assets/images/emoji/satisfied.pngbin0 -> 5364 bytes
-rwxr-xr-xapp/assets/images/emoji/saxophone.pngbin0 -> 4252 bytes
-rwxr-xr-xapp/assets/images/emoji/school.pngbin0 -> 5446 bytes
-rwxr-xr-xapp/assets/images/emoji/school_satchel.pngbin0 -> 5741 bytes
-rwxr-xr-xapp/assets/images/emoji/scissors.pngbin0 -> 3839 bytes
-rwxr-xr-xapp/assets/images/emoji/scorpius.pngbin0 -> 4566 bytes
-rwxr-xr-xapp/assets/images/emoji/scream.pngbin0 -> 6482 bytes
-rwxr-xr-xapp/assets/images/emoji/scream_cat.pngbin0 -> 6844 bytes
-rwxr-xr-xapp/assets/images/emoji/scroll.pngbin0 -> 6749 bytes
-rwxr-xr-xapp/assets/images/emoji/seat.pngbin0 -> 6059 bytes
-rwxr-xr-xapp/assets/images/emoji/secret.pngbin0 -> 5364 bytes
-rwxr-xr-xapp/assets/images/emoji/see_no_evil.pngbin0 -> 6828 bytes
-rwxr-xr-xapp/assets/images/emoji/seedling.pngbin0 -> 2260 bytes
-rwxr-xr-xapp/assets/images/emoji/seven.pngbin0 -> 3055 bytes
-rwxr-xr-xapp/assets/images/emoji/shaved_ice.pngbin0 -> 5908 bytes
-rwxr-xr-xapp/assets/images/emoji/sheep.pngbin0 -> 4732 bytes
-rwxr-xr-xapp/assets/images/emoji/shell.pngbin0 -> 5115 bytes
-rwxr-xr-xapp/assets/images/emoji/ship.pngbin0 -> 4233 bytes
-rwxr-xr-xapp/assets/images/emoji/shipit.pngbin0 -> 9351 bytes
-rwxr-xr-xapp/assets/images/emoji/shirt.pngbin0 -> 4676 bytes
-rwxr-xr-xapp/assets/images/emoji/shit.pngbin0 -> 4754 bytes
-rwxr-xr-xapp/assets/images/emoji/shoe.pngbin0 -> 4799 bytes
-rwxr-xr-xapp/assets/images/emoji/shower.pngbin0 -> 7583 bytes
-rwxr-xr-xapp/assets/images/emoji/signal_strength.pngbin0 -> 3231 bytes
-rwxr-xr-xapp/assets/images/emoji/six.pngbin0 -> 3791 bytes
-rwxr-xr-xapp/assets/images/emoji/six_pointed_star.pngbin0 -> 4859 bytes
-rwxr-xr-xapp/assets/images/emoji/ski.pngbin0 -> 4167 bytes
-rwxr-xr-xapp/assets/images/emoji/skull.pngbin0 -> 2428 bytes
-rwxr-xr-xapp/assets/images/emoji/sleepy.pngbin0 -> 5837 bytes
-rwxr-xr-xapp/assets/images/emoji/slot_machine.pngbin0 -> 4605 bytes
-rwxr-xr-xapp/assets/images/emoji/small_blue_diamond.pngbin0 -> 1898 bytes
-rwxr-xr-xapp/assets/images/emoji/small_orange_diamond.pngbin0 -> 1944 bytes
-rwxr-xr-xapp/assets/images/emoji/small_red_triangle.pngbin0 -> 2054 bytes
-rwxr-xr-xapp/assets/images/emoji/small_red_triangle_down.pngbin0 -> 2157 bytes
-rwxr-xr-xapp/assets/images/emoji/smile.pngbin0 -> 5890 bytes
-rwxr-xr-xapp/assets/images/emoji/smile_cat.pngbin0 -> 6117 bytes
-rwxr-xr-xapp/assets/images/emoji/smiley.pngbin0 -> 5794 bytes
-rwxr-xr-xapp/assets/images/emoji/smiley_cat.pngbin0 -> 6083 bytes
-rwxr-xr-xapp/assets/images/emoji/smiling_imp.pngbin0 -> 7189 bytes
-rwxr-xr-xapp/assets/images/emoji/smirk.pngbin0 -> 5307 bytes
-rwxr-xr-xapp/assets/images/emoji/smirk_cat.pngbin0 -> 6062 bytes
-rwxr-xr-xapp/assets/images/emoji/smoking.pngbin0 -> 2875 bytes
-rwxr-xr-xapp/assets/images/emoji/snail.pngbin0 -> 6657 bytes
-rwxr-xr-xapp/assets/images/emoji/snake.pngbin0 -> 4069 bytes
-rwxr-xr-xapp/assets/images/emoji/snowboarder.pngbin0 -> 5356 bytes
-rwxr-xr-xapp/assets/images/emoji/snowflake.pngbin0 -> 5637 bytes
-rwxr-xr-xapp/assets/images/emoji/snowman.pngbin0 -> 4658 bytes
-rwxr-xr-xapp/assets/images/emoji/sob.pngbin0 -> 5709 bytes
-rwxr-xr-xapp/assets/images/emoji/soccer.pngbin0 -> 4878 bytes
-rwxr-xr-xapp/assets/images/emoji/soon.pngbin0 -> 1911 bytes
-rwxr-xr-xapp/assets/images/emoji/sos.pngbin0 -> 4262 bytes
-rwxr-xr-xapp/assets/images/emoji/sound.pngbin0 -> 5024 bytes
-rwxr-xr-xapp/assets/images/emoji/space_invader.pngbin0 -> 4353 bytes
-rwxr-xr-xapp/assets/images/emoji/spades.pngbin0 -> 1719 bytes
-rwxr-xr-xapp/assets/images/emoji/spaghetti.pngbin0 -> 6955 bytes
-rwxr-xr-xapp/assets/images/emoji/sparkler.pngbin0 -> 5696 bytes
-rwxr-xr-xapp/assets/images/emoji/sparkles.pngbin0 -> 2212 bytes
-rwxr-xr-xapp/assets/images/emoji/speak_no_evil.pngbin0 -> 5977 bytes
-rwxr-xr-xapp/assets/images/emoji/speaker.pngbin0 -> 5173 bytes
-rwxr-xr-xapp/assets/images/emoji/speech_balloon.pngbin0 -> 2130 bytes
-rwxr-xr-xapp/assets/images/emoji/speedboat.pngbin0 -> 3512 bytes
-rwxr-xr-xapp/assets/images/emoji/squirrel.pngbin0 -> 9351 bytes
-rwxr-xr-xapp/assets/images/emoji/star.pngbin0 -> 3628 bytes
-rwxr-xr-xapp/assets/images/emoji/star2.pngbin0 -> 4068 bytes
-rwxr-xr-xapp/assets/images/emoji/stars.pngbin0 -> 4366 bytes
-rwxr-xr-xapp/assets/images/emoji/station.pngbin0 -> 4836 bytes
-rwxr-xr-xapp/assets/images/emoji/statue_of_liberty.pngbin0 -> 6075 bytes
-rwxr-xr-xapp/assets/images/emoji/steam_locomotive.pngbin0 -> 5159 bytes
-rwxr-xr-xapp/assets/images/emoji/stew.pngbin0 -> 5365 bytes
-rwxr-xr-xapp/assets/images/emoji/straight_ruler.pngbin0 -> 3832 bytes
-rwxr-xr-xapp/assets/images/emoji/strawberry.pngbin0 -> 5477 bytes
-rwxr-xr-xapp/assets/images/emoji/sun_with_face.pngbin0 -> 7958 bytes
-rwxr-xr-xapp/assets/images/emoji/sunflower.pngbin0 -> 6567 bytes
-rwxr-xr-xapp/assets/images/emoji/sunglasses.pngbin0 -> 5749 bytes
-rwxr-xr-xapp/assets/images/emoji/sunny.pngbin0 -> 3802 bytes
-rwxr-xr-xapp/assets/images/emoji/sunrise.pngbin0 -> 3914 bytes
-rwxr-xr-xapp/assets/images/emoji/sunrise_over_mountains.pngbin0 -> 6594 bytes
-rwxr-xr-xapp/assets/images/emoji/surfer.pngbin0 -> 6259 bytes
-rwxr-xr-xapp/assets/images/emoji/sushi.pngbin0 -> 5257 bytes
-rwxr-xr-xapp/assets/images/emoji/suspect.pngbin0 -> 1016 bytes
-rwxr-xr-xapp/assets/images/emoji/suspension_railway.pngbin0 -> 3937 bytes
-rwxr-xr-xapp/assets/images/emoji/sweat.pngbin0 -> 5576 bytes
-rwxr-xr-xapp/assets/images/emoji/sweat_drops.pngbin0 -> 4782 bytes
-rwxr-xr-xapp/assets/images/emoji/sweat_smile.pngbin0 -> 6519 bytes
-rwxr-xr-xapp/assets/images/emoji/sweet_potato.pngbin0 -> 5684 bytes
-rwxr-xr-xapp/assets/images/emoji/swimmer.pngbin0 -> 4378 bytes
-rwxr-xr-xapp/assets/images/emoji/symbols.pngbin0 -> 5434 bytes
-rwxr-xr-xapp/assets/images/emoji/syringe.pngbin0 -> 3040 bytes
-rwxr-xr-xapp/assets/images/emoji/tada.pngbin0 -> 5945 bytes
-rwxr-xr-xapp/assets/images/emoji/tanabata_tree.pngbin0 -> 4409 bytes
-rwxr-xr-xapp/assets/images/emoji/tangerine.pngbin0 -> 6645 bytes
-rwxr-xr-xapp/assets/images/emoji/taurus.pngbin0 -> 4733 bytes
-rwxr-xr-xapp/assets/images/emoji/taxi.pngbin0 -> 3744 bytes
-rwxr-xr-xapp/assets/images/emoji/tea.pngbin0 -> 5954 bytes
-rwxr-xr-xapp/assets/images/emoji/telephone.pngbin0 -> 5495 bytes
-rwxr-xr-xapp/assets/images/emoji/telephone_receiver.pngbin0 -> 2001 bytes
-rwxr-xr-xapp/assets/images/emoji/telescope.pngbin0 -> 3322 bytes
-rwxr-xr-xapp/assets/images/emoji/tennis.pngbin0 -> 5976 bytes
-rwxr-xr-xapp/assets/images/emoji/tent.pngbin0 -> 4482 bytes
-rwxr-xr-xapp/assets/images/emoji/thought_balloon.pngbin0 -> 2582 bytes
-rwxr-xr-xapp/assets/images/emoji/three.pngbin0 -> 3758 bytes
-rwxr-xr-xapp/assets/images/emoji/thumbsdown.pngbin0 -> 5070 bytes
-rwxr-xr-xapp/assets/images/emoji/thumbsup.pngbin0 -> 5075 bytes
-rwxr-xr-xapp/assets/images/emoji/ticket.pngbin0 -> 3091 bytes
-rwxr-xr-xapp/assets/images/emoji/tiger.pngbin0 -> 6051 bytes
-rwxr-xr-xapp/assets/images/emoji/tiger2.pngbin0 -> 5744 bytes
-rwxr-xr-xapp/assets/images/emoji/tired_face.pngbin0 -> 6178 bytes
-rwxr-xr-xapp/assets/images/emoji/tm.pngbin0 -> 842 bytes
-rwxr-xr-xapp/assets/images/emoji/toilet.pngbin0 -> 1733 bytes
-rwxr-xr-xapp/assets/images/emoji/tokyo_tower.pngbin0 -> 4802 bytes
-rwxr-xr-xapp/assets/images/emoji/tomato.pngbin0 -> 5748 bytes
-rwxr-xr-xapp/assets/images/emoji/tongue.pngbin0 -> 5785 bytes
-rwxr-xr-xapp/assets/images/emoji/tongue2.pngbin0 -> 3662 bytes
-rwxr-xr-xapp/assets/images/emoji/top.pngbin0 -> 3785 bytes
-rwxr-xr-xapp/assets/images/emoji/tophat.pngbin0 -> 3009 bytes
-rwxr-xr-xapp/assets/images/emoji/tractor.pngbin0 -> 5671 bytes
-rwxr-xr-xapp/assets/images/emoji/traffic_light.pngbin0 -> 3545 bytes
-rwxr-xr-xapp/assets/images/emoji/train.pngbin0 -> 3905 bytes
-rwxr-xr-xapp/assets/images/emoji/train2.pngbin0 -> 4817 bytes
-rwxr-xr-xapp/assets/images/emoji/tram.pngbin0 -> 4869 bytes
-rwxr-xr-xapp/assets/images/emoji/triangular_flag_on_post.pngbin0 -> 1399 bytes
-rwxr-xr-xapp/assets/images/emoji/triangular_ruler.pngbin0 -> 2706 bytes
-rwxr-xr-xapp/assets/images/emoji/trident.pngbin0 -> 4833 bytes
-rwxr-xr-xapp/assets/images/emoji/triumph.pngbin0 -> 6164 bytes
-rwxr-xr-xapp/assets/images/emoji/trolleybus.pngbin0 -> 4431 bytes
-rwxr-xr-xapp/assets/images/emoji/trollface.pngbin0 -> 4905 bytes
-rwxr-xr-xapp/assets/images/emoji/trophy.pngbin0 -> 5520 bytes
-rwxr-xr-xapp/assets/images/emoji/tropical_drink.pngbin0 -> 4189 bytes
-rwxr-xr-xapp/assets/images/emoji/tropical_fish.pngbin0 -> 5846 bytes
-rwxr-xr-xapp/assets/images/emoji/truck.pngbin0 -> 3721 bytes
-rwxr-xr-xapp/assets/images/emoji/trumpet.pngbin0 -> 4373 bytes
-rwxr-xr-xapp/assets/images/emoji/tshirt.pngbin0 -> 4676 bytes
-rwxr-xr-xapp/assets/images/emoji/tulip.pngbin0 -> 6065 bytes
-rwxr-xr-xapp/assets/images/emoji/turtle.pngbin0 -> 5336 bytes
-rwxr-xr-xapp/assets/images/emoji/tv.pngbin0 -> 5242 bytes
-rwxr-xr-xapp/assets/images/emoji/twisted_rightwards_arrows.pngbin0 -> 4313 bytes
-rwxr-xr-xapp/assets/images/emoji/two.pngbin0 -> 3518 bytes
-rwxr-xr-xapp/assets/images/emoji/two_hearts.pngbin0 -> 3565 bytes
-rwxr-xr-xapp/assets/images/emoji/two_men_holding_hands.pngbin0 -> 6994 bytes
-rwxr-xr-xapp/assets/images/emoji/two_women_holding_hands.pngbin0 -> 7633 bytes
-rwxr-xr-xapp/assets/images/emoji/u5272.pngbin0 -> 4533 bytes
-rwxr-xr-xapp/assets/images/emoji/u5408.pngbin0 -> 3890 bytes
-rwxr-xr-xapp/assets/images/emoji/u55b6.pngbin0 -> 3411 bytes
-rwxr-xr-xapp/assets/images/emoji/u6307.pngbin0 -> 4103 bytes
-rwxr-xr-xapp/assets/images/emoji/u6708.pngbin0 -> 3011 bytes
-rwxr-xr-xapp/assets/images/emoji/u6709.pngbin0 -> 3198 bytes
-rwxr-xr-xapp/assets/images/emoji/u6e80.pngbin0 -> 4419 bytes
-rwxr-xr-xapp/assets/images/emoji/u7121.pngbin0 -> 3942 bytes
-rwxr-xr-xapp/assets/images/emoji/u7533.pngbin0 -> 3048 bytes
-rwxr-xr-xapp/assets/images/emoji/u7981.pngbin0 -> 5175 bytes
-rwxr-xr-xapp/assets/images/emoji/u7a7a.pngbin0 -> 4180 bytes
-rwxr-xr-xapp/assets/images/emoji/uk.pngbin0 -> 5894 bytes
-rwxr-xr-xapp/assets/images/emoji/umbrella.pngbin0 -> 4745 bytes
-rwxr-xr-xapp/assets/images/emoji/unamused.pngbin0 -> 5315 bytes
-rwxr-xr-xapp/assets/images/emoji/underage.pngbin0 -> 5722 bytes
-rwxr-xr-xapp/assets/images/emoji/unlock.pngbin0 -> 3551 bytes
-rwxr-xr-xapp/assets/images/emoji/up.pngbin0 -> 3721 bytes
-rwxr-xr-xapp/assets/images/emoji/us.pngbin0 -> 6285 bytes
-rwxr-xr-xapp/assets/images/emoji/v.pngbin0 -> 4669 bytes
-rwxr-xr-xapp/assets/images/emoji/vertical_traffic_light.pngbin0 -> 3422 bytes
-rwxr-xr-xapp/assets/images/emoji/vhs.pngbin0 -> 3145 bytes
-rwxr-xr-xapp/assets/images/emoji/vibration_mode.pngbin0 -> 3906 bytes
-rwxr-xr-xapp/assets/images/emoji/video_camera.pngbin0 -> 5090 bytes
-rwxr-xr-xapp/assets/images/emoji/video_game.pngbin0 -> 4957 bytes
-rwxr-xr-xapp/assets/images/emoji/violin.pngbin0 -> 5020 bytes
-rwxr-xr-xapp/assets/images/emoji/virgo.pngbin0 -> 4869 bytes
-rwxr-xr-xapp/assets/images/emoji/volcano.pngbin0 -> 6167 bytes
-rwxr-xr-xapp/assets/images/emoji/vs.pngbin0 -> 3424 bytes
-rwxr-xr-xapp/assets/images/emoji/walking.pngbin0 -> 2468 bytes
-rwxr-xr-xapp/assets/images/emoji/waning_crescent_moon.pngbin0 -> 5885 bytes
-rwxr-xr-xapp/assets/images/emoji/waning_gibbous_moon.pngbin0 -> 6510 bytes
-rwxr-xr-xapp/assets/images/emoji/warning.pngbin0 -> 3177 bytes
-rwxr-xr-xapp/assets/images/emoji/watch.pngbin0 -> 5189 bytes
-rwxr-xr-xapp/assets/images/emoji/water_buffalo.pngbin0 -> 4774 bytes
-rwxr-xr-xapp/assets/images/emoji/watermelon.pngbin0 -> 5501 bytes
-rwxr-xr-xapp/assets/images/emoji/wave.pngbin0 -> 5048 bytes
-rwxr-xr-xapp/assets/images/emoji/wavy_dash.pngbin0 -> 872 bytes
-rwxr-xr-xapp/assets/images/emoji/waxing_crescent_moon.pngbin0 -> 6198 bytes
-rwxr-xr-xapp/assets/images/emoji/waxing_gibbous_moon.pngbin0 -> 6455 bytes
-rwxr-xr-xapp/assets/images/emoji/wc.pngbin0 -> 4088 bytes
-rwxr-xr-xapp/assets/images/emoji/weary.pngbin0 -> 6279 bytes
-rwxr-xr-xapp/assets/images/emoji/wedding.pngbin0 -> 5847 bytes
-rwxr-xr-xapp/assets/images/emoji/whale.pngbin0 -> 4940 bytes
-rwxr-xr-xapp/assets/images/emoji/whale2.pngbin0 -> 6032 bytes
-rwxr-xr-xapp/assets/images/emoji/wheelchair.pngbin0 -> 4224 bytes
-rwxr-xr-xapp/assets/images/emoji/white_circle.pngbin0 -> 2506 bytes
-rwxr-xr-xapp/assets/images/emoji/white_flower.pngbin0 -> 4391 bytes
-rwxr-xr-xapp/assets/images/emoji/white_square.pngbin0 -> 1411 bytes
-rwxr-xr-xapp/assets/images/emoji/wind_chime.pngbin0 -> 3487 bytes
-rwxr-xr-xapp/assets/images/emoji/wine_glass.pngbin0 -> 3151 bytes
-rwxr-xr-xapp/assets/images/emoji/wink.pngbin0 -> 5253 bytes
-rwxr-xr-xapp/assets/images/emoji/wink2.pngbin0 -> 6007 bytes
-rwxr-xr-xapp/assets/images/emoji/wolf.pngbin0 -> 4845 bytes
-rwxr-xr-xapp/assets/images/emoji/woman.pngbin0 -> 6895 bytes
-rwxr-xr-xapp/assets/images/emoji/womans_clothes.pngbin0 -> 4075 bytes
-rwxr-xr-xapp/assets/images/emoji/womans_hat.pngbin0 -> 8101 bytes
-rwxr-xr-xapp/assets/images/emoji/womens.pngbin0 -> 3893 bytes
-rwxr-xr-xapp/assets/images/emoji/wrench.pngbin0 -> 2775 bytes
-rwxr-xr-xapp/assets/images/emoji/x.pngbin0 -> 2044 bytes
-rwxr-xr-xapp/assets/images/emoji/yellow_heart.pngbin0 -> 4414 bytes
-rwxr-xr-xapp/assets/images/emoji/yen.pngbin0 -> 4989 bytes
-rwxr-xr-xapp/assets/images/emoji/yum.pngbin0 -> 5886 bytes
-rwxr-xr-xapp/assets/images/emoji/zap.pngbin0 -> 2233 bytes
-rwxr-xr-xapp/assets/images/emoji/zero.pngbin0 -> 3590 bytes
-rwxr-xr-xapp/assets/images/emoji/zzz.pngbin0 -> 2027 bytes
-rw-r--r--app/assets/javascripts/admin.js11
-rw-r--r--app/assets/javascripts/admin.js.coffee8
-rw-r--r--app/assets/javascripts/application.js131
-rw-r--r--app/assets/javascripts/graph.js10
-rw-r--r--app/assets/javascripts/graph.js.coffee10
-rw-r--r--app/assets/javascripts/loader.js11
-rw-r--r--app/assets/javascripts/loader.js.coffee5
-rw-r--r--app/assets/javascripts/main.js130
-rw-r--r--app/assets/javascripts/projects.js16
-rw-r--r--app/assets/javascripts/projects.js.coffee20
-rw-r--r--app/assets/javascripts/snippets.js9
-rw-r--r--app/assets/javascripts/snippets.js.coffee6
-rw-r--r--app/assets/javascripts/team.js8
-rw-r--r--app/assets/stylesheets/gitlab_bootstrap/blocks.scss2
-rw-r--r--app/assets/stylesheets/gitlab_bootstrap/buttons.scss26
-rw-r--r--app/assets/stylesheets/gitlab_bootstrap/files.scss4
-rw-r--r--app/assets/stylesheets/highlight/white.scss13
-rw-r--r--app/assets/stylesheets/main.scss15
-rw-r--r--app/assets/stylesheets/sections/header.scss4
-rw-r--r--app/assets/stylesheets/sections/nav.scss24
-rw-r--r--app/assets/stylesheets/sections/projects.scss12
-rw-r--r--app/controllers/application_controller.rb12
-rw-r--r--app/controllers/commits_controller.rb11
-rw-r--r--app/controllers/projects_controller.rb2
-rw-r--r--app/helpers/gitlab_markdown_helper.rb35
-rw-r--r--app/mailers/notify.rb8
-rw-r--r--app/models/note.rb2
-rw-r--r--app/models/project.rb4
-rw-r--r--app/models/users_project.rb8
-rw-r--r--app/roles/account.rb11
-rw-r--r--app/roles/issue_commonality.rb2
-rw-r--r--app/roles/push_observer.rb16
-rw-r--r--app/roles/repository.rb36
-rw-r--r--app/views/deploy_keys/_form.html.haml11
-rw-r--r--app/views/deploy_keys/index.html.haml14
-rw-r--r--app/views/deploy_keys/new.html.haml2
-rw-r--r--app/views/deploy_keys/show.html.haml13
-rw-r--r--app/views/errors/gitolite.html.haml2
-rw-r--r--app/views/help/api.html.haml2
-rw-r--r--app/views/help/index.html.haml2
-rw-r--r--app/views/help/markdown.html.haml15
-rw-r--r--app/views/help/ssh.html.haml4
-rw-r--r--app/views/help/system_hooks.html.haml2
-rw-r--r--app/views/help/web_hooks.html.haml4
-rw-r--r--app/views/help/workflow.html.haml2
-rw-r--r--app/views/hooks/_data_ex.html.erb2
-rw-r--r--app/views/issues/_form.html.haml2
-rw-r--r--app/views/keys/index.html.haml2
-rw-r--r--app/views/keys/show.html.haml2
-rw-r--r--app/views/layouts/notify.html.haml4
-rw-r--r--app/views/milestones/_form.html.haml2
-rw-r--r--app/views/notes/_form.html.haml2
-rw-r--r--app/views/notify/new_user_email.html.haml2
-rw-r--r--app/views/projects/_clone_panel.html.haml26
-rw-r--r--app/views/projects/_show.html.haml23
-rw-r--r--app/views/projects/empty.html.haml23
-rw-r--r--app/views/projects/show.html.haml10
-rw-r--r--app/views/refs/_head.html.haml6
-rw-r--r--app/views/refs/tree.js.haml2
-rw-r--r--app/views/team_members/show.html.haml2
-rw-r--r--app/views/wikis/_form.html.haml2
-rw-r--r--config/routes.rb4
-rw-r--r--db/migrate/20120905043334_set_default_branch_default_to_nil.rb12
-rw-r--r--db/schema.rb18
-rw-r--r--doc/api/README.md13
-rw-r--r--doc/api/projects.md15
-rw-r--r--doc/debian_ubuntu.sh45
-rw-r--r--doc/installation.md101
-rw-r--r--features/projects/issues/issues.feature30
-rw-r--r--features/step_definitions/common_steps.rb21
-rw-r--r--features/step_definitions/dashboard_steps.rb20
-rw-r--r--features/step_definitions/profile/profile_steps.rb12
-rw-r--r--features/step_definitions/project/browse_code_steps.rb12
-rw-r--r--features/step_definitions/project/project_commits_steps.rb26
-rw-r--r--features/step_definitions/project/project_issues_steps.rb24
-rw-r--r--features/step_definitions/project/project_merge_requests_steps.rb15
-rw-r--r--features/step_definitions/project/project_milestones_steps.rb5
-rw-r--r--features/step_definitions/project/project_team_steps.rb12
-rw-r--r--features/step_definitions/project/project_wiki_steps.rb4
-rw-r--r--features/step_definitions/project/projects_steps.rb10
-rw-r--r--features/step_definitions/visit_steps.rb91
-rw-r--r--lib/api/projects.rb20
-rw-r--r--lib/gitlab/backend/gitolite.rb2
-rw-r--r--lib/gitlab/markdown.rb84
-rwxr-xr-xlib/hooks/post-receive2
-rw-r--r--lib/support/aws/debian_ubuntu_aws.sh122
-rw-r--r--lib/support/init-gitlab54
-rw-r--r--lib/support/nginx-gitlab33
-rw-r--r--lib/tasks/bulk_import.rake3
-rw-r--r--lib/tasks/gitlab/write_hook.rake2
-rw-r--r--spec/factories.rb5
-rw-r--r--spec/factories_spec.rb90
-rw-r--r--spec/helpers/gitlab_markdown_helper_spec.rb40
-rw-r--r--spec/mailers/notify_spec.rb2
-rw-r--r--spec/models/issue_spec.rb1
-rw-r--r--spec/models/milestone_spec.rb1
-rw-r--r--spec/models/note_spec.rb10
-rw-r--r--spec/models/project_spec.rb8
-rw-r--r--spec/models/user_spec.rb58
-rw-r--r--spec/models/users_project_spec.rb2
-rw-r--r--spec/requests/api/projects_spec.rb66
-rw-r--r--spec/roles/repository_spec.rb72
-rw-r--r--tmp/.gitkeep0
953 files changed, 941 insertions, 1039 deletions
diff --git a/.gitignore b/.gitignore
index 760487ca9b3..d22760e7780 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,4 +22,4 @@ config/unicorn.rb
db/data.yml
.idea
.DS_Store
-
+.chef
diff --git a/.travis.yml b/.travis.yml
index da67e37dbd0..bb4c4a79245 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,6 +9,8 @@ branches:
- 'master'
rvm:
- 1.9.3
+services:
+ - mysql
before_script:
- "cp config/database.yml.$DB config/database.yml"
- "cp config/gitlab.yml.example config/gitlab.yml"
diff --git a/Gemfile.lock b/Gemfile.lock
index da6c068b23f..235c49a6c00 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -323,7 +323,7 @@ GEM
multi_json (~> 1.0)
rubyzip
settingslogic (2.0.8)
- shoulda-matchers (1.1.0)
+ shoulda-matchers (1.3.0)
activesupport (>= 3.0.0)
simplecov (0.6.4)
multi_json (~> 1.0)
diff --git a/app/assets/images/emoji/+1.png b/app/assets/images/emoji/+1.png
new file mode 100755
index 00000000000..3a43ecae295
--- /dev/null
+++ b/app/assets/images/emoji/+1.png
Binary files differ
diff --git a/app/assets/images/emoji/-1.png b/app/assets/images/emoji/-1.png
new file mode 100755
index 00000000000..41c6b825d6a
--- /dev/null
+++ b/app/assets/images/emoji/-1.png
Binary files differ
diff --git a/app/assets/images/emoji/100.png b/app/assets/images/emoji/100.png
new file mode 100755
index 00000000000..bce9ab14f59
--- /dev/null
+++ b/app/assets/images/emoji/100.png
Binary files differ
diff --git a/app/assets/images/emoji/109.png b/app/assets/images/emoji/109.png
new file mode 100755
index 00000000000..74b9d5d38cd
--- /dev/null
+++ b/app/assets/images/emoji/109.png
Binary files differ
diff --git a/app/assets/images/emoji/1234.png b/app/assets/images/emoji/1234.png
new file mode 100755
index 00000000000..c47c2e1f9f0
--- /dev/null
+++ b/app/assets/images/emoji/1234.png
Binary files differ
diff --git a/app/assets/images/emoji/8ball.png b/app/assets/images/emoji/8ball.png
new file mode 100755
index 00000000000..c2c710d4501
--- /dev/null
+++ b/app/assets/images/emoji/8ball.png
Binary files differ
diff --git a/app/assets/images/emoji/a.png b/app/assets/images/emoji/a.png
new file mode 100755
index 00000000000..09ff6d6f184
--- /dev/null
+++ b/app/assets/images/emoji/a.png
Binary files differ
diff --git a/app/assets/images/emoji/ab.png b/app/assets/images/emoji/ab.png
new file mode 100755
index 00000000000..2a522204767
--- /dev/null
+++ b/app/assets/images/emoji/ab.png
Binary files differ
diff --git a/app/assets/images/emoji/abc.png b/app/assets/images/emoji/abc.png
new file mode 100755
index 00000000000..505d40a1557
--- /dev/null
+++ b/app/assets/images/emoji/abc.png
Binary files differ
diff --git a/app/assets/images/emoji/abcd.png b/app/assets/images/emoji/abcd.png
new file mode 100755
index 00000000000..5218470b63c
--- /dev/null
+++ b/app/assets/images/emoji/abcd.png
Binary files differ
diff --git a/app/assets/images/emoji/accept.png b/app/assets/images/emoji/accept.png
new file mode 100755
index 00000000000..2d200903188
--- /dev/null
+++ b/app/assets/images/emoji/accept.png
Binary files differ
diff --git a/app/assets/images/emoji/aerial_tramway.png b/app/assets/images/emoji/aerial_tramway.png
new file mode 100755
index 00000000000..38f6dfe2334
--- /dev/null
+++ b/app/assets/images/emoji/aerial_tramway.png
Binary files differ
diff --git a/app/assets/images/emoji/airplane.png b/app/assets/images/emoji/airplane.png
new file mode 100755
index 00000000000..8407cb67575
--- /dev/null
+++ b/app/assets/images/emoji/airplane.png
Binary files differ
diff --git a/app/assets/images/emoji/alarm_clock.png b/app/assets/images/emoji/alarm_clock.png
new file mode 100755
index 00000000000..86ca8c8ed45
--- /dev/null
+++ b/app/assets/images/emoji/alarm_clock.png
Binary files differ
diff --git a/app/assets/images/emoji/alien.png b/app/assets/images/emoji/alien.png
new file mode 100755
index 00000000000..416de47be46
--- /dev/null
+++ b/app/assets/images/emoji/alien.png
Binary files differ
diff --git a/app/assets/images/emoji/ambulance.png b/app/assets/images/emoji/ambulance.png
new file mode 100755
index 00000000000..b740f45dba2
--- /dev/null
+++ b/app/assets/images/emoji/ambulance.png
Binary files differ
diff --git a/app/assets/images/emoji/anchor.png b/app/assets/images/emoji/anchor.png
new file mode 100755
index 00000000000..0c5192e6473
--- /dev/null
+++ b/app/assets/images/emoji/anchor.png
Binary files differ
diff --git a/app/assets/images/emoji/angel.png b/app/assets/images/emoji/angel.png
new file mode 100755
index 00000000000..da52c310c64
--- /dev/null
+++ b/app/assets/images/emoji/angel.png
Binary files differ
diff --git a/app/assets/images/emoji/anger.png b/app/assets/images/emoji/anger.png
new file mode 100755
index 00000000000..6fb4dca1854
--- /dev/null
+++ b/app/assets/images/emoji/anger.png
Binary files differ
diff --git a/app/assets/images/emoji/angry.png b/app/assets/images/emoji/angry.png
new file mode 100755
index 00000000000..f95bfa897ed
--- /dev/null
+++ b/app/assets/images/emoji/angry.png
Binary files differ
diff --git a/app/assets/images/emoji/ant.png b/app/assets/images/emoji/ant.png
new file mode 100755
index 00000000000..b92d1cc14bd
--- /dev/null
+++ b/app/assets/images/emoji/ant.png
Binary files differ
diff --git a/app/assets/images/emoji/apple.png b/app/assets/images/emoji/apple.png
new file mode 100755
index 00000000000..08aa17b9513
--- /dev/null
+++ b/app/assets/images/emoji/apple.png
Binary files differ
diff --git a/app/assets/images/emoji/aquarius.png b/app/assets/images/emoji/aquarius.png
new file mode 100755
index 00000000000..cbff66edcf3
--- /dev/null
+++ b/app/assets/images/emoji/aquarius.png
Binary files differ
diff --git a/app/assets/images/emoji/aries.png b/app/assets/images/emoji/aries.png
new file mode 100755
index 00000000000..899902237c9
--- /dev/null
+++ b/app/assets/images/emoji/aries.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_backward.png b/app/assets/images/emoji/arrow_backward.png
new file mode 100755
index 00000000000..088621834f7
--- /dev/null
+++ b/app/assets/images/emoji/arrow_backward.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_double_down.png b/app/assets/images/emoji/arrow_double_down.png
new file mode 100755
index 00000000000..2ecbebcda13
--- /dev/null
+++ b/app/assets/images/emoji/arrow_double_down.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_double_up.png b/app/assets/images/emoji/arrow_double_up.png
new file mode 100755
index 00000000000..d42979d4bf6
--- /dev/null
+++ b/app/assets/images/emoji/arrow_double_up.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_down.png b/app/assets/images/emoji/arrow_down.png
new file mode 100755
index 00000000000..e6702f02bae
--- /dev/null
+++ b/app/assets/images/emoji/arrow_down.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_down_small.png b/app/assets/images/emoji/arrow_down_small.png
new file mode 100755
index 00000000000..f7f2d510137
--- /dev/null
+++ b/app/assets/images/emoji/arrow_down_small.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_forward.png b/app/assets/images/emoji/arrow_forward.png
new file mode 100755
index 00000000000..fbfe711b64d
--- /dev/null
+++ b/app/assets/images/emoji/arrow_forward.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_heading_down.png b/app/assets/images/emoji/arrow_heading_down.png
new file mode 100755
index 00000000000..56dd3b9d3c8
--- /dev/null
+++ b/app/assets/images/emoji/arrow_heading_down.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_heading_up.png b/app/assets/images/emoji/arrow_heading_up.png
new file mode 100755
index 00000000000..c8f670a1ef0
--- /dev/null
+++ b/app/assets/images/emoji/arrow_heading_up.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_left.png b/app/assets/images/emoji/arrow_left.png
new file mode 100755
index 00000000000..d64ac619c9d
--- /dev/null
+++ b/app/assets/images/emoji/arrow_left.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_lower_left.png b/app/assets/images/emoji/arrow_lower_left.png
new file mode 100755
index 00000000000..55fb03c4121
--- /dev/null
+++ b/app/assets/images/emoji/arrow_lower_left.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_lower_right.png b/app/assets/images/emoji/arrow_lower_right.png
new file mode 100755
index 00000000000..da8fb8294d9
--- /dev/null
+++ b/app/assets/images/emoji/arrow_lower_right.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_right.png b/app/assets/images/emoji/arrow_right.png
new file mode 100755
index 00000000000..6d483b5144f
--- /dev/null
+++ b/app/assets/images/emoji/arrow_right.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_right_hook.png b/app/assets/images/emoji/arrow_right_hook.png
new file mode 100755
index 00000000000..8b4ea6e1720
--- /dev/null
+++ b/app/assets/images/emoji/arrow_right_hook.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_up.png b/app/assets/images/emoji/arrow_up.png
new file mode 100755
index 00000000000..b5b0688d3c6
--- /dev/null
+++ b/app/assets/images/emoji/arrow_up.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_up_down.png b/app/assets/images/emoji/arrow_up_down.png
new file mode 100755
index 00000000000..b718c214582
--- /dev/null
+++ b/app/assets/images/emoji/arrow_up_down.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_up_small.png b/app/assets/images/emoji/arrow_up_small.png
new file mode 100755
index 00000000000..12173319772
--- /dev/null
+++ b/app/assets/images/emoji/arrow_up_small.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_upper_left.png b/app/assets/images/emoji/arrow_upper_left.png
new file mode 100755
index 00000000000..e895fd7b628
--- /dev/null
+++ b/app/assets/images/emoji/arrow_upper_left.png
Binary files differ
diff --git a/app/assets/images/emoji/arrow_upper_right.png b/app/assets/images/emoji/arrow_upper_right.png
new file mode 100755
index 00000000000..e23790ba18d
--- /dev/null
+++ b/app/assets/images/emoji/arrow_upper_right.png
Binary files differ
diff --git a/app/assets/images/emoji/arrows_clockwise.png b/app/assets/images/emoji/arrows_clockwise.png
new file mode 100755
index 00000000000..5f84d7e72b7
--- /dev/null
+++ b/app/assets/images/emoji/arrows_clockwise.png
Binary files differ
diff --git a/app/assets/images/emoji/arrows_counterclockwise.png b/app/assets/images/emoji/arrows_counterclockwise.png
new file mode 100755
index 00000000000..1933ae18b90
--- /dev/null
+++ b/app/assets/images/emoji/arrows_counterclockwise.png
Binary files differ
diff --git a/app/assets/images/emoji/art.png b/app/assets/images/emoji/art.png
new file mode 100755
index 00000000000..d45212b0340
--- /dev/null
+++ b/app/assets/images/emoji/art.png
Binary files differ
diff --git a/app/assets/images/emoji/articulated_lorry.png b/app/assets/images/emoji/articulated_lorry.png
new file mode 100755
index 00000000000..81ec1f91741
--- /dev/null
+++ b/app/assets/images/emoji/articulated_lorry.png
Binary files differ
diff --git a/app/assets/images/emoji/astonished.png b/app/assets/images/emoji/astonished.png
new file mode 100755
index 00000000000..858a83484a8
--- /dev/null
+++ b/app/assets/images/emoji/astonished.png
Binary files differ
diff --git a/app/assets/images/emoji/atm.png b/app/assets/images/emoji/atm.png
new file mode 100755
index 00000000000..c2846e79218
--- /dev/null
+++ b/app/assets/images/emoji/atm.png
Binary files differ
diff --git a/app/assets/images/emoji/b.png b/app/assets/images/emoji/b.png
new file mode 100755
index 00000000000..8742b3d2e3e
--- /dev/null
+++ b/app/assets/images/emoji/b.png
Binary files differ
diff --git a/app/assets/images/emoji/baby.png b/app/assets/images/emoji/baby.png
new file mode 100755
index 00000000000..3b29da40b60
--- /dev/null
+++ b/app/assets/images/emoji/baby.png
Binary files differ
diff --git a/app/assets/images/emoji/baby_bottle.png b/app/assets/images/emoji/baby_bottle.png
new file mode 100755
index 00000000000..1b2cfe5e301
--- /dev/null
+++ b/app/assets/images/emoji/baby_bottle.png
Binary files differ
diff --git a/app/assets/images/emoji/baby_chick.png b/app/assets/images/emoji/baby_chick.png
new file mode 100755
index 00000000000..9be8d293006
--- /dev/null
+++ b/app/assets/images/emoji/baby_chick.png
Binary files differ
diff --git a/app/assets/images/emoji/baby_symbol.png b/app/assets/images/emoji/baby_symbol.png
new file mode 100755
index 00000000000..2e58725cf56
--- /dev/null
+++ b/app/assets/images/emoji/baby_symbol.png
Binary files differ
diff --git a/app/assets/images/emoji/baggage_claim.png b/app/assets/images/emoji/baggage_claim.png
new file mode 100755
index 00000000000..59ae044a45e
--- /dev/null
+++ b/app/assets/images/emoji/baggage_claim.png
Binary files differ
diff --git a/app/assets/images/emoji/balloon.png b/app/assets/images/emoji/balloon.png
new file mode 100755
index 00000000000..03448970256
--- /dev/null
+++ b/app/assets/images/emoji/balloon.png
Binary files differ
diff --git a/app/assets/images/emoji/ballot_box_with_check.png b/app/assets/images/emoji/ballot_box_with_check.png
new file mode 100755
index 00000000000..f07a466c778
--- /dev/null
+++ b/app/assets/images/emoji/ballot_box_with_check.png
Binary files differ
diff --git a/app/assets/images/emoji/bamboo.png b/app/assets/images/emoji/bamboo.png
new file mode 100755
index 00000000000..fc858d0fc2c
--- /dev/null
+++ b/app/assets/images/emoji/bamboo.png
Binary files differ
diff --git a/app/assets/images/emoji/banana.png b/app/assets/images/emoji/banana.png
new file mode 100755
index 00000000000..a0563afb958
--- /dev/null
+++ b/app/assets/images/emoji/banana.png
Binary files differ
diff --git a/app/assets/images/emoji/bangbang.png b/app/assets/images/emoji/bangbang.png
new file mode 100755
index 00000000000..7270f0afe6e
--- /dev/null
+++ b/app/assets/images/emoji/bangbang.png
Binary files differ
diff --git a/app/assets/images/emoji/bank.png b/app/assets/images/emoji/bank.png
new file mode 100755
index 00000000000..1faa8777e42
--- /dev/null
+++ b/app/assets/images/emoji/bank.png
Binary files differ
diff --git a/app/assets/images/emoji/bar_chart.png b/app/assets/images/emoji/bar_chart.png
new file mode 100755
index 00000000000..7871cc60323
--- /dev/null
+++ b/app/assets/images/emoji/bar_chart.png
Binary files differ
diff --git a/app/assets/images/emoji/barber.png b/app/assets/images/emoji/barber.png
new file mode 100755
index 00000000000..a10cb232286
--- /dev/null
+++ b/app/assets/images/emoji/barber.png
Binary files differ
diff --git a/app/assets/images/emoji/baseball.png b/app/assets/images/emoji/baseball.png
new file mode 100755
index 00000000000..da004e2ead0
--- /dev/null
+++ b/app/assets/images/emoji/baseball.png
Binary files differ
diff --git a/app/assets/images/emoji/basketball.png b/app/assets/images/emoji/basketball.png
new file mode 100755
index 00000000000..ef694bec4c9
--- /dev/null
+++ b/app/assets/images/emoji/basketball.png
Binary files differ
diff --git a/app/assets/images/emoji/bath.png b/app/assets/images/emoji/bath.png
new file mode 100755
index 00000000000..8f75d1d2499
--- /dev/null
+++ b/app/assets/images/emoji/bath.png
Binary files differ
diff --git a/app/assets/images/emoji/bathtub.png b/app/assets/images/emoji/bathtub.png
new file mode 100755
index 00000000000..1c3f844ab26
--- /dev/null
+++ b/app/assets/images/emoji/bathtub.png
Binary files differ
diff --git a/app/assets/images/emoji/battery.png b/app/assets/images/emoji/battery.png
new file mode 100755
index 00000000000..aa7eedce4bb
--- /dev/null
+++ b/app/assets/images/emoji/battery.png
Binary files differ
diff --git a/app/assets/images/emoji/bear.png b/app/assets/images/emoji/bear.png
new file mode 100755
index 00000000000..f5afe920e8e
--- /dev/null
+++ b/app/assets/images/emoji/bear.png
Binary files differ
diff --git a/app/assets/images/emoji/beer.png b/app/assets/images/emoji/beer.png
new file mode 100755
index 00000000000..cd78bed7440
--- /dev/null
+++ b/app/assets/images/emoji/beer.png
Binary files differ
diff --git a/app/assets/images/emoji/beers.png b/app/assets/images/emoji/beers.png
new file mode 100755
index 00000000000..cc5e4ab5aa9
--- /dev/null
+++ b/app/assets/images/emoji/beers.png
Binary files differ
diff --git a/app/assets/images/emoji/beetle.png b/app/assets/images/emoji/beetle.png
new file mode 100755
index 00000000000..222577ca7ea
--- /dev/null
+++ b/app/assets/images/emoji/beetle.png
Binary files differ
diff --git a/app/assets/images/emoji/beginner.png b/app/assets/images/emoji/beginner.png
new file mode 100755
index 00000000000..1f022d175da
--- /dev/null
+++ b/app/assets/images/emoji/beginner.png
Binary files differ
diff --git a/app/assets/images/emoji/bell.png b/app/assets/images/emoji/bell.png
new file mode 100755
index 00000000000..69acceb286e
--- /dev/null
+++ b/app/assets/images/emoji/bell.png
Binary files differ
diff --git a/app/assets/images/emoji/bento.png b/app/assets/images/emoji/bento.png
new file mode 100755
index 00000000000..c6d99e89b67
--- /dev/null
+++ b/app/assets/images/emoji/bento.png
Binary files differ
diff --git a/app/assets/images/emoji/bicyclist.png b/app/assets/images/emoji/bicyclist.png
new file mode 100755
index 00000000000..4e3e0549c21
--- /dev/null
+++ b/app/assets/images/emoji/bicyclist.png
Binary files differ
diff --git a/app/assets/images/emoji/bike.png b/app/assets/images/emoji/bike.png
new file mode 100755
index 00000000000..65738602722
--- /dev/null
+++ b/app/assets/images/emoji/bike.png
Binary files differ
diff --git a/app/assets/images/emoji/bikini.png b/app/assets/images/emoji/bikini.png
new file mode 100755
index 00000000000..4ff63b40f88
--- /dev/null
+++ b/app/assets/images/emoji/bikini.png
Binary files differ
diff --git a/app/assets/images/emoji/bird.png b/app/assets/images/emoji/bird.png
new file mode 100755
index 00000000000..e6be8c02786
--- /dev/null
+++ b/app/assets/images/emoji/bird.png
Binary files differ
diff --git a/app/assets/images/emoji/birthday.png b/app/assets/images/emoji/birthday.png
new file mode 100755
index 00000000000..36e8edcbec4
--- /dev/null
+++ b/app/assets/images/emoji/birthday.png
Binary files differ
diff --git a/app/assets/images/emoji/black_circle.png b/app/assets/images/emoji/black_circle.png
new file mode 100755
index 00000000000..e46f9df615f
--- /dev/null
+++ b/app/assets/images/emoji/black_circle.png
Binary files differ
diff --git a/app/assets/images/emoji/black_joker.png b/app/assets/images/emoji/black_joker.png
new file mode 100755
index 00000000000..4c78f3614d7
--- /dev/null
+++ b/app/assets/images/emoji/black_joker.png
Binary files differ
diff --git a/app/assets/images/emoji/black_nib.png b/app/assets/images/emoji/black_nib.png
new file mode 100755
index 00000000000..29f6994c11a
--- /dev/null
+++ b/app/assets/images/emoji/black_nib.png
Binary files differ
diff --git a/app/assets/images/emoji/black_square.png b/app/assets/images/emoji/black_square.png
new file mode 100755
index 00000000000..71da10de81c
--- /dev/null
+++ b/app/assets/images/emoji/black_square.png
Binary files differ
diff --git a/app/assets/images/emoji/blossom.png b/app/assets/images/emoji/blossom.png
new file mode 100755
index 00000000000..55a97353b47
--- /dev/null
+++ b/app/assets/images/emoji/blossom.png
Binary files differ
diff --git a/app/assets/images/emoji/blowfish.png b/app/assets/images/emoji/blowfish.png
new file mode 100755
index 00000000000..a1d47cb7e69
--- /dev/null
+++ b/app/assets/images/emoji/blowfish.png
Binary files differ
diff --git a/app/assets/images/emoji/blue_book.png b/app/assets/images/emoji/blue_book.png
new file mode 100755
index 00000000000..e2b9e8c797a
--- /dev/null
+++ b/app/assets/images/emoji/blue_book.png
Binary files differ
diff --git a/app/assets/images/emoji/blue_car.png b/app/assets/images/emoji/blue_car.png
new file mode 100755
index 00000000000..978291e087d
--- /dev/null
+++ b/app/assets/images/emoji/blue_car.png
Binary files differ
diff --git a/app/assets/images/emoji/blue_heart.png b/app/assets/images/emoji/blue_heart.png
new file mode 100755
index 00000000000..baa29b31bcd
--- /dev/null
+++ b/app/assets/images/emoji/blue_heart.png
Binary files differ
diff --git a/app/assets/images/emoji/blush.png b/app/assets/images/emoji/blush.png
new file mode 100755
index 00000000000..3a95eb61a3a
--- /dev/null
+++ b/app/assets/images/emoji/blush.png
Binary files differ
diff --git a/app/assets/images/emoji/boar.png b/app/assets/images/emoji/boar.png
new file mode 100755
index 00000000000..8196ad4a14b
--- /dev/null
+++ b/app/assets/images/emoji/boar.png
Binary files differ
diff --git a/app/assets/images/emoji/boat.png b/app/assets/images/emoji/boat.png
new file mode 100755
index 00000000000..ff656dc62bb
--- /dev/null
+++ b/app/assets/images/emoji/boat.png
Binary files differ
diff --git a/app/assets/images/emoji/bomb.png b/app/assets/images/emoji/bomb.png
new file mode 100755
index 00000000000..3289787dcf9
--- /dev/null
+++ b/app/assets/images/emoji/bomb.png
Binary files differ
diff --git a/app/assets/images/emoji/book.png b/app/assets/images/emoji/book.png
new file mode 100755
index 00000000000..8b698415c3d
--- /dev/null
+++ b/app/assets/images/emoji/book.png
Binary files differ
diff --git a/app/assets/images/emoji/bookmark.png b/app/assets/images/emoji/bookmark.png
new file mode 100755
index 00000000000..dbee45c605b
--- /dev/null
+++ b/app/assets/images/emoji/bookmark.png
Binary files differ
diff --git a/app/assets/images/emoji/bookmark_tabs.png b/app/assets/images/emoji/bookmark_tabs.png
new file mode 100755
index 00000000000..0c4e3bf17df
--- /dev/null
+++ b/app/assets/images/emoji/bookmark_tabs.png
Binary files differ
diff --git a/app/assets/images/emoji/books.png b/app/assets/images/emoji/books.png
new file mode 100755
index 00000000000..dca06a1ad99
--- /dev/null
+++ b/app/assets/images/emoji/books.png
Binary files differ
diff --git a/app/assets/images/emoji/boot.png b/app/assets/images/emoji/boot.png
new file mode 100755
index 00000000000..58d0fdbcd0c
--- /dev/null
+++ b/app/assets/images/emoji/boot.png
Binary files differ
diff --git a/app/assets/images/emoji/bouquet.png b/app/assets/images/emoji/bouquet.png
new file mode 100755
index 00000000000..ce637832e17
--- /dev/null
+++ b/app/assets/images/emoji/bouquet.png
Binary files differ
diff --git a/app/assets/images/emoji/bow.png b/app/assets/images/emoji/bow.png
new file mode 100755
index 00000000000..024cb610492
--- /dev/null
+++ b/app/assets/images/emoji/bow.png
Binary files differ
diff --git a/app/assets/images/emoji/bowling.png b/app/assets/images/emoji/bowling.png
new file mode 100755
index 00000000000..13d8ece2ee5
--- /dev/null
+++ b/app/assets/images/emoji/bowling.png
Binary files differ
diff --git a/app/assets/images/emoji/bowtie.png b/app/assets/images/emoji/bowtie.png
new file mode 100755
index 00000000000..28ff0c787d5
--- /dev/null
+++ b/app/assets/images/emoji/bowtie.png
Binary files differ
diff --git a/app/assets/images/emoji/boy.png b/app/assets/images/emoji/boy.png
new file mode 100755
index 00000000000..f79f1f29807
--- /dev/null
+++ b/app/assets/images/emoji/boy.png
Binary files differ
diff --git a/app/assets/images/emoji/bread.png b/app/assets/images/emoji/bread.png
new file mode 100755
index 00000000000..7e7c63753d3
--- /dev/null
+++ b/app/assets/images/emoji/bread.png
Binary files differ
diff --git a/app/assets/images/emoji/bride_with_veil.png b/app/assets/images/emoji/bride_with_veil.png
new file mode 100755
index 00000000000..dd0b0cfdad1
--- /dev/null
+++ b/app/assets/images/emoji/bride_with_veil.png
Binary files differ
diff --git a/app/assets/images/emoji/bridge_at_night.png b/app/assets/images/emoji/bridge_at_night.png
new file mode 100755
index 00000000000..495b06c3dfe
--- /dev/null
+++ b/app/assets/images/emoji/bridge_at_night.png
Binary files differ
diff --git a/app/assets/images/emoji/briefcase.png b/app/assets/images/emoji/briefcase.png
new file mode 100755
index 00000000000..46e82b0010c
--- /dev/null
+++ b/app/assets/images/emoji/briefcase.png
Binary files differ
diff --git a/app/assets/images/emoji/broken_heart.png b/app/assets/images/emoji/broken_heart.png
new file mode 100755
index 00000000000..a1bc850ecb4
--- /dev/null
+++ b/app/assets/images/emoji/broken_heart.png
Binary files differ
diff --git a/app/assets/images/emoji/bug.png b/app/assets/images/emoji/bug.png
new file mode 100755
index 00000000000..c2eaf7a708d
--- /dev/null
+++ b/app/assets/images/emoji/bug.png
Binary files differ
diff --git a/app/assets/images/emoji/bulb.png b/app/assets/images/emoji/bulb.png
new file mode 100755
index 00000000000..23afca1c73f
--- /dev/null
+++ b/app/assets/images/emoji/bulb.png
Binary files differ
diff --git a/app/assets/images/emoji/bullettrain_front.png b/app/assets/images/emoji/bullettrain_front.png
new file mode 100755
index 00000000000..16651acff8e
--- /dev/null
+++ b/app/assets/images/emoji/bullettrain_front.png
Binary files differ
diff --git a/app/assets/images/emoji/bullettrain_side.png b/app/assets/images/emoji/bullettrain_side.png
new file mode 100755
index 00000000000..8eca368458a
--- /dev/null
+++ b/app/assets/images/emoji/bullettrain_side.png
Binary files differ
diff --git a/app/assets/images/emoji/bus.png b/app/assets/images/emoji/bus.png
new file mode 100755
index 00000000000..823aa39e49d
--- /dev/null
+++ b/app/assets/images/emoji/bus.png
Binary files differ
diff --git a/app/assets/images/emoji/busstop.png b/app/assets/images/emoji/busstop.png
new file mode 100755
index 00000000000..94894847b54
--- /dev/null
+++ b/app/assets/images/emoji/busstop.png
Binary files differ
diff --git a/app/assets/images/emoji/bust_in_silhouette.png b/app/assets/images/emoji/bust_in_silhouette.png
new file mode 100755
index 00000000000..d1313986925
--- /dev/null
+++ b/app/assets/images/emoji/bust_in_silhouette.png
Binary files differ
diff --git a/app/assets/images/emoji/busts_in_silhouette.png b/app/assets/images/emoji/busts_in_silhouette.png
new file mode 100755
index 00000000000..1f3aabcff60
--- /dev/null
+++ b/app/assets/images/emoji/busts_in_silhouette.png
Binary files differ
diff --git a/app/assets/images/emoji/cactus.png b/app/assets/images/emoji/cactus.png
new file mode 100755
index 00000000000..5a2c3cc725e
--- /dev/null
+++ b/app/assets/images/emoji/cactus.png
Binary files differ
diff --git a/app/assets/images/emoji/cake.png b/app/assets/images/emoji/cake.png
new file mode 100755
index 00000000000..efeb9b4b214
--- /dev/null
+++ b/app/assets/images/emoji/cake.png
Binary files differ
diff --git a/app/assets/images/emoji/calendar.png b/app/assets/images/emoji/calendar.png
new file mode 100755
index 00000000000..900b868bb94
--- /dev/null
+++ b/app/assets/images/emoji/calendar.png
Binary files differ
diff --git a/app/assets/images/emoji/calling.png b/app/assets/images/emoji/calling.png
new file mode 100755
index 00000000000..837897f261b
--- /dev/null
+++ b/app/assets/images/emoji/calling.png
Binary files differ
diff --git a/app/assets/images/emoji/camel.png b/app/assets/images/emoji/camel.png
new file mode 100755
index 00000000000..496c186ae6c
--- /dev/null
+++ b/app/assets/images/emoji/camel.png
Binary files differ
diff --git a/app/assets/images/emoji/camera.png b/app/assets/images/emoji/camera.png
new file mode 100755
index 00000000000..397d03b3935
--- /dev/null
+++ b/app/assets/images/emoji/camera.png
Binary files differ
diff --git a/app/assets/images/emoji/cancer.png b/app/assets/images/emoji/cancer.png
new file mode 100755
index 00000000000..ea43a4a2a04
--- /dev/null
+++ b/app/assets/images/emoji/cancer.png
Binary files differ
diff --git a/app/assets/images/emoji/candy.png b/app/assets/images/emoji/candy.png
new file mode 100755
index 00000000000..33722f236e9
--- /dev/null
+++ b/app/assets/images/emoji/candy.png
Binary files differ
diff --git a/app/assets/images/emoji/capital_abcd.png b/app/assets/images/emoji/capital_abcd.png
new file mode 100755
index 00000000000..ffc0cba4b43
--- /dev/null
+++ b/app/assets/images/emoji/capital_abcd.png
Binary files differ
diff --git a/app/assets/images/emoji/capricorn.png b/app/assets/images/emoji/capricorn.png
new file mode 100755
index 00000000000..f2044e78935
--- /dev/null
+++ b/app/assets/images/emoji/capricorn.png
Binary files differ
diff --git a/app/assets/images/emoji/car.png b/app/assets/images/emoji/car.png
new file mode 100755
index 00000000000..d70a2f06263
--- /dev/null
+++ b/app/assets/images/emoji/car.png
Binary files differ
diff --git a/app/assets/images/emoji/card_index.png b/app/assets/images/emoji/card_index.png
new file mode 100755
index 00000000000..374e94e9e84
--- /dev/null
+++ b/app/assets/images/emoji/card_index.png
Binary files differ
diff --git a/app/assets/images/emoji/carousel_horse.png b/app/assets/images/emoji/carousel_horse.png
new file mode 100755
index 00000000000..765d2c0a8bd
--- /dev/null
+++ b/app/assets/images/emoji/carousel_horse.png
Binary files differ
diff --git a/app/assets/images/emoji/cat.png b/app/assets/images/emoji/cat.png
new file mode 100755
index 00000000000..09b9ef79a7d
--- /dev/null
+++ b/app/assets/images/emoji/cat.png
Binary files differ
diff --git a/app/assets/images/emoji/cat2.png b/app/assets/images/emoji/cat2.png
new file mode 100755
index 00000000000..977c992c526
--- /dev/null
+++ b/app/assets/images/emoji/cat2.png
Binary files differ
diff --git a/app/assets/images/emoji/cd.png b/app/assets/images/emoji/cd.png
new file mode 100755
index 00000000000..baff835c489
--- /dev/null
+++ b/app/assets/images/emoji/cd.png
Binary files differ
diff --git a/app/assets/images/emoji/chart.png b/app/assets/images/emoji/chart.png
new file mode 100755
index 00000000000..ac2c4bb093e
--- /dev/null
+++ b/app/assets/images/emoji/chart.png
Binary files differ
diff --git a/app/assets/images/emoji/chart_with_downwards_trend.png b/app/assets/images/emoji/chart_with_downwards_trend.png
new file mode 100755
index 00000000000..65b82f04413
--- /dev/null
+++ b/app/assets/images/emoji/chart_with_downwards_trend.png
Binary files differ
diff --git a/app/assets/images/emoji/chart_with_upwards_trend.png b/app/assets/images/emoji/chart_with_upwards_trend.png
new file mode 100755
index 00000000000..de3e9ba7b57
--- /dev/null
+++ b/app/assets/images/emoji/chart_with_upwards_trend.png
Binary files differ
diff --git a/app/assets/images/emoji/checkered_flag.png b/app/assets/images/emoji/checkered_flag.png
new file mode 100755
index 00000000000..ead4a68dd37
--- /dev/null
+++ b/app/assets/images/emoji/checkered_flag.png
Binary files differ
diff --git a/app/assets/images/emoji/cherries.png b/app/assets/images/emoji/cherries.png
new file mode 100755
index 00000000000..8d3e044f2f5
--- /dev/null
+++ b/app/assets/images/emoji/cherries.png
Binary files differ
diff --git a/app/assets/images/emoji/cherry_blossom.png b/app/assets/images/emoji/cherry_blossom.png
new file mode 100755
index 00000000000..e0315549990
--- /dev/null
+++ b/app/assets/images/emoji/cherry_blossom.png
Binary files differ
diff --git a/app/assets/images/emoji/chestnut.png b/app/assets/images/emoji/chestnut.png
new file mode 100755
index 00000000000..066fb6bf6df
--- /dev/null
+++ b/app/assets/images/emoji/chestnut.png
Binary files differ
diff --git a/app/assets/images/emoji/chicken.png b/app/assets/images/emoji/chicken.png
new file mode 100755
index 00000000000..6d25c0ef4ad
--- /dev/null
+++ b/app/assets/images/emoji/chicken.png
Binary files differ
diff --git a/app/assets/images/emoji/children_crossing.png b/app/assets/images/emoji/children_crossing.png
new file mode 100755
index 00000000000..b0302ae6258
--- /dev/null
+++ b/app/assets/images/emoji/children_crossing.png
Binary files differ
diff --git a/app/assets/images/emoji/chocolate_bar.png b/app/assets/images/emoji/chocolate_bar.png
new file mode 100755
index 00000000000..c7ec19d0796
--- /dev/null
+++ b/app/assets/images/emoji/chocolate_bar.png
Binary files differ
diff --git a/app/assets/images/emoji/christmas_tree.png b/app/assets/images/emoji/christmas_tree.png
new file mode 100755
index 00000000000..d813b9593dc
--- /dev/null
+++ b/app/assets/images/emoji/christmas_tree.png
Binary files differ
diff --git a/app/assets/images/emoji/church.png b/app/assets/images/emoji/church.png
new file mode 100755
index 00000000000..4c07c6b9ea5
--- /dev/null
+++ b/app/assets/images/emoji/church.png
Binary files differ
diff --git a/app/assets/images/emoji/cinema.png b/app/assets/images/emoji/cinema.png
new file mode 100755
index 00000000000..a990ccf99c2
--- /dev/null
+++ b/app/assets/images/emoji/cinema.png
Binary files differ
diff --git a/app/assets/images/emoji/circus_tent.png b/app/assets/images/emoji/circus_tent.png
new file mode 100755
index 00000000000..4af8719aa03
--- /dev/null
+++ b/app/assets/images/emoji/circus_tent.png
Binary files differ
diff --git a/app/assets/images/emoji/city_sunrise.png b/app/assets/images/emoji/city_sunrise.png
new file mode 100755
index 00000000000..91ca2a40b69
--- /dev/null
+++ b/app/assets/images/emoji/city_sunrise.png
Binary files differ
diff --git a/app/assets/images/emoji/city_sunset.png b/app/assets/images/emoji/city_sunset.png
new file mode 100755
index 00000000000..7cb178a2cc6
--- /dev/null
+++ b/app/assets/images/emoji/city_sunset.png
Binary files differ
diff --git a/app/assets/images/emoji/cl.png b/app/assets/images/emoji/cl.png
new file mode 100755
index 00000000000..15ac67525aa
--- /dev/null
+++ b/app/assets/images/emoji/cl.png
Binary files differ
diff --git a/app/assets/images/emoji/clap.png b/app/assets/images/emoji/clap.png
new file mode 100755
index 00000000000..d01c982a75a
--- /dev/null
+++ b/app/assets/images/emoji/clap.png
Binary files differ
diff --git a/app/assets/images/emoji/clapper.png b/app/assets/images/emoji/clapper.png
new file mode 100755
index 00000000000..4e1dc111d76
--- /dev/null
+++ b/app/assets/images/emoji/clapper.png
Binary files differ
diff --git a/app/assets/images/emoji/clipboard.png b/app/assets/images/emoji/clipboard.png
new file mode 100755
index 00000000000..e2c74e6df82
--- /dev/null
+++ b/app/assets/images/emoji/clipboard.png
Binary files differ
diff --git a/app/assets/images/emoji/clock1.png b/app/assets/images/emoji/clock1.png
new file mode 100755
index 00000000000..9174d4e0bc0
--- /dev/null
+++ b/app/assets/images/emoji/clock1.png
Binary files differ
diff --git a/app/assets/images/emoji/clock10.png b/app/assets/images/emoji/clock10.png
new file mode 100755
index 00000000000..39f590d6945
--- /dev/null
+++ b/app/assets/images/emoji/clock10.png
Binary files differ
diff --git a/app/assets/images/emoji/clock1030.png b/app/assets/images/emoji/clock1030.png
new file mode 100755
index 00000000000..84a3bc8fbd0
--- /dev/null
+++ b/app/assets/images/emoji/clock1030.png
Binary files differ
diff --git a/app/assets/images/emoji/clock11.png b/app/assets/images/emoji/clock11.png
new file mode 100755
index 00000000000..ddb53fadad6
--- /dev/null
+++ b/app/assets/images/emoji/clock11.png
Binary files differ
diff --git a/app/assets/images/emoji/clock1130.png b/app/assets/images/emoji/clock1130.png
new file mode 100755
index 00000000000..415999ec838
--- /dev/null
+++ b/app/assets/images/emoji/clock1130.png
Binary files differ
diff --git a/app/assets/images/emoji/clock12.png b/app/assets/images/emoji/clock12.png
new file mode 100755
index 00000000000..87b132878b7
--- /dev/null
+++ b/app/assets/images/emoji/clock12.png
Binary files differ
diff --git a/app/assets/images/emoji/clock1230.png b/app/assets/images/emoji/clock1230.png
new file mode 100755
index 00000000000..a6527154d1f
--- /dev/null
+++ b/app/assets/images/emoji/clock1230.png
Binary files differ
diff --git a/app/assets/images/emoji/clock130.png b/app/assets/images/emoji/clock130.png
new file mode 100755
index 00000000000..df939201900
--- /dev/null
+++ b/app/assets/images/emoji/clock130.png
Binary files differ
diff --git a/app/assets/images/emoji/clock2.png b/app/assets/images/emoji/clock2.png
new file mode 100755
index 00000000000..65b3b3af0e1
--- /dev/null
+++ b/app/assets/images/emoji/clock2.png
Binary files differ
diff --git a/app/assets/images/emoji/clock230.png b/app/assets/images/emoji/clock230.png
new file mode 100755
index 00000000000..f12c6912af7
--- /dev/null
+++ b/app/assets/images/emoji/clock230.png
Binary files differ
diff --git a/app/assets/images/emoji/clock3.png b/app/assets/images/emoji/clock3.png
new file mode 100755
index 00000000000..3e44d64e2fb
--- /dev/null
+++ b/app/assets/images/emoji/clock3.png
Binary files differ
diff --git a/app/assets/images/emoji/clock330.png b/app/assets/images/emoji/clock330.png
new file mode 100755
index 00000000000..1dc9628ea24
--- /dev/null
+++ b/app/assets/images/emoji/clock330.png
Binary files differ
diff --git a/app/assets/images/emoji/clock4.png b/app/assets/images/emoji/clock4.png
new file mode 100755
index 00000000000..948ed1a380c
--- /dev/null
+++ b/app/assets/images/emoji/clock4.png
Binary files differ
diff --git a/app/assets/images/emoji/clock430.png b/app/assets/images/emoji/clock430.png
new file mode 100755
index 00000000000..7726aaea1bc
--- /dev/null
+++ b/app/assets/images/emoji/clock430.png
Binary files differ
diff --git a/app/assets/images/emoji/clock5.png b/app/assets/images/emoji/clock5.png
new file mode 100755
index 00000000000..b010b4f8aaf
--- /dev/null
+++ b/app/assets/images/emoji/clock5.png
Binary files differ
diff --git a/app/assets/images/emoji/clock530.png b/app/assets/images/emoji/clock530.png
new file mode 100755
index 00000000000..e08d4ad2bac
--- /dev/null
+++ b/app/assets/images/emoji/clock530.png
Binary files differ
diff --git a/app/assets/images/emoji/clock6.png b/app/assets/images/emoji/clock6.png
new file mode 100755
index 00000000000..76bf8cf1854
--- /dev/null
+++ b/app/assets/images/emoji/clock6.png
Binary files differ
diff --git a/app/assets/images/emoji/clock630.png b/app/assets/images/emoji/clock630.png
new file mode 100755
index 00000000000..46f0681f1c4
--- /dev/null
+++ b/app/assets/images/emoji/clock630.png
Binary files differ
diff --git a/app/assets/images/emoji/clock7.png b/app/assets/images/emoji/clock7.png
new file mode 100755
index 00000000000..d48f645d835
--- /dev/null
+++ b/app/assets/images/emoji/clock7.png
Binary files differ
diff --git a/app/assets/images/emoji/clock730.png b/app/assets/images/emoji/clock730.png
new file mode 100755
index 00000000000..18aab22fd8c
--- /dev/null
+++ b/app/assets/images/emoji/clock730.png
Binary files differ
diff --git a/app/assets/images/emoji/clock8.png b/app/assets/images/emoji/clock8.png
new file mode 100755
index 00000000000..74c770d891c
--- /dev/null
+++ b/app/assets/images/emoji/clock8.png
Binary files differ
diff --git a/app/assets/images/emoji/clock830.png b/app/assets/images/emoji/clock830.png
new file mode 100755
index 00000000000..ec3e382dd4c
--- /dev/null
+++ b/app/assets/images/emoji/clock830.png
Binary files differ
diff --git a/app/assets/images/emoji/clock9.png b/app/assets/images/emoji/clock9.png
new file mode 100755
index 00000000000..f009d14ac11
--- /dev/null
+++ b/app/assets/images/emoji/clock9.png
Binary files differ
diff --git a/app/assets/images/emoji/clock930.png b/app/assets/images/emoji/clock930.png
new file mode 100755
index 00000000000..fd35221428f
--- /dev/null
+++ b/app/assets/images/emoji/clock930.png
Binary files differ
diff --git a/app/assets/images/emoji/closed_book.png b/app/assets/images/emoji/closed_book.png
new file mode 100755
index 00000000000..484029c5ebc
--- /dev/null
+++ b/app/assets/images/emoji/closed_book.png
Binary files differ
diff --git a/app/assets/images/emoji/closed_lock_with_key.png b/app/assets/images/emoji/closed_lock_with_key.png
new file mode 100755
index 00000000000..e6fdf6cb204
--- /dev/null
+++ b/app/assets/images/emoji/closed_lock_with_key.png
Binary files differ
diff --git a/app/assets/images/emoji/closed_umbrella.png b/app/assets/images/emoji/closed_umbrella.png
new file mode 100755
index 00000000000..0b719f086b1
--- /dev/null
+++ b/app/assets/images/emoji/closed_umbrella.png
Binary files differ
diff --git a/app/assets/images/emoji/cloud.png b/app/assets/images/emoji/cloud.png
new file mode 100755
index 00000000000..b31c08c0b88
--- /dev/null
+++ b/app/assets/images/emoji/cloud.png
Binary files differ
diff --git a/app/assets/images/emoji/clubs.png b/app/assets/images/emoji/clubs.png
new file mode 100755
index 00000000000..bfab5365695
--- /dev/null
+++ b/app/assets/images/emoji/clubs.png
Binary files differ
diff --git a/app/assets/images/emoji/cn.png b/app/assets/images/emoji/cn.png
new file mode 100755
index 00000000000..b30dcc53df9
--- /dev/null
+++ b/app/assets/images/emoji/cn.png
Binary files differ
diff --git a/app/assets/images/emoji/cocktail.png b/app/assets/images/emoji/cocktail.png
new file mode 100755
index 00000000000..28b45ea5145
--- /dev/null
+++ b/app/assets/images/emoji/cocktail.png
Binary files differ
diff --git a/app/assets/images/emoji/coffee.png b/app/assets/images/emoji/coffee.png
new file mode 100755
index 00000000000..57e1adcb04a
--- /dev/null
+++ b/app/assets/images/emoji/coffee.png
Binary files differ
diff --git a/app/assets/images/emoji/cold_sweat.png b/app/assets/images/emoji/cold_sweat.png
new file mode 100755
index 00000000000..b9e39bc60fb
--- /dev/null
+++ b/app/assets/images/emoji/cold_sweat.png
Binary files differ
diff --git a/app/assets/images/emoji/collision.png b/app/assets/images/emoji/collision.png
new file mode 100755
index 00000000000..bddeb8f49f8
--- /dev/null
+++ b/app/assets/images/emoji/collision.png
Binary files differ
diff --git a/app/assets/images/emoji/computer.png b/app/assets/images/emoji/computer.png
new file mode 100755
index 00000000000..d4d2687627e
--- /dev/null
+++ b/app/assets/images/emoji/computer.png
Binary files differ
diff --git a/app/assets/images/emoji/confetti_ball.png b/app/assets/images/emoji/confetti_ball.png
new file mode 100755
index 00000000000..bd293e3d874
--- /dev/null
+++ b/app/assets/images/emoji/confetti_ball.png
Binary files differ
diff --git a/app/assets/images/emoji/confounded.png b/app/assets/images/emoji/confounded.png
new file mode 100755
index 00000000000..762c3766abc
--- /dev/null
+++ b/app/assets/images/emoji/confounded.png
Binary files differ
diff --git a/app/assets/images/emoji/congratulations.png b/app/assets/images/emoji/congratulations.png
new file mode 100755
index 00000000000..dcbb1d229ed
--- /dev/null
+++ b/app/assets/images/emoji/congratulations.png
Binary files differ
diff --git a/app/assets/images/emoji/construction.png b/app/assets/images/emoji/construction.png
new file mode 100755
index 00000000000..523e9f10bf6
--- /dev/null
+++ b/app/assets/images/emoji/construction.png
Binary files differ
diff --git a/app/assets/images/emoji/construction_worker.png b/app/assets/images/emoji/construction_worker.png
new file mode 100755
index 00000000000..4d648604786
--- /dev/null
+++ b/app/assets/images/emoji/construction_worker.png
Binary files differ
diff --git a/app/assets/images/emoji/convenience_store.png b/app/assets/images/emoji/convenience_store.png
new file mode 100755
index 00000000000..671696c2dfd
--- /dev/null
+++ b/app/assets/images/emoji/convenience_store.png
Binary files differ
diff --git a/app/assets/images/emoji/cookie.png b/app/assets/images/emoji/cookie.png
new file mode 100755
index 00000000000..653edb258c6
--- /dev/null
+++ b/app/assets/images/emoji/cookie.png
Binary files differ
diff --git a/app/assets/images/emoji/cool.png b/app/assets/images/emoji/cool.png
new file mode 100755
index 00000000000..937dcd79210
--- /dev/null
+++ b/app/assets/images/emoji/cool.png
Binary files differ
diff --git a/app/assets/images/emoji/cop.png b/app/assets/images/emoji/cop.png
new file mode 100755
index 00000000000..43a5a84f821
--- /dev/null
+++ b/app/assets/images/emoji/cop.png
Binary files differ
diff --git a/app/assets/images/emoji/copyright.png b/app/assets/images/emoji/copyright.png
new file mode 100755
index 00000000000..38493c33fca
--- /dev/null
+++ b/app/assets/images/emoji/copyright.png
Binary files differ
diff --git a/app/assets/images/emoji/corn.png b/app/assets/images/emoji/corn.png
new file mode 100755
index 00000000000..fe5d8b1287e
--- /dev/null
+++ b/app/assets/images/emoji/corn.png
Binary files differ
diff --git a/app/assets/images/emoji/couple.png b/app/assets/images/emoji/couple.png
new file mode 100755
index 00000000000..9e51f40e16e
--- /dev/null
+++ b/app/assets/images/emoji/couple.png
Binary files differ
diff --git a/app/assets/images/emoji/couple_with_heart.png b/app/assets/images/emoji/couple_with_heart.png
new file mode 100755
index 00000000000..c503f40a931
--- /dev/null
+++ b/app/assets/images/emoji/couple_with_heart.png
Binary files differ
diff --git a/app/assets/images/emoji/couplekiss.png b/app/assets/images/emoji/couplekiss.png
new file mode 100755
index 00000000000..d02790822ea
--- /dev/null
+++ b/app/assets/images/emoji/couplekiss.png
Binary files differ
diff --git a/app/assets/images/emoji/cow.png b/app/assets/images/emoji/cow.png
new file mode 100755
index 00000000000..12e1ab6c0bd
--- /dev/null
+++ b/app/assets/images/emoji/cow.png
Binary files differ
diff --git a/app/assets/images/emoji/cow2.png b/app/assets/images/emoji/cow2.png
new file mode 100755
index 00000000000..594c92155bc
--- /dev/null
+++ b/app/assets/images/emoji/cow2.png
Binary files differ
diff --git a/app/assets/images/emoji/credit_card.png b/app/assets/images/emoji/credit_card.png
new file mode 100755
index 00000000000..be1c1dd3063
--- /dev/null
+++ b/app/assets/images/emoji/credit_card.png
Binary files differ
diff --git a/app/assets/images/emoji/crocodile.png b/app/assets/images/emoji/crocodile.png
new file mode 100755
index 00000000000..7435d5ab3c4
--- /dev/null
+++ b/app/assets/images/emoji/crocodile.png
Binary files differ
diff --git a/app/assets/images/emoji/crossed_flags.png b/app/assets/images/emoji/crossed_flags.png
new file mode 100755
index 00000000000..2397bcd0fc9
--- /dev/null
+++ b/app/assets/images/emoji/crossed_flags.png
Binary files differ
diff --git a/app/assets/images/emoji/crown.png b/app/assets/images/emoji/crown.png
new file mode 100755
index 00000000000..39da1d52873
--- /dev/null
+++ b/app/assets/images/emoji/crown.png
Binary files differ
diff --git a/app/assets/images/emoji/cry.png b/app/assets/images/emoji/cry.png
new file mode 100755
index 00000000000..6d0d9afd284
--- /dev/null
+++ b/app/assets/images/emoji/cry.png
Binary files differ
diff --git a/app/assets/images/emoji/crying_cat_face.png b/app/assets/images/emoji/crying_cat_face.png
new file mode 100755
index 00000000000..42d4c27cabf
--- /dev/null
+++ b/app/assets/images/emoji/crying_cat_face.png
Binary files differ
diff --git a/app/assets/images/emoji/crystal_ball.png b/app/assets/images/emoji/crystal_ball.png
new file mode 100755
index 00000000000..6d2c6c42d44
--- /dev/null
+++ b/app/assets/images/emoji/crystal_ball.png
Binary files differ
diff --git a/app/assets/images/emoji/cupid.png b/app/assets/images/emoji/cupid.png
new file mode 100755
index 00000000000..4987284767c
--- /dev/null
+++ b/app/assets/images/emoji/cupid.png
Binary files differ
diff --git a/app/assets/images/emoji/curly_loop.png b/app/assets/images/emoji/curly_loop.png
new file mode 100755
index 00000000000..8f051aca43e
--- /dev/null
+++ b/app/assets/images/emoji/curly_loop.png
Binary files differ
diff --git a/app/assets/images/emoji/currency_exchange.png b/app/assets/images/emoji/currency_exchange.png
new file mode 100755
index 00000000000..6ebebe70afb
--- /dev/null
+++ b/app/assets/images/emoji/currency_exchange.png
Binary files differ
diff --git a/app/assets/images/emoji/curry.png b/app/assets/images/emoji/curry.png
new file mode 100755
index 00000000000..7983c706a40
--- /dev/null
+++ b/app/assets/images/emoji/curry.png
Binary files differ
diff --git a/app/assets/images/emoji/custard.png b/app/assets/images/emoji/custard.png
new file mode 100755
index 00000000000..9f843b4c130
--- /dev/null
+++ b/app/assets/images/emoji/custard.png
Binary files differ
diff --git a/app/assets/images/emoji/customs.png b/app/assets/images/emoji/customs.png
new file mode 100755
index 00000000000..92691e3117c
--- /dev/null
+++ b/app/assets/images/emoji/customs.png
Binary files differ
diff --git a/app/assets/images/emoji/cyclone.png b/app/assets/images/emoji/cyclone.png
new file mode 100755
index 00000000000..5fd2e4512f9
--- /dev/null
+++ b/app/assets/images/emoji/cyclone.png
Binary files differ
diff --git a/app/assets/images/emoji/dancer.png b/app/assets/images/emoji/dancer.png
new file mode 100755
index 00000000000..6885a0bc3d5
--- /dev/null
+++ b/app/assets/images/emoji/dancer.png
Binary files differ
diff --git a/app/assets/images/emoji/dancers.png b/app/assets/images/emoji/dancers.png
new file mode 100755
index 00000000000..2dfb451a73a
--- /dev/null
+++ b/app/assets/images/emoji/dancers.png
Binary files differ
diff --git a/app/assets/images/emoji/dango.png b/app/assets/images/emoji/dango.png
new file mode 100755
index 00000000000..2d042aebeb5
--- /dev/null
+++ b/app/assets/images/emoji/dango.png
Binary files differ
diff --git a/app/assets/images/emoji/dart.png b/app/assets/images/emoji/dart.png
new file mode 100755
index 00000000000..0438fe54f99
--- /dev/null
+++ b/app/assets/images/emoji/dart.png
Binary files differ
diff --git a/app/assets/images/emoji/dash.png b/app/assets/images/emoji/dash.png
new file mode 100755
index 00000000000..dc2c0a8f468
--- /dev/null
+++ b/app/assets/images/emoji/dash.png
Binary files differ
diff --git a/app/assets/images/emoji/date.png b/app/assets/images/emoji/date.png
new file mode 100755
index 00000000000..6ad2efa5fdc
--- /dev/null
+++ b/app/assets/images/emoji/date.png
Binary files differ
diff --git a/app/assets/images/emoji/de.png b/app/assets/images/emoji/de.png
new file mode 100755
index 00000000000..16a28548c9e
--- /dev/null
+++ b/app/assets/images/emoji/de.png
Binary files differ
diff --git a/app/assets/images/emoji/deciduous_tree.png b/app/assets/images/emoji/deciduous_tree.png
new file mode 100755
index 00000000000..9bb16bdfecb
--- /dev/null
+++ b/app/assets/images/emoji/deciduous_tree.png
Binary files differ
diff --git a/app/assets/images/emoji/department_store.png b/app/assets/images/emoji/department_store.png
new file mode 100755
index 00000000000..68d959c507d
--- /dev/null
+++ b/app/assets/images/emoji/department_store.png
Binary files differ
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
new file mode 100755
index 00000000000..dfd1098b394
--- /dev/null
+++ b/app/assets/images/emoji/diamond_shape_with_a_dot_inside.png
Binary files differ
diff --git a/app/assets/images/emoji/diamonds.png b/app/assets/images/emoji/diamonds.png
new file mode 100755
index 00000000000..fe0827758b1
--- /dev/null
+++ b/app/assets/images/emoji/diamonds.png
Binary files differ
diff --git a/app/assets/images/emoji/disappointed.png b/app/assets/images/emoji/disappointed.png
new file mode 100755
index 00000000000..82552008719
--- /dev/null
+++ b/app/assets/images/emoji/disappointed.png
Binary files differ
diff --git a/app/assets/images/emoji/dizzy.png b/app/assets/images/emoji/dizzy.png
new file mode 100755
index 00000000000..55213d2ddee
--- /dev/null
+++ b/app/assets/images/emoji/dizzy.png
Binary files differ
diff --git a/app/assets/images/emoji/dizzy_face.png b/app/assets/images/emoji/dizzy_face.png
new file mode 100755
index 00000000000..8001d6ff8f0
--- /dev/null
+++ b/app/assets/images/emoji/dizzy_face.png
Binary files differ
diff --git a/app/assets/images/emoji/do_not_litter.png b/app/assets/images/emoji/do_not_litter.png
new file mode 100755
index 00000000000..38c7ae7af23
--- /dev/null
+++ b/app/assets/images/emoji/do_not_litter.png
Binary files differ
diff --git a/app/assets/images/emoji/dog.png b/app/assets/images/emoji/dog.png
new file mode 100755
index 00000000000..389a02bf282
--- /dev/null
+++ b/app/assets/images/emoji/dog.png
Binary files differ
diff --git a/app/assets/images/emoji/dog2.png b/app/assets/images/emoji/dog2.png
new file mode 100755
index 00000000000..c7f6a24ac80
--- /dev/null
+++ b/app/assets/images/emoji/dog2.png
Binary files differ
diff --git a/app/assets/images/emoji/dollar.png b/app/assets/images/emoji/dollar.png
new file mode 100755
index 00000000000..63de8849519
--- /dev/null
+++ b/app/assets/images/emoji/dollar.png
Binary files differ
diff --git a/app/assets/images/emoji/dolls.png b/app/assets/images/emoji/dolls.png
new file mode 100755
index 00000000000..47ce33900ca
--- /dev/null
+++ b/app/assets/images/emoji/dolls.png
Binary files differ
diff --git a/app/assets/images/emoji/dolphin.png b/app/assets/images/emoji/dolphin.png
new file mode 100755
index 00000000000..9326077a927
--- /dev/null
+++ b/app/assets/images/emoji/dolphin.png
Binary files differ
diff --git a/app/assets/images/emoji/door.png b/app/assets/images/emoji/door.png
new file mode 100755
index 00000000000..83c819ae466
--- /dev/null
+++ b/app/assets/images/emoji/door.png
Binary files differ
diff --git a/app/assets/images/emoji/doughnut.png b/app/assets/images/emoji/doughnut.png
new file mode 100755
index 00000000000..ccf86912960
--- /dev/null
+++ b/app/assets/images/emoji/doughnut.png
Binary files differ
diff --git a/app/assets/images/emoji/dragon.png b/app/assets/images/emoji/dragon.png
new file mode 100755
index 00000000000..e399d60e1d8
--- /dev/null
+++ b/app/assets/images/emoji/dragon.png
Binary files differ
diff --git a/app/assets/images/emoji/dragon_face.png b/app/assets/images/emoji/dragon_face.png
new file mode 100755
index 00000000000..e5e556bd105
--- /dev/null
+++ b/app/assets/images/emoji/dragon_face.png
Binary files differ
diff --git a/app/assets/images/emoji/dress.png b/app/assets/images/emoji/dress.png
new file mode 100755
index 00000000000..6434e2e2f39
--- /dev/null
+++ b/app/assets/images/emoji/dress.png
Binary files differ
diff --git a/app/assets/images/emoji/dromedary_camel.png b/app/assets/images/emoji/dromedary_camel.png
new file mode 100755
index 00000000000..c8c7b9ffa0f
--- /dev/null
+++ b/app/assets/images/emoji/dromedary_camel.png
Binary files differ
diff --git a/app/assets/images/emoji/droplet.png b/app/assets/images/emoji/droplet.png
new file mode 100755
index 00000000000..9eff46339f8
--- /dev/null
+++ b/app/assets/images/emoji/droplet.png
Binary files differ
diff --git a/app/assets/images/emoji/dvd.png b/app/assets/images/emoji/dvd.png
new file mode 100755
index 00000000000..363c83d01c5
--- /dev/null
+++ b/app/assets/images/emoji/dvd.png
Binary files differ
diff --git a/app/assets/images/emoji/e-mail.png b/app/assets/images/emoji/e-mail.png
new file mode 100755
index 00000000000..176a8e1e825
--- /dev/null
+++ b/app/assets/images/emoji/e-mail.png
Binary files differ
diff --git a/app/assets/images/emoji/ear.png b/app/assets/images/emoji/ear.png
new file mode 100755
index 00000000000..2bbbf10c9ef
--- /dev/null
+++ b/app/assets/images/emoji/ear.png
Binary files differ
diff --git a/app/assets/images/emoji/ear_of_rice.png b/app/assets/images/emoji/ear_of_rice.png
new file mode 100755
index 00000000000..a9bba5c2c14
--- /dev/null
+++ b/app/assets/images/emoji/ear_of_rice.png
Binary files differ
diff --git a/app/assets/images/emoji/earth_africa.png b/app/assets/images/emoji/earth_africa.png
new file mode 100755
index 00000000000..44ce5ecb621
--- /dev/null
+++ b/app/assets/images/emoji/earth_africa.png
Binary files differ
diff --git a/app/assets/images/emoji/earth_americas.png b/app/assets/images/emoji/earth_americas.png
new file mode 100755
index 00000000000..97d71767136
--- /dev/null
+++ b/app/assets/images/emoji/earth_americas.png
Binary files differ
diff --git a/app/assets/images/emoji/earth_asia.png b/app/assets/images/emoji/earth_asia.png
new file mode 100755
index 00000000000..95ec357ca87
--- /dev/null
+++ b/app/assets/images/emoji/earth_asia.png
Binary files differ
diff --git a/app/assets/images/emoji/egg.png b/app/assets/images/emoji/egg.png
new file mode 100755
index 00000000000..c3de6ae4ea0
--- /dev/null
+++ b/app/assets/images/emoji/egg.png
Binary files differ
diff --git a/app/assets/images/emoji/eggplant.png b/app/assets/images/emoji/eggplant.png
new file mode 100755
index 00000000000..66f25fce447
--- /dev/null
+++ b/app/assets/images/emoji/eggplant.png
Binary files differ
diff --git a/app/assets/images/emoji/eight.png b/app/assets/images/emoji/eight.png
new file mode 100755
index 00000000000..7bdb422327c
--- /dev/null
+++ b/app/assets/images/emoji/eight.png
Binary files differ
diff --git a/app/assets/images/emoji/eight_pointed_black_star.png b/app/assets/images/emoji/eight_pointed_black_star.png
new file mode 100755
index 00000000000..6ddaa21f47b
--- /dev/null
+++ b/app/assets/images/emoji/eight_pointed_black_star.png
Binary files differ
diff --git a/app/assets/images/emoji/eight_spoked_asterisk.png b/app/assets/images/emoji/eight_spoked_asterisk.png
new file mode 100755
index 00000000000..946a20333a2
--- /dev/null
+++ b/app/assets/images/emoji/eight_spoked_asterisk.png
Binary files differ
diff --git a/app/assets/images/emoji/electric_plug.png b/app/assets/images/emoji/electric_plug.png
new file mode 100755
index 00000000000..7a3d6cee683
--- /dev/null
+++ b/app/assets/images/emoji/electric_plug.png
Binary files differ
diff --git a/app/assets/images/emoji/elephant.png b/app/assets/images/emoji/elephant.png
new file mode 100755
index 00000000000..5ca04570e24
--- /dev/null
+++ b/app/assets/images/emoji/elephant.png
Binary files differ
diff --git a/app/assets/images/emoji/email.png b/app/assets/images/emoji/email.png
new file mode 100755
index 00000000000..0e01fd5f052
--- /dev/null
+++ b/app/assets/images/emoji/email.png
Binary files differ
diff --git a/app/assets/images/emoji/end.png b/app/assets/images/emoji/end.png
new file mode 100755
index 00000000000..edb0bda2450
--- /dev/null
+++ b/app/assets/images/emoji/end.png
Binary files differ
diff --git a/app/assets/images/emoji/envelope.png b/app/assets/images/emoji/envelope.png
new file mode 100755
index 00000000000..3631861bbfd
--- /dev/null
+++ b/app/assets/images/emoji/envelope.png
Binary files differ
diff --git a/app/assets/images/emoji/es.png b/app/assets/images/emoji/es.png
new file mode 100755
index 00000000000..71b30bff352
--- /dev/null
+++ b/app/assets/images/emoji/es.png
Binary files differ
diff --git a/app/assets/images/emoji/euro.png b/app/assets/images/emoji/euro.png
new file mode 100755
index 00000000000..1c5904b7144
--- /dev/null
+++ b/app/assets/images/emoji/euro.png
Binary files differ
diff --git a/app/assets/images/emoji/european_castle.png b/app/assets/images/emoji/european_castle.png
new file mode 100755
index 00000000000..8229b8a8a94
--- /dev/null
+++ b/app/assets/images/emoji/european_castle.png
Binary files differ
diff --git a/app/assets/images/emoji/european_post_office.png b/app/assets/images/emoji/european_post_office.png
new file mode 100755
index 00000000000..0f65b145305
--- /dev/null
+++ b/app/assets/images/emoji/european_post_office.png
Binary files differ
diff --git a/app/assets/images/emoji/evergreen_tree.png b/app/assets/images/emoji/evergreen_tree.png
new file mode 100755
index 00000000000..ae8ad103763
--- /dev/null
+++ b/app/assets/images/emoji/evergreen_tree.png
Binary files differ
diff --git a/app/assets/images/emoji/exclamation.png b/app/assets/images/emoji/exclamation.png
new file mode 100755
index 00000000000..77bbdeabcf4
--- /dev/null
+++ b/app/assets/images/emoji/exclamation.png
Binary files differ
diff --git a/app/assets/images/emoji/eyeglasses.png b/app/assets/images/emoji/eyeglasses.png
new file mode 100755
index 00000000000..a3cf75a27a1
--- /dev/null
+++ b/app/assets/images/emoji/eyeglasses.png
Binary files differ
diff --git a/app/assets/images/emoji/eyes.png b/app/assets/images/emoji/eyes.png
new file mode 100755
index 00000000000..dc2216f63d6
--- /dev/null
+++ b/app/assets/images/emoji/eyes.png
Binary files differ
diff --git a/app/assets/images/emoji/facepunch.png b/app/assets/images/emoji/facepunch.png
new file mode 100755
index 00000000000..2d41fd37e8d
--- /dev/null
+++ b/app/assets/images/emoji/facepunch.png
Binary files differ
diff --git a/app/assets/images/emoji/factory.png b/app/assets/images/emoji/factory.png
new file mode 100755
index 00000000000..6404634793e
--- /dev/null
+++ b/app/assets/images/emoji/factory.png
Binary files differ
diff --git a/app/assets/images/emoji/fallen_leaf.png b/app/assets/images/emoji/fallen_leaf.png
new file mode 100755
index 00000000000..d49f9c1757d
--- /dev/null
+++ b/app/assets/images/emoji/fallen_leaf.png
Binary files differ
diff --git a/app/assets/images/emoji/family.png b/app/assets/images/emoji/family.png
new file mode 100755
index 00000000000..b4b365f3a5c
--- /dev/null
+++ b/app/assets/images/emoji/family.png
Binary files differ
diff --git a/app/assets/images/emoji/fast_forward.png b/app/assets/images/emoji/fast_forward.png
new file mode 100755
index 00000000000..8830e146e59
--- /dev/null
+++ b/app/assets/images/emoji/fast_forward.png
Binary files differ
diff --git a/app/assets/images/emoji/fax.png b/app/assets/images/emoji/fax.png
new file mode 100755
index 00000000000..62be2c958f4
--- /dev/null
+++ b/app/assets/images/emoji/fax.png
Binary files differ
diff --git a/app/assets/images/emoji/fearful.png b/app/assets/images/emoji/fearful.png
new file mode 100755
index 00000000000..513fce47b68
--- /dev/null
+++ b/app/assets/images/emoji/fearful.png
Binary files differ
diff --git a/app/assets/images/emoji/feelsgood.png b/app/assets/images/emoji/feelsgood.png
new file mode 100755
index 00000000000..361f969bc1b
--- /dev/null
+++ b/app/assets/images/emoji/feelsgood.png
Binary files differ
diff --git a/app/assets/images/emoji/feet.png b/app/assets/images/emoji/feet.png
new file mode 100755
index 00000000000..1b0147b1d23
--- /dev/null
+++ b/app/assets/images/emoji/feet.png
Binary files differ
diff --git a/app/assets/images/emoji/ferris_wheel.png b/app/assets/images/emoji/ferris_wheel.png
new file mode 100755
index 00000000000..54a1dcfa1ef
--- /dev/null
+++ b/app/assets/images/emoji/ferris_wheel.png
Binary files differ
diff --git a/app/assets/images/emoji/file_folder.png b/app/assets/images/emoji/file_folder.png
new file mode 100755
index 00000000000..4d8bebf8a90
--- /dev/null
+++ b/app/assets/images/emoji/file_folder.png
Binary files differ
diff --git a/app/assets/images/emoji/finnadie.png b/app/assets/images/emoji/finnadie.png
new file mode 100755
index 00000000000..bfc5a0d93de
--- /dev/null
+++ b/app/assets/images/emoji/finnadie.png
Binary files differ
diff --git a/app/assets/images/emoji/fire.png b/app/assets/images/emoji/fire.png
new file mode 100755
index 00000000000..f2a3149bbfd
--- /dev/null
+++ b/app/assets/images/emoji/fire.png
Binary files differ
diff --git a/app/assets/images/emoji/fire_engine.png b/app/assets/images/emoji/fire_engine.png
new file mode 100755
index 00000000000..9e6c59c9976
--- /dev/null
+++ b/app/assets/images/emoji/fire_engine.png
Binary files differ
diff --git a/app/assets/images/emoji/fireworks.png b/app/assets/images/emoji/fireworks.png
new file mode 100755
index 00000000000..b4eccd5775b
--- /dev/null
+++ b/app/assets/images/emoji/fireworks.png
Binary files differ
diff --git a/app/assets/images/emoji/first_quarter_moon.png b/app/assets/images/emoji/first_quarter_moon.png
new file mode 100755
index 00000000000..f38c236937f
--- /dev/null
+++ b/app/assets/images/emoji/first_quarter_moon.png
Binary files differ
diff --git a/app/assets/images/emoji/first_quarter_moon_with_face.png b/app/assets/images/emoji/first_quarter_moon_with_face.png
new file mode 100755
index 00000000000..85ae2ce72dc
--- /dev/null
+++ b/app/assets/images/emoji/first_quarter_moon_with_face.png
Binary files differ
diff --git a/app/assets/images/emoji/fish.png b/app/assets/images/emoji/fish.png
new file mode 100755
index 00000000000..90bdda2c920
--- /dev/null
+++ b/app/assets/images/emoji/fish.png
Binary files differ
diff --git a/app/assets/images/emoji/fish_cake.png b/app/assets/images/emoji/fish_cake.png
new file mode 100755
index 00000000000..a8f22614d62
--- /dev/null
+++ b/app/assets/images/emoji/fish_cake.png
Binary files differ
diff --git a/app/assets/images/emoji/fishing_pole_and_fish.png b/app/assets/images/emoji/fishing_pole_and_fish.png
new file mode 100755
index 00000000000..d84609c3b7b
--- /dev/null
+++ b/app/assets/images/emoji/fishing_pole_and_fish.png
Binary files differ
diff --git a/app/assets/images/emoji/fist.png b/app/assets/images/emoji/fist.png
new file mode 100755
index 00000000000..ecc8874c2fd
--- /dev/null
+++ b/app/assets/images/emoji/fist.png
Binary files differ
diff --git a/app/assets/images/emoji/five.png b/app/assets/images/emoji/five.png
new file mode 100755
index 00000000000..794321aa22a
--- /dev/null
+++ b/app/assets/images/emoji/five.png
Binary files differ
diff --git a/app/assets/images/emoji/flags.png b/app/assets/images/emoji/flags.png
new file mode 100755
index 00000000000..540164e84e4
--- /dev/null
+++ b/app/assets/images/emoji/flags.png
Binary files differ
diff --git a/app/assets/images/emoji/flashlight.png b/app/assets/images/emoji/flashlight.png
new file mode 100755
index 00000000000..215940aa8f1
--- /dev/null
+++ b/app/assets/images/emoji/flashlight.png
Binary files differ
diff --git a/app/assets/images/emoji/floppy_disk.png b/app/assets/images/emoji/floppy_disk.png
new file mode 100755
index 00000000000..4ad56315ae6
--- /dev/null
+++ b/app/assets/images/emoji/floppy_disk.png
Binary files differ
diff --git a/app/assets/images/emoji/flower_playing_cards.png b/app/assets/images/emoji/flower_playing_cards.png
new file mode 100755
index 00000000000..cc46a6a1fa2
--- /dev/null
+++ b/app/assets/images/emoji/flower_playing_cards.png
Binary files differ
diff --git a/app/assets/images/emoji/flushed.png b/app/assets/images/emoji/flushed.png
new file mode 100755
index 00000000000..74b78c9c07a
--- /dev/null
+++ b/app/assets/images/emoji/flushed.png
Binary files differ
diff --git a/app/assets/images/emoji/foggy.png b/app/assets/images/emoji/foggy.png
new file mode 100755
index 00000000000..3c7b8b04b95
--- /dev/null
+++ b/app/assets/images/emoji/foggy.png
Binary files differ
diff --git a/app/assets/images/emoji/football.png b/app/assets/images/emoji/football.png
new file mode 100755
index 00000000000..0e4e168fa8f
--- /dev/null
+++ b/app/assets/images/emoji/football.png
Binary files differ
diff --git a/app/assets/images/emoji/fork_and_knife.png b/app/assets/images/emoji/fork_and_knife.png
new file mode 100755
index 00000000000..8ba4bc6535e
--- /dev/null
+++ b/app/assets/images/emoji/fork_and_knife.png
Binary files differ
diff --git a/app/assets/images/emoji/fountain.png b/app/assets/images/emoji/fountain.png
new file mode 100755
index 00000000000..da126e6486e
--- /dev/null
+++ b/app/assets/images/emoji/fountain.png
Binary files differ
diff --git a/app/assets/images/emoji/four.png b/app/assets/images/emoji/four.png
new file mode 100755
index 00000000000..14782ba23b9
--- /dev/null
+++ b/app/assets/images/emoji/four.png
Binary files differ
diff --git a/app/assets/images/emoji/four_leaf_clover.png b/app/assets/images/emoji/four_leaf_clover.png
new file mode 100755
index 00000000000..f2014bea44f
--- /dev/null
+++ b/app/assets/images/emoji/four_leaf_clover.png
Binary files differ
diff --git a/app/assets/images/emoji/fr.png b/app/assets/images/emoji/fr.png
new file mode 100755
index 00000000000..6311c91159e
--- /dev/null
+++ b/app/assets/images/emoji/fr.png
Binary files differ
diff --git a/app/assets/images/emoji/free.png b/app/assets/images/emoji/free.png
new file mode 100755
index 00000000000..c886cf2494c
--- /dev/null
+++ b/app/assets/images/emoji/free.png
Binary files differ
diff --git a/app/assets/images/emoji/fried_shrimp.png b/app/assets/images/emoji/fried_shrimp.png
new file mode 100755
index 00000000000..c8c284bf14a
--- /dev/null
+++ b/app/assets/images/emoji/fried_shrimp.png
Binary files differ
diff --git a/app/assets/images/emoji/fries.png b/app/assets/images/emoji/fries.png
new file mode 100755
index 00000000000..cfef66966a7
--- /dev/null
+++ b/app/assets/images/emoji/fries.png
Binary files differ
diff --git a/app/assets/images/emoji/frog.png b/app/assets/images/emoji/frog.png
new file mode 100755
index 00000000000..cfe11b18ff0
--- /dev/null
+++ b/app/assets/images/emoji/frog.png
Binary files differ
diff --git a/app/assets/images/emoji/fuelpump.png b/app/assets/images/emoji/fuelpump.png
new file mode 100755
index 00000000000..54c29aeb1db
--- /dev/null
+++ b/app/assets/images/emoji/fuelpump.png
Binary files differ
diff --git a/app/assets/images/emoji/full_moon.png b/app/assets/images/emoji/full_moon.png
new file mode 100755
index 00000000000..8ff657a2593
--- /dev/null
+++ b/app/assets/images/emoji/full_moon.png
Binary files differ
diff --git a/app/assets/images/emoji/full_moon_with_face.png b/app/assets/images/emoji/full_moon_with_face.png
new file mode 100755
index 00000000000..94395a4080b
--- /dev/null
+++ b/app/assets/images/emoji/full_moon_with_face.png
Binary files differ
diff --git a/app/assets/images/emoji/game_die.png b/app/assets/images/emoji/game_die.png
new file mode 100755
index 00000000000..4136e78ec98
--- /dev/null
+++ b/app/assets/images/emoji/game_die.png
Binary files differ
diff --git a/app/assets/images/emoji/gb.png b/app/assets/images/emoji/gb.png
new file mode 100755
index 00000000000..2a62c7a0810
--- /dev/null
+++ b/app/assets/images/emoji/gb.png
Binary files differ
diff --git a/app/assets/images/emoji/gem.png b/app/assets/images/emoji/gem.png
new file mode 100755
index 00000000000..8a5d8dad5c3
--- /dev/null
+++ b/app/assets/images/emoji/gem.png
Binary files differ
diff --git a/app/assets/images/emoji/gemini.png b/app/assets/images/emoji/gemini.png
new file mode 100755
index 00000000000..d926f6e88e9
--- /dev/null
+++ b/app/assets/images/emoji/gemini.png
Binary files differ
diff --git a/app/assets/images/emoji/ghost.png b/app/assets/images/emoji/ghost.png
new file mode 100755
index 00000000000..671dd0c9e2e
--- /dev/null
+++ b/app/assets/images/emoji/ghost.png
Binary files differ
diff --git a/app/assets/images/emoji/gift.png b/app/assets/images/emoji/gift.png
new file mode 100755
index 00000000000..552cfdc2b98
--- /dev/null
+++ b/app/assets/images/emoji/gift.png
Binary files differ
diff --git a/app/assets/images/emoji/gift_heart.png b/app/assets/images/emoji/gift_heart.png
new file mode 100755
index 00000000000..f31c26a3fcc
--- /dev/null
+++ b/app/assets/images/emoji/gift_heart.png
Binary files differ
diff --git a/app/assets/images/emoji/girl.png b/app/assets/images/emoji/girl.png
new file mode 100755
index 00000000000..ea4126941f7
--- /dev/null
+++ b/app/assets/images/emoji/girl.png
Binary files differ
diff --git a/app/assets/images/emoji/globe_with_meridians.png b/app/assets/images/emoji/globe_with_meridians.png
new file mode 100755
index 00000000000..b198646670c
--- /dev/null
+++ b/app/assets/images/emoji/globe_with_meridians.png
Binary files differ
diff --git a/app/assets/images/emoji/goat.png b/app/assets/images/emoji/goat.png
new file mode 100755
index 00000000000..4be9cf30404
--- /dev/null
+++ b/app/assets/images/emoji/goat.png
Binary files differ
diff --git a/app/assets/images/emoji/goberserk.png b/app/assets/images/emoji/goberserk.png
new file mode 100755
index 00000000000..59a742aaaa5
--- /dev/null
+++ b/app/assets/images/emoji/goberserk.png
Binary files differ
diff --git a/app/assets/images/emoji/godmode.png b/app/assets/images/emoji/godmode.png
new file mode 100755
index 00000000000..7e75ab2081b
--- /dev/null
+++ b/app/assets/images/emoji/godmode.png
Binary files differ
diff --git a/app/assets/images/emoji/golf.png b/app/assets/images/emoji/golf.png
new file mode 100755
index 00000000000..cba2116a7e2
--- /dev/null
+++ b/app/assets/images/emoji/golf.png
Binary files differ
diff --git a/app/assets/images/emoji/grapes.png b/app/assets/images/emoji/grapes.png
new file mode 100755
index 00000000000..0f9f007a12f
--- /dev/null
+++ b/app/assets/images/emoji/grapes.png
Binary files differ
diff --git a/app/assets/images/emoji/green_apple.png b/app/assets/images/emoji/green_apple.png
new file mode 100755
index 00000000000..337205cd125
--- /dev/null
+++ b/app/assets/images/emoji/green_apple.png
Binary files differ
diff --git a/app/assets/images/emoji/green_book.png b/app/assets/images/emoji/green_book.png
new file mode 100755
index 00000000000..e86651e5c5c
--- /dev/null
+++ b/app/assets/images/emoji/green_book.png
Binary files differ
diff --git a/app/assets/images/emoji/green_heart.png b/app/assets/images/emoji/green_heart.png
new file mode 100755
index 00000000000..7289cb8147c
--- /dev/null
+++ b/app/assets/images/emoji/green_heart.png
Binary files differ
diff --git a/app/assets/images/emoji/grey_exclamation.png b/app/assets/images/emoji/grey_exclamation.png
new file mode 100755
index 00000000000..a50d265e9d7
--- /dev/null
+++ b/app/assets/images/emoji/grey_exclamation.png
Binary files differ
diff --git a/app/assets/images/emoji/grey_question.png b/app/assets/images/emoji/grey_question.png
new file mode 100755
index 00000000000..fb97ba752fd
--- /dev/null
+++ b/app/assets/images/emoji/grey_question.png
Binary files differ
diff --git a/app/assets/images/emoji/grin.png b/app/assets/images/emoji/grin.png
new file mode 100755
index 00000000000..591cfcef8bb
--- /dev/null
+++ b/app/assets/images/emoji/grin.png
Binary files differ
diff --git a/app/assets/images/emoji/guardsman.png b/app/assets/images/emoji/guardsman.png
new file mode 100755
index 00000000000..b67b335d687
--- /dev/null
+++ b/app/assets/images/emoji/guardsman.png
Binary files differ
diff --git a/app/assets/images/emoji/guitar.png b/app/assets/images/emoji/guitar.png
new file mode 100755
index 00000000000..2b7fa43c941
--- /dev/null
+++ b/app/assets/images/emoji/guitar.png
Binary files differ
diff --git a/app/assets/images/emoji/gun.png b/app/assets/images/emoji/gun.png
new file mode 100755
index 00000000000..c49dc52c6cb
--- /dev/null
+++ b/app/assets/images/emoji/gun.png
Binary files differ
diff --git a/app/assets/images/emoji/haircut.png b/app/assets/images/emoji/haircut.png
new file mode 100755
index 00000000000..902d273f6c4
--- /dev/null
+++ b/app/assets/images/emoji/haircut.png
Binary files differ
diff --git a/app/assets/images/emoji/hamburger.png b/app/assets/images/emoji/hamburger.png
new file mode 100755
index 00000000000..9f1a3fdff6e
--- /dev/null
+++ b/app/assets/images/emoji/hamburger.png
Binary files differ
diff --git a/app/assets/images/emoji/hammer.png b/app/assets/images/emoji/hammer.png
new file mode 100755
index 00000000000..482b1c747d1
--- /dev/null
+++ b/app/assets/images/emoji/hammer.png
Binary files differ
diff --git a/app/assets/images/emoji/hamster.png b/app/assets/images/emoji/hamster.png
new file mode 100755
index 00000000000..addfd2e6b03
--- /dev/null
+++ b/app/assets/images/emoji/hamster.png
Binary files differ
diff --git a/app/assets/images/emoji/hand.png b/app/assets/images/emoji/hand.png
new file mode 100755
index 00000000000..5e45c25a56c
--- /dev/null
+++ b/app/assets/images/emoji/hand.png
Binary files differ
diff --git a/app/assets/images/emoji/handbag.png b/app/assets/images/emoji/handbag.png
new file mode 100755
index 00000000000..d7adf04ddf2
--- /dev/null
+++ b/app/assets/images/emoji/handbag.png
Binary files differ
diff --git a/app/assets/images/emoji/hankey.png b/app/assets/images/emoji/hankey.png
new file mode 100755
index 00000000000..73a4dc84008
--- /dev/null
+++ b/app/assets/images/emoji/hankey.png
Binary files differ
diff --git a/app/assets/images/emoji/hash.png b/app/assets/images/emoji/hash.png
new file mode 100755
index 00000000000..6765d7d3c2e
--- /dev/null
+++ b/app/assets/images/emoji/hash.png
Binary files differ
diff --git a/app/assets/images/emoji/hatched_chick.png b/app/assets/images/emoji/hatched_chick.png
new file mode 100755
index 00000000000..39c25bc7ccd
--- /dev/null
+++ b/app/assets/images/emoji/hatched_chick.png
Binary files differ
diff --git a/app/assets/images/emoji/hatching_chick.png b/app/assets/images/emoji/hatching_chick.png
new file mode 100755
index 00000000000..005a55519f1
--- /dev/null
+++ b/app/assets/images/emoji/hatching_chick.png
Binary files differ
diff --git a/app/assets/images/emoji/headphones.png b/app/assets/images/emoji/headphones.png
new file mode 100755
index 00000000000..ad83000e687
--- /dev/null
+++ b/app/assets/images/emoji/headphones.png
Binary files differ
diff --git a/app/assets/images/emoji/hear_no_evil.png b/app/assets/images/emoji/hear_no_evil.png
new file mode 100755
index 00000000000..f97a1f9a090
--- /dev/null
+++ b/app/assets/images/emoji/hear_no_evil.png
Binary files differ
diff --git a/app/assets/images/emoji/heart.png b/app/assets/images/emoji/heart.png
new file mode 100755
index 00000000000..7d7790ce4df
--- /dev/null
+++ b/app/assets/images/emoji/heart.png
Binary files differ
diff --git a/app/assets/images/emoji/heart_decoration.png b/app/assets/images/emoji/heart_decoration.png
new file mode 100755
index 00000000000..b8be44db343
--- /dev/null
+++ b/app/assets/images/emoji/heart_decoration.png
Binary files differ
diff --git a/app/assets/images/emoji/heart_eyes.png b/app/assets/images/emoji/heart_eyes.png
new file mode 100755
index 00000000000..0e5794270ea
--- /dev/null
+++ b/app/assets/images/emoji/heart_eyes.png
Binary files differ
diff --git a/app/assets/images/emoji/heart_eyes_cat.png b/app/assets/images/emoji/heart_eyes_cat.png
new file mode 100755
index 00000000000..eeba240e533
--- /dev/null
+++ b/app/assets/images/emoji/heart_eyes_cat.png
Binary files differ
diff --git a/app/assets/images/emoji/heartbeat.png b/app/assets/images/emoji/heartbeat.png
new file mode 100755
index 00000000000..b6628f6fa70
--- /dev/null
+++ b/app/assets/images/emoji/heartbeat.png
Binary files differ
diff --git a/app/assets/images/emoji/heartpulse.png b/app/assets/images/emoji/heartpulse.png
new file mode 100755
index 00000000000..a7491cbeae6
--- /dev/null
+++ b/app/assets/images/emoji/heartpulse.png
Binary files differ
diff --git a/app/assets/images/emoji/hearts.png b/app/assets/images/emoji/hearts.png
new file mode 100755
index 00000000000..e8947153857
--- /dev/null
+++ b/app/assets/images/emoji/hearts.png
Binary files differ
diff --git a/app/assets/images/emoji/heavy_check_mark.png b/app/assets/images/emoji/heavy_check_mark.png
new file mode 100755
index 00000000000..336d2626d0c
--- /dev/null
+++ b/app/assets/images/emoji/heavy_check_mark.png
Binary files differ
diff --git a/app/assets/images/emoji/heavy_division_sign.png b/app/assets/images/emoji/heavy_division_sign.png
new file mode 100755
index 00000000000..ac757a238ec
--- /dev/null
+++ b/app/assets/images/emoji/heavy_division_sign.png
Binary files differ
diff --git a/app/assets/images/emoji/heavy_dollar_sign.png b/app/assets/images/emoji/heavy_dollar_sign.png
new file mode 100755
index 00000000000..361e26aef8b
--- /dev/null
+++ b/app/assets/images/emoji/heavy_dollar_sign.png
Binary files differ
diff --git a/app/assets/images/emoji/heavy_exclamation_mark.png b/app/assets/images/emoji/heavy_exclamation_mark.png
new file mode 100755
index 00000000000..4c560f5e3f4
--- /dev/null
+++ b/app/assets/images/emoji/heavy_exclamation_mark.png
Binary files differ
diff --git a/app/assets/images/emoji/heavy_minus_sign.png b/app/assets/images/emoji/heavy_minus_sign.png
new file mode 100755
index 00000000000..b8d3d82f2cd
--- /dev/null
+++ b/app/assets/images/emoji/heavy_minus_sign.png
Binary files differ
diff --git a/app/assets/images/emoji/heavy_multiplication_x.png b/app/assets/images/emoji/heavy_multiplication_x.png
new file mode 100755
index 00000000000..13d66607865
--- /dev/null
+++ b/app/assets/images/emoji/heavy_multiplication_x.png
Binary files differ
diff --git a/app/assets/images/emoji/heavy_plus_sign.png b/app/assets/images/emoji/heavy_plus_sign.png
new file mode 100755
index 00000000000..61595387bb6
--- /dev/null
+++ b/app/assets/images/emoji/heavy_plus_sign.png
Binary files differ
diff --git a/app/assets/images/emoji/helicopter.png b/app/assets/images/emoji/helicopter.png
new file mode 100755
index 00000000000..8e82a0d5876
--- /dev/null
+++ b/app/assets/images/emoji/helicopter.png
Binary files differ
diff --git a/app/assets/images/emoji/herb.png b/app/assets/images/emoji/herb.png
new file mode 100755
index 00000000000..de1ff1b73bf
--- /dev/null
+++ b/app/assets/images/emoji/herb.png
Binary files differ
diff --git a/app/assets/images/emoji/hibiscus.png b/app/assets/images/emoji/hibiscus.png
new file mode 100755
index 00000000000..9365ae2169f
--- /dev/null
+++ b/app/assets/images/emoji/hibiscus.png
Binary files differ
diff --git a/app/assets/images/emoji/high_brightness.png b/app/assets/images/emoji/high_brightness.png
new file mode 100755
index 00000000000..ba9de7d409c
--- /dev/null
+++ b/app/assets/images/emoji/high_brightness.png
Binary files differ
diff --git a/app/assets/images/emoji/high_heel.png b/app/assets/images/emoji/high_heel.png
new file mode 100755
index 00000000000..525b6a0dd69
--- /dev/null
+++ b/app/assets/images/emoji/high_heel.png
Binary files differ
diff --git a/app/assets/images/emoji/hocho.png b/app/assets/images/emoji/hocho.png
new file mode 100755
index 00000000000..18eade0acfa
--- /dev/null
+++ b/app/assets/images/emoji/hocho.png
Binary files differ
diff --git a/app/assets/images/emoji/honey_pot.png b/app/assets/images/emoji/honey_pot.png
new file mode 100755
index 00000000000..73278898a4c
--- /dev/null
+++ b/app/assets/images/emoji/honey_pot.png
Binary files differ
diff --git a/app/assets/images/emoji/honeybee.png b/app/assets/images/emoji/honeybee.png
new file mode 100755
index 00000000000..f53733953af
--- /dev/null
+++ b/app/assets/images/emoji/honeybee.png
Binary files differ
diff --git a/app/assets/images/emoji/horse.png b/app/assets/images/emoji/horse.png
new file mode 100755
index 00000000000..78d580ad3e9
--- /dev/null
+++ b/app/assets/images/emoji/horse.png
Binary files differ
diff --git a/app/assets/images/emoji/horse_racing.png b/app/assets/images/emoji/horse_racing.png
new file mode 100755
index 00000000000..e3bbaec1d6c
--- /dev/null
+++ b/app/assets/images/emoji/horse_racing.png
Binary files differ
diff --git a/app/assets/images/emoji/hospital.png b/app/assets/images/emoji/hospital.png
new file mode 100755
index 00000000000..c05c49377fe
--- /dev/null
+++ b/app/assets/images/emoji/hospital.png
Binary files differ
diff --git a/app/assets/images/emoji/hotel.png b/app/assets/images/emoji/hotel.png
new file mode 100755
index 00000000000..d29f276a180
--- /dev/null
+++ b/app/assets/images/emoji/hotel.png
Binary files differ
diff --git a/app/assets/images/emoji/hotsprings.png b/app/assets/images/emoji/hotsprings.png
new file mode 100755
index 00000000000..a0bc9d75f21
--- /dev/null
+++ b/app/assets/images/emoji/hotsprings.png
Binary files differ
diff --git a/app/assets/images/emoji/hourglass.png b/app/assets/images/emoji/hourglass.png
new file mode 100755
index 00000000000..405aab41beb
--- /dev/null
+++ b/app/assets/images/emoji/hourglass.png
Binary files differ
diff --git a/app/assets/images/emoji/house.png b/app/assets/images/emoji/house.png
new file mode 100755
index 00000000000..95b9ee09480
--- /dev/null
+++ b/app/assets/images/emoji/house.png
Binary files differ
diff --git a/app/assets/images/emoji/hurtrealbad.png b/app/assets/images/emoji/hurtrealbad.png
new file mode 100755
index 00000000000..146ef1a6a87
--- /dev/null
+++ b/app/assets/images/emoji/hurtrealbad.png
Binary files differ
diff --git a/app/assets/images/emoji/ice_cream.png b/app/assets/images/emoji/ice_cream.png
new file mode 100755
index 00000000000..190be01650e
--- /dev/null
+++ b/app/assets/images/emoji/ice_cream.png
Binary files differ
diff --git a/app/assets/images/emoji/icecream.png b/app/assets/images/emoji/icecream.png
new file mode 100755
index 00000000000..871ce097689
--- /dev/null
+++ b/app/assets/images/emoji/icecream.png
Binary files differ
diff --git a/app/assets/images/emoji/id.png b/app/assets/images/emoji/id.png
new file mode 100755
index 00000000000..47437a76d39
--- /dev/null
+++ b/app/assets/images/emoji/id.png
Binary files differ
diff --git a/app/assets/images/emoji/ideograph_advantage.png b/app/assets/images/emoji/ideograph_advantage.png
new file mode 100755
index 00000000000..e79af78442e
--- /dev/null
+++ b/app/assets/images/emoji/ideograph_advantage.png
Binary files differ
diff --git a/app/assets/images/emoji/imp.png b/app/assets/images/emoji/imp.png
new file mode 100755
index 00000000000..5acca3373b9
--- /dev/null
+++ b/app/assets/images/emoji/imp.png
Binary files differ
diff --git a/app/assets/images/emoji/inbox_tray.png b/app/assets/images/emoji/inbox_tray.png
new file mode 100755
index 00000000000..e2df0f89705
--- /dev/null
+++ b/app/assets/images/emoji/inbox_tray.png
Binary files differ
diff --git a/app/assets/images/emoji/incoming_envelope.png b/app/assets/images/emoji/incoming_envelope.png
new file mode 100755
index 00000000000..afc82712510
--- /dev/null
+++ b/app/assets/images/emoji/incoming_envelope.png
Binary files differ
diff --git a/app/assets/images/emoji/information_desk_person.png b/app/assets/images/emoji/information_desk_person.png
new file mode 100755
index 00000000000..52c0a50a3f6
--- /dev/null
+++ b/app/assets/images/emoji/information_desk_person.png
Binary files differ
diff --git a/app/assets/images/emoji/information_source.png b/app/assets/images/emoji/information_source.png
new file mode 100755
index 00000000000..9cb8b09b249
--- /dev/null
+++ b/app/assets/images/emoji/information_source.png
Binary files differ
diff --git a/app/assets/images/emoji/innocent.png b/app/assets/images/emoji/innocent.png
new file mode 100755
index 00000000000..503b614f8dc
--- /dev/null
+++ b/app/assets/images/emoji/innocent.png
Binary files differ
diff --git a/app/assets/images/emoji/interrobang.png b/app/assets/images/emoji/interrobang.png
new file mode 100755
index 00000000000..64304b9f5fb
--- /dev/null
+++ b/app/assets/images/emoji/interrobang.png
Binary files differ
diff --git a/app/assets/images/emoji/iphone.png b/app/assets/images/emoji/iphone.png
new file mode 100755
index 00000000000..df007103b0b
--- /dev/null
+++ b/app/assets/images/emoji/iphone.png
Binary files differ
diff --git a/app/assets/images/emoji/it.png b/app/assets/images/emoji/it.png
new file mode 100755
index 00000000000..70bc9f32463
--- /dev/null
+++ b/app/assets/images/emoji/it.png
Binary files differ
diff --git a/app/assets/images/emoji/izakaya_lantern.png b/app/assets/images/emoji/izakaya_lantern.png
new file mode 100755
index 00000000000..18730ad5597
--- /dev/null
+++ b/app/assets/images/emoji/izakaya_lantern.png
Binary files differ
diff --git a/app/assets/images/emoji/jack_o_lantern.png b/app/assets/images/emoji/jack_o_lantern.png
new file mode 100755
index 00000000000..1f7667ea458
--- /dev/null
+++ b/app/assets/images/emoji/jack_o_lantern.png
Binary files differ
diff --git a/app/assets/images/emoji/japan.png b/app/assets/images/emoji/japan.png
new file mode 100755
index 00000000000..45932803597
--- /dev/null
+++ b/app/assets/images/emoji/japan.png
Binary files differ
diff --git a/app/assets/images/emoji/japanese_castle.png b/app/assets/images/emoji/japanese_castle.png
new file mode 100755
index 00000000000..f225ab217c0
--- /dev/null
+++ b/app/assets/images/emoji/japanese_castle.png
Binary files differ
diff --git a/app/assets/images/emoji/japanese_goblin.png b/app/assets/images/emoji/japanese_goblin.png
new file mode 100755
index 00000000000..bd21b187570
--- /dev/null
+++ b/app/assets/images/emoji/japanese_goblin.png
Binary files differ
diff --git a/app/assets/images/emoji/japanese_ogre.png b/app/assets/images/emoji/japanese_ogre.png
new file mode 100755
index 00000000000..e9f5471c9a2
--- /dev/null
+++ b/app/assets/images/emoji/japanese_ogre.png
Binary files differ
diff --git a/app/assets/images/emoji/jeans.png b/app/assets/images/emoji/jeans.png
new file mode 100755
index 00000000000..d721cea54c3
--- /dev/null
+++ b/app/assets/images/emoji/jeans.png
Binary files differ
diff --git a/app/assets/images/emoji/joy.png b/app/assets/images/emoji/joy.png
new file mode 100755
index 00000000000..47df693d424
--- /dev/null
+++ b/app/assets/images/emoji/joy.png
Binary files differ
diff --git a/app/assets/images/emoji/joy_cat.png b/app/assets/images/emoji/joy_cat.png
new file mode 100755
index 00000000000..6c60cb0efc8
--- /dev/null
+++ b/app/assets/images/emoji/joy_cat.png
Binary files differ
diff --git a/app/assets/images/emoji/jp.png b/app/assets/images/emoji/jp.png
new file mode 100755
index 00000000000..b786efbbd8a
--- /dev/null
+++ b/app/assets/images/emoji/jp.png
Binary files differ
diff --git a/app/assets/images/emoji/key.png b/app/assets/images/emoji/key.png
new file mode 100755
index 00000000000..34673213f64
--- /dev/null
+++ b/app/assets/images/emoji/key.png
Binary files differ
diff --git a/app/assets/images/emoji/keycap_ten.png b/app/assets/images/emoji/keycap_ten.png
new file mode 100755
index 00000000000..71dac1c1cc0
--- /dev/null
+++ b/app/assets/images/emoji/keycap_ten.png
Binary files differ
diff --git a/app/assets/images/emoji/kimono.png b/app/assets/images/emoji/kimono.png
new file mode 100755
index 00000000000..34ffe137dcd
--- /dev/null
+++ b/app/assets/images/emoji/kimono.png
Binary files differ
diff --git a/app/assets/images/emoji/kiss.png b/app/assets/images/emoji/kiss.png
new file mode 100755
index 00000000000..14fd9918d58
--- /dev/null
+++ b/app/assets/images/emoji/kiss.png
Binary files differ
diff --git a/app/assets/images/emoji/kissing_cat.png b/app/assets/images/emoji/kissing_cat.png
new file mode 100755
index 00000000000..adc62fbe3ce
--- /dev/null
+++ b/app/assets/images/emoji/kissing_cat.png
Binary files differ
diff --git a/app/assets/images/emoji/kissing_face.png b/app/assets/images/emoji/kissing_face.png
new file mode 100755
index 00000000000..449de197048
--- /dev/null
+++ b/app/assets/images/emoji/kissing_face.png
Binary files differ
diff --git a/app/assets/images/emoji/kissing_heart.png b/app/assets/images/emoji/kissing_heart.png
new file mode 100755
index 00000000000..af9a80b7f09
--- /dev/null
+++ b/app/assets/images/emoji/kissing_heart.png
Binary files differ
diff --git a/app/assets/images/emoji/koala.png b/app/assets/images/emoji/koala.png
new file mode 100755
index 00000000000..e17bd3cf531
--- /dev/null
+++ b/app/assets/images/emoji/koala.png
Binary files differ
diff --git a/app/assets/images/emoji/koko.png b/app/assets/images/emoji/koko.png
new file mode 100755
index 00000000000..3bef28c9fdb
--- /dev/null
+++ b/app/assets/images/emoji/koko.png
Binary files differ
diff --git a/app/assets/images/emoji/kr.png b/app/assets/images/emoji/kr.png
new file mode 100755
index 00000000000..b4c0c1b673d
--- /dev/null
+++ b/app/assets/images/emoji/kr.png
Binary files differ
diff --git a/app/assets/images/emoji/large_blue_circle.png b/app/assets/images/emoji/large_blue_circle.png
new file mode 100755
index 00000000000..a5b4ad4aaa2
--- /dev/null
+++ b/app/assets/images/emoji/large_blue_circle.png
Binary files differ
diff --git a/app/assets/images/emoji/large_blue_diamond.png b/app/assets/images/emoji/large_blue_diamond.png
new file mode 100755
index 00000000000..f4598ec0f20
--- /dev/null
+++ b/app/assets/images/emoji/large_blue_diamond.png
Binary files differ
diff --git a/app/assets/images/emoji/large_orange_diamond.png b/app/assets/images/emoji/large_orange_diamond.png
new file mode 100755
index 00000000000..46d52e5cb6d
--- /dev/null
+++ b/app/assets/images/emoji/large_orange_diamond.png
Binary files differ
diff --git a/app/assets/images/emoji/last_quarter_moon.png b/app/assets/images/emoji/last_quarter_moon.png
new file mode 100755
index 00000000000..355e3c3f79f
--- /dev/null
+++ b/app/assets/images/emoji/last_quarter_moon.png
Binary files differ
diff --git a/app/assets/images/emoji/last_quarter_moon_with_face.png b/app/assets/images/emoji/last_quarter_moon_with_face.png
new file mode 100755
index 00000000000..9ece82dfec6
--- /dev/null
+++ b/app/assets/images/emoji/last_quarter_moon_with_face.png
Binary files differ
diff --git a/app/assets/images/emoji/laughing.png b/app/assets/images/emoji/laughing.png
new file mode 100755
index 00000000000..11c91eb22e6
--- /dev/null
+++ b/app/assets/images/emoji/laughing.png
Binary files differ
diff --git a/app/assets/images/emoji/leaves.png b/app/assets/images/emoji/leaves.png
new file mode 100755
index 00000000000..5229e06bdd0
--- /dev/null
+++ b/app/assets/images/emoji/leaves.png
Binary files differ
diff --git a/app/assets/images/emoji/ledger.png b/app/assets/images/emoji/ledger.png
new file mode 100755
index 00000000000..e4f72aceacf
--- /dev/null
+++ b/app/assets/images/emoji/ledger.png
Binary files differ
diff --git a/app/assets/images/emoji/left_luggage.png b/app/assets/images/emoji/left_luggage.png
new file mode 100755
index 00000000000..1c08b464db1
--- /dev/null
+++ b/app/assets/images/emoji/left_luggage.png
Binary files differ
diff --git a/app/assets/images/emoji/left_right_arrow.png b/app/assets/images/emoji/left_right_arrow.png
new file mode 100755
index 00000000000..b9fd11c5158
--- /dev/null
+++ b/app/assets/images/emoji/left_right_arrow.png
Binary files differ
diff --git a/app/assets/images/emoji/leftwards_arrow_with_hook.png b/app/assets/images/emoji/leftwards_arrow_with_hook.png
new file mode 100755
index 00000000000..bc45dfefd4a
--- /dev/null
+++ b/app/assets/images/emoji/leftwards_arrow_with_hook.png
Binary files differ
diff --git a/app/assets/images/emoji/lemon.png b/app/assets/images/emoji/lemon.png
new file mode 100755
index 00000000000..9814dc95989
--- /dev/null
+++ b/app/assets/images/emoji/lemon.png
Binary files differ
diff --git a/app/assets/images/emoji/leo.png b/app/assets/images/emoji/leo.png
new file mode 100755
index 00000000000..e025933b2f8
--- /dev/null
+++ b/app/assets/images/emoji/leo.png
Binary files differ
diff --git a/app/assets/images/emoji/leopard.png b/app/assets/images/emoji/leopard.png
new file mode 100755
index 00000000000..8abfc4a2729
--- /dev/null
+++ b/app/assets/images/emoji/leopard.png
Binary files differ
diff --git a/app/assets/images/emoji/libra.png b/app/assets/images/emoji/libra.png
new file mode 100755
index 00000000000..c9062dd2eeb
--- /dev/null
+++ b/app/assets/images/emoji/libra.png
Binary files differ
diff --git a/app/assets/images/emoji/light_rail.png b/app/assets/images/emoji/light_rail.png
new file mode 100755
index 00000000000..bcfe801eec6
--- /dev/null
+++ b/app/assets/images/emoji/light_rail.png
Binary files differ
diff --git a/app/assets/images/emoji/link.png b/app/assets/images/emoji/link.png
new file mode 100755
index 00000000000..ffb8f62ceca
--- /dev/null
+++ b/app/assets/images/emoji/link.png
Binary files differ
diff --git a/app/assets/images/emoji/lips.png b/app/assets/images/emoji/lips.png
new file mode 100755
index 00000000000..826ed1102dc
--- /dev/null
+++ b/app/assets/images/emoji/lips.png
Binary files differ
diff --git a/app/assets/images/emoji/lipstick.png b/app/assets/images/emoji/lipstick.png
new file mode 100755
index 00000000000..82f990c5679
--- /dev/null
+++ b/app/assets/images/emoji/lipstick.png
Binary files differ
diff --git a/app/assets/images/emoji/lock.png b/app/assets/images/emoji/lock.png
new file mode 100755
index 00000000000..4892b023558
--- /dev/null
+++ b/app/assets/images/emoji/lock.png
Binary files differ
diff --git a/app/assets/images/emoji/lock_with_ink_pen.png b/app/assets/images/emoji/lock_with_ink_pen.png
new file mode 100755
index 00000000000..375e67e8253
--- /dev/null
+++ b/app/assets/images/emoji/lock_with_ink_pen.png
Binary files differ
diff --git a/app/assets/images/emoji/lollipop.png b/app/assets/images/emoji/lollipop.png
new file mode 100755
index 00000000000..ba55e7093f1
--- /dev/null
+++ b/app/assets/images/emoji/lollipop.png
Binary files differ
diff --git a/app/assets/images/emoji/loop.png b/app/assets/images/emoji/loop.png
new file mode 100755
index 00000000000..ef34df3a404
--- /dev/null
+++ b/app/assets/images/emoji/loop.png
Binary files differ
diff --git a/app/assets/images/emoji/loudspeaker.png b/app/assets/images/emoji/loudspeaker.png
new file mode 100755
index 00000000000..752385e523d
--- /dev/null
+++ b/app/assets/images/emoji/loudspeaker.png
Binary files differ
diff --git a/app/assets/images/emoji/love_hotel.png b/app/assets/images/emoji/love_hotel.png
new file mode 100755
index 00000000000..44d7db828ad
--- /dev/null
+++ b/app/assets/images/emoji/love_hotel.png
Binary files differ
diff --git a/app/assets/images/emoji/love_letter.png b/app/assets/images/emoji/love_letter.png
new file mode 100755
index 00000000000..e29981f4453
--- /dev/null
+++ b/app/assets/images/emoji/love_letter.png
Binary files differ
diff --git a/app/assets/images/emoji/low_brightness.png b/app/assets/images/emoji/low_brightness.png
new file mode 100755
index 00000000000..ea15bde4f0d
--- /dev/null
+++ b/app/assets/images/emoji/low_brightness.png
Binary files differ
diff --git a/app/assets/images/emoji/m.png b/app/assets/images/emoji/m.png
new file mode 100755
index 00000000000..7424665e2bb
--- /dev/null
+++ b/app/assets/images/emoji/m.png
Binary files differ
diff --git a/app/assets/images/emoji/mag.png b/app/assets/images/emoji/mag.png
new file mode 100755
index 00000000000..aa5b1d7c46f
--- /dev/null
+++ b/app/assets/images/emoji/mag.png
Binary files differ
diff --git a/app/assets/images/emoji/mag_right.png b/app/assets/images/emoji/mag_right.png
new file mode 100755
index 00000000000..6e6cf11e6d7
--- /dev/null
+++ b/app/assets/images/emoji/mag_right.png
Binary files differ
diff --git a/app/assets/images/emoji/mahjong.png b/app/assets/images/emoji/mahjong.png
new file mode 100755
index 00000000000..f51ce65fdde
--- /dev/null
+++ b/app/assets/images/emoji/mahjong.png
Binary files differ
diff --git a/app/assets/images/emoji/mailbox.png b/app/assets/images/emoji/mailbox.png
new file mode 100755
index 00000000000..8351e70760c
--- /dev/null
+++ b/app/assets/images/emoji/mailbox.png
Binary files differ
diff --git a/app/assets/images/emoji/mailbox_closed.png b/app/assets/images/emoji/mailbox_closed.png
new file mode 100755
index 00000000000..a5982b69bb5
--- /dev/null
+++ b/app/assets/images/emoji/mailbox_closed.png
Binary files differ
diff --git a/app/assets/images/emoji/mailbox_with_mail.png b/app/assets/images/emoji/mailbox_with_mail.png
new file mode 100755
index 00000000000..dae34594367
--- /dev/null
+++ b/app/assets/images/emoji/mailbox_with_mail.png
Binary files differ
diff --git a/app/assets/images/emoji/mailbox_with_no_mail.png b/app/assets/images/emoji/mailbox_with_no_mail.png
new file mode 100755
index 00000000000..59f15c5d7da
--- /dev/null
+++ b/app/assets/images/emoji/mailbox_with_no_mail.png
Binary files differ
diff --git a/app/assets/images/emoji/man.png b/app/assets/images/emoji/man.png
new file mode 100755
index 00000000000..d9bfa26a674
--- /dev/null
+++ b/app/assets/images/emoji/man.png
Binary files differ
diff --git a/app/assets/images/emoji/man_with_gua_pi_mao.png b/app/assets/images/emoji/man_with_gua_pi_mao.png
new file mode 100755
index 00000000000..7aad74b55e3
--- /dev/null
+++ b/app/assets/images/emoji/man_with_gua_pi_mao.png
Binary files differ
diff --git a/app/assets/images/emoji/man_with_turban.png b/app/assets/images/emoji/man_with_turban.png
new file mode 100755
index 00000000000..036604caf2a
--- /dev/null
+++ b/app/assets/images/emoji/man_with_turban.png
Binary files differ
diff --git a/app/assets/images/emoji/mans_shoe.png b/app/assets/images/emoji/mans_shoe.png
new file mode 100755
index 00000000000..ecba9ba7d04
--- /dev/null
+++ b/app/assets/images/emoji/mans_shoe.png
Binary files differ
diff --git a/app/assets/images/emoji/maple_leaf.png b/app/assets/images/emoji/maple_leaf.png
new file mode 100755
index 00000000000..4e9b47207de
--- /dev/null
+++ b/app/assets/images/emoji/maple_leaf.png
Binary files differ
diff --git a/app/assets/images/emoji/mask.png b/app/assets/images/emoji/mask.png
new file mode 100755
index 00000000000..05887e99c6b
--- /dev/null
+++ b/app/assets/images/emoji/mask.png
Binary files differ
diff --git a/app/assets/images/emoji/massage.png b/app/assets/images/emoji/massage.png
new file mode 100755
index 00000000000..dd30d159755
--- /dev/null
+++ b/app/assets/images/emoji/massage.png
Binary files differ
diff --git a/app/assets/images/emoji/meat_on_bone.png b/app/assets/images/emoji/meat_on_bone.png
new file mode 100755
index 00000000000..d6b311b6b24
--- /dev/null
+++ b/app/assets/images/emoji/meat_on_bone.png
Binary files differ
diff --git a/app/assets/images/emoji/mega.png b/app/assets/images/emoji/mega.png
new file mode 100755
index 00000000000..022df2f8d64
--- /dev/null
+++ b/app/assets/images/emoji/mega.png
Binary files differ
diff --git a/app/assets/images/emoji/melon.png b/app/assets/images/emoji/melon.png
new file mode 100755
index 00000000000..11c13cbbd44
--- /dev/null
+++ b/app/assets/images/emoji/melon.png
Binary files differ
diff --git a/app/assets/images/emoji/memo.png b/app/assets/images/emoji/memo.png
new file mode 100755
index 00000000000..fc97ddbc92b
--- /dev/null
+++ b/app/assets/images/emoji/memo.png
Binary files differ
diff --git a/app/assets/images/emoji/mens.png b/app/assets/images/emoji/mens.png
new file mode 100755
index 00000000000..abccfc9f2c6
--- /dev/null
+++ b/app/assets/images/emoji/mens.png
Binary files differ
diff --git a/app/assets/images/emoji/metal.png b/app/assets/images/emoji/metal.png
new file mode 100755
index 00000000000..94f1fda2241
--- /dev/null
+++ b/app/assets/images/emoji/metal.png
Binary files differ
diff --git a/app/assets/images/emoji/metro.png b/app/assets/images/emoji/metro.png
new file mode 100755
index 00000000000..4acf5ab3e29
--- /dev/null
+++ b/app/assets/images/emoji/metro.png
Binary files differ
diff --git a/app/assets/images/emoji/microphone.png b/app/assets/images/emoji/microphone.png
new file mode 100755
index 00000000000..68c74adada1
--- /dev/null
+++ b/app/assets/images/emoji/microphone.png
Binary files differ
diff --git a/app/assets/images/emoji/microscope.png b/app/assets/images/emoji/microscope.png
new file mode 100755
index 00000000000..f11d54c010a
--- /dev/null
+++ b/app/assets/images/emoji/microscope.png
Binary files differ
diff --git a/app/assets/images/emoji/milky_way.png b/app/assets/images/emoji/milky_way.png
new file mode 100755
index 00000000000..901090a1265
--- /dev/null
+++ b/app/assets/images/emoji/milky_way.png
Binary files differ
diff --git a/app/assets/images/emoji/minibus.png b/app/assets/images/emoji/minibus.png
new file mode 100755
index 00000000000..c52cef23407
--- /dev/null
+++ b/app/assets/images/emoji/minibus.png
Binary files differ
diff --git a/app/assets/images/emoji/minidisc.png b/app/assets/images/emoji/minidisc.png
new file mode 100755
index 00000000000..e19cc5d0150
--- /dev/null
+++ b/app/assets/images/emoji/minidisc.png
Binary files differ
diff --git a/app/assets/images/emoji/mobile_phone_off.png b/app/assets/images/emoji/mobile_phone_off.png
new file mode 100755
index 00000000000..fa16c763c94
--- /dev/null
+++ b/app/assets/images/emoji/mobile_phone_off.png
Binary files differ
diff --git a/app/assets/images/emoji/money_with_wings.png b/app/assets/images/emoji/money_with_wings.png
new file mode 100755
index 00000000000..135e3981ed1
--- /dev/null
+++ b/app/assets/images/emoji/money_with_wings.png
Binary files differ
diff --git a/app/assets/images/emoji/moneybag.png b/app/assets/images/emoji/moneybag.png
new file mode 100755
index 00000000000..5546c04bad4
--- /dev/null
+++ b/app/assets/images/emoji/moneybag.png
Binary files differ
diff --git a/app/assets/images/emoji/monkey.png b/app/assets/images/emoji/monkey.png
new file mode 100755
index 00000000000..64070359776
--- /dev/null
+++ b/app/assets/images/emoji/monkey.png
Binary files differ
diff --git a/app/assets/images/emoji/monkey_face.png b/app/assets/images/emoji/monkey_face.png
new file mode 100755
index 00000000000..6964cf4d51a
--- /dev/null
+++ b/app/assets/images/emoji/monkey_face.png
Binary files differ
diff --git a/app/assets/images/emoji/monorail.png b/app/assets/images/emoji/monorail.png
new file mode 100755
index 00000000000..913d3002462
--- /dev/null
+++ b/app/assets/images/emoji/monorail.png
Binary files differ
diff --git a/app/assets/images/emoji/moon.png b/app/assets/images/emoji/moon.png
new file mode 100755
index 00000000000..afdb450d1df
--- /dev/null
+++ b/app/assets/images/emoji/moon.png
Binary files differ
diff --git a/app/assets/images/emoji/mortar_board.png b/app/assets/images/emoji/mortar_board.png
new file mode 100755
index 00000000000..2e811b097a1
--- /dev/null
+++ b/app/assets/images/emoji/mortar_board.png
Binary files differ
diff --git a/app/assets/images/emoji/mount_fuji.png b/app/assets/images/emoji/mount_fuji.png
new file mode 100755
index 00000000000..4c313e583f0
--- /dev/null
+++ b/app/assets/images/emoji/mount_fuji.png
Binary files differ
diff --git a/app/assets/images/emoji/mountain_bicyclist.png b/app/assets/images/emoji/mountain_bicyclist.png
new file mode 100755
index 00000000000..b698897566a
--- /dev/null
+++ b/app/assets/images/emoji/mountain_bicyclist.png
Binary files differ
diff --git a/app/assets/images/emoji/mountain_cableway.png b/app/assets/images/emoji/mountain_cableway.png
new file mode 100755
index 00000000000..5688bb239a7
--- /dev/null
+++ b/app/assets/images/emoji/mountain_cableway.png
Binary files differ
diff --git a/app/assets/images/emoji/mountain_railway.png b/app/assets/images/emoji/mountain_railway.png
new file mode 100755
index 00000000000..1f3d1aab56c
--- /dev/null
+++ b/app/assets/images/emoji/mountain_railway.png
Binary files differ
diff --git a/app/assets/images/emoji/mouse.png b/app/assets/images/emoji/mouse.png
new file mode 100755
index 00000000000..8ff162e2dbb
--- /dev/null
+++ b/app/assets/images/emoji/mouse.png
Binary files differ
diff --git a/app/assets/images/emoji/mouse2.png b/app/assets/images/emoji/mouse2.png
new file mode 100755
index 00000000000..2d777e5e1ac
--- /dev/null
+++ b/app/assets/images/emoji/mouse2.png
Binary files differ
diff --git a/app/assets/images/emoji/movie_camera.png b/app/assets/images/emoji/movie_camera.png
new file mode 100755
index 00000000000..9c143840925
--- /dev/null
+++ b/app/assets/images/emoji/movie_camera.png
Binary files differ
diff --git a/app/assets/images/emoji/moyai.png b/app/assets/images/emoji/moyai.png
new file mode 100755
index 00000000000..61a1a9c21a4
--- /dev/null
+++ b/app/assets/images/emoji/moyai.png
Binary files differ
diff --git a/app/assets/images/emoji/muscle.png b/app/assets/images/emoji/muscle.png
new file mode 100755
index 00000000000..19f92efb66e
--- /dev/null
+++ b/app/assets/images/emoji/muscle.png
Binary files differ
diff --git a/app/assets/images/emoji/mushroom.png b/app/assets/images/emoji/mushroom.png
new file mode 100755
index 00000000000..5eeed8e7900
--- /dev/null
+++ b/app/assets/images/emoji/mushroom.png
Binary files differ
diff --git a/app/assets/images/emoji/musical_keyboard.png b/app/assets/images/emoji/musical_keyboard.png
new file mode 100755
index 00000000000..93647a4a32d
--- /dev/null
+++ b/app/assets/images/emoji/musical_keyboard.png
Binary files differ
diff --git a/app/assets/images/emoji/musical_note.png b/app/assets/images/emoji/musical_note.png
new file mode 100755
index 00000000000..68b261bcba6
--- /dev/null
+++ b/app/assets/images/emoji/musical_note.png
Binary files differ
diff --git a/app/assets/images/emoji/musical_score.png b/app/assets/images/emoji/musical_score.png
new file mode 100755
index 00000000000..0c927d32fa4
--- /dev/null
+++ b/app/assets/images/emoji/musical_score.png
Binary files differ
diff --git a/app/assets/images/emoji/mute.png b/app/assets/images/emoji/mute.png
new file mode 100755
index 00000000000..4cf67c367d3
--- /dev/null
+++ b/app/assets/images/emoji/mute.png
Binary files differ
diff --git a/app/assets/images/emoji/nail_care.png b/app/assets/images/emoji/nail_care.png
new file mode 100755
index 00000000000..6a66e63d2ad
--- /dev/null
+++ b/app/assets/images/emoji/nail_care.png
Binary files differ
diff --git a/app/assets/images/emoji/name_badge.png b/app/assets/images/emoji/name_badge.png
new file mode 100755
index 00000000000..2b712dcd55a
--- /dev/null
+++ b/app/assets/images/emoji/name_badge.png
Binary files differ
diff --git a/app/assets/images/emoji/neckbeard.png b/app/assets/images/emoji/neckbeard.png
new file mode 100755
index 00000000000..15108fc97da
--- /dev/null
+++ b/app/assets/images/emoji/neckbeard.png
Binary files differ
diff --git a/app/assets/images/emoji/necktie.png b/app/assets/images/emoji/necktie.png
new file mode 100755
index 00000000000..80461c66f3a
--- /dev/null
+++ b/app/assets/images/emoji/necktie.png
Binary files differ
diff --git a/app/assets/images/emoji/negative_squared_cross_mark.png b/app/assets/images/emoji/negative_squared_cross_mark.png
new file mode 100755
index 00000000000..b47a0cece5c
--- /dev/null
+++ b/app/assets/images/emoji/negative_squared_cross_mark.png
Binary files differ
diff --git a/app/assets/images/emoji/neutral_face.png b/app/assets/images/emoji/neutral_face.png
new file mode 100755
index 00000000000..682a1ba066d
--- /dev/null
+++ b/app/assets/images/emoji/neutral_face.png
Binary files differ
diff --git a/app/assets/images/emoji/new.png b/app/assets/images/emoji/new.png
new file mode 100755
index 00000000000..28d1570e0a6
--- /dev/null
+++ b/app/assets/images/emoji/new.png
Binary files differ
diff --git a/app/assets/images/emoji/new_moon.png b/app/assets/images/emoji/new_moon.png
new file mode 100755
index 00000000000..540239b1f3e
--- /dev/null
+++ b/app/assets/images/emoji/new_moon.png
Binary files differ
diff --git a/app/assets/images/emoji/new_moon_with_face.png b/app/assets/images/emoji/new_moon_with_face.png
new file mode 100755
index 00000000000..b9aff7a0683
--- /dev/null
+++ b/app/assets/images/emoji/new_moon_with_face.png
Binary files differ
diff --git a/app/assets/images/emoji/newspaper.png b/app/assets/images/emoji/newspaper.png
new file mode 100755
index 00000000000..d171394e6a8
--- /dev/null
+++ b/app/assets/images/emoji/newspaper.png
Binary files differ
diff --git a/app/assets/images/emoji/ng.png b/app/assets/images/emoji/ng.png
new file mode 100755
index 00000000000..2ca180ae397
--- /dev/null
+++ b/app/assets/images/emoji/ng.png
Binary files differ
diff --git a/app/assets/images/emoji/nine.png b/app/assets/images/emoji/nine.png
new file mode 100755
index 00000000000..8006cc909f3
--- /dev/null
+++ b/app/assets/images/emoji/nine.png
Binary files differ
diff --git a/app/assets/images/emoji/no_bell.png b/app/assets/images/emoji/no_bell.png
new file mode 100755
index 00000000000..613b81cd21e
--- /dev/null
+++ b/app/assets/images/emoji/no_bell.png
Binary files differ
diff --git a/app/assets/images/emoji/no_bicycles.png b/app/assets/images/emoji/no_bicycles.png
new file mode 100755
index 00000000000..4b262166455
--- /dev/null
+++ b/app/assets/images/emoji/no_bicycles.png
Binary files differ
diff --git a/app/assets/images/emoji/no_entry.png b/app/assets/images/emoji/no_entry.png
new file mode 100755
index 00000000000..cf2086a8e74
--- /dev/null
+++ b/app/assets/images/emoji/no_entry.png
Binary files differ
diff --git a/app/assets/images/emoji/no_entry_sign.png b/app/assets/images/emoji/no_entry_sign.png
new file mode 100755
index 00000000000..a8444d18d2a
--- /dev/null
+++ b/app/assets/images/emoji/no_entry_sign.png
Binary files differ
diff --git a/app/assets/images/emoji/no_good.png b/app/assets/images/emoji/no_good.png
new file mode 100755
index 00000000000..d459a35bc1f
--- /dev/null
+++ b/app/assets/images/emoji/no_good.png
Binary files differ
diff --git a/app/assets/images/emoji/no_mobile_phones.png b/app/assets/images/emoji/no_mobile_phones.png
new file mode 100755
index 00000000000..41df57cf827
--- /dev/null
+++ b/app/assets/images/emoji/no_mobile_phones.png
Binary files differ
diff --git a/app/assets/images/emoji/no_mouth.png b/app/assets/images/emoji/no_mouth.png
new file mode 100755
index 00000000000..d9ec7ca7d79
--- /dev/null
+++ b/app/assets/images/emoji/no_mouth.png
Binary files differ
diff --git a/app/assets/images/emoji/no_pedestrians.png b/app/assets/images/emoji/no_pedestrians.png
new file mode 100755
index 00000000000..c35f530b220
--- /dev/null
+++ b/app/assets/images/emoji/no_pedestrians.png
Binary files differ
diff --git a/app/assets/images/emoji/no_smoking.png b/app/assets/images/emoji/no_smoking.png
new file mode 100755
index 00000000000..5880ddfd188
--- /dev/null
+++ b/app/assets/images/emoji/no_smoking.png
Binary files differ
diff --git a/app/assets/images/emoji/non-potable_water.png b/app/assets/images/emoji/non-potable_water.png
new file mode 100755
index 00000000000..1b29d35b98b
--- /dev/null
+++ b/app/assets/images/emoji/non-potable_water.png
Binary files differ
diff --git a/app/assets/images/emoji/nose.png b/app/assets/images/emoji/nose.png
new file mode 100755
index 00000000000..ad17c16c29e
--- /dev/null
+++ b/app/assets/images/emoji/nose.png
Binary files differ
diff --git a/app/assets/images/emoji/notebook.png b/app/assets/images/emoji/notebook.png
new file mode 100755
index 00000000000..07ea6087ed4
--- /dev/null
+++ b/app/assets/images/emoji/notebook.png
Binary files differ
diff --git a/app/assets/images/emoji/notebook_with_decorative_cover.png b/app/assets/images/emoji/notebook_with_decorative_cover.png
new file mode 100755
index 00000000000..4f3b14c85f3
--- /dev/null
+++ b/app/assets/images/emoji/notebook_with_decorative_cover.png
Binary files differ
diff --git a/app/assets/images/emoji/notes.png b/app/assets/images/emoji/notes.png
new file mode 100755
index 00000000000..0956d6ab2a8
--- /dev/null
+++ b/app/assets/images/emoji/notes.png
Binary files differ
diff --git a/app/assets/images/emoji/nut_and_bolt.png b/app/assets/images/emoji/nut_and_bolt.png
new file mode 100755
index 00000000000..bddfa72a7d3
--- /dev/null
+++ b/app/assets/images/emoji/nut_and_bolt.png
Binary files differ
diff --git a/app/assets/images/emoji/o.png b/app/assets/images/emoji/o.png
new file mode 100755
index 00000000000..0ededebe312
--- /dev/null
+++ b/app/assets/images/emoji/o.png
Binary files differ
diff --git a/app/assets/images/emoji/o2.png b/app/assets/images/emoji/o2.png
new file mode 100755
index 00000000000..d85f9fb98c7
--- /dev/null
+++ b/app/assets/images/emoji/o2.png
Binary files differ
diff --git a/app/assets/images/emoji/ocean.png b/app/assets/images/emoji/ocean.png
new file mode 100755
index 00000000000..f8d520cd490
--- /dev/null
+++ b/app/assets/images/emoji/ocean.png
Binary files differ
diff --git a/app/assets/images/emoji/octocat.png b/app/assets/images/emoji/octocat.png
new file mode 100755
index 00000000000..3fc20503e90
--- /dev/null
+++ b/app/assets/images/emoji/octocat.png
Binary files differ
diff --git a/app/assets/images/emoji/octopus.png b/app/assets/images/emoji/octopus.png
new file mode 100755
index 00000000000..52ce64b4687
--- /dev/null
+++ b/app/assets/images/emoji/octopus.png
Binary files differ
diff --git a/app/assets/images/emoji/oden.png b/app/assets/images/emoji/oden.png
new file mode 100755
index 00000000000..73add1c73cf
--- /dev/null
+++ b/app/assets/images/emoji/oden.png
Binary files differ
diff --git a/app/assets/images/emoji/office.png b/app/assets/images/emoji/office.png
new file mode 100755
index 00000000000..ea9281a413d
--- /dev/null
+++ b/app/assets/images/emoji/office.png
Binary files differ
diff --git a/app/assets/images/emoji/ok.png b/app/assets/images/emoji/ok.png
new file mode 100755
index 00000000000..6433d1a90a9
--- /dev/null
+++ b/app/assets/images/emoji/ok.png
Binary files differ
diff --git a/app/assets/images/emoji/ok_hand.png b/app/assets/images/emoji/ok_hand.png
new file mode 100755
index 00000000000..80c5aebb680
--- /dev/null
+++ b/app/assets/images/emoji/ok_hand.png
Binary files differ
diff --git a/app/assets/images/emoji/ok_woman.png b/app/assets/images/emoji/ok_woman.png
new file mode 100755
index 00000000000..e8b98194edb
--- /dev/null
+++ b/app/assets/images/emoji/ok_woman.png
Binary files differ
diff --git a/app/assets/images/emoji/older_man.png b/app/assets/images/emoji/older_man.png
new file mode 100755
index 00000000000..149f0cfb8e1
--- /dev/null
+++ b/app/assets/images/emoji/older_man.png
Binary files differ
diff --git a/app/assets/images/emoji/older_woman.png b/app/assets/images/emoji/older_woman.png
new file mode 100755
index 00000000000..f839565f478
--- /dev/null
+++ b/app/assets/images/emoji/older_woman.png
Binary files differ
diff --git a/app/assets/images/emoji/on.png b/app/assets/images/emoji/on.png
new file mode 100755
index 00000000000..3595387fb63
--- /dev/null
+++ b/app/assets/images/emoji/on.png
Binary files differ
diff --git a/app/assets/images/emoji/oncoming_automobile.png b/app/assets/images/emoji/oncoming_automobile.png
new file mode 100755
index 00000000000..cb46de22cbb
--- /dev/null
+++ b/app/assets/images/emoji/oncoming_automobile.png
Binary files differ
diff --git a/app/assets/images/emoji/oncoming_bus.png b/app/assets/images/emoji/oncoming_bus.png
new file mode 100755
index 00000000000..3695f762353
--- /dev/null
+++ b/app/assets/images/emoji/oncoming_bus.png
Binary files differ
diff --git a/app/assets/images/emoji/oncoming_police_car.png b/app/assets/images/emoji/oncoming_police_car.png
new file mode 100755
index 00000000000..af20e7eff03
--- /dev/null
+++ b/app/assets/images/emoji/oncoming_police_car.png
Binary files differ
diff --git a/app/assets/images/emoji/oncoming_taxi.png b/app/assets/images/emoji/oncoming_taxi.png
new file mode 100755
index 00000000000..f78cf3103b8
--- /dev/null
+++ b/app/assets/images/emoji/oncoming_taxi.png
Binary files differ
diff --git a/app/assets/images/emoji/one.png b/app/assets/images/emoji/one.png
new file mode 100755
index 00000000000..2d1f9f8c49d
--- /dev/null
+++ b/app/assets/images/emoji/one.png
Binary files differ
diff --git a/app/assets/images/emoji/open_file_folder.png b/app/assets/images/emoji/open_file_folder.png
new file mode 100755
index 00000000000..2bbbbf5e7cd
--- /dev/null
+++ b/app/assets/images/emoji/open_file_folder.png
Binary files differ
diff --git a/app/assets/images/emoji/open_hands.png b/app/assets/images/emoji/open_hands.png
new file mode 100755
index 00000000000..2cc25bd41a4
--- /dev/null
+++ b/app/assets/images/emoji/open_hands.png
Binary files differ
diff --git a/app/assets/images/emoji/ophiuchus.png b/app/assets/images/emoji/ophiuchus.png
new file mode 100755
index 00000000000..4eef715bc28
--- /dev/null
+++ b/app/assets/images/emoji/ophiuchus.png
Binary files differ
diff --git a/app/assets/images/emoji/orange_book.png b/app/assets/images/emoji/orange_book.png
new file mode 100755
index 00000000000..49650d59e59
--- /dev/null
+++ b/app/assets/images/emoji/orange_book.png
Binary files differ
diff --git a/app/assets/images/emoji/outbox_tray.png b/app/assets/images/emoji/outbox_tray.png
new file mode 100755
index 00000000000..7ad15e649de
--- /dev/null
+++ b/app/assets/images/emoji/outbox_tray.png
Binary files differ
diff --git a/app/assets/images/emoji/ox.png b/app/assets/images/emoji/ox.png
new file mode 100755
index 00000000000..f7669802480
--- /dev/null
+++ b/app/assets/images/emoji/ox.png
Binary files differ
diff --git a/app/assets/images/emoji/page_facing_up.png b/app/assets/images/emoji/page_facing_up.png
new file mode 100755
index 00000000000..64cd2e1b2a2
--- /dev/null
+++ b/app/assets/images/emoji/page_facing_up.png
Binary files differ
diff --git a/app/assets/images/emoji/page_with_curl.png b/app/assets/images/emoji/page_with_curl.png
new file mode 100755
index 00000000000..bf8f979d31c
--- /dev/null
+++ b/app/assets/images/emoji/page_with_curl.png
Binary files differ
diff --git a/app/assets/images/emoji/pager.png b/app/assets/images/emoji/pager.png
new file mode 100755
index 00000000000..e3e1fc44ee5
--- /dev/null
+++ b/app/assets/images/emoji/pager.png
Binary files differ
diff --git a/app/assets/images/emoji/palm_tree.png b/app/assets/images/emoji/palm_tree.png
new file mode 100755
index 00000000000..d534785ef96
--- /dev/null
+++ b/app/assets/images/emoji/palm_tree.png
Binary files differ
diff --git a/app/assets/images/emoji/panda_face.png b/app/assets/images/emoji/panda_face.png
new file mode 100755
index 00000000000..a794fb17f67
--- /dev/null
+++ b/app/assets/images/emoji/panda_face.png
Binary files differ
diff --git a/app/assets/images/emoji/paperclip.png b/app/assets/images/emoji/paperclip.png
new file mode 100755
index 00000000000..774412dc10f
--- /dev/null
+++ b/app/assets/images/emoji/paperclip.png
Binary files differ
diff --git a/app/assets/images/emoji/parking.png b/app/assets/images/emoji/parking.png
new file mode 100755
index 00000000000..c24af81ccf6
--- /dev/null
+++ b/app/assets/images/emoji/parking.png
Binary files differ
diff --git a/app/assets/images/emoji/part_alternation_mark.png b/app/assets/images/emoji/part_alternation_mark.png
new file mode 100755
index 00000000000..45dc9b851a1
--- /dev/null
+++ b/app/assets/images/emoji/part_alternation_mark.png
Binary files differ
diff --git a/app/assets/images/emoji/partly_sunny.png b/app/assets/images/emoji/partly_sunny.png
new file mode 100755
index 00000000000..020dd5ff698
--- /dev/null
+++ b/app/assets/images/emoji/partly_sunny.png
Binary files differ
diff --git a/app/assets/images/emoji/passport_control.png b/app/assets/images/emoji/passport_control.png
new file mode 100755
index 00000000000..675b76d378c
--- /dev/null
+++ b/app/assets/images/emoji/passport_control.png
Binary files differ
diff --git a/app/assets/images/emoji/paw_prints.png b/app/assets/images/emoji/paw_prints.png
new file mode 100755
index 00000000000..89b9fec9efa
--- /dev/null
+++ b/app/assets/images/emoji/paw_prints.png
Binary files differ
diff --git a/app/assets/images/emoji/peach.png b/app/assets/images/emoji/peach.png
new file mode 100755
index 00000000000..ee2139ecb88
--- /dev/null
+++ b/app/assets/images/emoji/peach.png
Binary files differ
diff --git a/app/assets/images/emoji/pear.png b/app/assets/images/emoji/pear.png
new file mode 100755
index 00000000000..f24aca8c0a8
--- /dev/null
+++ b/app/assets/images/emoji/pear.png
Binary files differ
diff --git a/app/assets/images/emoji/pencil.png b/app/assets/images/emoji/pencil.png
new file mode 100755
index 00000000000..fc97ddbc92b
--- /dev/null
+++ b/app/assets/images/emoji/pencil.png
Binary files differ
diff --git a/app/assets/images/emoji/pencil2.png b/app/assets/images/emoji/pencil2.png
new file mode 100755
index 00000000000..e624373b491
--- /dev/null
+++ b/app/assets/images/emoji/pencil2.png
Binary files differ
diff --git a/app/assets/images/emoji/penguin.png b/app/assets/images/emoji/penguin.png
new file mode 100755
index 00000000000..d8edbcb8fa9
--- /dev/null
+++ b/app/assets/images/emoji/penguin.png
Binary files differ
diff --git a/app/assets/images/emoji/pensive.png b/app/assets/images/emoji/pensive.png
new file mode 100755
index 00000000000..4159f3c42ff
--- /dev/null
+++ b/app/assets/images/emoji/pensive.png
Binary files differ
diff --git a/app/assets/images/emoji/performing_arts.png b/app/assets/images/emoji/performing_arts.png
new file mode 100755
index 00000000000..899fbe5a791
--- /dev/null
+++ b/app/assets/images/emoji/performing_arts.png
Binary files differ
diff --git a/app/assets/images/emoji/persevere.png b/app/assets/images/emoji/persevere.png
new file mode 100755
index 00000000000..f99f6da47c1
--- /dev/null
+++ b/app/assets/images/emoji/persevere.png
Binary files differ
diff --git a/app/assets/images/emoji/person_frowning.png b/app/assets/images/emoji/person_frowning.png
new file mode 100755
index 00000000000..6f34d5e159d
--- /dev/null
+++ b/app/assets/images/emoji/person_frowning.png
Binary files differ
diff --git a/app/assets/images/emoji/person_with_blond_hair.png b/app/assets/images/emoji/person_with_blond_hair.png
new file mode 100755
index 00000000000..c144301cbb8
--- /dev/null
+++ b/app/assets/images/emoji/person_with_blond_hair.png
Binary files differ
diff --git a/app/assets/images/emoji/person_with_pouting_face.png b/app/assets/images/emoji/person_with_pouting_face.png
new file mode 100755
index 00000000000..c4a95c3b2a2
--- /dev/null
+++ b/app/assets/images/emoji/person_with_pouting_face.png
Binary files differ
diff --git a/app/assets/images/emoji/phone.png b/app/assets/images/emoji/phone.png
new file mode 100755
index 00000000000..87d2559b552
--- /dev/null
+++ b/app/assets/images/emoji/phone.png
Binary files differ
diff --git a/app/assets/images/emoji/pig.png b/app/assets/images/emoji/pig.png
new file mode 100755
index 00000000000..f7f273c733b
--- /dev/null
+++ b/app/assets/images/emoji/pig.png
Binary files differ
diff --git a/app/assets/images/emoji/pig2.png b/app/assets/images/emoji/pig2.png
new file mode 100755
index 00000000000..fec3374d709
--- /dev/null
+++ b/app/assets/images/emoji/pig2.png
Binary files differ
diff --git a/app/assets/images/emoji/pig_nose.png b/app/assets/images/emoji/pig_nose.png
new file mode 100755
index 00000000000..38d612446eb
--- /dev/null
+++ b/app/assets/images/emoji/pig_nose.png
Binary files differ
diff --git a/app/assets/images/emoji/pill.png b/app/assets/images/emoji/pill.png
new file mode 100755
index 00000000000..cd84a78ff75
--- /dev/null
+++ b/app/assets/images/emoji/pill.png
Binary files differ
diff --git a/app/assets/images/emoji/pineapple.png b/app/assets/images/emoji/pineapple.png
new file mode 100755
index 00000000000..d6f8e287692
--- /dev/null
+++ b/app/assets/images/emoji/pineapple.png
Binary files differ
diff --git a/app/assets/images/emoji/pisces.png b/app/assets/images/emoji/pisces.png
new file mode 100755
index 00000000000..5a2da0a0599
--- /dev/null
+++ b/app/assets/images/emoji/pisces.png
Binary files differ
diff --git a/app/assets/images/emoji/pizza.png b/app/assets/images/emoji/pizza.png
new file mode 100755
index 00000000000..460367d02cd
--- /dev/null
+++ b/app/assets/images/emoji/pizza.png
Binary files differ
diff --git a/app/assets/images/emoji/plus1.png b/app/assets/images/emoji/plus1.png
new file mode 100755
index 00000000000..81786c1d8f5
--- /dev/null
+++ b/app/assets/images/emoji/plus1.png
Binary files differ
diff --git a/app/assets/images/emoji/point_down.png b/app/assets/images/emoji/point_down.png
new file mode 100755
index 00000000000..658c6d91875
--- /dev/null
+++ b/app/assets/images/emoji/point_down.png
Binary files differ
diff --git a/app/assets/images/emoji/point_left.png b/app/assets/images/emoji/point_left.png
new file mode 100755
index 00000000000..38a99b43f7f
--- /dev/null
+++ b/app/assets/images/emoji/point_left.png
Binary files differ
diff --git a/app/assets/images/emoji/point_right.png b/app/assets/images/emoji/point_right.png
new file mode 100755
index 00000000000..6f9f029a420
--- /dev/null
+++ b/app/assets/images/emoji/point_right.png
Binary files differ
diff --git a/app/assets/images/emoji/point_up.png b/app/assets/images/emoji/point_up.png
new file mode 100755
index 00000000000..01896e214aa
--- /dev/null
+++ b/app/assets/images/emoji/point_up.png
Binary files differ
diff --git a/app/assets/images/emoji/point_up_2.png b/app/assets/images/emoji/point_up_2.png
new file mode 100755
index 00000000000..1cfe73672c0
--- /dev/null
+++ b/app/assets/images/emoji/point_up_2.png
Binary files differ
diff --git a/app/assets/images/emoji/police_car.png b/app/assets/images/emoji/police_car.png
new file mode 100755
index 00000000000..b8f17275ee1
--- /dev/null
+++ b/app/assets/images/emoji/police_car.png
Binary files differ
diff --git a/app/assets/images/emoji/poodle.png b/app/assets/images/emoji/poodle.png
new file mode 100755
index 00000000000..adac80bd97a
--- /dev/null
+++ b/app/assets/images/emoji/poodle.png
Binary files differ
diff --git a/app/assets/images/emoji/poop.png b/app/assets/images/emoji/poop.png
new file mode 100755
index 00000000000..73a4dc84008
--- /dev/null
+++ b/app/assets/images/emoji/poop.png
Binary files differ
diff --git a/app/assets/images/emoji/post_office.png b/app/assets/images/emoji/post_office.png
new file mode 100755
index 00000000000..43b59e30ec2
--- /dev/null
+++ b/app/assets/images/emoji/post_office.png
Binary files differ
diff --git a/app/assets/images/emoji/postal_horn.png b/app/assets/images/emoji/postal_horn.png
new file mode 100755
index 00000000000..e9b713bbeca
--- /dev/null
+++ b/app/assets/images/emoji/postal_horn.png
Binary files differ
diff --git a/app/assets/images/emoji/postbox.png b/app/assets/images/emoji/postbox.png
new file mode 100755
index 00000000000..ce04b7008ba
--- /dev/null
+++ b/app/assets/images/emoji/postbox.png
Binary files differ
diff --git a/app/assets/images/emoji/potable_water.png b/app/assets/images/emoji/potable_water.png
new file mode 100755
index 00000000000..e9fd56079ca
--- /dev/null
+++ b/app/assets/images/emoji/potable_water.png
Binary files differ
diff --git a/app/assets/images/emoji/pouch.png b/app/assets/images/emoji/pouch.png
new file mode 100755
index 00000000000..0bc5879fcbb
--- /dev/null
+++ b/app/assets/images/emoji/pouch.png
Binary files differ
diff --git a/app/assets/images/emoji/poultry_leg.png b/app/assets/images/emoji/poultry_leg.png
new file mode 100755
index 00000000000..43ad8596518
--- /dev/null
+++ b/app/assets/images/emoji/poultry_leg.png
Binary files differ
diff --git a/app/assets/images/emoji/pound.png b/app/assets/images/emoji/pound.png
new file mode 100755
index 00000000000..f8be91d7a4b
--- /dev/null
+++ b/app/assets/images/emoji/pound.png
Binary files differ
diff --git a/app/assets/images/emoji/pouting_cat.png b/app/assets/images/emoji/pouting_cat.png
new file mode 100755
index 00000000000..4325fd48dd7
--- /dev/null
+++ b/app/assets/images/emoji/pouting_cat.png
Binary files differ
diff --git a/app/assets/images/emoji/pray.png b/app/assets/images/emoji/pray.png
new file mode 100755
index 00000000000..f86c992d5a7
--- /dev/null
+++ b/app/assets/images/emoji/pray.png
Binary files differ
diff --git a/app/assets/images/emoji/princess.png b/app/assets/images/emoji/princess.png
new file mode 100755
index 00000000000..1ebb2ce9b13
--- /dev/null
+++ b/app/assets/images/emoji/princess.png
Binary files differ
diff --git a/app/assets/images/emoji/punch.png b/app/assets/images/emoji/punch.png
new file mode 100755
index 00000000000..277047b7c46
--- /dev/null
+++ b/app/assets/images/emoji/punch.png
Binary files differ
diff --git a/app/assets/images/emoji/purple_heart.png b/app/assets/images/emoji/purple_heart.png
new file mode 100755
index 00000000000..d5f875043f0
--- /dev/null
+++ b/app/assets/images/emoji/purple_heart.png
Binary files differ
diff --git a/app/assets/images/emoji/purse.png b/app/assets/images/emoji/purse.png
new file mode 100755
index 00000000000..8f06a2b932c
--- /dev/null
+++ b/app/assets/images/emoji/purse.png
Binary files differ
diff --git a/app/assets/images/emoji/pushpin.png b/app/assets/images/emoji/pushpin.png
new file mode 100755
index 00000000000..540c4ecb885
--- /dev/null
+++ b/app/assets/images/emoji/pushpin.png
Binary files differ
diff --git a/app/assets/images/emoji/put_litter_in_its_place.png b/app/assets/images/emoji/put_litter_in_its_place.png
new file mode 100755
index 00000000000..c2e350c2dc6
--- /dev/null
+++ b/app/assets/images/emoji/put_litter_in_its_place.png
Binary files differ
diff --git a/app/assets/images/emoji/question.png b/app/assets/images/emoji/question.png
new file mode 100755
index 00000000000..38cedf560fb
--- /dev/null
+++ b/app/assets/images/emoji/question.png
Binary files differ
diff --git a/app/assets/images/emoji/rabbit.png b/app/assets/images/emoji/rabbit.png
new file mode 100755
index 00000000000..5cb3ef6f0c6
--- /dev/null
+++ b/app/assets/images/emoji/rabbit.png
Binary files differ
diff --git a/app/assets/images/emoji/rabbit2.png b/app/assets/images/emoji/rabbit2.png
new file mode 100755
index 00000000000..5bc993e799c
--- /dev/null
+++ b/app/assets/images/emoji/rabbit2.png
Binary files differ
diff --git a/app/assets/images/emoji/racehorse.png b/app/assets/images/emoji/racehorse.png
new file mode 100755
index 00000000000..4d09c64de7e
--- /dev/null
+++ b/app/assets/images/emoji/racehorse.png
Binary files differ
diff --git a/app/assets/images/emoji/radio.png b/app/assets/images/emoji/radio.png
new file mode 100755
index 00000000000..ea589efe32c
--- /dev/null
+++ b/app/assets/images/emoji/radio.png
Binary files differ
diff --git a/app/assets/images/emoji/radio_button.png b/app/assets/images/emoji/radio_button.png
new file mode 100755
index 00000000000..63755eec258
--- /dev/null
+++ b/app/assets/images/emoji/radio_button.png
Binary files differ
diff --git a/app/assets/images/emoji/rage.png b/app/assets/images/emoji/rage.png
new file mode 100755
index 00000000000..c65ddff552a
--- /dev/null
+++ b/app/assets/images/emoji/rage.png
Binary files differ
diff --git a/app/assets/images/emoji/rage1.png b/app/assets/images/emoji/rage1.png
new file mode 100755
index 00000000000..1506ba4032a
--- /dev/null
+++ b/app/assets/images/emoji/rage1.png
Binary files differ
diff --git a/app/assets/images/emoji/rage2.png b/app/assets/images/emoji/rage2.png
new file mode 100755
index 00000000000..f792e063b49
--- /dev/null
+++ b/app/assets/images/emoji/rage2.png
Binary files differ
diff --git a/app/assets/images/emoji/rage3.png b/app/assets/images/emoji/rage3.png
new file mode 100755
index 00000000000..58764cbcb3b
--- /dev/null
+++ b/app/assets/images/emoji/rage3.png
Binary files differ
diff --git a/app/assets/images/emoji/rage4.png b/app/assets/images/emoji/rage4.png
new file mode 100755
index 00000000000..c726c94a295
--- /dev/null
+++ b/app/assets/images/emoji/rage4.png
Binary files differ
diff --git a/app/assets/images/emoji/railway_car.png b/app/assets/images/emoji/railway_car.png
new file mode 100755
index 00000000000..22361158fb3
--- /dev/null
+++ b/app/assets/images/emoji/railway_car.png
Binary files differ
diff --git a/app/assets/images/emoji/rainbow.png b/app/assets/images/emoji/rainbow.png
new file mode 100755
index 00000000000..6b1faa03793
--- /dev/null
+++ b/app/assets/images/emoji/rainbow.png
Binary files differ
diff --git a/app/assets/images/emoji/raised_hand.png b/app/assets/images/emoji/raised_hand.png
new file mode 100755
index 00000000000..e1741a40e74
--- /dev/null
+++ b/app/assets/images/emoji/raised_hand.png
Binary files differ
diff --git a/app/assets/images/emoji/raised_hands.png b/app/assets/images/emoji/raised_hands.png
new file mode 100755
index 00000000000..e03142bdce9
--- /dev/null
+++ b/app/assets/images/emoji/raised_hands.png
Binary files differ
diff --git a/app/assets/images/emoji/ram.png b/app/assets/images/emoji/ram.png
new file mode 100755
index 00000000000..5ea7bfbc0d8
--- /dev/null
+++ b/app/assets/images/emoji/ram.png
Binary files differ
diff --git a/app/assets/images/emoji/ramen.png b/app/assets/images/emoji/ramen.png
new file mode 100755
index 00000000000..78dc7d537fb
--- /dev/null
+++ b/app/assets/images/emoji/ramen.png
Binary files differ
diff --git a/app/assets/images/emoji/rat.png b/app/assets/images/emoji/rat.png
new file mode 100755
index 00000000000..1c463dfde64
--- /dev/null
+++ b/app/assets/images/emoji/rat.png
Binary files differ
diff --git a/app/assets/images/emoji/recycle.png b/app/assets/images/emoji/recycle.png
new file mode 100755
index 00000000000..99104c0e9cd
--- /dev/null
+++ b/app/assets/images/emoji/recycle.png
Binary files differ
diff --git a/app/assets/images/emoji/red_car.png b/app/assets/images/emoji/red_car.png
new file mode 100755
index 00000000000..d70a2f06263
--- /dev/null
+++ b/app/assets/images/emoji/red_car.png
Binary files differ
diff --git a/app/assets/images/emoji/red_circle.png b/app/assets/images/emoji/red_circle.png
new file mode 100755
index 00000000000..b391289b203
--- /dev/null
+++ b/app/assets/images/emoji/red_circle.png
Binary files differ
diff --git a/app/assets/images/emoji/registered.png b/app/assets/images/emoji/registered.png
new file mode 100755
index 00000000000..31c68a80b08
--- /dev/null
+++ b/app/assets/images/emoji/registered.png
Binary files differ
diff --git a/app/assets/images/emoji/relaxed.png b/app/assets/images/emoji/relaxed.png
new file mode 100755
index 00000000000..bbab82d3bb5
--- /dev/null
+++ b/app/assets/images/emoji/relaxed.png
Binary files differ
diff --git a/app/assets/images/emoji/relieved.png b/app/assets/images/emoji/relieved.png
new file mode 100755
index 00000000000..fa5f9e7f9f9
--- /dev/null
+++ b/app/assets/images/emoji/relieved.png
Binary files differ
diff --git a/app/assets/images/emoji/repeat.png b/app/assets/images/emoji/repeat.png
new file mode 100755
index 00000000000..80113b6929b
--- /dev/null
+++ b/app/assets/images/emoji/repeat.png
Binary files differ
diff --git a/app/assets/images/emoji/repeat_one.png b/app/assets/images/emoji/repeat_one.png
new file mode 100755
index 00000000000..3c47bcc1f33
--- /dev/null
+++ b/app/assets/images/emoji/repeat_one.png
Binary files differ
diff --git a/app/assets/images/emoji/restroom.png b/app/assets/images/emoji/restroom.png
new file mode 100755
index 00000000000..d6c111b29b9
--- /dev/null
+++ b/app/assets/images/emoji/restroom.png
Binary files differ
diff --git a/app/assets/images/emoji/revolving_hearts.png b/app/assets/images/emoji/revolving_hearts.png
new file mode 100755
index 00000000000..ea3317c47fb
--- /dev/null
+++ b/app/assets/images/emoji/revolving_hearts.png
Binary files differ
diff --git a/app/assets/images/emoji/rewind.png b/app/assets/images/emoji/rewind.png
new file mode 100755
index 00000000000..26289dc3d2c
--- /dev/null
+++ b/app/assets/images/emoji/rewind.png
Binary files differ
diff --git a/app/assets/images/emoji/ribbon.png b/app/assets/images/emoji/ribbon.png
new file mode 100755
index 00000000000..63ee5ba5af2
--- /dev/null
+++ b/app/assets/images/emoji/ribbon.png
Binary files differ
diff --git a/app/assets/images/emoji/rice.png b/app/assets/images/emoji/rice.png
new file mode 100755
index 00000000000..1fd22027bc5
--- /dev/null
+++ b/app/assets/images/emoji/rice.png
Binary files differ
diff --git a/app/assets/images/emoji/rice_ball.png b/app/assets/images/emoji/rice_ball.png
new file mode 100755
index 00000000000..04f8a88067c
--- /dev/null
+++ b/app/assets/images/emoji/rice_ball.png
Binary files differ
diff --git a/app/assets/images/emoji/rice_cracker.png b/app/assets/images/emoji/rice_cracker.png
new file mode 100755
index 00000000000..954c901e935
--- /dev/null
+++ b/app/assets/images/emoji/rice_cracker.png
Binary files differ
diff --git a/app/assets/images/emoji/rice_scene.png b/app/assets/images/emoji/rice_scene.png
new file mode 100755
index 00000000000..14361988db7
--- /dev/null
+++ b/app/assets/images/emoji/rice_scene.png
Binary files differ
diff --git a/app/assets/images/emoji/ring.png b/app/assets/images/emoji/ring.png
new file mode 100755
index 00000000000..8a57fd68bac
--- /dev/null
+++ b/app/assets/images/emoji/ring.png
Binary files differ
diff --git a/app/assets/images/emoji/rocket.png b/app/assets/images/emoji/rocket.png
new file mode 100755
index 00000000000..783078d3798
--- /dev/null
+++ b/app/assets/images/emoji/rocket.png
Binary files differ
diff --git a/app/assets/images/emoji/roller_coaster.png b/app/assets/images/emoji/roller_coaster.png
new file mode 100755
index 00000000000..9180b9861dc
--- /dev/null
+++ b/app/assets/images/emoji/roller_coaster.png
Binary files differ
diff --git a/app/assets/images/emoji/rooster.png b/app/assets/images/emoji/rooster.png
new file mode 100755
index 00000000000..fab23ad3625
--- /dev/null
+++ b/app/assets/images/emoji/rooster.png
Binary files differ
diff --git a/app/assets/images/emoji/rose.png b/app/assets/images/emoji/rose.png
new file mode 100755
index 00000000000..3479fbcbbd4
--- /dev/null
+++ b/app/assets/images/emoji/rose.png
Binary files differ
diff --git a/app/assets/images/emoji/rotating_light.png b/app/assets/images/emoji/rotating_light.png
new file mode 100755
index 00000000000..6cf4a775e0a
--- /dev/null
+++ b/app/assets/images/emoji/rotating_light.png
Binary files differ
diff --git a/app/assets/images/emoji/round_pushpin.png b/app/assets/images/emoji/round_pushpin.png
new file mode 100755
index 00000000000..e498e92cf6a
--- /dev/null
+++ b/app/assets/images/emoji/round_pushpin.png
Binary files differ
diff --git a/app/assets/images/emoji/rowboat.png b/app/assets/images/emoji/rowboat.png
new file mode 100755
index 00000000000..fe8ae3ecdab
--- /dev/null
+++ b/app/assets/images/emoji/rowboat.png
Binary files differ
diff --git a/app/assets/images/emoji/ru.png b/app/assets/images/emoji/ru.png
new file mode 100755
index 00000000000..55fcf3549e2
--- /dev/null
+++ b/app/assets/images/emoji/ru.png
Binary files differ
diff --git a/app/assets/images/emoji/rugby_football.png b/app/assets/images/emoji/rugby_football.png
new file mode 100755
index 00000000000..f8db67d7018
--- /dev/null
+++ b/app/assets/images/emoji/rugby_football.png
Binary files differ
diff --git a/app/assets/images/emoji/runner.png b/app/assets/images/emoji/runner.png
new file mode 100755
index 00000000000..cb00429623d
--- /dev/null
+++ b/app/assets/images/emoji/runner.png
Binary files differ
diff --git a/app/assets/images/emoji/running.png b/app/assets/images/emoji/running.png
new file mode 100755
index 00000000000..1ecfd9059d8
--- /dev/null
+++ b/app/assets/images/emoji/running.png
Binary files differ
diff --git a/app/assets/images/emoji/running_shirt_with_sash.png b/app/assets/images/emoji/running_shirt_with_sash.png
new file mode 100755
index 00000000000..0d68bba0910
--- /dev/null
+++ b/app/assets/images/emoji/running_shirt_with_sash.png
Binary files differ
diff --git a/app/assets/images/emoji/sa.png b/app/assets/images/emoji/sa.png
new file mode 100755
index 00000000000..387f098b99c
--- /dev/null
+++ b/app/assets/images/emoji/sa.png
Binary files differ
diff --git a/app/assets/images/emoji/sagittarius.png b/app/assets/images/emoji/sagittarius.png
new file mode 100755
index 00000000000..8b5435baaa9
--- /dev/null
+++ b/app/assets/images/emoji/sagittarius.png
Binary files differ
diff --git a/app/assets/images/emoji/sailboat.png b/app/assets/images/emoji/sailboat.png
new file mode 100755
index 00000000000..ff656dc62bb
--- /dev/null
+++ b/app/assets/images/emoji/sailboat.png
Binary files differ
diff --git a/app/assets/images/emoji/sake.png b/app/assets/images/emoji/sake.png
new file mode 100755
index 00000000000..1f69907e58a
--- /dev/null
+++ b/app/assets/images/emoji/sake.png
Binary files differ
diff --git a/app/assets/images/emoji/sandal.png b/app/assets/images/emoji/sandal.png
new file mode 100755
index 00000000000..0bb3f663f5c
--- /dev/null
+++ b/app/assets/images/emoji/sandal.png
Binary files differ
diff --git a/app/assets/images/emoji/santa.png b/app/assets/images/emoji/santa.png
new file mode 100755
index 00000000000..a2240c07e7a
--- /dev/null
+++ b/app/assets/images/emoji/santa.png
Binary files differ
diff --git a/app/assets/images/emoji/satellite.png b/app/assets/images/emoji/satellite.png
new file mode 100755
index 00000000000..3481cc2ef4a
--- /dev/null
+++ b/app/assets/images/emoji/satellite.png
Binary files differ
diff --git a/app/assets/images/emoji/satisfied.png b/app/assets/images/emoji/satisfied.png
new file mode 100755
index 00000000000..fe5629f431e
--- /dev/null
+++ b/app/assets/images/emoji/satisfied.png
Binary files differ
diff --git a/app/assets/images/emoji/saxophone.png b/app/assets/images/emoji/saxophone.png
new file mode 100755
index 00000000000..011559a7673
--- /dev/null
+++ b/app/assets/images/emoji/saxophone.png
Binary files differ
diff --git a/app/assets/images/emoji/school.png b/app/assets/images/emoji/school.png
new file mode 100755
index 00000000000..afd922bf137
--- /dev/null
+++ b/app/assets/images/emoji/school.png
Binary files differ
diff --git a/app/assets/images/emoji/school_satchel.png b/app/assets/images/emoji/school_satchel.png
new file mode 100755
index 00000000000..edfb19aec91
--- /dev/null
+++ b/app/assets/images/emoji/school_satchel.png
Binary files differ
diff --git a/app/assets/images/emoji/scissors.png b/app/assets/images/emoji/scissors.png
new file mode 100755
index 00000000000..be916043d2b
--- /dev/null
+++ b/app/assets/images/emoji/scissors.png
Binary files differ
diff --git a/app/assets/images/emoji/scorpius.png b/app/assets/images/emoji/scorpius.png
new file mode 100755
index 00000000000..67fcea1658a
--- /dev/null
+++ b/app/assets/images/emoji/scorpius.png
Binary files differ
diff --git a/app/assets/images/emoji/scream.png b/app/assets/images/emoji/scream.png
new file mode 100755
index 00000000000..9e93c885dba
--- /dev/null
+++ b/app/assets/images/emoji/scream.png
Binary files differ
diff --git a/app/assets/images/emoji/scream_cat.png b/app/assets/images/emoji/scream_cat.png
new file mode 100755
index 00000000000..d94cd34ff5d
--- /dev/null
+++ b/app/assets/images/emoji/scream_cat.png
Binary files differ
diff --git a/app/assets/images/emoji/scroll.png b/app/assets/images/emoji/scroll.png
new file mode 100755
index 00000000000..c5a10e6b8f7
--- /dev/null
+++ b/app/assets/images/emoji/scroll.png
Binary files differ
diff --git a/app/assets/images/emoji/seat.png b/app/assets/images/emoji/seat.png
new file mode 100755
index 00000000000..d1cb864b4bf
--- /dev/null
+++ b/app/assets/images/emoji/seat.png
Binary files differ
diff --git a/app/assets/images/emoji/secret.png b/app/assets/images/emoji/secret.png
new file mode 100755
index 00000000000..82e383a60d1
--- /dev/null
+++ b/app/assets/images/emoji/secret.png
Binary files differ
diff --git a/app/assets/images/emoji/see_no_evil.png b/app/assets/images/emoji/see_no_evil.png
new file mode 100755
index 00000000000..0890a622279
--- /dev/null
+++ b/app/assets/images/emoji/see_no_evil.png
Binary files differ
diff --git a/app/assets/images/emoji/seedling.png b/app/assets/images/emoji/seedling.png
new file mode 100755
index 00000000000..f0eb5a6b99a
--- /dev/null
+++ b/app/assets/images/emoji/seedling.png
Binary files differ
diff --git a/app/assets/images/emoji/seven.png b/app/assets/images/emoji/seven.png
new file mode 100755
index 00000000000..354e89ae75a
--- /dev/null
+++ b/app/assets/images/emoji/seven.png
Binary files differ
diff --git a/app/assets/images/emoji/shaved_ice.png b/app/assets/images/emoji/shaved_ice.png
new file mode 100755
index 00000000000..0d0b382c22b
--- /dev/null
+++ b/app/assets/images/emoji/shaved_ice.png
Binary files differ
diff --git a/app/assets/images/emoji/sheep.png b/app/assets/images/emoji/sheep.png
new file mode 100755
index 00000000000..c7277d2898e
--- /dev/null
+++ b/app/assets/images/emoji/sheep.png
Binary files differ
diff --git a/app/assets/images/emoji/shell.png b/app/assets/images/emoji/shell.png
new file mode 100755
index 00000000000..3145b564963
--- /dev/null
+++ b/app/assets/images/emoji/shell.png
Binary files differ
diff --git a/app/assets/images/emoji/ship.png b/app/assets/images/emoji/ship.png
new file mode 100755
index 00000000000..5d2d8b602bb
--- /dev/null
+++ b/app/assets/images/emoji/ship.png
Binary files differ
diff --git a/app/assets/images/emoji/shipit.png b/app/assets/images/emoji/shipit.png
new file mode 100755
index 00000000000..a58a47f62f9
--- /dev/null
+++ b/app/assets/images/emoji/shipit.png
Binary files differ
diff --git a/app/assets/images/emoji/shirt.png b/app/assets/images/emoji/shirt.png
new file mode 100755
index 00000000000..297a6d63ed3
--- /dev/null
+++ b/app/assets/images/emoji/shirt.png
Binary files differ
diff --git a/app/assets/images/emoji/shit.png b/app/assets/images/emoji/shit.png
new file mode 100755
index 00000000000..73a4dc84008
--- /dev/null
+++ b/app/assets/images/emoji/shit.png
Binary files differ
diff --git a/app/assets/images/emoji/shoe.png b/app/assets/images/emoji/shoe.png
new file mode 100755
index 00000000000..45b82e61cf2
--- /dev/null
+++ b/app/assets/images/emoji/shoe.png
Binary files differ
diff --git a/app/assets/images/emoji/shower.png b/app/assets/images/emoji/shower.png
new file mode 100755
index 00000000000..94f82aac02e
--- /dev/null
+++ b/app/assets/images/emoji/shower.png
Binary files differ
diff --git a/app/assets/images/emoji/signal_strength.png b/app/assets/images/emoji/signal_strength.png
new file mode 100755
index 00000000000..a4bd23ebf70
--- /dev/null
+++ b/app/assets/images/emoji/signal_strength.png
Binary files differ
diff --git a/app/assets/images/emoji/six.png b/app/assets/images/emoji/six.png
new file mode 100755
index 00000000000..56880556577
--- /dev/null
+++ b/app/assets/images/emoji/six.png
Binary files differ
diff --git a/app/assets/images/emoji/six_pointed_star.png b/app/assets/images/emoji/six_pointed_star.png
new file mode 100755
index 00000000000..010f8f5f95f
--- /dev/null
+++ b/app/assets/images/emoji/six_pointed_star.png
Binary files differ
diff --git a/app/assets/images/emoji/ski.png b/app/assets/images/emoji/ski.png
new file mode 100755
index 00000000000..98f5cb0f460
--- /dev/null
+++ b/app/assets/images/emoji/ski.png
Binary files differ
diff --git a/app/assets/images/emoji/skull.png b/app/assets/images/emoji/skull.png
new file mode 100755
index 00000000000..bd4ee38297a
--- /dev/null
+++ b/app/assets/images/emoji/skull.png
Binary files differ
diff --git a/app/assets/images/emoji/sleepy.png b/app/assets/images/emoji/sleepy.png
new file mode 100755
index 00000000000..df4f55efd9a
--- /dev/null
+++ b/app/assets/images/emoji/sleepy.png
Binary files differ
diff --git a/app/assets/images/emoji/slot_machine.png b/app/assets/images/emoji/slot_machine.png
new file mode 100755
index 00000000000..26f114830b8
--- /dev/null
+++ b/app/assets/images/emoji/slot_machine.png
Binary files differ
diff --git a/app/assets/images/emoji/small_blue_diamond.png b/app/assets/images/emoji/small_blue_diamond.png
new file mode 100755
index 00000000000..5a7b5d555a5
--- /dev/null
+++ b/app/assets/images/emoji/small_blue_diamond.png
Binary files differ
diff --git a/app/assets/images/emoji/small_orange_diamond.png b/app/assets/images/emoji/small_orange_diamond.png
new file mode 100755
index 00000000000..04941d37b63
--- /dev/null
+++ b/app/assets/images/emoji/small_orange_diamond.png
Binary files differ
diff --git a/app/assets/images/emoji/small_red_triangle.png b/app/assets/images/emoji/small_red_triangle.png
new file mode 100755
index 00000000000..8c4428da8fa
--- /dev/null
+++ b/app/assets/images/emoji/small_red_triangle.png
Binary files differ
diff --git a/app/assets/images/emoji/small_red_triangle_down.png b/app/assets/images/emoji/small_red_triangle_down.png
new file mode 100755
index 00000000000..94832f060c4
--- /dev/null
+++ b/app/assets/images/emoji/small_red_triangle_down.png
Binary files differ
diff --git a/app/assets/images/emoji/smile.png b/app/assets/images/emoji/smile.png
new file mode 100755
index 00000000000..81a83968996
--- /dev/null
+++ b/app/assets/images/emoji/smile.png
Binary files differ
diff --git a/app/assets/images/emoji/smile_cat.png b/app/assets/images/emoji/smile_cat.png
new file mode 100755
index 00000000000..ad333ba3b6b
--- /dev/null
+++ b/app/assets/images/emoji/smile_cat.png
Binary files differ
diff --git a/app/assets/images/emoji/smiley.png b/app/assets/images/emoji/smiley.png
new file mode 100755
index 00000000000..77b581d68fa
--- /dev/null
+++ b/app/assets/images/emoji/smiley.png
Binary files differ
diff --git a/app/assets/images/emoji/smiley_cat.png b/app/assets/images/emoji/smiley_cat.png
new file mode 100755
index 00000000000..dbf1b0276ab
--- /dev/null
+++ b/app/assets/images/emoji/smiley_cat.png
Binary files differ
diff --git a/app/assets/images/emoji/smiling_imp.png b/app/assets/images/emoji/smiling_imp.png
new file mode 100755
index 00000000000..d904049309c
--- /dev/null
+++ b/app/assets/images/emoji/smiling_imp.png
Binary files differ
diff --git a/app/assets/images/emoji/smirk.png b/app/assets/images/emoji/smirk.png
new file mode 100755
index 00000000000..bc6e5082c8c
--- /dev/null
+++ b/app/assets/images/emoji/smirk.png
Binary files differ
diff --git a/app/assets/images/emoji/smirk_cat.png b/app/assets/images/emoji/smirk_cat.png
new file mode 100755
index 00000000000..351565e2461
--- /dev/null
+++ b/app/assets/images/emoji/smirk_cat.png
Binary files differ
diff --git a/app/assets/images/emoji/smoking.png b/app/assets/images/emoji/smoking.png
new file mode 100755
index 00000000000..4aad6cbd7c4
--- /dev/null
+++ b/app/assets/images/emoji/smoking.png
Binary files differ
diff --git a/app/assets/images/emoji/snail.png b/app/assets/images/emoji/snail.png
new file mode 100755
index 00000000000..e75e69a84d3
--- /dev/null
+++ b/app/assets/images/emoji/snail.png
Binary files differ
diff --git a/app/assets/images/emoji/snake.png b/app/assets/images/emoji/snake.png
new file mode 100755
index 00000000000..ef58933e2b2
--- /dev/null
+++ b/app/assets/images/emoji/snake.png
Binary files differ
diff --git a/app/assets/images/emoji/snowboarder.png b/app/assets/images/emoji/snowboarder.png
new file mode 100755
index 00000000000..aeda5c8d872
--- /dev/null
+++ b/app/assets/images/emoji/snowboarder.png
Binary files differ
diff --git a/app/assets/images/emoji/snowflake.png b/app/assets/images/emoji/snowflake.png
new file mode 100755
index 00000000000..54b68ff4f13
--- /dev/null
+++ b/app/assets/images/emoji/snowflake.png
Binary files differ
diff --git a/app/assets/images/emoji/snowman.png b/app/assets/images/emoji/snowman.png
new file mode 100755
index 00000000000..a97902e5304
--- /dev/null
+++ b/app/assets/images/emoji/snowman.png
Binary files differ
diff --git a/app/assets/images/emoji/sob.png b/app/assets/images/emoji/sob.png
new file mode 100755
index 00000000000..1561df92eee
--- /dev/null
+++ b/app/assets/images/emoji/sob.png
Binary files differ
diff --git a/app/assets/images/emoji/soccer.png b/app/assets/images/emoji/soccer.png
new file mode 100755
index 00000000000..1e118b5b184
--- /dev/null
+++ b/app/assets/images/emoji/soccer.png
Binary files differ
diff --git a/app/assets/images/emoji/soon.png b/app/assets/images/emoji/soon.png
new file mode 100755
index 00000000000..9386615a324
--- /dev/null
+++ b/app/assets/images/emoji/soon.png
Binary files differ
diff --git a/app/assets/images/emoji/sos.png b/app/assets/images/emoji/sos.png
new file mode 100755
index 00000000000..e3e16ef73f8
--- /dev/null
+++ b/app/assets/images/emoji/sos.png
Binary files differ
diff --git a/app/assets/images/emoji/sound.png b/app/assets/images/emoji/sound.png
new file mode 100755
index 00000000000..6aa4dbff4c0
--- /dev/null
+++ b/app/assets/images/emoji/sound.png
Binary files differ
diff --git a/app/assets/images/emoji/space_invader.png b/app/assets/images/emoji/space_invader.png
new file mode 100755
index 00000000000..38404916747
--- /dev/null
+++ b/app/assets/images/emoji/space_invader.png
Binary files differ
diff --git a/app/assets/images/emoji/spades.png b/app/assets/images/emoji/spades.png
new file mode 100755
index 00000000000..133a1aba8a3
--- /dev/null
+++ b/app/assets/images/emoji/spades.png
Binary files differ
diff --git a/app/assets/images/emoji/spaghetti.png b/app/assets/images/emoji/spaghetti.png
new file mode 100755
index 00000000000..08de243f554
--- /dev/null
+++ b/app/assets/images/emoji/spaghetti.png
Binary files differ
diff --git a/app/assets/images/emoji/sparkler.png b/app/assets/images/emoji/sparkler.png
new file mode 100755
index 00000000000..4aabd7e0ed3
--- /dev/null
+++ b/app/assets/images/emoji/sparkler.png
Binary files differ
diff --git a/app/assets/images/emoji/sparkles.png b/app/assets/images/emoji/sparkles.png
new file mode 100755
index 00000000000..92138828df0
--- /dev/null
+++ b/app/assets/images/emoji/sparkles.png
Binary files differ
diff --git a/app/assets/images/emoji/speak_no_evil.png b/app/assets/images/emoji/speak_no_evil.png
new file mode 100755
index 00000000000..87944c4de54
--- /dev/null
+++ b/app/assets/images/emoji/speak_no_evil.png
Binary files differ
diff --git a/app/assets/images/emoji/speaker.png b/app/assets/images/emoji/speaker.png
new file mode 100755
index 00000000000..470476e182e
--- /dev/null
+++ b/app/assets/images/emoji/speaker.png
Binary files differ
diff --git a/app/assets/images/emoji/speech_balloon.png b/app/assets/images/emoji/speech_balloon.png
new file mode 100755
index 00000000000..2896c278886
--- /dev/null
+++ b/app/assets/images/emoji/speech_balloon.png
Binary files differ
diff --git a/app/assets/images/emoji/speedboat.png b/app/assets/images/emoji/speedboat.png
new file mode 100755
index 00000000000..da6689b3be7
--- /dev/null
+++ b/app/assets/images/emoji/speedboat.png
Binary files differ
diff --git a/app/assets/images/emoji/squirrel.png b/app/assets/images/emoji/squirrel.png
new file mode 100755
index 00000000000..a58a47f62f9
--- /dev/null
+++ b/app/assets/images/emoji/squirrel.png
Binary files differ
diff --git a/app/assets/images/emoji/star.png b/app/assets/images/emoji/star.png
new file mode 100755
index 00000000000..1bfddc86255
--- /dev/null
+++ b/app/assets/images/emoji/star.png
Binary files differ
diff --git a/app/assets/images/emoji/star2.png b/app/assets/images/emoji/star2.png
new file mode 100755
index 00000000000..8b40ff4c8c8
--- /dev/null
+++ b/app/assets/images/emoji/star2.png
Binary files differ
diff --git a/app/assets/images/emoji/stars.png b/app/assets/images/emoji/stars.png
new file mode 100755
index 00000000000..097a84241c1
--- /dev/null
+++ b/app/assets/images/emoji/stars.png
Binary files differ
diff --git a/app/assets/images/emoji/station.png b/app/assets/images/emoji/station.png
new file mode 100755
index 00000000000..e77daa8a75f
--- /dev/null
+++ b/app/assets/images/emoji/station.png
Binary files differ
diff --git a/app/assets/images/emoji/statue_of_liberty.png b/app/assets/images/emoji/statue_of_liberty.png
new file mode 100755
index 00000000000..9ad90280689
--- /dev/null
+++ b/app/assets/images/emoji/statue_of_liberty.png
Binary files differ
diff --git a/app/assets/images/emoji/steam_locomotive.png b/app/assets/images/emoji/steam_locomotive.png
new file mode 100755
index 00000000000..5495077667b
--- /dev/null
+++ b/app/assets/images/emoji/steam_locomotive.png
Binary files differ
diff --git a/app/assets/images/emoji/stew.png b/app/assets/images/emoji/stew.png
new file mode 100755
index 00000000000..e9687f9ec26
--- /dev/null
+++ b/app/assets/images/emoji/stew.png
Binary files differ
diff --git a/app/assets/images/emoji/straight_ruler.png b/app/assets/images/emoji/straight_ruler.png
new file mode 100755
index 00000000000..af8cb4bcffa
--- /dev/null
+++ b/app/assets/images/emoji/straight_ruler.png
Binary files differ
diff --git a/app/assets/images/emoji/strawberry.png b/app/assets/images/emoji/strawberry.png
new file mode 100755
index 00000000000..13eb827ab87
--- /dev/null
+++ b/app/assets/images/emoji/strawberry.png
Binary files differ
diff --git a/app/assets/images/emoji/sun_with_face.png b/app/assets/images/emoji/sun_with_face.png
new file mode 100755
index 00000000000..ee276636fa4
--- /dev/null
+++ b/app/assets/images/emoji/sun_with_face.png
Binary files differ
diff --git a/app/assets/images/emoji/sunflower.png b/app/assets/images/emoji/sunflower.png
new file mode 100755
index 00000000000..d9bad194a21
--- /dev/null
+++ b/app/assets/images/emoji/sunflower.png
Binary files differ
diff --git a/app/assets/images/emoji/sunglasses.png b/app/assets/images/emoji/sunglasses.png
new file mode 100755
index 00000000000..1c468a1c91e
--- /dev/null
+++ b/app/assets/images/emoji/sunglasses.png
Binary files differ
diff --git a/app/assets/images/emoji/sunny.png b/app/assets/images/emoji/sunny.png
new file mode 100755
index 00000000000..d23c095e080
--- /dev/null
+++ b/app/assets/images/emoji/sunny.png
Binary files differ
diff --git a/app/assets/images/emoji/sunrise.png b/app/assets/images/emoji/sunrise.png
new file mode 100755
index 00000000000..ec58dcc94ff
--- /dev/null
+++ b/app/assets/images/emoji/sunrise.png
Binary files differ
diff --git a/app/assets/images/emoji/sunrise_over_mountains.png b/app/assets/images/emoji/sunrise_over_mountains.png
new file mode 100755
index 00000000000..ebc3db14680
--- /dev/null
+++ b/app/assets/images/emoji/sunrise_over_mountains.png
Binary files differ
diff --git a/app/assets/images/emoji/surfer.png b/app/assets/images/emoji/surfer.png
new file mode 100755
index 00000000000..b067e8cb323
--- /dev/null
+++ b/app/assets/images/emoji/surfer.png
Binary files differ
diff --git a/app/assets/images/emoji/sushi.png b/app/assets/images/emoji/sushi.png
new file mode 100755
index 00000000000..0d179bd9756
--- /dev/null
+++ b/app/assets/images/emoji/sushi.png
Binary files differ
diff --git a/app/assets/images/emoji/suspect.png b/app/assets/images/emoji/suspect.png
new file mode 100755
index 00000000000..58e8921c0a7
--- /dev/null
+++ b/app/assets/images/emoji/suspect.png
Binary files differ
diff --git a/app/assets/images/emoji/suspension_railway.png b/app/assets/images/emoji/suspension_railway.png
new file mode 100755
index 00000000000..aaa45f61f1f
--- /dev/null
+++ b/app/assets/images/emoji/suspension_railway.png
Binary files differ
diff --git a/app/assets/images/emoji/sweat.png b/app/assets/images/emoji/sweat.png
new file mode 100755
index 00000000000..e894b769960
--- /dev/null
+++ b/app/assets/images/emoji/sweat.png
Binary files differ
diff --git a/app/assets/images/emoji/sweat_drops.png b/app/assets/images/emoji/sweat_drops.png
new file mode 100755
index 00000000000..a83b3e960cd
--- /dev/null
+++ b/app/assets/images/emoji/sweat_drops.png
Binary files differ
diff --git a/app/assets/images/emoji/sweat_smile.png b/app/assets/images/emoji/sweat_smile.png
new file mode 100755
index 00000000000..3903f717f31
--- /dev/null
+++ b/app/assets/images/emoji/sweat_smile.png
Binary files differ
diff --git a/app/assets/images/emoji/sweet_potato.png b/app/assets/images/emoji/sweet_potato.png
new file mode 100755
index 00000000000..32117fa9c7f
--- /dev/null
+++ b/app/assets/images/emoji/sweet_potato.png
Binary files differ
diff --git a/app/assets/images/emoji/swimmer.png b/app/assets/images/emoji/swimmer.png
new file mode 100755
index 00000000000..d3878a06525
--- /dev/null
+++ b/app/assets/images/emoji/swimmer.png
Binary files differ
diff --git a/app/assets/images/emoji/symbols.png b/app/assets/images/emoji/symbols.png
new file mode 100755
index 00000000000..16bc1da921f
--- /dev/null
+++ b/app/assets/images/emoji/symbols.png
Binary files differ
diff --git a/app/assets/images/emoji/syringe.png b/app/assets/images/emoji/syringe.png
new file mode 100755
index 00000000000..7314255e3ca
--- /dev/null
+++ b/app/assets/images/emoji/syringe.png
Binary files differ
diff --git a/app/assets/images/emoji/tada.png b/app/assets/images/emoji/tada.png
new file mode 100755
index 00000000000..7411b5266a0
--- /dev/null
+++ b/app/assets/images/emoji/tada.png
Binary files differ
diff --git a/app/assets/images/emoji/tanabata_tree.png b/app/assets/images/emoji/tanabata_tree.png
new file mode 100755
index 00000000000..473346410f6
--- /dev/null
+++ b/app/assets/images/emoji/tanabata_tree.png
Binary files differ
diff --git a/app/assets/images/emoji/tangerine.png b/app/assets/images/emoji/tangerine.png
new file mode 100755
index 00000000000..fc9d4f82ad9
--- /dev/null
+++ b/app/assets/images/emoji/tangerine.png
Binary files differ
diff --git a/app/assets/images/emoji/taurus.png b/app/assets/images/emoji/taurus.png
new file mode 100755
index 00000000000..6af582f69d2
--- /dev/null
+++ b/app/assets/images/emoji/taurus.png
Binary files differ
diff --git a/app/assets/images/emoji/taxi.png b/app/assets/images/emoji/taxi.png
new file mode 100755
index 00000000000..60a50d365a4
--- /dev/null
+++ b/app/assets/images/emoji/taxi.png
Binary files differ
diff --git a/app/assets/images/emoji/tea.png b/app/assets/images/emoji/tea.png
new file mode 100755
index 00000000000..3ece0b708af
--- /dev/null
+++ b/app/assets/images/emoji/tea.png
Binary files differ
diff --git a/app/assets/images/emoji/telephone.png b/app/assets/images/emoji/telephone.png
new file mode 100755
index 00000000000..87d2559b552
--- /dev/null
+++ b/app/assets/images/emoji/telephone.png
Binary files differ
diff --git a/app/assets/images/emoji/telephone_receiver.png b/app/assets/images/emoji/telephone_receiver.png
new file mode 100755
index 00000000000..36e21e0123d
--- /dev/null
+++ b/app/assets/images/emoji/telephone_receiver.png
Binary files differ
diff --git a/app/assets/images/emoji/telescope.png b/app/assets/images/emoji/telescope.png
new file mode 100755
index 00000000000..51fd8a07fae
--- /dev/null
+++ b/app/assets/images/emoji/telescope.png
Binary files differ
diff --git a/app/assets/images/emoji/tennis.png b/app/assets/images/emoji/tennis.png
new file mode 100755
index 00000000000..278d904ee20
--- /dev/null
+++ b/app/assets/images/emoji/tennis.png
Binary files differ
diff --git a/app/assets/images/emoji/tent.png b/app/assets/images/emoji/tent.png
new file mode 100755
index 00000000000..5c0d20e48b6
--- /dev/null
+++ b/app/assets/images/emoji/tent.png
Binary files differ
diff --git a/app/assets/images/emoji/thought_balloon.png b/app/assets/images/emoji/thought_balloon.png
new file mode 100755
index 00000000000..701bdf0f64b
--- /dev/null
+++ b/app/assets/images/emoji/thought_balloon.png
Binary files differ
diff --git a/app/assets/images/emoji/three.png b/app/assets/images/emoji/three.png
new file mode 100755
index 00000000000..55644c9900c
--- /dev/null
+++ b/app/assets/images/emoji/three.png
Binary files differ
diff --git a/app/assets/images/emoji/thumbsdown.png b/app/assets/images/emoji/thumbsdown.png
new file mode 100755
index 00000000000..41c6b825d6a
--- /dev/null
+++ b/app/assets/images/emoji/thumbsdown.png
Binary files differ
diff --git a/app/assets/images/emoji/thumbsup.png b/app/assets/images/emoji/thumbsup.png
new file mode 100755
index 00000000000..81786c1d8f5
--- /dev/null
+++ b/app/assets/images/emoji/thumbsup.png
Binary files differ
diff --git a/app/assets/images/emoji/ticket.png b/app/assets/images/emoji/ticket.png
new file mode 100755
index 00000000000..cdacf1a70be
--- /dev/null
+++ b/app/assets/images/emoji/ticket.png
Binary files differ
diff --git a/app/assets/images/emoji/tiger.png b/app/assets/images/emoji/tiger.png
new file mode 100755
index 00000000000..d6cc84a3ba9
--- /dev/null
+++ b/app/assets/images/emoji/tiger.png
Binary files differ
diff --git a/app/assets/images/emoji/tiger2.png b/app/assets/images/emoji/tiger2.png
new file mode 100755
index 00000000000..b0c7d8dc3ec
--- /dev/null
+++ b/app/assets/images/emoji/tiger2.png
Binary files differ
diff --git a/app/assets/images/emoji/tired_face.png b/app/assets/images/emoji/tired_face.png
new file mode 100755
index 00000000000..3a8eefe565d
--- /dev/null
+++ b/app/assets/images/emoji/tired_face.png
Binary files differ
diff --git a/app/assets/images/emoji/tm.png b/app/assets/images/emoji/tm.png
new file mode 100755
index 00000000000..c7dec75a33a
--- /dev/null
+++ b/app/assets/images/emoji/tm.png
Binary files differ
diff --git a/app/assets/images/emoji/toilet.png b/app/assets/images/emoji/toilet.png
new file mode 100755
index 00000000000..e5cc4119a15
--- /dev/null
+++ b/app/assets/images/emoji/toilet.png
Binary files differ
diff --git a/app/assets/images/emoji/tokyo_tower.png b/app/assets/images/emoji/tokyo_tower.png
new file mode 100755
index 00000000000..e1cbd7a3c5d
--- /dev/null
+++ b/app/assets/images/emoji/tokyo_tower.png
Binary files differ
diff --git a/app/assets/images/emoji/tomato.png b/app/assets/images/emoji/tomato.png
new file mode 100755
index 00000000000..a129700bbb5
--- /dev/null
+++ b/app/assets/images/emoji/tomato.png
Binary files differ
diff --git a/app/assets/images/emoji/tongue.png b/app/assets/images/emoji/tongue.png
new file mode 100755
index 00000000000..333716ee1fe
--- /dev/null
+++ b/app/assets/images/emoji/tongue.png
Binary files differ
diff --git a/app/assets/images/emoji/tongue2.png b/app/assets/images/emoji/tongue2.png
new file mode 100755
index 00000000000..b0bab12078f
--- /dev/null
+++ b/app/assets/images/emoji/tongue2.png
Binary files differ
diff --git a/app/assets/images/emoji/top.png b/app/assets/images/emoji/top.png
new file mode 100755
index 00000000000..5aa4dd442da
--- /dev/null
+++ b/app/assets/images/emoji/top.png
Binary files differ
diff --git a/app/assets/images/emoji/tophat.png b/app/assets/images/emoji/tophat.png
new file mode 100755
index 00000000000..7d27134d6a5
--- /dev/null
+++ b/app/assets/images/emoji/tophat.png
Binary files differ
diff --git a/app/assets/images/emoji/tractor.png b/app/assets/images/emoji/tractor.png
new file mode 100755
index 00000000000..058fd3eda55
--- /dev/null
+++ b/app/assets/images/emoji/tractor.png
Binary files differ
diff --git a/app/assets/images/emoji/traffic_light.png b/app/assets/images/emoji/traffic_light.png
new file mode 100755
index 00000000000..50c781016cc
--- /dev/null
+++ b/app/assets/images/emoji/traffic_light.png
Binary files differ
diff --git a/app/assets/images/emoji/train.png b/app/assets/images/emoji/train.png
new file mode 100755
index 00000000000..3202d80ea9f
--- /dev/null
+++ b/app/assets/images/emoji/train.png
Binary files differ
diff --git a/app/assets/images/emoji/train2.png b/app/assets/images/emoji/train2.png
new file mode 100755
index 00000000000..9c0d3ab6407
--- /dev/null
+++ b/app/assets/images/emoji/train2.png
Binary files differ
diff --git a/app/assets/images/emoji/tram.png b/app/assets/images/emoji/tram.png
new file mode 100755
index 00000000000..5eb29fb71cd
--- /dev/null
+++ b/app/assets/images/emoji/tram.png
Binary files differ
diff --git a/app/assets/images/emoji/triangular_flag_on_post.png b/app/assets/images/emoji/triangular_flag_on_post.png
new file mode 100755
index 00000000000..f9a3f32d711
--- /dev/null
+++ b/app/assets/images/emoji/triangular_flag_on_post.png
Binary files differ
diff --git a/app/assets/images/emoji/triangular_ruler.png b/app/assets/images/emoji/triangular_ruler.png
new file mode 100755
index 00000000000..383677cb74c
--- /dev/null
+++ b/app/assets/images/emoji/triangular_ruler.png
Binary files differ
diff --git a/app/assets/images/emoji/trident.png b/app/assets/images/emoji/trident.png
new file mode 100755
index 00000000000..d79a7b4cce5
--- /dev/null
+++ b/app/assets/images/emoji/trident.png
Binary files differ
diff --git a/app/assets/images/emoji/triumph.png b/app/assets/images/emoji/triumph.png
new file mode 100755
index 00000000000..92f93bd1025
--- /dev/null
+++ b/app/assets/images/emoji/triumph.png
Binary files differ
diff --git a/app/assets/images/emoji/trolleybus.png b/app/assets/images/emoji/trolleybus.png
new file mode 100755
index 00000000000..b9740a53f87
--- /dev/null
+++ b/app/assets/images/emoji/trolleybus.png
Binary files differ
diff --git a/app/assets/images/emoji/trollface.png b/app/assets/images/emoji/trollface.png
new file mode 100755
index 00000000000..e234893cef0
--- /dev/null
+++ b/app/assets/images/emoji/trollface.png
Binary files differ
diff --git a/app/assets/images/emoji/trophy.png b/app/assets/images/emoji/trophy.png
new file mode 100755
index 00000000000..95d3b63f524
--- /dev/null
+++ b/app/assets/images/emoji/trophy.png
Binary files differ
diff --git a/app/assets/images/emoji/tropical_drink.png b/app/assets/images/emoji/tropical_drink.png
new file mode 100755
index 00000000000..55ca9eeda75
--- /dev/null
+++ b/app/assets/images/emoji/tropical_drink.png
Binary files differ
diff --git a/app/assets/images/emoji/tropical_fish.png b/app/assets/images/emoji/tropical_fish.png
new file mode 100755
index 00000000000..a6d734987bb
--- /dev/null
+++ b/app/assets/images/emoji/tropical_fish.png
Binary files differ
diff --git a/app/assets/images/emoji/truck.png b/app/assets/images/emoji/truck.png
new file mode 100755
index 00000000000..3f25ba1f92a
--- /dev/null
+++ b/app/assets/images/emoji/truck.png
Binary files differ
diff --git a/app/assets/images/emoji/trumpet.png b/app/assets/images/emoji/trumpet.png
new file mode 100755
index 00000000000..c84cfb13e10
--- /dev/null
+++ b/app/assets/images/emoji/trumpet.png
Binary files differ
diff --git a/app/assets/images/emoji/tshirt.png b/app/assets/images/emoji/tshirt.png
new file mode 100755
index 00000000000..297a6d63ed3
--- /dev/null
+++ b/app/assets/images/emoji/tshirt.png
Binary files differ
diff --git a/app/assets/images/emoji/tulip.png b/app/assets/images/emoji/tulip.png
new file mode 100755
index 00000000000..b3ee1102a53
--- /dev/null
+++ b/app/assets/images/emoji/tulip.png
Binary files differ
diff --git a/app/assets/images/emoji/turtle.png b/app/assets/images/emoji/turtle.png
new file mode 100755
index 00000000000..04d1d968470
--- /dev/null
+++ b/app/assets/images/emoji/turtle.png
Binary files differ
diff --git a/app/assets/images/emoji/tv.png b/app/assets/images/emoji/tv.png
new file mode 100755
index 00000000000..803dc3d412f
--- /dev/null
+++ b/app/assets/images/emoji/tv.png
Binary files differ
diff --git a/app/assets/images/emoji/twisted_rightwards_arrows.png b/app/assets/images/emoji/twisted_rightwards_arrows.png
new file mode 100755
index 00000000000..25cde18b250
--- /dev/null
+++ b/app/assets/images/emoji/twisted_rightwards_arrows.png
Binary files differ
diff --git a/app/assets/images/emoji/two.png b/app/assets/images/emoji/two.png
new file mode 100755
index 00000000000..c191f8a3221
--- /dev/null
+++ b/app/assets/images/emoji/two.png
Binary files differ
diff --git a/app/assets/images/emoji/two_hearts.png b/app/assets/images/emoji/two_hearts.png
new file mode 100755
index 00000000000..b189e9aea82
--- /dev/null
+++ b/app/assets/images/emoji/two_hearts.png
Binary files differ
diff --git a/app/assets/images/emoji/two_men_holding_hands.png b/app/assets/images/emoji/two_men_holding_hands.png
new file mode 100755
index 00000000000..d1099f21ffe
--- /dev/null
+++ b/app/assets/images/emoji/two_men_holding_hands.png
Binary files differ
diff --git a/app/assets/images/emoji/two_women_holding_hands.png b/app/assets/images/emoji/two_women_holding_hands.png
new file mode 100755
index 00000000000..619646c4e02
--- /dev/null
+++ b/app/assets/images/emoji/two_women_holding_hands.png
Binary files differ
diff --git a/app/assets/images/emoji/u5272.png b/app/assets/images/emoji/u5272.png
new file mode 100755
index 00000000000..2148253fc10
--- /dev/null
+++ b/app/assets/images/emoji/u5272.png
Binary files differ
diff --git a/app/assets/images/emoji/u5408.png b/app/assets/images/emoji/u5408.png
new file mode 100755
index 00000000000..03ab0d8746e
--- /dev/null
+++ b/app/assets/images/emoji/u5408.png
Binary files differ
diff --git a/app/assets/images/emoji/u55b6.png b/app/assets/images/emoji/u55b6.png
new file mode 100755
index 00000000000..ba946d3f339
--- /dev/null
+++ b/app/assets/images/emoji/u55b6.png
Binary files differ
diff --git a/app/assets/images/emoji/u6307.png b/app/assets/images/emoji/u6307.png
new file mode 100755
index 00000000000..6557f5672fb
--- /dev/null
+++ b/app/assets/images/emoji/u6307.png
Binary files differ
diff --git a/app/assets/images/emoji/u6708.png b/app/assets/images/emoji/u6708.png
new file mode 100755
index 00000000000..e4dfe5aa762
--- /dev/null
+++ b/app/assets/images/emoji/u6708.png
Binary files differ
diff --git a/app/assets/images/emoji/u6709.png b/app/assets/images/emoji/u6709.png
new file mode 100755
index 00000000000..cd8fb3f62a5
--- /dev/null
+++ b/app/assets/images/emoji/u6709.png
Binary files differ
diff --git a/app/assets/images/emoji/u6e80.png b/app/assets/images/emoji/u6e80.png
new file mode 100755
index 00000000000..5df1cb878f7
--- /dev/null
+++ b/app/assets/images/emoji/u6e80.png
Binary files differ
diff --git a/app/assets/images/emoji/u7121.png b/app/assets/images/emoji/u7121.png
new file mode 100755
index 00000000000..25f694ed3ff
--- /dev/null
+++ b/app/assets/images/emoji/u7121.png
Binary files differ
diff --git a/app/assets/images/emoji/u7533.png b/app/assets/images/emoji/u7533.png
new file mode 100755
index 00000000000..fc4a9901b46
--- /dev/null
+++ b/app/assets/images/emoji/u7533.png
Binary files differ
diff --git a/app/assets/images/emoji/u7981.png b/app/assets/images/emoji/u7981.png
new file mode 100755
index 00000000000..f550a573da7
--- /dev/null
+++ b/app/assets/images/emoji/u7981.png
Binary files differ
diff --git a/app/assets/images/emoji/u7a7a.png b/app/assets/images/emoji/u7a7a.png
new file mode 100755
index 00000000000..c05f5cff73b
--- /dev/null
+++ b/app/assets/images/emoji/u7a7a.png
Binary files differ
diff --git a/app/assets/images/emoji/uk.png b/app/assets/images/emoji/uk.png
new file mode 100755
index 00000000000..2a62c7a0810
--- /dev/null
+++ b/app/assets/images/emoji/uk.png
Binary files differ
diff --git a/app/assets/images/emoji/umbrella.png b/app/assets/images/emoji/umbrella.png
new file mode 100755
index 00000000000..1db722fa661
--- /dev/null
+++ b/app/assets/images/emoji/umbrella.png
Binary files differ
diff --git a/app/assets/images/emoji/unamused.png b/app/assets/images/emoji/unamused.png
new file mode 100755
index 00000000000..3722e6f5753
--- /dev/null
+++ b/app/assets/images/emoji/unamused.png
Binary files differ
diff --git a/app/assets/images/emoji/underage.png b/app/assets/images/emoji/underage.png
new file mode 100755
index 00000000000..a789b3c6200
--- /dev/null
+++ b/app/assets/images/emoji/underage.png
Binary files differ
diff --git a/app/assets/images/emoji/unlock.png b/app/assets/images/emoji/unlock.png
new file mode 100755
index 00000000000..22b429cd021
--- /dev/null
+++ b/app/assets/images/emoji/unlock.png
Binary files differ
diff --git a/app/assets/images/emoji/up.png b/app/assets/images/emoji/up.png
new file mode 100755
index 00000000000..829219a868a
--- /dev/null
+++ b/app/assets/images/emoji/up.png
Binary files differ
diff --git a/app/assets/images/emoji/us.png b/app/assets/images/emoji/us.png
new file mode 100755
index 00000000000..38137669aa9
--- /dev/null
+++ b/app/assets/images/emoji/us.png
Binary files differ
diff --git a/app/assets/images/emoji/v.png b/app/assets/images/emoji/v.png
new file mode 100755
index 00000000000..f61267c281d
--- /dev/null
+++ b/app/assets/images/emoji/v.png
Binary files differ
diff --git a/app/assets/images/emoji/vertical_traffic_light.png b/app/assets/images/emoji/vertical_traffic_light.png
new file mode 100755
index 00000000000..7a5ba35f09d
--- /dev/null
+++ b/app/assets/images/emoji/vertical_traffic_light.png
Binary files differ
diff --git a/app/assets/images/emoji/vhs.png b/app/assets/images/emoji/vhs.png
new file mode 100755
index 00000000000..881081c1778
--- /dev/null
+++ b/app/assets/images/emoji/vhs.png
Binary files differ
diff --git a/app/assets/images/emoji/vibration_mode.png b/app/assets/images/emoji/vibration_mode.png
new file mode 100755
index 00000000000..a716e96c635
--- /dev/null
+++ b/app/assets/images/emoji/vibration_mode.png
Binary files differ
diff --git a/app/assets/images/emoji/video_camera.png b/app/assets/images/emoji/video_camera.png
new file mode 100755
index 00000000000..274cecdd6d4
--- /dev/null
+++ b/app/assets/images/emoji/video_camera.png
Binary files differ
diff --git a/app/assets/images/emoji/video_game.png b/app/assets/images/emoji/video_game.png
new file mode 100755
index 00000000000..59d45baeabb
--- /dev/null
+++ b/app/assets/images/emoji/video_game.png
Binary files differ
diff --git a/app/assets/images/emoji/violin.png b/app/assets/images/emoji/violin.png
new file mode 100755
index 00000000000..0dba5ba2b66
--- /dev/null
+++ b/app/assets/images/emoji/violin.png
Binary files differ
diff --git a/app/assets/images/emoji/virgo.png b/app/assets/images/emoji/virgo.png
new file mode 100755
index 00000000000..72e1763f573
--- /dev/null
+++ b/app/assets/images/emoji/virgo.png
Binary files differ
diff --git a/app/assets/images/emoji/volcano.png b/app/assets/images/emoji/volcano.png
new file mode 100755
index 00000000000..9b434539b05
--- /dev/null
+++ b/app/assets/images/emoji/volcano.png
Binary files differ
diff --git a/app/assets/images/emoji/vs.png b/app/assets/images/emoji/vs.png
new file mode 100755
index 00000000000..863638850e1
--- /dev/null
+++ b/app/assets/images/emoji/vs.png
Binary files differ
diff --git a/app/assets/images/emoji/walking.png b/app/assets/images/emoji/walking.png
new file mode 100755
index 00000000000..52bc0381c72
--- /dev/null
+++ b/app/assets/images/emoji/walking.png
Binary files differ
diff --git a/app/assets/images/emoji/waning_crescent_moon.png b/app/assets/images/emoji/waning_crescent_moon.png
new file mode 100755
index 00000000000..30387780fec
--- /dev/null
+++ b/app/assets/images/emoji/waning_crescent_moon.png
Binary files differ
diff --git a/app/assets/images/emoji/waning_gibbous_moon.png b/app/assets/images/emoji/waning_gibbous_moon.png
new file mode 100755
index 00000000000..8e324ec5f7f
--- /dev/null
+++ b/app/assets/images/emoji/waning_gibbous_moon.png
Binary files differ
diff --git a/app/assets/images/emoji/warning.png b/app/assets/images/emoji/warning.png
new file mode 100755
index 00000000000..466658d99a8
--- /dev/null
+++ b/app/assets/images/emoji/warning.png
Binary files differ
diff --git a/app/assets/images/emoji/watch.png b/app/assets/images/emoji/watch.png
new file mode 100755
index 00000000000..d503bb87c22
--- /dev/null
+++ b/app/assets/images/emoji/watch.png
Binary files differ
diff --git a/app/assets/images/emoji/water_buffalo.png b/app/assets/images/emoji/water_buffalo.png
new file mode 100755
index 00000000000..3bcde3edd95
--- /dev/null
+++ b/app/assets/images/emoji/water_buffalo.png
Binary files differ
diff --git a/app/assets/images/emoji/watermelon.png b/app/assets/images/emoji/watermelon.png
new file mode 100755
index 00000000000..fc212be7844
--- /dev/null
+++ b/app/assets/images/emoji/watermelon.png
Binary files differ
diff --git a/app/assets/images/emoji/wave.png b/app/assets/images/emoji/wave.png
new file mode 100755
index 00000000000..e78402eb086
--- /dev/null
+++ b/app/assets/images/emoji/wave.png
Binary files differ
diff --git a/app/assets/images/emoji/wavy_dash.png b/app/assets/images/emoji/wavy_dash.png
new file mode 100755
index 00000000000..77f626cc5cd
--- /dev/null
+++ b/app/assets/images/emoji/wavy_dash.png
Binary files differ
diff --git a/app/assets/images/emoji/waxing_crescent_moon.png b/app/assets/images/emoji/waxing_crescent_moon.png
new file mode 100755
index 00000000000..c8f13dd31c8
--- /dev/null
+++ b/app/assets/images/emoji/waxing_crescent_moon.png
Binary files differ
diff --git a/app/assets/images/emoji/waxing_gibbous_moon.png b/app/assets/images/emoji/waxing_gibbous_moon.png
new file mode 100755
index 00000000000..dd8c4845896
--- /dev/null
+++ b/app/assets/images/emoji/waxing_gibbous_moon.png
Binary files differ
diff --git a/app/assets/images/emoji/wc.png b/app/assets/images/emoji/wc.png
new file mode 100755
index 00000000000..dfe84d2a73a
--- /dev/null
+++ b/app/assets/images/emoji/wc.png
Binary files differ
diff --git a/app/assets/images/emoji/weary.png b/app/assets/images/emoji/weary.png
new file mode 100755
index 00000000000..0c5475411c1
--- /dev/null
+++ b/app/assets/images/emoji/weary.png
Binary files differ
diff --git a/app/assets/images/emoji/wedding.png b/app/assets/images/emoji/wedding.png
new file mode 100755
index 00000000000..ead19d52cfb
--- /dev/null
+++ b/app/assets/images/emoji/wedding.png
Binary files differ
diff --git a/app/assets/images/emoji/whale.png b/app/assets/images/emoji/whale.png
new file mode 100755
index 00000000000..5bb113e4289
--- /dev/null
+++ b/app/assets/images/emoji/whale.png
Binary files differ
diff --git a/app/assets/images/emoji/whale2.png b/app/assets/images/emoji/whale2.png
new file mode 100755
index 00000000000..4af657b2fdc
--- /dev/null
+++ b/app/assets/images/emoji/whale2.png
Binary files differ
diff --git a/app/assets/images/emoji/wheelchair.png b/app/assets/images/emoji/wheelchair.png
new file mode 100755
index 00000000000..eddcdd7977a
--- /dev/null
+++ b/app/assets/images/emoji/wheelchair.png
Binary files differ
diff --git a/app/assets/images/emoji/white_circle.png b/app/assets/images/emoji/white_circle.png
new file mode 100755
index 00000000000..da782ae297f
--- /dev/null
+++ b/app/assets/images/emoji/white_circle.png
Binary files differ
diff --git a/app/assets/images/emoji/white_flower.png b/app/assets/images/emoji/white_flower.png
new file mode 100755
index 00000000000..c0929d0dd99
--- /dev/null
+++ b/app/assets/images/emoji/white_flower.png
Binary files differ
diff --git a/app/assets/images/emoji/white_square.png b/app/assets/images/emoji/white_square.png
new file mode 100755
index 00000000000..60cb19a1371
--- /dev/null
+++ b/app/assets/images/emoji/white_square.png
Binary files differ
diff --git a/app/assets/images/emoji/wind_chime.png b/app/assets/images/emoji/wind_chime.png
new file mode 100755
index 00000000000..efacf5dd4be
--- /dev/null
+++ b/app/assets/images/emoji/wind_chime.png
Binary files differ
diff --git a/app/assets/images/emoji/wine_glass.png b/app/assets/images/emoji/wine_glass.png
new file mode 100755
index 00000000000..82b0f00057d
--- /dev/null
+++ b/app/assets/images/emoji/wine_glass.png
Binary files differ
diff --git a/app/assets/images/emoji/wink.png b/app/assets/images/emoji/wink.png
new file mode 100755
index 00000000000..756766dd3e9
--- /dev/null
+++ b/app/assets/images/emoji/wink.png
Binary files differ
diff --git a/app/assets/images/emoji/wink2.png b/app/assets/images/emoji/wink2.png
new file mode 100755
index 00000000000..6ae9d497d30
--- /dev/null
+++ b/app/assets/images/emoji/wink2.png
Binary files differ
diff --git a/app/assets/images/emoji/wolf.png b/app/assets/images/emoji/wolf.png
new file mode 100755
index 00000000000..c60c96895f7
--- /dev/null
+++ b/app/assets/images/emoji/wolf.png
Binary files differ
diff --git a/app/assets/images/emoji/woman.png b/app/assets/images/emoji/woman.png
new file mode 100755
index 00000000000..6bf0d2b129c
--- /dev/null
+++ b/app/assets/images/emoji/woman.png
Binary files differ
diff --git a/app/assets/images/emoji/womans_clothes.png b/app/assets/images/emoji/womans_clothes.png
new file mode 100755
index 00000000000..aa297c7b65e
--- /dev/null
+++ b/app/assets/images/emoji/womans_clothes.png
Binary files differ
diff --git a/app/assets/images/emoji/womans_hat.png b/app/assets/images/emoji/womans_hat.png
new file mode 100755
index 00000000000..4cb2e6a6934
--- /dev/null
+++ b/app/assets/images/emoji/womans_hat.png
Binary files differ
diff --git a/app/assets/images/emoji/womens.png b/app/assets/images/emoji/womens.png
new file mode 100755
index 00000000000..110f88519e8
--- /dev/null
+++ b/app/assets/images/emoji/womens.png
Binary files differ
diff --git a/app/assets/images/emoji/wrench.png b/app/assets/images/emoji/wrench.png
new file mode 100755
index 00000000000..a87072ad132
--- /dev/null
+++ b/app/assets/images/emoji/wrench.png
Binary files differ
diff --git a/app/assets/images/emoji/x.png b/app/assets/images/emoji/x.png
new file mode 100755
index 00000000000..dff9efa8b43
--- /dev/null
+++ b/app/assets/images/emoji/x.png
Binary files differ
diff --git a/app/assets/images/emoji/yellow_heart.png b/app/assets/images/emoji/yellow_heart.png
new file mode 100755
index 00000000000..fa41ce78ac4
--- /dev/null
+++ b/app/assets/images/emoji/yellow_heart.png
Binary files differ
diff --git a/app/assets/images/emoji/yen.png b/app/assets/images/emoji/yen.png
new file mode 100755
index 00000000000..139bc936e0f
--- /dev/null
+++ b/app/assets/images/emoji/yen.png
Binary files differ
diff --git a/app/assets/images/emoji/yum.png b/app/assets/images/emoji/yum.png
new file mode 100755
index 00000000000..fc39637ecd8
--- /dev/null
+++ b/app/assets/images/emoji/yum.png
Binary files differ
diff --git a/app/assets/images/emoji/zap.png b/app/assets/images/emoji/zap.png
new file mode 100755
index 00000000000..260c531b9e2
--- /dev/null
+++ b/app/assets/images/emoji/zap.png
Binary files differ
diff --git a/app/assets/images/emoji/zero.png b/app/assets/images/emoji/zero.png
new file mode 100755
index 00000000000..6e57b3343ad
--- /dev/null
+++ b/app/assets/images/emoji/zero.png
Binary files differ
diff --git a/app/assets/images/emoji/zzz.png b/app/assets/images/emoji/zzz.png
new file mode 100755
index 00000000000..30be04655af
--- /dev/null
+++ b/app/assets/images/emoji/zzz.png
Binary files differ
diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js
deleted file mode 100644
index bb0a499a607..00000000000
--- a/app/assets/javascripts/admin.js
+++ /dev/null
@@ -1,11 +0,0 @@
-$(document).ready(function(){
- $('input#user_force_random_password').on('change', function(elem) {
- var elems = $('#user_password, #user_password_confirmation');
-
- if ($(this).attr('checked')) {
- elems.val('').attr('disabled', true);
- } else {
- elems.removeAttr('disabled');
- }
- });
-});
diff --git a/app/assets/javascripts/admin.js.coffee b/app/assets/javascripts/admin.js.coffee
new file mode 100644
index 00000000000..269a7a767ed
--- /dev/null
+++ b/app/assets/javascripts/admin.js.coffee
@@ -0,0 +1,8 @@
+$ ->
+ $('input#user_force_random_password').on 'change', (elem) ->
+ elems = $('#user_password, #user_password_confirmation')
+
+ if $(@).attr 'checked'
+ elems.val('').attr 'disabled', true
+ else
+ elems.removeAttr 'disabled'
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index f69fd6f9a44..4c487ec1d38 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -17,134 +17,3 @@
//= require raphael
//= require branch-graph
//= require_tree .
-
-$(document).ready(function(){
-
- $(".one_click_select").live("click", function(){
- $(this).select();
- });
-
- $('body').on('ajax:complete, ajax:beforeSend, submit', 'form', function(e){
- var buttons = $('[type="submit"]', this);
- switch( e.type ){
- case 'ajax:beforeSend':
- case 'submit':
- buttons.attr('disabled', 'disabled');
- break;
- case ' ajax:complete':
- default:
- buttons.removeAttr('disabled');
- break;
- }
- })
-
- $(".account-box").mouseenter(showMenu);
- $(".account-box").mouseleave(resetMenu);
-
- $("#projects-list .project").live('click', function(e){
- if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") {
- location.href = $(this).attr("url");
- e.stopPropagation();
- return false;
- }
- });
-
- /**
- * Focus search field by pressing 's' key
- */
- $(document).keypress(function(e) {
- if( $(e.target).is(":input") ) return;
- switch(e.which) {
- case 115: focusSearch();
- e.preventDefault();
- }
- });
-
- /**
- * Commit show suppressed diff
- *
- */
- $(".supp_diff_link").bind("click", function() {
- showDiff(this);
- });
-
- /**
- * Note markdown preview
- *
- */
- $(document).on('click', '#preview-link', function(e) {
- $('#preview-note').text('Loading...');
-
- var previewLinkText = ($(this).text() == 'Preview' ? 'Edit' : 'Preview');
- $(this).text(previewLinkText);
-
- var note = $('#note_note').val();
- if (note.trim().length === 0) { note = 'Nothing to preview'; }
- $.post($(this).attr('href'), {note: note}, function(data) {
- $('#preview-note').html(data);
- });
-
- $('#preview-note, #note_note').toggle();
- e.preventDefault();
- });
-});
-
-function focusSearch() {
- $("#search").focus();
-}
-
-function updatePage(data){
- $.ajax({type: "GET", url: location.href, data: data, dataType: "script"});
-}
-
-function showMenu() {
- $(this).toggleClass('hover');
-}
-
-function resetMenu() {
- $(this).removeClass("hover");
-}
-
-function slugify(text) {
- return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase();
-}
-
-function showDiff(link) {
- $(link).next('table').show();
- $(link).remove();
-}
-
-(function($){
- var _chosen = $.fn.chosen;
- $.fn.extend({
- chosen: function(options) {
- var default_options = {'search_contains' : 'true'};
- $.extend(default_options, options);
- return _chosen.apply(this, [default_options]);
- }})
-})(jQuery);
-
-
-function ajaxGet(url) {
- $.ajax({type: "GET", url: url, dataType: "script"});
-}
-
-/**
- * Disable button if text field is empty
- */
-function disableButtonIfEmtpyField(field_selector, button_selector) {
- field = $(field_selector);
- if(field.val() == "") {
- field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled");
- }
-
- field.on('keyup', function(){
- var field = $(this);
- var closest_submit = field.closest("form").find(button_selector);
- if(field.val() == "") {
- closest_submit.attr("disabled", "disabled").addClass("disabled");
- } else {
- closest_submit.removeAttr("disabled").removeClass("disabled");
- }
- })
-}
diff --git a/app/assets/javascripts/graph.js b/app/assets/javascripts/graph.js
deleted file mode 100644
index 434cf70ac65..00000000000
--- a/app/assets/javascripts/graph.js
+++ /dev/null
@@ -1,10 +0,0 @@
-function initGraphNav() {
- $(".graph svg").css("position", "relative");
- $("body").bind("keyup", function(e) {
- if(e.keyCode == 37) { // left
- $(".graph svg").animate({ left: "+=400" });
- } else if(e.keyCode == 39) { // right
- $(".graph svg").animate({ left: "-=400" });
- }
- });
-}
diff --git a/app/assets/javascripts/graph.js.coffee b/app/assets/javascripts/graph.js.coffee
new file mode 100644
index 00000000000..5fe8ae3f020
--- /dev/null
+++ b/app/assets/javascripts/graph.js.coffee
@@ -0,0 +1,10 @@
+initGraphNav = ->
+ $('.graph svg').css 'position', 'relative'
+
+ $('body').bind 'keyup', (e) ->
+ if e.keyCode is 37 # left
+ $('.graph svg').animate left: '+=400'
+ else if e.keyCode is 39 # right
+ $('.graph svg').animate left: '-=400'
+
+window.initGraphNav = initGraphNav
diff --git a/app/assets/javascripts/loader.js b/app/assets/javascripts/loader.js
deleted file mode 100644
index 6fa0b525814..00000000000
--- a/app/assets/javascripts/loader.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var Loader = {
- img_src: "/assets/ajax-loader.gif",
-
- html:
- function(width) {
- img = $("<img>");
- img.attr("width", width);
- img.attr("src", this.img_src);
- return img;
- }
-}
diff --git a/app/assets/javascripts/loader.js.coffee b/app/assets/javascripts/loader.js.coffee
new file mode 100644
index 00000000000..66f8e8b1bb3
--- /dev/null
+++ b/app/assets/javascripts/loader.js.coffee
@@ -0,0 +1,5 @@
+Loader =
+ html: (width) ->
+ $('<img>').attr src: '/assets/ajax-loader.gif', width: width
+
+window.Loader = Loader
diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js
new file mode 100644
index 00000000000..61af1dc3d19
--- /dev/null
+++ b/app/assets/javascripts/main.js
@@ -0,0 +1,130 @@
+$(document).ready(function(){
+
+ $(".one_click_select").live("click", function(){
+ $(this).select();
+ });
+
+ $('body').on('ajax:complete, ajax:beforeSend, submit', 'form', function(e){
+ var buttons = $('[type="submit"]', this);
+ switch( e.type ){
+ case 'ajax:beforeSend':
+ case 'submit':
+ buttons.attr('disabled', 'disabled');
+ break;
+ case ' ajax:complete':
+ default:
+ buttons.removeAttr('disabled');
+ break;
+ }
+ })
+
+ $(".account-box").mouseenter(showMenu);
+ $(".account-box").mouseleave(resetMenu);
+
+ $("#projects-list .project").live('click', function(e){
+ if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") {
+ location.href = $(this).attr("url");
+ e.stopPropagation();
+ return false;
+ }
+ });
+
+ /**
+ * Focus search field by pressing 's' key
+ */
+ $(document).keypress(function(e) {
+ if( $(e.target).is(":input") ) return;
+ switch(e.which) {
+ case 115: focusSearch();
+ e.preventDefault();
+ }
+ });
+
+ /**
+ * Commit show suppressed diff
+ *
+ */
+ $(".supp_diff_link").bind("click", function() {
+ showDiff(this);
+ });
+
+ /**
+ * Note markdown preview
+ *
+ */
+ $(document).on('click', '#preview-link', function(e) {
+ $('#preview-note').text('Loading...');
+
+ var previewLinkText = ($(this).text() == 'Preview' ? 'Edit' : 'Preview');
+ $(this).text(previewLinkText);
+
+ var note = $('#note_note').val();
+ if (note.trim().length === 0) { note = 'Nothing to preview'; }
+ $.post($(this).attr('href'), {note: note}, function(data) {
+ $('#preview-note').html(data);
+ });
+
+ $('#preview-note, #note_note').toggle();
+ e.preventDefault();
+ });
+});
+
+function focusSearch() {
+ $("#search").focus();
+}
+
+function updatePage(data){
+ $.ajax({type: "GET", url: location.href, data: data, dataType: "script"});
+}
+
+function showMenu() {
+ $(this).toggleClass('hover');
+}
+
+function resetMenu() {
+ $(this).removeClass("hover");
+}
+
+function slugify(text) {
+ return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase();
+}
+
+function showDiff(link) {
+ $(link).next('table').show();
+ $(link).remove();
+}
+
+(function($){
+ var _chosen = $.fn.chosen;
+ $.fn.extend({
+ chosen: function(options) {
+ var default_options = {'search_contains' : 'true'};
+ $.extend(default_options, options);
+ return _chosen.apply(this, [default_options]);
+ }})
+})(jQuery);
+
+
+function ajaxGet(url) {
+ $.ajax({type: "GET", url: url, dataType: "script"});
+}
+
+/**
+ * Disable button if text field is empty
+ */
+function disableButtonIfEmtpyField(field_selector, button_selector) {
+ field = $(field_selector);
+ if(field.val() == "") {
+ field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled");
+ }
+
+ field.on('keyup', function(){
+ var field = $(this);
+ var closest_submit = field.closest("form").find(button_selector);
+ if(field.val() == "") {
+ closest_submit.attr("disabled", "disabled").addClass("disabled");
+ } else {
+ closest_submit.removeAttr("disabled").removeClass("disabled");
+ }
+ })
+}
diff --git a/app/assets/javascripts/projects.js b/app/assets/javascripts/projects.js
deleted file mode 100644
index be1b75b90a7..00000000000
--- a/app/assets/javascripts/projects.js
+++ /dev/null
@@ -1,16 +0,0 @@
-function Projects() {
- $("#project_name").live("change", function(){
- var slug = slugify($(this).val());
- $("#project_code").val(slug);
- $("#project_path").val(slug);
- });
-
- $('.new_project, .edit_project').live('ajax:before', function() {
- $('.project_new_holder, .project_edit_holder').hide();
- $('.save-project-loader').show();
- });
-
- $('form #project_default_branch').chosen();
-
- disableButtonIfEmtpyField("#project_name", ".project-submit")
-}
diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee
new file mode 100644
index 00000000000..85ab2a06dff
--- /dev/null
+++ b/app/assets/javascripts/projects.js.coffee
@@ -0,0 +1,20 @@
+window.Projects = ->
+ $('#project_name').on 'change', ->
+ slug = slugify $(@).val()
+ $('#project_code, #project_path').val slug
+
+ $('.new_project, .edit_project').on 'ajax:before', ->
+ $('.project_new_holder, .project_edit_holder').hide()
+ $('.save-project-loader').show()
+
+ $('form #project_default_branch').chosen()
+ disableButtonIfEmtpyField '#project_name', '.project-submit'
+
+# Git clone panel switcher
+$ ->
+ scope = $ '.project_clone_holder'
+ if scope.length > 0
+ $('a, button', scope).click ->
+ $('a, button', scope).removeClass 'active'
+ $(@).addClass 'active'
+ $('#project_clone', scope).val $(@).data 'clone'
diff --git a/app/assets/javascripts/snippets.js b/app/assets/javascripts/snippets.js
deleted file mode 100644
index 11e18eb779e..00000000000
--- a/app/assets/javascripts/snippets.js
+++ /dev/null
@@ -1,9 +0,0 @@
-$(document).ready(function(){
- $("#snippets-table .snippet").live('click', function(e){
- if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") {
- location.href = $(this).attr("url");
- e.stopPropagation();
- return false;
- }
- });
-});
diff --git a/app/assets/javascripts/snippets.js.coffee b/app/assets/javascripts/snippets.js.coffee
new file mode 100644
index 00000000000..af4385deb51
--- /dev/null
+++ b/app/assets/javascripts/snippets.js.coffee
@@ -0,0 +1,6 @@
+$ ->
+ $('#snippets-table .snippet').live 'click', (e) ->
+ if e.target.nodeName isnt 'A' and e.target.nodeName isnt 'INPUT'
+ location.href = $(@).attr 'url'
+ e.stopPropagation()
+ false
diff --git a/app/assets/javascripts/team.js b/app/assets/javascripts/team.js
deleted file mode 100644
index f4b04354f53..00000000000
--- a/app/assets/javascripts/team.js
+++ /dev/null
@@ -1,8 +0,0 @@
-function backToMembers(){
- $("#new_team_member").hide("slide", { direction: "right" }, 150, function(){
- $("#team-table").show("slide", { direction: "left" }, 150, function() {
- $("#new_team_member").remove();
- $(".add_new").show();
- });
- });
-}
diff --git a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss
index 894cb3044fa..70f7889f15c 100644
--- a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss
+++ b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss
@@ -1,6 +1,6 @@
/**
* ===================================
- * Contain 3 main UI block elements:
+ * Contain 3 main UI block elements:
* .main_box - for show pages
* .ui-box - for simple block & widgets
* ===================================
diff --git a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss
index c838f3b2368..380fc3e3711 100644
--- a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss
+++ b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss
@@ -1,8 +1,5 @@
.btn {
- background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #f7f7f7), to(#d5d5d5));
- background-image: -webkit-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
- background-image: -moz-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
- background-image: -o-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
+ @include bg-gradient(#f7f7f7, #d5d5d5);
border-color:#aaa;
&:hover {
@include bg-gray-gradient;
@@ -12,10 +9,8 @@
&.primary {
background:#2a79A3;
+ @include bg-gradient(#47A7b7, #2585b5);
border-color: #2A79A3;
- background-image: -webkit-linear-gradient(#47A7b7 7.6%, #2585b5);
- background-image: -moz-linear-gradient(#47A7b7 7.6%, #2585b5);
- background-image: -o-linear-gradient(#47A7b7 7.6%, #2585b5);
color:#fff;
text-shadow: 0 1px 1px #268;
&:hover {
@@ -30,16 +25,11 @@
}
&.success {
- border-color: #4A4;
- background-image: -webkit-linear-gradient(#82D482 7.6%, #22B442);
- background-image: -moz-linear-gradient(#82D482 7.6%, #22B442);
- background-image: -o-linear-gradient(#82D482 7.6%, #22B442);
- color: #fff;
- text-shadow: 0 1px 1px #141;
+ @extend .btn-success;
&:hover {
- background: #6C6;
- color: #fff;
+ @extend .btn-success;
+ background: #51a351;
}
&.disabled {
@@ -62,10 +52,8 @@
padding-right:30px;
}
- &.danger,
- &.btn-danger {
- color:#fff;
- background: #DA4E49;
+ &.danger {
+ @extend .btn-danger;
border-color: #BD362F;
&:hover {
diff --git a/app/assets/stylesheets/gitlab_bootstrap/files.scss b/app/assets/stylesheets/gitlab_bootstrap/files.scss
index 4ea5ed02ada..d39fdb27cd4 100644
--- a/app/assets/stylesheets/gitlab_bootstrap/files.scss
+++ b/app/assets/stylesheets/gitlab_bootstrap/files.scss
@@ -3,13 +3,13 @@
*
*/
.file_holder {
- border:1px solid #CCC;
+ border:1px solid #BBB;
margin-bottom:1em;
@include solid_shade;
.file_title {
border-bottom: 1px solid #bbb;
- @include bg-gray-gradient;
+ @include bg-dark-gray-gradient;
margin: 0;
font-weight: normal;
font-weight: bold;
diff --git a/app/assets/stylesheets/highlight/white.scss b/app/assets/stylesheets/highlight/white.scss
index a08f05bdb54..9b003b8ace5 100644
--- a/app/assets/stylesheets/highlight/white.scss
+++ b/app/assets/stylesheets/highlight/white.scss
@@ -1,12 +1,21 @@
-table.highlighttable
-{
+table.highlighttable {
margin:0px;
padding:0px;
font-size:12px;
table-layout:fixed;
background: #EEE;
+ box-shadow: none;
+ border: none;
+ td.linenos {
+ background:#eee;
+ border-left:none;
+ }
+ td.code {
+ border-right:none;
+ }
}
+
td.code,
td.linenos{
padding:0;
diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss
index be27d754dfa..80446a4c599 100644
--- a/app/assets/stylesheets/main.scss
+++ b/app/assets/stylesheets/main.scss
@@ -1,13 +1,13 @@
@import "bootstrap";
@import "bootstrap-responsive";
-/** GITLAB colors **/
+/** GitLab colors **/
$link_color:#3A89A3;
$blue_link: #2fa0bb;
$style_color: #474d57;
$hover: #fdf5d9;
-/** GITLAB Fonts **/
+/** GitLab Fonts **/
@font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); }
/** MIXINS **/
@@ -56,6 +56,13 @@ $hover: #fdf5d9;
border-radius: $radius;
}
+@mixin bg-gradient($from, $to) {
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from($from), to($to));
+ background-image: -webkit-linear-gradient($from, $to);
+ background-image: -moz-linear-gradient($from, $to);
+ background-image: -o-linear-gradient($from, $to);
+}
+
@mixin bg-gray-gradient {
background:#eee;
background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));
@@ -106,9 +113,9 @@ $hover: #fdf5d9;
@import "themes/ui_modern.scss";
/**
- * Gitlab bootstrap.
+ * GitLab bootstrap.
* Overrides some styles of twitter bootstrap.
- * Also give some common classes for gitlab app
+ * Also give some common classes for GitLab app
*/
@import "gitlab_bootstrap/common.scss";
@import "gitlab_bootstrap/typography.scss";
diff --git a/app/assets/stylesheets/sections/header.scss b/app/assets/stylesheets/sections/header.scss
index d0fb662e69e..8328a5ab9a7 100644
--- a/app/assets/stylesheets/sections/header.scss
+++ b/app/assets/stylesheets/sections/header.scss
@@ -22,7 +22,7 @@ header {
*
*/
.app_logo {
- width:230px;
+ width:200px;
float:left;
position:relative;
top:-5px;
@@ -31,7 +31,7 @@ header {
h1 {
padding-top: 5px;
- width:102px;
+ width:90px;
background: url('logo_dark.png') no-repeat 0px -3px;
float:left;
margin-left:5px;
diff --git a/app/assets/stylesheets/sections/nav.scss b/app/assets/stylesheets/sections/nav.scss
index 097e819732d..6f6a0e8e29f 100644
--- a/app/assets/stylesheets/sections/nav.scss
+++ b/app/assets/stylesheets/sections/nav.scss
@@ -2,7 +2,7 @@
* Main Menu of Application
*
*/
-ul.main_menu {
+ul.main_menu {
border-radius: 4px;
margin: auto;
margin:30px 0;
@@ -12,7 +12,7 @@ ul.main_menu {
position:relative;
overflow:hidden;
@include shade;
- .count {
+ .count {
position: relative;
top: -1px;
display: inline-block;
@@ -29,12 +29,12 @@ ul.main_menu {
border-radius: 8px;
-moz-border-radius: 8px;
}
- .label {
+ .label {
background:$hover;
text-shadow:none;
color:$style_color;
}
- li {
+ li {
list-style-type: none;
margin: 0;
display: table-cell;
@@ -43,7 +43,7 @@ ul.main_menu {
border-left: 1px solid #EEE;
border-bottom:2px solid #CFCFCF;
- &:first-child{
+ &:first-child{
-webkit-border-top-left-radius: 4px;
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-topleft: 4px;
@@ -53,31 +53,31 @@ ul.main_menu {
border-left: 0;
}
- &.current {
+ &.current {
background-color:#D5D5D5;
- border-bottom: 2px solid $style_color;
+ border-bottom: 1px solid #AAA;
border-right: 1px solid #BBB;
border-left: 1px solid #BBB;
border-radius: 0 0 1px 1px;
- &:first-child{
+ &:first-child{
border-bottom:none;
border-left:none;
}
}
- &.home {
- a {
+ &.home {
+ a {
background: url(home_icon.PNG) no-repeat center center;
text-indent:-9999px;
min-width:20px;
- img {
+ img {
position:relative;
top:4px;
}
}
}
}
- a {
+ a {
display: block;
text-align: center;
font-weight:bold;
diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss
index 721b569d446..92d0fc43c88 100644
--- a/app/assets/stylesheets/sections/projects.scss
+++ b/app/assets/stylesheets/sections/projects.scss
@@ -75,17 +75,21 @@
padding: 4px 7px;
border: 1px solid #CCC;
margin-bottom:5px;
- input[type=text] {
+}
+
+.project_clone_holder {
+ input[type="text"] {
border: 1px solid #BBB;
+ box-shadow: none;
}
}
-.save-project-loader {
- img {
+.save-project-loader {
+ img {
margin-top:50px;
margin-bottom:50px;
}
- h3 {
+ h3 {
@extend .page_title;
}
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9aab250dbd4..7e53b8fe5ff 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -120,22 +120,12 @@ class ApplicationController < ActionController::Base
end
end
- def load_refs
- if params[:ref].blank?
- @branch = params[:branch].blank? ? nil : params[:branch]
- @tag = params[:tag].blank? ? nil : params[:tag]
- @ref = @branch || @tag || @project.try(:default_branch) || Repository.default_ref
- else
- @ref = params[:ref]
- end
- end
-
def render_404
render file: File.join(Rails.root, "public", "404"), layout: false, status: "404"
end
def require_non_empty_project
- redirect_to @project unless @project.repo_exists? && @project.has_commits?
+ redirect_to @project if @project.empty_repo?
end
def no_cache_headers
diff --git a/app/controllers/commits_controller.rb b/app/controllers/commits_controller.rb
index 717912d9e92..4ab40c304dd 100644
--- a/app/controllers/commits_controller.rb
+++ b/app/controllers/commits_controller.rb
@@ -59,12 +59,19 @@ class CommitsController < ApplicationController
def patch
@commit = project.commit(params[:id])
-
+
send_data(
@commit.to_patch,
type: "text/plain",
disposition: 'attachment',
- filename: (@commit.id.to_s + ".patch")
+ filename: "#{@commit.id.patch}"
)
end
+
+ protected
+
+ def load_refs
+ @ref ||= params[:ref].presence || params[:branch].presence || params[:tag].presence
+ @ref ||= @ref || @project.try(:default_branch) || 'master'
+ end
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index bd7f811e59f..170b8892936 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -50,7 +50,7 @@ class ProjectsController < ApplicationController
respond_to do |format|
format.html do
- if @project.repo_exists? && @project.has_commits?
+ unless @project.empty_repo?
@last_push = current_user.recent_push(@project.id)
render :show
else
diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb
index 9da695b5d23..ca2cb01f35d 100644
--- a/app/helpers/gitlab_markdown_helper.rb
+++ b/app/helpers/gitlab_markdown_helper.rb
@@ -1,38 +1,5 @@
module GitlabMarkdownHelper
- # Replaces references (i.e. @abc, #123, !456, ...) in the text with links to
- # the appropriate items in Gitlab.
- #
- # text - the source text
- # html_options - extra options for the reference links as given to link_to
- #
- # note: reference links will only be generated if @project is set
- #
- # see Gitlab::Markdown for details on the supported syntax
- def gfm(text, html_options = {})
- return text if text.nil?
- return text if @project.nil?
-
- # Extract pre blocks so they are not altered
- # from http://github.github.com/github-flavored-markdown/
- extractions = {}
- text.gsub!(%r{<pre>.*?</pre>|<code>.*?</code>}m) do |match|
- md5 = Digest::MD5.hexdigest(match)
- extractions[md5] = match
- "{gfm-extraction-#{md5}}"
- end
-
- # TODO: add popups with additional information
-
- parser = Gitlab::Markdown.new(@project, html_options)
- text = parser.parse(text)
-
- # Insert pre block extractions
- text.gsub!(/\{gfm-extraction-(\h{32})\}/) do
- extractions[$1]
- end
-
- sanitize text.html_safe, attributes: ActionView::Base.sanitized_allowed_attributes + %w(id class )
- end
+ include Gitlab::Markdown
# Use this in places where you would normally use link_to(gfm(...), ...).
#
diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb
index 91136fee95e..0afc1d31ef4 100644
--- a/app/mailers/notify.rb
+++ b/app/mailers/notify.rb
@@ -111,18 +111,18 @@ class Notify < ActionMailer::Base
# Examples
#
# >> subject('Lorem ipsum')
- # => "gitlab | Lorem ipsum"
+ # => "GitLab | Lorem ipsum"
#
# # Automatically inserts Project name when @project is set
# >> @project = Project.last
# => #<Project id: 1, name: "Ruby on Rails", path: "ruby_on_rails", ...>
# >> subject('Lorem ipsum')
- # => "gitlab | Lorem ipsum | Ruby on Rails"
+ # => "GitLab | Lorem ipsum | Ruby on Rails"
#
# # Accepts multiple arguments
# >> subject('Lorem ipsum', 'Dolor sit amet')
- # => "gitlab | Lorem ipsum | Dolor sit amet"
+ # => "GitLab | Lorem ipsum | Dolor sit amet"
def subject(*extra)
- "gitlab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "")
+ "GitLab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "")
end
end
diff --git a/app/models/note.rb b/app/models/note.rb
index 711a4ee6935..d8494edd532 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -103,7 +103,7 @@ class Note < ActiveRecord::Base
# Returns true if this is an upvote note,
# otherwise false is returned
def upvote?
- note =~ /^\+1/ ? true : false
+ note.start_with?('+1') || note.start_with?(':+1:')
end
end
# == Schema Information
diff --git a/app/models/project.rb b/app/models/project.rb
index a7735a42137..4de836c7b48 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -104,6 +104,8 @@ class Project < ActiveRecord::Base
length: { within: 1..255 }
validates :owner, presence: true
+ validates :issues_enabled, :wall_enabled, :merge_requests_enabled,
+ :wiki_enabled, inclusion: { in: [true, false] }
validate :check_limit
validate :repo_name
@@ -187,7 +189,7 @@ end
# private_flag :boolean(1) default(TRUE), not null
# code :string(255)
# owner_id :integer(4)
-# default_branch :string(255) default("master"), not null
+# default_branch :string(255)
# issues_enabled :boolean(1) default(TRUE), not null
# wall_enabled :boolean(1) default(TRUE), not null
# merge_requests_enabled :boolean(1) default(TRUE), not null
diff --git a/app/models/users_project.rb b/app/models/users_project.rb
index 7d1729343bb..1b5984834e4 100644
--- a/app/models/users_project.rb
+++ b/app/models/users_project.rb
@@ -14,7 +14,7 @@ class UsersProject < ActiveRecord::Base
after_save :update_repository
after_destroy :update_repository
- validates_uniqueness_of :user_id, scope: [:project_id]
+ validates_uniqueness_of :user_id, scope: [:project_id], message: "already exists in project"
validates_presence_of :user_id
validates_presence_of :project_id
@@ -48,10 +48,10 @@ class UsersProject < ActiveRecord::Base
def self.access_roles
{
- "Guest" => GUEST,
- "Reporter" => REPORTER,
+ "Guest" => GUEST,
+ "Reporter" => REPORTER,
"Developer" => DEVELOPER,
- "Master" => MASTER
+ "Master" => MASTER
}
end
diff --git a/app/roles/account.rb b/app/roles/account.rb
index 63a9b5c51bf..b8c445a3d58 100644
--- a/app/roles/account.rb
+++ b/app/roles/account.rb
@@ -1,6 +1,13 @@
-module Account
+module Account
+ # Returns a string for use as a Gitolite user identifier
+ #
+ # Note that Gitolite 2.x requires the following pattern for users:
+ #
+ # ^@?[0-9a-zA-Z][0-9a-zA-Z._\@+-]*$
def identifier
- email.gsub /[^[:alnum:]]/, "_"
+ # Replace non-word chars with underscores, then make sure it starts with
+ # valid chars
+ email.gsub(/\W/, '_').gsub(/\A([\W\_])+/, '')
end
def is_admin?
diff --git a/app/roles/issue_commonality.rb b/app/roles/issue_commonality.rb
index a8fd679df81..ac972a70df2 100644
--- a/app/roles/issue_commonality.rb
+++ b/app/roles/issue_commonality.rb
@@ -16,7 +16,7 @@ module IssueCommonality
validates :title,
presence: true,
length: { within: 0..255 }
-
+ validates :closed, inclusion: { in: [true, false] }
scope :opened, where(closed: false)
scope :closed, where(closed: true)
diff --git a/app/roles/push_observer.rb b/app/roles/push_observer.rb
index 1067404d5af..947ed42345d 100644
--- a/app/roles/push_observer.rb
+++ b/app/roles/push_observer.rb
@@ -1,3 +1,6 @@
+# Includes methods for handling Git Push events
+#
+# Triggered by PostReceive job
module PushObserver
def observe_push(oldrev, newrev, ref, user)
data = post_receive_data(oldrev, newrev, ref, user)
@@ -84,11 +87,10 @@ module PushObserver
data
end
-
- # This method will be called after each post receive
- # and only if user present in gitlab.
- # All callbacks for post receive should be placed here
+ # This method will be called after each post receive and only if the provided
+ # user is present in GitLab.
#
+ # All callbacks for post receive should be placed here.
def trigger_post_receive(oldrev, newrev, ref, user)
# Create push event
self.observe_push(oldrev, newrev, ref, user)
@@ -101,5 +103,11 @@ module PushObserver
# Create satellite
self.satellite.create unless self.satellite.exists?
+
+ # Discover the default branch, but only if it hasn't already been set to
+ # something else
+ if default_branch.nil?
+ update_attributes(default_branch: discover_default_branch)
+ end
end
end
diff --git a/app/roles/repository.rb b/app/roles/repository.rb
index 5fa950db6d6..a77de4ad5f0 100644
--- a/app/roles/repository.rb
+++ b/app/roles/repository.rb
@@ -8,6 +8,10 @@ module Repository
false
end
+ def empty_repo?
+ !repo_exists? || !has_commits?
+ end
+
def commit(commit_id = nil)
Commit.find_or_first(repo, commit_id, root_ref)
end
@@ -38,7 +42,7 @@ module Repository
def has_post_receive_file?
hook_file = File.join(path_to_repo, 'hooks', 'post-receive')
- File.exists?(hook_file)
+ File.exists?(hook_file)
end
def tags
@@ -67,7 +71,7 @@ module Repository
def repo_exists?
@repo_exists ||= (repo && !repo.branches.empty?)
- rescue
+ rescue
@repo_exists = false
end
@@ -90,24 +94,42 @@ module Repository
end.sort_by(&:name)
end
+ # Discovers the default branch based on the repository's available branches
+ #
+ # - If no branches are present, returns nil
+ # - If one branch is present, returns its name
+ # - If two or more branches are present, returns the one that has a name
+ # matching root_ref (default_branch or 'master' if default_branch is nil)
+ def discover_default_branch
+ branches = heads.collect(&:name)
+
+ if branches.length == 0
+ nil
+ elsif branches.length == 1
+ branches.first
+ else
+ branches.select { |v| v == root_ref }.first
+ end
+ end
+
def has_commits?
!!commit
end
- def root_ref
+ def root_ref
default_branch || "master"
end
- def root_ref? branch
+ def root_ref?(branch)
root_ref == branch
end
# Archive Project to .tar.gz
#
- # Already packed repo archives stored at
+ # Already packed repo archives stored at
# app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz
#
- def archive_repo ref
+ def archive_repo(ref)
ref = ref || self.root_ref
commit = self.commit(ref)
return nil unless commit
@@ -134,6 +156,6 @@ module Repository
end
def http_url_to_repo
- http_url = [Gitlab.config.url, "/", path, ".git"].join()
+ http_url = [Gitlab.config.url, "/", path, ".git"].join('')
end
end
diff --git a/app/views/deploy_keys/_form.html.haml b/app/views/deploy_keys/_form.html.haml
index 461f1f5d84a..6beba562a95 100644
--- a/app/views/deploy_keys/_form.html.haml
+++ b/app/views/deploy_keys/_form.html.haml
@@ -11,8 +11,13 @@
.input= f.text_field :title
.clearfix
= f.label :key
- .input= f.text_area :key, class: "xlarge"
+ .input
+ = f.text_area :key, class: [:xxlarge, :thin_area]
+ %p.hint
+ Paste a machine public key here. Read more about how generate it
+ = link_to "here", help_ssh_path
+
.actions
- = f.submit 'Save', class: "primary btn"
- = link_to "Cancel", project_deploy_keys_path(@project), class: "btn"
+ = f.submit 'Save', class: "save-btn btn"
+ = link_to "Cancel", project_deploy_keys_path(@project), class: "btn cancel-btn"
diff --git a/app/views/deploy_keys/index.html.haml b/app/views/deploy_keys/index.html.haml
index 0ee9d03b0f5..b9c654a1abe 100644
--- a/app/views/deploy_keys/index.html.haml
+++ b/app/views/deploy_keys/index.html.haml
@@ -1,11 +1,17 @@
= render "repositories/head"
-- if can? current_user, :admin_project, @project
- .alert-message.block-message
- Deploy keys allow read-only access to repository.
+
+%p.slead
+ Deploy keys allow read-only access to repository. It matches perfectly for CI, staging or production servers.
+
+ - if can? current_user, :admin_project, @project
= link_to new_project_deploy_key_path(@project), class: "btn small", title: "New Deploy Key" do
Add Deploy Key
-
- if @keys.any?
%table
+ %thead
+ %tr
+ %th Keys
+ %th
+ %th
- @keys.each do |key|
= render(partial: 'show', locals: {key: key})
diff --git a/app/views/deploy_keys/new.html.haml b/app/views/deploy_keys/new.html.haml
index a2f1010b454..e973cb7d305 100644
--- a/app/views/deploy_keys/new.html.haml
+++ b/app/views/deploy_keys/new.html.haml
@@ -1,6 +1,6 @@
= render "repositories/head"
-%h3 New Deploy key
+%h3.page_title New Deploy key
%hr
= render 'form'
diff --git a/app/views/deploy_keys/show.html.haml b/app/views/deploy_keys/show.html.haml
index b1e0dc5ce27..c94cf10dde0 100644
--- a/app/views/deploy_keys/show.html.haml
+++ b/app/views/deploy_keys/show.html.haml
@@ -1,7 +1,14 @@
= render "repositories/head"
-%h3= @key.title
+%h3.page_title
+ Deploy key:
+ = @key.title
+ %small
+ created at
+ = @key.created_at.stamp("Aug 21, 2011")
+.back_link
+ = link_to project_deploy_keys_path(@project) do
+ &larr; To keys list
%hr
%pre= @key.key
-.actions
+.right
= link_to 'Remove', project_deploy_key_path(@key.project, @key), confirm: 'Are you sure?', method: :delete, class: "danger btn delete-key"
- .clear
diff --git a/app/views/errors/gitolite.html.haml b/app/views/errors/gitolite.html.haml
index d5f51951d5e..699e6984db6 100644
--- a/app/views/errors/gitolite.html.haml
+++ b/app/views/errors/gitolite.html.haml
@@ -1,6 +1,6 @@
%h1 Git Error
%hr
-%h2 Gitlab was unable to access your Gitolite system.
+%h2 GitLab was unable to access your Gitolite system.
.git_error_tips
%h4 Tips for Administrator:
diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml
index d7d7aed4232..35176f8e214 100644
--- a/app/views/help/api.html.haml
+++ b/app/views/help/api.html.haml
@@ -15,6 +15,8 @@
%a{href: "#users"} Users
%li
%a{href: "#issues"} Issues
+ %li
+ %a{href: "#milestones"} Milestones
.file_holder#README
.file_title
diff --git a/app/views/help/index.html.haml b/app/views/help/index.html.haml
index 02549577282..962f2175126 100644
--- a/app/views/help/index.html.haml
+++ b/app/views/help/index.html.haml
@@ -30,7 +30,7 @@
%h5= link_to "API", help_api_path
%li
- %h5= link_to "Gitlab Markdown", help_markdown_path
+ %h5= link_to "GitLab Markdown", help_markdown_path
%li
%h5= link_to "SSH keys", help_ssh_path
diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml
index 6a4bbb02c6c..2086b08c890 100644
--- a/app/views/help/markdown.html.haml
+++ b/app/views/help/markdown.html.haml
@@ -1,4 +1,4 @@
-%h3.page_title Gitlab Flavored Markdown
+%h3.page_title GitLab Flavored Markdown
.back_link
= link_to help_path do
&larr; to index
@@ -7,7 +7,7 @@
.row
.span8
%p
- For Gitlab we developed something we call "Gitlab Flavored Markdown" (GFM).
+ For GitLab we developed something we call "GitLab Flavored Markdown" (GFM).
It extends the standard Markdown in a few significant ways adds some useful functionality.
%p You can use GFM in:
@@ -62,7 +62,7 @@
%p becomes
= markdown %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```}
- %h4 Special Gitlab references
+ %h4 Special GitLab references
%p
GFM recognizes special references.
@@ -90,12 +90,11 @@
-# this example will only be shown if the user has a project with at least one issue
- if @project = current_user.projects.first
- if issue = @project.issues.first
- %p For example in your #{link_to @project.name, project_path(@project)} project something like
+ %p For example in your #{link_to @project.name, project_path(@project)} project, writing:
%pre= "This is related to ##{issue.id}. @#{current_user.name} is working on solving it."
- %p becomes
- = markdown "This is related to ##{issue.id}. @#{current_user.name} is working on solving it."
-
-
+ %p becomes:
+ %pre= gfm "This is related to ##{issue.id}. @#{current_user.name} is working on solving it."
+ - @project = nil # Prevent this from bubbling up to page title
.span4.right
.alert.alert-info
diff --git a/app/views/help/ssh.html.haml b/app/views/help/ssh.html.haml
index 6a5812040e7..3f082333a76 100644
--- a/app/views/help/ssh.html.haml
+++ b/app/views/help/ssh.html.haml
@@ -5,7 +5,7 @@
%hr
%p.slead
- SSH key allows you to establish a secure connection between your computer and Gitlab
+ SSH key allows you to establish a secure connection between your computer and GitLab
%p.slead
To generate a new SSH key just open your terminal and use code below.
@@ -17,7 +17,7 @@
\# Generating public/private rsa key pair...
%p.slead
- Next just use code below to dump your public key and add to GITLAB SSH Keys
+ Next just use code below to dump your public key and add to GitLab SSH Keys
%pre.dark
cat ~/.ssh/id_rsa.pub
diff --git a/app/views/help/system_hooks.html.haml b/app/views/help/system_hooks.html.haml
index 9fc8cbabf17..736c818bc57 100644
--- a/app/views/help/system_hooks.html.haml
+++ b/app/views/help/system_hooks.html.haml
@@ -5,7 +5,7 @@
%hr
%p.slead
- Your Gitlab instance can perform HTTP POST request on next event: create_project, delete_project, create_user, delete_user, change_team_member.
+ Your GitLab instance can perform HTTP POST request on next event: create_project, delete_project, create_user, delete_user, change_team_member.
%br
System Hooks can be used for logging or change information in LDAP server.
%br
diff --git a/app/views/help/web_hooks.html.haml b/app/views/help/web_hooks.html.haml
index 263eadf6583..65036613fa7 100644
--- a/app/views/help/web_hooks.html.haml
+++ b/app/views/help/web_hooks.html.haml
@@ -5,11 +5,11 @@
%hr
%p.slead
- Every Gitlab project can trigger a web server whenever the repo is pushed to.
+ Every GitLab project can trigger a web server whenever the repo is pushed to.
%br
Web Hooks can be used to update an external issue tracker, trigger CI builds, update a backup mirror, or even deploy to your production server.
%br
- GITLAB will send POST request with commits information on every push.
+ GitLab will send POST request with commits information on every push.
%h5 Hooks request example:
= render "hooks/data_ex"
diff --git a/app/views/help/workflow.html.haml b/app/views/help/workflow.html.haml
index a3fe3b01d46..6062ca091bd 100644
--- a/app/views/help/workflow.html.haml
+++ b/app/views/help/workflow.html.haml
@@ -24,7 +24,7 @@
git commit -am "My feature is ready"
%li
- %p Push your branch to gitlabhq
+ %p Push your branch to GitLab
.bash
%pre.dark
git push origin $feature_name
diff --git a/app/views/hooks/_data_ex.html.erb b/app/views/hooks/_data_ex.html.erb
index e43714e965b..7dd6b9e0750 100644
--- a/app/views/hooks/_data_ex.html.erb
+++ b/app/views/hooks/_data_ex.html.erb
@@ -32,7 +32,7 @@
:timestamp => "2012-01-03T23:36:29+02:00",
:url => "http://localhost/diaspora/commits/da1560886d...",
:author => {
- :name => "gitlab dev user",
+ :name => "GitLab dev user",
:email => "gitlabdev@dv6700.(none)"
}
}
diff --git a/app/views/issues/_form.html.haml b/app/views/issues/_form.html.haml
index db7920b993d..23de7e8ed15 100644
--- a/app/views/issues/_form.html.haml
+++ b/app/views/issues/_form.html.haml
@@ -38,7 +38,7 @@
= f.label :description, "Details"
.input
= f.text_area :description, maxlength: 2000, class: "xxlarge", rows: 14
- %p.hint Issues are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}.
+ %p.hint Issues are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
.actions
diff --git a/app/views/keys/index.html.haml b/app/views/keys/index.html.haml
index 8f7e2bab1b4..3e919c5c419 100644
--- a/app/views/keys/index.html.haml
+++ b/app/views/keys/index.html.haml
@@ -4,7 +4,7 @@
%hr
%p.slead
- SSH key allows you to establish a secure connection between your computer and Gitlab
+ SSH key allows you to establish a secure connection between your computer and GitLab
%table#keys-table
diff --git a/app/views/keys/show.html.haml b/app/views/keys/show.html.haml
index ffd52b96e5a..a8cba6c8f9e 100644
--- a/app/views/keys/show.html.haml
+++ b/app/views/keys/show.html.haml
@@ -10,5 +10,5 @@
%hr
%pre= @key.key
-.actions
+.right
= link_to 'Remove', @key, confirm: 'Are you sure?', method: :delete, class: "btn danger delete-key"
diff --git a/app/views/layouts/notify.html.haml b/app/views/layouts/notify.html.haml
index a1938df43a1..7b79897b653 100644
--- a/app/views/layouts/notify.html.haml
+++ b/app/views/layouts/notify.html.haml
@@ -2,7 +2,7 @@
%head
%meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
%title
- gitlabhq
+ GitLab
:css
.header h1 {color: #BBBBBB !important; font: bold 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;}
.header p {color: #c6c6c6; font: normal 12px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 18px;}
@@ -21,7 +21,7 @@
\ 
%td{align: "left", style: "padding: 18px 0 10px;", width: "580"}
%h1{style: "color: #BBBBBB; font: normal 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;"}
- gitlab
+ GITLAB
- if @project
| #{@project.name}
%table{align: "center", bgcolor: "#fff", border: "0", cellpadding: "0", cellspacing: "0", style: "font-family: Helvetica, Arial, sans-serif; background: #fff;", width: "600"}
diff --git a/app/views/milestones/_form.html.haml b/app/views/milestones/_form.html.haml
index 41cbd6abcad..ce4145ba3e6 100644
--- a/app/views/milestones/_form.html.haml
+++ b/app/views/milestones/_form.html.haml
@@ -22,7 +22,7 @@
= f.label :description, "Description", class: "control-label"
.controls
= f.text_area :description, maxlength: 2000, class: "input-xlarge", rows: 10
- %p.hint Milestones are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}.
+ %p.hint Milestones are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
.span6
.control-group
= f.label :due_date, "Due Date", class: "control-label"
diff --git a/app/views/notes/_form.html.haml b/app/views/notes/_form.html.haml
index 7211a0ae471..6d559cfc790 100644
--- a/app/views/notes/_form.html.haml
+++ b/app/views/notes/_form.html.haml
@@ -11,7 +11,7 @@
= f.text_area :note, size: 255, class: 'note-text'
#preview-note.preview_note.hide
.hint
- .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}.
+ .right Comments are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
.clearfix
.row.note_advanced_opts.hide
diff --git a/app/views/notify/new_user_email.html.haml b/app/views/notify/new_user_email.html.haml
index d96afc92fe2..93bf7c50229 100644
--- a/app/views/notify/new_user_email.html.haml
+++ b/app/views/notify/new_user_email.html.haml
@@ -6,7 +6,7 @@
%h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
Hi #{@user['name']}!
%p{style: "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "}
- Administrator created account for you. Now you are a member of company gitlab application.
+ Administrator created account for you. Now you are a member of company GitLab application.
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%tr
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
diff --git a/app/views/projects/_clone_panel.html.haml b/app/views/projects/_clone_panel.html.haml
index 839a98a0d79..20891610ace 100644
--- a/app/views/projects/_clone_panel.html.haml
+++ b/app/views/projects/_clone_panel.html.haml
@@ -3,19 +3,19 @@
.span7
.form-horizontal
.input-prepend.project_clone_holder
- = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo
- = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo
+ %button{class: "btn small active", :"data-clone" => @project.ssh_url_to_repo} SSH
+ %button{class: "btn small", :"data-clone" => @project.http_url_to_repo} HTTP
= text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
.span4.right
.right
- - if can? current_user, :download_code, @project
- = link_to archive_project_repository_path(@project), class: "btn small grouped" do
- %i.icon-download-alt
- Download
- - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project)
- = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do
- Merge Request
- - if @project.issues_enabled && can?(current_user, :write_issue, @project)
- = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do
- Issue
-
+ - unless @project.empty_repo?
+ - if can? current_user, :download_code, @project
+ = link_to archive_project_repository_path(@project), class: "btn small grouped" do
+ %i.icon-download-alt
+ Download
+ - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project)
+ = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do
+ Merge Request
+ - if @project.issues_enabled && can?(current_user, :write_issue, @project)
+ = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do
+ Issue
diff --git a/app/views/projects/_show.html.haml b/app/views/projects/_show.html.haml
deleted file mode 100644
index e8a5b00dd0e..00000000000
--- a/app/views/projects/_show.html.haml
+++ /dev/null
@@ -1,23 +0,0 @@
-%h5.title
- = @project.name
-%br
-%div
- %a.btn.info{href: tree_project_ref_path(@project, @project.root_ref)} Browse code
- &nbsp;
- %a.btn{href: project_commits_path(@project)} Commits
- %strong.right
- = link_to project_path(@project) do
- Switch to project &rarr;
-%br
-.alert-message.block-message.warning
- .input
- .input-prepend
- %span.add-on git clone
- = text_field_tag :project_clone, @project.url_to_repo, class: "xlarge one_click_select git_clone_url"
-
-= simple_format @project.description
-- unless @events.blank?
- %h4.middle_title Recent Activity
- .content_list= render @events
-
-
diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml
index d408c0a64ae..d9a151fc706 100644
--- a/app/views/projects/empty.html.haml
+++ b/app/views/projects/empty.html.haml
@@ -1,12 +1,6 @@
= render 'shared/no_ssh'
-.project_clone_panel
- .row
- .span7
- .form-horizontal
- .input-prepend.project_clone_holder
- = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo
- = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo
- = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
+= render 'clone_panel'
+
%div.git-empty
%h4 Git global setup:
%pre.dark
@@ -36,16 +30,3 @@
- if can? current_user, :admin_project, @project
.prepend-top-20
= link_to 'Remove project', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger right"
-
-
-
-:javascript
- $(function(){
- var link_sel = ".project_clone_holder a";
- $(link_sel).bind("click", function() {
- $(link_sel).removeClass("active");
- $(this).addClass("active");
- $("#project_clone").val($(this).attr("data-clone"));
- })
- })
-
diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml
index 77a0ef1ac4d..21459da256f 100644
--- a/app/views/projects/show.html.haml
+++ b/app/views/projects/show.html.haml
@@ -2,13 +2,3 @@
= render 'clone_panel'
= render "events/event_last_push", event: @last_push
.content_list= render @events
-
-:javascript
- $(function(){
- var link_sel = ".project_clone_holder a";
- $(link_sel).bind("click", function() {
- $(link_sel).removeClass("active");
- $(this).addClass("active");
- $("#project_clone").val($(this).attr("data-clone"));
- })
- })
diff --git a/app/views/refs/_head.html.haml b/app/views/refs/_head.html.haml
index 8825493a0ec..d51602de9b7 100644
--- a/app/views/refs/_head.html.haml
+++ b/app/views/refs/_head.html.haml
@@ -7,4 +7,8 @@
%li{class: "#{'active' if (controller.controller_name == "refs") }"}
= link_to tree_project_ref_path(@project, @ref) do
Source
-
+ %li.right
+ .input-prepend.project_clone_holder
+ %button{class: "btn small active", :"data-clone" => @project.ssh_url_to_repo} SSH
+ %button{class: "btn small", :"data-clone" => @project.http_url_to_repo} HTTP
+ = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
diff --git a/app/views/refs/tree.js.haml b/app/views/refs/tree.js.haml
index 2eccf8c19a6..92e90579304 100644
--- a/app/views/refs/tree.js.haml
+++ b/app/views/refs/tree.js.haml
@@ -6,5 +6,5 @@
// Load last commit log for each file in tree
$('#tree-slider').waitForImages(function() {
- ajaxGet('#{@logs_path}');
+ ajaxGet('#{@logs_path}');
});
diff --git a/app/views/team_members/show.html.haml b/app/views/team_members/show.html.haml
index 89662309ba3..3b5c78a87c7 100644
--- a/app/views/team_members/show.html.haml
+++ b/app/views/team_members/show.html.haml
@@ -3,7 +3,7 @@
.team_member_show
- if can? current_user, :admin_project, @project
- = link_to 'Remove from team', project_team_member_path(project_id: @project, id: @team_member.id), confirm: 'Are you sure?', method: :delete, class: "right btn btn-danger"
+ = link_to 'Remove from team', project_team_member_path(project_id: @project, id: @team_member.id), confirm: 'Are you sure?', method: :delete, class: "right btn danger"
.profile_avatar_holder
= image_tag gravatar_icon(user.email, 60), class: "borders"
%h3
diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml
index 12b57e032a4..b05d0a78992 100644
--- a/app/views/wikis/_form.html.haml
+++ b/app/views/wikis/_form.html.haml
@@ -14,7 +14,7 @@
.middle_box_content
.input
%span.cgray
- Wiki content is parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}.
+ Wiki content is parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
To link to a (new) page you can just type
%code [Link Title](page-slug)
\.
diff --git a/config/routes.rb b/config/routes.rb
index 51e65721880..ed5eac0ddd0 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -50,10 +50,6 @@ Gitlab::Application.routes.draw do
end
end
resources :team_members, :only => [:edit, :update, :destroy]
- get 'mailer/preview_note'
- get 'mailer/preview_user_new'
- get 'mailer/preview_issue_new'
-
resources :hooks, :only => [:index, :create, :destroy] do
get :test
end
diff --git a/db/migrate/20120905043334_set_default_branch_default_to_nil.rb b/db/migrate/20120905043334_set_default_branch_default_to_nil.rb
new file mode 100644
index 00000000000..f5956fe8751
--- /dev/null
+++ b/db/migrate/20120905043334_set_default_branch_default_to_nil.rb
@@ -0,0 +1,12 @@
+class SetDefaultBranchDefaultToNil < ActiveRecord::Migration
+ def up
+ # Set the default_branch to allow nil, and default it to nil
+ change_column_null(:projects, :default_branch, true)
+ change_column_default(:projects, :default_branch, nil)
+ end
+
+ def down
+ change_column_null(:projects, :default_branch, false)
+ change_column_default(:projects, :default_branch, 'master')
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 46461e44aad..00bb55234af 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20120729131232) do
+ActiveRecord::Schema.define(:version => 20120905043334) do
create_table "events", :force => true do |t|
t.string "target_type"
@@ -98,16 +98,16 @@ ActiveRecord::Schema.define(:version => 20120729131232) do
t.string "name"
t.string "path"
t.text "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.boolean "private_flag", :default => true, :null => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.boolean "private_flag", :default => true, :null => false
t.string "code"
t.integer "owner_id"
- t.string "default_branch", :default => "master", :null => false
- t.boolean "issues_enabled", :default => true, :null => false
- t.boolean "wall_enabled", :default => true, :null => false
- t.boolean "merge_requests_enabled", :default => true, :null => false
- t.boolean "wiki_enabled", :default => true, :null => false
+ t.string "default_branch"
+ t.boolean "issues_enabled", :default => true, :null => false
+ t.boolean "wall_enabled", :default => true, :null => false
+ t.boolean "merge_requests_enabled", :default => true, :null => false
+ t.boolean "wiki_enabled", :default => true, :null => false
end
create_table "protected_branches", :force => true do |t|
diff --git a/doc/api/README.md b/doc/api/README.md
index 3a6c7b7682a..93919b42852 100644
--- a/doc/api/README.md
+++ b/doc/api/README.md
@@ -1,10 +1,8 @@
-# Gitlab API
+# GitLab API
-All API requests require authentication. You need to pass `private_token` parameter to authenticate.
+All API requests require authentication. You need to pass a `private_token` parameter to authenticate. You can find or reset your private token in your profile.
-To get or reset your token visit your profile.
-
-If no or invalid `private_token` provided error message will be returned with status code 401:
+If no, or an invalid, `private_token` is provided then an error message will be returned with status code 401:
```json
{
@@ -12,10 +10,9 @@ If no or invalid `private_token` provided error message will be returned with st
}
```
-API requests should be prefixed with `api` and the API version.
-API version is equal to Gitlab major version number and defined in `lib/api.rb`.
+API requests should be prefixed with `api` and the API version. The API version is equal to the GitLab major version number, which is defined in `lib/api.rb`.
-Example of valid API request:
+Example of a valid API request:
```
GET http://example.com/api/v2/projects?private_token=QVy1PB7sTxfy4pqfZM1U
diff --git a/doc/api/projects.md b/doc/api/projects.md
index b0c1e65709c..5a20719ff1a 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -1,6 +1,6 @@
## List projects
-Get a list of authenticated user's projects.
+Get a list of projects owned by the authenticated user.
```
GET /projects
@@ -55,7 +55,7 @@ GET /projects
## Single project
-Get an authenticated user's project.
+Get a specific project, identified by project ID, which is owned by the authentication user.
```
GET /projects/:id
@@ -102,6 +102,12 @@ Parameters:
+ `name` (required) - new project name
+ `code` (optional) - new project code, uses project name if not set
+ `path` (optional) - new project path, uses project name if not set
++ `description (optional) - short project description
++ `default_branch` (optional) - 'master' by default
++ `issues_enabled` (optional) - enabled by default
++ `wall_enabled` (optional) - enabled by default
++ `merge_requests_enabled` (optional) - enabled by default
++ `wiki_enabled` (optional) - enabled by default
Will return created project with status `201 Created` on success, or `404 Not
found` on fail.
@@ -109,7 +115,7 @@ found` on fail.
## Project repository branches
-Get a list of project repository branches sorted by name alphabetically.
+Get a list of repository branches from a project, sorted by name alphabetically.
```
GET /projects/:id/repository/branches
@@ -186,7 +192,7 @@ Parameters:
## Project repository tags
-Get a list of project repository tags sorted by name in reverse alphabetical order.
+Get a list of repository tags from a project, sorted by name in reverse alphabetical order.
```
GET /projects/:id/repository/tags
@@ -237,3 +243,4 @@ Parameters:
+ `filepath` (required) - The path the file
Will return the raw file contents.
+
diff --git a/doc/debian_ubuntu.sh b/doc/debian_ubuntu.sh
deleted file mode 100644
index 5ed1e2a2f1f..00000000000
--- a/doc/debian_ubuntu.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-
-sudo apt-get update
-sudo apt-get upgrade
-
-sudo DEBIAN_FRONTEND='noninteractive' apt-get install -y postfix-policyd-spf-python # Install postfix without prompting.
-sudo apt-get install -y git git-core wget curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-gplv2-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server python-dev python-pip libyaml-dev
-
-wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
-tar xfvz ruby-1.9.3-p194.tar.gz
-cd ruby-1.9.3-p194
-./configure
-make
-sudo make install
-
-sudo adduser \
- --system \
- --shell /bin/sh \
- --gecos 'git version control' \
- --group \
- --disabled-password \
- --home /home/git \
- git
-
-sudo adduser --disabled-login --gecos 'gitlab system' gitlab
-
-sudo usermod -a -G git gitlab
-
-sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa
-
-cd /home/git
-sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite
-
-sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; /home/git/gitolite/src/gl-system-install"
-sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
-sudo chmod 777 /home/git/gitlab.pub
-
-sudo -u git -H sed -i 's/0077/0007/g' /home/git/share/gitolite/conf/example.gitolite.rc
-sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup -q /home/git/gitlab.pub"
-
-sudo chmod -R g+rwX /home/git/repositories/
-sudo chown -R git:git /home/git/repositories/
-
-sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin
-sudo rm -rf /tmp/gitolite-admin
diff --git a/doc/installation.md b/doc/installation.md
index 4cb873f0e38..e14ec711e7b 100644
--- a/doc/installation.md
+++ b/doc/installation.md
@@ -20,7 +20,7 @@ You might have some luck using these, but no guarantees:
- MacOS X
- FreeBSD
-Gitlab does **not** run on Windows and we have no plans of making Gitlab compatible.
+GitLab does **not** run on Windows and we have no plans of making GitLab compatible.
## This installation guide created for Debian/Ubuntu and properly tested.
@@ -28,40 +28,44 @@ The installation consists of 6 steps:
1. Install packages / dependencies
2. Install ruby
-3. Install gitolite
-4. Install and configure Gitlab.
+3. Install Gitolite
+4. Install and configure GitLab.
5. Start the web front-end
6. Start a Resque worker (for background processing)
### IMPORTANT
-Please make sure you have followed all the steps below before posting to the mailinglist with installation and configuration questions.
+Please make sure you have followed all the steps below before posting to the mailing list with installation and configuration questions.
-Only create a Github Issue if you want a specific part of this installation guide updated.
+Only create a GitHub Issue if you want a specific part of this installation guide updated.
Also read the [Read this before you submit an issue](https://github.com/gitlabhq/gitlabhq/wiki/Read-this-before-you-submit-an-issue) wiki page.
> - - -
-> First 3 steps can be easily skipped with simply install script:
+> The first 3 steps of this guide can be easily skipped by executing an install script:
>
> # Install curl and sudo
> apt-get install curl sudo
>
> # 3 steps in 1 command :)
-> curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh
+> curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu.sh | sh
>
-> Now you can go to step 4"
+> Now you can go to [Step 4](#4-install-gitlab-and-configuration-check-status-configuration)
>
-> Or if you are installing on Amazon Web Services using Ubuntu 12.04 you can do all steps (1 to 6) at once with:
+> Or if you are installing on Amazon Web Services using Ubuntu 12.04 you can do all steps (1 to 6) at once with:
>
-> curl https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/aws/debian_ubuntu_aws.sh | sh
+> curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu_aws.sh | sh
>
-> for more detailed instructions read the HOWTO section of [the script](https://github.com/gitlabhq/gitlabhq/blob/master/lib/support/aws/debian_ubuntu_aws.sh)
+> for more detailed instructions read the HOWTO section of [the script](https://github.com/gitlabhq/gitlab-recipes/blob/master/install/debian_ubuntu_aws.sh)
> - - -
# 1. Install packages
-*Keep in mind that `sudo` is not installed for debian by default. You should install it with as root:* **apt-get update && apt-get upgrade && apt-get install sudo**
+*Keep in mind that `sudo` is not installed on Debian by default. You should install it as root:*
+
+ apt-get update && apt-get upgrade && apt-get install sudo
+
+Now install the required packages:
sudo apt-get update
sudo apt-get upgrade
@@ -71,16 +75,16 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq
# If you want to use MySQL:
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
-# 2. Install ruby
+# 2. Install Ruby
- wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
- tar xzfv ruby-1.9.2-p290.tar.gz
- cd ruby-1.9.2-p290
+ wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
+ tar xfvz ruby-1.9.3-p194.tar.gz
+ cd ruby-1.9.3-p194
./configure
make
sudo make install
-# 3. Install gitolite
+# 3. Install Gitolite
Create user for git:
@@ -93,12 +97,12 @@ Create user for git:
--home /home/git \
git
-Create user for gitlab:
+Create user for GitLab:
# ubuntu/debian
sudo adduser --disabled-login --gecos 'gitlab system' gitlab
-Add your user to git group:
+Add your user to the `git` group:
sudo usermod -a -G git gitlab
@@ -106,10 +110,10 @@ Generate key:
sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa
-Get gitolite source code:
+Clone GitLab's fork of the Gitolite source code:
cd /home/git
- sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite
+ sudo -H -u git git clone https://github.com/gitlabhq/gitolite.git /home/git/gitolite
Setup:
@@ -135,23 +139,23 @@ Permissions:
# if succeed you can remove it
sudo rm -rf /tmp/gitolite-admin
-**IMPORTANT! If you cant clone `gitolite-admin` repository - DONT PROCEED INSTALLATION**
+**IMPORTANT! If you can't clone `gitolite-admin` repository - DO NOT PROCEED WITH INSTALLATION**
+Check the [Trouble Shooting Guide](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide)
+and ensure you have followed all of the above steps carefully.
-# 4. Install gitlab and configuration. Check status configuration.
+# 4. Clone GitLab source and install prerequisites
sudo gem install charlock_holmes --version '0.6.8'
sudo pip install pygments
sudo gem install bundler
cd /home/gitlab
- sudo -H -u gitlab git clone -b stable git://github.com/gitlabhq/gitlabhq.git gitlab
+ sudo -H -u gitlab git clone -b stable https://github.com/gitlabhq/gitlabhq.git gitlab
cd gitlab
- sudo -u gitlab mkdir tmp
-
# Rename config files
sudo -u gitlab cp config/gitlab.yml.example config/gitlab.yml
-#### Select db you want to use
+#### Select the database you want to use
# SQLite
sudo -u gitlab cp config/database.yml.sqlite config/database.yml
@@ -163,7 +167,7 @@ Permissions:
# Login to MySQL
$ mysql -u root -p
- # Create the gitlabhq production database
+ # Create the GitLab production database
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
# Create the MySQL User change $password to a real password
@@ -179,15 +183,17 @@ Permissions:
sudo -u gitlab -H bundle install --without development test --deployment
-#### Setup DB
+#### Setup database
sudo -u gitlab bundle exec rake gitlab:app:setup RAILS_ENV=production
-#### Setup gitlab hooks
+#### Setup GitLab hooks
sudo cp ./lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive
sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive
+#### Check application status
+
Checking status:
sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production
@@ -208,9 +214,9 @@ Checking status:
UMASK for .gitolite.rc is 0007? ............YES
/home/git/share/gitolite/hooks/common/post-receive exists? ............YES
-If you got all YES - congrats! You can go to next step.
+If you got all YES - congratulations! You can go to the next step.
-# 5. Server up
+# 5. Start the web server
Application can be started with next command:
@@ -225,12 +231,12 @@ You can login via web using admin generated with setup:
admin@local.host
5iveL!fe
-# 6. Run resque process (for processing queue).
+# 6. Run Resque process (for processing job queue).
# Manually
sudo -u gitlab bundle exec rake environment resque:work QUEUE=* RAILS_ENV=production BACKGROUND=yes
- # Gitlab start script
+ # GitLab start script
sudo -u gitlab ./resque.sh
# if you run this as root /home/gitlab/gitlab/tmp/pids/resque_worker.pid will be owned by root
# causing the resque worker not to start via init script on next boot/service restart
@@ -240,19 +246,19 @@ You can login via web using admin generated with setup:
# Nginx && Unicorn
-### Install Nginx
-
- sudo apt-get install nginx
-
-## Unicorn
+## 1. Unicorn
cd /home/gitlab/gitlab
sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb
sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D
-Add gitlab to nginx sites & change with your host specific settings
+## 2. Nginx
+
+ # Install first
+ sudo apt-get install nginx
- sudo cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-available/gitlab
+ # Add GitLab to nginx sites & change with your host specific settings
+ sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab -P /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
# Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN**
@@ -260,22 +266,21 @@ Add gitlab to nginx sites & change with your host specific settings
# of the host serving GitLab.
sudo vim /etc/nginx/sites-enabled/gitlab
-Restart nginx:
+ # Restart nginx:
/etc/init.d/nginx restart
-Create init script in /etc/init.d/gitlab:
-
- cp /home/gitlab/gitlab/lib/support/init-gitlab /etc/init.d/gitlab
+## 3. Init script
-Adding permission:
+Create init script in /etc/init.d/gitlab:
+ sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab -P /etc/init.d/
sudo chmod +x /etc/init.d/gitlab
-Gitlab autostart:
+GitLab autostart:
sudo update-rc.d gitlab defaults
-Now you can start/restart/stop gitlab like:
+Now you can start/restart/stop GitLab like:
sudo /etc/init.d/gitlab restart
diff --git a/features/projects/issues/issues.feature b/features/projects/issues/issues.feature
index 180710cf6bc..42a3d8736e0 100644
--- a/features/projects/issues/issues.feature
+++ b/features/projects/issues/issues.feature
@@ -4,7 +4,7 @@ Feature: Issues
And I own project "Shop"
And project "Shop" have "Release 0.4" open issue
And project "Shop" have "Release 0.3" closed issue
- And I visit project "Shop" issues page
+ And I visit project "Shop" issues page
Scenario: I should see open issues
Given I should see "Release 0.4" in issues
@@ -36,3 +36,31 @@ Feature: Issues
Given I visit issue page "Release 0.4"
And I leave a comment like "XML attached"
Then I should see comment "XML attached"
+
+ @javascript
+ Scenario: I search issue
+ Given I fill in issue search with "Release"
+ Then I should see "Release 0.4" in issues
+ And I should not see "Release 0.3" in issues
+
+ @javascript
+ Scenario: I search issue that not exist
+ Given I fill in issue search with "Bug"
+ Then I should not see "Release 0.4" in issues
+ And I should not see "Release 0.3" in issues
+
+
+ @javascript
+ Scenario: I search all issues
+ Given I click link "All"
+ And I fill in issue search with "0.3"
+ Then I should see "Release 0.3" in issues
+ And I should not see "Release 0.4" in issues
+
+ @javascript
+ Scenario: I clear search
+ Given I click link "All"
+ And I fill in issue search with "Something"
+ And I fill in issue search with ""
+ Then I should see "Release 0.4" in issues
+ And I should see "Release 0.3" in issues
diff --git a/features/step_definitions/common_steps.rb b/features/step_definitions/common_steps.rb
new file mode 100644
index 00000000000..e9023f9278f
--- /dev/null
+++ b/features/step_definitions/common_steps.rb
@@ -0,0 +1,21 @@
+include LoginHelpers
+
+Given /^I signin as a user$/ do
+ login_as :user
+end
+
+When /^I click link "(.*?)"$/ do |link|
+ click_link link
+end
+
+When /^I click button "(.*?)"$/ do |button|
+ click_button button
+end
+
+When /^I fill in "(.*?)" with "(.*?)"$/ do |field, value|
+ fill_in field, :with => value
+end
+
+Given /^show me page$/ do
+ save_and_open_page
+end
diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb
index a4edd224dc0..867233c82cb 100644
--- a/features/step_definitions/dashboard_steps.rb
+++ b/features/step_definitions/dashboard_steps.rb
@@ -1,7 +1,3 @@
-Given /^I visit dashboard page$/ do
- visit dashboard_path
-end
-
Then /^I should see "(.*?)" link$/ do |arg1|
page.should have_link(arg1)
end
@@ -51,10 +47,10 @@ Then /^I click "(.*?)" link$/ do |arg1|
end
Then /^I see prefilled new Merge Request page$/ do
- current_path.should == new_project_merge_request_path(@project)
- find("#merge_request_source_branch").value.should == "new_design"
- find("#merge_request_target_branch").value.should == "master"
- find("#merge_request_title").value.should == "New Design"
+ current_path.should == new_project_merge_request_path(@project)
+ find("#merge_request_source_branch").value.should == "new_design"
+ find("#merge_request_target_branch").value.should == "master"
+ find("#merge_request_title").value.should == "New Design"
end
Given /^I visit dashboard search page$/ do
@@ -66,10 +62,6 @@ Given /^I search for "(.*?)"$/ do |arg1|
click_button "Search"
end
-Given /^I visit dashboard issues page$/ do
- visit dashboard_issues_path
-end
-
Then /^I should see issues assigned to me$/ do
issues = @user.issues
issues.each do |issue|
@@ -78,10 +70,6 @@ Then /^I should see issues assigned to me$/ do
end
end
-Given /^I visit dashboard merge requests page$/ do
- visit dashboard_merge_requests_path
-end
-
Then /^I should see my merge requests$/ do
merge_requests = @user.merge_requests
merge_requests.each do |mr|
diff --git a/features/step_definitions/profile/profile_steps.rb b/features/step_definitions/profile/profile_steps.rb
index 4661139c180..525d43f5fda 100644
--- a/features/step_definitions/profile/profile_steps.rb
+++ b/features/step_definitions/profile/profile_steps.rb
@@ -1,17 +1,9 @@
-Given /^I visit profile page$/ do
- visit profile_path
-end
-
Then /^I should see my profile info$/ do
page.should have_content "Profile"
page.should have_content @user.name
page.should have_content @user.email
end
-Given /^I visit profile password page$/ do
- visit profile_password_path
-end
-
Then /^I change my password$/ do
fill_in "user_password", :with => "222333"
fill_in "user_password_confirmation", :with => "222333"
@@ -22,10 +14,6 @@ Then /^I should be redirected to sign in page$/ do
current_path.should == new_user_session_path
end
-Given /^I visit profile token page$/ do
- visit profile_token_path
-end
-
Then /^I reset my token$/ do
@old_token = @user.private_token
click_button "Reset"
diff --git a/features/step_definitions/project/browse_code_steps.rb b/features/step_definitions/project/browse_code_steps.rb
index 7f9001bb989..d2ed9a0af28 100644
--- a/features/step_definitions/project/browse_code_steps.rb
+++ b/features/step_definitions/project/browse_code_steps.rb
@@ -1,17 +1,9 @@
-Given /^I visit project source page$/ do
- visit tree_project_ref_path(@project, @project.root_ref)
-end
-
Then /^I should see files from repository$/ do
page.should have_content("app")
page.should have_content("History")
page.should have_content("Gemfile")
end
-Given /^I visit project source page for "(.*?)"$/ do |arg1|
- visit tree_project_ref_path(@project, arg1)
-end
-
Then /^I should see files from repository for "(.*?)"$/ do |arg1|
current_path.should == tree_project_ref_path(@project, arg1)
page.should have_content("app")
@@ -31,10 +23,6 @@ Given /^I click on raw button$/ do
click_link "raw"
end
-Given /^I visit blob file from repo$/ do
- visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)
-end
-
Then /^I should see raw file content$/ do
page.source.should == ValidCommit::BLOB_FILE
end
diff --git a/features/step_definitions/project/project_commits_steps.rb b/features/step_definitions/project/project_commits_steps.rb
index 35fcb4d11ab..7f20ade41d1 100644
--- a/features/step_definitions/project/project_commits_steps.rb
+++ b/features/step_definitions/project/project_commits_steps.rb
@@ -1,7 +1,3 @@
-Given /^I visit project commits page$/ do
- visit project_commits_path(@project)
-end
-
Then /^I see project commits$/ do
current_path.should == project_commits_path(@project)
@@ -23,19 +19,11 @@ Then /^I see commits atom feed$/ do
page.body.should have_selector("entry summary", :text => commit.description)
end
-Given /^I click on commit link$/ do
- visit project_commit_path(@project, ValidCommit::ID)
-end
-
Then /^I see commit info$/ do
page.should have_content ValidCommit::MESSAGE
page.should have_content "Showing 1 changed file"
end
-Given /^I visit compare refs page$/ do
- visit compare_project_commits_path(@project)
-end
-
Given /^I fill compare fields with refs$/ do
fill_in "from", :with => "master"
fill_in "to", :with => "stable"
@@ -48,18 +36,6 @@ Given /^I see compared refs$/ do
page.should have_content "Showing 73 changed files"
end
-Given /^I visit project branches page$/ do
- visit branches_project_repository_path(@project)
-end
-
-Given /^I visit project commit page$/ do
- visit project_commit_path(@project, ValidCommit::ID)
-end
-
-Given /^I visit project tags page$/ do
- visit tags_project_repository_path(@project)
-end
-
Then /^I should see "(.*?)" recent branches list$/ do |arg1|
page.should have_content("Branches")
page.should have_content("master")
@@ -76,7 +52,7 @@ Then /^I should see "(.*?)" all tags list$/ do |arg1|
end
Then /^I should see "(.*?)" protected branches list$/ do |arg1|
- within "table" do
+ within "table" do
page.should have_content "stable"
page.should_not have_content "master"
end
diff --git a/features/step_definitions/project/project_issues_steps.rb b/features/step_definitions/project/project_issues_steps.rb
index 27de03d5489..e46c1f42f75 100644
--- a/features/step_definitions/project/project_issues_steps.rb
+++ b/features/step_definitions/project/project_issues_steps.rb
@@ -8,16 +8,12 @@ Given /^project "(.*?)" have "(.*?)" closed issue$/ do |arg1, arg2|
Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first, :closed => true)
end
-Given /^I visit project "(.*?)" issues page$/ do |arg1|
- visit project_issues_path(Project.find_by_name(arg1))
-end
-
Given /^I should see "(.*?)" in issues$/ do |arg1|
- page.should have_content arg1
+ page.should have_content arg1
end
Given /^I should not see "(.*?)" in issues$/ do |arg1|
- page.should_not have_content arg1
+ page.should_not have_content arg1
end
Then /^I should see issue "(.*?)"$/ do |arg1|
@@ -27,11 +23,6 @@ Then /^I should see issue "(.*?)"$/ do |arg1|
page.should have_content issue.project.name
end
-Given /^I visit issue page "(.*?)"$/ do |arg1|
- issue = Issue.find_by_title(arg1)
- visit project_issue_path(issue.project, issue)
-end
-
Given /^I submit new issue "(.*?)"$/ do |arg1|
fill_in "issue_title", with: arg1
click_button "Submit new issue"
@@ -51,7 +42,16 @@ Given /^I visit project "(.*?)" labels page$/ do |arg1|
end
Then /^I should see label "(.*?)"$/ do |arg1|
- within ".labels-table" do
+ within ".labels-table" do
page.should have_content arg1
end
end
+
+Given /^I fill in issue search with "(.*?)"$/ do |arg1|
+ # Because fill_in, with: "" triggers nothing
+ # we need to trigger a keyup event
+ if arg1 == ''
+ page.execute_script("$('.issue_search').val('').keyup();");
+ end
+ fill_in 'issue_search', with: arg1
+end
diff --git a/features/step_definitions/project/project_merge_requests_steps.rb b/features/step_definitions/project/project_merge_requests_steps.rb
index 2bdb967d3c5..fddb18add08 100644
--- a/features/step_definitions/project/project_merge_requests_steps.rb
+++ b/features/step_definitions/project/project_merge_requests_steps.rb
@@ -8,21 +8,17 @@ Given /^project "(.*?)" have "(.*?)" closed merge request$/ do |arg1, arg2|
Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first, :closed => true)
end
-Given /^I visit project "(.*?)" merge requests page$/ do |arg1|
- visit project_merge_requests_path(Project.find_by_name(arg1))
-end
-
Then /^I should see "(.*?)" in merge requests$/ do |arg1|
- page.should have_content arg1
+ page.should have_content arg1
end
Then /^I should not see "(.*?)" in merge requests$/ do |arg1|
- page.should_not have_content arg1
+ page.should_not have_content arg1
end
Then /^I should see merge request "(.*?)"$/ do |arg1|
merge_request = MergeRequest.find_by_title(arg1)
- page.should have_content(merge_request.title[0..10])
+ page.should have_content(merge_request.title[0..10])
page.should have_content(merge_request.target_branch)
page.should have_content(merge_request.source_branch)
end
@@ -34,11 +30,6 @@ Given /^I submit new merge request "(.*?)"$/ do |arg1|
click_button "Save"
end
-Given /^I visit merge request page "(.*?)"$/ do |arg1|
- mr = MergeRequest.find_by_title(arg1)
- visit project_merge_request_path(mr.project, mr)
-end
-
Then /^I should see closed merge request "(.*?)"$/ do |arg1|
mr = MergeRequest.find_by_title(arg1)
mr.closed.should be_true
diff --git a/features/step_definitions/project/project_milestones_steps.rb b/features/step_definitions/project/project_milestones_steps.rb
index 6749773e2b5..936c52df8d7 100644
--- a/features/step_definitions/project/project_milestones_steps.rb
+++ b/features/step_definitions/project/project_milestones_steps.rb
@@ -12,11 +12,6 @@ Given /^project "(.*?)" has milestone "(.*?)"$/ do |arg1, arg2|
end
end
-Given /^I visit project "(.*?)" milestones page$/ do |arg1|
- @project = Project.find_by_name(arg1)
- visit project_milestones_path(@project)
-end
-
Then /^I should see active milestones$/ do
milestone = @project.milestones.first
page.should have_content(milestone.title[0..10])
diff --git a/features/step_definitions/project/project_team_steps.rb b/features/step_definitions/project/project_team_steps.rb
index f0bab29a6f8..0979a6ea8c3 100644
--- a/features/step_definitions/project/project_team_steps.rb
+++ b/features/step_definitions/project/project_team_steps.rb
@@ -8,10 +8,6 @@ Given /^"(.*?)" is "(.*?)" developer$/ do |arg1, arg2|
project.add_access(user, :write)
end
-Given /^I visit project "(.*?)" team page$/ do |arg1|
- visit team_project_path(Project.find_by_name(arg1))
-end
-
Then /^I should be able to see myself in team$/ do
page.should have_content(@user.name)
page.should have_content(@user.email)
@@ -23,13 +19,9 @@ Then /^I should see "(.*?)" in team list$/ do |arg1|
page.should have_content(user.email)
end
-Given /^I click link "(.*?)"$/ do |arg1|
- click_link arg1
-end
-
Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2|
user = User.find_by_name(arg1)
- within "#new_team_member" do
+ within "#new_team_member" do
select user.name, :from => "team_member_user_id"
select arg2, :from => "team_member_project_access"
end
@@ -44,7 +36,7 @@ end
Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2|
user = User.find_by_name(arg1)
- within ".user_#{user.id}" do
+ within ".user_#{user.id}" do
select arg2, :from => "team_member_project_access"
end
end
diff --git a/features/step_definitions/project/project_wiki_steps.rb b/features/step_definitions/project/project_wiki_steps.rb
index 10de38d9ae3..31fc050aa4c 100644
--- a/features/step_definitions/project/project_wiki_steps.rb
+++ b/features/step_definitions/project/project_wiki_steps.rb
@@ -1,7 +1,3 @@
-Given /^I visit project wiki page$/ do
- visit project_wiki_path(@project, :index)
-end
-
Given /^I create Wiki page$/ do
fill_in "Title", :with => 'Test title'
fill_in "Content", :with => '[link test](test)'
diff --git a/features/step_definitions/project/projects_steps.rb b/features/step_definitions/project/projects_steps.rb
index d981e1f3802..d22b805f1df 100644
--- a/features/step_definitions/project/projects_steps.rb
+++ b/features/step_definitions/project/projects_steps.rb
@@ -1,9 +1,3 @@
-include LoginHelpers
-
-Given /^I signin as a user$/ do
- login_as :user
-end
-
When /^I visit new project page$/ do
visit new_project_path
end
@@ -65,10 +59,6 @@ Given /^I visit project "(.*?)" network page$/ do |arg1|
visit graph_project_path(project)
end
-Given /^show me page$/ do
- save_and_open_page
-end
-
Given /^page should have network graph$/ do
page.should have_content "Project Network Graph"
within ".graph" do
diff --git a/features/step_definitions/visit_steps.rb b/features/step_definitions/visit_steps.rb
new file mode 100644
index 00000000000..35fc6d44a15
--- /dev/null
+++ b/features/step_definitions/visit_steps.rb
@@ -0,0 +1,91 @@
+Given /^I visit project "(.*?)" issues page$/ do |arg1|
+ visit project_issues_path(Project.find_by_name(arg1))
+end
+
+Given /^I visit issue page "(.*?)"$/ do |arg1|
+ issue = Issue.find_by_title(arg1)
+ visit project_issue_path(issue.project, issue)
+end
+
+Given /^I visit project "(.*?)" merge requests page$/ do |arg1|
+ visit project_merge_requests_path(Project.find_by_name(arg1))
+end
+
+Given /^I visit merge request page "(.*?)"$/ do |arg1|
+ mr = MergeRequest.find_by_title(arg1)
+ visit project_merge_request_path(mr.project, mr)
+end
+
+Given /^I visit project "(.*?)" milestones page$/ do |arg1|
+ @project = Project.find_by_name(arg1)
+ visit project_milestones_path(@project)
+end
+
+Given /^I visit project commits page$/ do
+ visit project_commits_path(@project)
+end
+
+Given /^I visit compare refs page$/ do
+ visit compare_project_commits_path(@project)
+end
+
+Given /^I visit project branches page$/ do
+ visit branches_project_repository_path(@project)
+end
+
+Given /^I visit project commit page$/ do
+ visit project_commit_path(@project, ValidCommit::ID)
+end
+
+Given /^I visit project tags page$/ do
+ visit tags_project_repository_path(@project)
+end
+
+Given /^I click on commit link$/ do
+ visit project_commit_path(@project, ValidCommit::ID)
+end
+
+Given /^I visit project source page$/ do
+ visit tree_project_ref_path(@project, @project.root_ref)
+end
+
+Given /^I visit project source page for "(.*?)"$/ do |arg1|
+ visit tree_project_ref_path(@project, arg1)
+end
+
+Given /^I visit blob file from repo$/ do
+ visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)
+end
+
+Given /^I visit project "(.*?)" team page$/ do |arg1|
+ visit team_project_path(Project.find_by_name(arg1))
+end
+
+Given /^I visit project wiki page$/ do
+ visit project_wiki_path(@project, :index)
+end
+
+Given /^I visit profile page$/ do
+ visit profile_path
+end
+
+Given /^I visit profile token page$/ do
+ visit profile_token_path
+end
+
+Given /^I visit profile password page$/ do
+ visit profile_password_path
+end
+
+Given /^I visit dashboard page$/ do
+ visit dashboard_path
+end
+
+Given /^I visit dashboard issues page$/ do
+ visit dashboard_issues_path
+end
+
+Given /^I visit dashboard merge requests page$/ do
+ visit dashboard_merge_requests_path
+end
+
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index 3d4fde9270f..d45d1d82d40 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -29,14 +29,24 @@ module Gitlab
# name (required) - name for new project
# code (optional) - code for new project, uses project name if not set
# path (optional) - path for new project, uses project name if not set
+ # description (optional) - short project description
+ # default_branch (optional) - 'master' by default
+ # issues_enabled (optional) - enabled by default
+ # wall_enabled (optional) - enabled by default
+ # merge_requests_enabled (optional) - enabled by default
+ # wiki_enabled (optional) - enabled by default
# Example Request
# POST /projects
post do
- project = {}
- project[:name] = params[:name]
- project[:code] = params[:code] || project[:name]
- project[:path] = params[:path] || project[:name]
- @project = Project.create_by_user(project, current_user)
+ params[:code] ||= params[:name]
+ params[:path] ||= params[:name]
+ project_attrs = {}
+ params.each_pair do |k ,v|
+ if Project.attribute_names.include? k
+ project_attrs[k] = v
+ end
+ end
+ @project = Project.create_by_user(project_attrs, current_user)
if @project.saved?
present @project, with: Entities::Project
else
diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb
index b69f4663c35..3dfb574c4d5 100644
--- a/lib/gitlab/backend/gitolite.rb
+++ b/lib/gitlab/backend/gitolite.rb
@@ -170,7 +170,7 @@ module Gitlab
def push
Dir.chdir(File.join(@local_dir, "gitolite"))
`git add -A`
- `git commit -am "Gitlab"`
+ `git commit -am "GitLab"`
`git push`
Dir.chdir(Rails.root)
diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb
index 9a07133d0b3..17f865bba70 100644
--- a/lib/gitlab/markdown.rb
+++ b/lib/gitlab/markdown.rb
@@ -1,7 +1,8 @@
module Gitlab
- # Custom parser for Gitlab-flavored Markdown
+ # Custom parser for GitLab-flavored Markdown
#
- # It replaces references in the text with links to the appropriate items in Gitlab.
+ # It replaces references in the text with links to the appropriate items in
+ # GitLab.
#
# Supported reference formats are:
# * @foo for team members
@@ -10,19 +11,20 @@ module Gitlab
# * $123 for snippets
# * 123456 for commits
#
- # Examples
+ # It also parses Emoji codes to insert images. See
+ # http://www.emoji-cheat-sheet.com/ for a list of the supported icons.
#
- # >> m = Markdown.new(...)
+ # Examples
#
- # >> m.parse("Hey @david, can you fix this?")
+ # >> gfm("Hey @david, can you fix this?")
# => "Hey <a href="/gitlab/team_members/1">@david</a>, can you fix this?"
#
- # >> m.parse("Commit 35d5f7c closes #1234")
+ # >> gfm("Commit 35d5f7c closes #1234")
# => "Commit <a href="/gitlab/commits/35d5f7c">35d5f7c</a> closes <a href="/gitlab/issues/1234">#1234</a>"
- class Markdown
- include Rails.application.routes.url_helpers
- include ActionView::Helpers
-
+ #
+ # >> gfm(":trollface:")
+ # => "<img alt=\":trollface:\" class=\"emoji\" src=\"/images/trollface.png" title=\":trollface:\" />
+ module Markdown
REFERENCE_PATTERN = %r{
([^\w&;])? # Prefix (1)
( # Reference (2)
@@ -33,15 +35,52 @@ module Gitlab
([^\w&;])? # Suffix (6)
}x.freeze
+ EMOJI_PATTERN = %r{(:(\S+):)}.freeze
+
attr_reader :html_options
- def initialize(project, html_options = {})
- @project = project
+ # Public: Parse the provided text with GitLab-Flavored Markdown
+ #
+ # text - the source text
+ # html_options - extra options for the reference links as given to link_to
+ #
+ # Note: reference links will only be generated if @project is set
+ def gfm(text, html_options = {})
+ return text if text.nil?
+ return text if @project.nil?
+
@html_options = html_options
+
+ # Extract pre blocks so they are not altered
+ # from http://github.github.com/github-flavored-markdown/
+ extractions = {}
+ text.gsub!(%r{<pre>.*?</pre>|<code>.*?</code>}m) do |match|
+ md5 = Digest::MD5.hexdigest(match)
+ extractions[md5] = match
+ "{gfm-extraction-#{md5}}"
+ end
+
+ # TODO: add popups with additional information
+
+ text = parse(text)
+
+ # Insert pre block extractions
+ text.gsub!(/\{gfm-extraction-(\h{32})\}/) do
+ extractions[$1]
+ end
+
+ sanitize text.html_safe, attributes: ActionView::Base.sanitized_allowed_attributes + %w(id class)
end
+ private
+
+ # Private: Parses text for references and emoji
+ #
+ # text - Text to parse
+ #
+ # Returns parsed text
def parse(text)
- text.gsub(REFERENCE_PATTERN) do |match|
+ text = text.gsub(REFERENCE_PATTERN) do |match|
prefix = $1 || ''
reference = $2
identifier = $3 || $4 || $5
@@ -53,9 +92,26 @@ module Gitlab
match
end
end
+
+ text = text.gsub(EMOJI_PATTERN) do |match|
+ if valid_emoji?($2)
+ image_tag("emoji/#{$2}.png", size: "20x20", class: 'emoji', title: $1, alt: $1)
+ else
+ match
+ end
+ end
+
+ text
end
- private
+ # Private: Checks if an emoji icon exists in the image asset directory
+ #
+ # emoji - Identifier of the emoji as a string (e.g., "+1", "heart")
+ #
+ # Returns boolean
+ def valid_emoji?(emoji)
+ File.exists?(Rails.root.join('app', 'assets', 'images', 'emoji', "#{emoji}.png"))
+ end
# Private: Dispatches to a dedicated processing method based on reference
#
diff --git a/lib/hooks/post-receive b/lib/hooks/post-receive
index d38bd13e19d..a4fa9f1c234 100755
--- a/lib/hooks/post-receive
+++ b/lib/hooks/post-receive
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# This file was placed here by Gitlab. It makes sure that your pushed commits
+# This file was placed here by GitLab. It makes sure that your pushed commits
# will be processed properly.
while read oldrev newrev ref
diff --git a/lib/support/aws/debian_ubuntu_aws.sh b/lib/support/aws/debian_ubuntu_aws.sh
deleted file mode 100644
index c4103ec9195..00000000000
--- a/lib/support/aws/debian_ubuntu_aws.sh
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/bin/sh
-
-# ABOUT
-# This script performs a complete installation of Gitlab (master branch).
-# Is can be run with one command without needing _any_ user input after that.
-# This script only works on Amazon Web Services (AWS).
-# The operating system used is Ubuntu 12.04 64bit.
-
-# HOWTO
-# Signup for AWS, free tier are available at http://aws.amazon.com/free/
-# Go to EC2 tab in the AWS console EC2 https://console.aws.amazon.com/ec2/home
-# Click the 'Launch Instance' button
-# Select: 'Quick launch wizard' and continue
-# Choose a key pair => Create New => Name it => Download it
-# Choose a Launch Configuration => Select 'More Amazon Marketplace Images'
-# Press 'Continue'
-# Enter 'ubuntu/images/ubuntu-precise-12.04-amd64-server-20120424' and press 'Search'
-# Select the only result (ami-3c994355) and press 'Continue'
-# Press 'Edit details' if you want to modify something, for example make the type 'c1.medium' to make the install faster.
-# Press the 'Launch' button
-# Press 'Close'
-# Click 'Security Groups' under the left hand menu 'NETWORK & SECURITY'
-# Select the newly create seciruty group, probably named 'quicklaunch-1'
-# Click on the Inbound tab
-# In the 'Create a new rule' dropdown select 'HTTP'
-# Press 'Add Rule'
-# In the 'Create a new rule' dropdown select 'HTTPS'
-# Press 'Add Rule'
-# Press 'Apply Rule Changes'
-# Give the following command in your local terminal while suptituting the UPPERCASE items
-# 'ssh -i LOCATION_OF_AWS_KEY_PAIR_PRIVATE_KEY PUBLIC_DNS_OF_THE_NEW_SERVER'
-# Execute the curl command below and when its ready follow the printed 'Log in instuctions'
-# curl https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/aws/debian_ubuntu_aws.sh | sh
-
-# Prevent fingerprint prompt for localhost in step 1 to 3.
-echo "Host localhost
- StrictHostKeyChecking no
- UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config
-
-# Existing script for Step 1 to 3
-curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh
-
-# Install MySQL
-sudo apt-get install -y makepasswd # Needed to create a unique password non-interactively.
-userPassword=$(makepasswd --char=10) # Generate a random MySQL password
-# Note that the lines below creates a cleartext copy of the random password in /var/cache/debconf/passwords.dat
-# This file is normally only readable by root and the password will be deleted by the package management system after install.
-echo mysql-server mysql-server/root_password password $userPassword | sudo debconf-set-selections
-echo mysql-server mysql-server/root_password_again password $userPassword | sudo debconf-set-selections
-sudo apt-get install -y mysql-server
-
-# Gitlab install
-sudo gem install charlock_holmes --version '0.6.8'
-sudo pip install pygments
-sudo gem install bundler
-sudo su -l gitlab -c "git clone git://github.com/gitlabhq/gitlabhq.git gitlab" # Using master everywhere.
-sudo su -l gitlab -c "cd gitlab && mkdir tmp"
-sudo su -l gitlab -c "cd gitlab/config && cp gitlab.yml.example gitlab.yml"
-sudo su -l gitlab -c "cd gitlab/config && cp database.yml.example database.yml"
-sudo sed -i 's/"secure password"/"'$userPassword'"/' /home/gitlab/gitlab/config/database.yml # Insert the mysql root password.
-sudo su -l gitlab -c "cd gitlab && bundle install --without development test --deployment"
-sudo su -l gitlab -c "cd gitlab && bundle exec rake gitlab:app:setup RAILS_ENV=production"
-
-# Setup gitlab hooks
-sudo cp /home/gitlab/gitlab/lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive
-sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive
-
-# Set the first occurrence of host in the Gitlab config to the publicly available domain name
-sudo sed -i '0,/host/s/localhost/'`wget -qO- http://instance-data/latest/meta-data/public-hostname`'/' /home/gitlab/gitlab/config/gitlab.yml
-
-# Gitlab installation test (optional)
-# sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production
-# sudo -u gitlab bundle exec rails s -e production
-# sudo -u gitlab bundle exec rake environment resque:work QUEUE=* RAILS_ENV=production BACKGROUND=no
-
-# Install and configure Nginx
-sudo apt-get install -y nginx
-sudo cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-available/gitlab
-sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
-sudo sed -i 's/YOUR_SERVER_IP/'`wget -qO- http://instance-data/latest/meta-data/local-ipv4`'/' /etc/nginx/sites-available/gitlab # Set private ip address (public won't work).
-sudo sed -i 's/YOUR_SERVER_FQDN/'`wget -qO- http://instance-data/latest/meta-data/public-hostname`'/' /etc/nginx/sites-available/gitlab # Set public dns domain name.
-
-# Configure Unicorn
-sudo -u gitlab cp /home/gitlab/gitlab/config/unicorn.rb.orig /home/gitlab/gitlab/config/unicorn.rb
-
-# Create a Gitlab service
-sudo cp /home/gitlab/gitlab/lib/support/init-gitlab /etc/init.d/gitlab
-sudo chmod +x /etc/init.d/gitlab && sudo update-rc.d gitlab defaults
-
-## Gitlab service commands (unicorn and resque)
-## restart doesn't restart resque, only start/stop effect it.
-sudo -u gitlab service gitlab start
-# sudo -u gitlab service gitlab restart
-# sudo -u gitlab service gitlab stop
-
-# nginx Service commands
-# sudo service nginx start
-sudo service nginx restart
-# sudo service nginx stop
-
-# Manual startup commands for troubleshooting when the service commands do not work
-# sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D
-# sudo su -l gitlab -c "cd gitlab && ./resque.sh"
-
-# Monitoring commands
-# sudo tail -f /var/log/nginx/access.log;
-# sudo tail -f /var/log/nginx/error.log;
-
-# Go to gitlab directory by default on next login.
-echo 'cd /home/gitlab/gitlab' >> /home/ubuntu/.bashrc
-
-echo ''
-echo '###########################################'
-echo '# Log in instuctions #'
-echo '###########################################'
-echo ''
-echo "Surf to this Gitlab installation in your browser:"
-echo "http://`wget -qO- http://instance-data/latest/meta-data/public-hostname`/"
-echo ''
-echo 'and login with the following Email and Password:'
-echo 'admin@local.host'
-echo '5iveL!fe' \ No newline at end of file
diff --git a/lib/support/init-gitlab b/lib/support/init-gitlab
deleted file mode 100644
index f146e80f4a8..00000000000
--- a/lib/support/init-gitlab
+++ /dev/null
@@ -1,54 +0,0 @@
-#! /bin/bash
-### BEGIN INIT INFO
-# Provides: gitlab
-# Required-Start: $local_fs $remote_fs $network $syslog redis-server
-# Required-Stop: $local_fs $remote_fs $network $syslog
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: GitLab git repository management
-# Description: GitLab git repository management
-### END INIT INFO
-
-DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D"
-NAME=unicorn
-DESC="Gitlab service"
-PID=/home/gitlab/gitlab/tmp/pids/unicorn.pid
-RESQUE_PID=/home/gitlab/gitlab/tmp/pids/resque_worker.pid
-
-case "$1" in
- start)
- CD_TO_APP_DIR="cd /home/gitlab/gitlab"
- START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS"
- START_RESQUE_PROCESS="./resque.sh"
-
- echo -n "Starting $DESC: "
- if [ `whoami` = root ]; then
- sudo -u gitlab sh -l -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS"
- else
- $CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS
- fi
- echo "$NAME."
- ;;
- stop)
- echo -n "Stopping $DESC: "
- kill -QUIT `cat $PID`
- kill -QUIT `cat $RESQUE_PID`
- echo "$NAME."
- ;;
- restart)
- echo -n "Restarting $DESC: "
- kill -USR2 `cat $PID`
- echo "$NAME."
- ;;
- reload)
- echo -n "Reloading $DESC configuration: "
- kill -HUP `cat $PID`
- echo "$NAME."
- ;;
- *)
- echo "Usage: $NAME {start|stop|restart|reload}" >&2
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/lib/support/nginx-gitlab b/lib/support/nginx-gitlab
deleted file mode 100644
index fa15d2018c4..00000000000
--- a/lib/support/nginx-gitlab
+++ /dev/null
@@ -1,33 +0,0 @@
-upstream gitlab {
- server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket;
-}
-
-server {
- listen YOUR_SERVER_IP:80; # e.g., listen 192.168.1.1:80;
- server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com;
- root /home/gitlab/gitlab/public;
-
- # individual nginx logs for this gitlab vhost
- access_log /var/log/nginx/gitlab_access.log;
- error_log /var/log/nginx/gitlab_error.log;
-
- location / {
- # serve static files from defined root folder;.
- # @gitlab is a named location for the upstream fallback, see below
- try_files $uri $uri/index.html $uri.html @gitlab;
- }
-
- # if a file, which is not found in the root folder is requested,
- # then the proxy pass the request to the upsteam (gitlab unicorn)
- location @gitlab {
- proxy_redirect off;
-
- # you need to change this to "https", if you set "ssl" directive to "on"
- proxy_set_header X-FORWARDED_PROTO http;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
-
- proxy_pass http://gitlab;
- }
-}
-
diff --git a/lib/tasks/bulk_import.rake b/lib/tasks/bulk_import.rake
index 607250f1770..5941eadb970 100644
--- a/lib/tasks/bulk_import.rake
+++ b/lib/tasks/bulk_import.rake
@@ -1,8 +1,9 @@
IMPORT_DIRECTORY = 'import_projects'
-REPOSITORY_DIRECTORY = '/home/git/repositories'
desc "Imports existing Git repos into new projects from the import_projects folder"
task :import_projects, [:email] => :environment do |t, args|
+ REPOSITORY_DIRECTORY = Gitlab.config.git_base_path
+
user_email = args.email
repos_to_import = Dir.glob("#{IMPORT_DIRECTORY}/*")
diff --git a/lib/tasks/gitlab/write_hook.rake b/lib/tasks/gitlab/write_hook.rake
index 9ec9c8383e2..5e9fc8eb3d1 100644
--- a/lib/tasks/gitlab/write_hook.rake
+++ b/lib/tasks/gitlab/write_hook.rake
@@ -1,6 +1,6 @@
namespace :gitlab do
namespace :gitolite do
- desc "GITLAB | Write GITLAB hook for gitolite"
+ desc "GITLAB | Write GitLab hook for gitolite"
task :write_hooks => :environment do
gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common")
gitlab_hooks_path = Rails.root.join("lib", "hooks")
diff --git a/spec/factories.rb b/spec/factories.rb
index 2e4acf39461..92790a3fdb7 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -11,6 +11,9 @@ module Factory
def self.new(type, *args)
FactoryGirl.build(type, *args)
end
+ def self.attributes(type, *args)
+ FactoryGirl.attributes_for(type, *args)
+ end
end
FactoryGirl.define do
@@ -28,7 +31,7 @@ FactoryGirl.define do
email { Faker::Internet.email }
name
password "123456"
- password_confirmation "123456"
+ password_confirmation { password }
trait :admin do
admin true
diff --git a/spec/factories_spec.rb b/spec/factories_spec.rb
index 5760aad423b..5ccc17bddc9 100644
--- a/spec/factories_spec.rb
+++ b/spec/factories_spec.rb
@@ -1,91 +1,9 @@
require 'spec_helper'
-describe "Factories" do
- describe 'User' do
- it "builds a valid instance" do
- build(:user).should be_valid
- end
-
- it "builds a valid admin instance" do
- build(:admin).should be_valid
- end
- end
-
- describe 'Project' do
- it "builds a valid instance" do
- build(:project).should be_valid
- end
- end
-
- describe 'Issue' do
- it "builds a valid instance" do
- build(:issue).should be_valid
- end
-
- it "builds a valid closed instance" do
- build(:closed_issue).should be_valid
- end
- end
-
- describe 'MergeRequest' do
- it "builds a valid instance" do
- build(:merge_request).should be_valid
- end
- end
-
- describe 'Note' do
- it "builds a valid instance" do
- build(:note).should be_valid
- end
- end
-
- describe 'Event' do
- it "builds a valid instance" do
- build(:event).should be_valid
- end
- end
-
- describe 'Key' do
- it "builds a valid instance" do
- build(:key).should be_valid
- end
-
- it "builds a valid deploy key instance" do
- build(:deploy_key).should be_valid
- end
-
- it "builds a valid personal key instance" do
- build(:personal_key).should be_valid
- end
- end
-
- describe 'Milestone' do
- it "builds a valid instance" do
- build(:milestone).should be_valid
- end
- end
-
- describe 'SystemHook' do
- it "builds a valid instance" do
- build(:system_hook).should be_valid
- end
- end
-
- describe 'ProjectHook' do
- it "builds a valid instance" do
- build(:project_hook).should be_valid
- end
- end
-
- describe 'Wiki' do
- it "builds a valid instance" do
- build(:wiki).should be_valid
- end
- end
-
- describe 'Snippet' do
- it "builds a valid instance" do
- build(:snippet).should be_valid
+FactoryGirl.factories.map(&:name).each do |factory_name|
+ describe "#{factory_name} factory" do
+ it 'should be valid' do
+ build(factory_name).should be_valid
end
end
end
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index 00164e0cdd7..3e7a02c6e35 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -208,6 +208,46 @@ describe GitlabMarkdownHelper do
gfm(actual).should match(expected)
end
end
+
+ describe "emoji" do
+ it "matches at the start of a string" do
+ gfm(":+1:").should match(/<img/)
+ end
+
+ it "matches at the end of a string" do
+ gfm("This gets a :-1:").should match(/<img/)
+ end
+
+ it "matches with adjacent text" do
+ gfm("+1 (:+1:)").should match(/<img/)
+ end
+
+ it "has a title attribute" do
+ gfm(":-1:").should match(/title=":-1:"/)
+ end
+
+ it "has an alt attribute" do
+ gfm(":-1:").should match(/alt=":-1:"/)
+ end
+
+ it "has an emoji class" do
+ gfm(":+1:").should match('class="emoji"')
+ end
+
+ it "sets height and width" do
+ actual = gfm(":+1:")
+ actual.should match(/width="20"/)
+ actual.should match(/height="20"/)
+ end
+
+ it "keeps whitespace intact" do
+ gfm("This deserves a :+1: big time.").should match(/deserves a <img.+\/> big time/)
+ end
+
+ it "ignores invalid emoji" do
+ gfm(":invalid-emoji:").should_not match(/<img/)
+ end
+ end
end
describe "#link_to_gfm" do
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index cf50b429f23..4a9f142e50d 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -24,7 +24,7 @@ describe Notify do
end
it 'has the correct subject' do
- should have_subject /^gitlab \| Account was created for you$/
+ should have_subject /^gitlab \| Account was created for you$/i
end
it 'contains the new user\'s login name' do
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 69829a4d13d..ca6307e72b1 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -7,6 +7,7 @@ describe Issue do
describe "Validation" do
it { should ensure_length_of(:description).is_within(0..2000) }
+ it { should ensure_inclusion_of(:closed).in_array([true, false]) }
end
describe 'modules' do
diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb
index fa15fc8f560..f0f0f88303f 100644
--- a/spec/models/milestone_spec.rb
+++ b/spec/models/milestone_spec.rb
@@ -9,6 +9,7 @@ describe Milestone do
describe "Validation" do
it { should validate_presence_of(:title) }
it { should validate_presence_of(:project_id) }
+ it { should ensure_inclusion_of(:closed).in_array([true, false]) }
end
let(:milestone) { Factory :milestone }
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index ffaf442d9a4..dddfd34c499 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -35,6 +35,16 @@ describe Note do
note = Factory(:note, note: "-1 for this")
note.should_not be_upvote
end
+
+ it "recognizes a +1 emoji as a vote" do
+ note = build(:note, note: ":+1: for this")
+ note.should be_upvote
+ end
+
+ it "recognizes a neutral emoji note" do
+ note = build(:note, note: "I would :+1: this, but I don't want to")
+ note.should_not be_upvote
+ end
end
let(:project) { create(:project) }
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 5add7ff88a9..756f69ded56 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -37,6 +37,10 @@ describe Project do
# TODO: Formats
it { should validate_presence_of(:owner) }
+ it { should ensure_inclusion_of(:issues_enabled).in_array([true, false]) }
+ it { should ensure_inclusion_of(:wall_enabled).in_array([true, false]) }
+ it { should ensure_inclusion_of(:merge_requests_enabled).in_array([true, false]) }
+ it { should ensure_inclusion_of(:wiki_enabled).in_array([true, false]) }
it "should not allow new projects beyond user limits" do
project.stub(:owner).and_return(double(can_create_project?: false, projects_limit: 1))
@@ -239,7 +243,7 @@ describe Project do
end
end
- describe :update_merge_requests do
+ describe :update_merge_requests do
let(:project) { Factory :project }
before do
@@ -259,7 +263,7 @@ describe Project do
@merge_request.closed.should be_true
end
- it "should update merge request commits with new one if pushed to source branch" do
+ it "should update merge request commits with new one if pushed to source branch" do
@merge_request.last_commit.should == nil
project.update_merge_requests("8716fc78f3c65bbf7bcf7b574febd583bc5d2812", "bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a", "refs/heads/master", @key.user)
@merge_request.reload
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index ca34f07df7f..081767543e2 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -31,36 +31,46 @@ describe User do
it { should respond_to(:private_token) }
end
- it "should return valid identifier" do
- user = User.new(email: "test@mail.com")
- user.identifier.should == "test_mail_com"
- end
+ describe '#identifier' do
+ it "should return valid identifier" do
+ user = build(:user, email: "test@mail.com")
+ user.identifier.should == "test_mail_com"
+ end
- it "should return identifier without + sign" do
- user = User.new(email: "test+foo@mail.com")
- user.identifier.should == "test_foo_mail_com"
- end
+ it "should return identifier without + sign" do
+ user = build(:user, email: "test+foo@mail.com")
+ user.identifier.should == "test_foo_mail_com"
+ end
- it "should execute callback when force_random_password specified" do
- user = User.new(email: "test@mail.com", force_random_password: true)
- user.should_receive(:generate_password)
- user.save
+ it "should conform to Gitolite's required identifier pattern" do
+ user = build(:user, email: "_test@example.com")
+ user.identifier.should == 'test_example_com'
+ end
end
- it "should not generate password by default" do
- user = Factory(:user, password: 'abcdefg', password_confirmation: 'abcdefg')
- user.password.should == 'abcdefg'
- end
+ describe '#generate_password' do
+ it "should execute callback when force_random_password specified" do
+ user = build(:user, force_random_password: true)
+ user.should_receive(:generate_password)
+ user.save
+ end
+
+ it "should not generate password by default" do
+ user = create(:user, password: 'abcdefg')
+ user.password.should == 'abcdefg'
+ end
- it "should generate password when forcing random password" do
- Devise.stub(:friendly_token).and_return('123456789')
- user = User.create(email: "test1@mail.com", force_random_password: true)
- user.password.should == user.password_confirmation
- user.password.should == '12345678'
+ it "should generate password when forcing random password" do
+ Devise.stub(:friendly_token).and_return('123456789')
+ user = create(:user, password: 'abcdefg', force_random_password: true)
+ user.password.should == '12345678'
+ end
end
- it "should have authentication token" do
- user = Factory(:user)
- user.authentication_token.should_not == ""
+ describe 'authentication token' do
+ it "should have authentication token" do
+ user = Factory(:user)
+ user.authentication_token.should_not be_blank
+ end
end
end
diff --git a/spec/models/users_project_spec.rb b/spec/models/users_project_spec.rb
index 3197ba6eb6b..33cb358e7bd 100644
--- a/spec/models/users_project_spec.rb
+++ b/spec/models/users_project_spec.rb
@@ -10,7 +10,7 @@ describe UsersProject do
let!(:users_project) { create(:users_project) }
it { should validate_presence_of(:user_id) }
- it { should validate_uniqueness_of(:user_id).scoped_to(:project_id) }
+ it { should validate_uniqueness_of(:user_id).scoped_to(:project_id).with_message(/already exists/) }
it { should validate_presence_of(:project_id) }
end
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index cc6843ccb66..1373748f50d 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -27,38 +27,40 @@ describe Gitlab::API do
describe "POST /projects" do
it "should create new project without code and path" do
- lambda {
- name = "foo"
- post api("/projects", user), {
- name: name
- }
- response.status.should == 201
- json_response["name"].should == name
- json_response["code"].should == name
- json_response["path"].should == name
- }.should change{Project.count}.by(1)
- end
- it "should create new project" do
- lambda {
- name = "foo"
- path = "bar"
- code = "bazz"
- post api("/projects", user), {
- code: code,
- path: path,
- name: name
- }
- response.status.should == 201
- json_response["name"].should == name
- json_response["path"].should == path
- json_response["code"].should == code
- }.should change{Project.count}.by(1)
- end
- it "should not create project without name" do
- lambda {
- post api("/projects", user)
- response.status.should == 404
- }.should_not change{Project.count}
+ expect { post api("/projects", user), name: 'foo' }.to change {Project.count}.by(1)
+ end
+
+ it "should not create new project without name" do
+ expect { post api("/projects", user) }.to_not change {Project.count}
+ end
+
+ it "should respond with 201 on success" do
+ post api("/projects", user), name: 'foo'
+ response.status.should == 201
+ end
+
+ it "should repsond with 404 on failure" do
+ post api("/projects", user)
+ response.status.should == 404
+ end
+
+ it "should assign attributes to project" do
+ project = Factory.attributes(:project, {
+ path: 'path',
+ code: 'code',
+ description: Faker::Lorem.sentence,
+ default_branch: 'stable',
+ issues_enabled: false,
+ wall_enabled: false,
+ merge_requests_enabled: false,
+ wiki_enabled: false
+ })
+
+ post api("/projects", user), project
+
+ project.each_pair do |k,v|
+ json_response[k.to_s].should == v
+ end
end
end
diff --git a/spec/roles/repository_spec.rb b/spec/roles/repository_spec.rb
new file mode 100644
index 00000000000..0fda57a3e27
--- /dev/null
+++ b/spec/roles/repository_spec.rb
@@ -0,0 +1,72 @@
+require 'spec_helper'
+
+describe Project, "Repository" do
+ let(:project) { build(:project) }
+
+ describe "#empty_repo?" do
+ it "should return true if the repo doesn't exist" do
+ project.stub(repo_exists?: false, has_commits?: true)
+ project.should be_empty_repo
+ end
+
+ it "should return true if the repo has commits" do
+ project.stub(repo_exists?: true, has_commits?: false)
+ project.should be_empty_repo
+ end
+
+ it "should return false if the repo exists and has commits" do
+ project.stub(repo_exists?: true, has_commits?: true)
+ project.should_not be_empty_repo
+ end
+ end
+
+ describe "#discover_default_branch" do
+ let(:master) { double(name: 'master') }
+ let(:stable) { double(name: 'stable') }
+
+ it "returns 'master' when master exists" do
+ project.should_receive(:heads).and_return([stable, master])
+ project.discover_default_branch.should == 'master'
+ end
+
+ it "returns non-master when master exists but default branch is set to something else" do
+ project.default_branch = 'stable'
+ project.should_receive(:heads).and_return([stable, master])
+ project.discover_default_branch.should == 'stable'
+ end
+
+ it "returns a non-master branch when only one exists" do
+ project.should_receive(:heads).and_return([stable])
+ project.discover_default_branch.should == 'stable'
+ end
+
+ it "returns nil when no branch exists" do
+ project.should_receive(:heads).and_return([])
+ project.discover_default_branch.should be_nil
+ end
+ end
+
+ describe "#root_ref" do
+ it "returns default_branch when set" do
+ project.default_branch = 'stable'
+ project.root_ref.should == 'stable'
+ end
+
+ it "returns 'master' when default_branch is nil" do
+ project.default_branch = nil
+ project.root_ref.should == 'master'
+ end
+ end
+
+ describe "#root_ref?" do
+ it "returns true when branch is root_ref" do
+ project.default_branch = 'stable'
+ project.root_ref?('stable').should be_true
+ end
+
+ it "returns false when branch is not root_ref" do
+ project.default_branch = nil
+ project.root_ref?('stable').should be_false
+ end
+ end
+end
diff --git a/tmp/.gitkeep b/tmp/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tmp/.gitkeep