-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Introduce emoji plugin #2006
Introduce emoji plugin #2006
Conversation
Rebased the PR after latest changes in autocomplete branch. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good idea with the matching, I like how it feels from the end user perspective.
However there are issues with docs, and I can see that some tests are failing. Please make sure all tests are passing.
Test: http://tests.ckeditor.test:1030/tests/plugins/emoji/manual/preventtransformation fails.
- Open the test.
- Focus the first editor.
- Use format dropdown to convert paragraph into the "Heading 1".
- Put the caret after "Hello" word (
Hello^ world.
). - Type
:
.
Expected
No autocomplete dropdown is visible.
Actual
Autocomplete dropdown appears.
plugins/emoji/plugin.js
Outdated
var defaultEmojiList = [{id:':grinning_face:',symbol:'😀'},{id:':beaming_face_with_smiling_eyes:',symbol:'😁'},{id:':face_with_tears_of_joy:',symbol:'😂'},{id:':rolling_on_the_floor_laughing:',symbol:'🤣'},{id:':grinning_face_with_big_eyes:',symbol:'😃'},{id:':grinning_face_with_smiling_eyes:',symbol:'😄'},{id:':grinning_face_with_sweat:',symbol:'😅'},{id:':grinning_squinting_face:',symbol:'😆'},{id:':winking_face:',symbol:'😉'},{id:':smiling_face_with_smiling_eyes:',symbol:'😊'},{id:':face_savoring_food:',symbol:'😋'},{id:':smiling_face_with_sunglasses:',symbol:'😎'},{id:':smiling_face_with_heart-eyes:',symbol:'😍'},{id:':face_blowing_a_kiss:',symbol:'😘'},{id:':kissing_face:',symbol:'😗'},{id:':kissing_face_with_smiling_eyes:',symbol:'😙'},{id:':kissing_face_with_closed_eyes:',symbol:'😚'},{id:':smiling_face:',symbol:'☺'},{id:':slightly_smiling_face:',symbol:'🙂'},{id:':hugging_face:',symbol:'🤗'},{id:':star-struck:',symbol:'🤩'},{id:':thinking_face:',symbol:'🤔'},{id:':face_with_raised_eyebrow:',symbol:'🤨'},{id:':neutral_face:',symbol:'😐'},{id:':expressionless_face:',symbol:'😑'},{id:':face_without_mouth:',symbol:'😶'},{id:':face_with_rolling_eyes:',symbol:'🙄'},{id:':smirking_face:',symbol:'😏'},{id:':persevering_face:',symbol:'😣'},{id:':sad_but_relieved_face:',symbol:'😥'},{id:':face_with_open_mouth:',symbol:'😮'},{id:':zipper-mouth_face:',symbol:'🤐'},{id:':hushed_face:',symbol:'😯'},{id:':sleepy_face:',symbol:'😪'},{id:':tired_face:',symbol:'😫'},{id:':sleeping_face:',symbol:'😴'},{id:':relieved_face:',symbol:'😌'},{id:':face_with_tongue:',symbol:'😛'},{id:':winking_face_with_tongue:',symbol:'😜'},{id:':squinting_face_with_tongue:',symbol:'😝'},{id:':drooling_face:',symbol:'🤤'},{id:':unamused_face:',symbol:'😒'},{id:':downcast_face_with_sweat:',symbol:'😓'},{id:':pensive_face:',symbol:'😔'},{id:':confused_face:',symbol:'😕'},{id:':upside-down_face:',symbol:'🙃'},{id:':money-mouth_face:',symbol:'🤑'},{id:':astonished_face:',symbol:'😲'},{id:':frowning_face:',symbol:'☹'},{id:':slightly_frowning_face:',symbol:'🙁'},{id:':confounded_face:',symbol:'😖'},{id:':disappointed_face:',symbol:'😞'},{id:':worried_face:',symbol:'😟'},{id:':face_with_steam_from_nose:',symbol:'😤'},{id:':crying_face:',symbol:'😢'},{id:':loudly_crying_face:',symbol:'😭'},{id:':frowning_face_with_open_mouth:',symbol:'😦'},{id:':anguished_face:',symbol:'😧'},{id:':fearful_face:',symbol:'😨'},{id:':weary_face:',symbol:'😩'},{id:':exploding_head:',symbol:'🤯'},{id:':grimacing_face:',symbol:'😬'},{id:':anxious_face_with_sweat:',symbol:'😰'},{id:':face_screaming_in_fear:',symbol:'😱'},{id:':flushed_face:',symbol:'😳'},{id:':zany_face:',symbol:'🤪'},{id:':dizzy_face:',symbol:'😵'},{id:':pouting_face:',symbol:'😡'},{id:':angry_face:',symbol:'😠'},{id:':face_with_symbols_on_mouth:',symbol:'🤬'},{id:':face_with_medical_mask:',symbol:'😷'},{id:':face_with_thermometer:',symbol:'🤒'},{id:':face_with_head-bandage:',symbol:'🤕'},{id:':nauseated_face:',symbol:'🤢'},{id:':face_vomiting:',symbol:'🤮'},{id:':sneezing_face:',symbol:'🤧'},{id:':smiling_face_with_halo:',symbol:'😇'},{id:':cowboy_hat_face:',symbol:'🤠'},{id:':lying_face:',symbol:'🤥'},{id:':shushing_face:',symbol:'🤫'},{id:':face_with_hand_over_mouth:',symbol:'🤭'},{id:':face_with_monocle:',symbol:'🧐'},{id:':nerd_face:',symbol:'🤓'},{id:':smiling_face_with_horns:',symbol:'😈'},{id:':angry_face_with_horns:',symbol:'👿'},{id:':clown_face:',symbol:'🤡'},{id:':ogre:',symbol:'👹'},{id:':goblin:',symbol:'👺'},{id:':skull:',symbol:'💀'},{id:':skull_and_crossbones:',symbol:'☠'},{id:':ghost:',symbol:'👻'},{id:':alien:',symbol:'👽'},{id:':alien_monster:',symbol:'👾'},{id:':robot_face:',symbol:'🤖'},{id:':pile_of_poo:',symbol:'💩'},{id:':grinning_cat_face:',symbol:'😺'},{id:':grinning_cat_face_with_smiling_eyes:',symbol:'😸'},{id:':cat_face_with_tears_of_joy:',symbol:'😹'},{id:':smiling_cat_face_with_heart-eyes:',symbol:'😻'},{id:':cat_face_with_wry_smile:',symbol:'😼'},{id:':kissing_cat_face:',symbol:'😽'},{id:':weary_cat_face:',symbol:'🙀'},{id:':crying_cat_face:',symbol:'😿'},{id:':pouting_cat_face:',symbol:'😾'},{id:':see-no-evil_monkey:',symbol:'🙈'},{id:':hear-no-evil_monkey:',symbol:'🙉'},{id:':speak-no-evil_monkey:',symbol:'🙊'},{id:':baby:',symbol:'👶'},{id:':child:',symbol:'🧒'},{id:':boy:',symbol:'👦'},{id:':girl:',symbol:'👧'},{id:':adult:',symbol:'🧑'},{id:':man:',symbol:'👨'},{id:':woman:',symbol:'👩'},{id:':older_adult:',symbol:'🧓'},{id:':old_man:',symbol:'👴'},{id:':old_woman:',symbol:'👵'},{id:':man_health_worker:',symbol:'👨⚕️'},{id:':woman_health_worker:',symbol:'👩⚕️'},{id:':man_student:',symbol:'👨🎓'},{id:':woman_student:',symbol:'👩🎓'},{id:':man_teacher:',symbol:'👨🏫'},{id:':woman_teacher:',symbol:'👩🏫'},{id:':man_judge:',symbol:'👨⚖️'},{id:':woman_judge:',symbol:'👩⚖️'},{id:':man_farmer:',symbol:'👨🌾'},{id:':woman_farmer:',symbol:'👩🌾'},{id:':man_cook:',symbol:'👨🍳'},{id:':woman_cook:',symbol:'👩🍳'},{id:':man_mechanic:',symbol:'👨🔧'},{id:':woman_mechanic:',symbol:'👩🔧'},{id:':man_factory_worker:',symbol:'👨🏭'},{id:':woman_factory_worker:',symbol:'👩🏭'},{id:':man_office_worker:',symbol:'👨💼'},{id:':woman_office_worker:',symbol:'👩💼'},{id:':man_scientist:',symbol:'👨🔬'},{id:':woman_scientist:',symbol:'👩🔬'},{id:':man_technologist:',symbol:'👨💻'},{id:':woman_technologist:',symbol:'👩💻'},{id:':man_singer:',symbol:'👨🎤'},{id:':woman_singer:',symbol:'👩🎤'},{id:':man_artist:',symbol:'👨🎨'},{id:':woman_artist:',symbol:'👩🎨'},{id:':man_pilot:',symbol:'👨✈️'},{id:':woman_pilot:',symbol:'👩✈️'},{id:':man_astronaut:',symbol:'👨🚀'},{id:':woman_astronaut:',symbol:'👩🚀'},{id:':man_firefighter:',symbol:'👨🚒'},{id:':woman_firefighter:',symbol:'👩🚒'},{id:':police_officer:',symbol:'👮'},{id:':man_police_officer:',symbol:'👮♂️'},{id:':woman_police_officer:',symbol:'👮♀️'},{id:':detective:',symbol:'🕵'},{id:':man_detective:',symbol:'🕵️♂️'},{id:':woman_detective:',symbol:'🕵️♀️'},{id:':guard:',symbol:'💂'},{id:':man_guard:',symbol:'💂♂️'},{id:':woman_guard:',symbol:'💂♀️'},{id:':construction_worker:',symbol:'👷'},{id:':man_construction_worker:',symbol:'👷♂️'},{id:':woman_construction_worker:',symbol:'👷♀️'},{id:':prince:',symbol:'🤴'},{id:':princess:',symbol:'👸'},{id:':person_wearing_turban:',symbol:'👳'},{id:':man_wearing_turban:',symbol:'👳♂️'},{id:':woman_wearing_turban:',symbol:'👳♀️'},{id:':man_with_Chinese_cap:',symbol:'👲'},{id:':woman_with_headscarf:',symbol:'🧕'},{id:':bearded_person:',symbol:'🧔'},{id:':blond-haired_person:',symbol:'👱'},{id:':blond-haired_man:',symbol:'👱♂️'},{id:':blond-haired_woman:',symbol:'👱♀️'},{id:':man_in_tuxedo:',symbol:'🤵'},{id:':bride_with_veil:',symbol:'👰'},{id:':pregnant_woman:',symbol:'🤰'},{id:':breast-feeding:',symbol:'🤱'},{id:':baby_angel:',symbol:'👼'},{id:':Santa_Claus:',symbol:'🎅'},{id:':Mrs._Claus:',symbol:'🤶'},{id:':mage:',symbol:'🧙'},{id:':woman_mage:',symbol:'🧙♀️'},{id:':man_mage:',symbol:'🧙♂️'},{id:':fairy:',symbol:'🧚'},{id:':woman_fairy:',symbol:'🧚♀️'},{id:':man_fairy:',symbol:'🧚♂️'},{id:':vampire:',symbol:'🧛'},{id:':woman_vampire:',symbol:'🧛♀️'},{id:':man_vampire:',symbol:'🧛♂️'},{id:':merperson:',symbol:'🧜'},{id:':mermaid:',symbol:'🧜♀️'},{id:':merman:',symbol:'🧜♂️'},{id:':elf:',symbol:'🧝'},{id:':woman_elf:',symbol:'🧝♀️'},{id:':man_elf:',symbol:'🧝♂️'},{id:':genie:',symbol:'🧞'},{id:':woman_genie:',symbol:'🧞♀️'},{id:':man_genie:',symbol:'🧞♂️'},{id:':zombie:',symbol:'🧟'},{id:':woman_zombie:',symbol:'🧟♀️'},{id:':man_zombie:',symbol:'🧟♂️'},{id:':person_frowning:',symbol:'🙍'},{id:':man_frowning:',symbol:'🙍♂️'},{id:':woman_frowning:',symbol:'🙍♀️'},{id:':person_pouting:',symbol:'🙎'},{id:':man_pouting:',symbol:'🙎♂️'},{id:':woman_pouting:',symbol:'🙎♀️'},{id:':person_gesturing_NO:',symbol:'🙅'},{id:':man_gesturing_NO:',symbol:'🙅♂️'},{id:':woman_gesturing_NO:',symbol:'🙅♀️'},{id:':person_gesturing_OK:',symbol:'🙆'},{id:':man_gesturing_OK:',symbol:'🙆♂️'},{id:':woman_gesturing_OK:',symbol:'🙆♀️'},{id:':person_tipping_hand:',symbol:'💁'},{id:':man_tipping_hand:',symbol:'💁♂️'},{id:':woman_tipping_hand:',symbol:'💁♀️'},{id:':person_raising_hand:',symbol:'🙋'},{id:':man_raising_hand:',symbol:'🙋♂️'},{id:':woman_raising_hand:',symbol:'🙋♀️'},{id:':person_bowing:',symbol:'🙇'},{id:':man_bowing:',symbol:'🙇♂️'},{id:':woman_bowing:',symbol:'🙇♀️'},{id:':person_facepalming:',symbol:'🤦'},{id:':man_facepalming:',symbol:'🤦♂️'},{id:':woman_facepalming:',symbol:'🤦♀️'},{id:':person_shrugging:',symbol:'🤷'},{id:':man_shrugging:',symbol:'🤷♂️'},{id:':woman_shrugging:',symbol:'🤷♀️'},{id:':person_getting_massage:',symbol:'💆'},{id:':man_getting_massage:',symbol:'💆♂️'},{id:':woman_getting_massage:',symbol:'💆♀️'},{id:':person_getting_haircut:',symbol:'💇'},{id:':man_getting_haircut:',symbol:'💇♂️'},{id:':woman_getting_haircut:',symbol:'💇♀️'},{id:':person_walking:',symbol:'🚶'},{id:':man_walking:',symbol:'🚶♂️'},{id:':woman_walking:',symbol:'🚶♀️'},{id:':person_running:',symbol:'🏃'},{id:':man_running:',symbol:'🏃♂️'},{id:':woman_running:',symbol:'🏃♀️'},{id:':woman_dancing:',symbol:'💃'},{id:':man_dancing:',symbol:'🕺'},{id:':people_with_bunny_ears:',symbol:'👯'},{id:':men_with_bunny_ears:',symbol:'👯♂️'},{id:':women_with_bunny_ears:',symbol:'👯♀️'},{id:':person_in_steamy_room:',symbol:'🧖'},{id:':woman_in_steamy_room:',symbol:'🧖♀️'},{id:':man_in_steamy_room:',symbol:'🧖♂️'},{id:':person_climbing:',symbol:'🧗'},{id:':woman_climbing:',symbol:'🧗♀️'},{id:':man_climbing:',symbol:'🧗♂️'},{id:':person_in_lotus_position:',symbol:'🧘'},{id:':woman_in_lotus_position:',symbol:'🧘♀️'},{id:':man_in_lotus_position:',symbol:'🧘♂️'},{id:':person_taking_bath:',symbol:'🛀'},{id:':person_in_bed:',symbol:'🛌'},{id:':man_in_suit_levitating:',symbol:'🕴'},{id:':speaking_head:',symbol:'🗣'},{id:':bust_in_silhouette:',symbol:'👤'},{id:':busts_in_silhouette:',symbol:'👥'},{id:':person_fencing:',symbol:'🤺'},{id:':horse_racing:',symbol:'🏇'},{id:':skier:',symbol:'⛷'},{id:':snowboarder:',symbol:'🏂'},{id:':person_golfing:',symbol:'🏌'},{id:':man_golfing:',symbol:'🏌️♂️'},{id:':woman_golfing:',symbol:'🏌️♀️'},{id:':person_surfing:',symbol:'🏄'},{id:':man_surfing:',symbol:'🏄♂️'},{id:':woman_surfing:',symbol:'🏄♀️'},{id:':person_rowing_boat:',symbol:'🚣'},{id:':man_rowing_boat:',symbol:'🚣♂️'},{id:':woman_rowing_boat:',symbol:'🚣♀️'},{id:':person_swimming:',symbol:'🏊'},{id:':man_swimming:',symbol:'🏊♂️'},{id:':woman_swimming:',symbol:'🏊♀️'},{id:':person_bouncing_ball:',symbol:'⛹'},{id:':man_bouncing_ball:',symbol:'⛹️♂️'},{id:':woman_bouncing_ball:',symbol:'⛹️♀️'},{id:':person_lifting_weights:',symbol:'🏋'},{id:':man_lifting_weights:',symbol:'🏋️♂️'},{id:':woman_lifting_weights:',symbol:'🏋️♀️'},{id:':person_biking:',symbol:'🚴'},{id:':man_biking:',symbol:'🚴♂️'},{id:':woman_biking:',symbol:'🚴♀️'},{id:':person_mountain_biking:',symbol:'🚵'},{id:':man_mountain_biking:',symbol:'🚵♂️'},{id:':woman_mountain_biking:',symbol:'🚵♀️'},{id:':racing_car:',symbol:'🏎'},{id:':motorcycle:',symbol:'🏍'},{id:':person_cartwheeling:',symbol:'🤸'},{id:':man_cartwheeling:',symbol:'🤸♂️'},{id:':woman_cartwheeling:',symbol:'🤸♀️'},{id:':people_wrestling:',symbol:'🤼'},{id:':men_wrestling:',symbol:'🤼♂️'},{id:':women_wrestling:',symbol:'🤼♀️'},{id:':person_playing_water_polo:',symbol:'🤽'},{id:':man_playing_water_polo:',symbol:'🤽♂️'},{id:':woman_playing_water_polo:',symbol:'🤽♀️'},{id:':person_playing_handball:',symbol:'🤾'},{id:':man_playing_handball:',symbol:'🤾♂️'},{id:':woman_playing_handball:',symbol:'🤾♀️'},{id:':person_juggling:',symbol:'🤹'},{id:':man_juggling:',symbol:'🤹♂️'},{id:':woman_juggling:',symbol:'🤹♀️'},{id:':man_and_woman_holding_hands:',symbol:'👫'},{id:':two_men_holding_hands:',symbol:'👬'},{id:':two_women_holding_hands:',symbol:'👭'},{id:':kiss:',symbol:'💏'},{id:':kiss:_woman,_man:',symbol:'👩❤️💋👨'},{id:':kiss:_man,_man:',symbol:'👨❤️💋👨'},{id:':kiss:_woman,_woman:',symbol:'👩❤️💋👩'},{id:':couple_with_heart:',symbol:'💑'},{id:':couple_with_heart:_woman,_man:',symbol:'👩❤️👨'},{id:':couple_with_heart:_man,_man:',symbol:'👨❤️👨'},{id:':couple_with_heart:_woman,_woman:',symbol:'👩❤️👩'},{id:':family:',symbol:'👪'},{id:':family:_man,_woman,_boy:',symbol:'👨👩👦'},{id:':family:_man,_woman,_girl:',symbol:'👨👩👧'},{id:':family:_man,_woman,_girl,_boy:',symbol:'👨👩👧👦'},{id:':family:_man,_woman,_boy,_boy:',symbol:'👨👩👦👦'},{id:':family:_man,_woman,_girl,_girl:',symbol:'👨👩👧👧'},{id:':family:_man,_man,_boy:',symbol:'👨👨👦'},{id:':family:_man,_man,_girl:',symbol:'👨👨👧'},{id:':family:_man,_man,_girl,_boy:',symbol:'👨👨👧👦'},{id:':family:_man,_man,_boy,_boy:',symbol:'👨👨👦👦'},{id:':family:_man,_man,_girl,_girl:',symbol:'👨👨👧👧'},{id:':family:_woman,_woman,_boy:',symbol:'👩👩👦'},{id:':family:_woman,_woman,_girl:',symbol:'👩👩👧'},{id:':family:_woman,_woman,_girl,_boy:',symbol:'👩👩👧👦'},{id:':family:_woman,_woman,_boy,_boy:',symbol:'👩👩👦👦'},{id:':family:_woman,_woman,_girl,_girl:',symbol:'👩👩👧👧'},{id:':family:_man,_boy:',symbol:'👨👦'},{id:':family:_man,_boy,_boy:',symbol:'👨👦👦'},{id:':family:_man,_girl:',symbol:'👨👧'},{id:':family:_man,_girl,_boy:',symbol:'👨👧👦'},{id:':family:_man,_girl,_girl:',symbol:'👨👧👧'},{id:':family:_woman,_boy:',symbol:'👩👦'},{id:':family:_woman,_boy,_boy:',symbol:'👩👦👦'},{id:':family:_woman,_girl:',symbol:'👩👧'},{id:':family:_woman,_girl,_boy:',symbol:'👩👧👦'},{id:':family:_woman,_girl,_girl:',symbol:'👩👧👧'},{id:':selfie:',symbol:'🤳'},{id:':flexed_biceps:',symbol:'💪'},{id:':backhand_index_pointing_left:',symbol:'👈'},{id:':backhand_index_pointing_right:',symbol:'👉'},{id:':index_pointing_up:',symbol:'☝'},{id:':backhand_index_pointing_up:',symbol:'👆'},{id:':middle_finger:',symbol:'🖕'},{id:':backhand_index_pointing_down:',symbol:'👇'},{id:':victory_hand:',symbol:'✌'},{id:':crossed_fingers:',symbol:'🤞'},{id:':vulcan_salute:',symbol:'🖖'},{id:':sign_of_the_horns:',symbol:'🤘'},{id:':call_me_hand:',symbol:'🤙'},{id:':hand_with_fingers_splayed:',symbol:'🖐'},{id:':raised_hand:',symbol:'✋'},{id:':OK_hand:',symbol:'👌'},{id:':thumbs_up:',symbol:'👍'},{id:':thumbs_down:',symbol:'👎'},{id:':raised_fist:',symbol:'✊'},{id:':oncoming_fist:',symbol:'👊'},{id:':left-facing_fist:',symbol:'🤛'},{id:':right-facing_fist:',symbol:'🤜'},{id:':raised_back_of_hand:',symbol:'🤚'},{id:':waving_hand:',symbol:'👋'},{id:':love-you_gesture:',symbol:'🤟'},{id:':writing_hand:',symbol:'✍'},{id:':clapping_hands:',symbol:'👏'},{id:':open_hands:',symbol:'👐'},{id:':raising_hands:',symbol:'🙌'},{id:':palms_up_together:',symbol:'🤲'},{id:':folded_hands:',symbol:'🙏'},{id:':handshake:',symbol:'🤝'},{id:':nail_polish:',symbol:'💅'},{id:':ear:',symbol:'👂'},{id:':nose:',symbol:'👃'},{id:':footprints:',symbol:'👣'},{id:':eyes:',symbol:'👀'},{id:':eye:',symbol:'👁'},{id:':eye_in_speech_bubble:',symbol:'👁️🗨️'},{id:':brain:',symbol:'🧠'},{id:':tongue:',symbol:'👅'},{id:':mouth:',symbol:'👄'},{id:':kiss_mark:',symbol:'💋'},{id:':heart_with_arrow:',symbol:'💘'},{id:':heart_with_ribbon:',symbol:'💝'},{id:':sparkling_heart:',symbol:'💖'},{id:':growing_heart:',symbol:'💗'},{id:':beating_heart:',symbol:'💓'},{id:':revolving_hearts:',symbol:'💞'},{id:':two_hearts:',symbol:'💕'},{id:':love_letter:',symbol:'💌'},{id:':heavy_heart_exclamation:',symbol:'❣'},{id:':broken_heart:',symbol:'💔'},{id:':red_heart:',symbol:'❤'},{id:':orange_heart:',symbol:'🧡'},{id:':yellow_heart:',symbol:'💛'},{id:':green_heart:',symbol:'💚'},{id:':blue_heart:',symbol:'💙'},{id:':purple_heart:',symbol:'💜'},{id:':black_heart:',symbol:'🖤'},{id:':heart_decoration:',symbol:'💟'},{id:':zzz:',symbol:'💤'},{id:':anger_symbol:',symbol:'💢'},{id:':bomb:',symbol:'💣'},{id:':collision:',symbol:'💥'},{id:':sweat_droplets:',symbol:'💦'},{id:':dashing_away:',symbol:'💨'},{id:':dizzy:',symbol:'💫'},{id:':speech_balloon:',symbol:'💬'},{id:':left_speech_bubble:',symbol:'🗨'},{id:':right_anger_bubble:',symbol:'🗯'},{id:':thought_balloon:',symbol:'💭'},{id:':hole:',symbol:'🕳'},{id:':glasses:',symbol:'👓'},{id:':sunglasses:',symbol:'🕶'},{id:':necktie:',symbol:'👔'},{id:':t-shirt:',symbol:'👕'},{id:':jeans:',symbol:'👖'},{id:':scarf:',symbol:'🧣'},{id:':gloves:',symbol:'🧤'},{id:':coat:',symbol:'🧥'},{id:':socks:',symbol:'🧦'},{id:':dress:',symbol:'👗'},{id:':kimono:',symbol:'👘'},{id:':bikini:',symbol:'👙'},{id:':woman’s_clothes:',symbol:'👚'},{id:':purse:',symbol:'👛'},{id:':handbag:',symbol:'👜'},{id:':clutch_bag:',symbol:'👝'},{id:':shopping_bags:',symbol:'🛍'},{id:':backpack:',symbol:'🎒'},{id:':man’s_shoe:',symbol:'👞'},{id:':running_shoe:',symbol:'👟'},{id:':high-heeled_shoe:',symbol:'👠'},{id:':woman’s_sandal:',symbol:'👡'},{id:':woman’s_boot:',symbol:'👢'},{id:':crown:',symbol:'👑'},{id:':woman’s_hat:',symbol:'👒'},{id:':top_hat:',symbol:'🎩'},{id:':graduation_cap:',symbol:'🎓'},{id:':billed_cap:',symbol:'🧢'},{id:':rescue_worker’s_helmet:',symbol:'⛑'},{id:':prayer_beads:',symbol:'📿'},{id:':lipstick:',symbol:'💄'},{id:':ring:',symbol:'💍'},{id:':gem_stone:',symbol:'💎'},{id:':monkey_face:',symbol:'🐵'},{id:':monkey:',symbol:'🐒'},{id:':gorilla:',symbol:'🦍'},{id:':dog_face:',symbol:'🐶'},{id:':dog:',symbol:'🐕'},{id:':poodle:',symbol:'🐩'},{id:':wolf_face:',symbol:'🐺'},{id:':fox_face:',symbol:'🦊'},{id:':cat_face:',symbol:'🐱'},{id:':cat:',symbol:'🐈'},{id:':lion_face:',symbol:'🦁'},{id:':tiger_face:',symbol:'🐯'},{id:':tiger:',symbol:'🐅'},{id:':leopard:',symbol:'🐆'},{id:':horse_face:',symbol:'🐴'},{id:':horse:',symbol:'🐎'},{id:':unicorn_face:',symbol:'🦄'},{id:':zebra:',symbol:'🦓'},{id:':deer:',symbol:'🦌'},{id:':cow_face:',symbol:'🐮'},{id:':ox:',symbol:'🐂'},{id:':water_buffalo:',symbol:'🐃'},{id:':cow:',symbol:'🐄'},{id:':pig_face:',symbol:'🐷'},{id:':pig:',symbol:'🐖'},{id:':boar:',symbol:'🐗'},{id:':pig_nose:',symbol:'🐽'},{id:':ram:',symbol:'🐏'},{id:':ewe:',symbol:'🐑'},{id:':goat:',symbol:'🐐'},{id:':camel:',symbol:'🐪'},{id:':two-hump_camel:',symbol:'🐫'},{id:':giraffe:',symbol:'🦒'},{id:':elephant:',symbol:'🐘'},{id:':rhinoceros:',symbol:'🦏'},{id:':mouse_face:',symbol:'🐭'},{id:':mouse:',symbol:'🐁'},{id:':rat:',symbol:'🐀'},{id:':hamster_face:',symbol:'🐹'},{id:':rabbit_face:',symbol:'🐰'},{id:':rabbit:',symbol:'🐇'},{id:':chipmunk:',symbol:'🐿'},{id:':hedgehog:',symbol:'🦔'},{id:':bat:',symbol:'🦇'},{id:':bear_face:',symbol:'🐻'},{id:':koala:',symbol:'🐨'},{id:':panda_face:',symbol:'🐼'},{id:':paw_prints:',symbol:'🐾'},{id:':turkey:',symbol:'🦃'},{id:':chicken:',symbol:'🐔'},{id:':rooster:',symbol:'🐓'},{id:':hatching_chick:',symbol:'🐣'},{id:':baby_chick:',symbol:'🐤'},{id:':front-facing_baby_chick:',symbol:'🐥'},{id:':bird:',symbol:'🐦'},{id:':penguin:',symbol:'🐧'},{id:':dove:',symbol:'🕊'},{id:':eagle:',symbol:'🦅'},{id:':duck:',symbol:'🦆'},{id:':owl:',symbol:'🦉'},{id:':frog_face:',symbol:'🐸'},{id:':crocodile:',symbol:'🐊'},{id:':turtle:',symbol:'🐢'},{id:':lizard:',symbol:'🦎'},{id:':snake:',symbol:'🐍'},{id:':dragon_face:',symbol:'🐲'},{id:':dragon:',symbol:'🐉'},{id:':sauropod:',symbol:'🦕'},{id:':T-Rex:',symbol:'🦖'},{id:':spouting_whale:',symbol:'🐳'},{id:':whale:',symbol:'🐋'},{id:':dolphin:',symbol:'🐬'},{id:':fish:',symbol:'🐟'},{id:':tropical_fish:',symbol:'🐠'},{id:':blowfish:',symbol:'🐡'},{id:':shark:',symbol:'🦈'},{id:':octopus:',symbol:'🐙'},{id:':spiral_shell:',symbol:'🐚'},{id:':crab:',symbol:'🦀'},{id:':shrimp:',symbol:'🦐'},{id:':squid:',symbol:'🦑'},{id:':snail:',symbol:'🐌'},{id:':butterfly:',symbol:'🦋'},{id:':bug:',symbol:'🐛'},{id:':ant:',symbol:'🐜'},{id:':honeybee:',symbol:'🐝'},{id:':lady_beetle:',symbol:'🐞'},{id:':cricket:',symbol:'🦗'},{id:':spider:',symbol:'🕷'},{id:':spider_web:',symbol:'🕸'},{id:':scorpion:',symbol:'🦂'},{id:':bouquet:',symbol:'💐'},{id:':cherry_blossom:',symbol:'🌸'},{id:':white_flower:',symbol:'💮'},{id:':rosette:',symbol:'🏵'},{id:':rose:',symbol:'🌹'},{id:':wilted_flower:',symbol:'🥀'},{id:':hibiscus:',symbol:'🌺'},{id:':sunflower:',symbol:'🌻'},{id:':blossom:',symbol:'🌼'},{id:':tulip:',symbol:'🌷'},{id:':seedling:',symbol:'🌱'},{id:':evergreen_tree:',symbol:'🌲'},{id:':deciduous_tree:',symbol:'🌳'},{id:':palm_tree:',symbol:'🌴'},{id:':cactus:',symbol:'🌵'},{id:':sheaf_of_rice:',symbol:'🌾'},{id:':herb:',symbol:'🌿'},{id:':shamrock:',symbol:'☘'},{id:':four_leaf_clover:',symbol:'🍀'},{id:':maple_leaf:',symbol:'🍁'},{id:':fallen_leaf:',symbol:'🍂'},{id:':leaf_fluttering_in_wind:',symbol:'🍃'},{id:':grapes:',symbol:'🍇'},{id:':melon:',symbol:'🍈'},{id:':watermelon:',symbol:'🍉'},{id:':tangerine:',symbol:'🍊'},{id:':lemon:',symbol:'🍋'},{id:':banana:',symbol:'🍌'},{id:':pineapple:',symbol:'🍍'},{id:':red_apple:',symbol:'🍎'},{id:':green_apple:',symbol:'🍏'},{id:':pear:',symbol:'🍐'},{id:':peach:',symbol:'🍑'},{id:':cherries:',symbol:'🍒'},{id:':strawberry:',symbol:'🍓'},{id:':kiwi_fruit:',symbol:'🥝'},{id:':tomato:',symbol:'🍅'},{id:':coconut:',symbol:'🥥'},{id:':avocado:',symbol:'🥑'},{id:':eggplant:',symbol:'🍆'},{id:':potato:',symbol:'🥔'},{id:':carrot:',symbol:'🥕'},{id:':ear_of_corn:',symbol:'🌽'},{id:':hot_pepper:',symbol:'🌶'},{id:':cucumber:',symbol:'🥒'},{id:':broccoli:',symbol:'🥦'},{id:':mushroom:',symbol:'🍄'},{id:':peanuts:',symbol:'🥜'},{id:':chestnut:',symbol:'🌰'},{id:':bread:',symbol:'🍞'},{id:':croissant:',symbol:'🥐'},{id:':baguette_bread:',symbol:'🥖'},{id:':pretzel:',symbol:'🥨'},{id:':pancakes:',symbol:'🥞'},{id:':cheese_wedge:',symbol:'🧀'},{id:':meat_on_bone:',symbol:'🍖'},{id:':poultry_leg:',symbol:'🍗'},{id:':cut_of_meat:',symbol:'🥩'},{id:':bacon:',symbol:'🥓'},{id:':hamburger:',symbol:'🍔'},{id:':french_fries:',symbol:'🍟'},{id:':pizza:',symbol:'🍕'},{id:':hot_dog:',symbol:'🌭'},{id:':sandwich:',symbol:'🥪'},{id:':taco:',symbol:'🌮'},{id:':burrito:',symbol:'🌯'},{id:':stuffed_flatbread:',symbol:'🥙'},{id:':egg:',symbol:'🥚'},{id:':cooking:',symbol:'🍳'},{id:':shallow_pan_of_food:',symbol:'🥘'},{id:':pot_of_food:',symbol:'🍲'},{id:':bowl_with_spoon:',symbol:'🥣'},{id:':green_salad:',symbol:'🥗'},{id:':popcorn:',symbol:'🍿'},{id:':canned_food:',symbol:'🥫'},{id:':bento_box:',symbol:'🍱'},{id:':rice_cracker:',symbol:'🍘'},{id:':rice_ball:',symbol:'🍙'},{id:':cooked_rice:',symbol:'🍚'},{id:':curry_rice:',symbol:'🍛'},{id:':steaming_bowl:',symbol:'🍜'},{id:':spaghetti:',symbol:'🍝'},{id:':roasted_sweet_potato:',symbol:'🍠'},{id:':oden:',symbol:'🍢'},{id:':sushi:',symbol:'🍣'},{id:':fried_shrimp:',symbol:'🍤'},{id:':fish_cake_with_swirl:',symbol:'🍥'},{id:':dango:',symbol:'🍡'},{id:':dumpling:',symbol:'🥟'},{id:':fortune_cookie:',symbol:'🥠'},{id:':takeout_box:',symbol:'🥡'},{id:':soft_ice_cream:',symbol:'🍦'},{id:':shaved_ice:',symbol:'🍧'},{id:':ice_cream:',symbol:'🍨'},{id:':doughnut:',symbol:'🍩'},{id:':cookie:',symbol:'🍪'},{id:':birthday_cake:',symbol:'🎂'},{id:':shortcake:',symbol:'🍰'},{id:':pie:',symbol:'🥧'},{id:':chocolate_bar:',symbol:'🍫'},{id:':candy:',symbol:'🍬'},{id:':lollipop:',symbol:'🍭'},{id:':custard:',symbol:'🍮'},{id:':honey_pot:',symbol:'🍯'},{id:':baby_bottle:',symbol:'🍼'},{id:':glass_of_milk:',symbol:'🥛'},{id:':hot_beverage:',symbol:'☕'},{id:':teacup_without_handle:',symbol:'🍵'},{id:':sake:',symbol:'🍶'},{id:':bottle_with_popping_cork:',symbol:'🍾'},{id:':wine_glass:',symbol:'🍷'},{id:':cocktail_glass:',symbol:'🍸'},{id:':tropical_drink:',symbol:'🍹'},{id:':beer_mug:',symbol:'🍺'},{id:':clinking_beer_mugs:',symbol:'🍻'},{id:':clinking_glasses:',symbol:'🥂'},{id:':tumbler_glass:',symbol:'🥃'},{id:':cup_with_straw:',symbol:'🥤'},{id:':chopsticks:',symbol:'🥢'},{id:':fork_and_knife_with_plate:',symbol:'🍽'},{id:':fork_and_knife:',symbol:'🍴'},{id:':spoon:',symbol:'🥄'},{id:':kitchen_knife:',symbol:'🔪'},{id:':amphora:',symbol:'🏺'},{id:':globe_showing_Europe-Africa:',symbol:'🌍'},{id:':globe_showing_Americas:',symbol:'🌎'},{id:':globe_showing_Asia-Australia:',symbol:'🌏'},{id:':globe_with_meridians:',symbol:'🌐'},{id:':world_map:',symbol:'🗺'},{id:':map_of_Japan:',symbol:'🗾'},{id:':snow-capped_mountain:',symbol:'🏔'},{id:':mountain:',symbol:'⛰'},{id:':volcano:',symbol:'🌋'},{id:':mount_fuji:',symbol:'🗻'},{id:':camping:',symbol:'🏕'},{id:':beach_with_umbrella:',symbol:'🏖'},{id:':desert:',symbol:'🏜'},{id:':desert_island:',symbol:'🏝'},{id:':national_park:',symbol:'🏞'},{id:':stadium:',symbol:'🏟'},{id:':classical_building:',symbol:'🏛'},{id:':building_construction:',symbol:'🏗'},{id:':houses:',symbol:'🏘'},{id:':derelict_house:',symbol:'🏚'},{id:':house:',symbol:'🏠'},{id:':house_with_garden:',symbol:'🏡'},{id:':office_building:',symbol:'🏢'},{id:':Japanese_post_office:',symbol:'🏣'},{id:':post_office:',symbol:'🏤'},{id:':hospital:',symbol:'🏥'},{id:':bank:',symbol:'🏦'},{id:':hotel:',symbol:'🏨'},{id:':love_hotel:',symbol:'🏩'},{id:':convenience_store:',symbol:'🏪'},{id:':school:',symbol:'🏫'},{id:':department_store:',symbol:'🏬'},{id:':factory:',symbol:'🏭'},{id:':Japanese_castle:',symbol:'🏯'},{id:':castle:',symbol:'🏰'},{id:':wedding:',symbol:'💒'},{id:':Tokyo_tower:',symbol:'🗼'},{id:':Statue_of_Liberty:',symbol:'🗽'},{id:':church:',symbol:'⛪'},{id:':mosque:',symbol:'🕌'},{id:':synagogue:',symbol:'🕍'},{id:':shinto_shrine:',symbol:'⛩'},{id:':kaaba:',symbol:'🕋'},{id:':fountain:',symbol:'⛲'},{id:':tent:',symbol:'⛺'},{id:':foggy:',symbol:'🌁'},{id:':night_with_stars:',symbol:'🌃'},{id:':cityscape:',symbol:'🏙'},{id:':sunrise_over_mountains:',symbol:'🌄'},{id:':sunrise:',symbol:'🌅'},{id:':cityscape_at_dusk:',symbol:'🌆'},{id:':sunset:',symbol:'🌇'},{id:':bridge_at_night:',symbol:'🌉'},{id:':hot_springs:',symbol:'♨'},{id:':milky_way:',symbol:'🌌'},{id:':carousel_horse:',symbol:'🎠'},{id:':ferris_wheel:',symbol:'🎡'},{id:':roller_coaster:',symbol:'🎢'},{id:':barber_pole:',symbol:'💈'},{id:':circus_tent:',symbol:'🎪'},{id:':locomotive:',symbol:'🚂'},{id:':railway_car:',symbol:'🚃'},{id:':high-speed_train:',symbol:'🚄'},{id:':bullet_train:',symbol:'🚅'},{id:':train:',symbol:'🚆'},{id:':metro:',symbol:'🚇'},{id:':light_rail:',symbol:'🚈'},{id:':station:',symbol:'🚉'},{id:':tram:',symbol:'🚊'},{id:':monorail:',symbol:'🚝'},{id:':mountain_railway:',symbol:'🚞'},{id:':tram_car:',symbol:'🚋'},{id:':bus:',symbol:'🚌'},{id:':oncoming_bus:',symbol:'🚍'},{id:':trolleybus:',symbol:'🚎'},{id:':minibus:',symbol:'🚐'},{id:':ambulance:',symbol:'🚑'},{id:':fire_engine:',symbol:'🚒'},{id:':police_car:',symbol:'🚓'},{id:':oncoming_police_car:',symbol:'🚔'},{id:':taxi:',symbol:'🚕'},{id:':oncoming_taxi:',symbol:'🚖'},{id:':automobile:',symbol:'🚗'},{id:':oncoming_automobile:',symbol:'🚘'},{id:':sport_utility_vehicle:',symbol:'🚙'},{id:':delivery_truck:',symbol:'🚚'},{id:':articulated_lorry:',symbol:'🚛'},{id:':tractor:',symbol:'🚜'},{id:':bicycle:',symbol:'🚲'},{id:':kick_scooter:',symbol:'🛴'},{id:':motor_scooter:',symbol:'🛵'},{id:':bus_stop:',symbol:'🚏'},{id:':motorway:',symbol:'🛣'},{id:':railway_track:',symbol:'🛤'},{id:':oil_drum:',symbol:'🛢'},{id:':fuel_pump:',symbol:'⛽'},{id:':police_car_light:',symbol:'🚨'},{id:':horizontal_traffic_light:',symbol:'🚥'},{id:':vertical_traffic_light:',symbol:'🚦'},{id:':stop_sign:',symbol:'🛑'},{id:':construction:',symbol:'🚧'},{id:':anchor:',symbol:'⚓'},{id:':sailboat:',symbol:'⛵'},{id:':canoe:',symbol:'🛶'},{id:':speedboat:',symbol:'🚤'},{id:':passenger_ship:',symbol:'🛳'},{id:':ferry:',symbol:'⛴'},{id:':motor_boat:',symbol:'🛥'},{id:':ship:',symbol:'🚢'},{id:':airplane:',symbol:'✈'},{id:':small_airplane:',symbol:'🛩'},{id:':airplane_departure:',symbol:'🛫'},{id:':airplane_arrival:',symbol:'🛬'},{id:':seat:',symbol:'💺'},{id:':helicopter:',symbol:'🚁'},{id:':suspension_railway:',symbol:'🚟'},{id:':mountain_cableway:',symbol:'🚠'},{id:':aerial_tramway:',symbol:'🚡'},{id:':satellite:',symbol:'🛰'},{id:':rocket:',symbol:'🚀'},{id:':flying_saucer:',symbol:'🛸'},{id:':bellhop_bell:',symbol:'🛎'},{id:':hourglass_done:',symbol:'⌛'},{id:':hourglass_not_done:',symbol:'⏳'},{id:':watch:',symbol:'⌚'},{id:':alarm_clock:',symbol:'⏰'},{id:':stopwatch:',symbol:'⏱'},{id:':timer_clock:',symbol:'⏲'},{id:':mantelpiece_clock:',symbol:'🕰'},{id:':twelve_o’clock:',symbol:'🕛'},{id:':twelve-thirty:',symbol:'🕧'},{id:':one_o’clock:',symbol:'🕐'},{id:':one-thirty:',symbol:'🕜'},{id:':two_o’clock:',symbol:'🕑'},{id:':two-thirty:',symbol:'🕝'},{id:':three_o’clock:',symbol:'🕒'},{id:':three-thirty:',symbol:'🕞'},{id:':four_o’clock:',symbol:'🕓'},{id:':four-thirty:',symbol:'🕟'},{id:':five_o’clock:',symbol:'🕔'},{id:':five-thirty:',symbol:'🕠'},{id:':six_o’clock:',symbol:'🕕'},{id:':six-thirty:',symbol:'🕡'},{id:':seven_o’clock:',symbol:'🕖'},{id:':seven-thirty:',symbol:'🕢'},{id:':eight_o’clock:',symbol:'🕗'},{id:':eight-thirty:',symbol:'🕣'},{id:':nine_o’clock:',symbol:'🕘'},{id:':nine-thirty:',symbol:'🕤'},{id:':ten_o’clock:',symbol:'🕙'},{id:':ten-thirty:',symbol:'🕥'},{id:':eleven_o’clock:',symbol:'🕚'},{id:':eleven-thirty:',symbol:'🕦'},{id:':new_moon:',symbol:'🌑'},{id:':waxing_crescent_moon:',symbol:'🌒'},{id:':first_quarter_moon:',symbol:'🌓'},{id:':waxing_gibbous_moon:',symbol:'🌔'},{id:':full_moon:',symbol:'🌕'},{id:':waning_gibbous_moon:',symbol:'🌖'},{id:':last_quarter_moon:',symbol:'🌗'},{id:':waning_crescent_moon:',symbol:'🌘'},{id:':crescent_moon:',symbol:'🌙'},{id:':new_moon_face:',symbol:'🌚'},{id:':first_quarter_moon_face:',symbol:'🌛'},{id:':last_quarter_moon_face:',symbol:'🌜'},{id:':thermometer:',symbol:'🌡'},{id:':sun:',symbol:'☀'},{id:':full_moon_face:',symbol:'🌝'},{id:':sun_with_face:',symbol:'🌞'},{id:':star:',symbol:'⭐'},{id:':glowing_star:',symbol:'🌟'},{id:':shooting_star:',symbol:'🌠'},{id:':cloud:',symbol:'☁'},{id:':sun_behind_cloud:',symbol:'⛅'},{id:':cloud_with_lightning_and_rain:',symbol:'⛈'},{id:':sun_behind_small_cloud:',symbol:'🌤'},{id:':sun_behind_large_cloud:',symbol:'🌥'},{id:':sun_behind_rain_cloud:',symbol:'🌦'},{id:':cloud_with_rain:',symbol:'🌧'},{id:':cloud_with_snow:',symbol:'🌨'},{id:':cloud_with_lightning:',symbol:'🌩'},{id:':tornado:',symbol:'🌪'},{id:':fog:',symbol:'🌫'},{id:':wind_face:',symbol:'🌬'},{id:':cyclone:',symbol:'🌀'},{id:':rainbow:',symbol:'🌈'},{id:':closed_umbrella:',symbol:'🌂'},{id:':umbrella:',symbol:'☂'},{id:':umbrella_with_rain_drops:',symbol:'☔'},{id:':umbrella_on_ground:',symbol:'⛱'},{id:':high_voltage:',symbol:'⚡'},{id:':snowflake:',symbol:'❄'},{id:':snowman:',symbol:'☃'},{id:':snowman_without_snow:',symbol:'⛄'},{id:':comet:',symbol:'☄'},{id:':fire:',symbol:'🔥'},{id:':droplet:',symbol:'💧'},{id:':water_wave:',symbol:'🌊'},{id:':jack-o-lantern:',symbol:'🎃'},{id:':Christmas_tree:',symbol:'🎄'},{id:':fireworks:',symbol:'🎆'},{id:':sparkler:',symbol:'🎇'},{id:':sparkles:',symbol:'✨'},{id:':balloon:',symbol:'🎈'},{id:':party_popper:',symbol:'🎉'},{id:':confetti_ball:',symbol:'🎊'},{id:':tanabata_tree:',symbol:'🎋'},{id:':pine_decoration:',symbol:'🎍'},{id:':Japanese_dolls:',symbol:'🎎'},{id:':carp_streamer:',symbol:'🎏'},{id:':wind_chime:',symbol:'🎐'},{id:':moon_viewing_ceremony:',symbol:'🎑'},{id:':ribbon:',symbol:'🎀'},{id:':wrapped_gift:',symbol:'🎁'},{id:':reminder_ribbon:',symbol:'🎗'},{id:':admission_tickets:',symbol:'🎟'},{id:':ticket:',symbol:'🎫'},{id:':military_medal:',symbol:'🎖'},{id:':trophy:',symbol:'🏆'},{id:':sports_medal:',symbol:'🏅'},{id:':1st_place_medal:',symbol:'🥇'},{id:':2nd_place_medal:',symbol:'🥈'},{id:':3rd_place_medal:',symbol:'🥉'},{id:':soccer_ball:',symbol:'⚽'},{id:':baseball:',symbol:'⚾'},{id:':basketball:',symbol:'🏀'},{id:':volleyball:',symbol:'🏐'},{id:':american_football:',symbol:'🏈'},{id:':rugby_football:',symbol:'🏉'},{id:':tennis:',symbol:'🎾'},{id:':bowling:',symbol:'🎳'},{id:':cricket_game:',symbol:'🏏'},{id:':field_hockey:',symbol:'🏑'},{id:':ice_hockey:',symbol:'🏒'},{id:':ping_pong:',symbol:'🏓'},{id:':badminton:',symbol:'🏸'},{id:':boxing_glove:',symbol:'🥊'},{id:':martial_arts_uniform:',symbol:'🥋'},{id:':goal_net:',symbol:'🥅'},{id:':flag_in_hole:',symbol:'⛳'},{id:':ice_skate:',symbol:'⛸'},{id:':fishing_pole:',symbol:'🎣'},{id:':running_shirt:',symbol:'🎽'},{id:':skis:',symbol:'🎿'},{id:':sled:',symbol:'🛷'},{id:':curling_stone:',symbol:'🥌'},{id:':direct_hit:',symbol:'🎯'},{id:':pool_8_ball:',symbol:'🎱'},{id:':crystal_ball:',symbol:'🔮'},{id:':video_game:',symbol:'🎮'},{id:':joystick:',symbol:'🕹'},{id:':slot_machine:',symbol:'🎰'},{id:':game_die:',symbol:'🎲'},{id:':spade_suit:',symbol:'♠'},{id:':heart_suit:',symbol:'♥'},{id:':diamond_suit:',symbol:'♦'},{id:':club_suit:',symbol:'♣'},{id:':joker:',symbol:'🃏'},{id:':mahjong_red_dragon:',symbol:'🀄'},{id:':flower_playing_cards:',symbol:'🎴'},{id:':performing_arts:',symbol:'🎭'},{id:':framed_picture:',symbol:'🖼'},{id:':artist_palette:',symbol:'🎨'},{id:':muted_speaker:',symbol:'🔇'},{id:':speaker_low_volume:',symbol:'🔈'},{id:':speaker_medium_volume:',symbol:'🔉'},{id:':speaker_high_volume:',symbol:'🔊'},{id:':loudspeaker:',symbol:'📢'},{id:':megaphone:',symbol:'📣'},{id:':postal_horn:',symbol:'📯'},{id:':bell:',symbol:'🔔'},{id:':bell_with_slash:',symbol:'🔕'},{id:':musical_score:',symbol:'🎼'},{id:':musical_note:',symbol:'🎵'},{id:':musical_notes:',symbol:'🎶'},{id:':studio_microphone:',symbol:'🎙'},{id:':level_slider:',symbol:'🎚'},{id:':control_knobs:',symbol:'🎛'},{id:':microphone:',symbol:'🎤'},{id:':headphone:',symbol:'🎧'},{id:':radio:',symbol:'📻'},{id:':saxophone:',symbol:'🎷'},{id:':guitar:',symbol:'🎸'},{id:':musical_keyboard:',symbol:'🎹'},{id:':trumpet:',symbol:'🎺'},{id:':violin:',symbol:'🎻'},{id:':drum:',symbol:'🥁'},{id:':mobile_phone:',symbol:'📱'},{id:':mobile_phone_with_arrow:',symbol:'📲'},{id:':telephone:',symbol:'☎'},{id:':telephone_receiver:',symbol:'📞'},{id:':pager:',symbol:'📟'},{id:':fax_machine:',symbol:'📠'},{id:':battery:',symbol:'🔋'},{id:':electric_plug:',symbol:'🔌'},{id:':laptop_computer:',symbol:'💻'},{id:':desktop_computer:',symbol:'🖥'},{id:':printer:',symbol:'🖨'},{id:':keyboard:',symbol:'⌨'},{id:':computer_mouse:',symbol:'🖱'},{id:':trackball:',symbol:'🖲'},{id:':computer_disk:',symbol:'💽'},{id:':floppy_disk:',symbol:'💾'},{id:':optical_disk:',symbol:'💿'},{id:':dvd:',symbol:'📀'},{id:':movie_camera:',symbol:'🎥'},{id:':film_frames:',symbol:'🎞'},{id:':film_projector:',symbol:'📽'},{id:':clapper_board:',symbol:'🎬'},{id:':television:',symbol:'📺'},{id:':camera:',symbol:'📷'},{id:':camera_with_flash:',symbol:'📸'},{id:':video_camera:',symbol:'📹'},{id:':videocassette:',symbol:'📼'},{id:':magnifying_glass_tilted_left:',symbol:'🔍'},{id:':magnifying_glass_tilted_right:',symbol:'🔎'},{id:':candle:',symbol:'🕯'},{id:':light_bulb:',symbol:'💡'},{id:':flashlight:',symbol:'🔦'},{id:':red_paper_lantern:',symbol:'🏮'},{id:':notebook_with_decorative_cover:',symbol:'📔'},{id:':closed_book:',symbol:'📕'},{id:':open_book:',symbol:'📖'},{id:':green_book:',symbol:'📗'},{id:':blue_book:',symbol:'📘'},{id:':orange_book:',symbol:'📙'},{id:':books:',symbol:'📚'},{id:':notebook:',symbol:'📓'},{id:':ledger:',symbol:'📒'},{id:':page_with_curl:',symbol:'📃'},{id:':scroll:',symbol:'📜'},{id:':page_facing_up:',symbol:'📄'},{id:':newspaper:',symbol:'📰'},{id:':rolled-up_newspaper:',symbol:'🗞'},{id:':bookmark_tabs:',symbol:'📑'},{id:':bookmark:',symbol:'🔖'},{id:':label:',symbol:'🏷'},{id:':money_bag:',symbol:'💰'},{id:':yen_banknote:',symbol:'💴'},{id:':dollar_banknote:',symbol:'💵'},{id:':euro_banknote:',symbol:'💶'},{id:':pound_banknote:',symbol:'💷'},{id:':money_with_wings:',symbol:'💸'},{id:':credit_card:',symbol:'💳'},{id:':chart_increasing_with_yen:',symbol:'💹'},{id:':currency_exchange:',symbol:'💱'},{id:':heavy_dollar_sign:',symbol:'💲'},{id:':envelope:',symbol:'✉'},{id:':e-mail:',symbol:'📧'},{id:':incoming_envelope:',symbol:'📨'},{id:':envelope_with_arrow:',symbol:'📩'},{id:':outbox_tray:',symbol:'📤'},{id:':inbox_tray:',symbol:'📥'},{id:':package:',symbol:'📦'},{id:':closed_mailbox_with_raised_flag:',symbol:'📫'},{id:':closed_mailbox_with_lowered_flag:',symbol:'📪'},{id:':open_mailbox_with_raised_flag:',symbol:'📬'},{id:':open_mailbox_with_lowered_flag:',symbol:'📭'},{id:':postbox:',symbol:'📮'},{id:':ballot_box_with_ballot:',symbol:'🗳'},{id:':pencil:',symbol:'✏'},{id:':black_nib:',symbol:'✒'},{id:':fountain_pen:',symbol:'🖋'},{id:':pen:',symbol:'🖊'},{id:':paintbrush:',symbol:'🖌'},{id:':crayon:',symbol:'🖍'},{id:':memo:',symbol:'📝'},{id:':briefcase:',symbol:'💼'},{id:':file_folder:',symbol:'📁'},{id:':open_file_folder:',symbol:'📂'},{id:':card_index_dividers:',symbol:'🗂'},{id:':calendar:',symbol:'📅'},{id:':tear-off_calendar:',symbol:'📆'},{id:':spiral_notepad:',symbol:'🗒'},{id:':spiral_calendar:',symbol:'🗓'},{id:':card_index:',symbol:'📇'},{id:':chart_increasing:',symbol:'📈'},{id:':chart_decreasing:',symbol:'📉'},{id:':bar_chart:',symbol:'📊'},{id:':clipboard:',symbol:'📋'},{id:':pushpin:',symbol:'📌'},{id:':round_pushpin:',symbol:'📍'},{id:':paperclip:',symbol:'📎'},{id:':linked_paperclips:',symbol:'🖇'},{id:':straight_ruler:',symbol:'📏'},{id:':triangular_ruler:',symbol:'📐'},{id:':scissors:',symbol:'✂'},{id:':card_file_box:',symbol:'🗃'},{id:':file_cabinet:',symbol:'🗄'},{id:':wastebasket:',symbol:'🗑'},{id:':locked:',symbol:'🔒'},{id:':unlocked:',symbol:'🔓'},{id:':locked_with_pen:',symbol:'🔏'},{id:':locked_with_key:',symbol:'🔐'},{id:':key:',symbol:'🔑'},{id:':old_key:',symbol:'🗝'},{id:':hammer:',symbol:'🔨'},{id:':pick:',symbol:'⛏'},{id:':hammer_and_pick:',symbol:'⚒'},{id:':hammer_and_wrench:',symbol:'🛠'},{id:':dagger:',symbol:'🗡'},{id:':crossed_swords:',symbol:'⚔'},{id:':pistol:',symbol:'🔫'},{id:':bow_and_arrow:',symbol:'🏹'},{id:':shield:',symbol:'🛡'},{id:':wrench:',symbol:'🔧'},{id:':nut_and_bolt:',symbol:'🔩'},{id:':gear:',symbol:'⚙'},{id:':clamp:',symbol:'🗜'},{id:':balance_scale:',symbol:'⚖'},{id:':link:',symbol:'🔗'},{id:':chains:',symbol:'⛓'},{id:':alembic:',symbol:'⚗'},{id:':microscope:',symbol:'🔬'},{id:':telescope:',symbol:'🔭'},{id:':satellite_antenna:',symbol:'📡'},{id:':syringe:',symbol:'💉'},{id:':pill:',symbol:'💊'},{id:':door:',symbol:'🚪'},{id:':bed:',symbol:'🛏'},{id:':couch_and_lamp:',symbol:'🛋'},{id:':toilet:',symbol:'🚽'},{id:':shower:',symbol:'🚿'},{id:':bathtub:',symbol:'🛁'},{id:':shopping_cart:',symbol:'🛒'},{id:':cigarette:',symbol:'🚬'},{id:':coffin:',symbol:'⚰'},{id:':funeral_urn:',symbol:'⚱'},{id:':moai:',symbol:'🗿'},{id:':ATM_sign:',symbol:'🏧'},{id:':litter_in_bin_sign:',symbol:'🚮'},{id:':potable_water:',symbol:'🚰'},{id:':wheelchair_symbol:',symbol:'♿'},{id:':men’s_room:',symbol:'🚹'},{id:':women’s_room:',symbol:'🚺'},{id:':restroom:',symbol:'🚻'},{id:':baby_symbol:',symbol:'🚼'},{id:':water_closet:',symbol:'🚾'},{id:':passport_control:',symbol:'🛂'},{id:':customs:',symbol:'🛃'},{id:':baggage_claim:',symbol:'🛄'},{id:':left_luggage:',symbol:'🛅'},{id:':warning:',symbol:'⚠'},{id:':children_crossing:',symbol:'🚸'},{id:':no_entry:',symbol:'⛔'},{id:':prohibited:',symbol:'🚫'},{id:':no_bicycles:',symbol:'🚳'},{id:':no_smoking:',symbol:'🚭'},{id:':no_littering:',symbol:'🚯'},{id:':non-potable_water:',symbol:'🚱'},{id:':no_pedestrians:',symbol:'🚷'},{id:':no_mobile_phones:',symbol:'📵'},{id:':no_one_under_eighteen:',symbol:'🔞'},{id:':radioactive:',symbol:'☢'},{id:':biohazard:',symbol:'☣'},{id:':up_arrow:',symbol:'⬆'},{id:':up-right_arrow:',symbol:'↗'},{id:':right_arrow:',symbol:'➡'},{id:':down-right_arrow:',symbol:'↘'},{id:':down_arrow:',symbol:'⬇'},{id:':down-left_arrow:',symbol:'↙'},{id:':left_arrow:',symbol:'⬅'},{id:':up-left_arrow:',symbol:'↖'},{id:':up-down_arrow:',symbol:'↕'},{id:':left-right_arrow:',symbol:'↔'},{id:':right_arrow_curving_left:',symbol:'↩'},{id:':left_arrow_curving_right:',symbol:'↪'},{id:':right_arrow_curving_up:',symbol:'⤴'},{id:':right_arrow_curving_down:',symbol:'⤵'},{id:':clockwise_vertical_arrows:',symbol:'🔃'},{id:':counterclockwise_arrows_button:',symbol:'🔄'},{id:':BACK_arrow:',symbol:'🔙'},{id:':END_arrow:',symbol:'🔚'},{id:':ON!_arrow:',symbol:'🔛'},{id:':SOON_arrow:',symbol:'🔜'},{id:':TOP_arrow:',symbol:'🔝'},{id:':place_of_worship:',symbol:'🛐'},{id:':atom_symbol:',symbol:'⚛'},{id:':om:',symbol:'🕉'},{id:':star_of_David:',symbol:'✡'},{id:':wheel_of_dharma:',symbol:'☸'},{id:':yin_yang:',symbol:'☯'},{id:':latin_cross:',symbol:'✝'},{id:':orthodox_cross:',symbol:'☦'},{id:':star_and_crescent:',symbol:'☪'},{id:':peace_symbol:',symbol:'☮'},{id:':menorah:',symbol:'🕎'},{id:':dotted_six-pointed_star:',symbol:'🔯'},{id:':Aries:',symbol:'♈'},{id:':Taurus:',symbol:'♉'},{id:':Gemini:',symbol:'♊'},{id:':Cancer:',symbol:'♋'},{id:':Leo:',symbol:'♌'},{id:':Virgo:',symbol:'♍'},{id:':Libra:',symbol:'♎'},{id:':Scorpio:',symbol:'♏'},{id:':Sagittarius:',symbol:'♐'},{id:':Capricorn:',symbol:'♑'},{id:':Aquarius:',symbol:'♒'},{id:':Pisces:',symbol:'♓'},{id:':Ophiuchus:',symbol:'⛎'},{id:':shuffle_tracks_button:',symbol:'🔀'},{id:':repeat_button:',symbol:'🔁'},{id:':repeat_single_button:',symbol:'🔂'},{id:':play_button:',symbol:'▶'},{id:':fast-forward_button:',symbol:'⏩'},{id:':next_track_button:',symbol:'⏭'},{id:':play_or_pause_button:',symbol:'⏯'},{id:':reverse_button:',symbol:'◀'},{id:':fast_reverse_button:',symbol:'⏪'},{id:':last_track_button:',symbol:'⏮'},{id:':upwards_button:',symbol:'🔼'},{id:':fast_up_button:',symbol:'⏫'},{id:':downwards_button:',symbol:'🔽'},{id:':fast_down_button:',symbol:'⏬'},{id:':pause_button:',symbol:'⏸'},{id:':stop_button:',symbol:'⏹'},{id:':record_button:',symbol:'⏺'},{id:':eject_button:',symbol:'⏏'},{id:':cinema:',symbol:'🎦'},{id:':dim_button:',symbol:'🔅'},{id:':bright_button:',symbol:'🔆'},{id:':antenna_bars:',symbol:'📶'},{id:':vibration_mode:',symbol:'📳'},{id:':mobile_phone_off:',symbol:'📴'},{id:':female_sign:',symbol:'♀'},{id:':male_sign:',symbol:'♂'},{id:':medical_symbol:',symbol:'⚕'},{id:':recycling_symbol:',symbol:'♻'},{id:':fleur-de-lis:',symbol:'⚜'},{id:':trident_emblem:',symbol:'🔱'},{id:':name_badge:',symbol:'📛'},{id:':Japanese_symbol_for_beginner:',symbol:'🔰'},{id:':heavy_large_circle:',symbol:'⭕'},{id:':white_heavy_check_mark:',symbol:'✅'},{id:':ballot_box_with_check:',symbol:'☑'},{id:':heavy_check_mark:',symbol:'✔'},{id:':heavy_multiplication_x:',symbol:'✖'},{id:':cross_mark:',symbol:'❌'},{id:':cross_mark_button:',symbol:'❎'},{id:':heavy_plus_sign:',symbol:'➕'},{id:':heavy_minus_sign:',symbol:'➖'},{id:':heavy_division_sign:',symbol:'➗'},{id:':curly_loop:',symbol:'➰'},{id:':double_curly_loop:',symbol:'➿'},{id:':part_alternation_mark:',symbol:'〽'},{id:':eight-spoked_asterisk:',symbol:'✳'},{id:':eight-pointed_star:',symbol:'✴'},{id:':sparkle:',symbol:'❇'},{id:':double_exclamation_mark:',symbol:'‼'},{id:':exclamation_question_mark:',symbol:'⁉'},{id:':question_mark:',symbol:'❓'},{id:':white_question_mark:',symbol:'❔'},{id:':white_exclamation_mark:',symbol:'❕'},{id:':exclamation_mark:',symbol:'❗'},{id:':wavy_dash:',symbol:'〰'},{id:':copyright:',symbol:'©'},{id:':registered:',symbol:'®'},{id:':trade_mark:',symbol:'™'},{id:':keycap:_#:',symbol:'#️⃣'},{id:':keycap:_*:',symbol:'*️⃣'},{id:':keycap:_0:',symbol:'0️⃣'},{id:':keycap:_1:',symbol:'1️⃣'},{id:':keycap:_2:',symbol:'2️⃣'},{id:':keycap:_3:',symbol:'3️⃣'},{id:':keycap:_4:',symbol:'4️⃣'},{id:':keycap:_5:',symbol:'5️⃣'},{id:':keycap:_6:',symbol:'6️⃣'},{id:':keycap:_7:',symbol:'7️⃣'},{id:':keycap:_8:',symbol:'8️⃣'},{id:':keycap:_9:',symbol:'9️⃣'},{id:':keycap:_10:',symbol:'🔟'},{id:':hundred_points:',symbol:'💯'},{id:':input_latin_uppercase:',symbol:'🔠'},{id:':input_latin_lowercase:',symbol:'🔡'},{id:':input_numbers:',symbol:'🔢'},{id:':input_symbols:',symbol:'🔣'},{id:':input_latin_letters:',symbol:'🔤'},{id:':A_button_(blood_type):',symbol:'🅰'},{id:':AB_button_(blood_type):',symbol:'🆎'},{id:':B_button_(blood_type):',symbol:'🅱'},{id:':CL_button:',symbol:'🆑'},{id:':COOL_button:',symbol:'🆒'},{id:':FREE_button:',symbol:'🆓'},{id:':information:',symbol:'ℹ'},{id:':ID_button:',symbol:'🆔'},{id:':circled_M:',symbol:'Ⓜ'},{id:':NEW_button:',symbol:'🆕'},{id:':NG_button:',symbol:'🆖'},{id:':O_button_(blood_type):',symbol:'🅾'},{id:':OK_button:',symbol:'🆗'},{id:':P_button:',symbol:'🅿'},{id:':SOS_button:',symbol:'🆘'},{id:':UP!_button:',symbol:'🆙'},{id:':VS_button:',symbol:'🆚'},{id:':Japanese_“here”_button:',symbol:'🈁'},{id:':Japanese_“service_charge”_button:',symbol:'🈂'},{id:':Japanese_“monthly_amount”_button:',symbol:'🈷'},{id:':Japanese_“not_free_of_charge”_button:',symbol:'🈶'},{id:':Japanese_“reserved”_button:',symbol:'🈯'},{id:':Japanese_“bargain”_button:',symbol:'🉐'},{id:':Japanese_“discount”_button:',symbol:'🈹'},{id:':Japanese_“free_of_charge”_button:',symbol:'🈚'},{id:':Japanese_“prohibited”_button:',symbol:'🈲'},{id:':Japanese_“acceptable”_button:',symbol:'🉑'},{id:':Japanese_“application”_button:',symbol:'🈸'},{id:':Japanese_“passing_grade”_button:',symbol:'🈴'},{id:':Japanese_“vacancy”_button:',symbol:'🈳'},{id:':Japanese_“congratulations”_button:',symbol:'㊗'},{id:':Japanese_“secret”_button:',symbol:'㊙'},{id:':Japanese_“open_for_business”_button:',symbol:'🈺'},{id:':Japanese_“no_vacancy”_button:',symbol:'🈵'},{id:':red_circle:',symbol:'🔴'},{id:':blue_circle:',symbol:'🔵'},{id:':white_circle:',symbol:'⚪'},{id:':black_circle:',symbol:'⚫'},{id:':white_large_square:',symbol:'⬜'},{id:':black_large_square:',symbol:'⬛'},{id:':black_medium_square:',symbol:'◼'},{id:':white_medium_square:',symbol:'◻'},{id:':white_medium-small_square:',symbol:'◽'},{id:':black_medium-small_square:',symbol:'◾'},{id:':white_small_square:',symbol:'▫'},{id:':black_small_square:',symbol:'▪'},{id:':large_orange_diamond:',symbol:'🔶'},{id:':large_blue_diamond:',symbol:'🔷'},{id:':small_orange_diamond:',symbol:'🔸'},{id:':small_blue_diamond:',symbol:'🔹'},{id:':red_triangle_pointed_up:',symbol:'🔺'},{id:':red_triangle_pointed_down:',symbol:'🔻'},{id:':diamond_with_a_dot:',symbol:'💠'},{id:':radio_button:',symbol:'🔘'},{id:':black_square_button:',symbol:'🔲'},{id:':white_square_button:',symbol:'🔳'},{id:':chequered_flag:',symbol:'🏁'},{id:':triangular_flag:',symbol:'🚩'},{id:':crossed_flags:',symbol:'🎌'},{id:':black_flag:',symbol:'🏴'},{id:':white_flag:',symbol:'🏳'},{id:':rainbow_flag:',symbol:'🏳️🌈'},{id:':Ascension_Island:',symbol:'🇦🇨'},{id:':Andorra:',symbol:'🇦🇩'},{id:':United_Arab_Emirates:',symbol:'🇦🇪'},{id:':Afghanistan:',symbol:'🇦🇫'},{id:':Antigua_&_Barbuda:',symbol:'🇦🇬'},{id:':Anguilla:',symbol:'🇦🇮'},{id:':Albania:',symbol:'🇦🇱'},{id:':Armenia:',symbol:'🇦🇲'},{id:':Angola:',symbol:'🇦🇴'},{id:':Antarctica:',symbol:'🇦🇶'},{id:':Argentina:',symbol:'🇦🇷'},{id:':American_Samoa:',symbol:'🇦🇸'},{id:':Austria:',symbol:'🇦🇹'},{id:':Australia:',symbol:'🇦🇺'},{id:':Aruba:',symbol:'🇦🇼'},{id:':Åland_Islands:',symbol:'🇦🇽'},{id:':Azerbaijan:',symbol:'🇦🇿'},{id:':Bosnia_&_Herzegovina:',symbol:'🇧🇦'},{id:':Barbados:',symbol:'🇧🇧'},{id:':Bangladesh:',symbol:'🇧🇩'},{id:':Belgium:',symbol:'🇧🇪'},{id:':Burkina_Faso:',symbol:'🇧🇫'},{id:':Bulgaria:',symbol:'🇧🇬'},{id:':Bahrain:',symbol:'🇧🇭'},{id:':Burundi:',symbol:'🇧🇮'},{id:':Benin:',symbol:'🇧🇯'},{id:':St._Barthélemy:',symbol:'🇧🇱'},{id:':Bermuda:',symbol:'🇧🇲'},{id:':Brunei:',symbol:'🇧🇳'},{id:':Bolivia:',symbol:'🇧🇴'},{id:':Caribbean_Netherlands:',symbol:'🇧🇶'},{id:':Brazil:',symbol:'🇧🇷'},{id:':Bahamas:',symbol:'🇧🇸'},{id:':Bhutan:',symbol:'🇧🇹'},{id:':Bouvet_Island:',symbol:'🇧🇻'},{id:':Botswana:',symbol:'🇧🇼'},{id:':Belarus:',symbol:'🇧🇾'},{id:':Belize:',symbol:'🇧🇿'},{id:':Canada:',symbol:'🇨🇦'},{id:':Cocos_(Keeling)_Islands:',symbol:'🇨🇨'},{id:':Congo_-_Kinshasa:',symbol:'🇨🇩'},{id:':Central_African_Republic:',symbol:'🇨🇫'},{id:':Congo_-_Brazzaville:',symbol:'🇨🇬'},{id:':Switzerland:',symbol:'🇨🇭'},{id:':Côte_d’Ivoire:',symbol:'🇨🇮'},{id:':Cook_Islands:',symbol:'🇨🇰'},{id:':Chile:',symbol:'🇨🇱'},{id:':Cameroon:',symbol:'🇨🇲'},{id:':China:',symbol:'🇨🇳'},{id:':Colombia:',symbol:'🇨🇴'},{id:':Clipperton_Island:',symbol:'🇨🇵'},{id:':Costa_Rica:',symbol:'🇨🇷'},{id:':Cuba:',symbol:'🇨🇺'},{id:':Cape_Verde:',symbol:'🇨🇻'},{id:':Curaçao:',symbol:'🇨🇼'},{id:':Christmas_Island:',symbol:'🇨🇽'},{id:':Cyprus:',symbol:'🇨🇾'},{id:':Czechia:',symbol:'🇨🇿'},{id:':Germany:',symbol:'🇩🇪'},{id:':Diego_Garcia:',symbol:'🇩🇬'},{id:':Djibouti:',symbol:'🇩🇯'},{id:':Denmark:',symbol:'🇩🇰'},{id:':Dominica:',symbol:'🇩🇲'},{id:':Dominican_Republic:',symbol:'🇩🇴'},{id:':Algeria:',symbol:'🇩🇿'},{id:':Ceuta_&_Melilla:',symbol:'🇪🇦'},{id:':Ecuador:',symbol:'🇪🇨'},{id:':Estonia:',symbol:'🇪🇪'},{id:':Egypt:',symbol:'🇪🇬'},{id:':Western_Sahara:',symbol:'🇪🇭'},{id:':Eritrea:',symbol:'🇪🇷'},{id:':Spain:',symbol:'🇪🇸'},{id:':Ethiopia:',symbol:'🇪🇹'},{id:':European_Union:',symbol:'🇪🇺'},{id:':Finland:',symbol:'🇫🇮'},{id:':Fiji:',symbol:'🇫🇯'},{id:':Falkland_Islands:',symbol:'🇫🇰'},{id:':Micronesia:',symbol:'🇫🇲'},{id:':Faroe_Islands:',symbol:'🇫🇴'},{id:':France:',symbol:'🇫🇷'},{id:':Gabon:',symbol:'🇬🇦'},{id:':United_Kingdom:',symbol:'🇬🇧'},{id:':Grenada:',symbol:'🇬🇩'},{id:':Georgia:',symbol:'🇬🇪'},{id:':French_Guiana:',symbol:'🇬🇫'},{id:':Guernsey:',symbol:'🇬🇬'},{id:':Ghana:',symbol:'🇬🇭'},{id:':Gibraltar:',symbol:'🇬🇮'},{id:':Greenland:',symbol:'🇬🇱'},{id:':Gambia:',symbol:'🇬🇲'},{id:':Guinea:',symbol:'🇬🇳'},{id:':Guadeloupe:',symbol:'🇬🇵'},{id:':Equatorial_Guinea:',symbol:'🇬🇶'},{id:':Greece:',symbol:'🇬🇷'},{id:':South_Georgia_&_South_Sandwich_Islands:',symbol:'🇬🇸'},{id:':Guatemala:',symbol:'🇬🇹'},{id:':Guam:',symbol:'🇬🇺'},{id:':Guinea-Bissau:',symbol:'🇬🇼'},{id:':Guyana:',symbol:'🇬🇾'},{id:':Hong_Kong_SAR_China:',symbol:'🇭🇰'},{id:':Heard_&_McDonald_Islands:',symbol:'🇭🇲'},{id:':Honduras:',symbol:'🇭🇳'},{id:':Croatia:',symbol:'🇭🇷'},{id:':Haiti:',symbol:'🇭🇹'},{id:':Hungary:',symbol:'🇭🇺'},{id:':Canary_Islands:',symbol:'🇮🇨'},{id:':Indonesia:',symbol:'🇮🇩'},{id:':Ireland:',symbol:'🇮🇪'},{id:':Israel:',symbol:'🇮🇱'},{id:':Isle_of_Man:',symbol:'🇮🇲'},{id:':India:',symbol:'🇮🇳'},{id:':British_Indian_Ocean_Territory:',symbol:'🇮🇴'},{id:':Iraq:',symbol:'🇮🇶'},{id:':Iran:',symbol:'🇮🇷'},{id:':Iceland:',symbol:'🇮🇸'},{id:':Italy:',symbol:'🇮🇹'},{id:':Jersey:',symbol:'🇯🇪'},{id:':Jamaica:',symbol:'🇯🇲'},{id:':Jordan:',symbol:'🇯🇴'},{id:':Japan:',symbol:'🇯🇵'},{id:':Kenya:',symbol:'🇰🇪'},{id:':Kyrgyzstan:',symbol:'🇰🇬'},{id:':Cambodia:',symbol:'🇰🇭'},{id:':Kiribati:',symbol:'🇰🇮'},{id:':Comoros:',symbol:'🇰🇲'},{id:':St._Kitts_&_Nevis:',symbol:'🇰🇳'},{id:':North_Korea:',symbol:'🇰🇵'},{id:':South_Korea:',symbol:'🇰🇷'},{id:':Kuwait:',symbol:'🇰🇼'},{id:':Cayman_Islands:',symbol:'🇰🇾'},{id:':Kazakhstan:',symbol:'🇰🇿'},{id:':Laos:',symbol:'🇱🇦'},{id:':Lebanon:',symbol:'🇱🇧'},{id:':St._Lucia:',symbol:'🇱🇨'},{id:':Liechtenstein:',symbol:'🇱🇮'},{id:':Sri_Lanka:',symbol:'🇱🇰'},{id:':Liberia:',symbol:'🇱🇷'},{id:':Lesotho:',symbol:'🇱🇸'},{id:':Lithuania:',symbol:'🇱🇹'},{id:':Luxembourg:',symbol:'🇱🇺'},{id:':Latvia:',symbol:'🇱🇻'},{id:':Libya:',symbol:'🇱🇾'},{id:':Morocco:',symbol:'🇲🇦'},{id:':Monaco:',symbol:'🇲🇨'},{id:':Moldova:',symbol:'🇲🇩'},{id:':Montenegro:',symbol:'🇲🇪'},{id:':St._Martin:',symbol:'🇲🇫'},{id:':Madagascar:',symbol:'🇲🇬'},{id:':Marshall_Islands:',symbol:'🇲🇭'},{id:':Macedonia:',symbol:'🇲🇰'},{id:':Mali:',symbol:'🇲🇱'},{id:':Myanmar_(Burma):',symbol:'🇲🇲'},{id:':Mongolia:',symbol:'🇲🇳'},{id:':Macau_SAR_China:',symbol:'🇲🇴'},{id:':Northern_Mariana_Islands:',symbol:'🇲🇵'},{id:':Martinique:',symbol:'🇲🇶'},{id:':Mauritania:',symbol:'🇲🇷'},{id:':Montserrat:',symbol:'🇲🇸'},{id:':Malta:',symbol:'🇲🇹'},{id:':Mauritius:',symbol:'🇲🇺'},{id:':Maldives:',symbol:'🇲🇻'},{id:':Malawi:',symbol:'🇲🇼'},{id:':Mexico:',symbol:'🇲🇽'},{id:':Malaysia:',symbol:'🇲🇾'},{id:':Mozambique:',symbol:'🇲🇿'},{id:':Namibia:',symbol:'🇳🇦'},{id:':New_Caledonia:',symbol:'🇳🇨'},{id:':Niger:',symbol:'🇳🇪'},{id:':Norfolk_Island:',symbol:'🇳🇫'},{id:':Nigeria:',symbol:'🇳🇬'},{id:':Nicaragua:',symbol:'🇳🇮'},{id:':Netherlands:',symbol:'🇳🇱'},{id:':Norway:',symbol:'🇳🇴'},{id:':Nepal:',symbol:'🇳🇵'},{id:':Nauru:',symbol:'🇳🇷'},{id:':Niue:',symbol:'🇳🇺'},{id:':New_Zealand:',symbol:'🇳🇿'},{id:':Oman:',symbol:'🇴🇲'},{id:':Panama:',symbol:'🇵🇦'},{id:':Peru:',symbol:'🇵🇪'},{id:':French_Polynesia:',symbol:'🇵🇫'},{id:':Papua_New_Guinea:',symbol:'🇵🇬'},{id:':Philippines:',symbol:'🇵🇭'},{id:':Pakistan:',symbol:'🇵🇰'},{id:':Poland:',symbol:'🇵🇱'},{id:':St._Pierre_&_Miquelon:',symbol:'🇵🇲'},{id:':Pitcairn_Islands:',symbol:'🇵🇳'},{id:':Puerto_Rico:',symbol:'🇵🇷'},{id:':Palestinian_Territories:',symbol:'🇵🇸'},{id:':Portugal:',symbol:'🇵🇹'},{id:':Palau:',symbol:'🇵🇼'},{id:':Paraguay:',symbol:'🇵🇾'},{id:':Qatar:',symbol:'🇶🇦'},{id:':Réunion:',symbol:'🇷🇪'},{id:':Romania:',symbol:'🇷🇴'},{id:':Serbia:',symbol:'🇷🇸'},{id:':Russia:',symbol:'🇷🇺'},{id:':Rwanda:',symbol:'🇷🇼'},{id:':Saudi_Arabia:',symbol:'🇸🇦'},{id:':Solomon_Islands:',symbol:'🇸🇧'},{id:':Seychelles:',symbol:'🇸🇨'},{id:':Sudan:',symbol:'🇸🇩'},{id:':Sweden:',symbol:'🇸🇪'},{id:':Singapore:',symbol:'🇸🇬'},{id:':St._Helena:',symbol:'🇸🇭'},{id:':Slovenia:',symbol:'🇸🇮'},{id:':Svalbard_&_Jan_Mayen:',symbol:'🇸🇯'},{id:':Slovakia:',symbol:'🇸🇰'},{id:':Sierra_Leone:',symbol:'🇸🇱'},{id:':San_Marino:',symbol:'🇸🇲'},{id:':Senegal:',symbol:'🇸🇳'},{id:':Somalia:',symbol:'🇸🇴'},{id:':Suriname:',symbol:'🇸🇷'},{id:':South_Sudan:',symbol:'🇸🇸'},{id:':São_Tomé_&_Príncipe:',symbol:'🇸🇹'},{id:':El_Salvador:',symbol:'🇸🇻'},{id:':Sint_Maarten:',symbol:'🇸🇽'},{id:':Syria:',symbol:'🇸🇾'},{id:':Swaziland:',symbol:'🇸🇿'},{id:':Tristan_da_Cunha:',symbol:'🇹🇦'},{id:':Turks_&_Caicos_Islands:',symbol:'🇹🇨'},{id:':Chad:',symbol:'🇹🇩'},{id:':French_Southern_Territories:',symbol:'🇹🇫'},{id:':Togo:',symbol:'🇹🇬'},{id:':Thailand:',symbol:'🇹🇭'},{id:':Tajikistan:',symbol:'🇹🇯'},{id:':Tokelau:',symbol:'🇹🇰'},{id:':Timor-Leste:',symbol:'🇹🇱'},{id:':Turkmenistan:',symbol:'🇹🇲'},{id:':Tunisia:',symbol:'🇹🇳'},{id:':Tonga:',symbol:'🇹🇴'},{id:':Turkey:',symbol:'🇹🇷'},{id:':Trinidad_&_Tobago:',symbol:'🇹🇹'},{id:':Tuvalu:',symbol:'🇹🇻'},{id:':Taiwan:',symbol:'🇹🇼'},{id:':Tanzania:',symbol:'🇹🇿'},{id:':Ukraine:',symbol:'🇺🇦'},{id:':Uganda:',symbol:'🇺🇬'},{id:':U.S._Outlying_Islands:',symbol:'🇺🇲'},{id:':United_Nations:',symbol:'🇺🇳'},{id:':United_States:',symbol:'🇺🇸'},{id:':Uruguay:',symbol:'🇺🇾'},{id:':Uzbekistan:',symbol:'🇺🇿'},{id:':Vatican_City:',symbol:'🇻🇦'},{id:':St._Vincent_&_Grenadines:',symbol:'🇻🇨'},{id:':Venezuela:',symbol:'🇻🇪'},{id:':British_Virgin_Islands:',symbol:'🇻🇬'},{id:':U.S._Virgin_Islands:',symbol:'🇻🇮'},{id:':Vietnam:',symbol:'🇻🇳'},{id:':Vanuatu:',symbol:'🇻🇺'},{id:':Wallis_&_Futuna:',symbol:'🇼🇫'},{id:':Samoa:',symbol:'🇼🇸'},{id:':Kosovo:',symbol:'🇽🇰'},{id:':Yemen:',symbol:'🇾🇪'},{id:':Mayotte:',symbol:'🇾🇹'},{id:':South_Africa:',symbol:'🇿🇦'},{id:':Zambia:',symbol:'🇿🇲'},{id:':Zimbabwe:',symbol:'🇿🇼'},{id:':England:',symbol:'🏴'},{id:':Scotland:',symbol:'🏴'},{id:':Wales:',symbol:'🏴'}]; | ||
// jscs:enable | ||
|
||
if ( !editor._ ) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Creating protected namespace in the editor object is not a concern of this plugin.
Editor type is responsible for that, and it's doing it.
/~https://github.com/ckeditor/ckeditor-dev/blob/3cde97a/core/editor.js#L73-L74
plugins/emoji/plugin.js
Outdated
|
||
|
||
/** | ||
* Array with names of tags where emoji plugin remin inactive. By default emoji are not transformed inside `<pre>` and `<code>` tags |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo remin -> remains
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
By default emoji are not transformed inside
<pre>
and<code>
tags
Missing dot, and this information is redundant. You have it well documented below: emoji_preventTransformation = [ 'pre', 'code' ]
.
plugins/emoji/plugin.js
Outdated
/** | ||
* Array with names of tags where emoji plugin remin inactive. By default emoji are not transformed inside `<pre>` and `<code>` tags | ||
* | ||
* ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent spacing. Look at opening and closing triple backticks.
plugins/emoji/plugin.js
Outdated
* ``` | ||
* editor.emoji_preventTransformation = [ 'h1', 'h2' ]; | ||
* ``` | ||
* @cfg {Array} [ emoji_preventTransformation = [ 'pre', 'code' ] ] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We're not using spaces between the boundary (outermost) brackets when documenting default values.
See:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This issue appears in other places.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also there's a more precise notation of defining the type of array. Since it's array of strings, you should mark it as {String[]}
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Name does not mention "elements" which is important here. Let's make it emoji_blacklistedElements
.
plugins/emoji/plugin.js
Outdated
* | ||
* ``` | ||
* editor.emoji_preventTransformation = [ 'h1', 'h2' ]; | ||
* ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Leave at least a single line of spacing between the description, and API docs tags.
plugins/emoji/plugin.js
Outdated
|
||
( function() { | ||
'use strict'; | ||
CKEDITOR.plugins.add( 'emoji', { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Give it one line of space here for improved readability.
plugins/emoji/plugin.js
Outdated
callback( data ); | ||
} | ||
|
||
function getConfigForNotConvertedTags() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Name getConfigForNotConvertedTags
is unnecesarily confusing.
Instead just make a function isEmojiAllowed( elem )
that will tel whether the emoji can appear in a given element.
It will also greatly simplify places where this function is used, e.g. this bit:
/~https://github.com/ckeditor/ckeditor-dev/blob/3cde97a/plugins/emoji/plugin.js#L45-L48
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've used name hasForbiddenParent
as it is more appropriate to this solution :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think that it's helping much.
In fact the oposite, you're bounding function name with the implementation of it. Now what will you do if there will be a requirement to disable mentioning for classic editors?
- You add an
editor
instance as an argument (because you need to use info from the editor inside the function). - Your proposed function name no longer matches the purpose (is misleading). So are you going to rename it into
hasForbiddenParentAndIsInNonClassicalEditor
?
isAllowed
or isEmojiAllowed
does not have this issue.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've made improvement on different scope of a problem. Removing emoji in classic will be easily to extend. Take a look:
var preventEmojiConversion = element.getAscendant( hasForbiddenParent );
if ( preventEmojiConversion ) {
return value;
}
I can rename preventEmojiConversion
to isEmojiAllowed
if you think this will be more suitable here.
Also it is easy to extend this with classical editor like:
var preventEmojiConversion = element.getAscendant( hasForbiddenParent ) || isNonClassicalEditor();
Unfortunately getAscendant
method break after first true match. So in case like p > strong > em > a
. And configuration where someone prevent emoji in strong, but current selection is in anchor. Anchor would be detected as allowed parent (it is not on forbidden list), loop will break and emoji would appear.
I need to search all ascendants for forbidden elements and break loop on forbidden element and in such case don't activate emoji conversion.
<p>Hello world.</p> | ||
</textarea> | ||
|
||
<p>Empty editor</p> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is it called "Empty editor" when it's not empty? 🙂 It's a divarea editor. First one should be named too for consistency.
Also use headers for that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This issue might occur in other places too.
tests/plugins/emoji/manual/emoji.md
Outdated
@@ -0,0 +1,17 @@ | |||
@bender-tags: 4.10.0, feature, emoji |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing ticket reference, this issue probably reoccurs in other cases too.
plugins/emoji/plugin.js
Outdated
* ``` | ||
* editor.emoji_numberOfCharactersToStart = 2; | ||
* ``` | ||
* @cfg {Number} [ emoji_numberOfCharactersToStart = 0 ] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a too complex name. Keep it simple. I think it is good idea to reuse the name from mentions minChars
, so it would be emoji_minChars
.
It is important to put information whether or not it accounts :
delimiter.
Also please reduce the amount of overload in the Emoji sample. Take mentions as a good example. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Additionally I have found two issues, but both are not crucial and can be extracted into separate issues.
emoji_blacklistedElements
clipboard integration
config.emoji_blacklistedElements
is not integrated with the clipboard.
- Open http://tests.ckeditor.test:1030/tests/plugins/emoji/manual/blockedelements manual test.
- Copy
| :bug: | 🐛 |
into your keyboard. - Paste into header 1 element.
Expected
Only one emoji character is inserted.
Actual
Two emojis are visible.
emoji_blacklistedElements
should not look beyond editbale
config.emoji_blacklistedElements
should not check elements outside of the editable.
- Edit http://tests.ckeditor.test:1030/tests/plugins/emoji/manual/blockedelements manual test in a following way:
- Wrap both editors with a
<section>
element, like so:
- Wrap both editors with a
<section>
<h1>Classic editor</h1>
<textarea id="editor1" cols="10" rows="10">
<p>Hello world.</p>
</textarea>
<h1>Divarea editor</h1>
<div id="editor2" cols="10" rows="10">
<p>Hello world.</p>
</div>
</section>
* Change editor configs to: `emoji_blacklistedElements: [ 'h1', 'h2', 'h3', 'section' ]`.
- Open http://tests.ckeditor.test:1030/tests/plugins/emoji/manual/blockedelements manual test.
- Put a selection in a divarea editor.
- Start type any emoji.
Expected
Emoji autocomplete works (there is no section
element in editor content).
Actual
Autocomplete does not appear. Reason is that inline editor has a section in the parent chain.
plugins/emoji/plugin.js
Outdated
* ``` | ||
* | ||
* @cfg {Number} [emoji_minChar = 0] | ||
* @member CKEDITOR.config |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing @since
tag. Same applies to other config vars.
plugins/emoji/plugin.js
Outdated
* Delimiter `:`, which activates emoji's suggestion box, is not included into this value. | ||
* | ||
* ``` | ||
* editor.emoji_minChar = 2; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was supposed to be emoji_minChars
.
plugins/emoji/plugin.js
Outdated
* editor.emoji_minChar = 2; | ||
* ``` | ||
* | ||
* @cfg {Number} [emoji_minChar = 0] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's make the default value 2
. That would mean the code snippet in this property docs should be changed to something else, I think 0 would be good.
plugins/emoji/plugin.js
Outdated
/** | ||
* Array with names of tags where emoji plugin remain inactive. | ||
* | ||
* ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please hint a language in code listings.
CHANGES.md
Outdated
@@ -7,6 +7,7 @@ New Features: | |||
|
|||
* [#1761](/~https://github.com/ckeditor/ckeditor-dev/issues/1761): [Autolink](https://ckeditor.com/cke4/addon/autolink) plugin supports email links. | |||
* [#1703](/~https://github.com/ckeditor/ckeditor-dev/issues/1703): Introduced Mentions plugin providing autocompletion feature for usernames. | |||
* [#1746](/~https://github.com/ckeditor/ckeditor-dev/issues/1703): Introduce Emoji plugin providing easy way to insert emoji in editor. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Plugin names should always be linked in the changelog entry. I know that there's no Emoji plugin published on addons repo yet, but you can already hand craft the link based on plugin name 🙂 And don't look at Mentions pluginit has the same issue :P
tests/plugins/emoji/manual/emoji.md
Outdated
|
||
# Test case #3: | ||
1. Set up format: `Formatted`. | ||
2. Try to type emoji as formatted text. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It will be more precise to write:
to type emoji in a formatted text element
Similar for computer code.
tests/plugins/emoji/manual/emoji.md
Outdated
3. Set up style `Computer code`. | ||
4. Try to type emoji as computer code. | ||
|
||
**Expected TC#3:** In both cases emoji should remain not transformed. Autocomplete menu shouldn't be visible. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again, use semantic content markup.
@bender-ui: collapsed | ||
|
||
1. Type emoji name in input box. | ||
2. Press transparent button in toolbar (they have labels). There are 2 buttons like that: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no info for expected results for the following steps.
@@ -0,0 +1,18 @@ | |||
@bender-tags: 4.10.0, feature, emoji, 1746 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The name this file is too long, please simplify it.
plugins/emoji/plugin.js
Outdated
'use strict'; | ||
|
||
CKEDITOR.plugins.add( 'emoji', { | ||
requires: 'autocomplete,textmatch,ajax', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This plugin requires ajax plugin, without using it.
Changing PR base to |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Handing over the review to @Comandeer
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eh, celebrated too early… There are some unstable tests in http://tests.ckeditor.test:1030/tests/plugins/emoji/basic#tests%2Fplugins%2Femoji%2Fbasic%20test%20emoji%20are%20not%20actived%20when%20too%20few%20letters%20are%20written%20(inline)
It seems that there is a race condition somewehere and sometimes model is cleared by our test tools (and is set to undefined
as expected), sometimes – by onTextUnmatched
from autocomplete
plugin (and is set to null
, causing test to fail).
…ing. Combine 2 manual test into one, and rename 2 other to be coherent with config option names, add missing tags to test.
… graceful shutdown in case of emoji loading error.
…us but not convert emoji during paste data to editor.
…ading to support emoji in IE, correct test to run on supported environments only.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
What is the purpose of this pull request?
New feature
Does your PR contain necessary tests?
All patches which change the editor code must include tests. You can always read more
on PR testing,
how to set the testing environment and
how to create tests
in the official CKEditor documentation.
This PR contains
What changes did you make?
Close #1746