Skip to content
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

Emoji encoding 3123 #3161

Merged
merged 13 commits into from
Aug 7, 2018
Merged

Conversation

cheneyshreve01
Copy link
Collaborator

@cheneyshreve01 cheneyshreve01 commented Jul 26, 2018

[WIP] Please do not merge yet.

HI @jywarren, to follow up on the atwho edits what I've done so far in this PR:

  • move the atwho code out of comments form and into /app/assets/javascripts/emoji.js
  • required emoji.js in /app/assets/javascripts/application.js
  • added emoji.js to config/initializers/assets.rb
  • imported emoji.js as a script into
  • /comments/_form.html.erb
  • /editor/rich.html.erb
    This has the expected behavior, e.g. makes atwho autocompletes available.

A couple questions I'm still working on:

  • had trouble reading emoji file into /assets/javascripts. Right now, var emoji is defined within that file, which works fine, but I was trying to refactor it to get it to read in within the remoteFilter, but no success yet.
  • I haven't been able to get the atwho functionality to work yet when toggling to the Markdown editor, e.g. if I got to localhosts/post and am in Rich text editor, works fine, but not sure where I need to edit codebase to get this to work for Markdown? What specific file(s) do I need to look at?

Thanks for your feedback and the opportunity to keep working on this!

@plotsbot
Copy link
Collaborator

plotsbot commented Jul 26, 2018

1 Warning
⚠️ It looks like you merged from master in this pull request. Please rebase to get rid of the merge commits – you may want to rewind the master branch and rebase instead of merging in from master, which can cause problems when accepting new code!
1 Message
📖 @cheneyshreve Thank you for your pull request! I’m here to help with some tips and recommendations. Please take a look at the list provided and help us review and accept your contribution! And don’t be discouraged if you see errors – we’re here to help.

Generated by 🚫 Danger

@jywarren
Copy link
Member

Restarting this build -- if it gets stuck with the same error, you can close and reopen to try to restart it - we're trying to figure out that bug but it's unrelated to your work, sorry!

The unrelated bug looks like: There was an error with Danger bot’s Junit parsing: undefined method 'value' for nil:NilClass

@jywarren
Copy link
Member

to read in within the remoteFilter, but no success yet. -- can you say more about this?

Maybe we should do the rich editor in a separate PR - and even on the PublicLab.Editor repository, so it's available "upstream"? Or we can implement it here first and then port it over once it's working.

But I think that we may need to trigger something at the moment the editor mode changes from markdown to rich text... so that may mean we need to do it inside the editor codebase, where we have access to those events. Make sense? If this is the case, we can put off that part of the integration until the code separation one is complete. How does that sound?

Great progress here!

@cheneyshreve01
Copy link
Collaborator Author

Hi @jywarren , regarding more details about remoteFilter, what I meant was trying to refactor atwho emoji config using remoteFilter versus using the data keyword within the atwho config (something like below). Ultimately, I don't think it will let us divide tasks up that way; I think if you use the remote filter, you can't also use the displayTpl. Or perhaps I'm making an error in the callback. I can also ask atwho moderators to clarify regarding using remoteFilter with displayTpl.

  emojis_config = {
    at: ':',
    callbacks: {
    #but this doesn't work as hoped...had also tried /public/lib/emoji.js and different variations of the callback
      remoteFilter: function(query, callback) {
        $.getJSON('/lib/emoji.js', function(emoji) {
           callback(Object.keys(emoji).map(function(name){ return {'name': name, 'value': emoji[name]}}));
         });
      }
    },
    displayTpl: "<li>${value} ${name}</li>",
    insertTpl: ":${name}:",
    limit: 100
 }

Since these emojis are "static" in that they don't get updated very frequently, perhaps it's OK to just define them as var emojis (current code) and not worry about reading them in through remoteFilter from /public/lib directory?

If so, I could:

  • delete the emoji.json from /public/lib
  • remove current script from rich.html.erb, since it only works on the rich text editor at this point and not the markdown,
  • Resubmit this PR.

We'd have this PR being just moving the atwho calls out of comments/_form.html.erb into a script and adding that script to comments/_form.html.erb. Then open a new issue for figuring out the issue regarding switching between rich/markdown in the editor. I think you are right that it might have to be done in the PublicLab.Editor, and I'd love to get some experience with that too. I'm happy to keep trying things out to see if it can be done without going into PublicLab.editor too, so just let me know what you prefer. Thanks again!

@jywarren
Copy link
Member

Since these emojis are "static" in that they don't get updated very frequently, perhaps it's OK to just define them as var emojis (current code) and not worry about reading them in through remoteFilter from /public/lib directory?

Actually, what I ended up doing was similar to what you propose -- see, I included emoji.js as a local variable here:

https://github.com/publiclab/plots2/blob/master/app/views/comments/_form.html.erb#L67

And so they're in /public/lib/emoji.js -- the hope was to get those to cache in the browser, and skip remoteFilter. So I think we're OK on that count.

I think we're OK to:

remove current script from rich.html.erb

But yes, as you say, if you want to copy that code over to https://github.com/publiclab/PublicLab.Editor/, I can help you step-by-step integrate it over there, so we can work on that two-mode system. I think you could start by integrating it into the example file at https://github.com/publiclab/PublicLab.Editor/blob/master/examples/index.html, or copy that and make one called autocompletion.html (to keep the default example simple). What do you think?

We'd have this PR being just moving the atwho calls out of comments/_form.html.erb into a script and adding that script to comments/_form.html.erb.

Perfect! One function per PR is easier and better, anyways.

Awesome!

@cheneyshreve01
Copy link
Collaborator Author

cheneyshreve01 commented Jul 30, 2018

Hi @jywarren, awesome, I just removed the script from rich text editor and emoji file from public and I'll push up those changes. I assume the new issue should be opened in PublicLab.Editor? I'll go ahead and download that repo and start look at the file you mention above. Thanks! very excited to work on this!

(hopefully quick) question about installing PublicLab.Editor:

  • I forked the repo
  • git cloned (repo)
  • cd (repo)
  • set upstream remote
  • double checked my versions for node/npm (node v10.1.0, npm 6.2.0)

When I ran npm install, I got some errors which I was able to resolve, but only by deleting the package-lock.json file:
WARN tarball tarball data for moment@2.19.3 (sha1-h5aOX5WsA4wuQqyVnHWBnNP1KQE=) seems to be corrupted. Trying one more time.
WARN tarball tarball data for moment@2.19.3 (sha1-h5aOX5WsA4wuQqyVnHWBnNP1KQE=) seems to be corrupted. Trying one more time.
WARN tar ENOENT: no such file or directory, open '/Users/cheneyshreve/PublicLab.Editor/node_modules/.staging/argparse-8b8e8f17/package.json'
WARN tar ENOENT: no such file or directory, open '/Users/cheneyshreve/PublicLab.Editor/node_modules/.staging/argparse-8b8e8f17/README.md'
WARN tar ENOENT: no such file or directory, open '/Users/cheneyshreve/PublicLab.Editor/node_modules/.staging/argparse-8b8e8f17/LICENSE'
WARN tar ENOENT: no such file or directory, open '/Users/cheneyshreve/PublicLab.Editor/node_modules/.staging/argparse-8b8e8f17/index.js'
WARN tar ENOENT: no such file or directory, open '/Users/cheneyshreve/PublicLab.Editor/node_modules/.staging/argparse-8b8e8f17/HISTORY.md'
WARN tar ENOENT: no such file or directory, open '/Users/cheneyshreve/PublicLab.Editor/node_modules/.staging/ajv-897d7561/package.json'
WARN tar ENOENT: no such file or directory, open '/Users/cheneyshreve/PublicLab.Editor/node_modules/.staging/ajv-897d7561/README.md'
npm ERR! code EINTEGRITY
npm ERR! Verification failed while extracting moment@2.19.3:
npm ERR! Verification failed while extracting moment@2.19.3:
npm ERR! sha1-h5aOX5WsA4wuQqyVnHWBnNP1KQE= integrity checksum failed when using sha1: wanted sha1-h5aOX5WsA4wuQqyVnHWBnNP1KQE= but got sha512-SiZ1HUDMfBpfCzL1Hm1vxUFkYDbHx8/RiWBLF+5qoVWTlBGtR15+wVQB7eSD/0w3ueDxzojlX9LQtiKVpLMsFQ== sha1-vbmdJw1tf9p4zA+6zoVeJ/59pp8=. (561157 bytes)

I researched the "integrity checksum" error and results recommended to clear the npm cache and try again, which I did (using npm cache verify, then npm cache clean -f to be doubly sure...). Still same errors.

removing package-lock.json fixes the errors, but I don't want any unwanted changes to get mixed up in the git workflow. Is it ok to just add package-lock.json to my .gitignore or is there a better way to proceed? I haven't made any commits yet in the repo. Thanks for your help.

@jywarren
Copy link
Member

jywarren commented Aug 1, 2018

Re package-lock - that's very helpful. Can you open an issue on that repository? Thanks!

Also, restarting tests here, but is this otherwise good to go? Thanks!

@cheneyshreve01
Copy link
Collaborator Author

Thanks @jywarren, I will open issue on PublicLab.Editor regarding package-lock issue.

Copy link
Member

@jywarren jywarren left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK this is a great start! I made a recommendation about the emoji.js file and one other comment. Happy to look over this again when you're ready!

@@ -0,0 +1,11 @@
development:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, this is looking great, but would you mind removing the this file from your PR, as it's unrelated to your changes?

https://stackoverflow.com/questions/215718/reset-or-revert-a-specific-file-to-a-specific-revision-using-git

Thanks!

@@ -58,3 +58,4 @@
//= require noty_notification.js
//= require jquery-confirm/js/jquery-confirm.js
//= require jquery.atwho
//= require emoji.js
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I'd prefer not to include the entire emoji.js file here, and to leave it in the /lib/ folder. These files are compiled together, and I think we can treat the emoji file as a static asset, so the system doesn't have to process it (since it's so big!). But we should include comment-autocomplete.js here -- i actually don't see that one in the PR, did you forget to add it?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @jywarren I think that I did a poor job naming the emoji script, in that it is named the same as the file that held the emoji json. In this version of the code, emoji.js is the script living in app/assets/javascripts/emoji.js that includes within it the defined emojis (not being read from public, just defined in a var), and deleted the file from public/lib/emoji.js since it would not be needed. I can remove the require statement from application.js.

I'm not sure about the comment-autocomplete.js? I had not done anything with that, when I add it in to application.js I get the error couldn't find file 'comment-autocomplete.js' with type 'application/javascript' so perhaps I need to fetch more recent changes and do a rebase? I believe I have the config/database.yml.sqlite removed properly now so once I clear up the details above, I'll resubmit.

Thanks again for all of your help! And the callout in the community checkin, it is really wonderful to have the opportunity to work with you on this :)

@jywarren
Copy link
Member

jywarren commented Aug 3, 2018 via email

…i from /lib/emoji.js, modified comments form and assets to reflect these changes, removed reference to comment-autocomplete
@cheneyshreve01
Copy link
Collaborator Author

cheneyshreve01 commented Aug 3, 2018

Hi @jywarren, I'm pushing up revisions per comments above. I renamed emoji script to be atwho_autocomplete.js so that is more clear, added emoji (var) back to lib (and out of atwho_autocomplete), adjusted comments form to read in /lib/emoji and the atwho_autocomplete script, removed reference to comment-autocomplete in assets file. Hoping the git workflow is correct; combined 2 commits together because I'd forgotten to remove reference to comment-autocomplete initially. I did not merge the other commit that was for reverting an older commit to get rid of that config/database.yml.sqlite file because that references on that one commit and not later commits, if that makes sense. Thanks, and let me know if you need further edits-- -just saw a couple code climate recs, will fix those this afternoon.

}

$('textarea#text-input').atwho(at_config).atwho(hashtags_config).atwho(emojis_config);

$('#comment-form').bind('ajax:success', function(e, data, status, xhr){
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you confirm that the error message here still works without the (function() { around it? Maybe best to add that back in, as it helps the whole thing run /after/ page load is complete?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think adding it back in may be easier than testing it... i know you can get it to error either by turning off your locally running app OR by submitting a real unicode emoji (not just a :smiley:) -- since we're trying to fix that! But... could be a bit tricky to test.

Copy link
Collaborator Author

@cheneyshreve01 cheneyshreve01 Aug 4, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @jywarren, I moved the code for error message back into the function athwho_autocomplete script! Quick question --- so the public folder is in .gitignore-- how do we then make sure we're including /lib/emoji.js? I just realized it wasn't getting included when I made that code change above then freaked out momentarily because "emoji " wasn't defined then realized it was because the file is in .gitignore so I had to go add it in again. Thanks again for all of your help!

I'll go ahead and push up changes--we just need to make sure that /lib/emoji.js gets included and it's currently in .gitignore.

@jywarren
Copy link
Member

jywarren commented Aug 4, 2018

Awesome, this is super. Just that one note about comment erroring and we should be good to go!

@jywarren
Copy link
Member

jywarren commented Aug 6, 2018

Ah, oops, sorry, my bad. I actually think we should keep the (function() { ... })() in the form.html.erb template with the error code inside it -- it was just that I worried that taking out the (function() { .. })() from around it would cause it to fail.

Basically what the function code does is it creates a "singleton" or one-off anonymous function around code, then wraps it in a () and then by adding a () at the end, runs the newly created anonymous function. But, by having done all this, it essentially delays the running of the code until everything else on the page is done. Does that make sense? It's a little obscure, but I think putting the error code back on _form.html.erb and within an anonymous function like that should get us there.

@cheneyshreve01
Copy link
Collaborator Author

Thanks, @jywarren I was not aware of that but it is cool! Made changes and pushing them up now.

@@ -1 +0,0 @@
var emoji = {"+1":"👍","-1":"👎","smiley":"😃","laughing":"😆","confused":"😕","heart":"❤️","tada":"🎉","clap":"👏","sweat_smile":"😅","joy":"😂","rofl":"🤣","relaxed":"☺️","blush":"😊","innocent":"😇","slightly_smiling_face":"🙂","upside_down_face":"🙃","wink":"😉","relieved":"😌","heart_eyes":"😍","kissing_heart":"😘","kissing":"😗","kissing_smiling_eyes":"😙","kissing_closed_eyes":"😚","yum":"😋","stuck_out_tongue_winking_eye":"😜","stuck_out_tongue_closed_eyes":"😝","stuck_out_tongue":"😛","money_mouth_face":"🤑","hugs":"🤗","nerd_face":"🤓","sunglasses":"😎","clown_face":"🤡","cowboy_hat_face":"🤠","smirk":"😏","unamused":"😒","disappointed":"😞","pensive":"😔","worried":"😟","confused":"😕","slightly_frowning_face":"🙁","frowning_face":"☹️","persevere":"😣","confounded":"😖","tired_face":"😫","weary":"😩","triumph":"😤","angry":"😠","rage":"😡","no_mouth":"😶","neutral_face":"😐","expressionless":"😑","hushed":"😯","frowning":"😦","anguished":"😧","open_mouth":"😮","astonished":"😲","dizzy_face":"😵","flushed":"😳","scream":"😱","fearful":"😨","cold_sweat":"😰","cry":"😢","disappointed_relieved":"😥","drooling_face":"🤤","sob":"😭","sweat":"😓","sleepy":"😪","sleeping":"😴","roll_eyes":"🙄","thinking":"🤔","lying_face":"🤥","grimacing":"😬","zipper_mouth_face":"🤐","nauseated_face":"🤢","sneezing_face":"🤧","mask":"😷","face_with_thermometer":"🤒","face_with_head_bandage":"🤕","smiling_imp":"😈","imp":"👿","japanese_ogre":"👹","japanese_goblin":"👺","hankey":"💩","ghost":"👻","skull":"💀","skull_and_crossbones":"☠️","alien":"👽","space_invader":"👾","robot":"🤖","jack_o_lantern":"🎃","smiley_cat":"😺","smile_cat":"😸","joy_cat":"😹","heart_eyes_cat":"😻","smirk_cat":"😼","kissing_cat":"😽","scream_cat":"🙀","crying_cat_face":"😿","pouting_cat":"😾","open_hands":"👐","raised_hands":"🙌","pray":"🙏","handshake":"🤝","fist_oncoming":"👊","fist_raised":"✊","fist_left":"🤛","fist_right":"🤜","crossed_fingers":"🤞","v":"✌️","metal":"🤘","ok_hand":"👌","point_left":"👈","point_right":"👉","point_up_2":"👆","point_down":"👇","point_up":"☝️","hand":"✋","raised_back_of_hand":"🤚","raised_hand_with_fingers_splayed":"🖐","vulcan_salute":"🖖","wave":"👋","call_me_hand":"🤙","muscle":"💪","middle_finger":"🖕","writing_hand":"✍️","selfie":"🤳","nail_care":"💅","ring":"💍","lipstick":"💄","kiss":"💋","lips":"👄","tongue":"👅","ear":"👂","nose":"👃","footprints":"👣","eye":"👁","eyes":"👀","speaking_head":"🗣","bust_in_silhouette":"👤","busts_in_silhouette":"👥","baby":"👶","boy":"👦","girl":"👧","man":"👨","woman":"👩","blonde_woman":"👱‍♀️","blonde_man":"👱","older_man":"👴","older_woman":"👵","man_with_gua_pi_mao":"👲","woman_with_turban":"👳‍♀️","man_with_turban":"👳","policewoman":"👮‍♀️","policeman":"👮","construction_worker_woman":"👷‍♀️","construction_worker_man":"👷","guardswoman":"💂‍♀️","guardsman":"💂","female_detective":"🕵️‍♀️","male_detective":"🕵️","woman_health_worker":"👩‍⚕️","man_health_worker":"👨‍⚕️","woman_farmer":"👩‍🌾","man_farmer":"👨‍🌾","woman_cook":"👩‍🍳","man_cook":"👨‍🍳","woman_student":"👩‍🎓","man_student":"👨‍🎓","woman_singer":"👩‍🎤","man_singer":"👨‍🎤","woman_teacher":"👩‍🏫","man_teacher":"👨‍🏫","woman_factory_worker":"👩‍🏭","man_factory_worker":"👨‍🏭","woman_technologist":"👩‍💻","man_technologist":"👨‍💻","woman_office_worker":"👩‍💼","man_office_worker":"👨‍💼","woman_mechanic":"👩‍🔧","man_mechanic":"👨‍🔧","woman_scientist":"👩‍🔬","man_scientist":"👨‍🔬","woman_artist":"👩‍🎨","man_artist":"👨‍🎨","woman_firefighter":"👩‍🚒","man_firefighter":"👨‍🚒","woman_pilot":"👩‍✈️","man_pilot":"👨‍✈️","woman_astronaut":"👩‍🚀","man_astronaut":"👨‍🚀","woman_judge":"👩‍⚖️","man_judge":"👨‍⚖️","mrs_claus":"🤶","santa":"🎅","princess":"👸","prince":"🤴","bride_with_veil":"👰","man_in_tuxedo":"🤵","angel":"👼","pregnant_woman":"🤰","bowing_woman":"🙇‍♀️","bowing_man":"🙇","tipping_hand_woman":"💁","tipping_hand_man":"💁‍♂️","no_good_woman":"🙅","no_good_man":"🙅‍♂️","ok_woman":"🙆","ok_man":"🙆‍♂️","raising_hand_woman":"🙋","raising_hand_man":"🙋‍♂️","woman_facepalming":"🤦‍♀️","man_facepalming":"🤦‍♂️","woman_shrugging":"🤷‍♀️","man_shrugging":"🤷‍♂️","pouting_woman":"🙎","pouting_man":"🙎‍♂️","frowning_woman":"🙍","frowning_man":"🙍‍♂️","haircut_woman":"💇","haircut_man":"💇‍♂️","massage_woman":"💆","massage_man":"💆‍♂️","business_suit_levitating":"🕴","dancer":"💃","man_dancing":"🕺","dancing_women":"👯","dancing_men":"👯‍♂️","walking_woman":"🚶‍♀️","walking_man":"🚶","running_woman":"🏃‍♀️","running_man":"🏃","couple":"👫","two_women_holding_hands":"👭","two_men_holding_hands":"👬","couple_with_heart_woman_man":"💑","couple_with_heart_woman_woman":"👩‍❤️‍👩","couple_with_heart_man_man":"👨‍❤️‍👨","couplekiss_man_woman":"💏","couplekiss_woman_woman":"👩‍❤️‍💋‍👩","couplekiss_man_man":"👨‍❤️‍💋‍👨","family_man_woman_boy":"👪","family_man_woman_girl":"👨‍👩‍👧","family_man_woman_girl_boy":"👨‍👩‍👧‍👦","family_man_woman_boy_boy":"👨‍👩‍👦‍👦","family_man_woman_girl_girl":"👨‍👩‍👧‍👧","family_woman_woman_boy":"👩‍👩‍👦","family_woman_woman_girl":"👩‍👩‍👧","family_woman_woman_girl_boy":"👩‍👩‍👧‍👦","family_woman_woman_boy_boy":"👩‍👩‍👦‍👦","family_woman_woman_girl_girl":"👩‍👩‍👧‍👧","family_man_man_boy":"👨‍👨‍👦","family_man_man_girl":"👨‍👨‍👧","family_man_man_girl_boy":"👨‍👨‍👧‍👦","family_man_man_boy_boy":"👨‍👨‍👦‍👦","family_man_man_girl_girl":"👨‍👨‍👧‍👧","family_woman_boy":"👩‍👦","family_woman_girl":"👩‍👧","family_woman_girl_boy":"👩‍👧‍👦","family_woman_boy_boy":"👩‍👦‍👦","family_woman_girl_girl":"👩‍👧‍👧","family_man_boy":"👨‍👦","family_man_girl":"👨‍👧","family_man_girl_boy":"👨‍👧‍👦","family_man_boy_boy":"👨‍👦‍👦","family_man_girl_girl":"👨‍👧‍👧","womans_clothes":"👚","shirt":"👕","jeans":"👖","necktie":"👔","dress":"👗","bikini":"👙","kimono":"👘","high_heel":"👠","sandal":"👡","boot":"👢","mans_shoe":"👞","athletic_shoe":"👟","womans_hat":"👒","tophat":"🎩","mortar_board":"🎓","crown":"👑","rescue_worker_helmet":"⛑","school_satchel":"🎒","pouch":"👝","purse":"👛","handbag":"👜","briefcase":"💼","eyeglasses":"👓","dark_sunglasses":"🕶","closed_umbrella":"🌂","open_umbrella":"☂️","dog":"🐶","cat":"🐱","mouse":"🐭","hamster":"🐹","rabbit":"🐰","fox_face":"🦊","bear":"🐻","panda_face":"🐼","koala":"🐨","tiger":"🐯","lion":"🦁","cow":"🐮","pig":"🐷","pig_nose":"🐽","frog":"🐸","monkey_face":"🐵","see_no_evil":"🙈","hear_no_evil":"🙉","speak_no_evil":"🙊","monkey":"🐒","chicken":"🐔","penguin":"🐧","bird":"🐦","baby_chick":"🐤","hatching_chick":"🐣","hatched_chick":"🐥","duck":"🦆","eagle":"🦅","owl":"🦉","bat":"🦇","wolf":"🐺","boar":"🐗","horse":"🐴","unicorn":"🦄","bee":"🐝","bug":"🐛","butterfly":"🦋","snail":"🐌","shell":"🐚","beetle":"🐞","ant":"🐜","spider":"🕷","spider_web":"🕸","turtle":"🐢","snake":"🐍","lizard":"🦎","scorpion":"🦂","crab":"🦀","squid":"🦑","octopus":"🐙","shrimp":"🦐","tropical_fish":"🐠","fish":"🐟","blowfish":"🐡","dolphin":"🐬","shark":"🦈","whale":"🐳","whale2":"🐋","crocodile":"🐊","leopard":"🐆","tiger2":"🐅","water_buffalo":"🐃","ox":"🐂","cow2":"🐄","deer":"🦌","dromedary_camel":"🐪","camel":"🐫","elephant":"🐘","rhinoceros":"🦏","gorilla":"🦍","racehorse":"🐎","pig2":"🐖","goat":"🐐","ram":"🐏","sheep":"🐑","dog2":"🐕","poodle":"🐩","cat2":"🐈","rooster":"🐓","turkey":"🦃","dove":"🕊","rabbit2":"🐇","mouse2":"🐁","rat":"🐀","chipmunk":"🐿","feet":"🐾","dragon":"🐉","dragon_face":"🐲","cactus":"🌵","christmas_tree":"🎄","evergreen_tree":"🌲","deciduous_tree":"🌳","palm_tree":"🌴","seedling":"🌱","herb":"🌿","shamrock":"☘️","four_leaf_clover":"🍀","bamboo":"🎍","tanabata_tree":"🎋","leaves":"🍃","fallen_leaf":"🍂","maple_leaf":"🍁","mushroom":"🍄","ear_of_rice":"🌾","bouquet":"💐","tulip":"🌷","rose":"🌹","wilted_flower":"🥀","sunflower":"🌻","blossom":"🌼","cherry_blossom":"🌸","hibiscus":"🌺","earth_americas":"🌎","earth_africa":"🌍","earth_asia":"🌏","full_moon":"🌕","waning_gibbous_moon":"🌖","last_quarter_moon":"🌗","waning_crescent_moon":"🌘","new_moon":"🌑","waxing_crescent_moon":"🌒","first_quarter_moon":"🌓","moon":"🌔","new_moon_with_face":"🌚","full_moon_with_face":"🌝","sun_with_face":"🌞","first_quarter_moon_with_face":"🌛","last_quarter_moon_with_face":"🌜","crescent_moon":"🌙","dizzy":"💫","star":"⭐️","star2":"🌟","sparkles":"✨","zap":"⚡️","fire":"🔥","boom":"💥","comet":"☄️","sunny":"☀️","sun_behind_small_cloud":"🌤","partly_sunny":"⛅️","sun_behind_large_cloud":"🌥","sun_behind_rain_cloud":"🌦","rainbow":"🌈","cloud":"☁️","cloud_with_rain":"🌧","cloud_with_lightning_and_rain":"⛈","cloud_with_lightning":"🌩","cloud_with_snow":"🌨","snowman_with_snow":"☃️","snowman":"⛄️","snowflake":"❄️","wind_face":"🌬","dash":"💨","tornado":"🌪","fog":"🌫","ocean":"🌊","droplet":"💧","sweat_drops":"💦","umbrella":"☔️","green_apple":"🍏","apple":"🍎","pear":"🍐","tangerine":"🍊","lemon":"🍋","banana":"🍌","watermelon":"🍉","grapes":"🍇","strawberry":"🍓","melon":"🍈","cherries":"🍒","peach":"🍑","pineapple":"🍍","kiwi_fruit":"🥝","avocado":"🥑","tomato":"🍅","eggplant":"🍆","cucumber":"🥒","carrot":"🥕","corn":"🌽","hot_pepper":"🌶","potato":"🥔","sweet_potato":"🍠","chestnut":"🌰","peanuts":"🥜","honey_pot":"🍯","croissant":"🥐","bread":"🍞","baguette_bread":"🥖","cheese":"🧀","egg":"🥚","fried_egg":"🍳","bacon":"🥓","pancakes":"🥞","fried_shrimp":"🍤","poultry_leg":"🍗","meat_on_bone":"🍖","pizza":"🍕","hotdog":"🌭","hamburger":"🍔","fries":"🍟","stuffed_flatbread":"🥙","taco":"🌮","burrito":"🌯","green_salad":"🥗","shallow_pan_of_food":"🥘","spaghetti":"🍝","ramen":"🍜","stew":"🍲","fish_cake":"🍥","sushi":"🍣","bento":"🍱","curry":"🍛","rice":"🍚","rice_ball":"🍙","rice_cracker":"🍘","oden":"🍢","dango":"🍡","shaved_ice":"🍧","ice_cream":"🍨","icecream":"🍦","cake":"🍰","birthday":"🎂","custard":"🍮","lollipop":"🍭","candy":"🍬","chocolate_bar":"🍫","popcorn":"🍿","doughnut":"🍩","cookie":"🍪","milk_glass":"🥛","baby_bottle":"🍼","coffee":"☕️","tea":"🍵","sake":"🍶","beer":"🍺","beers":"🍻","clinking_glasses":"🥂","wine_glass":"🍷","tumbler_glass":"🥃","cocktail":"🍸","tropical_drink":"🍹","champagne":"🍾","spoon":"🥄","fork_and_knife":"🍴","plate_with_cutlery":"🍽","soccer":"⚽️","basketball":"🏀","football":"🏈","baseball":"⚾️","tennis":"🎾","volleyball":"🏐","rugby_football":"🏉","8ball":"🎱","ping_pong":"🏓","badminton":"🏸","goal_net":"🥅","ice_hockey":"🏒","field_hockey":"🏑","cricket":"🏏","golf":"⛳️","bow_and_arrow":"🏹","fishing_pole_and_fish":"🎣","boxing_glove":"🥊","martial_arts_uniform":"🥋","ice_skate":"⛸","ski":"🎿","skier":"⛷","snowboarder":"🏂","weight_lifting_woman":"🏋️‍♀️","weight_lifting_man":"🏋️","person_fencing":"🤺","women_wrestling":"🤼‍♀️","men_wrestling":"🤼‍♂️","woman_cartwheeling":"🤸‍♀️","man_cartwheeling":"🤸‍♂️","basketball_woman":"⛹️‍♀️","basketball_man":"⛹️","woman_playing_handball":"🤾‍♀️","man_playing_handball":"🤾‍♂️","golfing_woman":"🏌️‍♀️","golfing_man":"🏌️","surfing_woman":"🏄‍♀️","surfing_man":"🏄","swimming_woman":"🏊‍♀️","swimming_man":"🏊","woman_playing_water_polo":"🤽‍♀️","man_playing_water_polo":"🤽‍♂️","rowing_woman":"🚣‍♀️","rowing_man":"🚣","horse_racing":"🏇","biking_woman":"🚴‍♀️","biking_man":"🚴","mountain_biking_woman":"🚵‍♀️","mountain_biking_man":"🚵","running_shirt_with_sash":"🎽","medal_sports":"🏅","medal_military":"🎖","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","trophy":"🏆","rosette":"🏵","reminder_ribbon":"🎗","ticket":"🎫","tickets":"🎟","circus_tent":"🎪","woman_juggling":"🤹‍♀️","man_juggling":"🤹‍♂️","performing_arts":"🎭","art":"🎨","clapper":"🎬","microphone":"🎤","headphones":"🎧","musical_score":"🎼","musical_keyboard":"🎹","drum":"🥁","saxophone":"🎷","trumpet":"🎺","guitar":"🎸","violin":"🎻","game_die":"🎲","dart":"🎯","bowling":"🎳","video_game":"🎮","slot_machine":"🎰","car":"🚗","taxi":"🚕","blue_car":"🚙","bus":"🚌","trolleybus":"🚎","racing_car":"🏎","police_car":"🚓","ambulance":"🚑","fire_engine":"🚒","minibus":"🚐","truck":"🚚","articulated_lorry":"🚛","tractor":"🚜","kick_scooter":"🛴","bike":"🚲","motor_scooter":"🛵","motorcycle":"🏍","rotating_light":"🚨","oncoming_police_car":"🚔","oncoming_bus":"🚍","oncoming_automobile":"🚘","oncoming_taxi":"🚖","aerial_tramway":"🚡","mountain_cableway":"🚠","suspension_railway":"🚟","railway_car":"🚃","train":"🚋","mountain_railway":"🚞","monorail":"🚝","bullettrain_side":"🚄","bullettrain_front":"🚅","light_rail":"🚈","steam_locomotive":"🚂","train2":"🚆","metro":"🚇","tram":"🚊","station":"🚉","helicopter":"🚁","small_airplane":"🛩","airplane":"✈️","flight_departure":"🛫","flight_arrival":"🛬","rocket":"🚀","artificial_satellite":"🛰","seat":"💺","canoe":"🛶","boat":"⛵️","motor_boat":"🛥","speedboat":"🚤","passenger_ship":"🛳","ferry":"⛴","ship":"🚢","anchor":"⚓️","construction":"🚧","fuelpump":"⛽️","busstop":"🚏","vertical_traffic_light":"🚦","traffic_light":"🚥","world_map":"🗺","moyai":"🗿","statue_of_liberty":"🗽","fountain":"⛲️","tokyo_tower":"🗼","european_castle":"🏰","japanese_castle":"🏯","stadium":"🏟","ferris_wheel":"🎡","roller_coaster":"🎢","carousel_horse":"🎠","parasol_on_ground":"⛱","beach_umbrella":"🏖","desert_island":"🏝","mountain":"⛰","mountain_snow":"🏔","mount_fuji":"🗻","volcano":"🌋","desert":"🏜","camping":"🏕","tent":"⛺️","railway_track":"🛤","motorway":"🛣","building_construction":"🏗","factory":"🏭","house":"🏠","house_with_garden":"🏡","houses":"🏘","derelict_house":"🏚","office":"🏢","department_store":"🏬","post_office":"🏣","european_post_office":"🏤","hospital":"🏥","bank":"🏦","hotel":"🏨","convenience_store":"🏪","school":"🏫","love_hotel":"🏩","wedding":"💒","classical_building":"🏛","church":"⛪️","mosque":"🕌","synagogue":"🕍","kaaba":"🕋","shinto_shrine":"⛩","japan":"🗾","rice_scene":"🎑","national_park":"🏞","sunrise":"🌅","sunrise_over_mountains":"🌄","stars":"🌠","sparkler":"🎇","fireworks":"🎆","city_sunrise":"🌇","city_sunset":"🌆","cityscape":"🏙","night_with_stars":"🌃","milky_way":"🌌","bridge_at_night":"🌉","foggy":"🌁","watch":"⌚️","iphone":"📱","calling":"📲","computer":"💻","keyboard":"⌨️","desktop_computer":"🖥","printer":"🖨","computer_mouse":"🖱","trackball":"🖲","joystick":"🕹","clamp":"🗜","minidisc":"💽","floppy_disk":"💾","cd":"💿","dvd":"📀","vhs":"📼","camera":"📷","camera_flash":"📸","video_camera":"📹","movie_camera":"🎥","film_projector":"📽","film_strip":"🎞","telephone_receiver":"📞","phone":"☎️","pager":"📟","fax":"📠","tv":"📺","radio":"📻","studio_microphone":"🎙","level_slider":"🎚","control_knobs":"🎛","stopwatch":"⏱","timer_clock":"⏲","alarm_clock":"⏰","mantelpiece_clock":"🕰","hourglass":"⌛️","hourglass_flowing_sand":"⏳","satellite":"📡","battery":"🔋","electric_plug":"🔌","bulb":"💡","flashlight":"🔦","candle":"🕯","wastebasket":"🗑","oil_drum":"🛢","money_with_wings":"💸","dollar":"💵","yen":"💴","euro":"💶","pound":"💷","moneybag":"💰","credit_card":"💳","gem":"💎","balance_scale":"⚖️","wrench":"🔧","hammer":"🔨","hammer_and_pick":"⚒","hammer_and_wrench":"🛠","pick":"⛏","nut_and_bolt":"🔩","gear":"⚙️","chains":"⛓","gun":"🔫","bomb":"💣","hocho":"🔪","dagger":"🗡","crossed_swords":"⚔️","shield":"🛡","smoking":"🚬","coffin":"⚰️","funeral_urn":"⚱️","amphora":"🏺","crystal_ball":"🔮","prayer_beads":"📿","barber":"💈","alembic":"⚗️","telescope":"🔭","microscope":"🔬","hole":"🕳","pill":"💊","syringe":"💉","thermometer":"🌡","toilet":"🚽","potable_water":"🚰","shower":"🚿","bathtub":"🛁","bath":"🛀","bellhop_bell":"🛎","key":"🔑","old_key":"🗝","door":"🚪","couch_and_lamp":"🛋","bed":"🛏","sleeping_bed":"🛌","framed_picture":"🖼","shopping":"🛍","shopping_cart":"🛒","gift":"🎁","balloon":"🎈","flags":"🎏","ribbon":"🎀","confetti_ball":"🎊","dolls":"🎎","izakaya_lantern":"🏮","wind_chime":"🎐","email":"✉️","envelope_with_arrow":"📩","incoming_envelope":"📨","e-mail":"📧","love_letter":"💌","inbox_tray":"📥","outbox_tray":"📤","package":"📦","label":"🏷","mailbox_closed":"📪","mailbox":"📫","mailbox_with_mail":"📬","mailbox_with_no_mail":"📭","postbox":"📮","postal_horn":"📯","scroll":"📜","page_with_curl":"📃","page_facing_up":"📄","bookmark_tabs":"📑","bar_chart":"📊","chart_with_upwards_trend":"📈","chart_with_downwards_trend":"📉","spiral_notepad":"🗒","spiral_calendar":"🗓","calendar":"📆","date":"📅","card_index":"📇","card_file_box":"🗃","ballot_box":"🗳","file_cabinet":"🗄","clipboard":"📋","file_folder":"📁","open_file_folder":"📂","card_index_dividers":"🗂","newspaper_roll":"🗞","newspaper":"📰","notebook":"📓","notebook_with_decorative_cover":"📔","ledger":"📒","closed_book":"📕","green_book":"📗","blue_book":"📘","orange_book":"📙","books":"📚","book":"📖","bookmark":"🔖","link":"🔗","paperclip":"📎","paperclips":"🖇","triangular_ruler":"📐","straight_ruler":"📏","pushpin":"📌","round_pushpin":"📍","scissors":"✂️","pen":"🖊","fountain_pen":"🖋","black_nib":"✒️","paintbrush":"🖌","crayon":"🖍","memo":"📝","pencil2":"✏️","mag":"🔍","mag_right":"🔎","lock_with_ink_pen":"🔏","closed_lock_with_key":"🔐","lock":"🔒","unlock":"🔓","yellow_heart":"💛","green_heart":"💚","blue_heart":"💙","purple_heart":"💜","black_heart":"🖤","broken_heart":"💔","heavy_heart_exclamation":"❣️","two_hearts":"💕","revolving_hearts":"💞","heartbeat":"💓","heartpulse":"💗","sparkling_heart":"💖","cupid":"💘","gift_heart":"💝","heart_decoration":"💟","peace_symbol":"☮️","latin_cross":"✝️","star_and_crescent":"☪️","om":"🕉","wheel_of_dharma":"☸️","star_of_david":"✡️","six_pointed_star":"🔯","menorah":"🕎","yin_yang":"☯️","orthodox_cross":"☦️","place_of_worship":"🛐","ophiuchus":"⛎","aries":"♈️","taurus":"♉️","gemini":"♊️","cancer":"♋️","leo":"♌️","virgo":"♍️","libra":"♎️","scorpius":"♏️","sagittarius":"♐️","capricorn":"♑️","aquarius":"♒️","pisces":"♓️","id":"🆔","atom_symbol":"⚛️","accept":"🉑","radioactive":"☢️","biohazard":"☣️","mobile_phone_off":"📴","vibration_mode":"📳","u6709":"🈶","u7121":"🈚️","u7533":"🈸","u55b6":"🈺","u6708":"🈷️","eight_pointed_black_star":"✴️","vs":"🆚","white_flower":"💮","ideograph_advantage":"🉐","secret":"㊙️","congratulations":"㊗️","u5408":"🈴","u6e80":"🈵","u5272":"🈹","u7981":"🈲","a":"🅰️","b":"🅱️","ab":"🆎","cl":"🆑","o2":"🅾️","sos":"🆘","x":"❌","o":"⭕️","stop_sign":"🛑","no_entry":"⛔️","name_badge":"📛","no_entry_sign":"🚫","anger":"💢","hotsprings":"♨️","no_pedestrians":"🚷","do_not_litter":"🚯","no_bicycles":"🚳","non-potable_water":"🚱","underage":"🔞","no_mobile_phones":"📵","no_smoking":"🚭","exclamation":"❗️","grey_exclamation":"❕","question":"❓","grey_question":"❔","bangbang":"‼️","interrobang":"⁉️","low_brightness":"🔅","high_brightness":"🔆","part_alternation_mark":"〽️","warning":"⚠️","children_crossing":"🚸","trident":"🔱","fleur_de_lis":"⚜️","beginner":"🔰","recycle":"♻️","white_check_mark":"✅","u6307":"🈯️","chart":"💹","sparkle":"❇️","eight_spoked_asterisk":"✳️","negative_squared_cross_mark":"❎","globe_with_meridians":"🌐","diamond_shape_with_a_dot_inside":"💠","m":"Ⓜ️","cyclone":"🌀","zzz":"💤","atm":"🏧","wc":"🚾","wheelchair":"♿️","parking":"🅿️","u7a7a":"🈳","sa":"🈂️","passport_control":"🛂","customs":"🛃","baggage_claim":"🛄","left_luggage":"🛅","mens":"🚹","womens":"🚺","baby_symbol":"🚼","restroom":"🚻","put_litter_in_its_place":"🚮","cinema":"🎦","signal_strength":"📶","koko":"🈁","symbols":"🔣","information_source":"ℹ️","abc":"🔤","abcd":"🔡","capital_abcd":"🔠","ng":"🆖","ok":"🆗","up":"🆙","cool":"🆒","new":"🆕","free":"🆓","zero":"0️⃣","one":"1️⃣","two":"2️⃣","three":"3️⃣","four":"4️⃣","five":"5️⃣","six":"6️⃣","seven":"7️⃣","eight":"8️⃣","nine":"9️⃣","keycap_ten":"🔟","hash":"#️⃣","asterisk":"*️⃣","arrow_forward":"▶️","pause_button":"⏸","play_or_pause_button":"⏯","stop_button":"⏹","record_button":"⏺","next_track_button":"⏭","previous_track_button":"⏮","fast_forward":"⏩","rewind":"⏪","arrow_double_up":"⏫","arrow_double_down":"⏬","arrow_backward":"◀️","arrow_up_small":"🔼","arrow_down_small":"🔽","arrow_right":"➡️","arrow_left":"⬅️","arrow_up":"⬆️","arrow_down":"⬇️","arrow_upper_right":"↗️","arrow_lower_right":"↘️","arrow_lower_left":"↙️","arrow_upper_left":"↖️","arrow_up_down":"↕️","left_right_arrow":"↔️","arrow_right_hook":"↪️","leftwards_arrow_with_hook":"↩️","arrow_heading_up":"⤴️","arrow_heading_down":"⤵️","twisted_rightwards_arrows":"🔀","repeat":"🔁","repeat_one":"🔂","arrows_counterclockwise":"🔄","arrows_clockwise":"🔃","musical_note":"🎵","notes":"🎶","heavy_plus_sign":"➕","heavy_minus_sign":"➖","heavy_division_sign":"➗","heavy_multiplication_x":"✖️","heavy_dollar_sign":"💲","currency_exchange":"💱","tm":"™️","copyright":"©️","registered":"®️","wavy_dash":"〰️","curly_loop":"➰","loop":"➿","end":"🔚","back":"🔙","on":"🔛","top":"🔝","soon":"🔜","heavy_check_mark":"✔️","ballot_box_with_check":"☑️","radio_button":"🔘","white_circle":"⚪️","black_circle":"⚫️","red_circle":"🔴","large_blue_circle":"🔵","small_red_triangle":"🔺","small_red_triangle_down":"🔻","small_orange_diamond":"🔸","small_blue_diamond":"🔹","large_orange_diamond":"🔶","large_blue_diamond":"🔷","white_square_button":"🔳","black_square_button":"🔲","black_small_square":"▪️","white_small_square":"▫️","black_medium_small_square":"◾️","white_medium_small_square":"◽️","black_medium_square":"◼️","white_medium_square":"◻️","black_large_square":"⬛️","white_large_square":"⬜️","speaker":"🔈","mute":"🔇","sound":"🔉","loud_sound":"🔊","bell":"🔔","no_bell":"🔕","mega":"📣","loudspeaker":"📢","eye_speech_bubble":"👁‍🗨","speech_balloon":"💬","thought_balloon":"💭","right_anger_bubble":"🗯","spades":"♠️","clubs":"♣️","hearts":"♥️","diamonds":"♦️","black_joker":"🃏","flower_playing_cards":"🎴","mahjong":"🀄️","clock1":"🕐","clock2":"🕑","clock3":"🕒","clock4":"🕓","clock5":"🕔","clock6":"🕕","clock7":"🕖","clock8":"🕗","clock9":"🕘","clock10":"🕙","clock11":"🕚","clock12":"🕛","clock130":"🕜","clock230":"🕝","clock330":"🕞","clock430":"🕟","clock530":"🕠","clock630":"🕡","clock730":"🕢","clock830":"🕣","clock930":"🕤","clock1030":"🕥","clock1130":"🕦","clock1230":"🕧","white_flag":"🏳️","black_flag":"🏴","checkered_flag":"🏁","triangular_flag_on_post":"🚩","rainbow_flag":"🏳️‍🌈","afghanistan":"🇦🇫","aland_islands":"🇦🇽","albania":"🇦🇱","algeria":"🇩🇿","american_samoa":"🇦🇸","andorra":"🇦🇩","angola":"🇦🇴","anguilla":"🇦🇮","antarctica":"🇦🇶","antigua_barbuda":"🇦🇬","argentina":"🇦🇷","armenia":"🇦🇲","aruba":"🇦🇼","australia":"🇦🇺","austria":"🇦🇹","azerbaijan":"🇦🇿","bahamas":"🇧🇸","bahrain":"🇧🇭","bangladesh":"🇧🇩","barbados":"🇧🇧","belarus":"🇧🇾","belgium":"🇧🇪","belize":"🇧🇿","benin":"🇧🇯","bermuda":"🇧🇲","bhutan":"🇧🇹","bolivia":"🇧🇴","caribbean_netherlands":"🇧🇶","bosnia_herzegovina":"🇧🇦","botswana":"🇧🇼","brazil":"🇧🇷","british_indian_ocean_territory":"🇮🇴","british_virgin_islands":"🇻🇬","brunei":"🇧🇳","bulgaria":"🇧🇬","burkina_faso":"🇧🇫","burundi":"🇧🇮","cape_verde":"🇨🇻","cambodia":"🇰🇭","cameroon":"🇨🇲","canada":"🇨🇦","canary_islands":"🇮🇨","cayman_islands":"🇰🇾","central_african_republic":"🇨🇫","chad":"🇹🇩","chile":"🇨🇱","cn":"🇨🇳","christmas_island":"🇨🇽","cocos_islands":"🇨🇨","colombia":"🇨🇴","comoros":"🇰🇲","congo_brazzaville":"🇨🇬","congo_kinshasa":"🇨🇩","cook_islands":"🇨🇰","costa_rica":"🇨🇷","cote_divoire":"🇨🇮","croatia":"🇭🇷","cuba":"🇨🇺","curacao":"🇨🇼","cyprus":"🇨🇾","czech_republic":"🇨🇿","denmark":"🇩🇰","djibouti":"🇩🇯","dominica":"🇩🇲","dominican_republic":"🇩🇴","ecuador":"🇪🇨","egypt":"🇪🇬","el_salvador":"🇸🇻","equatorial_guinea":"🇬🇶","eritrea":"🇪🇷","estonia":"🇪🇪","ethiopia":"🇪🇹","eu":"🇪🇺","falkland_islands":"🇫🇰","faroe_islands":"🇫🇴","fiji":"🇫🇯","finland":"🇫🇮","fr":"🇫🇷","french_guiana":"🇬🇫","french_polynesia":"🇵🇫","french_southern_territories":"🇹🇫","gabon":"🇬🇦","gambia":"🇬🇲","georgia":"🇬🇪","de":"🇩🇪","ghana":"🇬🇭","gibraltar":"🇬🇮","greece":"🇬🇷","greenland":"🇬🇱","grenada":"🇬🇩","guadeloupe":"🇬🇵","guam":"🇬🇺","guatemala":"🇬🇹","guernsey":"🇬🇬","guinea":"🇬🇳","guinea_bissau":"🇬🇼","guyana":"🇬🇾","haiti":"🇭🇹","honduras":"🇭🇳","hong_kong":"🇭🇰","hungary":"🇭🇺","iceland":"🇮🇸","india":"🇮🇳","indonesia":"🇮🇩","iran":"🇮🇷","iraq":"🇮🇶","ireland":"🇮🇪","isle_of_man":"🇮🇲","israel":"🇮🇱","it":"🇮🇹","jamaica":"🇯🇲","jp":"🇯🇵","crossed_flags":"🎌","jersey":"🇯🇪","jordan":"🇯🇴","kazakhstan":"🇰🇿","kenya":"🇰🇪","kiribati":"🇰🇮","kosovo":"🇽🇰","kuwait":"🇰🇼","kyrgyzstan":"🇰🇬","laos":"🇱🇦","latvia":"🇱🇻","lebanon":"🇱🇧","lesotho":"🇱🇸","liberia":"🇱🇷","libya":"🇱🇾","liechtenstein":"🇱🇮","lithuania":"🇱🇹","luxembourg":"🇱🇺","macau":"🇲🇴","macedonia":"🇲🇰","madagascar":"🇲🇬","malawi":"🇲🇼","malaysia":"🇲🇾","maldives":"🇲🇻","mali":"🇲🇱","malta":"🇲🇹","marshall_islands":"🇲🇭","martinique":"🇲🇶","mauritania":"🇲🇷","mauritius":"🇲🇺","mayotte":"🇾🇹","mexico":"🇲🇽","micronesia":"🇫🇲","moldova":"🇲🇩","monaco":"🇲🇨","mongolia":"🇲🇳","montenegro":"🇲🇪","montserrat":"🇲🇸","morocco":"🇲🇦","mozambique":"🇲🇿","myanmar":"🇲🇲","namibia":"🇳🇦","nauru":"🇳🇷","nepal":"🇳🇵","netherlands":"🇳🇱","new_caledonia":"🇳🇨","new_zealand":"🇳🇿","nicaragua":"🇳🇮","niger":"🇳🇪","nigeria":"🇳🇬","niue":"🇳🇺","norfolk_island":"🇳🇫","northern_mariana_islands":"🇲🇵","north_korea":"🇰🇵","norway":"🇳🇴","oman":"🇴🇲","pakistan":"🇵🇰","palau":"🇵🇼","palestinian_territories":"🇵🇸","panama":"🇵🇦","papua_new_guinea":"🇵🇬","paraguay":"🇵🇾","peru":"🇵🇪","philippines":"🇵🇭","pitcairn_islands":"🇵🇳","poland":"🇵🇱","portugal":"🇵🇹","puerto_rico":"🇵🇷","qatar":"🇶🇦","reunion":"🇷🇪","romania":"🇷🇴","ru":"🇷🇺","rwanda":"🇷🇼","st_barthelemy":"🇧🇱","st_helena":"🇸🇭","st_kitts_nevis":"🇰🇳","st_lucia":"🇱🇨","st_pierre_miquelon":"🇵🇲","st_vincent_grenadines":"🇻🇨","samoa":"🇼🇸","san_marino":"🇸🇲","sao_tome_principe":"🇸🇹","saudi_arabia":"🇸🇦","senegal":"🇸🇳","serbia":"🇷🇸","seychelles":"🇸🇨","sierra_leone":"🇸🇱","singapore":"🇸🇬","sint_maarten":"🇸🇽","slovakia":"🇸🇰","slovenia":"🇸🇮","solomon_islands":"🇸🇧","somalia":"🇸🇴","south_africa":"🇿🇦","south_georgia_south_sandwich_islands":"🇬🇸","kr":"🇰🇷","south_sudan":"🇸🇸","es":"🇪🇸","sri_lanka":"🇱🇰","sudan":"🇸🇩","suriname":"🇸🇷","swaziland":"🇸🇿","sweden":"🇸🇪","switzerland":"🇨🇭","syria":"🇸🇾","taiwan":"🇹🇼","tajikistan":"🇹🇯","tanzania":"🇹🇿","thailand":"🇹🇭","timor_leste":"🇹🇱","togo":"🇹🇬","tokelau":"🇹🇰","tonga":"🇹🇴","trinidad_tobago":"🇹🇹","tunisia":"🇹🇳","tr":"🇹🇷","turkmenistan":"🇹🇲","turks_caicos_islands":"🇹🇨","tuvalu":"🇹🇻","uganda":"🇺🇬","ukraine":"🇺🇦","united_arab_emirates":"🇦🇪","gb":"🇬🇧","us":"🇺🇸","us_virgin_islands":"🇻🇮","uruguay":"🇺🇾","uzbekistan":"🇺🇿","vanuatu":"🇻🇺","vatican_city":"🇻🇦","venezuela":"🇻🇪","vietnam":"🇻🇳","wallis_futuna":"🇼🇫","western_sahara":"🇪🇭","yemen":"🇾🇪","zambia":"🇿🇲","zimbabwe":"🇿🇼"}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here, I think we just need to leave this file as it was, instead of deleting.

https://stackoverflow.com/questions/215718/reset-or-revert-a-specific-file-to-a-specific-revision-using-git

Thanks, and this time it really is it! Did this work for you when testing?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @jywarren, yes on the testing. I don't know what is going on with the lib/emoji.js file--I had removed it in an earlier commit, but added it back in to more recent one. It is present in my local data. Is it because that folder is in .gitignore that it doesn't pick up the (re)add? I can go back through the commits and try to amend that specific file per the link above, guess that is how I have to (re)add it.

@jywarren
Copy link
Member

jywarren commented Aug 7, 2018 via email

@cheneyshreve01
Copy link
Collaborator Author

Hi @jywarren I just ran git checkout b0377da5f678be6205290dda854a25837bf8ee55~1 -- public/lib/emoji.js and that seems to have done the trick by letting me add back public/lib/emoji.js. I just tested it again to make sure it's working. I can push up those changes now if you'd like. I think that's what was needed.

@jywarren
Copy link
Member

jywarren commented Aug 7, 2018 via email

@cheneyshreve01
Copy link
Collaborator Author

Ok, just pushed that up!

@jywarren
Copy link
Member

jywarren commented Aug 7, 2018

This looks perfect now! Does it work for you locally?

@cheneyshreve01
Copy link
Collaborator Author

Hi @jywarren yes, it works for me locally! Just tested it again.

@jywarren
Copy link
Member

jywarren commented Aug 7, 2018

Super. Merging now, thanks for sticking with it! Next, i guess, over to the Editor project?

@jywarren jywarren merged commit 04d5bbc into publiclab:master Aug 7, 2018
@cheneyshreve01
Copy link
Collaborator Author

Thanks, @jywarren feeling very fortunate to be working with you on this! I'm learning a ton, especially on git with this particular PR so I can't thank you enough! Looking forward to working on the PublicLab.Editor!

SrinandanPai pushed a commit to SrinandanPai/plots2 that referenced this pull request May 5, 2019
* initial setup commit

* [WIP] refactoring atwho code, moved primary code to assets/javascripts and added script to comments form and rich text editor, but not working yet in markdown editor

* removed script from rich text editor, removed emoji file from public folder

* reverting file config/database.yml.sqlite

* renamed emoji script to atwho_autocomplete, modified to read var emoji from /lib/emoji.js, modified comments form and assets to reflect these changes, removed reference to comment-autocomplete

* moved error code to script file

* moved error code out of script to form, wrapped it in a function

* amended git workflow regarding public/lib/emoji.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants