From f930fd2e005ee57b283dd5631d06d412a336c699 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Tue, 24 Jan 2017 13:00:35 -0800 Subject: [PATCH] Add an Emoji Typeahead Summary: This adds a more complete emoji datasource, with a typeahead and autocomplete. It works by pulling in a raw datasource from EmojiOne (I chose Unicode 8, but they have a Unicode 9 datasource as well) and transforming it for speed/need. If we build more robustness or an actual picker into the Remarkup bar, having the additional keywords, etc, might be important. When Unicode 9 support is more prevalent, we should only need to update the single file. Tossing up as a proof of concept on engineering direction. Also I can't quite get the autocomplete to complete. Test Plan: Test UIExamples, Autocomplete, and TypeaheadSource Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12139 Differential Revision: https://secure.phabricator.com/D17244 --- resources/celerity/map.php | 16 +- resources/emoji/manifest.json | 1626 +++++++++++++++++ scripts/celerity/generate_emoji.php | 48 + src/__phutil_library_map__.php | 4 + .../markup/PhabricatorEmojiRemarkupRule.php | 7 + .../typeahead/PhabricatorEmojiDatasource.php | 45 + .../uiexample/examples/MacroEmojiExample.php | 47 + .../control/PhabricatorRemarkupControl.php | 7 + webroot/rsrc/js/phuix/PHUIXAutocomplete.js | 1 - 9 files changed, 1792 insertions(+), 9 deletions(-) create mode 100644 resources/emoji/manifest.json create mode 100755 scripts/celerity/generate_emoji.php create mode 100644 src/applications/macro/typeahead/PhabricatorEmojiDatasource.php create mode 100644 src/applications/uiexample/examples/MacroEmojiExample.php diff --git a/resources/celerity/map.php b/resources/celerity/map.php index ca35a252f8..8dba2f10e8 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -540,7 +540,7 @@ return array( 'rsrc/js/phui/behavior-phui-tab-group.js' => '0a0b10e9', 'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8', 'rsrc/js/phuix/PHUIXActionView.js' => 'b3465b9b', - 'rsrc/js/phuix/PHUIXAutocomplete.js' => '6d86ce8b', + 'rsrc/js/phuix/PHUIXAutocomplete.js' => '7c492cd2', 'rsrc/js/phuix/PHUIXDropdownMenu.js' => '8018ee50', 'rsrc/js/phuix/PHUIXFormControl.js' => 'bbece68d', 'rsrc/js/phuix/PHUIXIconView.js' => 'bff6884b', @@ -899,7 +899,7 @@ return array( 'phui-workpanel-view-css' => 'a3a63478', 'phuix-action-list-view' => 'b5c256b8', 'phuix-action-view' => 'b3465b9b', - 'phuix-autocomplete' => '6d86ce8b', + 'phuix-autocomplete' => '7c492cd2', 'phuix-dropdown-menu' => '8018ee50', 'phuix-form-control-view' => 'bbece68d', 'phuix-icon-view' => 'bff6884b', @@ -1423,12 +1423,6 @@ return array( 'javelin-typeahead', 'javelin-uri', ), - '6d86ce8b' => array( - 'javelin-install', - 'javelin-dom', - 'phuix-icon-view', - 'phabricator-prefab', - ), '70baed2f' => array( 'javelin-install', 'javelin-dom', @@ -1496,6 +1490,12 @@ return array( 'owners-path-editor', 'javelin-behavior', ), + '7c492cd2' => array( + 'javelin-install', + 'javelin-dom', + 'phuix-icon-view', + 'phabricator-prefab', + ), '7cbe244b' => array( 'javelin-install', 'javelin-util', diff --git a/resources/emoji/manifest.json b/resources/emoji/manifest.json new file mode 100644 index 0000000000..3c12148e34 --- /dev/null +++ b/resources/emoji/manifest.json @@ -0,0 +1,1626 @@ +{ + "grinning": "\ud83d\ude00", + "grimacing": "\ud83d\ude2c", + "grin": "\ud83d\ude01", + "joy": "\ud83d\ude02", + "smiley": "\ud83d\ude03", + "smile": "\ud83d\ude04", + "sweat_smile": "\ud83d\ude05", + "laughing": "\ud83d\ude06", + "innocent": "\ud83d\ude07", + "wink": "\ud83d\ude09", + "blush": "\ud83d\ude0a", + "slight_smile": "\ud83d\ude42", + "upside_down": "\ud83d\ude43", + "relaxed": "\u263a", + "yum": "\ud83d\ude0b", + "relieved": "\ud83d\ude0c", + "heart_eyes": "\ud83d\ude0d", + "kissing_heart": "\ud83d\ude18", + "kissing": "\ud83d\ude17", + "kissing_smiling_eyes": "\ud83d\ude19", + "kissing_closed_eyes": "\ud83d\ude1a", + "stuck_out_tongue_winking_eye": "\ud83d\ude1c", + "stuck_out_tongue_closed_eyes": "\ud83d\ude1d", + "stuck_out_tongue": "\ud83d\ude1b", + "money_mouth": "\ud83e\udd11", + "nerd": "\ud83e\udd13", + "sunglasses": "\ud83d\ude0e", + "hugging": "\ud83e\udd17", + "smirk": "\ud83d\ude0f", + "no_mouth": "\ud83d\ude36", + "neutral_face": "\ud83d\ude10", + "expressionless": "\ud83d\ude11", + "unamused": "\ud83d\ude12", + "rolling_eyes": "\ud83d\ude44", + "thinking": "\ud83e\udd14", + "flushed": "\ud83d\ude33", + "disappointed": "\ud83d\ude1e", + "worried": "\ud83d\ude1f", + "angry": "\ud83d\ude20", + "rage": "\ud83d\ude21", + "pensive": "\ud83d\ude14", + "confused": "\ud83d\ude15", + "slight_frown": "\ud83d\ude41", + "frowning2": "\u2639", + "persevere": "\ud83d\ude23", + "confounded": "\ud83d\ude16", + "tired_face": "\ud83d\ude2b", + "weary": "\ud83d\ude29", + "triumph": "\ud83d\ude24", + "open_mouth": "\ud83d\ude2e", + "scream": "\ud83d\ude31", + "fearful": "\ud83d\ude28", + "cold_sweat": "\ud83d\ude30", + "hushed": "\ud83d\ude2f", + "frowning": "\ud83d\ude26", + "anguished": "\ud83d\ude27", + "cry": "\ud83d\ude22", + "disappointed_relieved": "\ud83d\ude25", + "sleepy": "\ud83d\ude2a", + "sweat": "\ud83d\ude13", + "sob": "\ud83d\ude2d", + "dizzy_face": "\ud83d\ude35", + "astonished": "\ud83d\ude32", + "zipper_mouth": "\ud83e\udd10", + "mask": "\ud83d\ude37", + "thermometer_face": "\ud83e\udd12", + "head_bandage": "\ud83e\udd15", + "sleeping": "\ud83d\ude34", + "zzz": "\ud83d\udca4", + "poop": "\ud83d\udca9", + "smiling_imp": "\ud83d\ude08", + "imp": "\ud83d\udc7f", + "japanese_ogre": "\ud83d\udc79", + "japanese_goblin": "\ud83d\udc7a", + "skull": "\ud83d\udc80", + "ghost": "\ud83d\udc7b", + "alien": "\ud83d\udc7d", + "robot": "\ud83e\udd16", + "smiley_cat": "\ud83d\ude3a", + "smile_cat": "\ud83d\ude38", + "joy_cat": "\ud83d\ude39", + "heart_eyes_cat": "\ud83d\ude3b", + "smirk_cat": "\ud83d\ude3c", + "kissing_cat": "\ud83d\ude3d", + "scream_cat": "\ud83d\ude40", + "crying_cat_face": "\ud83d\ude3f", + "pouting_cat": "\ud83d\ude3e", + "raised_hands": "\ud83d\ude4c", + "clap": "\ud83d\udc4f", + "wave": "\ud83d\udc4b", + "thumbsup": "\ud83d\udc4d", + "thumbsdown": "\ud83d\udc4e", + "punch": "\ud83d\udc4a", + "fist": "\u270a", + "v": "\u270c", + "ok_hand": "\ud83d\udc4c", + "raised_hand": "\u270b", + "open_hands": "\ud83d\udc50", + "muscle": "\ud83d\udcaa", + "pray": "\ud83d\ude4f", + "point_up": "\u261d", + "point_up_2": "\ud83d\udc46", + "point_down": "\ud83d\udc47", + "point_left": "\ud83d\udc48", + "point_right": "\ud83d\udc49", + "middle_finger": "\ud83d\udd95", + "hand_splayed": "\ud83d\udd90", + "metal": "\ud83e\udd18", + "vulcan": "\ud83d\udd96", + "writing_hand": "\u270d", + "nail_care": "\ud83d\udc85", + "lips": "\ud83d\udc44", + "tongue": "\ud83d\udc45", + "ear": "\ud83d\udc42", + "nose": "\ud83d\udc43", + "eye": "\ud83d\udc41", + "eyes": "\ud83d\udc40", + "bust_in_silhouette": "\ud83d\udc64", + "busts_in_silhouette": "\ud83d\udc65", + "speaking_head": "\ud83d\udde3", + "baby": "\ud83d\udc76", + "boy": "\ud83d\udc66", + "girl": "\ud83d\udc67", + "man": "\ud83d\udc68", + "woman": "\ud83d\udc69", + "person_with_blond_hair": "\ud83d\udc71", + "older_man": "\ud83d\udc74", + "older_woman": "\ud83d\udc75", + "man_with_gua_pi_mao": "\ud83d\udc72", + "man_with_turban": "\ud83d\udc73", + "cop": "\ud83d\udc6e", + "construction_worker": "\ud83d\udc77", + "guardsman": "\ud83d\udc82", + "spy": "\ud83d\udd75", + "santa": "\ud83c\udf85", + "angel": "\ud83d\udc7c", + "princess": "\ud83d\udc78", + "bride_with_veil": "\ud83d\udc70", + "walking": "\ud83d\udeb6", + "runner": "\ud83c\udfc3", + "dancer": "\ud83d\udc83", + "dancers": "\ud83d\udc6f", + "couple": "\ud83d\udc6b", + "two_men_holding_hands": "\ud83d\udc6c", + "two_women_holding_hands": "\ud83d\udc6d", + "bow": "\ud83d\ude47", + "information_desk_person": "\ud83d\udc81", + "no_good": "\ud83d\ude45", + "ok_woman": "\ud83d\ude46", + "raising_hand": "\ud83d\ude4b", + "person_with_pouting_face": "\ud83d\ude4e", + "person_frowning": "\ud83d\ude4d", + "haircut": "\ud83d\udc87", + "massage": "\ud83d\udc86", + "couple_with_heart": "\ud83d\udc91", + "couple_ww": "\ud83d\udc69\u2764\ud83d\udc69", + "couple_mm": "\ud83d\udc68\u2764\ud83d\udc68", + "couplekiss": "\ud83d\udc8f", + "kiss_ww": "\ud83d\udc69\u2764\ud83d\udc8b\ud83d\udc69", + "kiss_mm": "\ud83d\udc68\u2764\ud83d\udc8b\ud83d\udc68", + "family": "\ud83d\udc6a", + "family_mwg": "\ud83d\udc68\ud83d\udc69\ud83d\udc67", + "family_mwgb": "\ud83d\udc68\ud83d\udc69\ud83d\udc67\ud83d\udc66", + "family_mwbb": "\ud83d\udc68\ud83d\udc69\ud83d\udc66\ud83d\udc66", + "family_mwgg": "\ud83d\udc68\ud83d\udc69\ud83d\udc67\ud83d\udc67", + "family_wwb": "\ud83d\udc69\ud83d\udc69\ud83d\udc66", + "family_wwg": "\ud83d\udc69\ud83d\udc69\ud83d\udc67", + "family_wwgb": "\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc66", + "family_wwbb": "\ud83d\udc69\ud83d\udc69\ud83d\udc66\ud83d\udc66", + "family_wwgg": "\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc67", + "family_mmb": "\ud83d\udc68\ud83d\udc68\ud83d\udc66", + "family_mmg": "\ud83d\udc68\ud83d\udc68\ud83d\udc67", + "family_mmgb": "\ud83d\udc68\ud83d\udc68\ud83d\udc67\ud83d\udc66", + "family_mmbb": "\ud83d\udc68\ud83d\udc68\ud83d\udc66\ud83d\udc66", + "family_mmgg": "\ud83d\udc68\ud83d\udc68\ud83d\udc67\ud83d\udc67", + "womans_clothes": "\ud83d\udc5a", + "shirt": "\ud83d\udc55", + "jeans": "\ud83d\udc56", + "necktie": "\ud83d\udc54", + "dress": "\ud83d\udc57", + "bikini": "\ud83d\udc59", + "kimono": "\ud83d\udc58", + "lipstick": "\ud83d\udc84", + "kiss": "\ud83d\udc8b", + "footprints": "\ud83d\udc63", + "high_heel": "\ud83d\udc60", + "sandal": "\ud83d\udc61", + "boot": "\ud83d\udc62", + "mans_shoe": "\ud83d\udc5e", + "athletic_shoe": "\ud83d\udc5f", + "womans_hat": "\ud83d\udc52", + "tophat": "\ud83c\udfa9", + "helmet_with_cross": "\u26d1", + "mortar_board": "\ud83c\udf93", + "crown": "\ud83d\udc51", + "school_satchel": "\ud83c\udf92", + "pouch": "\ud83d\udc5d", + "purse": "\ud83d\udc5b", + "handbag": "\ud83d\udc5c", + "briefcase": "\ud83d\udcbc", + "eyeglasses": "\ud83d\udc53", + "dark_sunglasses": "\ud83d\udd76", + "ring": "\ud83d\udc8d", + "closed_umbrella": "\ud83c\udf02", + "dog": "\ud83d\udc36", + "cat": "\ud83d\udc31", + "mouse": "\ud83d\udc2d", + "hamster": "\ud83d\udc39", + "rabbit": "\ud83d\udc30", + "bear": "\ud83d\udc3b", + "panda_face": "\ud83d\udc3c", + "koala": "\ud83d\udc28", + "tiger": "\ud83d\udc2f", + "lion_face": "\ud83e\udd81", + "cow": "\ud83d\udc2e", + "pig": "\ud83d\udc37", + "pig_nose": "\ud83d\udc3d", + "frog": "\ud83d\udc38", + "octopus": "\ud83d\udc19", + "monkey_face": "\ud83d\udc35", + "see_no_evil": "\ud83d\ude48", + "hear_no_evil": "\ud83d\ude49", + "speak_no_evil": "\ud83d\ude4a", + "monkey": "\ud83d\udc12", + "chicken": "\ud83d\udc14", + "penguin": "\ud83d\udc27", + "bird": "\ud83d\udc26", + "baby_chick": "\ud83d\udc24", + "hatching_chick": "\ud83d\udc23", + "hatched_chick": "\ud83d\udc25", + "wolf": "\ud83d\udc3a", + "boar": "\ud83d\udc17", + "horse": "\ud83d\udc34", + "unicorn": "\ud83e\udd84", + "bee": "\ud83d\udc1d", + "bug": "\ud83d\udc1b", + "snail": "\ud83d\udc0c", + "beetle": "\ud83d\udc1e", + "ant": "\ud83d\udc1c", + "spider": "\ud83d\udd77", + "scorpion": "\ud83e\udd82", + "crab": "\ud83e\udd80", + "snake": "\ud83d\udc0d", + "turtle": "\ud83d\udc22", + "tropical_fish": "\ud83d\udc20", + "fish": "\ud83d\udc1f", + "blowfish": "\ud83d\udc21", + "dolphin": "\ud83d\udc2c", + "whale": "\ud83d\udc33", + "whale2": "\ud83d\udc0b", + "crocodile": "\ud83d\udc0a", + "leopard": "\ud83d\udc06", + "tiger2": "\ud83d\udc05", + "water_buffalo": "\ud83d\udc03", + "ox": "\ud83d\udc02", + "cow2": "\ud83d\udc04", + "dromedary_camel": "\ud83d\udc2a", + "camel": "\ud83d\udc2b", + "elephant": "\ud83d\udc18", + "goat": "\ud83d\udc10", + "ram": "\ud83d\udc0f", + "sheep": "\ud83d\udc11", + "racehorse": "\ud83d\udc0e", + "pig2": "\ud83d\udc16", + "rat": "\ud83d\udc00", + "mouse2": "\ud83d\udc01", + "rooster": "\ud83d\udc13", + "turkey": "\ud83e\udd83", + "dove": "\ud83d\udd4a", + "dog2": "\ud83d\udc15", + "poodle": "\ud83d\udc29", + "cat2": "\ud83d\udc08", + "rabbit2": "\ud83d\udc07", + "chipmunk": "\ud83d\udc3f", + "feet": "\ud83d\udc3e", + "dragon": "\ud83d\udc09", + "dragon_face": "\ud83d\udc32", + "cactus": "\ud83c\udf35", + "christmas_tree": "\ud83c\udf84", + "evergreen_tree": "\ud83c\udf32", + "deciduous_tree": "\ud83c\udf33", + "palm_tree": "\ud83c\udf34", + "seedling": "\ud83c\udf31", + "herb": "\ud83c\udf3f", + "shamrock": "\u2618", + "four_leaf_clover": "\ud83c\udf40", + "bamboo": "\ud83c\udf8d", + "tanabata_tree": "\ud83c\udf8b", + "leaves": "\ud83c\udf43", + "fallen_leaf": "\ud83c\udf42", + "maple_leaf": "\ud83c\udf41", + "ear_of_rice": "\ud83c\udf3e", + "hibiscus": "\ud83c\udf3a", + "sunflower": "\ud83c\udf3b", + "rose": "\ud83c\udf39", + "tulip": "\ud83c\udf37", + "blossom": "\ud83c\udf3c", + "cherry_blossom": "\ud83c\udf38", + "bouquet": "\ud83d\udc90", + "mushroom": "\ud83c\udf44", + "chestnut": "\ud83c\udf30", + "jack_o_lantern": "\ud83c\udf83", + "shell": "\ud83d\udc1a", + "spider_web": "\ud83d\udd78", + "earth_americas": "\ud83c\udf0e", + "earth_africa": "\ud83c\udf0d", + "earth_asia": "\ud83c\udf0f", + "full_moon": "\ud83c\udf15", + "waning_gibbous_moon": "\ud83c\udf16", + "last_quarter_moon": "\ud83c\udf17", + "waning_crescent_moon": "\ud83c\udf18", + "new_moon": "\ud83c\udf11", + "waxing_crescent_moon": "\ud83c\udf12", + "first_quarter_moon": "\ud83c\udf13", + "waxing_gibbous_moon": "\ud83c\udf14", + "new_moon_with_face": "\ud83c\udf1a", + "full_moon_with_face": "\ud83c\udf1d", + "first_quarter_moon_with_face": "\ud83c\udf1b", + "last_quarter_moon_with_face": "\ud83c\udf1c", + "sun_with_face": "\ud83c\udf1e", + "crescent_moon": "\ud83c\udf19", + "star": "\u2b50", + "star2": "\ud83c\udf1f", + "dizzy": "\ud83d\udcab", + "sparkles": "\u2728", + "comet": "\u2604", + "sunny": "\u2600", + "white_sun_small_cloud": "\ud83c\udf24", + "partly_sunny": "\u26c5", + "white_sun_cloud": "\ud83c\udf25", + "white_sun_rain_cloud": "\ud83c\udf26", + "cloud": "\u2601", + "cloud_rain": "\ud83c\udf27", + "thunder_cloud_rain": "\u26c8", + "cloud_lightning": "\ud83c\udf29", + "zap": "\u26a1", + "fire": "\ud83d\udd25", + "boom": "\ud83d\udca5", + "snowflake": "\u2744", + "cloud_snow": "\ud83c\udf28", + "snowman2": "\u2603", + "snowman": "\u26c4", + "wind_blowing_face": "\ud83c\udf2c", + "dash": "\ud83d\udca8", + "cloud_tornado": "\ud83c\udf2a", + "fog": "\ud83c\udf2b", + "umbrella2": "\u2602", + "umbrella": "\u2614", + "droplet": "\ud83d\udca7", + "sweat_drops": "\ud83d\udca6", + "ocean": "\ud83c\udf0a", + "green_apple": "\ud83c\udf4f", + "apple": "\ud83c\udf4e", + "pear": "\ud83c\udf50", + "tangerine": "\ud83c\udf4a", + "lemon": "\ud83c\udf4b", + "banana": "\ud83c\udf4c", + "watermelon": "\ud83c\udf49", + "grapes": "\ud83c\udf47", + "strawberry": "\ud83c\udf53", + "melon": "\ud83c\udf48", + "cherries": "\ud83c\udf52", + "peach": "\ud83c\udf51", + "pineapple": "\ud83c\udf4d", + "tomato": "\ud83c\udf45", + "eggplant": "\ud83c\udf46", + "hot_pepper": "\ud83c\udf36", + "corn": "\ud83c\udf3d", + "sweet_potato": "\ud83c\udf60", + "honey_pot": "\ud83c\udf6f", + "bread": "\ud83c\udf5e", + "cheese": "\ud83e\uddc0", + "poultry_leg": "\ud83c\udf57", + "meat_on_bone": "\ud83c\udf56", + "fried_shrimp": "\ud83c\udf64", + "egg": "\ud83c\udf73", + "hamburger": "\ud83c\udf54", + "fries": "\ud83c\udf5f", + "hotdog": "\ud83c\udf2d", + "pizza": "\ud83c\udf55", + "spaghetti": "\ud83c\udf5d", + "taco": "\ud83c\udf2e", + "burrito": "\ud83c\udf2f", + "ramen": "\ud83c\udf5c", + "stew": "\ud83c\udf72", + "fish_cake": "\ud83c\udf65", + "sushi": "\ud83c\udf63", + "bento": "\ud83c\udf71", + "curry": "\ud83c\udf5b", + "rice_ball": "\ud83c\udf59", + "rice": "\ud83c\udf5a", + "rice_cracker": "\ud83c\udf58", + "oden": "\ud83c\udf62", + "dango": "\ud83c\udf61", + "shaved_ice": "\ud83c\udf67", + "ice_cream": "\ud83c\udf68", + "icecream": "\ud83c\udf66", + "cake": "\ud83c\udf70", + "birthday": "\ud83c\udf82", + "custard": "\ud83c\udf6e", + "candy": "\ud83c\udf6c", + "lollipop": "\ud83c\udf6d", + "chocolate_bar": "\ud83c\udf6b", + "popcorn": "\ud83c\udf7f", + "doughnut": "\ud83c\udf69", + "cookie": "\ud83c\udf6a", + "beer": "\ud83c\udf7a", + "beers": "\ud83c\udf7b", + "wine_glass": "\ud83c\udf77", + "cocktail": "\ud83c\udf78", + "tropical_drink": "\ud83c\udf79", + "champagne": "\ud83c\udf7e", + "sake": "\ud83c\udf76", + "tea": "\ud83c\udf75", + "coffee": "\u2615", + "baby_bottle": "\ud83c\udf7c", + "fork_and_knife": "\ud83c\udf74", + "fork_knife_plate": "\ud83c\udf7d", + "soccer": "\u26bd", + "basketball": "\ud83c\udfc0", + "football": "\ud83c\udfc8", + "baseball": "\u26be", + "tennis": "\ud83c\udfbe", + "volleyball": "\ud83c\udfd0", + "rugby_football": "\ud83c\udfc9", + "8ball": "\ud83c\udfb1", + "golf": "\u26f3", + "golfer": "\ud83c\udfcc", + "ping_pong": "\ud83c\udfd3", + "badminton": "\ud83c\udff8", + "hockey": "\ud83c\udfd2", + "field_hockey": "\ud83c\udfd1", + "cricket": "\ud83c\udfcf", + "ski": "\ud83c\udfbf", + "skier": "\u26f7", + "snowboarder": "\ud83c\udfc2", + "ice_skate": "\u26f8", + "bow_and_arrow": "\ud83c\udff9", + "fishing_pole_and_fish": "\ud83c\udfa3", + "rowboat": "\ud83d\udea3", + "swimmer": "\ud83c\udfca", + "surfer": "\ud83c\udfc4", + "bath": "\ud83d\udec0", + "basketball_player": "\u26f9", + "lifter": "\ud83c\udfcb", + "bicyclist": "\ud83d\udeb4", + "mountain_bicyclist": "\ud83d\udeb5", + "horse_racing": "\ud83c\udfc7", + "levitate": "\ud83d\udd74", + "trophy": "\ud83c\udfc6", + "running_shirt_with_sash": "\ud83c\udfbd", + "medal": "\ud83c\udfc5", + "military_medal": "\ud83c\udf96", + "reminder_ribbon": "\ud83c\udf97", + "rosette": "\ud83c\udff5", + "ticket": "\ud83c\udfab", + "tickets": "\ud83c\udf9f", + "performing_arts": "\ud83c\udfad", + "art": "\ud83c\udfa8", + "circus_tent": "\ud83c\udfaa", + "microphone": "\ud83c\udfa4", + "headphones": "\ud83c\udfa7", + "musical_score": "\ud83c\udfbc", + "musical_keyboard": "\ud83c\udfb9", + "saxophone": "\ud83c\udfb7", + "trumpet": "\ud83c\udfba", + "guitar": "\ud83c\udfb8", + "violin": "\ud83c\udfbb", + "clapper": "\ud83c\udfac", + "video_game": "\ud83c\udfae", + "space_invader": "\ud83d\udc7e", + "dart": "\ud83c\udfaf", + "game_die": "\ud83c\udfb2", + "slot_machine": "\ud83c\udfb0", + "bowling": "\ud83c\udfb3", + "red_car": "\ud83d\ude97", + "taxi": "\ud83d\ude95", + "blue_car": "\ud83d\ude99", + "bus": "\ud83d\ude8c", + "trolleybus": "\ud83d\ude8e", + "race_car": "\ud83c\udfce", + "police_car": "\ud83d\ude93", + "ambulance": "\ud83d\ude91", + "fire_engine": "\ud83d\ude92", + "minibus": "\ud83d\ude90", + "truck": "\ud83d\ude9a", + "articulated_lorry": "\ud83d\ude9b", + "tractor": "\ud83d\ude9c", + "motorcycle": "\ud83c\udfcd", + "bike": "\ud83d\udeb2", + "rotating_light": "\ud83d\udea8", + "oncoming_police_car": "\ud83d\ude94", + "oncoming_bus": "\ud83d\ude8d", + "oncoming_automobile": "\ud83d\ude98", + "oncoming_taxi": "\ud83d\ude96", + "aerial_tramway": "\ud83d\udea1", + "mountain_cableway": "\ud83d\udea0", + "suspension_railway": "\ud83d\ude9f", + "railway_car": "\ud83d\ude83", + "train": "\ud83d\ude8b", + "monorail": "\ud83d\ude9d", + "bullettrain_side": "\ud83d\ude84", + "bullettrain_front": "\ud83d\ude85", + "light_rail": "\ud83d\ude88", + "mountain_railway": "\ud83d\ude9e", + "steam_locomotive": "\ud83d\ude82", + "train2": "\ud83d\ude86", + "metro": "\ud83d\ude87", + "tram": "\ud83d\ude8a", + "station": "\ud83d\ude89", + "helicopter": "\ud83d\ude81", + "airplane_small": "\ud83d\udee9", + "airplane": "\u2708", + "airplane_departure": "\ud83d\udeeb", + "airplane_arriving": "\ud83d\udeec", + "sailboat": "\u26f5", + "motorboat": "\ud83d\udee5", + "speedboat": "\ud83d\udea4", + "ferry": "\u26f4", + "cruise_ship": "\ud83d\udef3", + "rocket": "\ud83d\ude80", + "satellite_orbital": "\ud83d\udef0", + "seat": "\ud83d\udcba", + "anchor": "\u2693", + "construction": "\ud83d\udea7", + "fuelpump": "\u26fd", + "busstop": "\ud83d\ude8f", + "vertical_traffic_light": "\ud83d\udea6", + "traffic_light": "\ud83d\udea5", + "checkered_flag": "\ud83c\udfc1", + "ship": "\ud83d\udea2", + "ferris_wheel": "\ud83c\udfa1", + "roller_coaster": "\ud83c\udfa2", + "carousel_horse": "\ud83c\udfa0", + "construction_site": "\ud83c\udfd7", + "foggy": "\ud83c\udf01", + "tokyo_tower": "\ud83d\uddfc", + "factory": "\ud83c\udfed", + "fountain": "\u26f2", + "rice_scene": "\ud83c\udf91", + "mountain": "\u26f0", + "mountain_snow": "\ud83c\udfd4", + "mount_fuji": "\ud83d\uddfb", + "volcano": "\ud83c\udf0b", + "japan": "\ud83d\uddfe", + "camping": "\ud83c\udfd5", + "tent": "\u26fa", + "park": "\ud83c\udfde", + "motorway": "\ud83d\udee3", + "railway_track": "\ud83d\udee4", + "sunrise": "\ud83c\udf05", + "sunrise_over_mountains": "\ud83c\udf04", + "desert": "\ud83c\udfdc", + "beach": "\ud83c\udfd6", + "island": "\ud83c\udfdd", + "city_sunset": "\ud83c\udf07", + "city_dusk": "\ud83c\udf06", + "cityscape": "\ud83c\udfd9", + "night_with_stars": "\ud83c\udf03", + "bridge_at_night": "\ud83c\udf09", + "milky_way": "\ud83c\udf0c", + "stars": "\ud83c\udf20", + "sparkler": "\ud83c\udf87", + "fireworks": "\ud83c\udf86", + "rainbow": "\ud83c\udf08", + "homes": "\ud83c\udfd8", + "european_castle": "\ud83c\udff0", + "japanese_castle": "\ud83c\udfef", + "stadium": "\ud83c\udfdf", + "statue_of_liberty": "\ud83d\uddfd", + "house": "\ud83c\udfe0", + "house_with_garden": "\ud83c\udfe1", + "house_abandoned": "\ud83c\udfda", + "office": "\ud83c\udfe2", + "department_store": "\ud83c\udfec", + "post_office": "\ud83c\udfe3", + "european_post_office": "\ud83c\udfe4", + "hospital": "\ud83c\udfe5", + "bank": "\ud83c\udfe6", + "hotel": "\ud83c\udfe8", + "convenience_store": "\ud83c\udfea", + "school": "\ud83c\udfeb", + "love_hotel": "\ud83c\udfe9", + "wedding": "\ud83d\udc92", + "classical_building": "\ud83c\udfdb", + "church": "\u26ea", + "mosque": "\ud83d\udd4c", + "synagogue": "\ud83d\udd4d", + "kaaba": "\ud83d\udd4b", + "shinto_shrine": "\u26e9", + "watch": "\u231a", + "iphone": "\ud83d\udcf1", + "calling": "\ud83d\udcf2", + "computer": "\ud83d\udcbb", + "keyboard": "\u2328", + "desktop": "\ud83d\udda5", + "printer": "\ud83d\udda8", + "mouse_three_button": "\ud83d\uddb1", + "trackball": "\ud83d\uddb2", + "joystick": "\ud83d\udd79", + "compression": "\ud83d\udddc", + "minidisc": "\ud83d\udcbd", + "floppy_disk": "\ud83d\udcbe", + "cd": "\ud83d\udcbf", + "dvd": "\ud83d\udcc0", + "vhs": "\ud83d\udcfc", + "camera": "\ud83d\udcf7", + "camera_with_flash": "\ud83d\udcf8", + "video_camera": "\ud83d\udcf9", + "movie_camera": "\ud83c\udfa5", + "projector": "\ud83d\udcfd", + "film_frames": "\ud83c\udf9e", + "telephone_receiver": "\ud83d\udcde", + "telephone": "\u260e", + "pager": "\ud83d\udcdf", + "fax": "\ud83d\udce0", + "tv": "\ud83d\udcfa", + "radio": "\ud83d\udcfb", + "microphone2": "\ud83c\udf99", + "level_slider": "\ud83c\udf9a", + "control_knobs": "\ud83c\udf9b", + "stopwatch": "\u23f1", + "timer": "\u23f2", + "alarm_clock": "\u23f0", + "clock": "\ud83d\udd70", + "hourglass_flowing_sand": "\u23f3", + "hourglass": "\u231b", + "satellite": "\ud83d\udce1", + "battery": "\ud83d\udd0b", + "electric_plug": "\ud83d\udd0c", + "bulb": "\ud83d\udca1", + "flashlight": "\ud83d\udd26", + "candle": "\ud83d\udd6f", + "wastebasket": "\ud83d\uddd1", + "oil": "\ud83d\udee2", + "money_with_wings": "\ud83d\udcb8", + "dollar": "\ud83d\udcb5", + "yen": "\ud83d\udcb4", + "euro": "\ud83d\udcb6", + "pound": "\ud83d\udcb7", + "moneybag": "\ud83d\udcb0", + "credit_card": "\ud83d\udcb3", + "gem": "\ud83d\udc8e", + "scales": "\u2696", + "wrench": "\ud83d\udd27", + "hammer": "\ud83d\udd28", + "hammer_pick": "\u2692", + "tools": "\ud83d\udee0", + "pick": "\u26cf", + "nut_and_bolt": "\ud83d\udd29", + "gear": "\u2699", + "chains": "\u26d3", + "gun": "\ud83d\udd2b", + "bomb": "\ud83d\udca3", + "knife": "\ud83d\udd2a", + "dagger": "\ud83d\udde1", + "crossed_swords": "\u2694", + "shield": "\ud83d\udee1", + "smoking": "\ud83d\udeac", + "skull_crossbones": "\u2620", + "coffin": "\u26b0", + "urn": "\u26b1", + "amphora": "\ud83c\udffa", + "crystal_ball": "\ud83d\udd2e", + "prayer_beads": "\ud83d\udcff", + "barber": "\ud83d\udc88", + "alembic": "\u2697", + "telescope": "\ud83d\udd2d", + "microscope": "\ud83d\udd2c", + "hole": "\ud83d\udd73", + "pill": "\ud83d\udc8a", + "syringe": "\ud83d\udc89", + "thermometer": "\ud83c\udf21", + "label": "\ud83c\udff7", + "bookmark": "\ud83d\udd16", + "toilet": "\ud83d\udebd", + "shower": "\ud83d\udebf", + "bathtub": "\ud83d\udec1", + "key": "\ud83d\udd11", + "key2": "\ud83d\udddd", + "couch": "\ud83d\udecb", + "sleeping_accommodation": "\ud83d\udecc", + "bed": "\ud83d\udecf", + "door": "\ud83d\udeaa", + "bellhop": "\ud83d\udece", + "frame_photo": "\ud83d\uddbc", + "map": "\ud83d\uddfa", + "beach_umbrella": "\u26f1", + "moyai": "\ud83d\uddff", + "shopping_bags": "\ud83d\udecd", + "balloon": "\ud83c\udf88", + "flags": "\ud83c\udf8f", + "ribbon": "\ud83c\udf80", + "gift": "\ud83c\udf81", + "confetti_ball": "\ud83c\udf8a", + "tada": "\ud83c\udf89", + "dolls": "\ud83c\udf8e", + "wind_chime": "\ud83c\udf90", + "crossed_flags": "\ud83c\udf8c", + "izakaya_lantern": "\ud83c\udfee", + "envelope": "\u2709", + "envelope_with_arrow": "\ud83d\udce9", + "incoming_envelope": "\ud83d\udce8", + "e-mail": "\ud83d\udce7", + "love_letter": "\ud83d\udc8c", + "postbox": "\ud83d\udcee", + "mailbox_closed": "\ud83d\udcea", + "mailbox": "\ud83d\udceb", + "mailbox_with_mail": "\ud83d\udcec", + "mailbox_with_no_mail": "\ud83d\udced", + "package": "\ud83d\udce6", + "postal_horn": "\ud83d\udcef", + "inbox_tray": "\ud83d\udce5", + "outbox_tray": "\ud83d\udce4", + "scroll": "\ud83d\udcdc", + "page_with_curl": "\ud83d\udcc3", + "bookmark_tabs": "\ud83d\udcd1", + "bar_chart": "\ud83d\udcca", + "chart_with_upwards_trend": "\ud83d\udcc8", + "chart_with_downwards_trend": "\ud83d\udcc9", + "page_facing_up": "\ud83d\udcc4", + "date": "\ud83d\udcc5", + "calendar": "\ud83d\udcc6", + "calendar_spiral": "\ud83d\uddd3", + "card_index": "\ud83d\udcc7", + "card_box": "\ud83d\uddc3", + "ballot_box": "\ud83d\uddf3", + "file_cabinet": "\ud83d\uddc4", + "clipboard": "\ud83d\udccb", + "notepad_spiral": "\ud83d\uddd2", + "file_folder": "\ud83d\udcc1", + "open_file_folder": "\ud83d\udcc2", + "dividers": "\ud83d\uddc2", + "newspaper2": "\ud83d\uddde", + "newspaper": "\ud83d\udcf0", + "notebook": "\ud83d\udcd3", + "closed_book": "\ud83d\udcd5", + "green_book": "\ud83d\udcd7", + "blue_book": "\ud83d\udcd8", + "orange_book": "\ud83d\udcd9", + "notebook_with_decorative_cover": "\ud83d\udcd4", + "ledger": "\ud83d\udcd2", + "books": "\ud83d\udcda", + "book": "\ud83d\udcd6", + "link": "\ud83d\udd17", + "paperclip": "\ud83d\udcce", + "paperclips": "\ud83d\udd87", + "scissors": "\u2702", + "triangular_ruler": "\ud83d\udcd0", + "straight_ruler": "\ud83d\udccf", + "pushpin": "\ud83d\udccc", + "round_pushpin": "\ud83d\udccd", + "triangular_flag_on_post": "\ud83d\udea9", + "flag_white": "\ud83c\udff3", + "flag_black": "\ud83c\udff4", + "closed_lock_with_key": "\ud83d\udd10", + "lock": "\ud83d\udd12", + "unlock": "\ud83d\udd13", + "lock_with_ink_pen": "\ud83d\udd0f", + "pen_ballpoint": "\ud83d\udd8a", + "pen_fountain": "\ud83d\udd8b", + "black_nib": "\u2712", + "pencil": "\ud83d\udcdd", + "pencil2": "\u270f", + "crayon": "\ud83d\udd8d", + "paintbrush": "\ud83d\udd8c", + "mag": "\ud83d\udd0d", + "mag_right": "\ud83d\udd0e", + "heart": "\u2764", + "yellow_heart": "\ud83d\udc9b", + "green_heart": "\ud83d\udc9a", + "blue_heart": "\ud83d\udc99", + "purple_heart": "\ud83d\udc9c", + "broken_heart": "\ud83d\udc94", + "heart_exclamation": "\u2763", + "two_hearts": "\ud83d\udc95", + "revolving_hearts": "\ud83d\udc9e", + "heartbeat": "\ud83d\udc93", + "heartpulse": "\ud83d\udc97", + "sparkling_heart": "\ud83d\udc96", + "cupid": "\ud83d\udc98", + "gift_heart": "\ud83d\udc9d", + "heart_decoration": "\ud83d\udc9f", + "peace": "\u262e", + "cross": "\u271d", + "star_and_crescent": "\u262a", + "om_symbol": "\ud83d\udd49", + "wheel_of_dharma": "\u2638", + "star_of_david": "\u2721", + "six_pointed_star": "\ud83d\udd2f", + "menorah": "\ud83d\udd4e", + "yin_yang": "\u262f", + "orthodox_cross": "\u2626", + "place_of_worship": "\ud83d\uded0", + "ophiuchus": "\u26ce", + "aries": "\u2648", + "taurus": "\u2649", + "gemini": "\u264a", + "cancer": "\u264b", + "leo": "\u264c", + "virgo": "\u264d", + "libra": "\u264e", + "scorpius": "\u264f", + "sagittarius": "\u2650", + "capricorn": "\u2651", + "aquarius": "\u2652", + "pisces": "\u2653", + "id": "\ud83c\udd94", + "atom": "\u269b", + "u7a7a": "\ud83c\ude33", + "u5272": "\ud83c\ude39", + "radioactive": "\u2622", + "biohazard": "\u2623", + "mobile_phone_off": "\ud83d\udcf4", + "vibration_mode": "\ud83d\udcf3", + "u6709": "\ud83c\ude36", + "u7121": "\ud83c\ude1a", + "u7533": "\ud83c\ude38", + "u55b6": "\ud83c\ude3a", + "u6708": "\ud83c\ude37", + "eight_pointed_black_star": "\u2734", + "vs": "\ud83c\udd9a", + "accept": "\ud83c\ude51", + "white_flower": "\ud83d\udcae", + "ideograph_advantage": "\ud83c\ude50", + "secret": "\u3299", + "congratulations": "\u3297", + "u5408": "\ud83c\ude34", + "u6e80": "\ud83c\ude35", + "u7981": "\ud83c\ude32", + "a": "\ud83c\udd70", + "b": "\ud83c\udd71", + "ab": "\ud83c\udd8e", + "cl": "\ud83c\udd91", + "o2": "\ud83c\udd7e", + "sos": "\ud83c\udd98", + "no_entry": "\u26d4", + "name_badge": "\ud83d\udcdb", + "no_entry_sign": "\ud83d\udeab", + "x": "\u274c", + "o": "\u2b55", + "anger": "\ud83d\udca2", + "hotsprings": "\u2668", + "no_pedestrians": "\ud83d\udeb7", + "do_not_litter": "\ud83d\udeaf", + "no_bicycles": "\ud83d\udeb3", + "non-potable_water": "\ud83d\udeb1", + "underage": "\ud83d\udd1e", + "no_mobile_phones": "\ud83d\udcf5", + "exclamation": "\u2757", + "grey_exclamation": "\u2755", + "question": "\u2753", + "grey_question": "\u2754", + "bangbang": "\u203c", + "interrobang": "\u2049", + "100": "\ud83d\udcaf", + "low_brightness": "\ud83d\udd05", + "high_brightness": "\ud83d\udd06", + "trident": "\ud83d\udd31", + "fleur-de-lis": "\u269c", + "part_alternation_mark": "\u303d", + "warning": "\u26a0", + "children_crossing": "\ud83d\udeb8", + "beginner": "\ud83d\udd30", + "recycle": "\u267b", + "u6307": "\ud83c\ude2f", + "chart": "\ud83d\udcb9", + "sparkle": "\u2747", + "eight_spoked_asterisk": "\u2733", + "negative_squared_cross_mark": "\u274e", + "white_check_mark": "\u2705", + "diamond_shape_with_a_dot_inside": "\ud83d\udca0", + "cyclone": "\ud83c\udf00", + "loop": "\u27bf", + "globe_with_meridians": "\ud83c\udf10", + "m": "\u24c2", + "atm": "\ud83c\udfe7", + "sa": "\ud83c\ude02", + "passport_control": "\ud83d\udec2", + "customs": "\ud83d\udec3", + "baggage_claim": "\ud83d\udec4", + "left_luggage": "\ud83d\udec5", + "wheelchair": "\u267f", + "no_smoking": "\ud83d\udead", + "wc": "\ud83d\udebe", + "parking": "\ud83c\udd7f", + "potable_water": "\ud83d\udeb0", + "mens": "\ud83d\udeb9", + "womens": "\ud83d\udeba", + "baby_symbol": "\ud83d\udebc", + "restroom": "\ud83d\udebb", + "put_litter_in_its_place": "\ud83d\udeae", + "cinema": "\ud83c\udfa6", + "signal_strength": "\ud83d\udcf6", + "koko": "\ud83c\ude01", + "ng": "\ud83c\udd96", + "ok": "\ud83c\udd97", + "up": "\ud83c\udd99", + "cool": "\ud83c\udd92", + "new": "\ud83c\udd95", + "free": "\ud83c\udd93", + "zero": "0\u20e3", + "one": "1\u20e3", + "two": "2\u20e3", + "three": "3\u20e3", + "four": "4\u20e3", + "five": "5\u20e3", + "six": "6\u20e3", + "seven": "7\u20e3", + "eight": "8\u20e3", + "nine": "9\u20e3", + "ten": "\ud83d\udd1f", + "1234": "\ud83d\udd22", + "arrow_forward": "\u25b6", + "pause_button": "\u23f8", + "play_pause": "\u23ef", + "stop_button": "\u23f9", + "record_button": "\u23fa", + "track_next": "\u23ed", + "track_previous": "\u23ee", + "fast_forward": "\u23e9", + "rewind": "\u23ea", + "twisted_rightwards_arrows": "\ud83d\udd00", + "repeat": "\ud83d\udd01", + "repeat_one": "\ud83d\udd02", + "arrow_backward": "\u25c0", + "arrow_up_small": "\ud83d\udd3c", + "arrow_down_small": "\ud83d\udd3d", + "arrow_double_up": "\u23eb", + "arrow_double_down": "\u23ec", + "arrow_right": "\u27a1", + "arrow_left": "\u2b05", + "arrow_up": "\u2b06", + "arrow_down": "\u2b07", + "arrow_upper_right": "\u2197", + "arrow_lower_right": "\u2198", + "arrow_lower_left": "\u2199", + "arrow_upper_left": "\u2196", + "arrow_up_down": "\u2195", + "left_right_arrow": "\u2194", + "arrows_counterclockwise": "\ud83d\udd04", + "arrow_right_hook": "\u21aa", + "leftwards_arrow_with_hook": "\u21a9", + "arrow_heading_up": "\u2934", + "arrow_heading_down": "\u2935", + "hash": "#\u20e3", + "asterisk": "*\u20e3", + "information_source": "\u2139", + "abc": "\ud83d\udd24", + "abcd": "\ud83d\udd21", + "capital_abcd": "\ud83d\udd20", + "symbols": "\ud83d\udd23", + "musical_note": "\ud83c\udfb5", + "notes": "\ud83c\udfb6", + "wavy_dash": "\u3030", + "curly_loop": "\u27b0", + "heavy_check_mark": "\u2714", + "arrows_clockwise": "\ud83d\udd03", + "heavy_plus_sign": "\u2795", + "heavy_minus_sign": "\u2796", + "heavy_division_sign": "\u2797", + "heavy_multiplication_x": "\u2716", + "heavy_dollar_sign": "\ud83d\udcb2", + "currency_exchange": "\ud83d\udcb1", + "copyright": "\u00a9", + "registered": "\u00ae", + "tm": "\u2122", + "end": "\ud83d\udd1a", + "back": "\ud83d\udd19", + "on": "\ud83d\udd1b", + "top": "\ud83d\udd1d", + "soon": "\ud83d\udd1c", + "ballot_box_with_check": "\u2611", + "radio_button": "\ud83d\udd18", + "white_circle": "\u26aa", + "black_circle": "\u26ab", + "red_circle": "\ud83d\udd34", + "large_blue_circle": "\ud83d\udd35", + "small_orange_diamond": "\ud83d\udd38", + "small_blue_diamond": "\ud83d\udd39", + "large_orange_diamond": "\ud83d\udd36", + "large_blue_diamond": "\ud83d\udd37", + "small_red_triangle": "\ud83d\udd3a", + "black_small_square": "\u25aa", + "white_small_square": "\u25ab", + "black_large_square": "\u2b1b", + "white_large_square": "\u2b1c", + "small_red_triangle_down": "\ud83d\udd3b", + "black_medium_square": "\u25fc", + "white_medium_square": "\u25fb", + "black_medium_small_square": "\u25fe", + "white_medium_small_square": "\u25fd", + "black_square_button": "\ud83d\udd32", + "white_square_button": "\ud83d\udd33", + "speaker": "\ud83d\udd08", + "sound": "\ud83d\udd09", + "loud_sound": "\ud83d\udd0a", + "mute": "\ud83d\udd07", + "mega": "\ud83d\udce3", + "loudspeaker": "\ud83d\udce2", + "bell": "\ud83d\udd14", + "no_bell": "\ud83d\udd15", + "black_joker": "\ud83c\udccf", + "mahjong": "\ud83c\udc04", + "spades": "\u2660", + "clubs": "\u2663", + "hearts": "\u2665", + "diamonds": "\u2666", + "flower_playing_cards": "\ud83c\udfb4", + "thought_balloon": "\ud83d\udcad", + "anger_right": "\ud83d\uddef", + "speech_balloon": "\ud83d\udcac", + "clock1": "\ud83d\udd50", + "clock2": "\ud83d\udd51", + "clock3": "\ud83d\udd52", + "clock4": "\ud83d\udd53", + "clock5": "\ud83d\udd54", + "clock6": "\ud83d\udd55", + "clock7": "\ud83d\udd56", + "clock8": "\ud83d\udd57", + "clock9": "\ud83d\udd58", + "clock10": "\ud83d\udd59", + "clock11": "\ud83d\udd5a", + "clock12": "\ud83d\udd5b", + "clock130": "\ud83d\udd5c", + "clock230": "\ud83d\udd5d", + "clock330": "\ud83d\udd5e", + "clock430": "\ud83d\udd5f", + "clock530": "\ud83d\udd60", + "clock630": "\ud83d\udd61", + "clock730": "\ud83d\udd62", + "clock830": "\ud83d\udd63", + "clock930": "\ud83d\udd64", + "clock1030": "\ud83d\udd65", + "clock1130": "\ud83d\udd66", + "clock1230": "\ud83d\udd67", + "eye_in_speech_bubble": "\ud83d\udc41\ud83d\udde8", + "flag_ac": "\ud83c\udde6\ud83c\udde8", + "flag_af": "\ud83c\udde6\ud83c\uddeb", + "flag_al": "\ud83c\udde6\ud83c\uddf1", + "flag_dz": "\ud83c\udde9\ud83c\uddff", + "flag_ad": "\ud83c\udde6\ud83c\udde9", + "flag_ao": "\ud83c\udde6\ud83c\uddf4", + "flag_ai": "\ud83c\udde6\ud83c\uddee", + "flag_ag": "\ud83c\udde6\ud83c\uddec", + "flag_ar": "\ud83c\udde6\ud83c\uddf7", + "flag_am": "\ud83c\udde6\ud83c\uddf2", + "flag_aw": "\ud83c\udde6\ud83c\uddfc", + "flag_au": "\ud83c\udde6\ud83c\uddfa", + "flag_at": "\ud83c\udde6\ud83c\uddf9", + "flag_az": "\ud83c\udde6\ud83c\uddff", + "flag_bs": "\ud83c\udde7\ud83c\uddf8", + "flag_bh": "\ud83c\udde7\ud83c\udded", + "flag_bd": "\ud83c\udde7\ud83c\udde9", + "flag_bb": "\ud83c\udde7\ud83c\udde7", + "flag_by": "\ud83c\udde7\ud83c\uddfe", + "flag_be": "\ud83c\udde7\ud83c\uddea", + "flag_bz": "\ud83c\udde7\ud83c\uddff", + "flag_bj": "\ud83c\udde7\ud83c\uddef", + "flag_bm": "\ud83c\udde7\ud83c\uddf2", + "flag_bt": "\ud83c\udde7\ud83c\uddf9", + "flag_bo": "\ud83c\udde7\ud83c\uddf4", + "flag_ba": "\ud83c\udde7\ud83c\udde6", + "flag_bw": "\ud83c\udde7\ud83c\uddfc", + "flag_br": "\ud83c\udde7\ud83c\uddf7", + "flag_bn": "\ud83c\udde7\ud83c\uddf3", + "flag_bg": "\ud83c\udde7\ud83c\uddec", + "flag_bf": "\ud83c\udde7\ud83c\uddeb", + "flag_bi": "\ud83c\udde7\ud83c\uddee", + "flag_cv": "\ud83c\udde8\ud83c\uddfb", + "flag_kh": "\ud83c\uddf0\ud83c\udded", + "flag_cm": "\ud83c\udde8\ud83c\uddf2", + "flag_ca": "\ud83c\udde8\ud83c\udde6", + "flag_ky": "\ud83c\uddf0\ud83c\uddfe", + "flag_cf": "\ud83c\udde8\ud83c\uddeb", + "flag_td": "\ud83c\uddf9\ud83c\udde9", + "flag_cl": "\ud83c\udde8\ud83c\uddf1", + "flag_cn": "\ud83c\udde8\ud83c\uddf3", + "flag_co": "\ud83c\udde8\ud83c\uddf4", + "flag_km": "\ud83c\uddf0\ud83c\uddf2", + "flag_cg": "\ud83c\udde8\ud83c\uddec", + "flag_cd": "\ud83c\udde8\ud83c\udde9", + "flag_cr": "\ud83c\udde8\ud83c\uddf7", + "flag_hr": "\ud83c\udded\ud83c\uddf7", + "flag_cu": "\ud83c\udde8\ud83c\uddfa", + "flag_cy": "\ud83c\udde8\ud83c\uddfe", + "flag_cz": "\ud83c\udde8\ud83c\uddff", + "flag_dk": "\ud83c\udde9\ud83c\uddf0", + "flag_dj": "\ud83c\udde9\ud83c\uddef", + "flag_dm": "\ud83c\udde9\ud83c\uddf2", + "flag_do": "\ud83c\udde9\ud83c\uddf4", + "flag_ec": "\ud83c\uddea\ud83c\udde8", + "flag_eg": "\ud83c\uddea\ud83c\uddec", + "flag_sv": "\ud83c\uddf8\ud83c\uddfb", + "flag_gq": "\ud83c\uddec\ud83c\uddf6", + "flag_er": "\ud83c\uddea\ud83c\uddf7", + "flag_ee": "\ud83c\uddea\ud83c\uddea", + "flag_et": "\ud83c\uddea\ud83c\uddf9", + "flag_fk": "\ud83c\uddeb\ud83c\uddf0", + "flag_fo": "\ud83c\uddeb\ud83c\uddf4", + "flag_fj": "\ud83c\uddeb\ud83c\uddef", + "flag_fi": "\ud83c\uddeb\ud83c\uddee", + "flag_fr": "\ud83c\uddeb\ud83c\uddf7", + "flag_pf": "\ud83c\uddf5\ud83c\uddeb", + "flag_ga": "\ud83c\uddec\ud83c\udde6", + "flag_gm": "\ud83c\uddec\ud83c\uddf2", + "flag_ge": "\ud83c\uddec\ud83c\uddea", + "flag_de": "\ud83c\udde9\ud83c\uddea", + "flag_gh": "\ud83c\uddec\ud83c\udded", + "flag_gi": "\ud83c\uddec\ud83c\uddee", + "flag_gr": "\ud83c\uddec\ud83c\uddf7", + "flag_gl": "\ud83c\uddec\ud83c\uddf1", + "flag_gd": "\ud83c\uddec\ud83c\udde9", + "flag_gu": "\ud83c\uddec\ud83c\uddfa", + "flag_gt": "\ud83c\uddec\ud83c\uddf9", + "flag_gn": "\ud83c\uddec\ud83c\uddf3", + "flag_gw": "\ud83c\uddec\ud83c\uddfc", + "flag_gy": "\ud83c\uddec\ud83c\uddfe", + "flag_ht": "\ud83c\udded\ud83c\uddf9", + "flag_hn": "\ud83c\udded\ud83c\uddf3", + "flag_hk": "\ud83c\udded\ud83c\uddf0", + "flag_hu": "\ud83c\udded\ud83c\uddfa", + "flag_is": "\ud83c\uddee\ud83c\uddf8", + "flag_in": "\ud83c\uddee\ud83c\uddf3", + "flag_id": "\ud83c\uddee\ud83c\udde9", + "flag_ir": "\ud83c\uddee\ud83c\uddf7", + "flag_iq": "\ud83c\uddee\ud83c\uddf6", + "flag_ie": "\ud83c\uddee\ud83c\uddea", + "flag_il": "\ud83c\uddee\ud83c\uddf1", + "flag_it": "\ud83c\uddee\ud83c\uddf9", + "flag_ci": "\ud83c\udde8\ud83c\uddee", + "flag_jm": "\ud83c\uddef\ud83c\uddf2", + "flag_jp": "\ud83c\uddef\ud83c\uddf5", + "flag_je": "\ud83c\uddef\ud83c\uddea", + "flag_jo": "\ud83c\uddef\ud83c\uddf4", + "flag_kz": "\ud83c\uddf0\ud83c\uddff", + "flag_ke": "\ud83c\uddf0\ud83c\uddea", + "flag_ki": "\ud83c\uddf0\ud83c\uddee", + "flag_xk": "\ud83c\uddfd\ud83c\uddf0", + "flag_kw": "\ud83c\uddf0\ud83c\uddfc", + "flag_kg": "\ud83c\uddf0\ud83c\uddec", + "flag_la": "\ud83c\uddf1\ud83c\udde6", + "flag_lv": "\ud83c\uddf1\ud83c\uddfb", + "flag_lb": "\ud83c\uddf1\ud83c\udde7", + "flag_ls": "\ud83c\uddf1\ud83c\uddf8", + "flag_lr": "\ud83c\uddf1\ud83c\uddf7", + "flag_ly": "\ud83c\uddf1\ud83c\uddfe", + "flag_li": "\ud83c\uddf1\ud83c\uddee", + "flag_lt": "\ud83c\uddf1\ud83c\uddf9", + "flag_lu": "\ud83c\uddf1\ud83c\uddfa", + "flag_mo": "\ud83c\uddf2\ud83c\uddf4", + "flag_mk": "\ud83c\uddf2\ud83c\uddf0", + "flag_mg": "\ud83c\uddf2\ud83c\uddec", + "flag_mw": "\ud83c\uddf2\ud83c\uddfc", + "flag_my": "\ud83c\uddf2\ud83c\uddfe", + "flag_mv": "\ud83c\uddf2\ud83c\uddfb", + "flag_ml": "\ud83c\uddf2\ud83c\uddf1", + "flag_mt": "\ud83c\uddf2\ud83c\uddf9", + "flag_mh": "\ud83c\uddf2\ud83c\udded", + "flag_mr": "\ud83c\uddf2\ud83c\uddf7", + "flag_mu": "\ud83c\uddf2\ud83c\uddfa", + "flag_mx": "\ud83c\uddf2\ud83c\uddfd", + "flag_fm": "\ud83c\uddeb\ud83c\uddf2", + "flag_md": "\ud83c\uddf2\ud83c\udde9", + "flag_mc": "\ud83c\uddf2\ud83c\udde8", + "flag_mn": "\ud83c\uddf2\ud83c\uddf3", + "flag_me": "\ud83c\uddf2\ud83c\uddea", + "flag_ms": "\ud83c\uddf2\ud83c\uddf8", + "flag_ma": "\ud83c\uddf2\ud83c\udde6", + "flag_mz": "\ud83c\uddf2\ud83c\uddff", + "flag_mm": "\ud83c\uddf2\ud83c\uddf2", + "flag_na": "\ud83c\uddf3\ud83c\udde6", + "flag_nr": "\ud83c\uddf3\ud83c\uddf7", + "flag_np": "\ud83c\uddf3\ud83c\uddf5", + "flag_nl": "\ud83c\uddf3\ud83c\uddf1", + "flag_nc": "\ud83c\uddf3\ud83c\udde8", + "flag_nz": "\ud83c\uddf3\ud83c\uddff", + "flag_ni": "\ud83c\uddf3\ud83c\uddee", + "flag_ne": "\ud83c\uddf3\ud83c\uddea", + "flag_ng": "\ud83c\uddf3\ud83c\uddec", + "flag_nu": "\ud83c\uddf3\ud83c\uddfa", + "flag_kp": "\ud83c\uddf0\ud83c\uddf5", + "flag_no": "\ud83c\uddf3\ud83c\uddf4", + "flag_om": "\ud83c\uddf4\ud83c\uddf2", + "flag_pk": "\ud83c\uddf5\ud83c\uddf0", + "flag_pw": "\ud83c\uddf5\ud83c\uddfc", + "flag_ps": "\ud83c\uddf5\ud83c\uddf8", + "flag_pa": "\ud83c\uddf5\ud83c\udde6", + "flag_pg": "\ud83c\uddf5\ud83c\uddec", + "flag_py": "\ud83c\uddf5\ud83c\uddfe", + "flag_pe": "\ud83c\uddf5\ud83c\uddea", + "flag_ph": "\ud83c\uddf5\ud83c\udded", + "flag_pl": "\ud83c\uddf5\ud83c\uddf1", + "flag_pt": "\ud83c\uddf5\ud83c\uddf9", + "flag_pr": "\ud83c\uddf5\ud83c\uddf7", + "flag_qa": "\ud83c\uddf6\ud83c\udde6", + "flag_ro": "\ud83c\uddf7\ud83c\uddf4", + "flag_ru": "\ud83c\uddf7\ud83c\uddfa", + "flag_rw": "\ud83c\uddf7\ud83c\uddfc", + "flag_sh": "\ud83c\uddf8\ud83c\udded", + "flag_kn": "\ud83c\uddf0\ud83c\uddf3", + "flag_lc": "\ud83c\uddf1\ud83c\udde8", + "flag_vc": "\ud83c\uddfb\ud83c\udde8", + "flag_ws": "\ud83c\uddfc\ud83c\uddf8", + "flag_sm": "\ud83c\uddf8\ud83c\uddf2", + "flag_st": "\ud83c\uddf8\ud83c\uddf9", + "flag_sa": "\ud83c\uddf8\ud83c\udde6", + "flag_sn": "\ud83c\uddf8\ud83c\uddf3", + "flag_rs": "\ud83c\uddf7\ud83c\uddf8", + "flag_sc": "\ud83c\uddf8\ud83c\udde8", + "flag_sl": "\ud83c\uddf8\ud83c\uddf1", + "flag_sg": "\ud83c\uddf8\ud83c\uddec", + "flag_sk": "\ud83c\uddf8\ud83c\uddf0", + "flag_si": "\ud83c\uddf8\ud83c\uddee", + "flag_sb": "\ud83c\uddf8\ud83c\udde7", + "flag_so": "\ud83c\uddf8\ud83c\uddf4", + "flag_za": "\ud83c\uddff\ud83c\udde6", + "flag_kr": "\ud83c\uddf0\ud83c\uddf7", + "flag_es": "\ud83c\uddea\ud83c\uddf8", + "flag_lk": "\ud83c\uddf1\ud83c\uddf0", + "flag_sd": "\ud83c\uddf8\ud83c\udde9", + "flag_sr": "\ud83c\uddf8\ud83c\uddf7", + "flag_sz": "\ud83c\uddf8\ud83c\uddff", + "flag_se": "\ud83c\uddf8\ud83c\uddea", + "flag_ch": "\ud83c\udde8\ud83c\udded", + "flag_sy": "\ud83c\uddf8\ud83c\uddfe", + "flag_tw": "\ud83c\uddf9\ud83c\uddfc", + "flag_tj": "\ud83c\uddf9\ud83c\uddef", + "flag_tz": "\ud83c\uddf9\ud83c\uddff", + "flag_th": "\ud83c\uddf9\ud83c\udded", + "flag_tl": "\ud83c\uddf9\ud83c\uddf1", + "flag_tg": "\ud83c\uddf9\ud83c\uddec", + "flag_to": "\ud83c\uddf9\ud83c\uddf4", + "flag_tt": "\ud83c\uddf9\ud83c\uddf9", + "flag_tn": "\ud83c\uddf9\ud83c\uddf3", + "flag_tr": "\ud83c\uddf9\ud83c\uddf7", + "flag_tm": "\ud83c\uddf9\ud83c\uddf2", + "flag_tv": "\ud83c\uddf9\ud83c\uddfb", + "flag_ug": "\ud83c\uddfa\ud83c\uddec", + "flag_ua": "\ud83c\uddfa\ud83c\udde6", + "flag_ae": "\ud83c\udde6\ud83c\uddea", + "flag_gb": "\ud83c\uddec\ud83c\udde7", + "flag_us": "\ud83c\uddfa\ud83c\uddf8", + "flag_vi": "\ud83c\uddfb\ud83c\uddee", + "flag_uy": "\ud83c\uddfa\ud83c\uddfe", + "flag_uz": "\ud83c\uddfa\ud83c\uddff", + "flag_vu": "\ud83c\uddfb\ud83c\uddfa", + "flag_va": "\ud83c\uddfb\ud83c\udde6", + "flag_ve": "\ud83c\uddfb\ud83c\uddea", + "flag_vn": "\ud83c\uddfb\ud83c\uddf3", + "flag_wf": "\ud83c\uddfc\ud83c\uddeb", + "flag_eh": "\ud83c\uddea\ud83c\udded", + "flag_ye": "\ud83c\uddfe\ud83c\uddea", + "flag_zm": "\ud83c\uddff\ud83c\uddf2", + "flag_zw": "\ud83c\uddff\ud83c\uddfc", + "flag_re": "\ud83c\uddf7\ud83c\uddea", + "flag_ax": "\ud83c\udde6\ud83c\uddfd", + "flag_ta": "\ud83c\uddf9\ud83c\udde6", + "flag_io": "\ud83c\uddee\ud83c\uddf4", + "flag_bq": "\ud83c\udde7\ud83c\uddf6", + "flag_cx": "\ud83c\udde8\ud83c\uddfd", + "flag_cc": "\ud83c\udde8\ud83c\udde8", + "flag_gg": "\ud83c\uddec\ud83c\uddec", + "flag_im": "\ud83c\uddee\ud83c\uddf2", + "flag_yt": "\ud83c\uddfe\ud83c\uddf9", + "flag_nf": "\ud83c\uddf3\ud83c\uddeb", + "flag_pn": "\ud83c\uddf5\ud83c\uddf3", + "flag_bl": "\ud83c\udde7\ud83c\uddf1", + "flag_pm": "\ud83c\uddf5\ud83c\uddf2", + "flag_gs": "\ud83c\uddec\ud83c\uddf8", + "flag_tk": "\ud83c\uddf9\ud83c\uddf0", + "flag_bv": "\ud83c\udde7\ud83c\uddfb", + "flag_hm": "\ud83c\udded\ud83c\uddf2", + "flag_sj": "\ud83c\uddf8\ud83c\uddef", + "flag_um": "\ud83c\uddfa\ud83c\uddf2", + "flag_ic": "\ud83c\uddee\ud83c\udde8", + "flag_ea": "\ud83c\uddea\ud83c\udde6", + "flag_cp": "\ud83c\udde8\ud83c\uddf5", + "flag_dg": "\ud83c\udde9\ud83c\uddec", + "flag_as": "\ud83c\udde6\ud83c\uddf8", + "flag_aq": "\ud83c\udde6\ud83c\uddf6", + "flag_vg": "\ud83c\uddfb\ud83c\uddec", + "flag_ck": "\ud83c\udde8\ud83c\uddf0", + "flag_cw": "\ud83c\udde8\ud83c\uddfc", + "flag_eu": "\ud83c\uddea\ud83c\uddfa", + "flag_gf": "\ud83c\uddec\ud83c\uddeb", + "flag_tf": "\ud83c\uddf9\ud83c\uddeb", + "flag_gp": "\ud83c\uddec\ud83c\uddf5", + "flag_mq": "\ud83c\uddf2\ud83c\uddf6", + "flag_mp": "\ud83c\uddf2\ud83c\uddf5", + "flag_sx": "\ud83c\uddf8\ud83c\uddfd", + "flag_ss": "\ud83c\uddf8\ud83c\uddf8", + "flag_tc": "\ud83c\uddf9\ud83c\udde8", + "flag_mf": "\ud83c\uddf2\ud83c\uddeb", + "raised_hands_tone1": "\ud83d\ude4c\ud83c\udffb", + "raised_hands_tone2": "\ud83d\ude4c\ud83c\udffc", + "raised_hands_tone3": "\ud83d\ude4c\ud83c\udffd", + "raised_hands_tone4": "\ud83d\ude4c\ud83c\udffe", + "raised_hands_tone5": "\ud83d\ude4c\ud83c\udfff", + "clap_tone1": "\ud83d\udc4f\ud83c\udffb", + "clap_tone2": "\ud83d\udc4f\ud83c\udffc", + "clap_tone3": "\ud83d\udc4f\ud83c\udffd", + "clap_tone4": "\ud83d\udc4f\ud83c\udffe", + "clap_tone5": "\ud83d\udc4f\ud83c\udfff", + "wave_tone1": "\ud83d\udc4b\ud83c\udffb", + "wave_tone2": "\ud83d\udc4b\ud83c\udffc", + "wave_tone3": "\ud83d\udc4b\ud83c\udffd", + "wave_tone4": "\ud83d\udc4b\ud83c\udffe", + "wave_tone5": "\ud83d\udc4b\ud83c\udfff", + "thumbsup_tone1": "\ud83d\udc4d\ud83c\udffb", + "thumbsup_tone2": "\ud83d\udc4d\ud83c\udffc", + "thumbsup_tone3": "\ud83d\udc4d\ud83c\udffd", + "thumbsup_tone4": "\ud83d\udc4d\ud83c\udffe", + "thumbsup_tone5": "\ud83d\udc4d\ud83c\udfff", + "thumbsdown_tone1": "\ud83d\udc4e\ud83c\udffb", + "thumbsdown_tone2": "\ud83d\udc4e\ud83c\udffc", + "thumbsdown_tone3": "\ud83d\udc4e\ud83c\udffd", + "thumbsdown_tone4": "\ud83d\udc4e\ud83c\udffe", + "thumbsdown_tone5": "\ud83d\udc4e\ud83c\udfff", + "punch_tone1": "\ud83d\udc4a\ud83c\udffb", + "punch_tone2": "\ud83d\udc4a\ud83c\udffc", + "punch_tone3": "\ud83d\udc4a\ud83c\udffd", + "punch_tone4": "\ud83d\udc4a\ud83c\udffe", + "punch_tone5": "\ud83d\udc4a\ud83c\udfff", + "fist_tone1": "\u270a\ud83c\udffb", + "fist_tone2": "\u270a\ud83c\udffc", + "fist_tone3": "\u270a\ud83c\udffd", + "fist_tone4": "\u270a\ud83c\udffe", + "fist_tone5": "\u270a\ud83c\udfff", + "v_tone1": "\u270c\ud83c\udffb", + "v_tone2": "\u270c\ud83c\udffc", + "v_tone3": "\u270c\ud83c\udffd", + "v_tone4": "\u270c\ud83c\udffe", + "v_tone5": "\u270c\ud83c\udfff", + "ok_hand_tone1": "\ud83d\udc4c\ud83c\udffb", + "ok_hand_tone2": "\ud83d\udc4c\ud83c\udffc", + "ok_hand_tone3": "\ud83d\udc4c\ud83c\udffd", + "ok_hand_tone4": "\ud83d\udc4c\ud83c\udffe", + "ok_hand_tone5": "\ud83d\udc4c\ud83c\udfff", + "raised_hand_tone1": "\u270b\ud83c\udffb", + "raised_hand_tone2": "\u270b\ud83c\udffc", + "raised_hand_tone3": "\u270b\ud83c\udffd", + "raised_hand_tone4": "\u270b\ud83c\udffe", + "raised_hand_tone5": "\u270b\ud83c\udfff", + "open_hands_tone1": "\ud83d\udc50\ud83c\udffb", + "open_hands_tone2": "\ud83d\udc50\ud83c\udffc", + "open_hands_tone3": "\ud83d\udc50\ud83c\udffd", + "open_hands_tone4": "\ud83d\udc50\ud83c\udffe", + "open_hands_tone5": "\ud83d\udc50\ud83c\udfff", + "muscle_tone1": "\ud83d\udcaa\ud83c\udffb", + "muscle_tone2": "\ud83d\udcaa\ud83c\udffc", + "muscle_tone3": "\ud83d\udcaa\ud83c\udffd", + "muscle_tone4": "\ud83d\udcaa\ud83c\udffe", + "muscle_tone5": "\ud83d\udcaa\ud83c\udfff", + "pray_tone1": "\ud83d\ude4f\ud83c\udffb", + "pray_tone2": "\ud83d\ude4f\ud83c\udffc", + "pray_tone3": "\ud83d\ude4f\ud83c\udffd", + "pray_tone4": "\ud83d\ude4f\ud83c\udffe", + "pray_tone5": "\ud83d\ude4f\ud83c\udfff", + "point_up_tone1": "\u261d\ud83c\udffb", + "point_up_tone2": "\u261d\ud83c\udffc", + "point_up_tone3": "\u261d\ud83c\udffd", + "point_up_tone4": "\u261d\ud83c\udffe", + "point_up_tone5": "\u261d\ud83c\udfff", + "point_up_2_tone1": "\ud83d\udc46\ud83c\udffb", + "point_up_2_tone2": "\ud83d\udc46\ud83c\udffc", + "point_up_2_tone3": "\ud83d\udc46\ud83c\udffd", + "point_up_2_tone4": "\ud83d\udc46\ud83c\udffe", + "point_up_2_tone5": "\ud83d\udc46\ud83c\udfff", + "point_down_tone1": "\ud83d\udc47\ud83c\udffb", + "point_down_tone2": "\ud83d\udc47\ud83c\udffc", + "point_down_tone3": "\ud83d\udc47\ud83c\udffd", + "point_down_tone4": "\ud83d\udc47\ud83c\udffe", + "point_down_tone5": "\ud83d\udc47\ud83c\udfff", + "point_left_tone1": "\ud83d\udc48\ud83c\udffb", + "point_left_tone2": "\ud83d\udc48\ud83c\udffc", + "point_left_tone3": "\ud83d\udc48\ud83c\udffd", + "point_left_tone4": "\ud83d\udc48\ud83c\udffe", + "point_left_tone5": "\ud83d\udc48\ud83c\udfff", + "point_right_tone1": "\ud83d\udc49\ud83c\udffb", + "point_right_tone2": "\ud83d\udc49\ud83c\udffc", + "point_right_tone3": "\ud83d\udc49\ud83c\udffd", + "point_right_tone4": "\ud83d\udc49\ud83c\udffe", + "point_right_tone5": "\ud83d\udc49\ud83c\udfff", + "middle_finger_tone1": "\ud83d\udd95\ud83c\udffb", + "middle_finger_tone2": "\ud83d\udd95\ud83c\udffc", + "middle_finger_tone3": "\ud83d\udd95\ud83c\udffd", + "middle_finger_tone4": "\ud83d\udd95\ud83c\udffe", + "middle_finger_tone5": "\ud83d\udd95\ud83c\udfff", + "hand_splayed_tone1": "\ud83d\udd90\ud83c\udffb", + "hand_splayed_tone2": "\ud83d\udd90\ud83c\udffc", + "hand_splayed_tone3": "\ud83d\udd90\ud83c\udffd", + "hand_splayed_tone4": "\ud83d\udd90\ud83c\udffe", + "hand_splayed_tone5": "\ud83d\udd90\ud83c\udfff", + "metal_tone1": "\ud83e\udd18\ud83c\udffb", + "metal_tone2": "\ud83e\udd18\ud83c\udffc", + "metal_tone3": "\ud83e\udd18\ud83c\udffd", + "metal_tone4": "\ud83e\udd18\ud83c\udffe", + "metal_tone5": "\ud83e\udd18\ud83c\udfff", + "vulcan_tone1": "\ud83d\udd96\ud83c\udffb", + "vulcan_tone2": "\ud83d\udd96\ud83c\udffc", + "vulcan_tone3": "\ud83d\udd96\ud83c\udffd", + "vulcan_tone4": "\ud83d\udd96\ud83c\udffe", + "vulcan_tone5": "\ud83d\udd96\ud83c\udfff", + "writing_hand_tone1": "\u270d\ud83c\udffb", + "writing_hand_tone2": "\u270d\ud83c\udffc", + "writing_hand_tone3": "\u270d\ud83c\udffd", + "writing_hand_tone4": "\u270d\ud83c\udffe", + "writing_hand_tone5": "\u270d\ud83c\udfff", + "nail_care_tone1": "\ud83d\udc85\ud83c\udffb", + "nail_care_tone2": "\ud83d\udc85\ud83c\udffc", + "nail_care_tone3": "\ud83d\udc85\ud83c\udffd", + "nail_care_tone4": "\ud83d\udc85\ud83c\udffe", + "nail_care_tone5": "\ud83d\udc85\ud83c\udfff", + "ear_tone1": "\ud83d\udc42\ud83c\udffb", + "ear_tone2": "\ud83d\udc42\ud83c\udffc", + "ear_tone3": "\ud83d\udc42\ud83c\udffd", + "ear_tone4": "\ud83d\udc42\ud83c\udffe", + "ear_tone5": "\ud83d\udc42\ud83c\udfff", + "nose_tone1": "\ud83d\udc43\ud83c\udffb", + "nose_tone2": "\ud83d\udc43\ud83c\udffc", + "nose_tone3": "\ud83d\udc43\ud83c\udffd", + "nose_tone4": "\ud83d\udc43\ud83c\udffe", + "nose_tone5": "\ud83d\udc43\ud83c\udfff", + "baby_tone1": "\ud83d\udc76\ud83c\udffb", + "baby_tone2": "\ud83d\udc76\ud83c\udffc", + "baby_tone3": "\ud83d\udc76\ud83c\udffd", + "baby_tone4": "\ud83d\udc76\ud83c\udffe", + "baby_tone5": "\ud83d\udc76\ud83c\udfff", + "boy_tone1": "\ud83d\udc66\ud83c\udffb", + "boy_tone2": "\ud83d\udc66\ud83c\udffc", + "boy_tone3": "\ud83d\udc66\ud83c\udffd", + "boy_tone4": "\ud83d\udc66\ud83c\udffe", + "boy_tone5": "\ud83d\udc66\ud83c\udfff", + "girl_tone1": "\ud83d\udc67\ud83c\udffb", + "girl_tone2": "\ud83d\udc67\ud83c\udffc", + "girl_tone3": "\ud83d\udc67\ud83c\udffd", + "girl_tone4": "\ud83d\udc67\ud83c\udffe", + "girl_tone5": "\ud83d\udc67\ud83c\udfff", + "man_tone1": "\ud83d\udc68\ud83c\udffb", + "man_tone2": "\ud83d\udc68\ud83c\udffc", + "man_tone3": "\ud83d\udc68\ud83c\udffd", + "man_tone4": "\ud83d\udc68\ud83c\udffe", + "man_tone5": "\ud83d\udc68\ud83c\udfff", + "woman_tone1": "\ud83d\udc69\ud83c\udffb", + "woman_tone2": "\ud83d\udc69\ud83c\udffc", + "woman_tone3": "\ud83d\udc69\ud83c\udffd", + "woman_tone4": "\ud83d\udc69\ud83c\udffe", + "woman_tone5": "\ud83d\udc69\ud83c\udfff", + "person_with_blond_hair_tone1": "\ud83d\udc71\ud83c\udffb", + "person_with_blond_hair_tone2": "\ud83d\udc71\ud83c\udffc", + "person_with_blond_hair_tone3": "\ud83d\udc71\ud83c\udffd", + "person_with_blond_hair_tone4": "\ud83d\udc71\ud83c\udffe", + "person_with_blond_hair_tone5": "\ud83d\udc71\ud83c\udfff", + "older_man_tone1": "\ud83d\udc74\ud83c\udffb", + "older_man_tone2": "\ud83d\udc74\ud83c\udffc", + "older_man_tone3": "\ud83d\udc74\ud83c\udffd", + "older_man_tone4": "\ud83d\udc74\ud83c\udffe", + "older_man_tone5": "\ud83d\udc74\ud83c\udfff", + "older_woman_tone1": "\ud83d\udc75\ud83c\udffb", + "older_woman_tone2": "\ud83d\udc75\ud83c\udffc", + "older_woman_tone3": "\ud83d\udc75\ud83c\udffd", + "older_woman_tone4": "\ud83d\udc75\ud83c\udffe", + "older_woman_tone5": "\ud83d\udc75\ud83c\udfff", + "man_with_gua_pi_mao_tone1": "\ud83d\udc72\ud83c\udffb", + "man_with_gua_pi_mao_tone2": "\ud83d\udc72\ud83c\udffc", + "man_with_gua_pi_mao_tone3": "\ud83d\udc72\ud83c\udffd", + "man_with_gua_pi_mao_tone4": "\ud83d\udc72\ud83c\udffe", + "man_with_gua_pi_mao_tone5": "\ud83d\udc72\ud83c\udfff", + "man_with_turban_tone1": "\ud83d\udc73\ud83c\udffb", + "man_with_turban_tone2": "\ud83d\udc73\ud83c\udffc", + "man_with_turban_tone3": "\ud83d\udc73\ud83c\udffd", + "man_with_turban_tone4": "\ud83d\udc73\ud83c\udffe", + "man_with_turban_tone5": "\ud83d\udc73\ud83c\udfff", + "cop_tone1": "\ud83d\udc6e\ud83c\udffb", + "cop_tone2": "\ud83d\udc6e\ud83c\udffc", + "cop_tone3": "\ud83d\udc6e\ud83c\udffd", + "cop_tone4": "\ud83d\udc6e\ud83c\udffe", + "cop_tone5": "\ud83d\udc6e\ud83c\udfff", + "construction_worker_tone1": "\ud83d\udc77\ud83c\udffb", + "construction_worker_tone2": "\ud83d\udc77\ud83c\udffc", + "construction_worker_tone3": "\ud83d\udc77\ud83c\udffd", + "construction_worker_tone4": "\ud83d\udc77\ud83c\udffe", + "construction_worker_tone5": "\ud83d\udc77\ud83c\udfff", + "guardsman_tone1": "\ud83d\udc82\ud83c\udffb", + "guardsman_tone2": "\ud83d\udc82\ud83c\udffc", + "guardsman_tone3": "\ud83d\udc82\ud83c\udffd", + "guardsman_tone4": "\ud83d\udc82\ud83c\udffe", + "guardsman_tone5": "\ud83d\udc82\ud83c\udfff", + "santa_tone1": "\ud83c\udf85\ud83c\udffb", + "santa_tone2": "\ud83c\udf85\ud83c\udffc", + "santa_tone3": "\ud83c\udf85\ud83c\udffd", + "santa_tone4": "\ud83c\udf85\ud83c\udffe", + "santa_tone5": "\ud83c\udf85\ud83c\udfff", + "angel_tone1": "\ud83d\udc7c\ud83c\udffb", + "angel_tone2": "\ud83d\udc7c\ud83c\udffc", + "angel_tone3": "\ud83d\udc7c\ud83c\udffd", + "angel_tone4": "\ud83d\udc7c\ud83c\udffe", + "angel_tone5": "\ud83d\udc7c\ud83c\udfff", + "princess_tone1": "\ud83d\udc78\ud83c\udffb", + "princess_tone2": "\ud83d\udc78\ud83c\udffc", + "princess_tone3": "\ud83d\udc78\ud83c\udffd", + "princess_tone4": "\ud83d\udc78\ud83c\udffe", + "princess_tone5": "\ud83d\udc78\ud83c\udfff", + "bride_with_veil_tone1": "\ud83d\udc70\ud83c\udffb", + "bride_with_veil_tone2": "\ud83d\udc70\ud83c\udffc", + "bride_with_veil_tone3": "\ud83d\udc70\ud83c\udffd", + "bride_with_veil_tone4": "\ud83d\udc70\ud83c\udffe", + "bride_with_veil_tone5": "\ud83d\udc70\ud83c\udfff", + "walking_tone1": "\ud83d\udeb6\ud83c\udffb", + "walking_tone2": "\ud83d\udeb6\ud83c\udffc", + "walking_tone3": "\ud83d\udeb6\ud83c\udffd", + "walking_tone4": "\ud83d\udeb6\ud83c\udffe", + "walking_tone5": "\ud83d\udeb6\ud83c\udfff", + "runner_tone1": "\ud83c\udfc3\ud83c\udffb", + "runner_tone2": "\ud83c\udfc3\ud83c\udffc", + "runner_tone3": "\ud83c\udfc3\ud83c\udffd", + "runner_tone4": "\ud83c\udfc3\ud83c\udffe", + "runner_tone5": "\ud83c\udfc3\ud83c\udfff", + "dancer_tone1": "\ud83d\udc83\ud83c\udffb", + "dancer_tone2": "\ud83d\udc83\ud83c\udffc", + "dancer_tone3": "\ud83d\udc83\ud83c\udffd", + "dancer_tone4": "\ud83d\udc83\ud83c\udffe", + "dancer_tone5": "\ud83d\udc83\ud83c\udfff", + "bow_tone1": "\ud83d\ude47\ud83c\udffb", + "bow_tone2": "\ud83d\ude47\ud83c\udffc", + "bow_tone3": "\ud83d\ude47\ud83c\udffd", + "bow_tone4": "\ud83d\ude47\ud83c\udffe", + "bow_tone5": "\ud83d\ude47\ud83c\udfff", + "information_desk_person_tone1": "\ud83d\udc81\ud83c\udffb", + "information_desk_person_tone2": "\ud83d\udc81\ud83c\udffc", + "information_desk_person_tone3": "\ud83d\udc81\ud83c\udffd", + "information_desk_person_tone4": "\ud83d\udc81\ud83c\udffe", + "information_desk_person_tone5": "\ud83d\udc81\ud83c\udfff", + "no_good_tone1": "\ud83d\ude45\ud83c\udffb", + "no_good_tone2": "\ud83d\ude45\ud83c\udffc", + "no_good_tone3": "\ud83d\ude45\ud83c\udffd", + "no_good_tone4": "\ud83d\ude45\ud83c\udffe", + "no_good_tone5": "\ud83d\ude45\ud83c\udfff", + "ok_woman_tone1": "\ud83d\ude46\ud83c\udffb", + "ok_woman_tone2": "\ud83d\ude46\ud83c\udffc", + "ok_woman_tone3": "\ud83d\ude46\ud83c\udffd", + "ok_woman_tone4": "\ud83d\ude46\ud83c\udffe", + "ok_woman_tone5": "\ud83d\ude46\ud83c\udfff", + "raising_hand_tone1": "\ud83d\ude4b\ud83c\udffb", + "raising_hand_tone2": "\ud83d\ude4b\ud83c\udffc", + "raising_hand_tone3": "\ud83d\ude4b\ud83c\udffd", + "raising_hand_tone4": "\ud83d\ude4b\ud83c\udffe", + "raising_hand_tone5": "\ud83d\ude4b\ud83c\udfff", + "person_with_pouting_face_tone1": "\ud83d\ude4e\ud83c\udffb", + "person_with_pouting_face_tone2": "\ud83d\ude4e\ud83c\udffc", + "person_with_pouting_face_tone3": "\ud83d\ude4e\ud83c\udffd", + "person_with_pouting_face_tone4": "\ud83d\ude4e\ud83c\udffe", + "person_with_pouting_face_tone5": "\ud83d\ude4e\ud83c\udfff", + "person_frowning_tone1": "\ud83d\ude4d\ud83c\udffb", + "person_frowning_tone2": "\ud83d\ude4d\ud83c\udffc", + "person_frowning_tone3": "\ud83d\ude4d\ud83c\udffd", + "person_frowning_tone4": "\ud83d\ude4d\ud83c\udffe", + "person_frowning_tone5": "\ud83d\ude4d\ud83c\udfff", + "haircut_tone1": "\ud83d\udc87\ud83c\udffb", + "haircut_tone2": "\ud83d\udc87\ud83c\udffc", + "haircut_tone3": "\ud83d\udc87\ud83c\udffd", + "haircut_tone4": "\ud83d\udc87\ud83c\udffe", + "haircut_tone5": "\ud83d\udc87\ud83c\udfff", + "massage_tone1": "\ud83d\udc86\ud83c\udffb", + "massage_tone2": "\ud83d\udc86\ud83c\udffc", + "massage_tone3": "\ud83d\udc86\ud83c\udffd", + "massage_tone4": "\ud83d\udc86\ud83c\udffe", + "massage_tone5": "\ud83d\udc86\ud83c\udfff", + "rowboat_tone1": "\ud83d\udea3\ud83c\udffb", + "rowboat_tone2": "\ud83d\udea3\ud83c\udffc", + "rowboat_tone3": "\ud83d\udea3\ud83c\udffd", + "rowboat_tone4": "\ud83d\udea3\ud83c\udffe", + "rowboat_tone5": "\ud83d\udea3\ud83c\udfff", + "swimmer_tone1": "\ud83c\udfca\ud83c\udffb", + "swimmer_tone2": "\ud83c\udfca\ud83c\udffc", + "swimmer_tone3": "\ud83c\udfca\ud83c\udffd", + "swimmer_tone4": "\ud83c\udfca\ud83c\udffe", + "swimmer_tone5": "\ud83c\udfca\ud83c\udfff", + "surfer_tone1": "\ud83c\udfc4\ud83c\udffb", + "surfer_tone2": "\ud83c\udfc4\ud83c\udffc", + "surfer_tone3": "\ud83c\udfc4\ud83c\udffd", + "surfer_tone4": "\ud83c\udfc4\ud83c\udffe", + "surfer_tone5": "\ud83c\udfc4\ud83c\udfff", + "bath_tone1": "\ud83d\udec0\ud83c\udffb", + "bath_tone2": "\ud83d\udec0\ud83c\udffc", + "bath_tone3": "\ud83d\udec0\ud83c\udffd", + "bath_tone4": "\ud83d\udec0\ud83c\udffe", + "bath_tone5": "\ud83d\udec0\ud83c\udfff", + "basketball_player_tone1": "\u26f9\ud83c\udffb", + "basketball_player_tone2": "\u26f9\ud83c\udffc", + "basketball_player_tone3": "\u26f9\ud83c\udffd", + "basketball_player_tone4": "\u26f9\ud83c\udffe", + "basketball_player_tone5": "\u26f9\ud83c\udfff", + "lifter_tone1": "\ud83c\udfcb\ud83c\udffb", + "lifter_tone2": "\ud83c\udfcb\ud83c\udffc", + "lifter_tone3": "\ud83c\udfcb\ud83c\udffd", + "lifter_tone4": "\ud83c\udfcb\ud83c\udffe", + "lifter_tone5": "\ud83c\udfcb\ud83c\udfff", + "bicyclist_tone1": "\ud83d\udeb4\ud83c\udffb", + "bicyclist_tone2": "\ud83d\udeb4\ud83c\udffc", + "bicyclist_tone3": "\ud83d\udeb4\ud83c\udffd", + "bicyclist_tone4": "\ud83d\udeb4\ud83c\udffe", + "bicyclist_tone5": "\ud83d\udeb4\ud83c\udfff", + "mountain_bicyclist_tone1": "\ud83d\udeb5\ud83c\udffb", + "mountain_bicyclist_tone2": "\ud83d\udeb5\ud83c\udffc", + "mountain_bicyclist_tone3": "\ud83d\udeb5\ud83c\udffd", + "mountain_bicyclist_tone4": "\ud83d\udeb5\ud83c\udffe", + "mountain_bicyclist_tone5": "\ud83d\udeb5\ud83c\udfff", + "horse_racing_tone1": "\ud83c\udfc7\ud83c\udffb", + "horse_racing_tone2": "\ud83c\udfc7\ud83c\udffc", + "horse_racing_tone3": "\ud83c\udfc7\ud83c\udffd", + "horse_racing_tone4": "\ud83c\udfc7\ud83c\udffe", + "horse_racing_tone5": "\ud83c\udfc7\ud83c\udfff", + "spy_tone1": "\ud83d\udd75\ud83c\udffb", + "spy_tone2": "\ud83d\udd75\ud83c\udffc", + "spy_tone3": "\ud83d\udd75\ud83c\udffd", + "spy_tone4": "\ud83d\udd75\ud83c\udffe", + "spy_tone5": "\ud83d\udd75\ud83c\udfff", + "tone1": "\ud83c\udffb", + "tone2": "\ud83c\udffc", + "tone3": "\ud83c\udffd", + "tone4": "\ud83c\udffe", + "tone5": "\ud83c\udfff" +} diff --git a/scripts/celerity/generate_emoji.php b/scripts/celerity/generate_emoji.php new file mode 100755 index 0000000000..821fafa0ef --- /dev/null +++ b/scripts/celerity/generate_emoji.php @@ -0,0 +1,48 @@ +#!/usr/bin/env php +setTagline(pht('regenerate Emoji data sheets')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'force', + 'help' => pht('Force regeneration even if sources have not changed.'), + ), + )); + +$root = dirname(phutil_get_library_root('phabricator')); +$path = $root.'/webroot/rsrc/externals/emojione/emoji_strategy.json'; +$export_path = $root.'/webroot/rsrc/emoji/manifest.json'; + +if (Filesystem::pathExists($path)) { + $json = Filesystem::readFile($path); + + $emojis = phutil_json_decode($json); + $data = array(); + foreach ($emojis as $shortname => $emoji) { + $unicode = $emoji['unicode']; + $codes = explode('-', $unicode); + $hex = ''; + foreach ($codes as $code) { + $hex .= phutil_utf8_encode_codepoint(hexdec($code)); + } + $data[$shortname] = $hex; + } + + $json = new PhutilJSON(); + $data = $json->encodeFormatted($data); + Filesystem::writeFile($export_path, $data); + echo pht('Done.')."\n"; +} else { + echo pht('Path %s not exist.', $path)."\n"; +} diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index e432e1f981..8dae3d81ef 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1412,6 +1412,7 @@ phutil_register_library_map(array( 'LiskRawMigrationIterator' => 'infrastructure/storage/lisk/LiskRawMigrationIterator.php', 'MacroConduitAPIMethod' => 'applications/macro/conduit/MacroConduitAPIMethod.php', 'MacroCreateMemeConduitAPIMethod' => 'applications/macro/conduit/MacroCreateMemeConduitAPIMethod.php', + 'MacroEmojiExample' => 'applications/uiexample/examples/MacroEmojiExample.php', 'MacroQueryConduitAPIMethod' => 'applications/macro/conduit/MacroQueryConduitAPIMethod.php', 'ManiphestAssignEmailCommand' => 'applications/maniphest/command/ManiphestAssignEmailCommand.php', 'ManiphestAssigneeDatasource' => 'applications/maniphest/typeahead/ManiphestAssigneeDatasource.php', @@ -2626,6 +2627,7 @@ phutil_register_library_map(array( 'PhabricatorEmailVarySubjectsSetting' => 'applications/settings/setting/PhabricatorEmailVarySubjectsSetting.php', 'PhabricatorEmailVerificationController' => 'applications/auth/controller/PhabricatorEmailVerificationController.php', 'PhabricatorEmbedFileRemarkupRule' => 'applications/files/markup/PhabricatorEmbedFileRemarkupRule.php', + 'PhabricatorEmojiDatasource' => 'applications/macro/typeahead/PhabricatorEmojiDatasource.php', 'PhabricatorEmojiRemarkupRule' => 'applications/macro/markup/PhabricatorEmojiRemarkupRule.php', 'PhabricatorEmojiTranslation' => 'infrastructure/internationalization/translation/PhabricatorEmojiTranslation.php', 'PhabricatorEmptyQueryException' => 'infrastructure/query/PhabricatorEmptyQueryException.php', @@ -6242,6 +6244,7 @@ phutil_register_library_map(array( 'LiskRawMigrationIterator' => 'PhutilBufferedIterator', 'MacroConduitAPIMethod' => 'ConduitAPIMethod', 'MacroCreateMemeConduitAPIMethod' => 'MacroConduitAPIMethod', + 'MacroEmojiExample' => 'PhabricatorUIExample', 'MacroQueryConduitAPIMethod' => 'MacroConduitAPIMethod', 'ManiphestAssignEmailCommand' => 'ManiphestEmailCommand', 'ManiphestAssigneeDatasource' => 'PhabricatorTypeaheadCompositeDatasource', @@ -7639,6 +7642,7 @@ phutil_register_library_map(array( 'PhabricatorEmailVarySubjectsSetting' => 'PhabricatorSelectSetting', 'PhabricatorEmailVerificationController' => 'PhabricatorAuthController', 'PhabricatorEmbedFileRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorEmojiDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorEmojiRemarkupRule' => 'PhutilRemarkupRule', 'PhabricatorEmojiTranslation' => 'PhutilTranslation', 'PhabricatorEmptyQueryException' => 'Exception', diff --git a/src/applications/macro/markup/PhabricatorEmojiRemarkupRule.php b/src/applications/macro/markup/PhabricatorEmojiRemarkupRule.php index 9bb8d7f9f4..1ed0b442f2 100644 --- a/src/applications/macro/markup/PhabricatorEmojiRemarkupRule.php +++ b/src/applications/macro/markup/PhabricatorEmojiRemarkupRule.php @@ -13,6 +13,13 @@ final class PhabricatorEmojiRemarkupRule extends PhutilRemarkupRule { $text); } + public function markupEmojiJSON() { + $root = dirname(phutil_get_library_root('phabricator')); + $json = Filesystem::readFile( + $root.'/resources/emoji/manifest.json'); + return $json; + } + public function markupEmoji(array $matches) { if (!$this->isFlatText($matches[0])) { return $matches[0]; diff --git a/src/applications/macro/typeahead/PhabricatorEmojiDatasource.php b/src/applications/macro/typeahead/PhabricatorEmojiDatasource.php new file mode 100644 index 0000000000..e740af11cb --- /dev/null +++ b/src/applications/macro/typeahead/PhabricatorEmojiDatasource.php @@ -0,0 +1,45 @@ +buildResults(); + return $this->filterResultsAgainstTokens($results); + } + + protected function renderSpecialTokens(array $values) { + return $this->renderTokensFromResults($this->buildResults(), $values); + } + + private function buildResults() { + $raw_query = $this->getRawQuery(); + + $data = id(new PhabricatorEmojiRemarkupRule())->markupEmojiJSON(); + $emojis = phutil_json_decode($data); + + $results = array(); + foreach ($emojis as $shortname => $emoji) { + $display_name = $emoji.' '.$shortname; + $result = id(new PhabricatorTypeaheadResult()) + ->setPHID($shortname) + ->setName($display_name) + ->setAutocomplete($emoji); + + $results[$shortname] = $result; + } + return $results; + } + +} diff --git a/src/applications/uiexample/examples/MacroEmojiExample.php b/src/applications/uiexample/examples/MacroEmojiExample.php new file mode 100644 index 0000000000..fddf20bc32 --- /dev/null +++ b/src/applications/uiexample/examples/MacroEmojiExample.php @@ -0,0 +1,47 @@ +markupEmojiJSON(); + + $json = phutil_json_decode($raw); + + $content = array(); + foreach ($json as $shortname => $hex) { + + $display_name = ' '.$hex.' '.$shortname; + + $content[] = phutil_tag( + 'div', + array( + 'class' => 'ms grouped', + 'style' => 'width: 240px; height: 24px; float: left;', + ), + $display_name); + + } + + $wrap = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Emojis')) + ->addClass('grouped') + ->appendChild($content); + + return phutil_tag( + 'div', + array(), + array( + $wrap, + )); + } +} diff --git a/src/view/form/control/PhabricatorRemarkupControl.php b/src/view/form/control/PhabricatorRemarkupControl.php index 7303f97401..35a1bcc8df 100644 --- a/src/view/form/control/PhabricatorRemarkupControl.php +++ b/src/view/form/control/PhabricatorRemarkupControl.php @@ -55,6 +55,7 @@ final class PhabricatorRemarkupControl extends AphrontFormTextAreaControl { $root_id = celerity_generate_unique_node_id(); $user_datasource = new PhabricatorPeopleDatasource(); + $emoji_datasource = new PhabricatorEmojiDatasource(); $proj_datasource = id(new PhabricatorProjectDatasource()) ->setParameters( array( @@ -91,6 +92,12 @@ final class PhabricatorRemarkupControl extends AphrontFormTextAreaControl { 'headerText' => pht('Find Project:'), 'hintText' => $proj_datasource->getPlaceholderText(), ), + 58 => array( // ":" + 'datasourceURI' => $emoji_datasource->getDatasourceURI(), + 'headerIcon' => 'fa-smile-o', + 'headerText' => pht('Find Emoji:'), + 'hintText' => $emoji_datasource->getPlaceholderText(), + ), ), )); Javelin::initBehavior('phabricator-tooltips', array()); diff --git a/webroot/rsrc/js/phuix/PHUIXAutocomplete.js b/webroot/rsrc/js/phuix/PHUIXAutocomplete.js index 94f37dc413..b7116c557b 100644 --- a/webroot/rsrc/js/phuix/PHUIXAutocomplete.js +++ b/webroot/rsrc/js/phuix/PHUIXAutocomplete.js @@ -118,7 +118,6 @@ JX.install('PHUIXAutocomplete', { case '|': // Might be a table cell. case '>': // Might be a blockquote. case '!': // Might be a blockquote attribution line. - case ':': // Might be a "NOTE:". // We'll let these autocomplete. break; default: