diff --git a/frontend/components/Editor/Editor.js b/frontend/components/Editor/Editor.js index 922dc5f0..4c41118d 100644 --- a/frontend/components/Editor/Editor.js +++ b/frontend/components/Editor/Editor.js @@ -22,7 +22,7 @@ type Props = { onCancel: Function, onImageUploadStart: Function, onImageUploadStop: Function, - emoji: string, + emoji?: string, readOnly: boolean, }; diff --git a/frontend/scenes/Flatpage/Flatpage.js b/frontend/scenes/Flatpage/Flatpage.js index b2353808..c1431055 100644 --- a/frontend/scenes/Flatpage/Flatpage.js +++ b/frontend/scenes/Flatpage/Flatpage.js @@ -2,30 +2,32 @@ import React from 'react'; import { observer } from 'mobx-react'; import CenteredContent from 'components/CenteredContent'; -import HtmlContent from 'components/HtmlContent'; +import Editor from 'components/Editor'; import PageTitle from 'components/PageTitle'; -import { convertToMarkdown } from 'utils/markdown'; - type Props = { title: string, content: string, }; -@observer class Flatpage extends React.Component { - props: Props; +const Flatpage = observer((props: Props) => { + const { title, content } = props; - render() { - const { title, content } = this.props; - const htmlContent = convertToMarkdown(content); - - return ( - - - - - ); - } -} + return ( + + + {}} + onSave={() => {}} + onCancel={() => {}} + onImageUploadStart={() => {}} + onImageUploadStop={() => {}} + emoji="" + readOnly + /> + + ); +}); export default Flatpage; diff --git a/frontend/utils/emoji-mapping.json b/frontend/utils/emoji-mapping.json deleted file mode 100644 index b965bfac..00000000 --- a/frontend/utils/emoji-mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"100":"๐Ÿ’ฏ","1234":"๐Ÿ”ข","grinning":"๐Ÿ˜€","grimacing":"๐Ÿ˜ฌ","grin":"๐Ÿ˜","joy":"๐Ÿ˜‚","smiley":"๐Ÿ˜ƒ","smile":"๐Ÿ˜„","sweat_smile":"๐Ÿ˜…","laughing":"๐Ÿ˜†","innocent":"๐Ÿ˜‡","wink":"๐Ÿ˜‰","blush":"๐Ÿ˜Š","slightly_smiling":"๐Ÿ™‚","upside_down":"๐Ÿ™ƒ","relaxed":"โ˜บ๏ธ","yum":"๐Ÿ˜‹","relieved":"๐Ÿ˜Œ","heart_eyes":"๐Ÿ˜","kissing_heart":"๐Ÿ˜˜","kissing":"๐Ÿ˜—","kissing_smiling_eyes":"๐Ÿ˜™","kissing_closed_eyes":"๐Ÿ˜š","stuck_out_tongue_winking_eye":"๐Ÿ˜œ","stuck_out_tongue_closed_eyes":"๐Ÿ˜","stuck_out_tongue":"๐Ÿ˜›","money_mouth":"๐Ÿค‘","nerd":"๐Ÿค“","sunglasses":"๐Ÿ˜Ž","hugging":"๐Ÿค—","smirk":"๐Ÿ˜","no_mouth":"๐Ÿ˜ถ","neutral_face":"๐Ÿ˜","expressionless":"๐Ÿ˜‘","unamused":"๐Ÿ˜’","rolling_eyes":"๐Ÿ™„","thinking":"๐Ÿค”","flushed":"๐Ÿ˜ณ","disappointed":"๐Ÿ˜ž","worried":"๐Ÿ˜Ÿ","angry":"๐Ÿ˜ ","rage":"๐Ÿ˜ก","pensive":"๐Ÿ˜”","confused":"๐Ÿ˜•","slightly_sad":"๐Ÿ™","white_frowning":"โ˜น","persevere":"๐Ÿ˜ฃ","confounded":"๐Ÿ˜–","tired_face":"๐Ÿ˜ซ","weary":"๐Ÿ˜ฉ","triumph":"๐Ÿ˜ค","open_mouth":"๐Ÿ˜ฎ","scream":"๐Ÿ˜ฑ","fearful":"๐Ÿ˜จ","cold_sweat":"๐Ÿ˜ฐ","hushed":"๐Ÿ˜ฏ","frowning":"๐Ÿ˜ฆ","anguished":"๐Ÿ˜ง","cry":"๐Ÿ˜ข","disappointed_relieved":"๐Ÿ˜ฅ","sleepy":"๐Ÿ˜ช","sweat":"๐Ÿ˜“","sob":"๐Ÿ˜ญ","dizzy_face":"๐Ÿ˜ต","astonished":"๐Ÿ˜ฒ","zipper_mouth":"๐Ÿค","mask":"๐Ÿ˜ท","thermometer_face":"๐Ÿค’","bandage_face":"๐Ÿค•","sleeping":"๐Ÿ˜ด","zzz":"๐Ÿ’ค","hankey":"๐Ÿ’ฉ","smiling_imp":"๐Ÿ˜ˆ","imp":"๐Ÿ‘ฟ","japanese_ogre":"๐Ÿ‘น","japanese_goblin":"๐Ÿ‘บ","skull":"๐Ÿ’€","ghost":"๐Ÿ‘ป","alien":"๐Ÿ‘ฝ","robot":"๐Ÿค–","smiley_cat":"๐Ÿ˜บ","smile_cat":"๐Ÿ˜ธ","joy_cat":"๐Ÿ˜น","heart_eyes_cat":"๐Ÿ˜ป","smirk_cat":"๐Ÿ˜ผ","kissing_cat":"๐Ÿ˜ฝ","scream_cat":"๐Ÿ™€","crying_cat_face":"๐Ÿ˜ฟ","pouting_cat":"๐Ÿ˜พ","raised_hands":"๐Ÿ™Œ","clap":"๐Ÿ‘","wave":"๐Ÿ‘‹","+1":"๐Ÿ‘","-1":"๐Ÿ‘Ž","facepunch":"๐Ÿ‘Š","fist":"โœŠ","v":"โœŒ๏ธ","ok_hand":"๐Ÿ‘Œ","hand":"โœ‹","open_hands":"๐Ÿ‘","muscle":"๐Ÿ’ช","pray":"๐Ÿ™","point_up":"โ˜๏ธ","point_up_2":"๐Ÿ‘†","point_down":"๐Ÿ‘‡","point_left":"๐Ÿ‘ˆ","point_right":"๐Ÿ‘‰","middle_finger":"๐Ÿ–•","splayed_fingers":"๐Ÿ–","sign_of_horns":"๐Ÿค˜","vulcan_salute":"๐Ÿ––","writing_hand":"โœ","nail_care":"๐Ÿ’…","lips":"๐Ÿ‘„","tongue":"๐Ÿ‘…","ear":"๐Ÿ‘‚","nose":"๐Ÿ‘ƒ","eye":"๐Ÿ‘","eyes":"๐Ÿ‘€","bust_in_silhouette":"๐Ÿ‘ค","busts_in_silhouette":"๐Ÿ‘ฅ","speaking_head":"๐Ÿ—ฃ","baby":"๐Ÿ‘ถ","boy":"๐Ÿ‘ฆ","girl":"๐Ÿ‘ง","man":"๐Ÿ‘จ","woman":"๐Ÿ‘ฉ","person_with_blond_hair":"๐Ÿ‘ฑ","older_man":"๐Ÿ‘ด","older_woman":"๐Ÿ‘ต","man_with_gua_pi_mao":"๐Ÿ‘ฒ","man_with_turban":"๐Ÿ‘ณ","cop":"๐Ÿ‘ฎ","construction_worker":"๐Ÿ‘ท","guardsman":"๐Ÿ’‚","sleuth":"๐Ÿ•ต","santa":"๐ŸŽ…","angel":"๐Ÿ‘ผ","princess":"๐Ÿ‘ธ","bride_with_veil":"๐Ÿ‘ฐ","runner":"๐Ÿƒ","walking":"๐Ÿšถ","dancer":"๐Ÿ’ƒ","dancers":"๐Ÿ‘ฏ","couple":"๐Ÿ‘ซ","two_men_holding_hands":"๐Ÿ‘ฌ","two_women_holding_hands":"๐Ÿ‘ญ","bow":"๐Ÿ™‡","information_desk_person":"๐Ÿ’","no_good":"๐Ÿ™…","ok_woman":"๐Ÿ™†","raising_hand":"๐Ÿ™‹","person_with_pouting_face":"๐Ÿ™Ž","person_frowning":"๐Ÿ™","haircut":"๐Ÿ’‡","massage":"๐Ÿ’†","couple_with_heart":"๐Ÿ’‘","female_couple_with_heart":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ","male_couple_with_heart":"๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ","couplekiss":"๐Ÿ’","female_couplekiss":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ","male_couplekiss":"๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ","family":"๐Ÿ‘ช","family_man_woman_girl":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง","family_man_woman_girl_boy":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ","family_man_woman_boys":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ","family_man_woman_girls":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง","family_women_boy":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ","family_women_girl":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง","family_women_girl_boy":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ","family_women_boys":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ","family_women_girls":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง","family_men_boy":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ","family_men_girl":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง","family_men_girl_boy":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ","family_men_boys":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ","family_men_girls":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง","womans_clothes":"๐Ÿ‘š","shirt":"๐Ÿ‘•","jeans":"๐Ÿ‘–","necktie":"๐Ÿ‘”","dress":"๐Ÿ‘—","bikini":"๐Ÿ‘™","kimono":"๐Ÿ‘˜","lipstick":"๐Ÿ’„","kiss":"๐Ÿ’‹","footprints":"๐Ÿ‘ฃ","high_heel":"๐Ÿ‘ ","sandal":"๐Ÿ‘ก","boot":"๐Ÿ‘ข","mans_shoe":"๐Ÿ‘ž","athletic_shoe":"๐Ÿ‘Ÿ","womans_hat":"๐Ÿ‘’","tophat":"๐ŸŽฉ","helmet":"โ›‘","mortar_board":"๐ŸŽ“","crown":"๐Ÿ‘‘","school_satchel":"๐ŸŽ’","pouch":"๐Ÿ‘","purse":"๐Ÿ‘›","handbag":"๐Ÿ‘œ","briefcase":"๐Ÿ’ผ","eyeglasses":"๐Ÿ‘“","dark_sunglasses":"๐Ÿ•ถ","ring":"๐Ÿ’","closed_umbrella":"๐ŸŒ‚","dog":"๐Ÿถ","cat":"๐Ÿฑ","mouse":"๐Ÿญ","hamster":"๐Ÿน","rabbit":"๐Ÿฐ","bear":"๐Ÿป","panda_face":"๐Ÿผ","koala":"๐Ÿจ","tiger":"๐Ÿฏ","lion_face":"๐Ÿฆ","cow":"๐Ÿฎ","pig":"๐Ÿท","pig_nose":"๐Ÿฝ","frog":"๐Ÿธ","octopus":"๐Ÿ™","monkey_face":"๐Ÿต","see_no_evil":"๐Ÿ™ˆ","hear_no_evil":"๐Ÿ™‰","speak_no_evil":"๐Ÿ™Š","monkey":"๐Ÿ’","chicken":"๐Ÿ”","penguin":"๐Ÿง","bird":"๐Ÿฆ","baby_chick":"๐Ÿค","hatching_chick":"๐Ÿฃ","hatched_chick":"๐Ÿฅ","wolf":"๐Ÿบ","boar":"๐Ÿ—","horse":"๐Ÿด","unicorn_face":"๐Ÿฆ„","bee":"๐Ÿ","bug":"๐Ÿ›","snail":"๐ŸŒ","beetle":"๐Ÿž","ant":"๐Ÿœ","spider":"๐Ÿ•ท","scorpion":"๐Ÿฆ‚","crab":"๐Ÿฆ€","snake":"๐Ÿ","turtle":"๐Ÿข","tropical_fish":"๐Ÿ ","fish":"๐ŸŸ","blowfish":"๐Ÿก","dolphin":"๐Ÿฌ","whale":"๐Ÿณ","whale2":"๐Ÿ‹","crocodile":"๐ŸŠ","leopard":"๐Ÿ†","tiger2":"๐Ÿ…","water_buffalo":"๐Ÿƒ","ox":"๐Ÿ‚","cow2":"๐Ÿ„","dromedary_camel":"๐Ÿช","camel":"๐Ÿซ","elephant":"๐Ÿ˜","goat":"๐Ÿ","ram":"๐Ÿ","sheep":"๐Ÿ‘","racehorse":"๐ŸŽ","pig2":"๐Ÿ–","rat":"๐Ÿ€","mouse2":"๐Ÿ","rooster":"๐Ÿ“","turkey":"๐Ÿฆƒ","dove_of_peace":"๐Ÿ•Š","dog2":"๐Ÿ•","poodle":"๐Ÿฉ","cat2":"๐Ÿˆ","rabbit2":"๐Ÿ‡","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":"๐Ÿ","ear_of_rice":"๐ŸŒพ","hibiscus":"๐ŸŒบ","sunflower":"๐ŸŒป","rose":"๐ŸŒน","tulip":"๐ŸŒท","blossom":"๐ŸŒผ","cherry_blossom":"๐ŸŒธ","bouquet":"๐Ÿ’","mushroom":"๐Ÿ„","chestnut":"๐ŸŒฐ","jack_o_lantern":"๐ŸŽƒ","shell":"๐Ÿš","spider_web":"๐Ÿ•ธ","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":"๐ŸŒ","first_quarter_moon_with_face":"๐ŸŒ›","last_quarter_moon_with_face":"๐ŸŒœ","sun_with_face":"๐ŸŒž","crescent_moon":"๐ŸŒ™","star":"โญ","star2":"๐ŸŒŸ","dizzy":"๐Ÿ’ซ","sparkles":"โœจ","comet":"โ˜„","sunny":"โ˜€๏ธ","white_sun_with_small_cloud":"๐ŸŒค","partly_sunny":"โ›…","white_sun_behind_cloud":"๐ŸŒฅ","white_sun_behind_cloud_with_rain":"๐ŸŒฆ","cloud":"โ˜๏ธ","cloud_with_rain":"๐ŸŒง","thunder_cloud_and_rain":"โ›ˆ","cloud_with_lightning":"๐ŸŒฉ","zap":"โšก","fire":"๐Ÿ”ฅ","boom":"๐Ÿ’ฅ","snowflake":"โ„๏ธ","cloud_with_snow":"๐ŸŒจ","snowman":"โ›„","snowman_with_snow":"โ˜ƒ","wind_blowing_face":"๐ŸŒฌ","dash":"๐Ÿ’จ","cloud_with_tornado":"๐ŸŒช","fog":"๐ŸŒซ","umbrella_without_rain":"โ˜‚","umbrella":"โ˜”","droplet":"๐Ÿ’ง","sweat_drops":"๐Ÿ’ฆ","ocean":"๐ŸŒŠ","green_apple":"๐Ÿ","apple":"๐ŸŽ","pear":"๐Ÿ","tangerine":"๐ŸŠ","lemon":"๐Ÿ‹","banana":"๐ŸŒ","watermelon":"๐Ÿ‰","grapes":"๐Ÿ‡","strawberry":"๐Ÿ“","melon":"๐Ÿˆ","cherries":"๐Ÿ’","peach":"๐Ÿ‘","pineapple":"๐Ÿ","tomato":"๐Ÿ…","eggplant":"๐Ÿ†","hot_pepper":"๐ŸŒถ","corn":"๐ŸŒฝ","sweet_potato":"๐Ÿ ","honey_pot":"๐Ÿฏ","bread":"๐Ÿž","cheese_wedge":"๐Ÿง€","poultry_leg":"๐Ÿ—","meat_on_bone":"๐Ÿ–","fried_shrimp":"๐Ÿค","egg":"๐Ÿณ","hamburger":"๐Ÿ”","fries":"๐ŸŸ","hot_dog":"๐ŸŒญ","pizza":"๐Ÿ•","spaghetti":"๐Ÿ","taco":"๐ŸŒฎ","burrito":"๐ŸŒฏ","ramen":"๐Ÿœ","stew":"๐Ÿฒ","fish_cake":"๐Ÿฅ","sushi":"๐Ÿฃ","bento":"๐Ÿฑ","curry":"๐Ÿ›","rice_ball":"๐Ÿ™","rice":"๐Ÿš","rice_cracker":"๐Ÿ˜","oden":"๐Ÿข","dango":"๐Ÿก","shaved_ice":"๐Ÿง","ice_cream":"๐Ÿจ","icecream":"๐Ÿฆ","cake":"๐Ÿฐ","birthday":"๐ŸŽ‚","custard":"๐Ÿฎ","candy":"๐Ÿฌ","lollipop":"๐Ÿญ","chocolate_bar":"๐Ÿซ","popcorn":"๐Ÿฟ","doughnut":"๐Ÿฉ","cookie":"๐Ÿช","beer":"๐Ÿบ","beers":"๐Ÿป","wine_glass":"๐Ÿท","cocktail":"๐Ÿธ","tropical_drink":"๐Ÿน","bottle":"๐Ÿพ","sake":"๐Ÿถ","tea":"๐Ÿต","coffee":"โ˜•","baby_bottle":"๐Ÿผ","fork_and_knife":"๐Ÿด","fork_and_knife_with_plate":"๐Ÿฝ","soccer":"โšฝ","basketball":"๐Ÿ€","football":"๐Ÿˆ","baseball":"โšพ","tennis":"๐ŸŽพ","volleyball":"๐Ÿ","rugby_football":"๐Ÿ‰","8ball":"๐ŸŽฑ","golf":"โ›ณ","golfer":"๐ŸŒ","table_tennis":"๐Ÿ“","badminton":"๐Ÿธ","ice_hockey":"๐Ÿ’","field_hockey":"๐Ÿ‘","cricket":"๐Ÿ","ski":"๐ŸŽฟ","skier":"โ›ท","snowboarder":"๐Ÿ‚","ice_skate":"โ›ธ","bow_and_arrow":"๐Ÿน","fishing_pole_and_fish":"๐ŸŽฃ","rowboat":"๐Ÿšฃ","swimmer":"๐ŸŠ","surfer":"๐Ÿ„","bath":"๐Ÿ›€","person_with_ball":"โ›น","weight_lifter":"๐Ÿ‹","bicyclist":"๐Ÿšด","mountain_bicyclist":"๐Ÿšต","horse_racing":"๐Ÿ‡","man_levitating":"๐Ÿ•ด","trophy":"๐Ÿ†","running_shirt_with_sash":"๐ŸŽฝ","sports_medal":"๐Ÿ…","military_medal":"๐ŸŽ–","reminder_ribbon":"๐ŸŽ—","rosette":"๐Ÿต","ticket":"๐ŸŽซ","admission_ticket":"๐ŸŽŸ","performing_arts":"๐ŸŽญ","art":"๐ŸŽจ","circus_tent":"๐ŸŽช","microphone":"๐ŸŽค","headphones":"๐ŸŽง","musical_score":"๐ŸŽผ","musical_keyboard":"๐ŸŽน","saxophone":"๐ŸŽท","trumpet":"๐ŸŽบ","guitar":"๐ŸŽธ","violin":"๐ŸŽป","clapper":"๐ŸŽฌ","video_game":"๐ŸŽฎ","space_invader":"๐Ÿ‘พ","dart":"๐ŸŽฏ","game_die":"๐ŸŽฒ","slot_machine":"๐ŸŽฐ","bowling":"๐ŸŽณ","car":"๐Ÿš—","taxi":"๐Ÿš•","blue_car":"๐Ÿš™","bus":"๐ŸšŒ","trolleybus":"๐ŸšŽ","racing_car":"๐ŸŽ","police_car":"๐Ÿš“","ambulance":"๐Ÿš‘","fire_engine":"๐Ÿš’","minibus":"๐Ÿš","truck":"๐Ÿšš","articulated_lorry":"๐Ÿš›","tractor":"๐Ÿšœ","racing_motorcycle":"๐Ÿ","bike":"๐Ÿšฒ","rotating_light":"๐Ÿšจ","oncoming_police_car":"๐Ÿš”","oncoming_bus":"๐Ÿš","oncoming_automobile":"๐Ÿš˜","oncoming_taxi":"๐Ÿš–","aerial_tramway":"๐Ÿšก","mountain_cableway":"๐Ÿš ","suspension_railway":"๐ŸšŸ","railway_car":"๐Ÿšƒ","train":"๐Ÿš‹","monorail":"๐Ÿš","bullettrain_side":"๐Ÿš„","bullettrain_front":"๐Ÿš…","light_rail":"๐Ÿšˆ","mountain_railway":"๐Ÿšž","steam_locomotive":"๐Ÿš‚","train2":"๐Ÿš†","metro":"๐Ÿš‡","tram":"๐ŸšŠ","station":"๐Ÿš‰","helicopter":"๐Ÿš","small_airplane":"๐Ÿ›ฉ","airplane":"โœˆ๏ธ","airplane_departure":"๐Ÿ›ซ","airplane_arrival":"๐Ÿ›ฌ","boat":"โ›ต","motor_boat":"๐Ÿ›ฅ","speedboat":"๐Ÿšค","ferry":"โ›ด","passenger_ship":"๐Ÿ›ณ","rocket":"๐Ÿš€","artificial_satellite":"๐Ÿ›ฐ","seat":"๐Ÿ’บ","anchor":"โš“","construction":"๐Ÿšง","fuelpump":"โ›ฝ","busstop":"๐Ÿš","vertical_traffic_light":"๐Ÿšฆ","traffic_light":"๐Ÿšฅ","checkered_flag":"๐Ÿ","ship":"๐Ÿšข","ferris_wheel":"๐ŸŽก","roller_coaster":"๐ŸŽข","carousel_horse":"๐ŸŽ ","building_construction":"๐Ÿ—","foggy":"๐ŸŒ","tokyo_tower":"๐Ÿ—ผ","factory":"๐Ÿญ","fountain":"โ›ฒ","rice_scene":"๐ŸŽ‘","mountain":"โ›ฐ","snow_capped_mountain":"๐Ÿ”","mount_fuji":"๐Ÿ—ป","volcano":"๐ŸŒ‹","japan":"๐Ÿ—พ","camping":"๐Ÿ•","tent":"โ›บ","national_park":"๐Ÿž","motorway":"๐Ÿ›ฃ","railway_track":"๐Ÿ›ค","sunrise":"๐ŸŒ…","sunrise_over_mountains":"๐ŸŒ„","desert":"๐Ÿœ","beach_with_umbrella":"๐Ÿ–","desert_island":"๐Ÿ","city_sunrise":"๐ŸŒ‡","city_sunset":"๐ŸŒ†","cityscape":"๐Ÿ™","night_with_stars":"๐ŸŒƒ","bridge_at_night":"๐ŸŒ‰","milky_way":"๐ŸŒŒ","stars":"๐ŸŒ ","sparkler":"๐ŸŽ‡","fireworks":"๐ŸŽ†","rainbow":"๐ŸŒˆ","buildings":"๐Ÿ˜","european_castle":"๐Ÿฐ","japanese_castle":"๐Ÿฏ","stadium":"๐ŸŸ","statue_of_liberty":"๐Ÿ—ฝ","house":"๐Ÿ ","house_with_garden":"๐Ÿก","derelict_house":"๐Ÿš","office":"๐Ÿข","department_store":"๐Ÿฌ","post_office":"๐Ÿฃ","european_post_office":"๐Ÿค","hospital":"๐Ÿฅ","bank":"๐Ÿฆ","hotel":"๐Ÿจ","convenience_store":"๐Ÿช","school":"๐Ÿซ","love_hotel":"๐Ÿฉ","wedding":"๐Ÿ’’","museum":"๐Ÿ›","church":"โ›ช","mosque":"๐Ÿ•Œ","synagogue":"๐Ÿ•","kaaba":"๐Ÿ•‹","shinto_shrine":"โ›ฉ","watch":"โŒš","iphone":"๐Ÿ“ฑ","calling":"๐Ÿ“ฒ","computer":"๐Ÿ’ป","keyboard":"โŒจ","desktop_computer":"๐Ÿ–ฅ","printer":"๐Ÿ–จ","three_button_mouse":"๐Ÿ–ฑ","trackball":"๐Ÿ–ฒ","joystick":"๐Ÿ•น","compression":"๐Ÿ—œ","minidisc":"๐Ÿ’ฝ","floppy_disk":"๐Ÿ’พ","cd":"๐Ÿ’ฟ","dvd":"๐Ÿ“€","vhs":"๐Ÿ“ผ","camera":"๐Ÿ“ท","camera_with_flash":"๐Ÿ“ธ","video_camera":"๐Ÿ“น","movie_camera":"๐ŸŽฅ","film_projector":"๐Ÿ“ฝ","film_frames":"๐ŸŽž","telephone_receiver":"๐Ÿ“ž","phone":"โ˜Ž๏ธ","pager":"๐Ÿ“Ÿ","fax":"๐Ÿ“ ","tv":"๐Ÿ“บ","radio":"๐Ÿ“ป","studio_microphone":"๐ŸŽ™","level_slider":"๐ŸŽš","control_knobs":"๐ŸŽ›","stopwatch":"โฑ","timer_clock":"โฒ","alarm_clock":"โฐ","mantelpiece_clock":"๐Ÿ•ฐ","hourglass_flowing_sand":"โณ","hourglass":"โŒ›","satellite":"๐Ÿ“ก","battery":"๐Ÿ”‹","electric_plug":"๐Ÿ”Œ","bulb":"๐Ÿ’ก","flashlight":"๐Ÿ”ฆ","candle":"๐Ÿ•ฏ","wastebasket":"๐Ÿ—‘","oil_drum":"๐Ÿ›ข","money_with_wings":"๐Ÿ’ธ","dollar":"๐Ÿ’ต","yen":"๐Ÿ’ด","euro":"๐Ÿ’ถ","pound":"๐Ÿ’ท","moneybag":"๐Ÿ’ฐ","credit_card":"๐Ÿ’ณ","gem":"๐Ÿ’Ž","scales":"โš–","wrench":"๐Ÿ”ง","hammer":"๐Ÿ”จ","hammer_and_pick":"โš’","hammer_and_wrench":"๐Ÿ› ","pick":"โ›","nut_and_bolt":"๐Ÿ”ฉ","gear":"โš™","chains":"โ›“","gun":"๐Ÿ”ซ","bomb":"๐Ÿ’ฃ","hocho":"๐Ÿ”ช","dagger_knife":"๐Ÿ—ก","crossed_swords":"โš”","shield":"๐Ÿ›ก","smoking":"๐Ÿšฌ","skull_and_crossbones":"โ˜ ","coffin":"โšฐ","funeral_urn":"โšฑ","amphora":"๐Ÿบ","crystal_ball":"๐Ÿ”ฎ","prayer_beads":"๐Ÿ“ฟ","barber":"๐Ÿ’ˆ","alembic":"โš—","telescope":"๐Ÿ”ญ","microscope":"๐Ÿ”ฌ","hole":"๐Ÿ•ณ","pill":"๐Ÿ’Š","syringe":"๐Ÿ’‰","thermometer":"๐ŸŒก","label":"๐Ÿท","bookmark":"๐Ÿ”–","toilet":"๐Ÿšฝ","shower":"๐Ÿšฟ","bathtub":"๐Ÿ›","key":"๐Ÿ”‘","old_key":"๐Ÿ—","couch_and_lamp":"๐Ÿ›‹","sleeping_accommodation":"๐Ÿ›Œ","bed":"๐Ÿ›","door":"๐Ÿšช","bellhop_bell":"๐Ÿ›Ž","frame_with_picture":"๐Ÿ–ผ","world_map":"๐Ÿ—บ","umbrella_on_ground":"โ›ฑ","moyai":"๐Ÿ—ฟ","shopping_bags":"๐Ÿ›","balloon":"๐ŸŽˆ","flags":"๐ŸŽ","ribbon":"๐ŸŽ€","gift":"๐ŸŽ","confetti_ball":"๐ŸŽŠ","tada":"๐ŸŽ‰","dolls":"๐ŸŽŽ","wind_chime":"๐ŸŽ","crossed_flags":"๐ŸŽŒ","izakaya_lantern":"๐Ÿฎ","envelope":"โœ‰๏ธ","envelope_with_arrow":"๐Ÿ“ฉ","incoming_envelope":"๐Ÿ“จ","email":"๐Ÿ“ง","love_letter":"๐Ÿ’Œ","postbox":"๐Ÿ“ฎ","mailbox_closed":"๐Ÿ“ช","mailbox":"๐Ÿ“ซ","mailbox_with_mail":"๐Ÿ“ฌ","mailbox_with_no_mail":"๐Ÿ“ญ","package":"๐Ÿ“ฆ","postal_horn":"๐Ÿ“ฏ","inbox_tray":"๐Ÿ“ฅ","outbox_tray":"๐Ÿ“ค","scroll":"๐Ÿ“œ","page_with_curl":"๐Ÿ“ƒ","bookmark_tabs":"๐Ÿ“‘","bar_chart":"๐Ÿ“Š","chart_with_upwards_trend":"๐Ÿ“ˆ","chart_with_downwards_trend":"๐Ÿ“‰","page_facing_up":"๐Ÿ“„","date":"๐Ÿ“…","calendar":"๐Ÿ“†","spiral_calendar_pad":"๐Ÿ—“","card_index":"๐Ÿ“‡","card_file_box":"๐Ÿ—ƒ","ballot_box_with_ballot":"๐Ÿ—ณ","file_cabinet":"๐Ÿ—„","clipboard":"๐Ÿ“‹","spiral_note_pad":"๐Ÿ—’","file_folder":"๐Ÿ“","open_file_folder":"๐Ÿ“‚","card_index_dividers":"๐Ÿ—‚","rolled_up_newspaper":"๐Ÿ—ž","newspaper":"๐Ÿ“ฐ","notebook":"๐Ÿ““","closed_book":"๐Ÿ“•","green_book":"๐Ÿ“—","blue_book":"๐Ÿ“˜","orange_book":"๐Ÿ“™","notebook_with_decorative_cover":"๐Ÿ“”","ledger":"๐Ÿ“’","books":"๐Ÿ“š","book":"๐Ÿ“–","link":"๐Ÿ”—","paperclip":"๐Ÿ“Ž","linked_paperclips":"๐Ÿ–‡","scissors":"โœ‚๏ธ","triangular_ruler":"๐Ÿ“","straight_ruler":"๐Ÿ“","pushpin":"๐Ÿ“Œ","round_pushpin":"๐Ÿ“","triangular_flag_on_post":"๐Ÿšฉ","waving_white_flag":"๐Ÿณ","waving_black_flag":"๐Ÿด","closed_lock_with_key":"๐Ÿ”","lock":"๐Ÿ”’","unlock":"๐Ÿ”“","lock_with_ink_pen":"๐Ÿ”","lower_left_ballpoint_pen":"๐Ÿ–Š","lower_left_fountain_pen":"๐Ÿ–‹","black_nib":"โœ’๏ธ","memo":"๐Ÿ“","pencil2":"โœ๏ธ","lower_left_crayon":"๐Ÿ–","lower_left_paintbrush":"๐Ÿ–Œ","mag":"๐Ÿ”","mag_right":"๐Ÿ”Ž","heart":"โค๏ธ","yellow_heart":"๐Ÿ’›","green_heart":"๐Ÿ’š","blue_heart":"๐Ÿ’™","purple_heart":"๐Ÿ’œ","broken_heart":"๐Ÿ’”","heavy_heart_exclamation_mark_ornament":"โฃ","two_hearts":"๐Ÿ’•","revolving_hearts":"๐Ÿ’ž","heartbeat":"๐Ÿ’“","heartpulse":"๐Ÿ’—","sparkling_heart":"๐Ÿ’–","cupid":"๐Ÿ’˜","gift_heart":"๐Ÿ’","heart_decoration":"๐Ÿ’Ÿ","peace_symbol":"โ˜ฎ","latin_cross":"โœ","star_and_crescent":"โ˜ช","om_symbol":"๐Ÿ•‰","wheel_of_dharma":"โ˜ธ","star_of_david":"โœก","six_pointed_star":"๐Ÿ”ฏ","menorah_with_nine_branches":"๐Ÿ•Ž","yin_yang":"โ˜ฏ","orthodox_cross":"โ˜ฆ","place_of_worship":"๐Ÿ›","ophiuchus":"โ›Ž","aries":"โ™ˆ","taurus":"โ™‰","gemini":"โ™Š","cancer":"โ™‹","leo":"โ™Œ","virgo":"โ™","libra":"โ™Ž","scorpius":"โ™","sagittarius":"โ™","capricorn":"โ™‘","aquarius":"โ™’","pisces":"โ™“","id":"๐Ÿ†”","atom_symbol":"โš›","u7a7a":"๐Ÿˆณ","u5272":"๐Ÿˆน","radioactive_sign":"โ˜ข","biohazard_sign":"โ˜ฃ","mobile_phone_off":"๐Ÿ“ด","vibration_mode":"๐Ÿ“ณ","u6709":"๐Ÿˆถ","u7121":"๐Ÿˆš","u7533":"๐Ÿˆธ","u55b6":"๐Ÿˆบ","u6708":"๐Ÿˆท๏ธ","eight_pointed_black_star":"โœด๏ธ","vs":"๐Ÿ†š","accept":"๐Ÿ‰‘","white_flower":"๐Ÿ’ฎ","ideograph_advantage":"๐Ÿ‰","secret":"ใŠ™๏ธ","congratulations":"ใŠ—๏ธ","u5408":"๐Ÿˆด","u6e80":"๐Ÿˆต","u7981":"๐Ÿˆฒ","a":"๐Ÿ…ฐ๏ธ","b":"๐Ÿ…ฑ๏ธ","ab":"๐Ÿ†Ž","cl":"๐Ÿ†‘","o2":"๐Ÿ…พ๏ธ","sos":"๐Ÿ†˜","no_entry":"โ›”","name_badge":"๐Ÿ“›","no_entry_sign":"๐Ÿšซ","x":"โŒ","o":"โญ•","anger":"๐Ÿ’ข","hotsprings":"โ™จ๏ธ","no_pedestrians":"๐Ÿšท","do_not_litter":"๐Ÿšฏ","no_bicycles":"๐Ÿšณ","non-potable_water":"๐Ÿšฑ","underage":"๐Ÿ”ž","no_mobile_phones":"๐Ÿ“ต","exclamation":"โ—","grey_exclamation":"โ•","question":"โ“","grey_question":"โ”","bangbang":"โ€ผ๏ธ","interrobang":"โ‰๏ธ","low_brightness":"๐Ÿ”…","high_brightness":"๐Ÿ”†","trident":"๐Ÿ”ฑ","fleur_de_lis":"โšœ","part_alternation_mark":"ใ€ฝ๏ธ","warning":"โš ๏ธ","children_crossing":"๐Ÿšธ","beginner":"๐Ÿ”ฐ","recycle":"โ™ป๏ธ","u6307":"๐Ÿˆฏ","chart":"๐Ÿ’น","sparkle":"โ‡๏ธ","eight_spoked_asterisk":"โœณ๏ธ","negative_squared_cross_mark":"โŽ","white_check_mark":"โœ…","diamond_shape_with_a_dot_inside":"๐Ÿ’ ","cyclone":"๐ŸŒ€","loop":"โžฟ","globe_with_meridians":"๐ŸŒ","m":"โ“‚๏ธ","atm":"๐Ÿง","sa":"๐Ÿˆ‚๏ธ","passport_control":"๐Ÿ›‚","customs":"๐Ÿ›ƒ","baggage_claim":"๐Ÿ›„","left_luggage":"๐Ÿ›…","wheelchair":"โ™ฟ","no_smoking":"๐Ÿšญ","wc":"๐Ÿšพ","parking":"๐Ÿ…ฟ๏ธ","potable_water":"๐Ÿšฐ","mens":"๐Ÿšน","womens":"๐Ÿšบ","baby_symbol":"๐Ÿšผ","restroom":"๐Ÿšป","put_litter_in_its_place":"๐Ÿšฎ","cinema":"๐ŸŽฆ","signal_strength":"๐Ÿ“ถ","koko":"๐Ÿˆ","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":"๐Ÿ”Ÿ","keycap_star":"*โƒฃ","arrow_forward":"โ–ถ๏ธ","double_vertical_bar":"โธ","black_right_pointing_triangle_with_double_vertical_bar":"โญ","black_square_for_stop":"โน","black_circle_for_record":"โบ","black_right_pointing_double_triangle_with_vertical_bar":"โฏ","black_left_pointing_double_triangle_with_vertical_bar":"โฎ","fast_forward":"โฉ","rewind":"โช","twisted_rightwards_arrows":"๐Ÿ”€","repeat":"๐Ÿ”","repeat_one":"๐Ÿ”‚","arrow_backward":"โ—€๏ธ","arrow_up_small":"๐Ÿ”ผ","arrow_down_small":"๐Ÿ”ฝ","arrow_double_up":"โซ","arrow_double_down":"โฌ","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":"โ†”๏ธ","arrows_counterclockwise":"๐Ÿ”„","arrow_right_hook":"โ†ช๏ธ","leftwards_arrow_with_hook":"โ†ฉ๏ธ","arrow_heading_up":"โคด๏ธ","arrow_heading_down":"โคต๏ธ","hash":"#๏ธโƒฃ","information_source":"โ„น๏ธ","abc":"๐Ÿ”ค","abcd":"๐Ÿ”ก","capital_abcd":"๐Ÿ” ","symbols":"๐Ÿ”ฃ","musical_note":"๐ŸŽต","notes":"๐ŸŽถ","wavy_dash":"ใ€ฐ๏ธ","curly_loop":"โžฐ","heavy_check_mark":"โœ”๏ธ","arrows_clockwise":"๐Ÿ”ƒ","heavy_plus_sign":"โž•","heavy_minus_sign":"โž–","heavy_division_sign":"โž—","heavy_multiplication_x":"โœ–๏ธ","heavy_dollar_sign":"๐Ÿ’ฒ","currency_exchange":"๐Ÿ’ฑ","copyright":"ยฉ๏ธ","registered":"ยฎ๏ธ","tm":"โ„ข๏ธ","end":"๐Ÿ”š","back":"๐Ÿ”™","on":"๐Ÿ”›","top":"๐Ÿ”","soon":"๐Ÿ”œ","ballot_box_with_check":"โ˜‘๏ธ","radio_button":"๐Ÿ”˜","white_circle":"โšช","black_circle":"โšซ","red_circle":"๐Ÿ”ด","large_blue_circle":"๐Ÿ”ต","small_orange_diamond":"๐Ÿ”ธ","small_blue_diamond":"๐Ÿ”น","large_orange_diamond":"๐Ÿ”ถ","large_blue_diamond":"๐Ÿ”ท","small_red_triangle":"๐Ÿ”บ","black_small_square":"โ–ช๏ธ","white_small_square":"โ–ซ๏ธ","black_large_square":"โฌ›","white_large_square":"โฌœ","small_red_triangle_down":"๐Ÿ”ป","black_medium_square":"โ—ผ๏ธ","white_medium_square":"โ—ป๏ธ","black_medium_small_square":"โ—พ","white_medium_small_square":"โ—ฝ","black_square_button":"๐Ÿ”ฒ","white_square_button":"๐Ÿ”ณ","speaker":"๐Ÿ”ˆ","sound":"๐Ÿ”‰","loud_sound":"๐Ÿ”Š","mute":"๐Ÿ”‡","mega":"๐Ÿ“ฃ","loudspeaker":"๐Ÿ“ข","bell":"๐Ÿ””","no_bell":"๐Ÿ”•","black_joker":"๐Ÿƒ","mahjong":"๐Ÿ€„","spades":"โ™ ๏ธ","clubs":"โ™ฃ๏ธ","hearts":"โ™ฅ๏ธ","diamonds":"โ™ฆ๏ธ","flower_playing_cards":"๐ŸŽด","thought_balloon":"๐Ÿ’ญ","right_anger_bubble":"๐Ÿ—ฏ","speech_balloon":"๐Ÿ’ฌ","left_speech_bubble":"๐Ÿ—จ","clock1":"๐Ÿ•","clock2":"๐Ÿ•‘","clock3":"๐Ÿ•’","clock4":"๐Ÿ•“","clock5":"๐Ÿ•”","clock6":"๐Ÿ••","clock7":"๐Ÿ•–","clock8":"๐Ÿ•—","clock9":"๐Ÿ•˜","clock10":"๐Ÿ•™","clock11":"๐Ÿ•š","clock12":"๐Ÿ•›","clock130":"๐Ÿ•œ","clock230":"๐Ÿ•","clock330":"๐Ÿ•ž","clock430":"๐Ÿ•Ÿ","clock530":"๐Ÿ• ","clock630":"๐Ÿ•ก","clock730":"๐Ÿ•ข","clock830":"๐Ÿ•ฃ","clock930":"๐Ÿ•ค","clock1030":"๐Ÿ•ฅ","clock1130":"๐Ÿ•ฆ","clock1230":"๐Ÿ•ง","af":"๐Ÿ‡ฆ๐Ÿ‡ซ","ax":"๐Ÿ‡ฆ๐Ÿ‡ฝ","al":"๐Ÿ‡ฆ๐Ÿ‡ฑ","dz":"๐Ÿ‡ฉ๐Ÿ‡ฟ","as":"๐Ÿ‡ฆ๐Ÿ‡ธ","ad":"๐Ÿ‡ฆ๐Ÿ‡ฉ","ao":"๐Ÿ‡ฆ๐Ÿ‡ด","ai":"๐Ÿ‡ฆ๐Ÿ‡ฎ","aq":"๐Ÿ‡ฆ๐Ÿ‡ถ","ag":"๐Ÿ‡ฆ๐Ÿ‡ฌ","ar":"๐Ÿ‡ฆ๐Ÿ‡ท","am":"๐Ÿ‡ฆ๐Ÿ‡ฒ","aw":"๐Ÿ‡ฆ๐Ÿ‡ผ","au":"๐Ÿ‡ฆ๐Ÿ‡บ","at":"๐Ÿ‡ฆ๐Ÿ‡น","az":"๐Ÿ‡ฆ๐Ÿ‡ฟ","bs":"๐Ÿ‡ง๐Ÿ‡ธ","bh":"๐Ÿ‡ง๐Ÿ‡ญ","bd":"๐Ÿ‡ง๐Ÿ‡ฉ","bb":"๐Ÿ‡ง๐Ÿ‡ง","by":"๐Ÿ‡ง๐Ÿ‡พ","be":"๐Ÿ‡ง๐Ÿ‡ช","bz":"๐Ÿ‡ง๐Ÿ‡ฟ","bj":"๐Ÿ‡ง๐Ÿ‡ฏ","bm":"๐Ÿ‡ง๐Ÿ‡ฒ","bt":"๐Ÿ‡ง๐Ÿ‡น","bo":"๐Ÿ‡ง๐Ÿ‡ด","bq":"๐Ÿ‡ง๐Ÿ‡ถ","ba":"๐Ÿ‡ง๐Ÿ‡ฆ","bw":"๐Ÿ‡ง๐Ÿ‡ผ","br":"๐Ÿ‡ง๐Ÿ‡ท","io":"๐Ÿ‡ฎ๐Ÿ‡ด","vg":"๐Ÿ‡ป๐Ÿ‡ฌ","bn":"๐Ÿ‡ง๐Ÿ‡ณ","bg":"๐Ÿ‡ง๐Ÿ‡ฌ","bf":"๐Ÿ‡ง๐Ÿ‡ซ","bi":"๐Ÿ‡ง๐Ÿ‡ฎ","cv":"๐Ÿ‡จ๐Ÿ‡ป","kh":"๐Ÿ‡ฐ๐Ÿ‡ญ","cm":"๐Ÿ‡จ๐Ÿ‡ฒ","ca":"๐Ÿ‡จ๐Ÿ‡ฆ","ic":"๐Ÿ‡ฎ๐Ÿ‡จ","ky":"๐Ÿ‡ฐ๐Ÿ‡พ","cf":"๐Ÿ‡จ๐Ÿ‡ซ","td":"๐Ÿ‡น๐Ÿ‡ฉ","chile":"๐Ÿ‡จ๐Ÿ‡ฑ","cn":"๐Ÿ‡จ๐Ÿ‡ณ","cx":"๐Ÿ‡จ๐Ÿ‡ฝ","cc":"๐Ÿ‡จ๐Ÿ‡จ","co":"๐Ÿ‡จ๐Ÿ‡ด","km":"๐Ÿ‡ฐ๐Ÿ‡ฒ","cg":"๐Ÿ‡จ๐Ÿ‡ฌ","drc":"๐Ÿ‡จ๐Ÿ‡ฉ","ck":"๐Ÿ‡จ๐Ÿ‡ฐ","cr":"๐Ÿ‡จ๐Ÿ‡ท","hr":"๐Ÿ‡ญ๐Ÿ‡ท","cu":"๐Ÿ‡จ๐Ÿ‡บ","cw":"๐Ÿ‡จ๐Ÿ‡ผ","cy":"๐Ÿ‡จ๐Ÿ‡พ","cz":"๐Ÿ‡จ๐Ÿ‡ฟ","dk":"๐Ÿ‡ฉ๐Ÿ‡ฐ","dj":"๐Ÿ‡ฉ๐Ÿ‡ฏ","dm":"๐Ÿ‡ฉ๐Ÿ‡ฒ","do":"๐Ÿ‡ฉ๐Ÿ‡ด","ec":"๐Ÿ‡ช๐Ÿ‡จ","eg":"๐Ÿ‡ช๐Ÿ‡ฌ","sv":"๐Ÿ‡ธ๐Ÿ‡ป","gq":"๐Ÿ‡ฌ๐Ÿ‡ถ","er":"๐Ÿ‡ช๐Ÿ‡ท","ee":"๐Ÿ‡ช๐Ÿ‡ช","et":"๐Ÿ‡ช๐Ÿ‡น","eu":"๐Ÿ‡ช๐Ÿ‡บ","fk":"๐Ÿ‡ซ๐Ÿ‡ฐ","fo":"๐Ÿ‡ซ๐Ÿ‡ด","fj":"๐Ÿ‡ซ๐Ÿ‡ฏ","fi":"๐Ÿ‡ซ๐Ÿ‡ฎ","fr":"๐Ÿ‡ซ๐Ÿ‡ท","gf":"๐Ÿ‡ฌ๐Ÿ‡ซ","pf":"๐Ÿ‡ต๐Ÿ‡ซ","tf":"๐Ÿ‡น๐Ÿ‡ซ","ga":"๐Ÿ‡ฌ๐Ÿ‡ฆ","gm":"๐Ÿ‡ฌ๐Ÿ‡ฒ","ge":"๐Ÿ‡ฌ๐Ÿ‡ช","de":"๐Ÿ‡ฉ๐Ÿ‡ช","gh":"๐Ÿ‡ฌ๐Ÿ‡ญ","gi":"๐Ÿ‡ฌ๐Ÿ‡ฎ","gr":"๐Ÿ‡ฌ๐Ÿ‡ท","gl":"๐Ÿ‡ฌ๐Ÿ‡ฑ","gd":"๐Ÿ‡ฌ๐Ÿ‡ฉ","gp":"๐Ÿ‡ฌ๐Ÿ‡ต","gu":"๐Ÿ‡ฌ๐Ÿ‡บ","gt":"๐Ÿ‡ฌ๐Ÿ‡น","gg":"๐Ÿ‡ฌ๐Ÿ‡ฌ","gn":"๐Ÿ‡ฌ๐Ÿ‡ณ","gw":"๐Ÿ‡ฌ๐Ÿ‡ผ","gy":"๐Ÿ‡ฌ๐Ÿ‡พ","ht":"๐Ÿ‡ญ๐Ÿ‡น","hn":"๐Ÿ‡ญ๐Ÿ‡ณ","hk":"๐Ÿ‡ญ๐Ÿ‡ฐ","hu":"๐Ÿ‡ญ๐Ÿ‡บ","is":"๐Ÿ‡ฎ๐Ÿ‡ธ","in":"๐Ÿ‡ฎ๐Ÿ‡ณ","indonesia":"๐Ÿ‡ฎ๐Ÿ‡ฉ","ir":"๐Ÿ‡ฎ๐Ÿ‡ท","iq":"๐Ÿ‡ฎ๐Ÿ‡ถ","ie":"๐Ÿ‡ฎ๐Ÿ‡ช","im":"๐Ÿ‡ฎ๐Ÿ‡ฒ","il":"๐Ÿ‡ฎ๐Ÿ‡ฑ","it":"๐Ÿ‡ฎ๐Ÿ‡น","ci":"๐Ÿ‡จ๐Ÿ‡ฎ","jm":"๐Ÿ‡ฏ๐Ÿ‡ฒ","jp":"๐Ÿ‡ฏ๐Ÿ‡ต","je":"๐Ÿ‡ฏ๐Ÿ‡ช","jo":"๐Ÿ‡ฏ๐Ÿ‡ด","kz":"๐Ÿ‡ฐ๐Ÿ‡ฟ","ke":"๐Ÿ‡ฐ๐Ÿ‡ช","ki":"๐Ÿ‡ฐ๐Ÿ‡ฎ","xk":"๐Ÿ‡ฝ๐Ÿ‡ฐ","kw":"๐Ÿ‡ฐ๐Ÿ‡ผ","kg":"๐Ÿ‡ฐ๐Ÿ‡ฌ","la":"๐Ÿ‡ฑ๐Ÿ‡ฆ","lv":"๐Ÿ‡ฑ๐Ÿ‡ป","lb":"๐Ÿ‡ฑ๐Ÿ‡ง","ls":"๐Ÿ‡ฑ๐Ÿ‡ธ","lr":"๐Ÿ‡ฑ๐Ÿ‡ท","ly":"๐Ÿ‡ฑ๐Ÿ‡พ","li":"๐Ÿ‡ฑ๐Ÿ‡ฎ","lt":"๐Ÿ‡ฑ๐Ÿ‡น","lu":"๐Ÿ‡ฑ๐Ÿ‡บ","mo":"๐Ÿ‡ฒ๐Ÿ‡ด","mk":"๐Ÿ‡ฒ๐Ÿ‡ฐ","mg":"๐Ÿ‡ฒ๐Ÿ‡ฌ","mw":"๐Ÿ‡ฒ๐Ÿ‡ผ","my":"๐Ÿ‡ฒ๐Ÿ‡พ","mv":"๐Ÿ‡ฒ๐Ÿ‡ป","ml":"๐Ÿ‡ฒ๐Ÿ‡ฑ","mt":"๐Ÿ‡ฒ๐Ÿ‡น","mh":"๐Ÿ‡ฒ๐Ÿ‡ญ","mq":"๐Ÿ‡ฒ๐Ÿ‡ถ","mr":"๐Ÿ‡ฒ๐Ÿ‡ท","mu":"๐Ÿ‡ฒ๐Ÿ‡บ","yt":"๐Ÿ‡พ๐Ÿ‡น","mx":"๐Ÿ‡ฒ๐Ÿ‡ฝ","fm":"๐Ÿ‡ซ๐Ÿ‡ฒ","md":"๐Ÿ‡ฒ๐Ÿ‡ฉ","mc":"๐Ÿ‡ฒ๐Ÿ‡จ","mn":"๐Ÿ‡ฒ๐Ÿ‡ณ","me":"๐Ÿ‡ฒ๐Ÿ‡ช","ms":"๐Ÿ‡ฒ๐Ÿ‡ธ","ma":"๐Ÿ‡ฒ๐Ÿ‡ฆ","mz":"๐Ÿ‡ฒ๐Ÿ‡ฟ","mm":"๐Ÿ‡ฒ๐Ÿ‡ฒ","na":"๐Ÿ‡ณ๐Ÿ‡ฆ","nr":"๐Ÿ‡ณ๐Ÿ‡ท","np":"๐Ÿ‡ณ๐Ÿ‡ต","nl":"๐Ÿ‡ณ๐Ÿ‡ฑ","nc":"๐Ÿ‡ณ๐Ÿ‡จ","nz":"๐Ÿ‡ณ๐Ÿ‡ฟ","ni":"๐Ÿ‡ณ๐Ÿ‡ฎ","ne":"๐Ÿ‡ณ๐Ÿ‡ช","nigeria":"๐Ÿ‡ณ๐Ÿ‡ฌ","nu":"๐Ÿ‡ณ๐Ÿ‡บ","nf":"๐Ÿ‡ณ๐Ÿ‡ซ","mp":"๐Ÿ‡ฒ๐Ÿ‡ต","kp":"๐Ÿ‡ฐ๐Ÿ‡ต","no":"๐Ÿ‡ณ๐Ÿ‡ด","om":"๐Ÿ‡ด๐Ÿ‡ฒ","pk":"๐Ÿ‡ต๐Ÿ‡ฐ","pw":"๐Ÿ‡ต๐Ÿ‡ผ","ps":"๐Ÿ‡ต๐Ÿ‡ธ","pa":"๐Ÿ‡ต๐Ÿ‡ฆ","pg":"๐Ÿ‡ต๐Ÿ‡ฌ","py":"๐Ÿ‡ต๐Ÿ‡พ","pe":"๐Ÿ‡ต๐Ÿ‡ช","ph":"๐Ÿ‡ต๐Ÿ‡ญ","pn":"๐Ÿ‡ต๐Ÿ‡ณ","pl":"๐Ÿ‡ต๐Ÿ‡ฑ","pt":"๐Ÿ‡ต๐Ÿ‡น","pr":"๐Ÿ‡ต๐Ÿ‡ท","qa":"๐Ÿ‡ถ๐Ÿ‡ฆ","re":"๐Ÿ‡ท๐Ÿ‡ช","ro":"๐Ÿ‡ท๐Ÿ‡ด","ru":"๐Ÿ‡ท๐Ÿ‡บ","rw":"๐Ÿ‡ท๐Ÿ‡ผ","bl":"๐Ÿ‡ง๐Ÿ‡ฑ","sh":"๐Ÿ‡ธ๐Ÿ‡ญ","kn":"๐Ÿ‡ฐ๐Ÿ‡ณ","lc":"๐Ÿ‡ฑ๐Ÿ‡จ","pm":"๐Ÿ‡ต๐Ÿ‡ฒ","vc":"๐Ÿ‡ป๐Ÿ‡จ","ws":"๐Ÿ‡ผ๐Ÿ‡ธ","sm":"๐Ÿ‡ธ๐Ÿ‡ฒ","st":"๐Ÿ‡ธ๐Ÿ‡น","saudi_arabia":"๐Ÿ‡ธ๐Ÿ‡ฆ","sn":"๐Ÿ‡ธ๐Ÿ‡ณ","rs":"๐Ÿ‡ท๐Ÿ‡ธ","sc":"๐Ÿ‡ธ๐Ÿ‡จ","sl":"๐Ÿ‡ธ๐Ÿ‡ฑ","sg":"๐Ÿ‡ธ๐Ÿ‡ฌ","sx":"๐Ÿ‡ธ๐Ÿ‡ฝ","sk":"๐Ÿ‡ธ๐Ÿ‡ฐ","si":"๐Ÿ‡ธ๐Ÿ‡ฎ","sb":"๐Ÿ‡ธ๐Ÿ‡ง","so":"๐Ÿ‡ธ๐Ÿ‡ด","za":"๐Ÿ‡ฟ๐Ÿ‡ฆ","gs":"๐Ÿ‡ฌ๐Ÿ‡ธ","kr":"๐Ÿ‡ฐ๐Ÿ‡ท","ss":"๐Ÿ‡ธ๐Ÿ‡ธ","es":"๐Ÿ‡ช๐Ÿ‡ธ","lk":"๐Ÿ‡ฑ๐Ÿ‡ฐ","sd":"๐Ÿ‡ธ๐Ÿ‡ฉ","sr":"๐Ÿ‡ธ๐Ÿ‡ท","sz":"๐Ÿ‡ธ๐Ÿ‡ฟ","se":"๐Ÿ‡ธ๐Ÿ‡ช","ch":"๐Ÿ‡จ๐Ÿ‡ญ","sy":"๐Ÿ‡ธ๐Ÿ‡พ","tw":"๐Ÿ‡น๐Ÿ‡ผ","tj":"๐Ÿ‡น๐Ÿ‡ฏ","tz":"๐Ÿ‡น๐Ÿ‡ฟ","th":"๐Ÿ‡น๐Ÿ‡ญ","tl":"๐Ÿ‡น๐Ÿ‡ฑ","tg":"๐Ÿ‡น๐Ÿ‡ฌ","tk":"๐Ÿ‡น๐Ÿ‡ฐ","to":"๐Ÿ‡น๐Ÿ‡ด","tt":"๐Ÿ‡น๐Ÿ‡น","tn":"๐Ÿ‡น๐Ÿ‡ณ","tr":"๐Ÿ‡น๐Ÿ‡ท","turkmenistan":"๐Ÿ‡น๐Ÿ‡ฒ","tc":"๐Ÿ‡น๐Ÿ‡จ","tuvalu":"๐Ÿ‡น๐Ÿ‡ป","ug":"๐Ÿ‡บ๐Ÿ‡ฌ","ua":"๐Ÿ‡บ๐Ÿ‡ฆ","ae":"๐Ÿ‡ฆ๐Ÿ‡ช","gb":"๐Ÿ‡ฌ๐Ÿ‡ง","us":"๐Ÿ‡บ๐Ÿ‡ธ","vi":"๐Ÿ‡ป๐Ÿ‡ฎ","uy":"๐Ÿ‡บ๐Ÿ‡พ","uz":"๐Ÿ‡บ๐Ÿ‡ฟ","vu":"๐Ÿ‡ป๐Ÿ‡บ","va":"๐Ÿ‡ป๐Ÿ‡ฆ","ve":"๐Ÿ‡ป๐Ÿ‡ช","vn":"๐Ÿ‡ป๐Ÿ‡ณ","wf":"๐Ÿ‡ผ๐Ÿ‡ซ","eh":"๐Ÿ‡ช๐Ÿ‡ญ","ye":"๐Ÿ‡พ๐Ÿ‡ช","zm":"๐Ÿ‡ฟ๐Ÿ‡ฒ","zw":"๐Ÿ‡ฟ๐Ÿ‡ผ"} \ No newline at end of file diff --git a/frontend/utils/emojify.js b/frontend/utils/emojify.js deleted file mode 100644 index eeee3e1f..00000000 --- a/frontend/utils/emojify.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow -import emojiMapping from './emoji-mapping.json'; - -const EMOJI_REGEX = /:([A-Za-z0-9_\-+]+?):/gm; - -const emojify = (text: string = '') => { - let emojifiedText = text; - - emojifiedText = text.replace(EMOJI_REGEX, (match, p1, offset, string) => { - return emojiMapping[p1] || match; - }); - - return emojifiedText; -}; - -export default emojify; diff --git a/frontend/utils/markdown.js b/frontend/utils/markdown.js deleted file mode 100644 index e5511c66..00000000 --- a/frontend/utils/markdown.js +++ /dev/null @@ -1,53 +0,0 @@ -// @flow -import slug from 'slug'; -import marked from 'marked'; -import sanitizedRenderer from 'marked-sanitized'; -import highlight from 'highlight.js'; -import _ from 'lodash'; -import emojify from './emojify'; -import toc from './toc'; - -// $FlowIssue invalid flow-typed -slug.defaults.mode = 'rfc3986'; - -const Renderer = sanitizedRenderer(marked.Renderer); -const renderer = new Renderer(); -renderer.code = (code, language) => { - const validLang = !!(language && highlight.getLanguage(language)); - const highlighted = validLang - ? highlight.highlight(language, code).value - : _.escape(code); - return `
${highlighted}
`; -}; -renderer.heading = (text, level) => { - const headingSlug = _.escape(slug(text)); - return ` - - ${text} - # - - `; -}; - -const convertToMarkdown = (text: string) => { - // Add TOC - text = toc.insert(text || '', { - slugify: heading => { - // FIXME: E.g. `&` gets messed up - const headingSlug = _.escape(slug(heading)); - return headingSlug; - }, - }); - - return marked.parse(emojify(text), { - renderer, - gfm: true, - tables: true, - breaks: false, - pedantic: false, - smartLists: true, - smartypants: true, - }); -}; - -export { convertToMarkdown }; diff --git a/frontend/utils/toc/index.js b/frontend/utils/toc/index.js deleted file mode 100644 index 8eaa5499..00000000 --- a/frontend/utils/toc/index.js +++ /dev/null @@ -1,148 +0,0 @@ -// @flow -/* eslint-disable */ - -/** - * marked-toc - * - * Copyright (c) 2014 Jon Schlinkert, contributors. - * Licensed under the MIT license. - */ - -'use strict'; - -var marked = require('marked'); -var _ = require('lodash'); -var utils = require('./utils'); - -/** - * Expose `toc` - */ - -module.exports = toc; - -/** - * Default template to use for generating - * a table of contents. - */ - -var defaultTemplate = - '<%= depth %><%= bullet %>[<%= heading %>](#<%= url %>)\n'; - -/** - * Create the table of contents object that - * will be used as context for the template. - * - * @param {String} `str` - * @param {Object} `options` - * @return {Object} - */ - -function generate(str, options) { - var opts = _.extend( - { - firsth1: false, - blacklist: true, - omit: [], - maxDepth: 3, - slugify: function(text) { - return text; // Override this! - }, - }, - options - ); - - var toc = ''; - // $FlowIssue invalid flow-typed - var tokens = marked.lexer(str); - var tocArray = []; - - // Remove the very first h1, true by default - if (opts.firsth1 === false) { - tokens.shift(); - } - - // Do any h1's still exist? - var h1 = _.some(tokens, { depth: 1 }); - - tokens - .filter(function(token) { - // Filter out everything but headings - if (token.type !== 'heading' || token.type === 'code') { - return false; - } - - // Since we removed the first h1, we'll check to see if other h1's - // exist. If none exist, then we unindent the rest of the TOC - if (!h1) { - token.depth = token.depth - 1; - } - - // Store original text and create an id for linking - token.heading = opts.strip ? utils.strip(token.text, opts) : token.text; - - // Create a "slugified" id for linking - token.id = opts.slugify(token.text); - - // Omit headings with these strings - var omissions = ['Table of Contents', 'TOC', 'TABLE OF CONTENTS']; - var omit = _.union([], opts.omit, omissions); - - if (utils.isMatch(omit, token.heading)) { - return; - } - - return true; - }) - .forEach(function(h) { - if (h.depth > opts.maxDepth) { - return; - } - - var bullet = Array.isArray(opts.bullet) - ? opts.bullet[(h.depth - 1) % opts.bullet.length] - : opts.bullet; - - var data = _.extend({}, opts.data, { - depth: new Array((h.depth - 1) * 2 + 1).join(' '), - bullet: bullet ? bullet : '* ', - heading: h.heading, - url: h.id, - }); - - tocArray.push(data); - toc += _.template(opts.template || defaultTemplate)(data); - }); - - return { - data: tocArray, - toc: opts.strip ? utils.strip(toc, opts) : toc, - }; -} - -/** - * toc - */ - -function toc(str: string, options: Object) { - return generate(str, options).toc; -} - -toc.raw = function(str, options) { - return generate(str, options); -}; - -toc.insert = function(content, options) { - var start = ''; - var stop = ''; - var re = /([\s\S]+?)/; - - // remove the existing TOC - content = content.replace(re, start); - - // generate new TOC - var newtoc = - '\n\n' + start + '\n\n' + toc(content, options) + '\n' + stop + '\n'; - - // If front-matter existed, put it back - return content.replace(start, newtoc); -}; diff --git a/frontend/utils/toc/utils.js b/frontend/utils/toc/utils.js deleted file mode 100644 index e1cd9177..00000000 --- a/frontend/utils/toc/utils.js +++ /dev/null @@ -1,83 +0,0 @@ -/* eslint-disable */ - -/*! - * marked-toc - * - * Copyright (c) 2014 Jon Schlinkert, contributors. - * Licensed under the MIT license. - */ - -'use strict'; - -var _ = require('lodash'); -var utils = (module.exports = {}); - -utils.arrayify = function(arr) { - return !Array.isArray(arr) ? [arr] : arr; -}; - -utils.escapeRegex = function(re) { - return re.replace(/(\[|\]|\(|\)|\/|\.|\^|\$|\*|\+|\?)/g, '\\$1'); -}; - -utils.isDest = function(dest) { - return !dest || dest === 'undefined' || typeof dest === 'object'; -}; - -utils.isMatch = function(keys, str) { - keys = utils.arrayify(keys); - keys = keys.length > 0 ? keys.join('|') : '.*'; - - // Escape certain characters, like '[', '(' - var k = utils.escapeRegex(String(keys)); - - // Build up the regex to use for replacement patterns - var re = new RegExp('(?:' + k + ')', 'g'); - if (String(str).match(re)) { - return true; - } else { - return false; - } -}; - -utils.sanitize = function(src) { - src = src.replace(/(\s*\[!|(?:\[.+ โ†’\]\()).+/g, ''); - src = src.replace(/\s*\*\s*\[\].+/g, ''); - return src; -}; - -utils.slugify = function(str) { - str = str.replace(/\/\//g, '-'); - str = str.replace(/\//g, '-'); - str = str.replace(/\./g, '-'); - str = _.str.slugify(str); - str = str.replace(/^-/, ''); - str = str.replace(/-$/, ''); - return str; -}; - -/** - * Strip certain words from headings. These can be - * overridden. Might seem strange but it makes - * sense in context. - */ - -var omit = [ - 'grunt', - 'helper', - 'handlebars-helper', - 'mixin', - 'filter', - 'assemble-contrib', - 'assemble', -]; - -utils.strip = function(name, options) { - var opts = _.extend({}, options); - if (opts.omit === false) { - omit = []; - } - var exclusions = _.union(omit, utils.arrayify(opts.strip || [])); - var re = new RegExp('^(?:' + exclusions.join('|') + ')[-_]?', 'g'); - return name.replace(re, ''); -}; diff --git a/package.json b/package.json index 11e75b1e..ba097038 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,6 @@ "css-loader": "^0.28.7", "debug": "2.2.0", "dotenv": "^4.0.0", - "emoji-name-map": "1.1.2", "emoji-regex": "^6.5.1", "eslint": "^3.19.0", "eslint-config-react-app": "^0.6.2", @@ -100,7 +99,6 @@ "fbemitter": "^2.1.1", "file-loader": "0.9.0", "flow-typed": "^2.1.2", - "highlight.js": "9.4.0", "history": "3.0.0", "html-webpack-plugin": "2.17.0", "http-errors": "1.4.0", @@ -108,7 +106,6 @@ "invariant": "^2.2.2", "isomorphic-fetch": "2.2.1", "js-search": "^1.4.2", - "js-tree": "1.1.0", "json-loader": "0.5.4", "jsonwebtoken": "7.0.1", "koa": "^2.2.0", @@ -125,8 +122,6 @@ "localforage": "^1.5.0", "lodash": "^4.17.4", "lodash.orderby": "4.4.0", - "marked": "0.3.6", - "marked-sanitized": "^0.1.1", "mobx": "^3.1.9", "mobx-react": "^4.1.8", "mobx-react-devtools": "^4.2.11", @@ -170,7 +165,6 @@ "string-hash": "^1.1.0", "style-loader": "^0.18.2", "styled-components": "^2.0.0", - "truncate-html": "https://github.com/jorilallo/truncate-html/tarball/master", "url-loader": "0.5.7", "uuid": "2.0.2", "validator": "5.2.0", diff --git a/scripts/update_emoji_mapping.js b/scripts/update_emoji_mapping.js deleted file mode 100644 index 958763e4..00000000 --- a/scripts/update_emoji_mapping.js +++ /dev/null @@ -1,8 +0,0 @@ -var fs = require('fs'); -var path = require('path'); -var mapping = require('emoji-name-map'); - -fs.writeFile( - path.join(__dirname, '../frontend/utils/emoji-mapping.json'), - JSON.stringify(mapping.emoji) -); diff --git a/server/migrations/20171017055026-remove-document-html.js b/server/migrations/20171017055026-remove-document-html.js new file mode 100644 index 00000000..b9cdd821 --- /dev/null +++ b/server/migrations/20171017055026-remove-document-html.js @@ -0,0 +1,23 @@ +module.exports = { + up: function(queryInterface, Sequelize) { + queryInterface.removeColumn('documents', 'html'); + queryInterface.removeColumn('documents', 'preview'); + queryInterface.removeColumn('revisions', 'html'); + queryInterface.removeColumn('revisions', 'preview'); + }, + + down: function(queryInterface, Sequelize) { + queryInterface.addColumn('documents', 'html', { + type: Sequelize.TEXT, + }); + queryInterface.addColumn('documents', 'preview', { + type: Sequelize.TEXT, + }); + queryInterface.addColumn('revisions', 'html', { + type: Sequelize.TEXT, + }); + queryInterface.addColumn('revisions', 'preview', { + type: Sequelize.TEXT, + }); + }, +}; diff --git a/server/models/Document.js b/server/models/Document.js index 7ee9e425..95e3b146 100644 --- a/server/models/Document.js +++ b/server/models/Document.js @@ -2,12 +2,9 @@ import slug from 'slug'; import _ from 'lodash'; import randomstring from 'randomstring'; -import emojiRegex from 'emoji-regex'; import isUUID from 'validator/lib/isUUID'; import { DataTypes, sequelize } from '../sequelize'; -import { convertToMarkdown } from '../../frontend/utils/markdown'; -import { truncateMarkdown } from '../utils/truncate'; import parseTitle from '../../shared/parseTitle'; import Revision from './Revision'; @@ -25,8 +22,6 @@ const createRevision = doc => { return Revision.create({ title: doc.title, text: doc.text, - html: doc.html, - preview: doc.preview, userId: doc.lastModifiedById, documentId: doc.id, }); @@ -40,8 +35,6 @@ const beforeSave = async doc => { const { emoji } = parseTitle(doc.text); doc.emoji = emoji; - doc.html = convertToMarkdown(doc.text); - doc.preview = truncateMarkdown(doc.text, 160); doc.revisionCount += 1; // Collaborators @@ -74,8 +67,6 @@ const Document = sequelize.define( private: { type: DataTypes.BOOLEAN, defaultValue: true }, title: DataTypes.STRING, text: DataTypes.TEXT, - html: DataTypes.TEXT, - preview: DataTypes.TEXT, revisionCount: { type: DataTypes.INTEGER, defaultValue: 0 }, parentDocumentId: DataTypes.UUID, createdById: { diff --git a/server/models/Revision.js b/server/models/Revision.js index d69892ea..f5dcc846 100644 --- a/server/models/Revision.js +++ b/server/models/Revision.js @@ -9,8 +9,6 @@ const Revision = sequelize.define('revision', { }, title: DataTypes.STRING, text: DataTypes.TEXT, - html: DataTypes.TEXT, - preview: DataTypes.TEXT, userId: { type: 'UUID', diff --git a/server/presenters/document.js b/server/presenters/document.js index 5927a83d..bf483cd1 100644 --- a/server/presenters/document.js +++ b/server/presenters/document.js @@ -21,8 +21,6 @@ async function present(ctx: Object, document: Document, options: ?Options) { private: document.private, title: document.title, text: document.text, - html: document.html, - preview: document.preview, emoji: document.emoji, createdAt: document.createdAt, createdBy: presentUser(ctx, document.createdBy), diff --git a/server/utils/truncate.js b/server/utils/truncate.js deleted file mode 100644 index 85664daa..00000000 --- a/server/utils/truncate.js +++ /dev/null @@ -1,16 +0,0 @@ -import truncate from 'truncate-html'; -import { convertToMarkdown } from '../../frontend/utils/markdown'; - -truncate.defaultOptions = { - stripTags: false, - ellipsis: '...', - decodeEntities: false, - excludes: ['h1', 'pre'], -}; - -const truncateMarkdown = (text, length) => { - const html = convertToMarkdown(text); - return truncate(html, length); -}; - -export { truncateMarkdown }; diff --git a/yarn.lock b/yarn.lock index a3c005d5..10b24544 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1454,7 +1454,7 @@ charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -cheerio@0.22.0, cheerio@^0.22.0: +cheerio@^0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" dependencies: @@ -2496,22 +2496,10 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emoji-name-map@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/emoji-name-map/-/emoji-name-map-1.1.2.tgz#662f6b5582b0eaf817be6a9ac272fbd8af10ae73" - dependencies: - emojilib "^2.0.2" - iterate-object "^1.3.1" - map-o "^2.0.1" - emoji-regex@^6.1.0, emoji-regex@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" -emojilib@^2.0.2: - version "2.2.9" - resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.2.9.tgz#ec5722689fc148f56422c14b0dc16a901d446b75" - emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -3861,10 +3849,6 @@ hide-powered-by@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.0.0.tgz#4a85ad65881f62857fc70af7174a1184dccce32b" -highlight.js@9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.4.0.tgz#2687d6cf6df0d57bc68585e836bfe3ab3edf9452" - history@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/history/-/history-3.0.0.tgz#02cff4e6f69dc62dd81161104a63f5b85ead0c85" @@ -3965,7 +3949,7 @@ html-webpack-plugin@2.17.0: pretty-error "^2.0.0" toposort "^0.2.12" -htmlparser2@^3.9.0, htmlparser2@^3.9.1: +htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" dependencies: @@ -4611,10 +4595,6 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -iterate-object@^1.3.0, iterate-object@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/iterate-object/-/iterate-object-1.3.2.tgz#24ec15affa5d0039e8839695a21c2cae1f45b66b" - jest-changed-files@^20.0.3: version "20.0.3" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" @@ -4870,10 +4850,6 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-tree@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/js-tree/-/js-tree-1.1.0.tgz#087ee3ec366a5b74eb14f486016c5e0e631f1670" - js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0: version "3.9.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" @@ -5720,12 +5696,6 @@ map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" -map-o@^2.0.1: - version "2.0.7" - resolved "https://registry.yarnpkg.com/map-o/-/map-o-2.0.7.tgz#7b59395ee87a5200ec2ef881938e9e257f747d61" - dependencies: - iterate-object "^1.3.0" - map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -5734,12 +5704,6 @@ map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" -marked-sanitized@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/marked-sanitized/-/marked-sanitized-0.1.1.tgz#8a5756887217f64fe92e1a92e71d0cc10e767829" - dependencies: - sanitize-html "^1.5.2" - marked-terminal@^1.6.2: version "1.7.0" resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904" @@ -5750,7 +5714,7 @@ marked-terminal@^1.6.2: lodash.assign "^4.2.0" node-emoji "^1.4.1" -marked@0.3.6, marked@^0.3.6: +marked@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" @@ -7610,10 +7574,6 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" -regexp-quote@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/regexp-quote/-/regexp-quote-0.0.0.tgz#1e0f4650c862dcbfed54fd42b148e9bb1721fcf2" - regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -7846,14 +7806,6 @@ sane@~1.6.0: walker "~1.0.5" watch "~0.10.0" -sanitize-html@^1.5.2: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.1.tgz#730ffa2249bdf18333effe45b286173c9c5ad0b8" - dependencies: - htmlparser2 "^3.9.0" - regexp-quote "0.0.0" - xtend "^4.0.0" - sax@^1.2.1, sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -8711,12 +8663,6 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -"truncate-html@https://github.com/jorilallo/truncate-html/tarball/master": - version "0.1.1" - resolved "https://github.com/jorilallo/truncate-html/tarball/master#5856f297610d202045d997965fc8c33be453c2e9" - dependencies: - cheerio "0.22.0" - tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"