diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 38abe4b5fd0..12c30989923 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -79,7 +79,7 @@ var/global/admin_ooc_colour = "#b82e00"
else
display_name = holder.fakekey
- to_chat(C, "OOC: [display_name]: [msg]")
+ to_chat(C, "OOC: [display_name]: [msg]")
/proc/toggle_ooc()
config.ooc_allowed = ( !config.ooc_allowed )
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 63241ce43c5..4309bb28719 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -149,8 +149,11 @@
adminhelp(reply) //sender has left, adminhelp instead
return
+ // for emoji, we have to define a specific span for jquery to look for
+ msg = "[msg]"
+
recieve_message = "[type] from-[recieve_pm_type][key_name(src, C, C.holder ? 1 : 0, type)]: [msg]"
- to_chat(C, recieve_message)
+ to_chat(C, recieve_message) //we also have to pass the allowEmoji flag
to_chat(src, "[send_pm_type][type] to-[key_name(C, src, holder ? 1 : 0, type)]: [msg]")
/*if(holder && !C.holder)
diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css
index c5c0e8e93d2..c7204d36577 100644
--- a/goon/browserassets/css/browserOutput.css
+++ b/goon/browserassets/css/browserOutput.css
@@ -367,3 +367,6 @@ h1.alert, h2.alert {color: #000000;}
/* HELPER CLASSES */
.text-normal {font-weight: normal; font-style: normal;}
.hidden {display: none; visibility: hidden;}
+
+/* EMOJI STUFF */
+.emoji {max-height: 16px; max-width: 16px}
\ No newline at end of file
diff --git a/goon/browserassets/html/browserOutput.html b/goon/browserassets/html/browserOutput.html
index feaa5f0ecda..ea9c7528015 100644
--- a/goon/browserassets/html/browserOutput.html
+++ b/goon/browserassets/html/browserOutput.html
@@ -16,6 +16,8 @@
+
+
diff --git a/goon/browserassets/js/browserOutput.js b/goon/browserassets/js/browserOutput.js
index 2abf26079d8..d2ff2b0dcba 100644
--- a/goon/browserassets/js/browserOutput.js
+++ b/goon/browserassets/js/browserOutput.js
@@ -62,7 +62,10 @@ var opts = {
'clientData': [],
// List of macros in the 'hotkeymode' macro set.
- 'macros': {}
+ 'macros': {},
+
+ // Emoji toggle
+ 'enableEmoji': true
};
function outerHTML(el) {
@@ -97,6 +100,32 @@ function linkify(text) {
});
}
+function emojiparse(el) {
+
+ if (!UNICODE_9_EMOJI || !twemoji) { //something didn't load right, probably IE8
+ return;
+ }
+
+ var $el = $(el);
+
+ var $emojiZone = $el.find(".emoji_enabled");
+
+ if ($emojiZone.length) {
+ $emojiZone.each(function () {
+ var html = $(this).html();
+ html = html.replace(/\:(.*?)\:/g, function (match, p1, offset, s) {
+ var unicode_entity = UNICODE_9_EMOJI[p1];
+ if (unicode_entity) {
+ return unicode_entity;
+ }
+ return match;
+ });
+ html = $.parseHTML(twemoji.parse(html, {size: "svg", ext: ".svg"}));
+ $(this).html(html);
+ });
+ }
+}
+
// Colorizes the highlight spans
function setHighlightColor(match) {
match.style.background = opts.highlightColor
@@ -127,6 +156,12 @@ function output(message, flag) {
if (flag !== 'internal')
opts.lastPang = Date.now();
+ // Basically we url_encode twice server side so we can manually read the encoded version and actually do UTF-8.
+ // The replace for + is because FOR SOME REASON, BYOND replaces spaces with a + instead of %20, and a plus with %2b.
+ // Marvelous.
+ message = message.replace(/\+/g, "%20");
+ message = decoder(message);
+
//The behemoth of filter-code (for Admin message filters)
//Note: This is proooobably hella inefficient
var filteredOut = false;
@@ -215,7 +250,7 @@ function output(message, flag) {
message = linkify(message);
}
- opts.messageCount++;
+ opts.messageCount++;
//Actually append the message
var entry = document.createElement('div');
@@ -227,6 +262,13 @@ function output(message, flag) {
}
entry.innerHTML = message;
+
+ // emoji!
+ if (opts.enableEmoji) {
+ emojiparse(entry);
+ }
+
+
$messages[0].appendChild(entry);
//Actually do the snap
@@ -240,6 +282,11 @@ function output(message, flag) {
}
}
+function internalOutput(message, flag)
+{
+ output(escaper(message), flag);
+}
+
//Runs a route within byond, client or server side. Consider this "ehjax" for byond.
function runByond(uri) {
window.location = uri;
@@ -339,7 +386,7 @@ function ehjaxCallback(data) {
$('#pingDot').css('color', '#'+hex);
} else if (data == 'roundrestart') {
opts.restarting = true;
- output('The connection has been closed because the server is restarting. Please wait while you automatically reconnect.
', 'internal');
+ internalOutput('The connection has been closed because the server is restarting. Please wait while you automatically reconnect.
', 'internal');
} else if (data == 'stopaudio') {
$('.dectalk').remove();
} else {
@@ -374,9 +421,9 @@ function ehjaxCallback(data) {
changeMode(data.modeChange);
} else if (data.firebug) {
if (data.trigger) {
- output('Loading firebug console, triggered by '+data.trigger+'...', 'internal');
+ internalOutput('Loading firebug console, triggered by '+data.trigger+'...', 'internal');
} else {
- output('Loading firebug console...', 'internal');
+ internalOutput('Loading firebug console...', 'internal');
}
var firebugEl = document.createElement('script');
firebugEl.src = 'https://getfirebug.com/firebug-lite-debug.js';
@@ -387,7 +434,7 @@ function ehjaxCallback(data) {
message = ' '+
'You hear a strange robotic voice...' + message;
}
- output(message, 'preventLink');
+ internalOutput(message, 'preventLink');
}
}
}
@@ -451,7 +498,7 @@ $(function() {
if (!opts.noResponse) { //Only actually append a message if the previous ping didn't also fail (to prevent spam)
opts.noResponse = true;
opts.noResponseCount++;
- output('You are either AFK, experiencing lag or the connection has closed.
', 'internal');
+ internalOutput('You are either AFK, experiencing lag or the connection has closed.
', 'internal');
}
} else if (opts.noResponse) { //Previous ping attempt failed ohno
$('.connectionClosed[data-count="'+opts.noResponseCount+'"]:not(.restored)').addClass('restored').text('Your connection has been restored (probably)!');
@@ -490,18 +537,18 @@ $(function() {
if (savedConfig.sfontSize) {
$messages.css('font-size', savedConfig.sfontSize);
- output('Loaded font size setting of: '+savedConfig.sfontSize+'', 'internal');
+ internalOutput('Loaded font size setting of: '+savedConfig.sfontSize+'', 'internal');
}
if (savedConfig.sfontType) {
$messages.css('font-family', savedConfig.sfontType);
- output('Loaded font type setting of: '+savedConfig.sfontType+'', 'internal');
+ internalOutput('Loaded font type setting of: '+savedConfig.sfontType+'', 'internal');
}
if (savedConfig.spingDisabled) {
if (savedConfig.spingDisabled == 'true') {
opts.pingDisabled = true;
$('#ping').hide();
}
- output('Loaded ping display of: '+(opts.pingDisabled ? 'hidden' : 'visible')+'', 'internal');
+ internalOutput('Loaded ping display of: '+(opts.pingDisabled ? 'hidden' : 'visible')+'', 'internal');
}
if (savedConfig.shighlightTerms) {
var savedTerms = $.parseJSON(savedConfig.shighlightTerms);
@@ -513,13 +560,13 @@ $(function() {
}
if (actualTerms) {
actualTerms = actualTerms.substring(0, actualTerms.length - 2);
- output('Loaded highlight strings of: ' + actualTerms+'', 'internal');
+ internalOutput('Loaded highlight strings of: ' + actualTerms+'', 'internal');
opts.highlightTerms = savedTerms;
}
}
if (savedConfig.shighlightColor) {
opts.highlightColor = savedConfig.shighlightColor;
- output('Loaded highlight color of: '+savedConfig.shighlightColor+'', 'internal');
+ internalOutput('Loaded highlight color of: '+savedConfig.shighlightColor+'', 'internal');
}
(function() {
@@ -606,14 +653,14 @@ $(function() {
}
e.preventDefault()
-
+
var k = e.which;
var command; // Command to execute through winset.
// Hardcoded because else there would be no feedback message.
if (k == 113) { // F2
runByond('byond://winset?screenshot=auto');
- output('Screenshot taken', 'internal');
+ internalOutput('Screenshot taken', 'internal');
}
var c = "";
@@ -747,7 +794,7 @@ $(function() {
fontSize = fontSize - 1 + 'px';
$messages.css({'font-size': fontSize});
setCookie('fontsize', fontSize, 365);
- output('Font size set to '+fontSize+'', 'internal');
+ internalOutput('Font size set to '+fontSize+'', 'internal');
});
$('#increaseFont').click(function(e) {
@@ -755,7 +802,7 @@ $(function() {
fontSize = fontSize + 1 + 'px';
$messages.css({'font-size': fontSize});
setCookie('fontsize', fontSize, 365);
- output('Font size set to '+fontSize+'', 'internal');
+ internalOutput('Font size set to '+fontSize+'', 'internal');
});
$('#chooseFont').click(function(e) {
@@ -821,7 +868,7 @@ $(function() {
$('#highlightTerm').click(function(e) {
if(!($().mark)) {
- output('Highlighting is disabled. You are probably using Internet Explorer 8 and need to update.', 'internal');
+ internalOutput('Highlighting is disabled. You are probably using Internet Explorer 8 and need to update.', 'internal');
return;
}
if ($('.popup .highlightTerm').is(':visible')) {return;}
diff --git a/goon/browserassets/json/unicode_9_annotations.json b/goon/browserassets/json/unicode_9_annotations.json
new file mode 100644
index 00000000000..fb39b0a4c69
--- /dev/null
+++ b/goon/browserassets/json/unicode_9_annotations.json
@@ -0,0 +1,1189 @@
+var UNICODE_9_EMOJI = {
+ "female_sign": "โ",
+ "male_sign": "โ",
+ "medical_symbol": "โ",
+ "man_dancing": "๐บ",
+ "black_heart": "๐ค",
+ "call_me_hand": "๐ค",
+ "raised_back_of_hand": "๐ค",
+ "left-facing_fist": "๐ค",
+ "right-facing_fist": "๐ค",
+ "handshake": "๐ค",
+ "crossed_fingers": "๐ค",
+ "cowboy_hat_face": "๐ค ",
+ "clown_face": "๐คก",
+ "nauseated_face": "๐คข",
+ "rolling_on_the_floor_laughing": "๐คฃ",
+ "drooling_face": "๐คค",
+ "lying_face": "๐คฅ",
+ "person_facepalming": "๐คฆ",
+ "woman_facepalming": "๐คฆโโ",
+ "man_facepalming": "๐คฆโโ",
+ "sneezing_face": "๐คง",
+ "pregnant_woman": "๐คฐ",
+ "selfie": "๐คณ",
+ "prince": "๐คด",
+ "man_in_tuxedo": "๐คต",
+ "mrs_claus": "๐คถ",
+ "person_shrugging": "๐คท",
+ "woman_shrugging": "๐คทโโ",
+ "man_shrugging": "๐คทโโ",
+ "person_cartwheeling": "๐คธ",
+ "woman_cartwheeling": "๐คธโโ",
+ "man_cartwheeling": "๐คธโโ",
+ "person_juggling": "๐คน",
+ "woman_juggling": "๐คนโโ",
+ "man_juggling": "๐คนโโ",
+ "person_fencing": "๐คบ",
+ "people_wrestling": "๐คผ",
+ "women_wrestling": "๐คผโโ",
+ "men_wrestling": "๐คผโโ",
+ "person_playing_water_polo": "๐คฝ",
+ "woman_playing_water_polo": "๐คฝโโ",
+ "man_playing_water_polo": "๐คฝโโ",
+ "person_playing_handball": "๐คพ",
+ "woman_playing_handball": "๐คพโโ",
+ "man_playing_handball": "๐คพโโ",
+ "wilted_flower": "๐ฅ",
+ "drum": "๐ฅ",
+ "clinking_glasses": "๐ฅ",
+ "tumbler_glass": "๐ฅ",
+ "spoon": "๐ฅ",
+ "goal_net": "๐ฅ
",
+ "1st_place_medal": "๐ฅ",
+ "2nd_place_medal": "๐ฅ",
+ "3rd_place_medal": "๐ฅ",
+ "boxing_glove": "๐ฅ",
+ "martial_arts_uniform": "๐ฅ",
+ "croissant": "๐ฅ",
+ "avocado": "๐ฅ",
+ "cucumber": "๐ฅ",
+ "bacon": "๐ฅ",
+ "potato": "๐ฅ",
+ "carrot": "๐ฅ",
+ "baguette_bread": "๐ฅ",
+ "green_salad": "๐ฅ",
+ "shallow_pan_of_food": "๐ฅ",
+ "stuffed_flatbread": "๐ฅ",
+ "egg": "๐ฅ",
+ "glass_of_milk": "๐ฅ",
+ "peanuts": "๐ฅ",
+ "kiwi_fruit": "๐ฅ",
+ "pancakes": "๐ฅ",
+ "eagle": "๐ฆ
",
+ "duck": "๐ฆ",
+ "bat": "๐ฆ",
+ "shark": "๐ฆ",
+ "owl": "๐ฆ",
+ "fox_face": "๐ฆ",
+ "butterfly": "๐ฆ",
+ "deer": "๐ฆ",
+ "gorilla": "๐ฆ",
+ "lizard": "๐ฆ",
+ "rhinoceros": "๐ฆ",
+ "shrimp": "๐ฆ",
+ "squid": "๐ฆ",
+ "grinning_face": "๐",
+ "grinning_face_with_smiling_eyes": "๐",
+ "face_with_tears_of_joy": "๐",
+ "smiling_face_with_open_mouth": "๐",
+ "smiling_face_with_open_mouth_&_smiling_eyes": "๐",
+ "smiling_face_with_open_mouth_&_cold_sweat": "๐
",
+ "smiling_face_with_open_mouth_&_closed_eyes": "๐",
+ "winking_face": "๐",
+ "smiling_face_with_smiling_eyes": "๐",
+ "face_savouring_delicious_food": "๐",
+ "smiling_face_with_sunglasses": "๐",
+ "smiling_face_with_heart-eyes": "๐",
+ "face_blowing_a_kiss": "๐",
+ "kissing_face": "๐",
+ "kissing_face_with_smiling_eyes": "๐",
+ "kissing_face_with_closed_eyes": "๐",
+ "smiling_face": "โบ",
+ "slightly_smiling_face": "๐",
+ "hugging_face": "๐ค",
+ "smiling_face_with_halo": "๐",
+ "thinking_face": "๐ค",
+ "neutral_face": "๐",
+ "expressionless_face": "๐",
+ "face_without_mouth": "๐ถ",
+ "face_with_rolling_eyes": "๐",
+ "smirking_face": "๐",
+ "persevering_face": "๐ฃ",
+ "disappointed_but_relieved_face": "๐ฅ",
+ "face_with_open_mouth": "๐ฎ",
+ "zipper-mouth_face": "๐ค",
+ "hushed_face": "๐ฏ",
+ "sleepy_face": "๐ช",
+ "tired_face": "๐ซ",
+ "sleeping_face": "๐ด",
+ "relieved_face": "๐",
+ "nerd_face": "๐ค",
+ "face_with_stuck-out_tongue": "๐",
+ "face_with_stuck-out_tongue_&_winking_eye": "๐",
+ "face_with_stuck-out_tongue_&_closed_eyes": "๐",
+ "frowning_face": "โน",
+ "slightly_frowning_face": "๐",
+ "unamused_face": "๐",
+ "face_with_cold_sweat": "๐",
+ "pensive_face": "๐",
+ "confused_face": "๐",
+ "confounded_face": "๐",
+ "upside-down_face": "๐",
+ "face_with_medical_mask": "๐ท",
+ "face_with_thermometer": "๐ค",
+ "face_with_head-bandage": "๐ค",
+ "money-mouth_face": "๐ค",
+ "astonished_face": "๐ฒ",
+ "disappointed_face": "๐",
+ "worried_face": "๐",
+ "face_with_steam_from_nose": "๐ค",
+ "crying_face": "๐ข",
+ "loudly_crying_face": "๐ญ",
+ "frowning_face_with_open_mouth": "๐ฆ",
+ "anguished_face": "๐ง",
+ "fearful_face": "๐จ",
+ "weary_face": "๐ฉ",
+ "grimacing_face": "๐ฌ",
+ "face_with_open_mouth_&_cold_sweat": "๐ฐ",
+ "face_screaming_in_fear": "๐ฑ",
+ "flushed_face": "๐ณ",
+ "dizzy_face": "๐ต",
+ "pouting_face": "๐ก",
+ "angry_face": "๐ ",
+ "smiling_face_with_horns": "๐",
+ "angry_face_with_horns": "๐ฟ",
+ "ogre": "๐น",
+ "goblin": "๐บ",
+ "skull": "๐",
+ "skull_and_crossbones": "โ ",
+ "ghost": "๐ป",
+ "alien": "๐ฝ",
+ "alien_monster": "๐พ",
+ "robot_face": "๐ค",
+ "pile_of_poo": "๐ฉ",
+ "smiling_cat_face_with_open_mouth": "๐บ",
+ "grinning_cat_face_with_smiling_eyes": "๐ธ",
+ "cat_face_with_tears_of_joy": "๐น",
+ "smiling_cat_face_with_heart-eyes": "๐ป",
+ "cat_face_with_wry_smile": "๐ผ",
+ "kissing_cat_face_with_closed_eyes": "๐ฝ",
+ "weary_cat_face": "๐",
+ "crying_cat_face": "๐ฟ",
+ "pouting_cat_face": "๐พ",
+ "see-no-evil_monkey": "๐",
+ "hear-no-evil_monkey": "๐",
+ "speak-no-evil_monkey": "๐",
+ "boy": "๐ฆ",
+ "girl": "๐ง",
+ "man": "๐จ",
+ "man_health_worker": "๐จโโ",
+ "man_student": "๐จโ๐",
+ "man_farmer": "๐จโ๐พ",
+ "man_cook": "๐จโ๐ณ",
+ "man_teacher": "๐จโ๐ซ",
+ "man_factory_worker": "๐จโ๐ญ",
+ "man_artist": "๐จโ๐จ",
+ "man_firefighter": "๐จโ๐",
+ "man_pilot": "๐จโโ",
+ "man_astronaut": "๐จโ๐",
+ "man_singer": "๐จโ๐ค",
+ "man_technologist": "๐จโ๐ป",
+ "man_scientist": "๐จโ๐ฌ",
+ "man_office_worker": "๐จโ๐ผ",
+ "man_mechanic": "๐จโ๐ง",
+ "man_judge": "๐จโโ",
+ "woman": "๐ฉ",
+ "woman_health_worker": "๐ฉโโ",
+ "woman_student": "๐ฉโ๐",
+ "woman_farmer": "๐ฉโ๐พ",
+ "woman_cook": "๐ฉโ๐ณ",
+ "woman_teacher": "๐ฉโ๐ซ",
+ "woman_factory_worker": "๐ฉโ๐ญ",
+ "woman_artist": "๐ฉโ๐จ",
+ "woman_firefighter": "๐ฉโ๐",
+ "woman_pilot": "๐ฉโโ",
+ "woman_astronaut": "๐ฉโ๐",
+ "woman_singer": "๐ฉโ๐ค",
+ "woman_technologist": "๐ฉโ๐ป",
+ "woman_scientist": "๐ฉโ๐ฌ",
+ "woman_office_worker": "๐ฉโ๐ผ",
+ "woman_mechanic": "๐ฉโ๐ง",
+ "woman_judge": "๐ฉโโ",
+ "old_man": "๐ด",
+ "old_woman": "๐ต",
+ "baby": "๐ถ",
+ "blond-haired_person": "๐ฑ",
+ "blond-haired_woman": "๐ฑโโ",
+ "blond-haired_man": "๐ฑโโ",
+ "police_officer": "๐ฎ",
+ "woman_police_officer": "๐ฎโโ",
+ "man_police_officer": "๐ฎโโ",
+ "man_with_chinese_cap": "๐ฒ",
+ "person_wearing_turban": "๐ณ",
+ "woman_wearing_turban": "๐ณโโ",
+ "man_wearing_turban": "๐ณโโ",
+ "construction_worker": "๐ท",
+ "woman_construction_worker": "๐ทโโ",
+ "man_construction_worker": "๐ทโโ",
+ "rescue_workers_helmet": "โ",
+ "princess": "๐ธ",
+ "guard": "๐",
+ "woman_guard": "๐โโ",
+ "man_guard": "๐โโ",
+ "detective": "๐ต",
+ "woman_detective": "๐ตโโ",
+ "man_detective": "๐ตโโ",
+ "santa_claus": "๐
",
+ "baby_angel": "๐ผ",
+ "people_with_bunny_ears_partying": "๐ฏ",
+ "women_with_bunny_ears_partying": "๐ฏโโ",
+ "men_with_bunny_ears_partying": "๐ฏโโ",
+ "person_getting_massage": "๐",
+ "woman_getting_massage": "๐โโ",
+ "man_getting_massage": "๐โโ",
+ "person_getting_haircut": "๐",
+ "woman_getting_haircut": "๐โโ",
+ "man_getting_haircut": "๐โโ",
+ "bride_with_veil": "๐ฐ",
+ "person_frowning": "๐",
+ "woman_frowning": "๐โโ",
+ "man_frowning": "๐โโ",
+ "person_pouting": "๐",
+ "woman_pouting": "๐โโ",
+ "man_pouting": "๐โโ",
+ "person_gesturing_no": "๐
",
+ "woman_gesturing_no": "๐
โโ",
+ "man_gesturing_no": "๐
โโ",
+ "person_gesturing_ok": "๐",
+ "woman_gesturing_ok": "๐โโ",
+ "man_gesturing_ok": "๐โโ",
+ "person_tipping_hand": "๐",
+ "woman_tipping_hand": "๐โโ",
+ "man_tipping_hand": "๐โโ",
+ "person_raising_hand": "๐",
+ "woman_raising_hand": "๐โโ",
+ "man_raising_hand": "๐โโ",
+ "person_bowing": "๐",
+ "woman_bowing": "๐โโ",
+ "man_bowing": "๐โโ",
+ "raising_hands": "๐",
+ "folded_hands": "๐",
+ "speaking_head": "๐ฃ",
+ "bust_in_silhouette": "๐ค",
+ "busts_in_silhouette": "๐ฅ",
+ "person_walking": "๐ถ",
+ "woman_walking": "๐ถโโ",
+ "man_walking": "๐ถโโ",
+ "person_running": "๐",
+ "woman_running": "๐โโ",
+ "man_running": "๐โโ",
+ "woman_dancing": "๐",
+ "man_in_business_suit_levitating": "๐ด",
+ "kiss": "๐",
+ "couple_with_heart": "๐",
+ "family": "๐ช",
+ "man_and_woman_holding_hands": "๐ซ",
+ "two_men_holding_hands": "๐ฌ",
+ "two_women_holding_hands": "๐ญ",
+ "light_skin_tone": "๐ป",
+ "medium-light_skin_tone": "๐ผ",
+ "medium_skin_tone": "๐ฝ",
+ "medium-dark_skin_tone": "๐พ",
+ "dark_skin_tone": "๐ฟ",
+ "flexed_biceps": "๐ช",
+ "backhand_index_pointing_left": "๐",
+ "backhand_index_pointing_right": "๐",
+ "index_pointing_up": "โ",
+ "backhand_index_pointing_up": "๐",
+ "middle_finger": "๐",
+ "backhand_index_pointing_down": "๐",
+ "victory_hand": "โ",
+ "vulcan_salute": "๐",
+ "sign_of_the_horns": "๐ค",
+ "raised_hand_with_fingers_splayed": "๐",
+ "raised_fist": "โ",
+ "raised_hand": "โ",
+ "oncoming_fist": "๐",
+ "ok_hand": "๐",
+ "thumbs_up": "๐",
+ "thumbs_down": "๐",
+ "waving_hand": "๐",
+ "clapping_hands": "๐",
+ "open_hands": "๐",
+ "writing_hand": "โ",
+ "nail_polish": "๐
",
+ "ear": "๐",
+ "nose": "๐",
+ "footprints": "๐ฃ",
+ "eyes": "๐",
+ "eye": "๐",
+ "eye_in_speech_bubble": "๐โ๐จ",
+ "tongue": "๐
",
+ "mouth": "๐",
+ "kiss_mark": "๐",
+ "heart_with_arrow": "๐",
+ "red_heart": "โค",
+ "beating_heart": "๐",
+ "broken_heart": "๐",
+ "two_hearts": "๐",
+ "sparkling_heart": "๐",
+ "growing_heart": "๐",
+ "blue_heart": "๐",
+ "green_heart": "๐",
+ "yellow_heart": "๐",
+ "purple_heart": "๐",
+ "heart_with_ribbon": "๐",
+ "revolving_hearts": "๐",
+ "heart_decoration": "๐",
+ "heavy_heart_exclamation": "โฃ",
+ "love_letter": "๐",
+ "zzz": "๐ค",
+ "anger_symbol": "๐ข",
+ "bomb": "๐ฃ",
+ "collision": "๐ฅ",
+ "sweat_droplets": "๐ฆ",
+ "dashing_away": "๐จ",
+ "dizzy": "๐ซ",
+ "speech_balloon": "๐ฌ",
+ "left_speech_bubble": "๐จ",
+ "right_anger_bubble": "๐ฏ",
+ "thought_balloon": "๐ญ",
+ "hole": "๐ณ",
+ "glasses": "๐",
+ "sunglasses": "๐ถ",
+ "necktie": "๐",
+ "t-shirt": "๐",
+ "jeans": "๐",
+ "dress": "๐",
+ "kimono": "๐",
+ "bikini": "๐",
+ "womans_clothes": "๐",
+ "purse": "๐",
+ "handbag": "๐",
+ "clutch_bag": "๐",
+ "shopping_bags": "๐",
+ "school_backpack": "๐",
+ "mans_shoe": "๐",
+ "running_shoe": "๐",
+ "high-heeled_shoe": "๐ ",
+ "womans_sandal": "๐ก",
+ "womans_boot": "๐ข",
+ "crown": "๐",
+ "womans_hat": "๐",
+ "top_hat": "๐ฉ",
+ "graduation_cap": "๐",
+ "prayer_beads": "๐ฟ",
+ "lipstick": "๐",
+ "ring": "๐",
+ "gem_stone": "๐",
+ "monkey_face": "๐ต",
+ "monkey": "๐",
+ "dog_face": "๐ถ",
+ "dog": "๐",
+ "poodle": "๐ฉ",
+ "wolf_face": "๐บ",
+ "cat_face": "๐ฑ",
+ "cat": "๐",
+ "lion_face": "๐ฆ",
+ "tiger_face": "๐ฏ",
+ "tiger": "๐
",
+ "leopard": "๐",
+ "horse_face": "๐ด",
+ "horse": "๐",
+ "unicorn_face": "๐ฆ",
+ "cow_face": "๐ฎ",
+ "ox": "๐",
+ "water_buffalo": "๐",
+ "cow": "๐",
+ "pig_face": "๐ท",
+ "pig": "๐",
+ "boar": "๐",
+ "pig_nose": "๐ฝ",
+ "ram": "๐",
+ "sheep": "๐",
+ "goat": "๐",
+ "camel": "๐ช",
+ "two-hump_camel": "๐ซ",
+ "elephant": "๐",
+ "mouse_face": "๐ญ",
+ "mouse": "๐",
+ "rat": "๐",
+ "hamster_face": "๐น",
+ "rabbit_face": "๐ฐ",
+ "rabbit": "๐",
+ "chipmunk": "๐ฟ",
+ "bear_face": "๐ป",
+ "koala": "๐จ",
+ "panda_face": "๐ผ",
+ "paw_prints": "๐พ",
+ "turkey": "๐ฆ",
+ "chicken": "๐",
+ "rooster": "๐",
+ "hatching_chick": "๐ฃ",
+ "baby_chick": "๐ค",
+ "front-facing_baby_chick": "๐ฅ",
+ "bird": "๐ฆ",
+ "penguin": "๐ง",
+ "dove": "๐",
+ "frog_face": "๐ธ",
+ "crocodile": "๐",
+ "turtle": "๐ข",
+ "snake": "๐",
+ "dragon_face": "๐ฒ",
+ "dragon": "๐",
+ "spouting_whale": "๐ณ",
+ "whale": "๐",
+ "dolphin": "๐ฌ",
+ "fish": "๐",
+ "tropical_fish": "๐ ",
+ "blowfish": "๐ก",
+ "octopus": "๐",
+ "spiral_shell": "๐",
+ "crab": "๐ฆ",
+ "snail": "๐",
+ "bug": "๐",
+ "ant": "๐",
+ "honeybee": "๐",
+ "lady_beetle": "๐",
+ "spider": "๐ท",
+ "spider_web": "๐ธ",
+ "scorpion": "๐ฆ",
+ "bouquet": "๐",
+ "cherry_blossom": "๐ธ",
+ "white_flower": "๐ฎ",
+ "rosette": "๐ต",
+ "rose": "๐น",
+ "hibiscus": "๐บ",
+ "sunflower": "๐ป",
+ "blossom": "๐ผ",
+ "tulip": "๐ท",
+ "shamrock": "โ",
+ "seedling": "๐ฑ",
+ "evergreen_tree": "๐ฒ",
+ "deciduous_tree": "๐ณ",
+ "palm_tree": "๐ด",
+ "cactus": "๐ต",
+ "sheaf_of_rice": "๐พ",
+ "herb": "๐ฟ",
+ "four_leaf_clover": "๐",
+ "maple_leaf": "๐",
+ "fallen_leaf": "๐",
+ "leaf_fluttering_in_wind": "๐",
+ "grapes": "๐",
+ "melon": "๐",
+ "watermelon": "๐",
+ "tangerine": "๐",
+ "lemon": "๐",
+ "banana": "๐",
+ "pineapple": "๐",
+ "red_apple": "๐",
+ "green_apple": "๐",
+ "pear": "๐",
+ "peach": "๐",
+ "cherries": "๐",
+ "strawberry": "๐",
+ "tomato": "๐
",
+ "eggplant": "๐",
+ "ear_of_corn": "๐ฝ",
+ "hot_pepper": "๐ถ",
+ "mushroom": "๐",
+ "chestnut": "๐ฐ",
+ "bread": "๐",
+ "cheese_wedge": "๐ง",
+ "meat_on_bone": "๐",
+ "poultry_leg": "๐",
+ "hamburger": "๐",
+ "french_fries": "๐",
+ "pizza": "๐",
+ "hot_dog": "๐ญ",
+ "taco": "๐ฎ",
+ "burrito": "๐ฏ",
+ "popcorn": "๐ฟ",
+ "pot_of_food": "๐ฒ",
+ "bento_box": "๐ฑ",
+ "rice_cracker": "๐",
+ "rice_ball": "๐",
+ "cooked_rice": "๐",
+ "curry_rice": "๐",
+ "steaming_bowl": "๐",
+ "spaghetti": "๐",
+ "roasted_sweet_potato": "๐ ",
+ "oden": "๐ข",
+ "sushi": "๐ฃ",
+ "fried_shrimp": "๐ค",
+ "fish_cake_with_swirl": "๐ฅ",
+ "dango": "๐ก",
+ "soft_ice_cream": "๐ฆ",
+ "shaved_ice": "๐ง",
+ "ice_cream": "๐จ",
+ "doughnut": "๐ฉ",
+ "cookie": "๐ช",
+ "birthday_cake": "๐",
+ "shortcake": "๐ฐ",
+ "chocolate_bar": "๐ซ",
+ "candy": "๐ฌ",
+ "lollipop": "๐ญ",
+ "custard": "๐ฎ",
+ "honey_pot": "๐ฏ",
+ "baby_bottle": "๐ผ",
+ "hot_beverage": "โ",
+ "teacup_without_handle": "๐ต",
+ "sake": "๐ถ",
+ "bottle_with_popping_cork": "๐พ",
+ "wine_glass": "๐ท",
+ "cocktail_glass": "๐ธ",
+ "tropical_drink": "๐น",
+ "beer_mug": "๐บ",
+ "clinking_beer_mugs": "๐ป",
+ "fork_and_knife_with_plate": "๐ฝ",
+ "fork_and_knife": "๐ด",
+ "cooking": "๐ณ",
+ "amphora": "๐บ",
+ "globe_showing_europe-africa": "๐",
+ "globe_showing_americas": "๐",
+ "globe_showing_asia-australia": "๐",
+ "globe_with_meridians": "๐",
+ "world_map": "๐บ",
+ "snow-capped_mountain": "๐",
+ "mountain": "โฐ",
+ "volcano": "๐",
+ "mount_fuji": "๐ป",
+ "camping": "๐",
+ "beach_with_umbrella": "๐",
+ "desert": "๐",
+ "desert_island": "๐",
+ "national_park": "๐",
+ "stadium": "๐",
+ "classical_building": "๐",
+ "building_construction": "๐",
+ "house": "๐ ",
+ "cityscape": "๐",
+ "derelict_house": "๐",
+ "house_with_garden": "๐ก",
+ "church": "โช",
+ "kaaba": "๐",
+ "mosque": "๐",
+ "synagogue": "๐",
+ "shinto_shrine": "โฉ",
+ "office_building": "๐ข",
+ "japanese_post_office": "๐ฃ",
+ "post_office": "๐ค",
+ "hospital": "๐ฅ",
+ "bank": "๐ฆ",
+ "hotel": "๐จ",
+ "love_hotel": "๐ฉ",
+ "convenience_store": "๐ช",
+ "school": "๐ซ",
+ "department_store": "๐ฌ",
+ "factory": "๐ญ",
+ "japanese_castle": "๐ฏ",
+ "castle": "๐ฐ",
+ "wedding": "๐",
+ "tokyo_tower": "๐ผ",
+ "statue_of_liberty": "๐ฝ",
+ "map_of_japan": "๐พ",
+ "fountain": "โฒ",
+ "tent": "โบ",
+ "foggy": "๐",
+ "night_with_stars": "๐",
+ "sunrise_over_mountains": "๐",
+ "sunrise": "๐
",
+ "cityscape_at_dusk": "๐",
+ "sunset": "๐",
+ "bridge_at_night": "๐",
+ "hot_springs": "โจ",
+ "milky_way": "๐",
+ "carousel_horse": "๐ ",
+ "ferris_wheel": "๐ก",
+ "roller_coaster": "๐ข",
+ "barber_pole": "๐",
+ "circus_tent": "๐ช",
+ "performing_arts": "๐ญ",
+ "framed_picture": "๐ผ",
+ "artist_palette": "๐จ",
+ "slot_machine": "๐ฐ",
+ "locomotive": "๐",
+ "railway_car": "๐",
+ "high-speed_train": "๐",
+ "high-speed_train_with_bullet_nose": "๐
",
+ "train": "๐",
+ "metro": "๐",
+ "light_rail": "๐",
+ "station": "๐",
+ "tram": "๐",
+ "monorail": "๐",
+ "mountain_railway": "๐",
+ "tram_car": "๐",
+ "bus": "๐",
+ "oncoming_bus": "๐",
+ "trolleybus": "๐",
+ "bus_stop": "๐",
+ "minibus": "๐",
+ "ambulance": "๐",
+ "fire_engine": "๐",
+ "police_car": "๐",
+ "oncoming_police_car": "๐",
+ "taxi": "๐",
+ "oncoming_taxi": "๐",
+ "automobile": "๐",
+ "oncoming_automobile": "๐",
+ "sport_utility_vehicle": "๐",
+ "delivery_truck": "๐",
+ "articulated_lorry": "๐",
+ "tractor": "๐",
+ "bicycle": "๐ฒ",
+ "fuel_pump": "โฝ",
+ "motorway": "๐ฃ",
+ "railway_track": "๐ค",
+ "police_car_light": "๐จ",
+ "horizontal_traffic_light": "๐ฅ",
+ "vertical_traffic_light": "๐ฆ",
+ "construction": "๐ง",
+ "anchor": "โ",
+ "sailboat": "โต",
+ "person_rowing_boat": "๐ฃ",
+ "woman_rowing_boat": "๐ฃโโ",
+ "man_rowing_boat": "๐ฃโโ",
+ "speedboat": "๐ค",
+ "passenger_ship": "๐ณ",
+ "ferry": "โด",
+ "motor_boat": "๐ฅ",
+ "ship": "๐ข",
+ "airplane": "โ",
+ "small_airplane": "๐ฉ",
+ "airplane_departure": "๐ซ",
+ "airplane_arrival": "๐ฌ",
+ "seat": "๐บ",
+ "helicopter": "๐",
+ "suspension_railway": "๐",
+ "mountain_cableway": "๐ ",
+ "aerial_tramway": "๐ก",
+ "rocket": "๐",
+ "satellite": "๐ฐ",
+ "bellhop_bell": "๐",
+ "door": "๐ช",
+ "person_in_bed": "๐",
+ "bed": "๐",
+ "couch_and_lamp": "๐",
+ "toilet": "๐ฝ",
+ "shower": "๐ฟ",
+ "person_taking_bath": "๐",
+ "bathtub": "๐",
+ "hourglass": "โ",
+ "hourglass_with_flowing_sand": "โณ",
+ "watch": "โ",
+ "alarm_clock": "โฐ",
+ "stopwatch": "โฑ",
+ "timer_clock": "โฒ",
+ "mantelpiece_clock": "๐ฐ",
+ "twelve_oclock": "๐",
+ "twelve-thirty": "๐ง",
+ "one_oclock": "๐",
+ "one-thirty": "๐",
+ "two_oclock": "๐",
+ "two-thirty": "๐",
+ "three_oclock": "๐",
+ "three-thirty": "๐",
+ "four_oclock": "๐",
+ "four-thirty": "๐",
+ "five_oclock": "๐",
+ "five-thirty": "๐ ",
+ "six_oclock": "๐",
+ "six-thirty": "๐ก",
+ "seven_oclock": "๐",
+ "seven-thirty": "๐ข",
+ "eight_oclock": "๐",
+ "eight-thirty": "๐ฃ",
+ "nine_oclock": "๐",
+ "nine-thirty": "๐ค",
+ "ten_oclock": "๐",
+ "ten-thirty": "๐ฅ",
+ "eleven_oclock": "๐",
+ "eleven-thirty": "๐ฆ",
+ "new_moon": "๐",
+ "waxing_crescent_moon": "๐",
+ "first_quarter_moon": "๐",
+ "waxing_gibbous_moon": "๐",
+ "full_moon": "๐",
+ "waning_gibbous_moon": "๐",
+ "last_quarter_moon": "๐",
+ "waning_crescent_moon": "๐",
+ "crescent_moon": "๐",
+ "new_moon_face": "๐",
+ "first_quarter_moon_with_face": "๐",
+ "last_quarter_moon_with_face": "๐",
+ "thermometer": "๐ก",
+ "sun": "โ",
+ "full_moon_with_face": "๐",
+ "sun_with_face": "๐",
+ "white_medium_star": "โญ",
+ "glowing_star": "๐",
+ "shooting_star": "๐ ",
+ "cloud": "โ",
+ "sun_behind_cloud": "โ
",
+ "cloud_with_lightning_and_rain": "โ",
+ "sun_behind_small_cloud": "๐ค",
+ "sun_behind_large_cloud": "๐ฅ",
+ "sun_behind_rain_cloud": "๐ฆ",
+ "cloud_with_rain": "๐ง",
+ "cloud_with_snow": "๐จ",
+ "cloud_with_lightning": "๐ฉ",
+ "tornado": "๐ช",
+ "fog": "๐ซ",
+ "wind_face": "๐ฌ",
+ "cyclone": "๐",
+ "rainbow": "๐",
+ "closed_umbrella": "๐",
+ "umbrella": "โ",
+ "umbrella_with_rain_drops": "โ",
+ "umbrella_on_ground": "โฑ",
+ "high_voltage": "โก",
+ "snowflake": "โ",
+ "snowman": "โ",
+ "snowman_without_snow": "โ",
+ "comet": "โ",
+ "fire": "๐ฅ",
+ "droplet": "๐ง",
+ "water_wave": "๐",
+ "jack-o-lantern": "๐",
+ "christmas_tree": "๐",
+ "fireworks": "๐",
+ "sparkler": "๐",
+ "sparkles": "โจ",
+ "balloon": "๐",
+ "party_popper": "๐",
+ "confetti_ball": "๐",
+ "tanabata_tree": "๐",
+ "crossed_flags": "๐",
+ "pine_decoration": "๐",
+ "japanese_dolls": "๐",
+ "carp_streamer": "๐",
+ "wind_chime": "๐",
+ "moon_viewing_ceremony": "๐",
+ "ribbon": "๐",
+ "wrapped_gift": "๐",
+ "military_medal": "๐",
+ "reminder_ribbon": "๐",
+ "film_frames": "๐",
+ "admission_tickets": "๐",
+ "ticket": "๐ซ",
+ "label": "๐ท",
+ "soccer_ball": "โฝ",
+ "baseball": "โพ",
+ "basketball": "๐",
+ "american_football": "๐",
+ "rugby_football": "๐",
+ "tennis": "๐พ",
+ "pool_8_ball": "๐ฑ",
+ "bowling": "๐ณ",
+ "flag_in_hole": "โณ",
+ "person_golfing": "๐",
+ "woman_golfing": "๐โโ",
+ "man_golfing": "๐โโ",
+ "ice_skate": "โธ",
+ "fishing_pole": "๐ฃ",
+ "running_shirt": "๐ฝ",
+ "skis": "๐ฟ",
+ "skier": "โท",
+ "snowboarder": "๐",
+ "person_surfing": "๐",
+ "woman_surfing": "๐โโ",
+ "man_surfing": "๐โโ",
+ "horse_racing": "๐",
+ "person_swimming": "๐",
+ "woman_swimming": "๐โโ",
+ "man_swimming": "๐โโ",
+ "person_bouncing_ball": "โน",
+ "woman_bouncing_ball": "โนโโ",
+ "man_bouncing_ball": "โนโโ",
+ "person_lifting_weights": "๐",
+ "woman_lifting_weights": "๐โโ",
+ "man_lifting_weights": "๐โโ",
+ "person_biking": "๐ด",
+ "woman_biking": "๐ดโโ",
+ "man_biking": "๐ดโโ",
+ "person_mountain_biking": "๐ต",
+ "woman_mountain_biking": "๐ตโโ",
+ "man_mountain_biking": "๐ตโโ",
+ "racing_car": "๐",
+ "motorcycle": "๐",
+ "sports_medal": "๐
",
+ "trophy": "๐",
+ "cricket": "๐",
+ "volleyball": "๐",
+ "field_hockey": "๐",
+ "ice_hockey": "๐",
+ "ping_pong": "๐",
+ "badminton": "๐ธ",
+ "direct_hit": "๐ฏ",
+ "video_game": "๐ฎ",
+ "joystick": "๐น",
+ "game_die": "๐ฒ",
+ "spade_suit": "โ ",
+ "heart_suit": "โฅ",
+ "diamond_suit": "โฆ",
+ "club_suit": "โฃ",
+ "joker": "๐",
+ "mahjong_red_dragon": "๐",
+ "flower_playing_cards": "๐ด",
+ "muted_speaker": "๐",
+ "speaker_low_volume": "๐",
+ "speaker_medium_volume": "๐",
+ "speaker_high_volume": "๐",
+ "loudspeaker": "๐ข",
+ "megaphone": "๐ฃ",
+ "postal_horn": "๐ฏ",
+ "bell": "๐",
+ "bell_with_slash": "๐",
+ "musical_score": "๐ผ",
+ "musical_note": "๐ต",
+ "musical_notes": "๐ถ",
+ "studio_microphone": "๐",
+ "level_slider": "๐",
+ "control_knobs": "๐",
+ "microphone": "๐ค",
+ "headphone": "๐ง",
+ "saxophone": "๐ท",
+ "guitar": "๐ธ",
+ "musical_keyboard": "๐น",
+ "trumpet": "๐บ",
+ "violin": "๐ป",
+ "radio": "๐ป",
+ "mobile_phone": "๐ฑ",
+ "mobile_phone_with_arrow": "๐ฒ",
+ "telephone": "โ",
+ "telephone_receiver": "๐",
+ "pager": "๐",
+ "fax_machine": "๐ ",
+ "battery": "๐",
+ "electric_plug": "๐",
+ "laptop_computer": "๐ป",
+ "desktop_computer": "๐ฅ",
+ "printer": "๐จ",
+ "keyboard": "โจ",
+ "computer_mouse": "๐ฑ",
+ "trackball": "๐ฒ",
+ "computer_disk": "๐ฝ",
+ "floppy_disk": "๐พ",
+ "optical_disk": "๐ฟ",
+ "dvd": "๐",
+ "movie_camera": "๐ฅ",
+ "clapper_board": "๐ฌ",
+ "film_projector": "๐ฝ",
+ "television": "๐บ",
+ "camera": "๐ท",
+ "camera_with_flash": "๐ธ",
+ "video_camera": "๐น",
+ "videocassette": "๐ผ",
+ "left-pointing_magnifying_glass": "๐",
+ "right-pointing_magnifying_glass": "๐",
+ "microscope": "๐ฌ",
+ "telescope": "๐ญ",
+ "satellite_antenna": "๐ก",
+ "candle": "๐ฏ",
+ "light_bulb": "๐ก",
+ "flashlight": "๐ฆ",
+ "red_paper_lantern": "๐ฎ",
+ "notebook_with_decorative_cover": "๐",
+ "closed_book": "๐",
+ "open_book": "๐",
+ "green_book": "๐",
+ "blue_book": "๐",
+ "orange_book": "๐",
+ "books": "๐",
+ "notebook": "๐",
+ "ledger": "๐",
+ "page_with_curl": "๐",
+ "scroll": "๐",
+ "page_facing_up": "๐",
+ "newspaper": "๐ฐ",
+ "rolled-up_newspaper": "๐",
+ "bookmark_tabs": "๐",
+ "bookmark": "๐",
+ "money_bag": "๐ฐ",
+ "yen_banknote": "๐ด",
+ "dollar_banknote": "๐ต",
+ "euro_banknote": "๐ถ",
+ "pound_banknote": "๐ท",
+ "money_with_wings": "๐ธ",
+ "credit_card": "๐ณ",
+ "chart_increasing_with_yen": "๐น",
+ "envelope": "โ",
+ "e-mail": "๐ง",
+ "incoming_envelope": "๐จ",
+ "envelope_with_arrow": "๐ฉ",
+ "outbox_tray": "๐ค",
+ "inbox_tray": "๐ฅ",
+ "package": "๐ฆ",
+ "closed_mailbox_with_raised_flag": "๐ซ",
+ "closed_mailbox_with_lowered_flag": "๐ช",
+ "open_mailbox_with_raised_flag": "๐ฌ",
+ "open_mailbox_with_lowered_flag": "๐ญ",
+ "postbox": "๐ฎ",
+ "ballot_box_with_ballot": "๐ณ",
+ "pencil": "โ",
+ "black_nib": "โ",
+ "fountain_pen": "๐",
+ "pen": "๐",
+ "paintbrush": "๐",
+ "crayon": "๐",
+ "memo": "๐",
+ "briefcase": "๐ผ",
+ "file_folder": "๐",
+ "open_file_folder": "๐",
+ "card_index_dividers": "๐",
+ "calendar": "๐
",
+ "tear-off_calendar": "๐",
+ "spiral_notepad": "๐",
+ "spiral_calendar": "๐",
+ "card_index": "๐",
+ "chart_increasing": "๐",
+ "chart_decreasing": "๐",
+ "bar_chart": "๐",
+ "clipboard": "๐",
+ "pushpin": "๐",
+ "round_pushpin": "๐",
+ "paperclip": "๐",
+ "linked_paperclips": "๐",
+ "straight_ruler": "๐",
+ "triangular_ruler": "๐",
+ "scissors": "โ",
+ "card_file_box": "๐",
+ "file_cabinet": "๐",
+ "wastebasket": "๐",
+ "locked": "๐",
+ "unlocked": "๐",
+ "locked_with_pen": "๐",
+ "locked_with_key": "๐",
+ "key": "๐",
+ "old_key": "๐",
+ "hammer": "๐จ",
+ "pick": "โ",
+ "hammer_and_pick": "โ",
+ "hammer_and_wrench": "๐ ",
+ "wrench": "๐ง",
+ "nut_and_bolt": "๐ฉ",
+ "gear": "โ",
+ "clamp": "๐",
+ "alembic": "โ",
+ "balance_scale": "โ",
+ "link": "๐",
+ "chains": "โ",
+ "syringe": "๐",
+ "pill": "๐",
+ "dagger": "๐ก",
+ "kitchen_knife": "๐ช",
+ "crossed_swords": "โ",
+ "pistol": "๐ซ",
+ "shield": "๐ก",
+ "bow_and_arrow": "๐น",
+ "chequered_flag": "๐",
+ "white_flag": "๐ณ",
+ "rainbow_flag": "๐ณโ๐",
+ "black_flag": "๐ด",
+ "triangular_flag": "๐ฉ",
+ "cigarette": "๐ฌ",
+ "coffin": "โฐ",
+ "funeral_urn": "โฑ",
+ "moai": "๐ฟ",
+ "oil_drum": "๐ข",
+ "crystal_ball": "๐ฎ",
+ "atm_sign": "๐ง",
+ "litter_in_bin_sign": "๐ฎ",
+ "potable_water": "๐ฐ",
+ "wheelchair_symbol": "โฟ",
+ "mens_room": "๐น",
+ "womens_room": "๐บ",
+ "restroom": "๐ป",
+ "baby_symbol": "๐ผ",
+ "water_closet": "๐พ",
+ "passport_control": "๐",
+ "customs": "๐",
+ "baggage_claim": "๐",
+ "left_luggage": "๐
",
+ "warning": "โ ",
+ "children_crossing": "๐ธ",
+ "no_entry": "โ",
+ "prohibited": "๐ซ",
+ "no_bicycles": "๐ณ",
+ "no_smoking": "๐ญ",
+ "no_littering": "๐ฏ",
+ "non-potable_water": "๐ฑ",
+ "no_pedestrians": "๐ท",
+ "radioactive": "โข",
+ "biohazard": "โฃ",
+ "up_arrow": "โฌ",
+ "up-right_arrow": "โ",
+ "right_arrow": "โก",
+ "down-right_arrow": "โ",
+ "down_arrow": "โฌ",
+ "down-left_arrow": "โ",
+ "left_arrow": "โฌ
",
+ "up-left_arrow": "โ",
+ "up-down_arrow": "โ",
+ "left-right_arrow": "โ",
+ "right_arrow_curving_left": "โฉ",
+ "left_arrow_curving_right": "โช",
+ "right_arrow_curving_up": "โคด",
+ "right_arrow_curving_down": "โคต",
+ "clockwise_vertical_arrows": "๐",
+ "anticlockwise_arrows_button": "๐",
+ "back_arrow": "๐",
+ "end_arrow": "๐",
+ "on!_arrow": "๐",
+ "soon_arrow": "๐",
+ "top_arrow": "๐",
+ "place_of_worship": "๐",
+ "atom_symbol": "โ",
+ "om": "๐",
+ "star_of_david": "โก",
+ "wheel_of_dharma": "โธ",
+ "yin_yang": "โฏ",
+ "latin_cross": "โ",
+ "orthodox_cross": "โฆ",
+ "star_and_crescent": "โช",
+ "peace_symbol": "โฎ",
+ "menorah": "๐",
+ "dotted_six-pointed_star": "๐ฏ",
+ "recycling_symbol": "โป",
+ "name_badge": "๐",
+ "fleur-de-lis": "โ",
+ "japanese_symbol_for_beginner": "๐ฐ",
+ "trident_emblem": "๐ฑ",
+ "heavy_large_circle": "โญ",
+ "white_heavy_check_mark": "โ
",
+ "ballot_box_with_check": "โ",
+ "heavy_check_mark": "โ",
+ "heavy_multiplication_x": "โ",
+ "cross_mark": "โ",
+ "cross_mark_button": "โ",
+ "heavy_plus_sign": "โ",
+ "heavy_minus_sign": "โ",
+ "heavy_division_sign": "โ",
+ "curly_loop": "โฐ",
+ "double_curly_loop": "โฟ",
+ "part_alternation_mark": "ใฝ",
+ "eight-spoked_asterisk": "โณ",
+ "eight-pointed_star": "โด",
+ "sparkle": "โ",
+ "currency_exchange": "๐ฑ",
+ "heavy_dollar_sign": "๐ฒ",
+ "double_exclamation_mark": "โผ",
+ "exclamation_question_mark": "โ",
+ "question_mark": "โ",
+ "white_question_mark": "โ",
+ "white_exclamation_mark": "โ",
+ "exclamation_mark": "โ",
+ "wavy_dash": "ใฐ",
+ "copyright": "ยฉ",
+ "registered": "ยฎ",
+ "trade_mark": "โข",
+ "aries": "โ",
+ "taurus": "โ",
+ "gemini": "โ",
+ "cancer": "โ",
+ "leo": "โ",
+ "virgo": "โ",
+ "libra": "โ",
+ "scorpius": "โ",
+ "sagittarius": "โ",
+ "capricorn": "โ",
+ "aquarius": "โ",
+ "pisces": "โ",
+ "ophiuchus": "โ",
+ "shuffle_tracks_button": "๐",
+ "repeat_button": "๐",
+ "repeat_single_button": "๐",
+ "play_button": "โถ",
+ "fast-forward_button": "โฉ",
+ "next_track_button": "โญ",
+ "play_or_pause_button": "โฏ",
+ "reverse_button": "โ",
+ "fast_reverse_button": "โช",
+ "last_track_button": "โฎ",
+ "up_button": "๐ผ",
+ "fast_up_button": "โซ",
+ "down_button": "๐ฝ",
+ "fast_down_button": "โฌ",
+ "pause_button": "โธ",
+ "stop_button": "โน",
+ "record_button": "โบ",
+ "eject_button": "โ",
+ "cinema": "๐ฆ",
+ "dim_button": "๐
",
+ "bright_button": "๐",
+ "antenna_bars": "๐ถ",
+ "no_mobile_phones": "๐ต",
+ "vibration_mode": "๐ณ",
+ "mobile_phone_off": "๐ด",
+ "keycap_10": "๐",
+ "hundred_points": "๐ฏ",
+ "no_one_under_eighteen": "๐",
+ "input_latin_uppercase": "๐ ",
+ "input_latin_lowercase": "๐ก",
+ "input_numbers": "๐ข",
+ "input_symbols": "๐ฃ",
+ "input_latin_letters": "๐ค",
+ "a_button_(blood_type)": "๐
ฐ",
+ "ab_button_(blood_type)": "๐",
+ "b_button_(blood_type)": "๐
ฑ",
+ "cl_button": "๐",
+ "cool_button": "๐",
+ "free_button": "๐",
+ "information": "โน",
+ "id_button": "๐",
+ "circled_m": "โ",
+ "new_button": "๐",
+ "ng_button": "๐",
+ "o_button_(blood_type)": "๐
พ",
+ "ok_button": "๐",
+ "p_button": "๐
ฟ",
+ "sos_button": "๐",
+ "up!_button": "๐",
+ "vs_button": "๐",
+ "japanese_here_button": "๐",
+ "japanese_service_charge_button": "๐",
+ "japanese_monthly_amount_button": "๐ท",
+ "japanese_not_free_of_charge_button": "๐ถ",
+ "japanese_reserved_button": "๐ฏ",
+ "japanese_bargain_button": "๐",
+ "japanese_discount_button": "๐น",
+ "japanese_free_of_charge_button": "๐",
+ "japanese_prohibited_button": "๐ฒ",
+ "japanese_acceptable_button": "๐",
+ "japanese_application_button": "๐ธ",
+ "japanese_passing_grade_button": "๐ด",
+ "japanese_vacancy_button": "๐ณ",
+ "japanese_congratulations_button": "ใ",
+ "japanese_secret_button": "ใ",
+ "japanese_open_for_business_button": "๐บ",
+ "japanese_no_vacancy_button": "๐ต",
+ "black_small_square": "โช",
+ "white_small_square": "โซ",
+ "white_medium_square": "โป",
+ "black_medium_square": "โผ",
+ "white_medium-small_square": "โฝ",
+ "black_medium-small_square": "โพ",
+ "black_large_square": "โฌ",
+ "white_large_square": "โฌ",
+ "large_orange_diamond": "๐ถ",
+ "large_blue_diamond": "๐ท",
+ "small_orange_diamond": "๐ธ",
+ "small_blue_diamond": "๐น",
+ "red_triangle_pointed_up": "๐บ",
+ "red_triangle_pointed_down": "๐ป",
+ "diamond_with_a_dot": "๐ ",
+ "radio_button": "๐",
+ "black_square_button": "๐ฒ",
+ "white_square_button": "๐ณ",
+ "white_circle": "โช",
+ "black_circle": "โซ",
+ "red_circle": "๐ด",
+ "blue_circle": "๐ต",
+ "stop_sign": "๐",
+ "shopping_cart": "๐",
+ "kick_scooter": "๐ด",
+ "motor_scooter": "๐ต",
+ "canoe": "๐ถ"
+};
\ No newline at end of file
diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm
index d89b600a052..7a440f8ef4d 100644
--- a/goon/code/datums/browserOutput.dm
+++ b/goon/code/datums/browserOutput.dm
@@ -8,7 +8,8 @@ var/list/chatResources = list(
"goon/browserassets/css/fonts/fontawesome-webfont.ttf",
"goon/browserassets/css/fonts/fontawesome-webfont.woff",
"goon/browserassets/css/font-awesome.css",
- "goon/browserassets/css/browserOutput.css"
+ "goon/browserassets/css/browserOutput.css",
+ "goon/browserassets/json/unicode_9_annotations.json"
)
/var/savefile/iconCache = new /savefile("data/iconCache.sav")
@@ -210,8 +211,8 @@ var/list/chatResources = list(
var/to_chat_filename
var/to_chat_line
var/to_chat_src
-// Call using macro: to_chat(target, message)
-/proc/__to_chat(target, message)
+// Call using macro: to_chat(target, message, flag)
+/proc/__to_chat(target, message, flag)
if(!is_valid_tochat_message(message) || !is_valid_tochat_target(target))
target << message
@@ -262,5 +263,9 @@ var/to_chat_src
C.chatOutput.messageQueue.Add(message)
return
+ // url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the javascript.
+ var/output_message = "[url_encode(url_encode(message))]"
+ if(flag)
+ output_message += "&[url_encode(flag)]"
- target << output(url_encode(message), "browseroutput:output")
+ target << output(output_message, "browseroutput:output")